> ## Documentation Index
> Fetch the complete documentation index at: https://docs.spidra.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Indeed

> Scrape Indeed search pages, job details and company profiles with structured data, in every country, for 1 credit per page.

Most pages are scraped with a real browser. For a few sites that is slow, costly or unreliable, so Spidra reads them with a purpose-built **site rule** instead. You do not turn anything on: send the URL as usual and the rule is used automatically.

A rule only applies when the request needs nothing a browser alone can do. If you ask for a screenshot, browser `actions`, `forEach` or an AI `instruction`, Spidra uses the normal browser flow for that URL.

## Indeed

Indeed pages are read directly rather than through a browser. A typical search page returns in a few seconds and costs 1 credit.

| Page type | Example | What you get |
| - | - | - |
| Job search | `indeed.com/jobs?q=merchandiser&l=Ohio&fromage=1` | Every job on the page as structured data, plus the full page as markdown |
| Search landing pages | `indeed.com/q-merchandiser-l-Ohio-jobs.html` | Same as job search |
| Single job | `indeed.com/viewjob?jk=...` | The full job description and details |
| Company pages | `indeed.com/cmp/Pepsico`, `/reviews`, `/salaries`, `/jobs`, `/faq` | The full page as markdown plus its structured data |
| Salary and career pages | `indeed.com/career/merchandiser/salaries` | The full page as markdown plus its structured data |
| Any other public Indeed page | `indeed.com/companies`, `indeed.com/career-advice`, localized pages | The full page as markdown, plus its structured data when the page has any |

### Every country site

All of Indeed's country sites work the same way: `uk.indeed.com`, `ca.indeed.com`, `de.indeed.com`, `ng.indeed.com`, `jp.indeed.com`, `br.indeed.com` and the rest. In testing, 59 of the 60 country sites returned results; the exception was `ae.indeed.com`, which answers 404 for its search page. Older country-code domains such as `indeed.co.uk`, `indeed.jp` and `indeed.com.br` that redirect to those sites are understood too, and plain `http://` links are upgraded to `https://`.

A search that Indeed answers with no matching jobs, for example an English query in a country with no such listings, comes back as a normal result with zero jobs and costs 1 credit.

### Fields you get

Fields are read from the data Indeed puts on the page. Every field is optional on Indeed's side, so a missing value comes back as `null` or an empty list, never a guess. Coverage in our tests is shown where it varies.

| Page | Fields |
| - | - |
| Search result (each job) | `title`, `company`, `location`, `city`, `postalCode`, `postedAt`, `salaryMin`, `salaryMax`, `salaryPeriod`, `salaryText`, `jobTypes`, `remote`, `sponsored`, `urgentlyHiring`, `companyRating`, `companyReviewCount`, `requirements`, `snippet`, `url` |
| Single job | `title`, `company`, `location`, `jobTypes`, `postedAt`, `descriptionText`, `descriptionMarkdown`, `benefits`, `schedule`, `address`, `coordinates`, `language`, `country`, `expired`, plus more under `details` |
| Company page | `profile` with `name`, `description`, `ceo`, `ceoApproval`, `employees`, `revenue`, `founded`, `headquarters`, `industry`, `website`, `rating`, `reviewCount`, plus the whole page as markdown |

Coverage to expect:

* `requirements` (skills and certifications, each marked `required` or `preferred`) appears on roughly 10% to 50% of listings, depending on the role.
* `benefits` and `schedule` appear on most single jobs, but only when the employer lists them.
* `address` and `coordinates` appear on fewer than half of jobs, because Indeed shows them only when the employer publishes a street address.
* `salaryMin` and `salaryMax` appear when the posting includes pay.
* `employees` and `revenue` on company profiles are ranges, for example "10,000+" and "over \$10B".

### Pasting a link straight from Indeed

Links copied from a results page carry long tracking tokens (`ad=`, `sjdu=`, `xkcb=`, `tk=` and more). You do not need to clean them. Spidra reduces a job link to the job key and opens that job, so this works as pasted:

```json theme={null}
{
  "urls": ["https://www.indeed.com/viewjob?jk=b3adf4be198fb48e&q=merchandiser&l=Ohio&tk=1k4d46mr3gf96806&from=web&advn=9860947418372500"],
  "output": "json"
}
```

### What comes back

Nothing is filtered out. For a search page you get every job on the page, including sponsored ones, which are marked `"sponsored": true`, and jobs older than your `fromage` window, marked `"outsideWindow": true`. Filter on those flags, or describe what you want in a `prompt`.

* **No `prompt` or `schema`, `output: "json"`:** the structured data comes back as is. No AI is used, so the cost is the base credit only.
* **`output: "markdown"`:** the whole page as markdown, followed by the structured data for every job.
* **With a `prompt` or `schema`:** the AI reads the whole page and all of the structured data, so the token cost is higher than for a normal page. A full search page of about 40 jobs cost 13 credits in testing. If you only need the data, use JSON output without a prompt.

### Limits you should know about

* **Only the first page of a search.** Indeed asks visitors who are not signed in to sign in before showing page 2 and beyond. A request with `start=10` or higher fails straight away with a message and costs nothing. Use narrower searches instead: add a location, try title variants, or set `fromage=1` to get only new postings. If you pass your own session cookies, Spidra will try deeper pages with your session.
* **Very generic searches can fill the first page.** A broad title in a large city can have more new jobs than one page holds. Split it by city or by a more specific title.
* **A job must still be listed.** If a job has expired or been removed, the request fails with a clear message and costs nothing.
* **Click-tracking links are not pages.** Ad-click and tracking URLs (`/pagead/clk`, `/uie/clk`, `/applystart` and similar) would register a click that an advertiser pays for, so Spidra refuses them immediately with a message and does not charge. Job links that carry such tokens are fine: Spidra reduces them to the job key and opens the job.
* **Signed-in areas are refused.** Sign-in pages, account and employer dashboards, résumé search and the application flow need a login, so there is nothing to read. They fail immediately and are not charged.
* **Pages that do not exist.** If Indeed answers a page with an error such as 404, the request fails with that status and is not charged.

<Note>
  Check Indeed's terms of service before you scrape it. You are responsible for how you use the data you collect.
</Note>

## Tracking parameters are removed automatically

For every site, Spidra removes well-known marketing and click-tracking parameters from your URL before it runs the job, for example `utm_source`, `gclid`, `fbclid` and `msclkid`. They never change what a page shows. Any parameter Spidra does not recognise is left exactly as you sent it, because the same name can be a real filter on another site.

## Pages that cannot be delivered are free

If a page comes back as an HTTP error such as 400, 401, 403, 429 or a server error, or a CAPTCHA was solved and the page is still blank, the URL is reported as failed and you are not charged for it, including the CAPTCHA. See [How credits work](/billing/how-credits-work).


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.