Emploi
Company Career Sites Scraper
greenhouse.io, lever.co, ashbyhq.com, myworkdayjobs.com, smartrecruiters.com, workable.com, recruitee.com
La plupart des entreprises publient leurs offres d'emploi via un logiciel de recrutement hébergé (ATS), et chaque ATS structure ses données d'offres différemment. Un endpoint de plugin dédié prend l'URL de la page carrières de l'entreprise sur Greenhouse, Lever, Ashby, Workday, SmartRecruiters, Workable ou Recruitee, ou l'ATS et le nom du site de l'entreprise, détecte l'ATS et renvoie toutes les offres ouvertes dans une seule forme normalisée : identifiant, titre, le lien vers l'offre et vers la candidature, le lieu principal et tous les lieux, le pays, l'indicateur de télétravail et le mode de travail (télétravail, hybride ou sur site), le département et l'équipe, le type de contrat, les dates de publication et de mise à jour, l'identifiant de réquisition, les fourchettes de salaire avec devise et période quand l'ATS publie la rémunération, les champs supplémentaires propres à l'ATS et, avec include_description=true, la description complète en texte et en HTML. Filtrez par mots du titre, lieu, département ou télétravail uniquement, et plafonnez le nombre avec limit, jusqu'à 2 000 offres par appel. Un lien vers une seule offre renvoie uniquement cette offre avec sa description. La réponse contient aussi l'ATS détecté, l'entreprise, l'URL du site, le nombre d'offres publiées et le nombre d'offres correspondantes. Tout est lu à partir des données d'offres publiques que l'ATS sert à ses propres pages carrières : aucun navigateur, aucune connexion et aucun compte ATS.
Ce que vous pouvez extraire
- Identifiant de l'offre, titre et liens vers l'offre et vers le formulaire de candidature
- Lieu principal et tous les lieux de l'offre, pays, indicateur de télétravail et mode de travail (télétravail, hybride ou sur site)
- Département, équipe, type de contrat et identifiant de réquisition
- Dates de publication et de mise à jour
- Fourchettes de salaire avec minimum, maximum, devise et période, quand l'ATS publie la rémunération
- Description complète de l'offre en texte et en HTML (include_description=true)
- Les champs supplémentaires propres à l'ATS, plus l'ATS détecté, l'entreprise, l'URL du site, les offres publiées et les offres correspondantes
- Greenhouse, Lever, Ashby, Workday, SmartRecruiters, Workable et Recruitee, à partir de l'URL d'une page carrières ou de l'ATS et du nom du site
- Filtres par mots du titre, lieu, département et télétravail ; jusqu'à 2 000 offres par appel
Endpoints dédiés
/jobs/career-site Les offres du site carrières d'une entreprise
Toutes les offres ouvertes d'un site carrières hébergé sur Greenhouse, Lever, Ashby, Workday, SmartRecruiters, Workable ou Recruitee, à partir de l'url de sa page carrières, ou de provider et company (le nom du site tel qu'il figure dans l'URL carrières, comme stripe sur Greenhouse ou nvidia.wd5/NVIDIAExternalCareerSite sur Workday). Chaque offre a id, title, company, provider, url, applyUrl, location, locations, country, remote, workplaceType, department, team, employmentType, postedAt, updatedAt, requisitionId, salary et salaryRanges (min, max, currency, interval), customFields et, avec include_description=true, descriptionText et descriptionHtml ; un champ que l'ATS n'expose pas vaut null. keyword (mots du titre), location, department et remote filtrent les offres, limit (1-2 000, 100 par défaut) les plafonne, et proxy_country est facultatif. La réponse ajoute provider, company, companyName, boardUrl, totalJobs, matchedJobs, resultsCollected, pagesFetched et warnings. Un lien vers une seule offre renvoie cette offre avec sa description.
Comment le scraper
curl -X POST \
-H "X-ScrapeUnblocker-Key: $SU_API_KEY" \
"https://api.scrapeunblocker.com/jobs/career-site?url=https%3A%2F%2Fjobs.ashbyhq.com%2Framp&keyword=engineer"import requests
resp = requests.post(
"https://api.scrapeunblocker.com/jobs/career-site",
headers={"X-ScrapeUnblocker-Key": SU_API_KEY},
params={"url": "https://jobs.ashbyhq.com/ramp", "keyword": "engineer"},
)
print(resp.text)import { ScrapeUnblockerClient } from 'scrapeunblocker';
const su = new ScrapeUnblockerClient({ apiKey: process.env.SU_API_KEY });
const board = await su.careerSiteJobs('https://jobs.ashbyhq.com/ramp', {
keyword: 'engineer',
includeDescription: true,
});
console.log(board); Les requêtes sont en POST et passent leurs paramètres dans la query string. Le rendu navigateur a toujours lieu : aucun flag à activer.
Exemple de réponse
{
"provider": "ashby",
"company": "ramp",
"companyName": null,
"boardUrl": "https://jobs.ashbyhq.com/ramp",
"totalJobs": 165,
"matchedJobs": 39,
"resultsCollected": 39,
"jobs": [
{
"id": "34413f8d-26bf-4bbc-8ade-eb309a0e2245",
"title": "Security Engineer, Cloud",
"company": "ramp",
"provider": "ashby",
"url": "https://jobs.ashbyhq.com/ramp/34413f8d-26bf-4bbc-8ade-eb309a0e2245",
"applyUrl": "https://jobs.ashbyhq.com/ramp/34413f8d-26bf-4bbc-8ade-eb309a0e2245/application",
"location": "New York, NY (HQ)",
"locations": [ "New York, NY (HQ)", "Remote (Canada)", "Remote (US)" ],
"country": null,
"remote": true,
"workplaceType": "hybrid",
"department": "Engineering",
"team": "Backend",
"employmentType": "Full-time",
"postedAt": "2026-04-07T17:12:35.753+00:00",
"updatedAt": null,
"requisitionId": null,
"salary": {
"min": 211400.0,
"max": 290600.0,
"currency": "USD",
"interval": "year",
"text": "$211.4K - $290.6K"
},
"salaryRanges": [
{
"min": 211400.0,
"max": 290600.0,
"currency": "USD",
"interval": "year",
"text": "$211.4K - $290.6K"
}
],
"customFields": null,
"descriptionText": null,
"descriptionHtml": null
},
{
"id": "f564dcf9-9390-4a3f-896f-8047a5086040",
"title": "Mobile Engineer, Android",
"company": "ramp",
"provider": "ashby",
"url": "https://jobs.ashbyhq.com/ramp/f564dcf9-9390-4a3f-896f-8047a5086040",
"applyUrl": "https://jobs.ashbyhq.com/ramp/f564dcf9-9390-4a3f-896f-8047a5086040/application",
"location": "New York, NY (HQ)",
"locations": [ "New York, NY (HQ)", "Remote (Canada)", "San Francisco, CA" ],
"country": null,
"remote": true,
"workplaceType": "hybrid",
"department": "Engineering",
"team": "Mobile",
"employmentType": "Full-time",
"postedAt": "2025-07-31T21:58:34.674+00:00",
"updatedAt": null,
"requisitionId": null,
"salary": { "min": 189000.0, "max": 330000.0, "currency": "USD", "interval": "year", "text": "$189K - $330K" },
"salaryRanges": [
{ "min": 189000.0, "max": 330000.0, "currency": "USD", "interval": "year", "text": "$189K - $330K" }
],
"customFields": null,
"descriptionText": null,
"descriptionHtml": null
}
],
"query": {
"keyword": "engineer",
"location": null,
"department": null,
"remote": false,
"limit": 100,
"includeDescription": false,
"job": null
},
"pagesFetched": 1,
"warnings": []
} Lire la documentation de l'API
Questions fréquentes
Le scraping des sites carrières des entreprises est-il légal ?
Collecter des offres d'emploi publiées publiquement sur les sites carrières des entreprises est licite dans de nombreuses juridictions, mais les règles dépendent de votre pays, des données collectées et de leur usage. Une description d'offre nomme parfois un recruteur ou un responsable du recrutement, ce qui peut constituer une donnée personnelle, respectez donc les règles de confidentialité qui s'appliquent à vous. ScrapeUnblocker renvoie les offres publiques ; ce que vous collectez et comment vous l'utilisez relève de votre responsabilité.
Comment scraper les offres Greenhouse, Lever ou Workday sans se faire bloquer ?
Le plugin /jobs/career-site lit les données d'offres publiques de chaque ATS, le même JSON que chargent ses pages carrières, avec un client HTTP depuis des sorties ISP : aucun navigateur ni rendu de page n'intervient. Chaque worker d'un appel garde une connexion sur une même sortie tant que l'ATS répond, ce qui compte sur Workday, où un grand site demande des dizaines de pages de liste, et une sortie que l'ATS refuse (un 403, un 429 ou une réponse qui n'est pas ses données d'offres) est mise au repos pour cet ATS et remplacée par une sortie neuve. Dans le benchmark de ScrapeUnblocker, 100 % des 1 101 appels, chacun sur le site carrières d'une entreprise différente, ont renvoyé des données, en environ 1,6 s par appel.
Quels ATS sont pris en charge, et comment indiquer un site ?
Greenhouse, Lever, Ashby, Workday, SmartRecruiters, Workable et Recruitee. Passez la page carrières de l'entreprise sur l'ATS en url, comme https://job-boards.greenhouse.io/stripe, https://jobs.lever.co/palantir, https://jobs.ashbyhq.com/ramp, https://nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSite, https://jobs.smartrecruiters.com/Ubisoft2, https://apply.workable.com/huggingface ou https://bunq.recruitee.com, et l'ATS et le site en sont déduits. Ou passez provider et company : le token du site Greenhouse, le slug Lever, Ashby, Workable ou Recruitee, l'identifiant d'entreprise SmartRecruiters, ou tenant.wdN/site pour Workday. Une page carrières sur le propre domaine de l'entreprise n'est pas lue directement ; utilisez le lien ATS vers lequel pointent ses boutons d'offres.
Combien d'offres puis-je obtenir par appel ?
limit plafonne les offres renvoyées : 100 par défaut, jusqu'à 2 000. Greenhouse, Ashby, Workable et Recruitee livrent tout le site en une seule réponse, les filtres s'appliquent donc côté ScrapeUnblocker et toutes les offres correspondantes reviennent. Lever et SmartRecruiters sont lus par pages de 100 offres et Workday par pages de 20, et seules les pages dont limit a besoin sont lues ; le mot-clé est aussi transmis à la recherche propre de Workday et de SmartRecruiters, et les filtres de lieu, de département et de télétravail de Workday sont utilisés quand le site en a un qui correspond. Workday ne répond pas au-delà de 2 000 offres de profondeur dans une recherche, réduisez donc un grand site Workday avec keyword ou location. totalJobs et matchedJobs donnent la taille du site et du résultat, et warnings signale quand un ATS a cessé de répondre en cours de route.
Est-ce que j'obtiens les salaires et les descriptions complètes des offres ?
Le salaire revient quand l'ATS publie la rémunération, comme les fourchettes de rémunération de Greenhouse, les fourchettes de salaire de Lever ou la rémunération d'Ashby, lorsque l'entreprise les renseigne : salary est la fourchette principale et salaryRanges toutes les fourchettes, chacune avec min, max, currency et interval ; sinon salary vaut null et salaryRanges est vide. La description complète arrive avec include_description=true, en texte et en HTML. Greenhouse, Lever, Ashby, Workable et Recruitee l'incluent dans les données du site ; sur Workday et SmartRecruiters, chaque description est une requête distincte, lue pour au plus 300 offres par appel.
Combien coûte le scraping des sites carrières ?
Chaque requête à l'ATS qui renvoie des données est facturée comme une requête, et pagesFetched indique le nombre exact : un site Greenhouse, Ashby, Workable ou Recruitee entier fait 1 requête quel que soit son nombre d'offres, Lever et SmartRecruiters font 1 requête par tranche de 100 offres lues et Workday 1 par tranche de 20, et sur Workday et SmartRecruiters chaque description lue avec include_description=true en ajoute une. 1 requête = 1 crédit, 1,00 EUR pour 1 000 en paiement à l'usage, en descendant jusqu'à environ 0,55 EUR pour 1 000 sur l'offre Ultimate. Les blocages et les timeouts ne sont pas facturés, et l'essai gratuit inclut 500 requêtes sans carte bancaire.
Scrapers similaires
Company Career Sites et les autres noms et marques de greenhouse.io, lever.co, ashbyhq.com, myworkdayjobs.com, smartrecruiters.com, workable.com, recruitee.com appartiennent à leur titulaire et ne servent ici qu'à désigner le site avec lequel cette API fonctionne. ScrapeUnblocker est un service indépendant, sans lien avec le titulaire de greenhouse.io, lever.co, ashbyhq.com, myworkdayjobs.com, smartrecruiters.com, workable.com, recruitee.com, et n'est ni approuvé ni parrainé par lui.
Commencez à scraper ce site dès aujourd'hui
Palier gratuit inclus. Aucune carte bancaire requise pour tester.