Google Jobs Scraper: by query and location, with salary avatar

Google Jobs Scraper: by query and location, with salary

Pricing

from $13.00 / 1,000 result page delivereds

Go to Apify Store
Google Jobs Scraper: by query and location, with salary

Google Jobs Scraper: by query and location, with salary

Job listings from Google Jobs by query and location: title, company, location, source, posting date, salary when shown, and deduplicated apply links. Strict schema for pipelines and AI agents; only successfully delivered result pages are charged.

Pricing

from $13.00 / 1,000 result page delivereds

Rating

0.0

(0)

Developer

Steadydata Team

Steadydata Team

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

1

Monthly active users

5 days ago

Last modified

Share

Google Jobs Scraper (reliable)

Fetch job listings from Google Jobs for up to 100 search queries per run: title, company, location, source board, posting date, employment type, salary when shown, the full job description, the job highlights (qualifications, responsibilities, benefits) and the real apply links on LinkedIn, Indeed, ZipRecruiter and the other boards, plus a stable job ID for deduplication across runs. Built for job boards, recruitment analytics and AI agents: strict schema, explicit error codes, and you only pay for result pages that are actually delivered.

Why this scraper

  • Only successful results are charged. A query that hits a block or returns no results shows up as a clear error record at no cost.
  • Fails loudly, never silently. When Google changes its page, you get an explicit error instead of a quietly empty dataset — and we fix it fast; reliability is the product.
  • Clean business data. Job postings as companies published them: no scraping of personal contact details, no profile data.
  • Deduplication built in. Every job carries Google's stable job ID, so merging runs and tracking new postings over time is trivial.
  • Apply links that work. Google's own page links through redirects that fail outside a browser; this actor returns the destination URLs themselves (measured 03-10-2026: up to eight boards per job, all direct https:// links).
  • The whole description, not the preview. Measured on ten San Francisco jobs: 3,400 to 10,800 characters each, plus the highlights Google extracted from the post.

Who this is for

Recruiters and job boards tracking what is being posted, market analysts watching hiring demand, and sales teams using job ads as a buying signal.

Google Jobs aggregates across LinkedIn, Indeed and company career pages, so one query covers sources you would otherwise scrape separately.

Who this is not for

Read this before you buy. This actor returns job postings as companies published them: no recruiter names, no e-mail addresses, no phone numbers, and it never will. It does not apply to jobs or open the source board; via tells you where the posting lives. Results are region-bound, exactly as on Google Jobs: a query with the wrong country returns nothing (at no cost). Each query returns one result page of about ten jobs; Google does not serve further pages on this route (measured 03-10-2026), so for more jobs use more specific queries (role plus city, or several cities). Billing is per delivered result page, not per job.

Input fields

FieldTypeRequired or defaultWhat it does
querieslist of textrequiredJob search queries, e.g. 'software engineer amsterdam'. Combine role and place in one query, or set location separately below.
locationtextOptional location appended to every query, e.g. 'Amsterdam' or 'Netherlands'.
maxJobsPerQuerynumber50Keep at most this many jobs per query. Google serves one page of about ten jobs per query on this route.
countrytextUSISO country code (e.g. US, NL, DE). Determines both the proxy exit country and the gl parameter; Google Jobs results are region-bound, so match this to where the jobs should be.

Input example

{
"queries": ["software engineer amsterdam", "data analyst rotterdam"],
"location": "",
"country": "NL",
"maxJobsPerQuery": 50
}

country sets both the proxy exit country and Google's region parameter; Google Jobs results are region-bound, so match it to where the jobs should be. Queries can be in any language; interface labels (posting date, employment type) come back in English.

Output example

FieldTypeWhat it holdsExample
querytextThe input this row was found with, so rows from several inputs can be told apart.software engineer new york
countrytextThe country the request was made from; Google answers differently per country.US
locationtextThe place the vacancies were searched in.
jobCountnumberHow many vacancies this search returned.10
jobslistThe vacancies themselves: per job the id, title, company, location, the board it came from, how long ago it was posted, the salary as far as it is stated, the contract type, the full description, the job highlights and the direct apply links per board.[{"jobId": "j6QtoduLAIVUDroCLAAAAAA", "title": "Agentic D...
{
"query": "software engineer amsterdam",
"status": "ok",
"jobCount": 10,
"jobs": [
{
"jobId": "j2njGYSBOJOwz6gY2AAAAAA",
"title": "Senior Software Engineer I, Core Objects",
"company": "Braze",
"location": "San Francisco, CA",
"via": "LinkedIn",
"posted": "16 hours ago",
"salary": "",
"scheduleType": "Full-time",
"description": "At Braze, we have found our people. ...",
"jobHighlights": [
{"title": "Qualifications", "items": ["5+ years of full-stack development experience", "..."]},
{"title": "Responsibilities", "items": ["..."]}
],
"applyOptions": [
{"title": "LinkedIn", "link": "https://www.linkedin.com/jobs/view/senior-software-engineer-i-core-objects-at-braze-4474790743?utm_campaign=google_jobs_apply&utm_source=google_jobs_apply&utm_medium=organic"},
{"title": "Indeed", "link": "https://www.indeed.com/viewjob?jk=ec897a1ce63d0d56&utm_campaign=google_jobs_apply&utm_source=google_jobs_apply&utm_medium=organic"}
],
"extensions": ["16 hours ago", "Full-time", "No Degree Mentioned", "Dental insurance", "Health insurance", "Paid time off"],
"detectedExtensions": {"posted_at": "16 hours ago", "schedule_type": "Full-time", "health_insurance": true, "dental_coverage": true},
"shareLink": "https://www.google.com/search?ibp=htl;jobs&q=software+engineer+san+francisco&htidocid=2njGYSBOJOwz6gY2AAAAAA%3D%3D"
}
]
}

A failed query produces an error record instead (and is not charged):

{"query": "someterm", "status": "error", "errorCode": "NO_RESULTS", "error": "No job cards found"}

Error codes: NO_RESULTS, BLOCKED, FETCH_ERROR. INPUT_TRUNCATED appears once when your input is longer than this actor accepts.

Pricing

Pay per event: one job-page-fetched event per delivered result page. No charge for failed queries, no separate platform-usage surcharge.

Free Apify plan: this actor delivers up to 25 rows per run for accounts on the Apify free plan, and then stops with a message. That limit is set by us, not by Apify. It exists so the actor keeps paying for itself for the people who do pay. Any paid Apify plan runs it at full size, billed per delivered row, with failed rows never charged.

Reviews: if this actor saves you time, a short review on this page is the one thing that helps most. Ratings are what other buyers look at first, and we have no other way to ask.

FAQ

Where does the data come from? Google Jobs aggregates postings from LinkedIn, Indeed, company career sites and more; each job's via field tells you the source board.

Can I search in my own language? Yes — phrase queries in any language and set country to the target region; only the metadata labels come back in English.

Is personal data collected? No. Only job postings as published by companies; the actor extracts no personal contact fields.

Why is it so much cheaper than comparable actors? Because it does not drive a browser. It reads the page Google renders server-side, which is faster and far lighter, and that saving goes into the price.

I get no results, what now? Almost always the country does not match the query. Google Jobs is region-bound, so searching a Dutch city with the country set to US returns nothing. Set country to the region the jobs are in; the error message says so too, and you are not charged for it.

Can I call it from my own code, like an API? Yes. Every run is available through the Apify API: start it with one HTTP request, then read the results as JSON, CSV or Excel from the dataset endpoint, or use the official Python and JavaScript clients. The input is the same JSON as in the input example above, so a scheduled script, a Make or Zapier step or an AI agent can call it without any changes.