Indeed Jobs Scraper - Canada, US & 6 More Countries avatar

Indeed Jobs Scraper - Canada, US & 6 More Countries

Pricing

from $0.05 / 1,000 results

Go to Apify Store
Indeed Jobs Scraper - Canada, US & 6 More Countries

Indeed Jobs Scraper - Canada, US & 6 More Countries

Scrape Indeed jobs in 8 countries: Canada, the US, UK, Ireland, Australia, New Zealand, India and Germany. Search a city, a region, or a whole country swept city by city. Full descriptions, pay, employer details and direct apply links. Scheduled runs can return only jobs you have not seen before.

Pricing

from $0.05 / 1,000 results

Rating

0.0

(0)

Developer

Akhil rajesh

Akhil rajesh

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

0

Monthly active users

9 hours ago

Last modified

Share

Scrape job listings from Indeed in eight countries — job title, company, location, pay, job type, posting date, the full job description, employer details and the employer's own apply link — as clean, structured data. Results come from Indeed's search index, not just the promoted listings on page one. One search goes about 1,000 jobs deep, and a whole country or province is swept city by city to go far beyond that. Scheduled runs can return only the jobs you haven't seen before, so you stop paying for the same listings every day, and you can look up specific jobs to check whether they're still open.

Try it now: keep the example input (software developer in Toronto) and press Start. It returns 100 jobs in a few seconds.

What data can you extract from Indeed?

One row per job listing:

GroupFields
Jobtitle, jobTypes, isRemote, remoteType, attributes, occupations, isUrgentHire
PaysalaryMin, salaryMax, salaryCurrency, salaryPeriod, salaryText, salaryIsEstimated
Descriptiondescription (plain text), descriptionHtml
Locationlocation, city, state, postalCode, country
ApplyingapplyUrl (the employer's careers page when there is one), easyApply
Employercompany, companyWebsite, companyIndustry, companySize, companyRevenue, companyDescription, companyLogo, companyRating, companyReviewCount, companyUrl
TimingdatePosted, dateOnIndeed, isExpired
Provenanceurl, jobKey, jobSource, source, searchQuery, searchLocation, searchCountry, sourceUrl, scrapedAt

Pay is returned as numbers (salaryMin, salaryMax) with its currency and period, alongside a readable version, so you can filter and compare without parsing. attributes holds every tag Indeed attaches to a job — benefits, shifts, skills, education and licences included. Export to JSON, CSV, Excel or HTML, read it through the API, or schedule runs and feed the results into your own tools.

How complete is it? In a test run of 4,517 Canadian jobs (September 2026), every row had a full description and an apply link, 83% had pay, 80% had the employer's website, and 84% had an employer rating.

How many jobs does one run return?

As many as you ask for, up to what Indeed holds for your searches:

  • One search (a keyword in a location) returns up to about 1,000 jobs — that's where Indeed ends its results.
  • A whole country or region goes deeper. Leave Location empty, or enter a region such as Ontario, TX, Scotland, Queensland or Bayern, and the Actor searches it as a whole first. When Indeed cuts that search off at its ceiling, it carries on city by city — 515 cities across the eight countries, largest first — until Max results is reached. For registered nurse across Canada, that turned 993 jobs into 5,724 unique jobs in 3 minutes.
  • Add keywords and locations to go further still. Every keyword is searched in every location, the results are combined, and duplicates are removed by Indeed's job key.
  • Max results is shared fairly between your searches, so one broad search can't crowd out the others. If a search runs dry, its share goes to the rest.

For example, three keywords across Toronto and Vancouver returned 4,517 unique jobs from 1,264 employers in 41 seconds, all with full descriptions.

Pick several countries and each location goes to the site that matches it: Toronto, ON only searches Canada and Sydney NSW only Australia, while an ambiguous London is searched in every country you selected. So one run can cover Toronto, Manchester, Sydney and Bengaluru together.

Which countries can you scrape?

Canada, the United States, the United Kingdom, Ireland, Australia, New Zealand, India and Germany. Pick one under Country and add more under More countries; each is searched on its own Indeed site, in its own currency.

How much of a country's data carries pay varies a lot, and it's worth knowing before you plan around it. Measured in September 2026 on a broad search:

Usually has payOften has payRarely has pay
Canada 69%, UK 51%Australia 40%, Ireland 43%, India 25%Germany 17%, New Zealand 9%

Everything else — descriptions, employer details, apply links — is just as complete everywhere.

Two things to keep in mind outside Canada and the US:

  • Search in the local language. Indeed matches your keyword as written, so softwareentwickler finds German jobs that software developer misses.
  • Write locations the way the local site does: Manchester, Sydney NSW, Mumbai, Maharashtra, München, Dublin.

How fresh are the listings?

New listings normally appear within a few hours of being posted in every country, so Posted within: Last 24 hours works for daily monitoring.

Indeed's search does have off days. During testing, new Canadian listings once ran about three days behind for several hours before catching up. If a short Posted within window comes back empty, widen it or run again later.

Every row carries both datePosted (when the employer published the job) and dateOnIndeed (when Indeed listed it), so you always know how old a listing is.

How much does it cost to scrape Indeed?

Pay-per-event, with platform usage included — there is nothing else to pay. What a job costs depends on your Apify plan:

Your planPer 1,000 jobs
Free$0.10
Starter$0.09
Scale$0.07
Business and above$0.05

Plus $0.001 each time a run starts, on every plan (charged per GB of memory; the default is 512 MB, so that's one start fee per run).

RunJobs returnedOn FreeOn Business
The example input100$0.011$0.006
One search, as deep as it goesabout 1,000$0.101$0.051
Three keywords across two cities4,500$0.451$0.226
One keyword across all of Canada, city by city5,724$0.573$0.287

You're charged only for jobs that are delivered; searches that find nothing cost nothing beyond the start fee. With Only jobs you haven't seen before switched on, a repeat run charges only for listings that are new since last time, which is what makes daily monitoring affordable. To cap spending, set a maximum cost per run in the run options — the Actor stops cleanly when it reaches the limit.

How to scrape Indeed

  1. Enter a job keyword, such as software developer or registered nurse. Indeed needs a keyword for every search, and specific job titles work best.
  2. Pick the country, and add More countries if you want several at once.
  3. Enter a location, such as Toronto, ON, Manchester or Sydney NSW. For a whole region enter Ontario, TX, Scotland, Queensland or Bayern; for the whole country leave it empty.
  4. Set Max results. For country- and province-wide searches this decides how deep the city-by-city sweep goes, and so what the run costs.
  5. Optionally open Advanced filters for job type, remote or hybrid work, posting age and search radius.
  6. Press Start, then open the Output tab or export the dataset.

Track one employer, or reuse a search you already built

Paste URLs into Start URLs instead of, or alongside, keyword searches:

  • A company's jobs page — https://www.indeed.com/cmp/Apple/jobs — returns that employer's listings, and only theirs: Apple, not Apple Rehab or Big Apple Bagels. https://www.indeed.com/cmp/Apple works too, and so does the companyUrl from any row. Add ?q=engineer&l=Austin%2C+TX to the URL to narrow it to a keyword or a place.

  • A search URL copied from your browser — https://ca.indeed.com/jobs?q=nurse&l=Toronto%2C+ON&fromage=7 — keeps its keyword, location, radius, posting age, sort order and job-type or remote filters. Filters Indeed's search can't apply here, such as experience level, are ignored and listed in the log.

  • A single job — https://ca.indeed.com/viewjob?jk=1a2b3c4d5e6f7890 — returns that one job.

Each row records which URL produced it in sourceUrl. URLs from any of the eight Indeed sites are supported.

Check whether saved jobs are still open

Put job URLs or the jobKey values from an earlier run into Jobs to look up (jobKeys). Each job comes back with its current details, and isExpired tells you whether it has closed. Jobs that Indeed has removed altogether are listed in the log and saved as JOB_KEYS_NOT_FOUND in the run's key-value store — you aren't charged for those. Lookups are fast: a few hundred jobs take a couple of seconds.

{
"jobKeys": ["1a2b3c4d5e6f7890", "https://www.indeed.com/viewjob?jk=0f9e8d7c6b5a4321"]
}

Watch for new jobs without paying twice

Turn on Only jobs you haven't seen before (onlyNewJobs) and the Actor remembers every job it has delivered. The first run collects the lot; each run after it returns only what's new and charges only for that. In testing, repeating the same search immediately returned 0 of 24 jobs and cost nothing beyond the start fee.

{
"searchQuery": "registered nurse",
"country": "ca",
"location": "Toronto, ON",
"maxResults": 1000,
"onlyNewJobs": true
}

Schedule that daily and you pay for new listings only. A few details worth knowing:

  • Runs that share a History name (historyName) share their memory, so use one name per thing you're monitoring and a different name to start fresh.
  • Jobs are forgotten after 45 days, so a listing that's still open after that is offered once more.
  • Jobs you ask for in Jobs to look up are always returned, even if they're in the history — re-checking a saved job is the point of asking for it.
  • Max results counts new jobs, so maxResults: 1000 means a thousand jobs you haven't seen, not a thousand searched.

Run it from the API

curl -X POST "https://api.apify.com/v2/actors/akhil_rajesh~indeed-jobs-scraper/run-sync-get-dataset-items" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"searchQuery": "registered nurse",
"country": "us",
"location": "Austin, TX",
"datePosted": "7",
"maxResults": 200
}'

Run it from Python

from apify_client import ApifyClient # pip install apify-client
client = ApifyClient("YOUR_API_TOKEN")
run = client.actor("akhil_rajesh/indeed-jobs-scraper").call(run_input={
"searchQuery": "software developer",
"extraKeywords": ["data engineer"],
"country": "ca",
"location": "Toronto, ON",
"extraLocations": ["Vancouver, BC", "Calgary, AB"],
"maxResults": 1000,
})
for job in client.dataset(run.default_dataset_id).iterate_items():
print(job["title"], job.get("company"), job.get("salaryText"), job.get("applyUrl"))

Fields without a value are left out of a row, so read optional fields with .get().

Input

FieldTypeDefaultDescription
searchQuerystring—Job keyword, e.g. software developer. Needed unless you use Start URLs
extraKeywordsarray—More keywords; each is searched in every location
countryenumcaca, us, gb, ie, au, nz, in, de
extraCountriesarray—More countries to search in the same run
locationstring—A city, a US ZIP code, or Remote. A region, or empty for the whole country, is swept city by city
extraLocationsarray—More locations — the simplest way to cover a region
startUrlsarray—Indeed search URLs, company jobs pages or single job URLs to scrape directly
jobKeysarray—Job keys or job URLs to look up, e.g. to check whether saved jobs are still open
onlyNewJobsbooleanfalseSkip and don't charge for jobs earlier runs already delivered
historyNamestringindeed-jobs-historyWhich history onlyNewJobs reads and writes
maxResultsinteger100Stop after this many jobs (up to 20,000)
fullDescriptionsbooleantrueInclude each job's complete description

Sample output

{
"jobKey": "1a2b3c4d5e6f7890",
"url": "https://ca.indeed.com/viewjob?jk=1a2b3c4d5e6f7890",
"title": "Senior Full Stack Developer",
"company": "Example Technologies",
"companyUrl": "https://ca.indeed.com/cmp/Example-Technologies",
"companyWebsite": "https://www.example.com",
"companyIndustry": "Information Technology",
"companySize": "1,001 to 5,000",
"companyRevenue": "$100M to $500M (USD)",
"companyRating": 3.7,
"companyReviewCount": 214,
"location": "Toronto, ON M5V 2T6",
"city": "Toronto",
"state": "ON",
"postalCode": "M5V 2T6",
"country": "CA",
"isRemote": false,
"remoteType": "Hybrid work",
"salaryMin": 110000,
"salaryMax": 140000,
"salaryCurrency": "CAD",
"salaryPeriod": "YEAR",
"salaryText": "$110,000–$140,000 a year",
"salaryIsEstimated": false,
"jobTypes": ["Full-time", "Permanent"],
"attributes": ["Full-time", "Permanent", "Hybrid work", "Dental care", "Extended health care", "Bachelor's degree", "React", "Node.js"],
"occupations": ["Full Stack Developers", "Software Development Occupations"],
"description": "We're looking for a senior full-stack developer with architectural ambition…",
"datePosted": "2026-09-16T14:00:00+00:00",
"dateOnIndeed": "2026-09-16T14:05:12+00:00",
"applyUrl": "https://careers.example.com/jobs/4821",
"easyApply": false,
"isUrgentHire": false,
"isExpired": false,
"jobSource": "Example Technologies",
"source": "ca.indeed.com",
"searchQuery": "software developer",
"searchLocation": "Toronto, ON",
"searchCountry": "CA",
"scrapedAt": "2026-09-21T16:03:22.347Z"
}

descriptionHtml, companyDescription and companyLogo are omitted above for readability.

Use cases

  • Job search automation: track new postings for a role and location, and get alerted on the ones that match
  • Salary benchmarking: compare advertised pay by title, city and employer, using numeric ranges
  • Recruiting intelligence: see which companies are hiring, how fast, and what they offer
  • Labour market research: compare demand, job types, pay and remote work across eight countries
  • Lead generation: build lists of employers actively hiring in a niche, with their website, industry, size and revenue

FAQ

Are these promoted listings or organic ones?

They come from Indeed's search index — the full set of matching jobs, ordered by relevance or by date — rather than from the promoted placements at the top of Indeed's web pages. That matters most in Canada, where a visitor who isn't signed in sees only promoted listings on Indeed's website.

Why did a short "Posted within" window return nothing?

Usually because nothing new matched. Occasionally it's Indeed: its search sometimes falls behind on new listings for a few hours — in testing, Canadian listings were once about three days behind — and then catches up. Widen the window, or run again later. dateOnIndeed on each row shows how fresh the results really are.

Why did a very broad search return almost nothing?

Indeed's search occasionally returns a broad country-wide search — manager across the whole United States, say — empty or nearly empty, without reporting an error, while the same keyword in a city works. The Actor checks for this: when a country- or province-wide search looks too thin, it tries the largest cities, and if they have jobs it sweeps city by city instead. A search in a single city can't be double-checked that way, so if one looks wrong, run it again.

Why did a city I know has jobs return nothing?

Check that the city's country is selected. Toronto, ON with only the United States chosen searches Toronto on Indeed US, which has no Toronto listings, so the run ends with zero jobs. The Actor warns you when a location clearly belongs to a country you did not pick — the warning appears in the run's status message. Add the country under Country or More countries.

Why did I get fewer jobs than Max results?

Your searches ran out of jobs. One city search ends at about 1,000 results, and narrower ones end sooner. To go further, add More keywords, or widen the location to a province, a state or the whole country, which the Actor sweeps city by city. A location-only search returns nothing, because Indeed needs a keyword.

Why doesn't a Canadian postal code work as a location?

Indeed's search doesn't resolve Canadian postal codes, so use the city — Toronto, ON rather than M5V 2T6. If a location has both, the Actor drops the postal code and searches the city. US ZIP codes work.

Why is salary missing on some jobs?

Many employers don't publish pay, and how often they do varies by country — see the table above, which runs from 69% in Canada to 9% in New Zealand. It varies by occupation too. salaryIsEstimated tells you whether the employer stated the pay or Indeed estimated it.

How do I monitor new jobs every day?

Turn on Only jobs you haven't seen before and schedule the Actor daily. It remembers what it has delivered, so each run returns and charges for new listings only — no de-duplication needed at your end, and no repeated cost for yesterday's jobs. Leave Posted within empty or generous: the history does the filtering, so you still catch anything Indeed listed late.

Can you add another country?

Indeed runs about 50 more sites and they all work through the same service, so adding one is mostly a matter of building and checking its city list. Ask through the Actor's Issues tab and say which country you need.

Other Actors by this developer

Data source

All data comes from Indeed, a public job board, through the same job search service that powers Indeed's own apps — one site per country, from ca.indeed.com to de.indeed.com. This Actor reads publicly available listings only, never signs in to an account, and stores nothing beyond the dataset you request.

Disclaimer: This is an independent tool. It is not affiliated with, endorsed by, or sponsored by Indeed, Inc. or any related entity. All product and company names are the property of their respective owners.

Limitations

  • Indeed only: jobs posted exclusively elsewhere aren't included
  • About 1,000 jobs per search, so use more keywords and locations for more
  • Indeed's search has off days: new listings can lag for a few hours, and a very broad search can come back nearly empty without an error. Indeed reports no totals, so the Actor can only catch the second case for country- and province-wide searches
  • A keyword is required for every search
  • City-by-city sweeps cover 515 cities across the eight countries, within 25 km or 25 miles of each, plus whatever the country- or region-wide search returns; jobs well away from a listed city can be missed
  • New Zealand has no region sweep: Indeed only reports North and South Island there, so use the country or a city
  • Start URLs are searched exactly as pasted, without the city-by-city sweep
  • The history behind "only new jobs" lives in your account, so it works across scheduled runs but not across different Apify accounts
  • Canadian postal codes aren't accepted as a location; US ZIP codes are
  • No promoted-listing flag: Indeed's search service doesn't say which jobs employers pay to promote
  • Salary and employer details are only present when Indeed has them
  • Job descriptions are the employer's text as published, including any formatting quirks
  • If Indeed's search service is ever unavailable, the Actor falls back to Indeed's public web pages, which show one page per search; the run's status message says when that happened
  • Listings change constantly, and a job can close between runs