Indeed API Alternative and Indeed Scraper API for Job Posting Data
Indeed's own APIs are for partners that publish jobs and receive applicants. None of them searches listings. Send an Indeed search or job URL and the fields you want, and get title, company, location, pay, posting date and the full description back as JSON, from 0.98 USD per 1,000 pages.
- Status
- ...
- Elapsed
- ... ms
- Exit country
- ...
- Browser used
- ...
This console sends a real request and shows you the real response. Five live fetches per session, and the sample targets run as often as you like.
Why the Indeed API does not return job listings
Indeed has an API, and it points the wrong way for most people who search for it. The documented endpoints let an applicant tracking system push its customers' jobs into Indeed and pull applications back out. There is no endpoint where you send "registered nurse, Austin" and receive the postings.
The API that did that was the Publisher job search API. It no longer issues keys. What replaced it is a partner program run through Indeed's Partner Console, with OAuth credentials and a Partner Developer Agreement that requires the partner to send a complete list of all jobs for all of its clients. That is a fair deal for an ATS vendor and no use to a job board, a staffing agency watching competitors, or an analyst counting openings by metro.
The postings themselves are public. An Indeed scraper API reads the search and job pages through residential addresses with a real browser, gets past the Cloudflare check in front of them, and returns the fields you name as JSON rows your database can take as they are.
Which way the data flows
The last row has no official endpoint. That is the row this page is about.
Indeed API vs Indeed scraper API compared
Partner API terms as described in Indeed's developer documentation and Job Sync legal terms, read October 12, 2026. Indeed's own docs site answered our plain request with the same security check as the job pages, so these terms come from the indexed copies of those pages.
| Question | Indeed partner APIs | Old Publisher API | WebScrap Indeed scraper API |
|---|---|---|---|
| What it does | Publishes jobs, receives applications, reports hiring outcomes | Searched Indeed listings for display on publisher sites | Reads any public search, job or company page |
| Search by keyword and city | No | Yes, while it ran | Yes, any search URL you can open in a browser |
| How you get in | Partner application, Partner Console app, OAuth | No new keys issued | An API key from signup |
| Obligations | Partner Developer Agreement, send all jobs for all clients | Not applicable | Your own compliance with site terms and data law |
| Price | Not published | Not available | 49 USD for 50,000 pages, 0.33 per 1,000 on Scale |
| Best for | ATS and recruiting software posting customer jobs | Nobody today | Job boards, staffing agencies, labor market analytics |
Where Indeed's route wins: if you build an ATS or a recruiting product and your customers want their jobs on Indeed with applications flowing back, the partner APIs are the only correct answer and no scraper replaces them. Sponsored job performance and candidate data live only inside Indeed. This page is for the opposite direction, reading what is publicly posted.
What one Indeed search page returns
You list the fields in plain English and the same keys come back on every page, so a nurse search in Austin and a welder search in Tulsa load into one table. A search page gives the summary of each posting. The job page behind it gives the full description, benefits and schedule.
Keep the job key. Indeed identifies each posting with a jk value in the URL, and the same job often shows up under several searches. Deduplicating on that key is what turns a pile of result pages into a clean count of openings. Pay is present only when the employer lists it or Indeed shows an estimate, so store it as nullable and keep the raw text next to the parsed range.
The same request shape works on other job sites. If you need several boards in one feed, the job scraping API page covers the general pattern and the LinkedIn scraper API page covers LinkedIn job listings.
Illustrative output. Field names are the ones you ask for.
What Indeed job data costs per month
One search page or one job page is one request. A search page lists about 15 postings and pages through with &start=10, &start=20. Sorting by date and reading the first pages each day catches new postings without walking the whole result set again. Monthly billing.
| Job | Requests per month | WebScrap plan | Per 1,000 pages |
|---|---|---|---|
| 500 role and city searches, first two pages, daily | about 30,000 | 49 USD, Starter | 0.98 USD |
| The same 500 searches plus the full description of 20,000 new postings | about 50,000 | 49 USD, Starter | 0.98 USD |
| 2,000 searches, first three pages, daily, for a niche job board | about 180,000 | 149 USD, Growth | 0.60 USD |
| National dataset, 12,000 searches, first three pages, daily, plus 400,000 job pages | about 1,480,000 | 499 USD, Scale | 0.33 USD |
Figures assume each page loads on the first try. A page that comes back as a Cloudflare block is retried through a fresh residential address and only the successful fetch counts against your plan. Yearly billing halves every price above. Plan details are on the pricing page.
How to get Indeed job postings in four steps
01
Build the search list
Write the searches you would run by hand: role in q, city or ZIP in l, plus sort=date. Two hundred roles across twenty metros is 4,000 URLs and a spreadsheet can generate them.
02
Name the fields
Ask for job key, title, company, location, pay, job type and posting age. Send each URL as a POST to /v1/scrape with rendering on, as the API docs show.
03
Fetch only new jobs
Compare the job keys with what you already hold and request the job page only for keys you have not seen. That keeps description fetches to a fraction of the search volume.
04
Schedule it
Growth and Scale save a request as a job that runs every morning and posts the rows to your webhook, so new openings reach your recruiters or your board before lunch.
Who buys Indeed job data and what they do with it
Staffing
Staffing and recruiting agencies
Find employers that posted the same role three weeks running. A req that will not fill is a sales call, and the posting tells the rep what to pitch.
Job boards
Niche boards and aggregators
Track which employers hire in your niche and how they word and price roles, then sell them a listing on a board their candidates actually read.
Analytics
HR and labor market analytics
Count openings by title, metro and week, and read advertised pay bands for compensation benchmarks that are days old, not quarters.
Sales and investing
Hiring signals for sales and funds
A company that opens twelve warehouse roles in a new state is expanding. Sales teams and investors use hiring velocity as an early signal.
repeat_postings.csv
roles open 21+ days, Dallas metro
Illustrative rows with made up employers. The report is a group by on job key, company and title.
Four mistakes that break an Indeed scraper
Measured on October 12, 2026 against a public search URL.
Faking the user agent and stopping there. Our plain request got a page titled Blocked. Adding a desktop Chrome user agent changed the title to Security Check and nothing else: still a 403, still no jobs. Cloudflare scores the TLS handshake, the address and the JavaScript the client runs, so the fix is a real browser on a residential address. The Cloudflare scraping API page explains how the retries work and why you do not pay for the blocked ones.
Counting postings without the job key. One opening appears under "nurse", "RN" and "registered nurse", and sponsored jobs repeat across pages. Count rows and you overstate demand by a wide margin. Count distinct job keys.
Trusting "posted 30+ days ago". Indeed shows relative ages and stops counting at thirty days. Record the date you first saw a job key and compute age yourself. That first seen date is the most valuable column in the table, and you only get it by running daily.
Waiting for an API that fits. Teams spend weeks on a partner application before learning the program is for publishing jobs. If your product reads listings, decide that on day one and budget for the pages.
Indeed API and scraper questions
Does Indeed have an API?
Yes, but not one that returns job listings. Indeed's developer documentation covers partner APIs for applicant tracking systems and recruiting software: Job Sync to publish jobs, Indeed Apply and Candidate Sync to receive applications, and Disposition Sync to report hiring outcomes. They use GraphQL with OAuth credentials issued through Indeed's Partner Console.
Can I use the Indeed API for job search?
No. The documented Indeed APIs move data from an employer's software into Indeed and send candidates back. None of them takes a keyword and a city and returns matching postings. The older Publisher job search API that did this no longer issues keys, so reading Indeed search results today means reading the public pages.
How do I get an Indeed API key?
You apply to become an Indeed partner. Indeed sets up an app for your integration in its Partner Console and issues OAuth client credentials, under the Indeed Partner Developer Agreement. That route exists for ATS and recruiting software vendors that publish their customers' jobs. There is no self serve key for reading job listings.
Is the Indeed API free?
Indeed publishes no price list for its partner APIs. Access comes through a partner agreement, not a checkout page, and it obliges the partner to send a complete list of all jobs for all its clients. For a team that wants job data, the practical cost is a scraping API or a job data vendor, not an Indeed fee.
What happened to the Indeed Publisher API?
The Publisher program let job sites show Indeed listings through a job search API with a publisher ID. It no longer accepts new publishers and old integrations stopped returning data. We found no official retirement date from Indeed, and third party write ups place it anywhere from 2020 to 2024, so treat any exact date with caution.
Can you scrape Indeed?
Yes. Indeed search results and job pages are public and show title, company, location, pay when the employer lists it, job type, posting age and the full description. A scraping API loads them through residential addresses with a real browser, passes the Cloudflare check in front of the site and returns the fields you name as JSON.
Why is my Indeed scraper blocked?
Indeed sits behind Cloudflare. On October 12, 2026 a plain request to an Indeed search URL returned HTTP 403 and a 25,742 byte page titled Blocked. The same request with a desktop browser user agent returned 403 and a Security Check page asking for JavaScript. Residential addresses with full browser rendering get the real results.
What data can you scrape from Indeed?
From a search page, each posting's title, company, location, pay range, job type, posting age and job key. From a job page, the full description, benefits, schedule, remote or hybrid status and the employer's rating. Company pages add open role counts. Salary appears only where the employer or Indeed's estimate shows it.
How much does an Indeed scraper API cost?
On WebScrap one page is one request at a flat rate. Starter is 49 USD a month for 50,000 successful requests, which is 0.98 USD per 1,000, Growth is 149 USD for 250,000 and Scale is 499 USD for 1.5 million, or 0.33 per 1,000. A search page lists about 15 postings. Blocked fetches are retried and never billed.
Is it legal to scrape Indeed?
Reading public pages is generally not unauthorized access under US law after the hiQ v. LinkedIn rulings, but Indeed's terms restrict automated collection, so contract claims are possible. Job postings are employer content rather than personal data, which lowers privacy risk. Do not republish full descriptions as your own listings without permission, and have counsel review the use.
Get Indeed job postings as JSON without a partner agreement
Send a search or job URL and the fields you want. Title, company, location, pay and description come back as rows. 49 USD for 50,000 pages on Starter, blocked pages never billed.