Indeed Jobs Scraper avatar

Indeed Jobs Scraper

Pricing

from $1.00 / 1,000 jobs

Go to Apify Store
Indeed Jobs Scraper

Indeed Jobs Scraper

Scrape Indeed job listings from search URLs or keyword searches across 32 countries. Export structured JSON with job title, company, location, salary, description, skills, benefits, remote/hybrid flags, apply links, and posting dates — ideal for recruiting, HR analytics, and job market research.

Pricing

from $1.00 / 1,000 jobs

Rating

0.0

(0)

Developer

Coder

Coder

Maintained by Community

Actor stats

0

Bookmarked

3

Total users

2

Monthly active users

a day ago

Last modified

Share

Collect structured job listing data from Indeed using direct search URLs or keyword-based searches. Paste the same links you use on the site — keywords, location, country, and filters — or build searches in the input form, and receive clean JSON records in your Apify dataset.

Use it for job market research, recruitment pipelines, competitive hiring analysis, salary benchmarking, and lead generation — without copying listings manually from search results.


What you get

Each saved row is one job listing, organized into clear sections:

SectionWhat it contains
IdentityJob ID, title, reference number, language, and links to the Indeed posting
companyEmployer name, industry, size, rating, review count, logo, and profile link when Indeed publishes them
locationFormatted location plus city, region, state, country, postal code, and coordinates when available
salaryDisplay text, min/max range, currency, pay period, and whether the figure is estimated
Job detailsJob types, shifts, skills, occupations, benefits, remote/hybrid/in-person flags
Hiring signalsUrgently hiring, high-volume hiring, apply counts, sponsored and new-job flags
ApplicationApply URL (external employer site or Indeed apply flow when shown)
DescriptionPlain-text summary, full description, and HTML description when available
TimelinePosted, listed-on-Indeed, and expiration dates
inputUrlThe search URL or keyword-built search that produced this job

Results stream to the dataset as jobs are collected, so you can preview progress before the run finishes.


Quick start on Apify

  1. Open the Actor in the Apify Console.
  2. Choose one or both input modes:
    • Indeed search URLs — paste links copied from Indeed after setting filters in your browser, or
    • Keyword searches — enter job title/keywords, country, and optional location (or enable remote jobs).
  3. Set Maximum jobs (default 10) — this limit applies per search URL or keyword search.
  4. For keyword searches only, adjust Sort jobs by and Date posted under search filters.
  5. Click Start and open the Dataset tab when the run finishes.

How to get a search URL: Run a job search on Indeed (set keywords, location, country site, and any filters), then copy the URL from your browser address bar.

Example input (direct URL):

{
"startUrls": [
{
"url": "https://ca.indeed.com/jobs?q=full+stack+developer&l=Toronto%2C+ON&sort=date"
}
],
"maxJobs": 25
}

Example input (keyword search):

{
"keywordSearches": [
{
"keywords": "software engineer",
"country": "us",
"location": "San Francisco, CA",
"remoteJobs": false
}
],
"sort": "date",
"datePosted": "7",
"maxJobs": 50
}

Input parameters

Provide at least one Indeed search URL or one keyword search.

Indeed search URLs

TypeList of URLs
FormatIndeed job search pages (indeed.com/jobs?... or country sites such as ca.indeed.com/jobs?...)
TipCopy the URL directly from your browser after configuring filters on the site

URLs are processed exactly as provided — existing query parameters, filters, and sort order in the link are preserved. Search filters in the input form (sort, date posted) do not modify direct URLs.

Invalid or malformed URLs are skipped with a warning; other URLs in the same run can still succeed.

Keyword searches

TypeList of search rows
Required fieldsJob title or keywords, Country
Optional fieldsLocation (city, region, state/province, or postal code)
Remote jobsWhen enabled, searches for remote roles in the selected country and ignores the location field

Supported countries include United States, Canada, United Kingdom, Australia, Germany, France, Spain, Italy, Netherlands, Belgium, Switzerland, Austria, Ireland, India, Singapore, New Zealand, Mexico, Brazil, Poland, Sweden, Norway, Denmark, Finland, Portugal, Japan, South Korea, South Africa, United Arab Emirates, Saudi Arabia, Philippines, Malaysia, and Pakistan.

Sort jobs by

TypeSelect
OptionsDate (default), Relevance
Applies toKeyword searches only

Date posted

TypeSelect
OptionsAll dates (default), Last 24 hours, Last 3 days, Last 7 days, Last 14 days
Applies toKeyword searches only

Maximum jobs

TypeInteger
Range110,000
Default10

Controls how many unique jobs are collected per search URL or keyword search. With multiple searches, total results can be up to this value multiplied by the number of searches.

For example, 3 searches with a limit of 50 can yield up to 150 jobs.


What you will see during a run

The run log is written for end users — progress messages describe collection activity only.

Typical messages:

  • Starting scrape for N search URL(s) in parallel, up to M job(s) each.
  • Collected 25 job(s). (after each search completes)
  • Finished. Saved N job listing(s) to the dataset.

If a search returns no jobs or cannot be processed, you will see a warning for that search; other searches in the same run can still succeed.

On the Apify free plan, you may also see a short notice when free-tier limits apply (see Free plan limits).


Output overview

Dataset structure

  • Results are saved to a single Apify dataset
  • Each row is one job object with nested sections (company, location, salary, etc.)
  • Use inputUrl on each row to see which search produced it

Field presence varies by listing: not every job includes salary, full description, employer ratings, or apply links to external sites. Empty arrays ([]) or null mean no data was published for that job — not necessarily an error.

If optional fields could not be retrieved for a job, check scrapeErrors for user-safe labels.


Output fields

Top-level identity

FieldDescription
scrapedAtISO timestamp when the job was collected
inputUrlThe search URL that produced this job
idIndeed job key (unique identifier for the listing)
titleJob title
normalizedTitleNormalized title when Indeed provides one
referenceNumberEmployer or Indeed reference number when available
languageJob posting language code when available
indeedUrlDirect link to the job on Indeed
applyUrlApplication link — external employer URL or Indeed apply URL when shown
summaryShort snippet from search results or truncated description
descriptionFull job description as plain text
descriptionHtmlFull job description as HTML when available

company — employer

FieldDescription
nameCompany or employer name
industryIndustry label when published
sizeCompany size range when published
revenueRevenue range when published
foundedYear founded when published
headquartersHeadquarters location when published
websiteCompany website when published
descriptionCompany summary when published
ratingIndeed employer rating when available
reviewCountNumber of Indeed employer reviews when available
logoUrlEmployer logo URL when available
profileUrlLink to the employer's Indeed company page when available

location

FieldDescription
formattedDisplay location string
cityCity name
stateState or province name
stateCodeState or province code
regionRegion label
postalCodePostal or ZIP code
countryCountry name
countryCodeCountry code
addressStreet address when available
latitude / longitudeCoordinates when available

salary

FieldDescription
displayHuman-readable salary text (for example $120,000 - $150,000 a year)
min / maxNumeric range when parsed
currencyCurrency code when available
periodPay period (for example hourly, monthly, yearly)
estimatedWhether the salary is marked as estimated

Job details and hiring

FieldDescription
jobTypesEmployment types (for example Full-time, Part-time, Contract)
shiftsShift labels when listed
skillsSkills and attributes associated with the role
occupationsOccupation categories when listed
benefitsBenefits mentioned in the posting
workLocationTypeWork arrangement label (for example Remote, Hybrid, In-person)
workLocationCodeWork arrangement code when available
remoteWhether the role is remote
urgentlyHiringUrgent hiring flag when shown
highVolumeHiringHigh-volume hiring flag when shown
applyCountOrganic apply-start count when Indeed publishes it
applyViaIndeedWhether applications go through Indeed
sponsoredSponsored listing flag when shown
newJobWhether the listing appears newly posted (based on listed date)

Timeline and status

FieldDescription
postedAtOriginal publish date when available
listedAtDate the job appeared on Indeed
expiresAtExpiration date when available
expiredWhether the listing is marked expired
repostedWhether the job is a repost

scrapeErrors

FieldDescription
jobDetailsPresent when full job details could not be retrieved; summary fields from search results may still be saved
companyProfilePresent when extended company profile data could not be retrieved

Example output

The excerpts below come from a real run searching for "full stack developer" in Toronto, ON on ca.indeed.com (maxJobs: 10). Full output is available in the run dataset.

Example input

{
"startUrls": [
{
"url": "https://ca.indeed.com/jobs?q=full+stack+developer&l=Toronto%2C+ON&sort=date"
}
],
"maxJobs": 10
}
{
"scrapedAt": "2026-06-18T07:38:01.055Z",
"inputUrl": "https://ca.indeed.com/jobs?q=full+stack+developer&l=Toronto%2C+ON&sort=date",
"id": "4fd53ccc8ee9fa5f",
"title": "Software Engineering Manager - Fintech",
"normalizedTitle": "software engineering manager",
"referenceNumber": "7568537003",
"language": "en",
"company": {
"name": "autoTRADER.ca",
"industry": null,
"size": null,
"revenue": null,
"founded": null,
"headquarters": null,
"website": null,
"description": null,
"rating": 3.5,
"reviewCount": 133,
"logoUrl": "https://d2q79iu7y748jz.cloudfront.net/s/_squarelogo/256x256/e78596e17eeeeeeea340a328f70ff80b",
"profileUrl": "https://ca.indeed.com/cmp/Trader-Corporation"
},
"location": {
"formatted": "Toronto, ON",
"city": "Toronto",
"state": "Ontario",
"stateCode": "ON",
"region": "York District",
"postalCode": null,
"country": "Canada",
"countryCode": "CA",
"address": null,
"latitude": 43.70011,
"longitude": -79.4163
},
"salary": {
"display": "$140,000 - $190,000",
"min": 140000,
"max": 190000,
"currency": "CAD",
"period": "yearly",
"estimated": null
},
"jobTypes": [],
"shifts": [],
"skills": [
"Full-stack development",
".NET",
"Microservices",
"AWS",
"Distributed systems",
"Employee assistance program"
],
"occupations": [
"Technology Occupations",
"Software Development & Architecture Occupations"
],
"benefits": ["Employee assistance program"],
"workLocationType": null,
"workLocationCode": null,
"remote": false,
"urgentlyHiring": false,
"highVolumeHiring": false,
"applyCount": 25,
"applyViaIndeed": false,
"sponsored": false,
"newJob": false,
"indeedUrl": "https://ca.indeed.com/viewjob?jk=4fd53ccc8ee9fa5f",
"applyUrl": "https://job-boards.greenhouse.io/autotradercanada/jobs/7568537003",
"summary": "We are TRADER, a Canadian leader in digital automotive solutions. Our flagship brands — AutoTrader.ca, AutoSync, Dealertrack Canada and CMS — help Canadians buy, sell, and finance vehicles with confidence. As part of AutoScout24 group, Eur…",
"description": "We are TRADER, a Canadian leader in digital automotive solutions. Our flagship brands — AutoTrader.ca, AutoSync, Dealertrack Canada and CMS — help Canadians buy, sell, and finance vehicles with confidence.\n\nAs part of AutoScout24 group, Europe’s largest online car marketplace, we’re shaping the future of automotive retail in Canada and beyond.\n\nThis role will be within our Collateral Management (CMS) team…",
"descriptionHtml": "<div>...</div>",
"postedAt": "2026-01-14T06:00:00.000Z",
"listedAt": "2026-03-04T18:54:11.748Z",
"expiresAt": null,
"expired": false,
"reposted": true,
"scrapeErrors": {
"jobDetails": null,
"companyProfile": null
}
}

Excerpt — hybrid role with Indeed apply flow

{
"scrapedAt": "2026-06-18T07:38:01.102Z",
"inputUrl": "https://ca.indeed.com/jobs?q=full+stack+developer&l=Toronto%2C+ON&sort=date",
"id": "229f45d699743656",
"title": "Full-Stack Developer (C# / Angular)",
"normalizedTitle": "full stack developer",
"referenceNumber": "2bc8caf3-6e88-489e-928c-5a4bdda44252",
"language": "en",
"company": {
"name": "AKITU Inc.",
"industry": null,
"size": null,
"revenue": null,
"founded": null,
"headquarters": null,
"website": null,
"description": null,
"rating": null,
"reviewCount": null,
"logoUrl": null,
"profileUrl": "https://ca.indeed.com/cmp/Akitu-Inc."
},
"location": {
"formatted": "Oakville, ON",
"city": "Oakville",
"state": "Ontario",
"stateCode": "ON",
"region": "Halton District",
"postalCode": null,
"country": "Canada",
"countryCode": "CA",
"address": "Oakville, ON",
"latitude": 43.507385,
"longitude": -79.66769
},
"salary": {
"display": "80,000 - -1 CAD",
"min": 80000,
"max": -1,
"currency": "CAD",
"period": null,
"estimated": null
},
"jobTypes": ["Permanent", "Full-time", "Full-time +1"],
"shifts": [],
"skills": [
"Full-stack development",
"Relational databases",
"C#",
"Microsoft SQL Server",
".NET",
"Angular",
"Hybrid work",
"SaaS",
"Flexible schedule"
],
"occupations": [
"Software Development Occupations",
"Technology Occupations",
"Software Development & Architecture Occupations"
],
"benefits": ["Flexible schedule"],
"workLocationType": "Hybrid work",
"workLocationCode": "REMOTE_HYBRID",
"remote": true,
"urgentlyHiring": false,
"highVolumeHiring": false,
"applyCount": 325,
"applyViaIndeed": true,
"sponsored": false,
"newJob": true,
"indeedUrl": "https://ca.indeed.com/viewjob?jk=229f45d699743656",
"applyUrl": "http://ca.indeed.com/job/full-stack-developer-c-angular-229f45d699743656",
"summary": "*Full-Stack Developer (C# / Angular) * *Build scalable software that powers modern dental practices * *About Us * Akitu Inc is a fast-growing SaaS company transforming how dental clinics operate across Canada. Our platform, Akitu One, is b…",
"description": "*Full-Stack Developer (C# / Angular) *\n\n*Build scalable software that powers modern dental practices *\n\n*About Us *\n\nAkitu Inc is a fast-growing SaaS company transforming how dental clinics operate across Canada…",
"descriptionHtml": "<p>...</p>",
"postedAt": "2026-06-16T20:58:58.770Z",
"listedAt": "2026-06-16T20:58:58.770Z",
"expiresAt": null,
"expired": false,
"reposted": true,
"scrapeErrors": {
"jobDetails": null,
"companyProfile": null
}
}
{
"scrapedAt": "2026-06-18T07:38:01.024Z",
"inputUrl": "https://ca.indeed.com/jobs?q=full+stack+developer&l=Toronto%2C+ON&sort=date",
"id": "525fb4f913fcfe3e",
"title": "software engineer",
"normalizedTitle": "software engineer",
"referenceNumber": "49628288",
"language": "en",
"company": {
"name": "Tamanna Technology",
"industry": null,
"size": null,
"revenue": null,
"founded": null,
"headquarters": null,
"website": null,
"description": null,
"rating": null,
"reviewCount": null,
"logoUrl": null,
"profileUrl": "https://ca.indeed.com/cmp/Tamanna-Technology"
},
"location": {
"formatted": "Toronto, ON",
"city": "Toronto",
"state": "Ontario",
"stateCode": "ON",
"region": "Toronto District",
"postalCode": "M5J",
"country": "Canada",
"countryCode": "CA",
"address": null,
"latitude": 43.616,
"longitude": -79.383
},
"salary": {
"display": "57.69 - 57.69 CAD",
"min": 57.69,
"max": 57.69,
"currency": "CAD",
"period": null,
"estimated": null
},
"jobTypes": ["Permanent", "Full-time", "Full-time +1"],
"benefits": ["Dental care", "Extended health care", "RRSP"],
"remote": false,
"applyCount": 73,
"applyViaIndeed": false,
"indeedUrl": "https://ca.indeed.com/viewjob?jk=525fb4f913fcfe3e",
"applyUrl": "https://www.jobbank.gc.ca/jobsearch/jobposting/49628288",
"summary": "Durée de l'emploi: Permanent Langue de travail: Anglais Heures de travail: 40 hours per week Education: Expérience: Education Bachelor's degree Work setting Consulting firm Software company Information technology (IT) service provider Task…",
"postedAt": "2026-06-01T05:00:00.000Z",
"listedAt": "2026-06-01T23:59:50.415Z",
"scrapeErrors": {
"jobDetails": null,
"companyProfile": null
}
}

Combining direct URLs and keyword searches

You can use both input modes in a single run.

{
"startUrls": [
{
"url": "https://ca.indeed.com/jobs?q=data+analyst&l=Vancouver%2C+BC&sort=date"
}
],
"keywordSearches": [
{
"keywords": "machine learning engineer",
"country": "ca",
"location": "Toronto, ON",
"remoteJobs": false
},
{
"keywords": "product manager",
"country": "us",
"remoteJobs": true
}
],
"sort": "date",
"datePosted": "3",
"maxJobs": 25
}
  • Each search URL and keyword search is processed independently, up to Maximum jobs each
  • The same job may appear more than once if it matches multiple searches
  • Use inputUrl on each row to see which search produced it
  • If one search fails or returns no results, others can still complete

Free plan limits

On the Apify free plan, the Actor may automatically apply:

LimitValue
Direct search URLs per run2 (only the first URLs in your list)
Keyword searches per run2 (only the first searches in your list)
Maximum jobs per search20

Paid Apify plans can use the full input without these caps. If limits apply, the run log will include a short notice.


Data quality and limitations

Public job listing data
The Actor reads the same job data shown on Indeed search results and job detail pages. It does not access private employer accounts or unpublished listings.

Coverage varies by listing and country
Salary, benefits, skills, employer ratings, and apply links are not always published. Some fields may be null or empty even when the job is live on Indeed.

Direct URLs vs keyword searches
Filters in the input form (sort, date posted) apply only to keyword searches. Direct URLs keep whatever filters are already in the link.

Active listings change
Jobs are posted, updated, filled, and removed on the live site. Re-run on a schedule to track changes over time.

Apply links
applyUrl points to the application destination when Indeed exposes it — either on Indeed or on an external employer site. Some listings only link to the Indeed job page.

Compliance
You are responsible for using collected data in line with applicable laws and Indeed's terms of service.


Tips for best results

  1. Copy URLs from the site — Use real Indeed search URLs after setting keywords, location, and filters in the browser.
  2. Use keyword searches for quick setup — Enter title, country, and location without building URLs manually.
  3. Start with a small maxJobs — Test your search with 10–20 jobs before large exports.
  4. Use multiple searches for coverage — Run separate keyword or URL searches in one job to compare roles, cities, or countries.
  5. Filter in the dataset — Export to JSON, CSV, or Excel, then filter on title, company.name, location.formatted, salary.display, or remote.
  6. Schedule recurring runs — Use Apify schedules to monitor new postings or track hiring trends over time.
  7. Join on inputUrl — When combining results from multiple searches, keep the search URL to avoid confusion.
  8. Deduplicate on id — The same job can appear in multiple searches; use the Indeed job id to deduplicate if needed.

Frequently asked questions

Why was my search URL skipped?
The URL may not be a valid Indeed job search page, or it could not be processed in that run. Check the run log for warnings.

Why do sort and date posted not affect my direct URL?
Direct URLs are scraped exactly as provided. Use Keyword searches if you want to control sort and date posted from the input form.

Why is salary null?
Many employers do not publish salary on Indeed. When a range is shown on the site, it appears in salary.display and structured min/max fields when available.

Why is description empty but summary has text?
The search snippet may be available even when the full job page could not be loaded. Check scrapeErrors.jobDetails for context.

Why are company rating and website null?
Employer profile fields depend on what Indeed publishes for that employer on the job listing. Not every company has a full Indeed profile.

What does remote: true mean?
The listing is marked as a remote role on Indeed. Hybrid and in-person roles use workLocationType instead.

Will the same job appear twice?
Yes, if you use multiple search URLs or keyword searches that both return the same listing. Deduplicate using id if needed.

Can I scrape a single job by URL?
This Actor is built for search URLs and keyword searches. Use a search that returns the jobs you need, or include a direct search URL filtered to your target role and location.

Which Indeed country sites are supported?
Keyword searches support 32 countries listed in the input form. Direct URLs work on any Indeed country site that uses standard /jobs search pages.


Support

For Actor-specific issues, use the Issues tab on the Apify store listing or contact the publisher through Apify.

For platform questions (runs, billing, API, schedules), see Apify documentation and Apify support.