Indeed jobs API

An Indeed jobs API returns Indeed listings for a role as structured rows — job key, title, employer, location, remote model, a parsed salary range with minimum, maximum and period, job types, posting age, snippet and employer rating with review count.

The salary structure is the reason to use Indeed over other boards. Where LinkedIn usually shows nothing, Indeed frequently publishes pay — and this collector parses it into salary_min, salary_max and salary_period rather than handing you the string "$120,000 - $150,000 a year" to regex later. That turns compensation benchmarking from a text-processing project into a query. Rows are read from the page's own hydration payload, so they survive Indeed's frequent CSS churn, and no browser is involved.

$0.001 per delivered job, up to 300 jobs per run. Nothing delivered means nothing charged.

How the Indeed jobs API works

A role, optionally a location and a country, and the collector searches that country's Indeed market from an exit in the same country, walking result pages until max_results — up to 300 jobs per run.

Parsing from the hydration payload rather than from rendered HTML is the durability decision. Indeed restyles its result cards often; the underlying data object changes far less. Scrapers built on CSS selectors need attention every few weeks, which is the hidden cost people discover after the prototype works.

posted_within_days filters at the source, so a freshness-constrained run collects and bills only recent listings. sponsored flags paid placements — worth excluding from any measure of genuine market demand, since sponsored volume tracks recruitment budgets rather than hiring.

Inputs

query is the role and is required. location is free text as Indeed understands it. country selects the Indeed market and the matching exit — Indeed runs genuinely separate regional sites, so this is not a cosmetic parameter. posted_within_days narrows at the source and therefore lowers cost.

What one job looks like

One row per listing. The salary group is the distinctive part: salary keeps Indeed's display string, while salary_min, salary_max and salary_period are parsed — so you can aggregate across listings that quote hourly, weekly and annual pay without normalising text yourself. company_rating and company_reviews come from Indeed's employer reviews, which is unusual context to get free with a job listing. remote is the stated work model, and job_key is Indeed's stable id for deduplication across runs.

What the Indeed jobs API costs

$0.001 per delivered job ($1 per 1,000). Nothing delivered means nothing charged, and the $2 monthly free credit covers roughly 2,000 jobs here. Volume tiers take up to 30% off.

$0.001 per delivered job, $1 per 1,000. Benchmarking compensation across 30 roles in 5 markets at 100 listings each is 15,000 rows, $15 — a one-off cost for a salary dataset that would otherwise be bought as a subscription.

Narrowing posted_within_days reduces the bill as well as the noise, since the filter is applied before collection. Blocked pages and retries are never billed.

Indeed jobs API vs Indeed's official APIs

Indeed's Publisher API — the one that used to let affiliates pull listings — was closed to new registrations and wound down. What Indeed offers now is oriented around employers and ATS partners: posting jobs, syncing them, managing sponsored campaigns, and a Job Sync API for approved partners. There is no current self-serve API that lets you read Indeed's job search results for research or aggregation.

The direction of travel is the same across every major board: reading is restricted, posting is encouraged, because listings are the product. If your use case is publishing jobs onto Indeed, use their partner APIs — they are the correct and supported route. If it is measuring the job market, the public search results are the only surface available.

Versus writing your own Indeed scraper

Indeed is a well-defended target, and the specific difficulties are:

What people build with it

Compensation benchmarking

Aggregate salary_min and salary_max by role, seniority and market. The parsed period is what makes hourly and annual listings comparable in one query.

Labour market and demand tracking

Listing volume per role per market over time, with sponsored excluded so you measure hiring rather than advertising budget.

Job board aggregation

Fresh listings deduplicated on job_key, with employer rating attached — more context than most aggregators show.

Employer research

company_rating and company_reviews arrive with the listing, so a candidate-facing product can show reputation next to the role.

Limits, reliability and the legal bit

Up to 300 jobs per run with pagination handled internally. Broader coverage is more runs across roles, locations and countries, parallel up to your plan's rate limit — 60 requests/minute on pay-as-you-go, up to 1,200 on the top tier.

Legally: job listings are published publicly and collecting public data is generally lawful in most jurisdictions, but Indeed's terms restrict automated access, and listings can name individual hiring contacts, which is personal data. Republishing listings verbatim raises separate copyright questions from analysing them in aggregate. Not legal advice.

FAQ

Is the Indeed API free?

The Publisher API that used to serve listings was closed to new registrations. What Indeed offers now is aimed at employers and ATS partners — posting and syncing jobs, managing sponsored campaigns — not reading search results. There is no current self-serve read API.

Is there a free Indeed jobs API?

Here there is a free allowance rather than a free tier: $2 of usage a month with no card, about 2,000 delivered jobs at $0.001 each — enough to benchmark a handful of roles before spending anything.

Does it return salary data?

Yes, and structured. Where Indeed publishes pay you get salary_min, salary_max and salary_period as separate fields alongside the original display string, so hourly, weekly and annual listings can be aggregated in one query without text parsing.

How much does it cost?

$0.001 per delivered job — $1 per 1,000 — with no subscription. posted_within_days filters at the source, so a freshness-constrained run costs less rather than the same. Volume tiers take up to 30% off.

Does it work outside the US?

Yes. country selects the regional Indeed site and a matching proxy exit. Indeed runs genuinely separate markets, so this changes which listings exist rather than just the interface language.

How does it survive Indeed's layout changes?

Rows are parsed from the page's hydration payload rather than from CSS selectors. Indeed restyles its cards frequently; the underlying data object is far more stable, which is why selector-based scrapers need constant attention and this does not.

Can I exclude sponsored listings?

Every row carries a sponsored flag, so filtering after delivery is trivial. It is worth doing for any demand measurement — sponsored volume tracks recruitment advertising budgets rather than actual hiring.

Related scrapers

If you're an AI agent

Skip the marketing. QuantumProxies.io publishes a machine-readable site map, Markdown for every page, a free MCP server, and APIs billed from the same balance as your proxies.

Connect in one command: npx -y quantumproxies-mcp