Indeed Jobs Scraper
Pricing
from $1.00 / 1,000 jobs
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
Maintained by CommunityActor stats
0
Bookmarked
3
Total users
2
Monthly active users
a day ago
Last modified
Categories
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:
| Section | What it contains |
|---|---|
| Identity | Job ID, title, reference number, language, and links to the Indeed posting |
company | Employer name, industry, size, rating, review count, logo, and profile link when Indeed publishes them |
location | Formatted location plus city, region, state, country, postal code, and coordinates when available |
salary | Display text, min/max range, currency, pay period, and whether the figure is estimated |
| Job details | Job types, shifts, skills, occupations, benefits, remote/hybrid/in-person flags |
| Hiring signals | Urgently hiring, high-volume hiring, apply counts, sponsored and new-job flags |
| Application | Apply URL (external employer site or Indeed apply flow when shown) |
| Description | Plain-text summary, full description, and HTML description when available |
| Timeline | Posted, listed-on-Indeed, and expiration dates |
inputUrl | The 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
- Open the Actor in the Apify Console.
- 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).
- Set Maximum jobs (default
10) — this limit applies per search URL or keyword search. - For keyword searches only, adjust Sort jobs by and Date posted under search filters.
- 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
| Type | List of URLs |
| Format | Indeed job search pages (indeed.com/jobs?... or country sites such as ca.indeed.com/jobs?...) |
| Tip | Copy 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
| Type | List of search rows |
| Required fields | Job title or keywords, Country |
| Optional fields | Location (city, region, state/province, or postal code) |
| Remote jobs | When 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
| Type | Select |
| Options | Date (default), Relevance |
| Applies to | Keyword searches only |
Date posted
| Type | Select |
| Options | All dates (default), Last 24 hours, Last 3 days, Last 7 days, Last 14 days |
| Applies to | Keyword searches only |
Maximum jobs
| Type | Integer |
| Range | 1 – 10,000 |
| Default | 10 |
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
inputUrlon 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
| Field | Description |
|---|---|
scrapedAt | ISO timestamp when the job was collected |
inputUrl | The search URL that produced this job |
id | Indeed job key (unique identifier for the listing) |
title | Job title |
normalizedTitle | Normalized title when Indeed provides one |
referenceNumber | Employer or Indeed reference number when available |
language | Job posting language code when available |
indeedUrl | Direct link to the job on Indeed |
applyUrl | Application link — external employer URL or Indeed apply URL when shown |
summary | Short snippet from search results or truncated description |
description | Full job description as plain text |
descriptionHtml | Full job description as HTML when available |
company — employer
| Field | Description |
|---|---|
name | Company or employer name |
industry | Industry label when published |
size | Company size range when published |
revenue | Revenue range when published |
founded | Year founded when published |
headquarters | Headquarters location when published |
website | Company website when published |
description | Company summary when published |
rating | Indeed employer rating when available |
reviewCount | Number of Indeed employer reviews when available |
logoUrl | Employer logo URL when available |
profileUrl | Link to the employer's Indeed company page when available |
location
| Field | Description |
|---|---|
formatted | Display location string |
city | City name |
state | State or province name |
stateCode | State or province code |
region | Region label |
postalCode | Postal or ZIP code |
country | Country name |
countryCode | Country code |
address | Street address when available |
latitude / longitude | Coordinates when available |
salary
| Field | Description |
|---|---|
display | Human-readable salary text (for example $120,000 - $150,000 a year) |
min / max | Numeric range when parsed |
currency | Currency code when available |
period | Pay period (for example hourly, monthly, yearly) |
estimated | Whether the salary is marked as estimated |
Job details and hiring
| Field | Description |
|---|---|
jobTypes | Employment types (for example Full-time, Part-time, Contract) |
shifts | Shift labels when listed |
skills | Skills and attributes associated with the role |
occupations | Occupation categories when listed |
benefits | Benefits mentioned in the posting |
workLocationType | Work arrangement label (for example Remote, Hybrid, In-person) |
workLocationCode | Work arrangement code when available |
remote | Whether the role is remote |
urgentlyHiring | Urgent hiring flag when shown |
highVolumeHiring | High-volume hiring flag when shown |
applyCount | Organic apply-start count when Indeed publishes it |
applyViaIndeed | Whether applications go through Indeed |
sponsored | Sponsored listing flag when shown |
newJob | Whether the listing appears newly posted (based on listed date) |
Timeline and status
| Field | Description |
|---|---|
postedAt | Original publish date when available |
listedAt | Date the job appeared on Indeed |
expiresAt | Expiration date when available |
expired | Whether the listing is marked expired |
reposted | Whether the job is a repost |
scrapeErrors
| Field | Description |
|---|---|
jobDetails | Present when full job details could not be retrieved; summary fields from search results may still be saved |
companyProfile | Present 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}
Excerpt — management role with salary range and external apply link
{"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}}
Excerpt — external apply link (Job Bank) and hourly-style pay
{"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
inputUrlon 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:
| Limit | Value |
|---|---|
| Direct search URLs per run | 2 (only the first URLs in your list) |
| Keyword searches per run | 2 (only the first searches in your list) |
| Maximum jobs per search | 20 |
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
- Copy URLs from the site — Use real Indeed search URLs after setting keywords, location, and filters in the browser.
- Use keyword searches for quick setup — Enter title, country, and location without building URLs manually.
- Start with a small
maxJobs— Test your search with 10–20 jobs before large exports. - Use multiple searches for coverage — Run separate keyword or URL searches in one job to compare roles, cities, or countries.
- Filter in the dataset — Export to JSON, CSV, or Excel, then filter on
title,company.name,location.formatted,salary.display, orremote. - Schedule recurring runs — Use Apify schedules to monitor new postings or track hiring trends over time.
- Join on
inputUrl— When combining results from multiple searches, keep the search URL to avoid confusion. - Deduplicate on
id— The same job can appear in multiple searches; use the Indeed jobidto 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.