Indeed Jobs Scraper avatar

Indeed Jobs Scraper

Pricing

Pay per event

Go to Apify Store
Indeed Jobs Scraper

Indeed Jobs Scraper

Scrape Indeed job listings from 60+ countries without a browser. Returns title, company, location, salary, employment type, full description, easy-apply flag and employer apply link, with optional company profile data. Pay per result.

Pricing

Pay per event

Rating

0.0

(0)

Developer

NanoScrape

NanoScrape

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Share

Indeed HTTP Scraper

Extract job listings from Indeed across 60+ countries. Returns structured fields per job including full descriptions, salary ranges, company ratings, benefits, and hiring counts. Pay per event, no subscription.

Two optional toggles control field coverage and cost:

  • includeJobDetails: true (default): adds description_full, description_html, description_md, and requirements to every job
  • includeCompanyDetails: true: adds website, industry, size, revenue, CEO, and other company profile fields per job (billed per unique company)

Searches page through Indeed's job search API in batches of up to 50 jobs, so a query can return hundreds of jobs. The default newest order is enforced on the collected results (newest posted_at first).

Need higher-fidelity detail extraction through a real browser? See our indeed-scraper actor (higher cost).


What you get

Core job fields (all runs)

FieldDescription
idIndeed job key (jk= parameter)
titleJob title as displayed on Indeed
normalized_titleIndeed's canonical title
companyHiring company name (deprecated alias, use company_name)
company_nameHiring company name (canonical, same value as company)
company_logo_urlCompany logo image URL
company_urlLink to company's Indeed profile (/cmp/ path; deprecated alias, use company_profile_url)
company_profile_urlLink to company's Indeed profile (canonical, same value as company_url)
company_overview_urlCompany overview link from SERP card
locationFull formatted location string
cityCity component
stateState or region component (also region, canonical)
regionState or region (canonical, same value as state)
street_addressStreet address of the job site when Indeed provides it
postal_codePostal code
countryTwo-letter ISO country code
work_location_typeRemote, Hybrid, or In-person
remote_optionremote, hybrid or onsite (canonical, derived from work_location_type)
employment_typefull-time, part-time, contract, temporary, internship, apprenticeship
top_listingTrue if sponsored
hires_neededNumber of hires needed
salary_textFormatted salary string
salary_minMinimum salary value
salary_maxMaximum salary value
salary_currencyISO currency code
salary_periodyear, month, week, day, or hour
description_snippetShort excerpt (up to 500 chars)
company_benefitsBenefits list
skillsRequired skills
posted_atISO 8601 posting date (kept for backward compatibility)
posted_at_datetimeSame instant as posted_at, ISO 8601 (UTC)
posted_at_textRelative text shown on the search card, for example "Posted 3 days ago" (null when Indeed does not show one)
apply_urlDirect apply link (falls back to source URL)
is_easy_applyTrue for Indeed Apply, false when the application leaves Indeed, null when unknown
external_apply_urlIndeed redirect to the employer's own application page (only when not Indeed Apply)
job_urlCanonical Indeed job URL (always emitted, same value as source_url)
source_urlCanonical Indeed job URL
source_platformAlways indeed.com
company_ratingIndeed company rating (0-5)
company_review_countNumber of Indeed reviews
search_queryKeyword query that produced this result
serp_pageSERP page number (1-indexed)
serp_positionPosition within the SERP page
scraped_atISO 8601 scrape timestamp

Additional fields when includeJobDetails: true (default)

FieldDescription
description_fullFull job description, plain text
description_htmlFull job description, raw HTML
description_mdFull job description, Markdown
requirementsBullet list of job requirements extracted from the description

Descriptions, salary fields (salary_min, salary_max, salary_currency, salary_period) and basic company fields (company_website, company_size, company_industry) come back inline with search results. Where Indeed provides no structured pay for a country (for example the UK), pay that the employer states explicitly in the description, such as "£40,000 per annum", is extracted into the salary fields. includeCompanyDetails: true adds the full company profile. When employmentType or remoteOnly is set, the actor falls back to the search-page path, where these fields fill less often.

Additional fields when includeCompanyDetails: true

FieldDescription
company_descriptionCompany description from Indeed's company profile page
company_websiteOfficial company website URL
company_industryIndustry or sector
company_sizeEmployee count range
company_revenueAnnual revenue range
company_foundedYear founded
company_headquartersHQ address or city
ceo_nameCEO name
ceo_approvalCEO approval percentage
company_happiness_scoreIndeed composite happiness score
company_social_urlsList of social profile URLs when available in the company profile. Not all companies have social links in their Indeed profiles.

What is NOT available (constraint documentation)

  • Some older or expired listings may return empty descriptions. These will have description_full: null even with includeJobDetails: true.
  • Company enrichment requires an active Indeed company profile. Jobs without a known company profile will have null company enrichment fields even with includeCompanyDetails: true.
  • directUrls mode performs a SERP lookup per job key to fetch title, company, location, and posted_at. If the listing has expired or the search index does not return the exact card, those fields will be null. The description fetch still succeeds regardless.
  • With employmentType or remoteOnly set, results come from Indeed's search page, which only serves the first page (about 15 jobs) to anonymous visitors. Use several specific queries for larger result sets, or drop those two filters.
  • company_social_urls is often empty because many Indeed company profiles list no social links.
  • employment_type is only present when Indeed shows a job type on the listing.

Deprecation notes

  • company is deprecated (2026-09-29) and will be removed after 2027-09-29. Use company_name; both are emitted.
  • company_url is deprecated (2026-09-29) and will be removed after 2027-09-29. Use company_profile_url; both are emitted.
  • state and region carry the same value; work_location_type and remote_option are both emitted.

Input

FieldTypeDefaultDescription
searchQueriesstring[]["software engineer"]One or more job search keywords
searchUrlsstring[][]Pre-built Indeed search URLs preserving all filters
directUrlsstring[][]Direct links to specific Indeed job listings
locationstring""Location text combined with searchQueries
countryenumusIndeed country domain (60+ options)
sortByenumnewestnewest (newest posting first) or relevance (Indeed's default ranking)
includeJobDetailsbooleantrueFetch full descriptions, HTML, Markdown, and requirements
includeCompanyDetailsbooleanfalseFetch company profile for website, CEO, revenue, industry, social URLs
maxResultsPerQueryinteger50Cap per search query
maxResultsinteger100Hard cap across all queries
titleFilterstring""Comma-separated title terms (case-insensitive substring OR-match). Filters by job title after SERP fetch and before detail-fetch. Empty or omitted disables the filter. Example: Software Engineer, Backend Developer.
postedWithinDaysinteger0Approximate date filter (0 = no filter). Snaps to nearest bucket: 1, 3, 7, or 14 days. Values above 14 disable the filter.
employmentTypeenum""Filter by employment type. FULL_TIME and PART_TIME map to Indeed sc= attribute codes. INTERNSHIP, TEMPORARY, CONTRACT, TRAINEE have no direct Indeed attribute code and are treated as no filter.
remoteOnlybooleanfalseWhen true, restricts results to 100% remote positions using Indeed's homeoffice attribute filter.
startPageinteger0Skip N SERP pages before collecting
maxConcurrencyinteger5Parallel workers for description and company fetches
forceHTMLPathbooleanfalseForce the search-page path even with sortBy: relevance (Advanced)

sortBy note: newest (default) asks Indeed for date order and then sorts the collected results by posted_at, newest first, because Indeed's own date order also surfaces refreshed and boosted listings. relevance keeps Indeed's default ranking. For scheduled scrapes, newest avoids re-scraping older listings.

postedWithinDays note: jobs older than the window are dropped and paging stops once a whole page is older. Indeed publishes dates at day resolution for most listings, so the cutoff is approximate to within a day.

Filter note: employmentType and remoteOnly are applied by Indeed's own search-page filters, which limits a query to about 15 jobs. Output fields and pricing are identical.

radiusKm: Indeed's radius filter is available through searchUrls. Build your URL in the Indeed UI with the radius you need, then paste it into searchUrls. The location field alone does not support a radius parameter.


Pricing

Pay-per-event (PPE):

EventUnit priceWhen it fires
actor-start$0.001Once per run
serp-page-scanned$0.003Per search page fetched
job-with-description$0.005Per job with description_full populated (includeJobDetails: true)
company-enriched$0.005Per unique company profile fetched (includeCompanyDetails: true)

Example costs (includeJobDetails: true):

  • 100 jobs from one query (2 search pages of 50): $0.001 + 2 x $0.003 + 100 x $0.005 = $0.507
  • 100 jobs across 3 queries (about 3 search pages): $0.001 + 3 x $0.003 + 100 x $0.005 = $0.510
  • 40 jobs, one query (1 search page): $0.001 + 1 x $0.003 + 40 x $0.005 = $0.204
  • 100 jobs plus company profiles (30 unique companies): $0.510 + 30 x $0.005 = $0.660

So expect roughly $0.50 to $0.55 per 100 jobs with descriptions, plus $0.005 per unique company if you enable company enrichment. The actor start fee applies once per run.


Use with AI agents (MCP)

Connect this actor to Claude, Cursor, or any MCP-compatible agent:

{
"mcpServers": {
"apify": {
"command": "npx",
"args": [
"mcp-remote",
"https://mcp.apify.com/?tools=santamaria-automations/indeed-http-scraper",
"--header",
"Authorization: Bearer <YOUR_API_TOKEN>"
]
}
}
}

For per-tool schemas and copy-paste snippets for MCP clients, see the MCP tab.

The agent can call santamaria-automations/indeed-http-scraper with a natural language query. Output fields follow the schema described above. Constraints (sparse company profiles, empty descriptions for expired listings) are documented so the agent can handle nulls correctly.

For API access in any language, see the API tab.


Usage Examples

Precision title filter

Returns only US software engineering jobs whose title contains "backend" or "senior" (case-insensitive substring match). Non-matching SERP rows are dropped before the detail-fetch step, so you don't pay for job-detail events on jobs you don't want.

{
"searchQueries": ["software engineer"],
"titleFilter": "backend, senior",
"country": "us",
"sortBy": "newest",
"maxResults": 50
}

Example matched titles: "Senior Software Engineer, Backend", "Backend Developer (Fintech, Remote)".



Support

  • Questions or issues? Email contact@nanoscrape.com, we typically reply within 6 hours. You can also open a ticket in the Issues tab on the actor page.
  • Feature request for this actor? Open a ticket in the Issues tab or email contact@nanoscrape.com with the platform field you need and (if possible) a URL that shows the data live.
  • Need a scraper for a job board we don't cover yet? Email contact@nanoscrape.com with the target site and your rough usage volume. We ship one-off boards regularly.