Indeed n'a pas d'API de recherche d'offres, et une requête simple reçoit une vérification de sécurité, pas des offres. Web Unlocker ouvre la recherche dans un vrai navigateur et renvoie la page avec 50 fiches d'offres, salaire et note compris, facturée comme une page : 1 000 offres pour 2 cents.
1 000 requêtes gratuites · Facturé en cas de succès · 195+ pays · Prêt pour Claude
Les pages Indeed mettent de 10 à 30 secondes à se charger. Le travail continue, inutile de cliquer à nouveau.
Prêt pour vos propres recherches ? Obtenez une clé API ou réservez une démo.
Parlez-nous un peu de votre équipe et recevez :
Une page de recherche Indeed contient 50 fiches d'offres avec salaire, note de l'entreprise et date de publication, et Web Unlocker la facture comme une seule page. Les scrapers Indeed d'Apify et de Bright Data facturent chaque offre comme un enregistrement distinct.
Une page, 50 offres.
Vingt pages, 1 000 offres.
Besoin de la description complète ? La page de chaque offre est une requête de plus : 1 000 offres avec descriptions reviennent donc à $1.00. Découpez un marché par date, rayon, salaire ou télétravail, et chaque tranche est une page de 50 offres de plus.
Ce que coûtent 1 000 offres Indeed avec descriptions complètes
20 pages de recherche et 1 000 pages d'offres, aux prix publiés
Bright Data, l'Indeed Scraper d'Apify et l'Indeed Job Scraper sur Apify facturent chaque offre comme un enregistrement : 1 000 enregistrements aux prix du paiement à l'usage et du forfait Free.
Cent pages Indeed demandées l'une après l'autre, sans nouvel essai : recherches d'emploi dans 40 villes, pages d'offres, pages d'entreprises, pages d'avis et quatre sites nationaux. Voici ce qui revient, et à quelle vitesse.
Une page qui ne revient pas coûte $0.
Vous payez des pages, pas des essais.
Triez une recherche par date ou limitez-la aux 24 dernières heures, et les offres les plus récentes arrivent en tête. Votre script demande cette page aussi souvent que vous voulez : une vérification par heure fait 24 pages par jour, $0.71 par mois.
Les jeux de données d'offres sont mis à jour chaque mois.
Votre page est celle du jour.
Scraper Indeed sans analyser le HTML : le JSON propre à Indeed se trouve dans chaque page de recherche, 50 offres avec titre, entreprise, salaire, note et date de publication. La page d'une offre porte sa description complète de la même façon.
Remplissez le formulaire ci-dessus. La clé arrive par e-mail sous un jour ouvré.
Une recherche avec limit=50 pour 50 offres, la page d'une offre pour sa description, ou l'onglet des offres d'une entreprise, page après page.
Découpez le tableau des résultats dans la page et vous avez chaque champ qu'Indeed affiche, du salaire à la date de publication.
pip install requestsGOLOGIN_SCRAPING_API_KEY=your_key python indeed_jobs.pyhttps://parsing.webunlocker.gologin.com/v1/scrapeimport json
import os
import time
from urllib.parse import urlencode
import requests
query = "marketing manager"
where = "Austin, TX"
def scrape(url):
for attempt in range(3):
response = requests.get(
"https://parsing.webunlocker.gologin.com/v1/scrape",
params={"url": url, "geo": "us", "format": "json"},
headers={"apikey": os.environ["GOLOGIN_SCRAPING_API_KEY"]},
timeout=90,
)
page = response.json().get("data", {}).get("html", "") if response.ok else ""
if '"results":[{' in page:
return page
time.sleep(5)
raise RuntimeError("No jobs came back, try again later")
def embedded(page, marker):
start = page.index(marker) + len(marker) - 1
value, _ = json.JSONDecoder().raw_decode(page[start:])
return value
search = "https://www.indeed.com/jobs?" + urlencode({"q": query, "l": where, "limit": 50})
page = scrape(search)
jobs = [
{
"title": job["title"],
"company": job["company"],
"location": job["formattedLocation"],
"salary": (job.get("salarySnippet") or {}).get("text"),
"rating": job.get("companyRating") or None,
"posted": job.get("formattedRelativeTime"),
"sponsored": job.get("sponsored", False),
"url": "https://www.indeed.com/viewjob?jk=" + job["jobkey"],
}
for job in embedded(page, '"results":[')
]
print(json.dumps({"query": query, "where": where, "jobs_on_page": len(jobs), "jobs": jobs}, indent=2, ensure_ascii=False))GOLOGIN_SCRAPING_API_KEY=your_key node indeed-descriptions.mjshttps://parsing.webunlocker.gologin.com/v1/scrapeconst search = 'https://www.indeed.com/jobs?q=registered+nurse&l=Remote&limit=50';
const wanted = 5;
async function scrape(url, marker) {
for (let attempt = 1; attempt <= 3; attempt++) {
const params = new URLSearchParams({ url, geo: 'us', format: 'json' });
const response = await fetch(`https://parsing.webunlocker.gologin.com/v1/scrape?${params}`, {
headers: { apikey: process.env.GOLOGIN_SCRAPING_API_KEY },
});
const page = response.ok ? (await response.json()).data?.html : '';
if (page?.includes(marker)) return page;
await new Promise((resolve) => setTimeout(resolve, 5000));
}
throw new Error(`Nothing came back for ${url}, try again later`);
}
const field = (page, name) => JSON.parse(page.match(new RegExp(`"${name}":("(?:[^"\\\\]|\\\\.)*")`))?.[1] ?? '""');
const text = (markup) => markup.replace(/<[^>]+>/g, ' ').replace(/&/g, '&').replace(/ /g, ' ').replace(/\s+/g, ' ').trim();
const listing = await scrape(search, '"results":[{');
const keys = [...new Set([...listing.matchAll(/"jobkey":"([0-9a-f]{16})"/g)].map((match) => match[1]))];
console.log(`${keys.length} jobs on the search page, reading the first ${wanted} in full`);
for (const key of keys.slice(0, wanted)) {
const job = await scrape(`https://www.indeed.com/m/viewjob?jk=${key}`, '"sanitizedJobDescription"');
const description = text(field(job, 'sanitizedJobDescription'));
console.log(`\n${field(job, 'jobTitle')} at ${field(job, 'companyName')}, ${field(job, 'formattedLocation')} (${description.length} characters)`);
console.log(`${description.slice(0, 280)}...`);
}GOLOGIN_SCRAPING_API_KEY=your_key node indeed-company.mjshttps://parsing.webunlocker.gologin.com/v1/scrapeconst company = 'Amazon.com';
const pages = 5;
async function scrape(url) {
for (let attempt = 1; attempt <= 3; attempt++) {
const params = new URLSearchParams({ url, geo: 'us', format: 'json' });
const response = await fetch(`https://parsing.webunlocker.gologin.com/v1/scrape?${params}`, {
headers: { apikey: process.env.GOLOGIN_SCRAPING_API_KEY },
});
const page = response.ok ? (await response.json()).data?.html : '';
if (page?.includes('"results":[{')) return page;
await new Promise((resolve) => setTimeout(resolve, 5000));
}
throw new Error(`No jobs came back for ${url}, try again later`);
}
function embedded(page, marker) {
const start = page.indexOf(marker) + marker.length - 1;
const token = /"(?:[^"\\]|\\.)*"|[[\]{}]/g;
token.lastIndex = start;
let depth = 0;
for (let match = token.exec(page); match; match = token.exec(page)) {
depth += '[{'.includes(match[0]) ? 1 : ']}'.includes(match[0]) ? -1 : 0;
if (depth === 0) return JSON.parse(page.slice(start, match.index + 1));
}
return [];
}
const jobs = new Map();
for (let start = 0; start < pages * 20; start += 20) {
const page = await scrape(`https://www.indeed.com/cmp/${company}/jobs?start=${start}`);
const fresh = embedded(page, '"results":[').filter((job) => !jobs.has(job.jobkey));
if (fresh.length === 0) break;
for (const job of fresh) {
jobs.set(job.jobkey, { title: job.title, location: job.formattedLocation, salary: job.salarySnippet?.text ?? null, posted: job.formattedRelativeTime });
}
console.log(`page ${start / 20 + 1}: ${fresh.length} new jobs, ${jobs.size} so far`);
}
console.table([...jobs.values()].slice(0, 10));Prêt à l'appliquer à vos propres recherches ? Obtenez votre clé API et des requêtes gratuites.
Indeed n'a pas d'API de recherche d'offres pour votre application, et chaque scraper Indeed prêt à l'emploi facture chaque offre. Voici ce que demande chaque voie vers les données d'offres Indeed pour les mêmes 1 000 offres.
| Ce que cela demande | API Indeed | Apify | Bright Data | |
|---|---|---|---|---|
| Données d'offres pour votre application | Oui | Non | Oui | Oui |
| Vous payez | Une page | Pas d'API | Chaque offre | Par enregistrement |
| 1 000 offres avec descriptions | $1.00 | Aucun | $0.10 à $6 | $1.50 |
| Offres par requête | 50 | Aucune | Jusqu'à 1 000 par exécution | Un enregistrement |
| Page 2 et suivantes | Depuis votre compte | Aucune | Oui | Oui |
| Avis et salaires d'entreprises | Oui | Non | Non | Oui |
| La page entière en HTML ou Markdown | Oui | Non | Non | Non |
| Gratuit pour démarrer en entreprise | Oui | Non | Oui | Oui |
Vous scrapez plus qu'Indeed ? Web Unlocker renvoie n'importe quelle page de la même façon, au même prix.
Web Unlocker renvoie une page par requête, et Indeed montre à un visiteur une page d'offres avant de demander une connexion. Ajoutez Cloud Browser pour la suite : il se connecte une fois à votre compte Indeed et garde cette session active, donc la page 2, la page 20 et la page 50 s'ouvrent comme la page 1, sur le même appareil et la même IP résidentielle.
Votre session est un navigateur qui tourne encore, pas un fichier restauré. Fermez votre script ce soir, rouvrez-le demain, et Indeed voit le même visiteur connecté.
Le profil garde ses cookies et son IP résidentielle d'une exécution à l'autre, donc Indeed voit une personne sur un ordinateur, pas un nouveau visiteur à chaque page.
Pilotez-le depuis Playwright, Puppeteer ou Claude : ouvrez la recherche, cliquez sur suivant, lisez les fiches, recommencez. IP résidentielles incluses.
Lancez-le depuis Playwright, Puppeteer ou Claude. Voir Cloud Browser.
Un compte, un réseau de proxys, un écosystème. Choisissez le produit dont la tâche a besoin.
Vous scrapez aussi d'autres sites ? Voir les scrapers Google Maps, Reddit et YouTube, ou tous les outils de web scraping.
Envoyez l'adresse de la recherche Indeed à Web Unlocker avec limit=50 dedans. Il ouvre la page dans un vrai navigateur depuis une adresse américaine et la renvoie avec le JSON propre à Indeed à l'intérieur : 50 offres avec titre, entreprise, lieu, salaire, note de l'entreprise, date de publication et lien. Le code ci-dessus fait exactement cela.
Pas pour la recherche d'offres. L'ancienne API Publisher, qui renvoyait des offres, est fermée, et les API actuelles d'Indeed sont destinées aux partenaires qui envoient des offres à Indeed, comme les logiciels de suivi des candidatures. Aucune ne renvoie de résultats de recherche à un tiers, donc un scraper lit les pages publiques à la place.
Il n'existe aucune API Indeed, payante ou gratuite, qui permette de lire des offres d'emploi. Web Unlocker démarre avec 1 000 requêtes gratuites, de quoi couvrir 1 000 pages de recherche de 50 offres chacune.
Les conditions d'Indeed sont écrites pour les personnes qui cherchent un emploi, et ses pages de recherche d'offres sont publiques et se chargent sans connexion. Web Unlocker les charge comme le fait le navigateur d'un visiteur et renvoie la page. Ce que vous collectez et l'usage que vous en faites relèvent de vous : vérifiez-le au regard des règles applicables à votre projet.
Les offres d'emploi sont publiées pour être lues, et les scrapers lisent les pages publiques que voit un visiteur. Les règles varient selon les pays et l'usage que vous faites des données : vérifiez votre propre usage au regard de celles-ci. Web Unlocker renvoie la page ; le reste vous appartient.
Un programme qui charge les pages d'un site d'emploi et en extrait les offres sous forme de données : titre, entreprise, lieu, salaire, date, description et lien. Sur Indeed, Web Unlocker se charge du chargement, et les champs sortent du JSON qu'Indeed intègre à chaque page.
Envoyez l'adresse de la recherche à l'API du scraper Indeed avec la bibliothèque requests, trouvez le tableau des résultats dans la page et chargez-le avec le module json. L'onglet Python ci-dessus est un script complet, testé sur l'API en production : 50 offres en une requête.
La page de chaque offre la contient. Ouvrez indeed.com/m/viewjob?jk= suivi de la clé de l'offre via Web Unlocker : il renvoie la description en texte et en HTML, avec le titre, l'entreprise, le lieu et le type de contrat. Une page par offre, 1 000 descriptions pour $0.98.
Indeed montre à un visiteur une page de recherche et demande un compte pour la suivante. Il y a deux solutions : découper la recherche par date, rayon, salaire ou télétravail, et chaque tranche est une nouvelle page de 50 offres ; ou ouvrir Indeed dans Cloud Browser, vous connecter une fois à votre propre compte et parcourir les pages depuis cette session.
Aussi à jour qu'Indeed lui-même. Triez une recherche par date ou limitez-la aux 24 dernières heures et la page affiche les offres portant la mention Publiée à l'instant. Les jeux de données vendus à l'enregistrement sont mis à jour chaque semaine ou chaque mois ; une page est celle du jour.
Oui. La page d'une entreprise renvoie sa note, son nombre d'avis et ses offres ouvertes ; ses pages d'avis renvoient 20 avis chacune avec points positifs et négatifs, page après page ; sa page de salaires liste la rémunération par intitulé de poste. Les pages de salaires par intitulé et par ville fonctionnent aussi, avec la moyenne et la fourchette.
Oui. Les sites Indeed du Royaume-Uni, du Canada, d'Allemagne et de France ont renvoyé leurs pages de recherche de la même façon, avec le pays de sortie réglé en conséquence. Envoyez l'adresse du site du pays et choisissez la géolocalisation dans la requête.
Web Unlocker renvoie la page, pas un tableau, donc rien n'est coupé avant que vous le voyiez. La transformer en CSV demande quelques lignes de code, ou une seule consigne : donnez la page à Claude avec le skill de scraping Gologin et demandez un CSV.
Moins de $1 pour 1 000 pages sur l'API du scraper Indeed, et le même prix pour chaque page. Une page de recherche contient 50 offres, donc 1 000 offres issues de pages de recherche coûtent 2 cents, et 1 000 offres avec leur description complète environ $1. Une page qui ne se charge pas ne coûte rien. Les forfaits démarrent à $49 par mois pour 50 000 requêtes.
Oui, pour commencer : Web Unlocker inclut 1 000 requêtes gratuites, de quoi couvrir 50 000 offres issues de pages de recherche ou 1 000 descriptions complètes d'offres.
Cela dépend de votre besoin. Les scrapers Indeed d'Apify et Bright Data vendent des lignes prêtes à l'emploi et facturent chaque offre comme un enregistrement, et leurs utilisateurs signalent des exécutions qui reviennent avec moins d'offres qu'Indeed n'en montre. Web Unlocker est un scraper web Indeed qui renvoie la page entière à un prix unique, avec le JSON propre à Indeed à l'intérieur, donc vous décidez quels champs garder.
Parlez-nous un peu de votre équipe et recevez :