Indeed Scraper API for Job Postings and Hiring Data
The SurfSense Indeed API extracts public job postings, salaries, companies, and full descriptions by search query, company page, or job URL, without Indeed's official API. Give your AI agents a live feed of who is hiring, for what, at what pay, so you track the labor market as it moves.
$
indeed.scrape({ search_queries: ["data analyst"], location: "Remote",
remote: "remote", from_days: 7, sort: "date", max_items: 30 })- Senior Data Analyst · Acme CorpRemote (US) · $120k–$145k/year · posted 2 days agosalary listed
- Data Analyst, Growth · GlobexRemote · $95k–$110k/year · Indeed Applybuying signal
- Marketing Data Analyst · InitechRemote (US) · estimated $88k–$102k · posted todaynew today
30 jobs · 22 with salary · surfaced in 3.4s
What you can extract from Indeed
Every call returns structured job items. Point the API at a search query, an Indeed search or company page, or a single job URL, and set scrape_job_details for the full description per job.
Job
Title, job key, listing URL, apply URL, and whether Indeed Apply is enabled.
Company
Company name, profile URL, star rating, and review count where available.
Location
Formatted location, city, state, postal code, country, and remote or hybrid flags.
Salary
Pay text, min and max bounds, currency, period, and whether the figure is an Indeed estimate.
Description
Listing snippet by default; the full text and HTML description with scrape_job_details.
Signals
Job types, benefits, sponsored, urgently hiring, new, and expired flags, plus post age.
What teams do with the Indeed API
Competitor hiring intelligence
Track what your competitors are hiring for and where. A spike in sales or ML roles is a roadmap signal months before it ships. Feed the stream to an agent that flags the moves that matter.
Salary and compensation benchmarking
Pull real posted salaries for a title in a location and benchmark your own bands against the live market, instead of a survey that is a year stale.
Labor market and sector research
Measure hiring demand for a role, skill, or sector over time. Turn thousands of postings into a demand index your analysts and clients can act on.
Recruiting and lead sourcing
Find companies actively hiring for a role and reach them while the need is hot. Job postings are a public, timely buying signal for staffing and B2B sales.
Call it from your code or your agent
One typed endpoint, one API key. Or add the SurfSense MCP server and let your agent call indeed.scrape as a native tool.
curl -X POST "$SURFSENSE_API_URL/workspaces/$WORKSPACE_ID/scrapers/indeed/scrape" \
-H "Authorization: Bearer $SURFSENSE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"search_queries": [
"data analyst"
],
"location": "Remote",
"remote": "remote",
"from_days": 7,
"sort": "date",
"max_items": 30
}'Indeed API request and response schema
The exact contract behind POST /workspaces/{workspace_id}/scrapers/indeed/scrape. The same fields power the indeed.scrape MCP tool.
Request parameters
Provide at least one source: urls or search_queries. Up to 20 sources per call.
| Field | Type | Description |
|---|---|---|
urls | string[]default [] | Indeed URLs: a search page (/jobs?q=&l=), a company jobs page (/cmp/<slug>/jobs), or a single job (/viewjob?jk=...). Max 20. |
search_queries | string[]default [] | Job search terms. Each returns up to max_items_per_query results, shaped by the filters below. Max 20. |
country | stringdefault "us" | Country code selecting the Indeed domain, e.g. 'us', 'gb', 'de'. |
location | string | Where to search, e.g. 'Remote', 'New York, NY'. |
radius | integer | Search radius in miles or km around location. |
job_type | string | Employment type: fulltime, parttime, contract, internship, and more. |
level | string | Experience level: entry_level, mid_level, or senior_level. |
remote | string | Work model filter: remote or hybrid. |
from_days | integer | Only return jobs posted within the last N days. |
sort | stringdefault "relevance" | Result ordering: relevance or date. |
scrape_job_details | booleandefault false | Fetch each job's detail page for the full description. Slower: one extra page load per job. |
max_items | integerdefault 25 | Max total jobs to return across all sources. 1 to 100. |
max_items_per_query | integerdefault 25 | Max jobs to pull per search or company target. |
Response fields
The response is { items: [...] } with one flat item per job. Fields Indeed omits are null. One returned job is one billable unit.
| Field | Type | Description |
|---|---|---|
jobKey / jobUrl / applyUrl | string | Indeed job key, listing URL, and third-party apply URL. |
title | string | The job title as posted. |
company / companyUrl | string | Company name and its Indeed profile URL. |
companyRating / companyReviewCount | number / integer | Employer star rating and number of reviews, where Indeed shows them. |
formattedLocation / isRemote / remoteType | string / boolean | Location string plus remote and hybrid flags. |
salary | object | salaryText, salaryMin, salaryMax, currency, period, and isEstimated when the pay is an Indeed estimate. |
jobTypes / benefits | string[] | Employment types and listed benefits parsed from the posting. |
descriptionText / descriptionHtml | string | Snippet by default; the full description when scrape_job_details is set. |
sponsored / urgentlyHiring / isNew / expired | boolean | Listing flags for ranking and filtering. |
age / datePublished / scrapedAt | string | Relative post age, ISO publish date, and when the job was scraped. |
An Indeed API alternative built for agents
Indeed retired its public Publisher jobs API and gates data behind partner programs. If you cannot get access or need clean structured jobs now, here is how SurfSense compares.
| Feature | DIY Indeed scraping | SurfSense |
|---|---|---|
| Access | Publisher API retired; partner-gated and approval-only | One API key; scrape public postings without an approval process |
| Anti-bot | You fight Cloudflare, fingerprinting, and CAPTCHAs yourself | Warmed, rotated sessions managed for you; no proxy plumbing |
| Pricing | Proxy, browser, and maintenance costs you own | Pay per job returned, with a free tier to start |
| Descriptions | Extra page fetch and parsing you build and maintain | Full description per job with one scrape_job_details flag |
| Agent-ready | No; you build the harness yourself | MCP server exposes indeed.scrape as a native tool |
Indeed API: frequently asked questions
Point your agents at Indeed
The Indeed connector is one of many in the SurfSense open web research platform. Start free, no credit card required.
SurfSense