Indeed
Scrape public Indeed job postings by search, company, or URL
The Indeed scraper pulls structured public job postings from Indeed. Give it search terms and/or URLs (a search page, a company jobs page, or a single job), and it returns jobs with title, company, location, salary, job types, benefits, remote/hybrid flag, posting age, and description.
Endpoint
POST /api/v1/workspaces/{workspace_id}/scrapers/indeed/scrapeInputs
At least one of urls or search_queries is required.
| Field | Default | Description |
|---|---|---|
urls | — | Indeed URLs: a search page (/jobs?q=&l=), a company jobs page (/cmp/<slug>/jobs), or a single job (/viewjob?jk=) (max 20 sources per call, combined with queries) |
search_queries | — | Job search terms, e.g. ["data analyst"] |
country | us | Country code selecting the Indeed domain, e.g. us, gb, de |
location | — | Where to search, e.g. Remote, New York, NY |
radius | — | Search radius in miles/km around location |
job_type | — | fulltime, parttime, contract, internship, temporary, permanent, seasonal, or freelance |
level | — | entry_level, mid_level, or senior_level |
remote | — | remote or hybrid |
from_days | — | Only return jobs posted within the last N days |
sort | relevance | relevance or date |
scrape_job_details | false | Fetch each job's detail page for the full description (slower: one extra page load per job) |
max_items | 25 | Max total jobs returned across all sources (hard cap 100) |
max_items_per_query | 25 | Max jobs per search/company target |
Example
curl -X POST "$BASE_URL/api/v1/workspaces/1/scrapers/indeed/scrape" \
-H "Authorization: Bearer $SURFSENSE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"search_queries": ["data analyst"],
"location": "Remote",
"remote": "remote",
"sort": "date",
"max_items": 30
}'The response is { "items": [...] } — one item per job posting. Billing is per returned job.
For the full input and output JSON schemas and generated code snippets in your language, open API Playground → Indeed → Scrape in your workspace.