Comment nos données d’emploi sont produites

Cette page décrit comment une offre devient une donnée chez nous : d’où elle vient, qui affirme chaque valeur, et où nous ne savons tout simplement pas. Elle est écrite pour être vérifiée. Chaque règle ci-dessous correspond au code déployé, pas à une intention.

Ce que couvre cette page

Elle décrit l’index agrégé qui alimente la plateforme, les interfaces publiques et les jeux de données. Deux choses en sont volontairement exclues : le classement et la pertinence de la recherche, qui relèvent du produit, et les données de coworking, qui viennent d’une source distincte.

L’API REST publique v2 est disponible à /api/public/v2/jobs avec provenance par champ. L’outil MCP get_job fournit le même enregistrement complet. Les recherches structurées utilisent v2 ; les quatre paramètres simples seuls conservent le contrat v1.

D’où viennent les offres

Il y a deux entrées dans l’index. Les offres agrégées proviennent de flux publics : outils de recrutement des employeurs, sites d’emploi et méta-agrégateurs. Les offres directes sont déposées chez nous par les employeurs eux-mêmes. La distinction n’est pas administrative, elle décide de ce que nous pouvons affirmer : pour une offre déposée chez nous, nous avons parlé à l’employeur ; pour une offre agrégée, seulement à la source. Chaque offre indique aussi le type de sa source, c’est-à-dire la distance qui sépare l’offre de l’entreprise.

Type de sourceCe que cela signifie
atsL’outil de recrutement de l’employeur. Le chemin le plus court : l’offre se trouve là où l’entreprise la tient elle-même à jour.
job_boardUn site d’emploi. L’offre y a été publiée, donc les champs viennent du site et non directement de l’entreprise.
aggregatorUn méta-agrégateur. L’offre est déjà passée par une couche de collecte avant nous, donc au moins une réécriture de plus.
governmentUne source publique. Aucune n’est active actuellement, voir la section sur la Bundesagentur ci-dessous.
unknownLe type de source n’est pas classé. Nous ne le devinons pas.

La Bundesagentur für Arbeit a été retirée en août 2026

Le 21 août 2026, nous avons retiré l’agence fédérale allemande pour l’emploi comme source, pour des raisons juridiques et non de qualité des données. Le service compétent nous a confirmé par écrit que son interface de recherche d’emploi est une interface interne destinée à sa propre application et que la lecture des offres par ce biais n’est pas autorisée. Par ailleurs, ses conditions n’accordent de droits d’usage sur une offre qu’à l’agence elle-même et aux partenaires de coopération choisis par l’employeur. Nous n’avons jamais été choisis, nous n’avons donc jamais détenu le droit de republier le texte de l’offre. C’est pourquoi la source a été retirée et pas seulement désindexée.

Ce fut une intervention sur le volume, pas sur la qualité. La taille actuelle de l’index figure plus bas, avec une date de référence. Nous ne donnons volontairement aucun écart avant-après ici, car il ne serait pas vérifiable sur cette page. Il reste surtout des outils de recrutement d’employeurs et des sites d’emploi dont les conditions couvrent réellement la rediffusion. Un accord de coopération ultérieur pourrait rouvrir la source, via l’interface prévue pour cela.

Ce que nous ne pouvons pas transmettre

Certaines sources autorisent l’affichage sur nos propres pages avec mention de la source mais interdisent toute republication au-delà. Pour celles-là, nous ne transmettons à des tiers ni le texte de l’offre ni l’URL de candidature : les deux champs sortent vides. Une limite a sa place ici, parce qu’elle contredit le reste de cette page : un champ retenu pour des raisons juridiques ressemble aujourd’hui exactement à un champ que nous n’avons jamais eu. Nous n’émettons aucun marqueur qui distingue les deux. Un texte d’offre vide venant de ces sources ne doit donc pas se lire comme un employeur qui n’a rien écrit. Qui veut lire l’offre peut le faire sur sa page de détail ici.

Comment le mode de travail est déterminé

À l’ingestion, un classificateur à règles décide à partir de signaux structurés. Il est précis mais aveugle au sens : un « Remote Operations Producer » produit des diffusions à distance et n’est pas un poste en télétravail, et un poste sur site dont le texte mentionne seulement le mot remote ressemble exactement à un motif. Par-dessus, un petit modèle de langage lit donc l’offre complète et renvoie télétravail, hybride ou sur site.

À la diffusion, les contradictions dans le texte actuel priment sur un ancien verdict du modèle. Une présence obligatoire implique un classement hybride, même pour des événements rares ou une condition géographique. Les visites purement facultatives ne constituent pas une obligation. Le label de télétravail confirmé exige aussi un verdict atteignant le seuil de confiance. Ce classement automatique ne constitue ni une garantie de l’employeur ni une certification manuelle indépendante.

Mode de travail et conditions géographiques sont distincts. Une résidence explicitement exigée en Irlande reste limitée à l’Irlande, même si l’offre appartient au corpus UE. Le périmètre général de l’index ne prouve pas une admissibilité dans toute l’UE ou dans le monde. L’inconnu reste inconnu. Cette page ne présente pas de taux d’erreur du classificateur validé de manière indépendante.

Comment un salaire est établi

Les salaires sont résolus au moment de la diffusion, en trois niveaux, dans cet ordre : la valeur enregistrée à l’ingestion, une nouvelle lecture par règles du texte actuel, une extraction par un modèle de langage. Si aucun niveau ne trouve rien, le champ reste vide ; la seule exception est la dérivation légale Minijob décrite plus bas, qui n’est pas un salaire indiqué mais un plafond légal. À la résolution, nous ne greffons jamais une borne d’un niveau sur une borne d’un autre : chaque niveau est pris comme une paire entière, car les mélanger pourrait inverser une fourchette, par exemple au moins 5000 pour au plus 4000. Un cas mérite pourtant d’être nommé. À l’ingestion, chaque borne est remplie séparément : un flux peut donc fournir la borne basse tandis que notre propre lecture du texte fournit la haute. Cette paire mixte est enregistrée puis traitée plus tard comme un seul niveau, et nous attribuons toute la fourchette à notre propre extraction. Cela sous-estime la source plutôt que de lui prêter un chiffre qu’elle n’a jamais énoncé.

ProvenanceCe qu’elle indique
source_structuredLa source a fourni le salaire comme champ structuré. Une affirmation d’un tiers que l’employeur pourrait contester, mais pas la nôtre.
nomado24_extractedNous avons lu le chiffre dans le texte de l’offre, par règle ou par modèle. Notre lecture, présentée comme telle, même quand nous sommes sûrs.
legal_derivationDérivée d’une règle légale nommée. Un seul cas à ce jour : pour un Minijob allemand, le plafond légal de gains de 603 euros par mois est aussi le plafond de salaire, même si l’offre ne cite aucun chiffre.
unknownAucune provenance n’est établie. Cela inclut les enregistrements antérieurs à la colonne de provenance : ne plus savoir quel niveau a posé le chiffre n’autorise pas à l’attribuer à la source.

Le plafond Minijob dérivé est livré avec son identifiant de règle (de.minijob.monthly_earnings_ceiling), sa version (2026-01) et sa date d’entrée en vigueur, afin qu’un consommateur puisse le recalculer ou le rejeter. Ce plafond est relevé presque chaque année, c’est pourquoi le chiffre sans version serait sans valeur. Ce n’est explicitement pas une offre de l’employeur : un Minijob peut payer tout montant jusqu’à ce plafond. Tous les montants sont normalisés en euros mensuels ; la période citée par l’offre elle-même, un taux horaire par exemple, est transmise séparément.

Le fait le plus important sur le salaire est une absence : la grande majorité des offres ne mentionne aucun salaire. Nous ne comblons pas ce vide par des estimations, des moyennes sectorielles ou des fourchettes de postes comparables.

Vérifier la provenance salariale via l’API publique

L’API publique v2 et l’outil MCP get_job exposent salaryOrigin et la provenance de chaque champ. Champ source, extraction du texte et dérivation légale ont des significations différentes. L’ancienne distribution de l’échantillon d’août n’est plus publiée ici : ses agrégats ne permettent pas un recalcul selon la politique actuelle de sources.

Pour les offres qui indiquent un salaire, compter source_structured et nomado24_extracted, en excluant legal_derivation. Vérifier aussi période, devise, date et taille du sous-ensemble. REST utilise /api/public/v2/jobs?limit=25 : limit appartient à v2, per_page à v1 et MCP.

Comment la forme d’emploi est déterminée

Nous portons deux vocabulaires à la fois. L’un est le vocabulaire grossier de schema.org sur lequel les moteurs filtrent : temps plein, temps partiel, prestation, stage, durée déterminée. L’autre est le plus fin, qui distingue Minijob, étudiant salarié, apprentissage, stage, activité indépendante, prestation, durée déterminée, temps partiel et temps plein. Depuis le 26 août 2026, les déclarations structurées de la source elle-même (Personio, par exemple) entrent en premier, réunies avec notre propre dérivation. La provenance est consignée pour la liste entière, avec une modestie délibérée : elle ne vaut déclaration de la source que si chaque forme en provient, sinon elle compte comme notre classification.

Les deux sont réunis et non substitués ; les formes fines viennent en premier (celles déclarées par la source avant nos dérivations), puis schema.org. La raison est le compartiment temps partiel de schema.org : il ne peut distinguer un Minijob d’un poste d’étudiant salarié ni d’un temps partiel ordinaire. Le remplacer par notre forme ferait perdre exactement ces offres à quiconque filtre sur temps partiel. Comme les deux valeurs sont présentes, un filtre temps partiel les trouve toujours, et qui pense Minijob peut dire Minijob. Dans l’autre sens, schema.org réunit prestation et activité indépendante en une seule valeur, et nous n’inventons pas cette distinction dans une couche qui ne l’a jamais faite.

Une liste vide signifie : non déterminé. Elle ne signifie pas qu’aucune forme d’emploi ne s’applique.

Fraîcheur et vérification

Cinq dates que l’on confond volontiers. Elles disent délibérément des choses différentes, et une seule est une affirmation de l’employeur.

ChampCe qu’il signifie
publishedAtLa date de publication telle que la source l’indique. Si elle n’en indique aucune, le champ est absent. Nous ne substituons pas la date à laquelle nous avons trouvé l’offre.
firstSeenAtQuand nous avons vu l’offre pour la première fois. Une observation de notre part, pas une affirmation de l’employeur.
lastVerifiedAtQuand nous l’avons vérifiée pour la dernière fois, toujours avec la méthode : soit nous avons appelé l’URL d’origine et elle a répondu, soit l’offre était encore présente dans le flux. Les deux sont de vraies preuves, et la plus faible n’est jamais présentée comme la plus forte. Un appel resté sans réponse, c’est-à-dire un délai dépassé, une erreur serveur, une limitation ou une barrière anti-robots, ne compte pas comme un appel : l’offre revient alors à la présence dans le flux, avec l’horodatage correspondant. Là où ce champ annonce l’appel, quelqu’un a donc bien répondu.
updatedAtQuand la représentation que nous diffusons a changé pour la dernière fois, par exemple le titre, le texte, l’entreprise ou le salaire. Une simple nouvelle observation n’est pas un changement, sinon tout l’index serait « modifié » toutes les quatre heures.
expiresAtLa fin d’une fenêtre de validité glissante de 30 jours depuis la dernière observation, ou une date antérieure si la source en donne une. Le plus souvent notre fenêtre, donc, et non un délai de candidature fixé par l’employeur.

Comment une offre est revérifiée

Les grands agrégateurs continuent souvent de relayer une offre longtemps après que le poste a été pourvu chez l’employeur. Elle reste alors visible dans le flux et ne vieillirait jamais alors que son lien de candidature est déjà mort. Nous appelons donc activement les URL d’origine des offres actives, les moins récemment vérifiées d’abord, par lots, et jamais deux fois en douze heures. Seuls 404 et 410 comptent comme disparition certaine et mettent fin à l’offre. Délais dépassés, erreurs serveur, limitations et barrières anti-robots comptent comme non concluants, et non concluant signifie conserver. Supprimer un poste ouvert à cause d’une panne brève serait l’erreur la plus coûteuse. Ce choix a un prix, mais il ne retombe pas sur l’horodatage ci-dessus : un appel non concluant maintient l’offre en vie sans valoir confirmation. Nous retenons ce que chaque vérification a conclu, et seul un appel ayant réellement obtenu une réponse est annoncé ci-dessus comme appel. Tout le reste revient à la présence dans le flux. Une offre derrière une barrière anti-robots ne paraît donc pas fraîchement confirmée. Les offres sans URL d’origine appelable sont exclues de cette vérification, plutôt que de compter comme vérifiées sans qu’aucune requête ne soit partie.

L’ingestion tourne toutes les quatre heures, et chaque passage rafraîchit les observations, vérifie les liens et clôt ce qui a expiré. Quatre heures sont toutefois la cadence du travail, non une garantie de parution. Chaque source porte en plus son propre intervalle minimal entre deux appels et se voit ignorée jusqu’à ce qu’il soit écoulé : 6 heures pour Remotive, 24 heures pour Adzuna. Une offre mise en ligne juste après le dernier appel de sa source attend donc le prochain passage où cette source est due, ce qui peut dépasser largement une seule fenêtre.

Le cœur : l’absence est publiée comme un fait

La règle dont tout le reste découle : absent vaut mieux que deviné. Là où nous n’avons pas de valeur, le champ reste vide, et ce vide est l’information. Là où nous en avons une, nous disons qui l’affirme. Le modèle de données le fait par champ et non par offre : un champ non évident porte une entrée de provenance avec son type, sa source, l’instant d’observation, la méthode et la version de la méthode. Cela permet à chacun de juger lui-même la valeur d’une donnée au lieu de se fier à une note globale de notre part.

Type de provenanceSignification
employer_factL’employeur l’a indiqué lui-même. Réservé à nos propres offres. La sortie agrégée n’utilise pas ce type actuellement, car personne n’y a parlé directement avec nous.
source_factLa source l’a indiqué. Une affirmation d’un tiers avec laquelle l’employeur peut être en désaccord.
nomado24_classificationNous l’avons dérivé, par règle, heuristique ou modèle. Notre lecture, signalée comme telle.
legal_derivationCela découle d’une règle légale nommée, livrée avec son identifiant, sa version et sa date d’entrée en vigueur.

Une garantie que nous ne donnons expressément pas : qu’une provenance puisse être établie pour chaque valeur. Sur une petite part des offres, surtout celles ingérées avant l’existence de la colonne de provenance, un salaire est présent et sa provenance indique inconnu. Nous montrons alors les deux, la valeur et l’aveu. Les solutions de rechange seraient de taire le chiffre ou de lui attribuer une couche qui ne l’a peut-être jamais posé, et toutes deux sont pires.

Une provenance n’est jamais rehaussée. Une valeur lue dans un texte reste notre classement, même si nous sommes très sûrs. La confiance n’est pas la provenance, et confondre les deux est précisément le tour que cette page veut empêcher.

Concrètement, cela veut dire une série de choses que nous ne faisons pas :

  • Nous n’attribuons aucune catégorie professionnelle, même quand une source en déclare une (Personio le fait) : sans vocabulaire commun aux sources, toute correspondance serait inventée. Une liste de catégories vide est plus honnête.
  • Nous ne dérivons pas de région comme DACH ou EEE depuis « Allemagne ». Qu’un poste soit en Allemagne ne dit pas que l’employeur accepterait une candidature autrichienne. Une liste de régions vide signifie non déterminé, jamais non éligible.
  • Nous n’extrayons ni ville ni région depuis l’indication de lieu, et pour un périmètre multi-pays nous ne nommons aucun pays représentatif.
  • Nous n’affirmons pas si un salaire est brut ou net. En Allemagne le brut est l’usage, mais aucune de nos sources ne l’indique de façon lisible par machine.
  • Nous ne livrons pas d’extrait de texte à l’appui d’un salaire trouvé. Nous ne le conservons pas, et en reconstruire un serait fabriquer une preuve.
  • Nous ne publions pas un résumé de modèle dont le texte d’origine a changé depuis. Ce serait une affirmation sur une offre qui n’existe plus sous cette forme.
  • Nous traitons une entreprise comme un nom, pas comme une personne morale vérifiée. Un employeur qui publie via deux systèmes sous deux orthographes apparaît deux fois, et nous ne prétendons rien d’autre.

Couverture, avec date de référence

Ces chiffres proviennent du jeu de données public à la date indiquée. Ils comptent les entrées actives issues de sources autorisées pour les agrégats. Ils décrivent ce périmètre, pas un échantillon représentatif du marché ni une mesure de précision du classificateur.

Au:

IndicateurValeur
Offres actives dans l’index14 656
avec un salaire enregistré (jeu de données public)9,7 %
entièrement en télétravail (colonne d’ingestion)38,2 %
hybrides (colonne d’ingestion)61,8 %
avec périmètre Allemagne48,5 %
vues pour la première fois dans les sept derniers jours21,3 %

Comment lire ces chiffres

  • Il s’agit d’un instantané daté. Le jeu de données lié peut désormais contenir des valeurs plus récentes ; il ne remplace pas cette observation historique.
  • Télétravail et hybride désignent la colonne enregistrée à l’ingestion. Le classement affiché peut changer après vérification du modèle et du texte actuel. Ni le sens ni l’ampleur de cet écart ne peuvent être supposés.
  • On compte des annonces, pas des employeurs. Une première observation depuis sept jours ne donne ni l’âge du poste ni le nombre de nouveaux emplois du marché.
  • La couverture salariale compte les valeurs plausibles enregistrées depuis la source ou extraites du texte. Un plafond légal dérivé seulement à la diffusion ne l’augmente pas. Les percentiles concernent uniquement les offres avec des valeurs salariales.

Jeu de données pour recalculer: www.nomado24.com/remote-jobs-statistik.json

Page statistiques avec les chiffres du jour

Si quelque chose est faux

Si une offre porte une valeur inexacte, nous voulons le savoir, avec l’adresse de la page de détail. Pour une offre agrégée nous ne pouvons pas corriger la source, mais nous pouvons clore l’offre ou rectifier notre propre classement. Nous préférons qu’une erreur de classement soit signalée plutôt qu’ignorée : une méthodologie ne vaut que sa boucle de correction.

Contact: anton.petuchow@nomado24.de

Ensuite