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.

Une note sur la disponibilité, pour que cette page ne promette pas plus que ce qui est ouvert : la provenance par champ décrite plus bas appartient au modèle de données et est émise par la deuxième version de l’API emplois. Cette version n’est pas encore disponible pour tous. Les règles régissent malgré tout les données elles-mêmes, y compris ce que montrent la plateforme et les interfaces ouvertes aujourd’hui.

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.

Lorsqu’un verdict du modèle existe, il prime sur la couche de règles. Seul un verdict atteignant la confiance minimale configurée est appliqué, élevée par défaut. Un verdict incertain est écarté et l’offre conserve son classement par règles. La raison est très concrète : une erreur d’un modèle peu coûteux ne doit pas pouvoir faire disparaître un vrai poste en télétravail. Si une source modifie ensuite le texte, le verdict est reformé, détecté grâce à une somme de contrôle du texte dont venait l’ancien verdict.

Télétravail et hybride restent distincts et ne sont jamais fondus en « plus ou moins à distance ». Un verdict sur site ne fait pas expirer l’offre : l’enregistrement reste actif, il est filtré à la diffusion, et sa page de détail répond 404. La différence compte, car une date d’expiration serait une affirmation sur le poste, alors qu’il s’agit ici d’une affirmation sur notre classement. Quand le mode de travail ne peut pas être déterminé, il est indiqué comme inconnu.

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.

Quelle couche intervient, et à quelle fréquence

Cette répartition est la preuve réelle de tout ce qui précède, c’est pourquoi elle figure ici et pas seulement dans la section couverture. Mesurée sur un échantillon de 2000 offres le 2026-08-25, sur l’ensemble diffusé. Contrairement aux chiffres plus bas, elle ne peut pas être recalculée aujourd’hui depuis une adresse publique : la taille de l’échantillon et la date l’accompagnent donc explicitement.

PartCe qu’elle compte
8,1 %Un salaire est présent, quelle que soit celle des trois couches qui l’a fourni.
7,5 %L’offre elle-même indique un chiffre, soit par un champ structuré de la source, soit lu par nous. C’est la valeur à utiliser pour toute phrase du type « tant d’offres indiquent un salaire ».
0,6 %La source fournit le salaire comme champ structuré. Une part très faible à la date de référence, et c’est là le vrai constat ; depuis le mappage Personio du 26 août 2026, elle augmente.
6,9 %Nous avons lu le chiffre dans le texte de l’offre. La grande majorité de toutes les valeurs de salaire.
0,15 %Plafond légal Minijob dérivé. Ces offres n’indiquent aucun salaire et ne sont donc pas comprises dans la ligne « l’offre indique un chiffre ».
5,8 %Ce que rapporte le jeu de données statistiques public. Plus bas, car il ne compte que les colonnes enregistrées et pas la relecture effectuée à la diffusion.

Presque chaque salaire indiqué ici est donc notre lecture et non une affirmation d’une source. C’est exactement pourquoi chaque salaire porte la couche qui l’a produit : sans cette étiquette, un champ structuré de la source et un chiffre lu par nous dans un texte se ressemblent, alors qu’ils ne valent pas la même chose.

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

Une méthodologie sans chiffres est une affirmation. Les valeurs ci-dessous décrivent à quel point l’index est réellement complet, y compris les parts inconfortables. La population est l’ensemble des offres actives au moment de la collecte.

Au:

IndicateurValeur
Offres actives dans l’index3 588
avec un salaire enregistré (jeu de données public)5,8 %
entièrement en télétravail (colonne d’ingestion)48,8 %
hybrides (colonne d’ingestion)51,2 %
avec périmètre Allemagne57,8 %
vues pour la première fois dans les sept derniers jours14,9 %

Comment lire ces chiffres

  • Les chiffres viennent du jeu de données statistiques public et peuvent y être recalculés. Ils sont figés ici pour qu’une citation reste vérifiable plus tard. Les valeurs du jour se trouvent dans le jeu de données lui-même, avec son propre horodatage de collecte.
  • La répartition télétravail contre hybride est la colonne posée à l’ingestion, comptée sur toute la table active, donc avant le verdict du modèle. Sur la plateforme, le verdict du modèle se superpose : il déplace certaines offres de télétravail vers hybride et retire les offres sur site. La part de télétravail réellement diffusée est donc plus basse que celle indiquée ici.
  • Ce sont des offres qui sont comptées, pas des employeurs. Une entreprise avec vingt postes apparaît vingt fois.
  • Nous ne publions volontairement aucun taux pour la forme d’emploi. Le jeu de données public n’en calcule aucun, et un chiffre que personne ne peut recalculer n’a pas sa place ici. Par offre, la valeur et sa provenance accompagnent l’enregistrement lui-même.
  • La part salaire de ce tableau est celle du jeu de données public, qui ne compte que les colonnes enregistrées. La répartition complète sur les trois couches figure dans la section salaire et elle est plus élevée, car nous relisons le texte à la diffusion. Le plafond Minijob dérivé ne compte comme salaire indiqué dans aucun des deux chiffres.

Jeu de données pour recalculer: www.nomado24.de/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