---
title: "Indeed API guide: dated history and the options left"
description: "Indeed's public job-search API is gone: sign-ups ended in 2020, the documentation marked it deprecated in 2023 and the endpoint stopped answering in 2024."
canonical: https://jobspipe.dev/blog/indeed-api-guide
date_published: 2026-07-13
date_modified: 2026-09-30
author: Dvir Atias
---

# Indeed API: what Indeed offered, what it retired, and how to read Indeed jobs now

Indeed's public job-search API is gone: sign-ups ended in 2020, the documentation marked it deprecated in 2023 and the endpoint stopped answering in 2024. Every Indeed API left is a partner API for posting jobs, receiving applications and managing ads, and none returns search results. Reading Indeed postings now means a jobs API that carries them, a Google results wrapper or a scraper.

Indeed's public job-search API is gone. A dated timeline of what Indeed offered developers and when each piece went away, what the partner APIs are for, what you can legally get today, the options for reading Indeed-sourced postings with their published prices, and how to build a pipeline on them.

Indeed’s public job-search API is gone. The free API that let any developer search Indeed’s listings with a publisher key stopped taking new sign-ups at the end of 2020, was marked deprecated in 2023, and stopped answering in 2024. Every API Indeed documents today is a partner API for employers, applicant tracking systems and advertisers: it moves jobs, applications and hiring outcomes into Indeed, and none of it returns job search results. To read Indeed job postings in 2026 you use a third party: a jobs API that carries Indeed postings, a wrapper over Google’s job results, or a scraper you run and maintain.

This guide is the long version. It starts with a dated timeline of what Indeed offered developers and when each piece went away, every date taken from Indeed’s own pages or archived copies of them. Then it covers what you can legally get from Indeed today, the realistic ways to read Indeed-sourced postings with their published prices, the build-or-buy question for scraping, and how to build a pipeline on Indeed postings. JobsPipe wrote it and sells one of the options; the [methodology](#methodology-how-this-guide-was-checked) section says what that means for how to read it.

## What did Indeed offer developers, and when did each piece go?

Indeed ran two developer programmes that are easy to confuse, because both involved XML. One sent jobs _out_: a job-search API that returned Indeed listings to publishers who showed them on their own sites. The other brought jobs _in_: an XML feed that employers and job sites used to send their postings to Indeed. The first is gone; the second still exists, alongside newer partner APIs. The table dates each step from the earliest or latest archived copy of Indeed’s own page, so read “by” as “no later than”.

| When | What happened | Source |
| --- | --- | --- |
| By January 2005 | A free job-search API. Indeed invites developers to search its job index through an XML interface, with a free API key on signup. | indeed.com API page, archived January 2005 |
| By March 2006 | The XML feed for employers. A separate XML feed lets employers and job sites send their jobs to Indeed. It runs in the opposite direction and still exists. | indeed.com XML feed page, archived March 2006 |
| By November 2011 | The API becomes part of the Publisher Program. The job-search API is offered to members of the Indeed Publisher Program, called with a publisher number. | Indeed publisher XML feed page, archived November 2011 |
| November 2020 | Last sign-up page for publishers. The last archived copy of the Publisher Program page that still offers sign-up and the Job Search API. | indeed.com/publisher, archived November 2020 |
| By December 2020 | The Publisher Program page is gone. indeed.com/publisher now redirects to Indeed's page for employers. | indeed.com/publisher, archived December 2020 |
| By May 2021 | No more free publisher accounts. The job-search documentation drops its instruction to create a free publisher account for an ID. | Indeed job search docs, archived May 2021 |
| January to March 2022 | Sponsored Jobs legacy API and XML integration sunset. Indeed's changelog dates the end of the legacy Sponsored Jobs API and of the Sponsored Jobs XML integration. | Indeed Sponsored Jobs API docs |
| By March 2023 | Job Sync API, gated. Documentation for the Job Sync API appears, for ATS partners publishing jobs to Indeed, with access gated by a developer agreement. | Indeed Job Sync guide, archived March 2023 |
| By April 2023 | Job Search marked deprecated. Indeed's documentation labels Job Search deprecated and not available for new integrations. | Indeed Job Search docs, archived April 2023 |
| By September 2023 | docs.indeed.com is for partner integrations. Indeed's partner documentation site describes moving job, application and disposition data between Indeed and an ATS. | docs.indeed.com, archived September 2023 |
| March 2024 | The old endpoint still answers. The last archived response from the job-search endpoint, rejecting a request for an invalid publisher number. | api.indeed.com/ads/apisearch, archived March 2024 |
| By October 2024 | The job-search endpoint is gone. The Wayback Machine records the same endpoint answering with a 404 not-found status. | Wayback Machine capture index for api.indeed.com/ads/apisearch, 2024 |
| February 2026 | Sponsored Jobs API calls can cost money. Per-call charges apply in many markets when a month's Sponsored Jobs spend is below the month's API call cost. | Indeed Sponsored Jobs API docs |
| September 2026 | Partner APIs only. Indeed's API guides list partner APIs for jobs, candidates and employer data, such as Job Sync, Indeed Apply and Disposition Sync. None returns job search results. | Indeed API guides |

Three things stand out. First, there was no single shutdown day. The sign-up page disappeared at the end of 2020, the documentation called the API deprecated in 2023, and the endpoint itself kept rejecting requests until 2024; we found no public Indeed announcement that names a date. That is why articles disagree about when the Indeed API “shut down”: they are each describing a different step. Second, the direction of Indeed’s developer offer flipped. By 2021 its developer portal listed only integrations for applicant tracking systems, and every API added since moves data toward Indeed. Third, the advertising side changed too: the legacy Sponsored Jobs API and its XML integration were sunset in 2022, and the current Sponsored Jobs API can carry per-call charges since February 2026.

The full story of the Publisher API, including what the programme paid publishers and why the logic of open syndication reversed, is in [what happened to the Indeed Publisher API](https://jobspipe.dev/blog/indeed-publisher-api).

## Which Indeed APIs exist today?

Indeed’s [API guides](https://docs.indeed.com/api-guides/) describe partner APIs to “manage jobs, candidates, and employer data”. The ones most developers run into are these:

-   **Job Sync API**: a GraphQL API that ATS partners use to create, update and expire their customers’ job postings on Indeed. It is the modern replacement for sending jobs through the XML feed.
-   **Indeed Apply**: lets job seekers apply on Indeed with their Indeed profile and resume, and delivers the application to the employer’s ATS.
-   **Disposition Sync API**: sends the outcome of each application (reviewed, interviewed, hired, rejected) back to Indeed.
-   **Sponsored Jobs API**: manages paid campaigns for sponsored postings, open only to advertisers who sponsored a job in the last three calendar months.

The guides also list APIs for candidate sync, job updates, user directories and real-time events, all of the same kind: they serve employers and the software that employers use. Access runs through Indeed’s partner programme and a developer agreement. What each API does, and which one an ATS actually needs, is mapped in [the four Indeed partner APIs](https://jobspipe.dev/blog/indeed-partner-apis).

## What can you legally get from Indeed today?

If you are an employer or an ATS, quite a lot: the partner APIs exist so that your jobs reach Indeed, your applications come back and your outcomes feed Indeed’s matching. That is a legitimate, documented route, and it is the only first-party one. It is also a route for _posting_ jobs, not for _reading_ them. None of the partner APIs lets you search Indeed’s listings, and approval does not turn into a search endpoint later.

If you want to read postings, the first-party answer is no. What is left is public web pages and the third parties that work with them. Indeed’s [terms of service](https://www.indeed.com/legal) govern automated access to its site, and they apply whether you fetch the pages yourself or pay someone to fetch them for you. Read them, and take legal advice for a commercial product; our overview of [whether web scraping is legal](https://jobspipe.dev/blog/is-web-scraping-legal) sets out the case law people cite, without being legal advice.

There is a third route that often gets overlooked. Many Indeed postings are copies of jobs the employer published first on its own careers site, and a large share of those sites run on applicant tracking systems that publish open jobs as public JSON: Greenhouse, Lever, Ashby and others. If the employers you care about are known, their own feeds give you the original posting with no terms problem. Which ATSs publish open feeds and which are gated is in our [public vs gated ATS API reference](https://jobspipe.dev/blog/public-vs-gated-ats-apis).

## Can you still get an Indeed API key?

Not a self-serve one. The publisher keys the old API used stopped being issued when the sign-up page went away, and the endpoint they unlocked no longer exists. Approved partners get OAuth client credentials for the partner APIs, which do not return job postings. Tutorials that send you to indeed.com/publisher or show a request to `api.indeed.com/ads/apisearch` describe the retired programme. How to spot them, and what credentials Indeed does issue, is in [Indeed API key: why there isn’t one](https://jobspipe.dev/blog/indeed-api-key).

## What does Indeed data cost?

There is no Indeed price list for reading postings, because there is no product to price. The partner APIs are part of a partnership rather than a rate card, and the Sponsored Jobs API is tied to advertising spend, with per-call charges in many markets since February 2026 when a month’s campaign spend falls below its API call cost. Everything else is third-party pricing: per result, per request, per scraped record or per plan. The table in the next section prices the main options from their own pages, and [Indeed API pricing](https://jobspipe.dev/blog/indeed-api-pricing) walks through what drives the bill, including the re-checking cost that most estimates leave out.

## How can you read Indeed-sourced job data?

Five realistic options, in three kinds. A multi-source jobs API returns Indeed postings as one source among many, in a normalized record. A search-results wrapper returns what Google’s job search shows for a query, and Indeed is one of the boards Google lists. A scraper platform rents you a ready-made Indeed scraper that you run and pay for per result. Prices and free options below are each vendor’s own published terms.

| API | What the data is | Price entry point | Free tier or trial | How Indeed postings arrive | Checked |
| --- | --- | --- | --- | --- | --- |
| JobsPipe · Pricing ↗ | Aggregated postings | $49/month for 25,000 jobs | 1,000 jobs to start | Indeed postings as one of 30+ sources, selected with a source filter | September 2026 |
| JSearch · Pricing ↗ | Search-results wrapper | $25/mo for 10,000 requests, up to $150/mo for 200,000 | 200 requests/month free | Indeed listings as they appear in Google for Jobs results | September 2026 |
| SerpApi · Pricing ↗ | Search-results wrapper | $25/mo for 1,000 searches | 250 searches/month free | The Google Jobs panel for a query, where Indeed is one of the listed boards | September 2026 |
| Apify · Pricing ↗ | Scraper platform | Indeed Scraper $5 per 1,000 on Starter, $3 on Business | $5 a month of free usage | A community-maintained Indeed scraper you run and pay for per result | September 2026 |
| Bright Data · Pricing ↗ | Scraper platform | Web Scraper API $1.50 per 1,000 records, 5,000 free a month | Free tier on several APIs | A ready-made Indeed job scraper inside its Web Scraper API | September 2026 |

The differences matter more than the prices. A search-results wrapper gives you what a job seeker sees on Google for one query, ranked by Google, a page at a time; it is quick to start and thin on history. A scraper platform gives you whatever the scraper extracts from Indeed’s pages, in that scraper’s own format; when Indeed changes a page, the output changes or stops until the scraper’s maintainer fixes it. A multi-source jobs API gives you a stable record shape across sources, deduplication of the same job seen on several boards, and fields such as posting date, open or closed status and parsed salary, at the cost of trusting the vendor’s coverage.

Whichever you shortlist, run one real query through each, for example backend engineers in the United States posted in the last week, and compare three things: how many postings came back, how many of them are duplicates of each other, and how many still need parsing before you can use them. The wider field of jobs APIs, beyond Indeed, is compared in [the best jobs APIs in 2026](https://jobspipe.dev/blog/best-jobs-api-2026).

## Should you scrape Indeed yourself or use an API?

Scraping Indeed is possible, and it is a bigger job than it looks on day one. Indeed’s search pages sit behind bot protection that answers automated traffic with challenge pages, so a scraper that works from a laptop usually fails in production. A pipeline that runs every day tends to need four parts:

-   **A pool of IP addresses**, usually residential proxies, because requests from one data-centre address are challenged quickly.
-   **A real browser** for the pages that only load after a challenge, which is far more expensive to run than plain HTTP requests.
-   **Parsers you maintain**, since the page layout and the data embedded in it change without notice, and each change breaks the fields you extract.
-   **Per-country handling**, because Indeed runs separate country sites that differ in markup and in what they show.

What breaks, in practice, follows the same list: a new challenge format blocks every request at once; a layout change silently empties a field; a rate limit tightens in one country; a proxy pool gets burned faster than it refills; an embedded data format changes shape. Each break is an unplanned engineering task, and they cluster, so the cost shows up as on-call time as much as infrastructure.

The honest comparison is total cost per usable posting. On the scraper side, add proxies, browser compute, engineering time for fixes, the cost of re-checking which postings are still open, and legal review. On the API side, add the plan and the time to evaluate coverage. For a one-off research pull, or a single country you already know well, a scraper or a scraper platform can be the cheaper route. For a product that users rely on every day, a managed API usually is, because the maintenance and the re-checking become someone else’s job. Run the numbers for your own volume; the cost structure of each route is broken down in [Indeed API pricing](https://jobspipe.dev/blog/indeed-api-pricing).

## How do you build on Indeed-sourced postings?

The rest of this guide is the build: a first request, a paginated sweep, deduplication, incremental sync and the table to store it in. The examples use the JobsPipe API, and the patterns transfer to any provider. You can see the response shape before creating an account: the sandbox returns fixed sample jobs in the live schema, with no key.

Try it without a key

```
curl -d '{"limit":3}' https://api.jobspipe.dev/v1/sandbox/jobs/search
```

Only `/v1/sandbox/*` needs no key.

With a free key, send the filters as a JSON body to the search endpoint. `source_or` is the one line that restricts results to Indeed; drop it and the same query returns every source under the same field names.

```
curl https://api.jobspipe.dev/v1/jobs/search \
  -H "Authorization: Bearer jp_live_your_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "source_or": ["indeed"],
    "job_title_or": ["backend engineer", "platform engineer"],
    "job_country_code_or": ["US"],
    "posted_at_max_age_days": 7,
    "limit": 25,
    "include_total_results": true
  }'
```

The response has two keys. `metadata` carries `total_results` and a `next_cursor` for the next page; `data` is the list of postings, each with `id`, `job_title`, `company`, `location`, `date_posted`, `discovered_at`, `last_seen_at`, `status`, salary fields when the posting states a range, and `url` pointing back at the original listing.

To collect a whole result set, follow the cursor until it comes back empty, pace the requests to your plan’s rate limit, and back off on a 429:

```
import os, time, requests

ENDPOINT = "https://api.jobspipe.dev/v1/jobs/search"
HEADERS = {"Authorization": "Bearer " + os.environ["JOBSPIPE_API_KEY"]}
FILTERS = {"source_or": ["indeed"], "job_country_code_or": ["US"],
           "posted_at_max_age_days": 7, "limit": 25}

def fetch_all(max_pages=40):
    cursor, jobs = None, []
    for _ in range(max_pages):
        body = dict(FILTERS, **({"cursor": cursor} if cursor else {}))
        for attempt in range(5):
            r = requests.post(ENDPOINT, json=body, headers=HEADERS, timeout=60)
            if r.status_code != 429:
                break
            time.sleep(2 ** attempt)
        r.raise_for_status()
        page = r.json()
        jobs.extend(page["data"])
        cursor = page["metadata"].get("next_cursor")
        if not cursor:
            return jobs
        time.sleep(0.5)
    return jobs
```

**Deduplicate on the id first.** One role is often posted to the employer’s ATS, syndicated to Indeed and picked up again elsewhere. JobsPipe returns a job seen on several sources as one record that lists every source, and its `id` stays stable across requests, so upserting on `id` removes the mechanical duplicates. For two genuinely separate postings of the same role, group on normalized company and title within a location and a two-week window, and mark one canonical row rather than deleting the others.

**Sync incrementally.** Re-fetching everything every night spends your allowance rediscovering rows you already have. Use `posted_at_max_age_days` for a rolling window, or `posted_at_gte` and `posted_at_lte` for exact boundaries, overlap the windows by a day, and page each window to the end rather than truncating it. Incremental sync tells you what appeared, not what disappeared, so run a separate pass that drops postings whose `status` is closed; the mechanics are in [how to find expired job postings](https://jobspipe.dev/blog/find-expired-job-postings).

**Store the raw record.** Keep the columns you query on (id, title, company, location, country, salary range, posting date, source, first and last seen) and a JSON column with the full record. The day you want seniority, skills or the full description, the data is already in your database.

## How does JobsPipe relate to Indeed?

JobsPipe is not affiliated with Indeed, is not an Indeed partner and does not resell an Indeed licence. Indeed is one of 30+ sources in the JobsPipe API: you select it with `source_or`, and each Indeed record carries the same fields as every other source, with a `url` back to the listing on Indeed, the time JobsPipe first saw it, the time it was last seen live and an open or closed status. What JobsPipe does not offer is anything from the employer side of Indeed: no Indeed Apply, no sponsored campaign data, no candidate or disposition data. Coverage details and the fields for Indeed rows are on the [Indeed source page](https://jobspipe.dev/sources/indeed), and the free plan includes 1,000 free credits, one time.

## Methodology: how this guide was checked

JobsPipe wrote this guide, and JobsPipe sells a jobs API that appears in the options table. Every date in the timeline comes from one of Indeed’s own pages, either live or as archived by the Wayback Machine, and each row links the copy it was read from; where only an archived copy exists, the date is the earliest or latest capture that shows the change, which is why most rows say “by”. We found no public Indeed announcement of the job-search API’s retirement, so none is cited. Competitor prices and free tiers in the options table are read from a registry of facts, each stored with the vendor’s own URL, the exact wording on that page and the date it was checked, and rendered from that record. Pages were checked on 2026-09-30. Every page used is listed under Sources below.

## Sources

-   [indeed.com API page, archived January 2005](https://web.archive.org/web/20050130013712/http://www.indeed.com:80/jsp/apiinfo.jsp)
-   [indeed.com XML feed page, archived March 2006](https://web.archive.org/web/20060317003945/http://www.indeed.com/jsp/xmlinfo.jsp)
-   [Indeed publisher XML feed page, archived November 2011](https://web.archive.org/web/20111118205605/https://ads.indeed.com/jobroll/xmlfeed)
-   [indeed.com/publisher, archived November 2020](https://web.archive.org/web/20201111095504/https://www.indeed.com/publisher)
-   [indeed.com/publisher, archived December 2020](https://web.archive.org/web/20201230181144/https://www.indeed.com/publisher)
-   [Indeed job search docs, archived May 2021](https://web.archive.org/web/20210510003815/https://opensource.indeedeng.io/api-documentation/docs/job-search/)
-   [Indeed Sponsored Jobs API docs](https://docs.indeed.com/sponsored-jobs-api/)
-   [Indeed Job Sync guide, archived March 2023](https://web.archive.org/web/20230329010741/https://developer.indeed.com/docs/job-sync/guide/)
-   [Indeed Job Search docs, archived April 2023](https://web.archive.org/web/20230422183614/https://developer.indeed.com/docs/publisher-jobs/job-search)
-   [docs.indeed.com, archived September 2023](https://web.archive.org/web/20230921063936/https://docs.indeed.com/)
-   [api.indeed.com/ads/apisearch, archived March 2024](https://web.archive.org/web/20240312194802/https://api.indeed.com/ads/apisearch)
-   [Wayback Machine capture index for api.indeed.com/ads/apisearch, 2024](https://web.archive.org/cdx/search/cdx?url=api.indeed.com/ads/apisearch&from=20240301&to=20241231)
-   [Indeed API guides](https://docs.indeed.com/api-guides/)
-   [Indeed Job Sync API documentation](https://docs.indeed.com/job-sync-api/)
-   [Indeed Apply documentation](https://docs.indeed.com/indeed-apply/)
-   [Indeed Disposition Sync API documentation](https://docs.indeed.com/disposition-sync-api/)
-   [Indeed terms of service](https://www.indeed.com/legal)
-   [JSearch API page and plans (OpenWeb Ninja)](https://www.openwebninja.com/api/jsearch)
-   [SerpApi pricing](https://serpapi.com/pricing)
-   [Apify Indeed Scraper actor](https://apify.com/misceres/indeed-scraper)
-   [Bright Data Web Scraper API pricing](https://brightdata.com/pricing/web-scraper)

## Frequently Asked Questions

### Does Indeed have a public API in 2026?

Not for reading jobs. Indeed's public job-search API stopped taking sign-ups at the end of 2020, its documentation marked it deprecated in 2023, and the endpoint stopped answering in 2024. Every API Indeed documents today is a partner API for employers, applicant tracking systems and advertisers, such as Job Sync, Indeed Apply, Disposition Sync and Sponsored Jobs. None returns job search results.

### When did Indeed shut down its job search API?

In steps rather than on one day. The Publisher Program sign-up page last appears in November 2020 and is gone by December 2020; the job-search documentation is labelled deprecated by April 2023; and the endpoint last answers in March 2024 and returns not-found by October 2024, according to archived copies of Indeed's own pages. We found no public Indeed announcement that names a date.

### Can I get an Indeed API key?

Not a self-serve one. Publisher keys stopped being issued when sign-ups closed at the end of 2020, and the endpoint they unlocked no longer exists. Approved partners receive OAuth client credentials for the partner APIs, which move data into Indeed and do not return job postings.

### Can I use Indeed's partner APIs to read job postings?

No. Job Sync publishes an ATS's jobs to Indeed, Indeed Apply delivers applications, Disposition Sync reports hiring outcomes and the Sponsored Jobs API manages paid campaigns. They serve employers and their software, and approval into the partner programme does not include a search endpoint.

### Is it legal to scrape Indeed?

Indeed's terms of service govern automated access to its site, and they apply whether you fetch the pages yourself or pay a service to do it. The law also differs by country and by what you collect. Read the terms and take legal advice before building a commercial product on scraped Indeed pages.

### How much does Indeed job data cost?

Indeed publishes no price for reading its postings. The Sponsored Jobs API can carry per-call charges in many markets since February 2026, tied to advertising spend. Third-party options are priced per result, per request or per plan: for example Indeed Scraper $5 per 1,000 on Starter, $3 on Business on Apify, and JobsPipe starts at $49/month for 25,000 jobs with 1,000 jobs to start on the free plan.

### How do I get Indeed job postings into my app?

Use a jobs API that carries Indeed postings, restrict the search to Indeed, page through the results with a cursor, and upsert each posting on its stable id. With JobsPipe that is POST https://api.jobspipe.dev/v1/jobs/search with source\_or set to indeed. Keep the full record in a JSON column and run a separate pass to drop postings that have closed.

### Is JobsPipe an Indeed partner?

No. JobsPipe is not affiliated with Indeed and does not resell an Indeed licence. Indeed is one of 30+ sources in the JobsPipe API, and Indeed records carry the same fields as every other source, including a link back to the listing on Indeed.

Related

## Keep reading

-   [Guide · Jul 24, 2026Indeed API key: why there isn't one, and what to use instead](https://jobspipe.dev/blog/indeed-api-key)
-   [Reference · Jul 24, 2026What happened to the Indeed Publisher API](https://jobspipe.dev/blog/indeed-publisher-api)
-   [Reference · Jul 24, 2026The four Indeed partner APIs, explained](https://jobspipe.dev/blog/indeed-partner-apis)
-   [Reference · Jul 24, 2026Indeed API pricing: what it costs, and what's actually free](https://jobspipe.dev/blog/indeed-api-pricing)
-   [Comparison · Jul 16, 2026The best jobs APIs in 2026: 15 options compared](https://jobspipe.dev/blog/best-jobs-api-2026)


## Further reading

- [Is There a Google Jobs API?](https://jobspipe.dev/guides/google-jobs-api)
- [Google Jobs API: why it doesn't exist, and what to use instead](https://jobspipe.dev/blog/google-jobs-api)
- [Google for Jobs API: indexing in, and how to get data out](https://jobspipe.dev/blog/google-for-jobs-api)
- [Does Indeed have an API?](https://jobspipe.dev/answers/does-indeed-have-an-api)

---
Building this integration yourself? The steps above work. The alternative is one API over 30+ sources, already normalized and deduplicated. Try it right now - no key, no signup:

```bash
curl -d '{"limit":3}' https://api.jobspipe.dev/v1/sandbox/jobs/search
```

Sample data, exact live schema. For live data get a free key (1,000 jobs to start) at https://jobspipe.dev/signup, then swap /v1/sandbox/jobs/search for /v1/jobs/search with an Authorization: Bearer header. Full agent index: https://jobspipe.dev/llms.txt?src=md-twin