Google Jobs Scraper — pay per job avatar

Google Jobs Scraper — pay per job

Pricing

from $4.00 / 1,000 job rows

Go to Apify Store
Google Jobs Scraper — pay per job

Google Jobs Scraper — pay per job

One clean row per job from Google’s Jobs tab: parsed location, ISO posted date, salary split out, every apply link, the job’s own Google link. USD 0.004 a row, no subscription. US, UK, Canada, India.

Pricing

from $4.00 / 1,000 job rows

Rating

0.0

(0)

Developer

Zachary Bucheister

Zachary Bucheister

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

4 hours ago

Last modified

Categories

Share

Google Jobs Scraper — one clean row per job, pay per result

Searches Google's Jobs tab for a query in a place and returns one normalised row per job: title, company, parsed location, posted date as an ISO date, salary split into minimum, maximum, currency and period, employment type, every apply link with its job board, the full description and highlights, Google's own job id, a dedupe key, and where and when the row came from.

You pay per job row returned, not per run or per month. A run that is blocked or cannot read the page fails and says which; it never ends "succeeded" with nothing.

Contents

How to use · Input · Output and a sample row · Price · Reliability · Limits · FAQ

How to use

  1. Enter a query ("registered nurse") and a place ("Houston,Texas,United States"); pick the Google site (us, gb, ca, in) and, if you want, a date window. Or paste a list of searches to run them in one go.
  2. Set the maximum total charge for the run (10 jobs cost USD 0.04) and start it. Rows appear in the Output tab as they are read, with a Jobs view and a Salary view.
  3. Export the dataset as JSON, CSV or Excel, or call the Actor from the API, a schedule or an integration like any other Apify Actor.

Input

FieldWhat it doesDefault
queryWhat to search for, as you would type it: "registered nurse", "software engineer"required
locationWhere, as a place name. "City,Region,Country" ("Houston,Texas,United States") is the most preciserequired
countryThe Google site to search: us (google.com), gb (google.co.uk), ca (google.ca) or in (google.co.in)us
datePostedany, week (jobs Google lists as posted in the past week) or day (the past day)any
maxResultsPerSearchStop a search at this many jobs (1 to 100)10
searchesSeveral searches in one run: a list of {"query", "location", "country"}; overrides the three fields above. A job two searches both list is returned once

Google serves 10 jobs a page. For a maximum above 10 the actor also fetches Google's narrower date windows (past week, then past day) as further pages, so one search yields up to about 30 distinct jobs. For more, run more searches: other locations, other wordings of the query.

Output

One row per job, in the dataset, with these fields:

FieldMeaning
title, companyAs Google shows them
location, location_city, location_region, location_country, remoteThe location text and its parsed parts; remote is true for "Anywhere" or "work from home"
posted_date, posted_date_approximate, posted_textThe date resolved from Google's "3 days ago" against the retrieval time (YYYY-MM-DD); approximate when Google said "2 weeks ago", "a month ago" or "30+ days ago"; the original text beside it
salary_min, salary_max, salary_currency, salary_period, salary_textThe salary as Google shows it, split; period is hour, day, week, month or year; a bare "$" is the dollar of the site searched (CAD on google.ca); the original text beside it
salary_plausiblefalse when the amount does not fit its period, such as Google's own "£13 a year" for an hourly rate: the value is kept as shown and notes says why; null with no salary
employment_typefull_time, part_time, contractor, internship, temporary; several comma-joined when Google lists several ("Full-time and Internship")
apply_linksEvery apply option, {"board", "url"}, with the direct destination where Google carries it
viaThe board Google took the listing from
description, job_highlightsThe full description text and Google's highlight sections (qualifications, benefits, responsibilities)
google_job_idGoogle's id for the job, stable across searches and runs
dedupe_keyA 16-character hash of title, company and location with case, accents and punctuation removed: the same job found twice has the same key
search_query, search_location, search_countryThe search that found the row
source, source_url, as_of, retrieved_at"Google Jobs"; the job's own share link on Google, tracking parameters removed; the date the row was true; the retrieval time in UTC
notesWhy a value is empty or flagged, in words; null when nothing is

Empty values are null, never "N/A". Dates are ISO 8601.

Sample

One row from a run of 2026-10-28 ("software engineer" in New York; four searches, 60 rows, USD 0.033 of platform usage). The description and highlights are cut short and six of the eight apply links are left out to fit here; the dataset holds them whole.

{
"title": "Software Engineer (Remote - US)", "company": "TixTrack",
"location": "New York, NY", "location_city": "New York", "location_region": "NY", "location_country": "US", "remote": false,
"posted_date": "2026-10-08", "posted_date_approximate": false, "posted_text": "20 days ago",
"salary_min": 75000, "salary_max": 115000, "salary_currency": "USD", "salary_period": "year",
"salary_text": "$75K–$115K a year", "salary_plausible": true,
"employment_type": "full_time",
"apply_links": [
{ "board": "Indeed", "url": "https://www.indeed.com/viewjob?jk=e3cf91577dccf37a&utm_campaign=google_jobs_apply&utm_source=google_jobs_apply&utm_medium=organic" },
{ "board": "TixTrack - Teamtailor", "url": "https://tixtrack.teamtailor.com/jobs/8287889-sr-software-engineer-ii-remote-us?utm_campaign=google_jobs_apply&utm_source=google_jobs_apply&utm_medium=organic" }
],
"via": "Indeed",
"description": "At TixTrack, we support our clients by creating superior ticketing solutions for performing arts and cultural institutions through a combination of modern technology, beautifully simple design, and the art of listening.\n\nHeadquartered in the heart of the Broadway Theatre District, NYC, we are a small, but growing team […]",
"job_highlights": [
{ "title": "Qualifications", "items": ["You're curious about how things work and eager to keep growing […]", "You take pride in quality"] },
{ "title": "Benefits", "items": ["Our Software Engineer 1 has a base annual salary range of $75,000 - $95,000 and our Software Engineer 2 has a base annual salary range of $95,000 - $115,000"] },
{ "title": "Responsibilities", "items": ["We're looking for a full stack Software Engineer to help build and improve the nLiven platform, working in both the frontend and backend"] }
],
"google_job_id": "KeSPkJQGSIHqbktDAAAAAA==", "dedupe_key": "8b5c59366211a68e",
"search_query": "software engineer", "search_location": "New York,New York,United States", "search_country": "us",
"source": "Google Jobs",
"source_url": "https://www.google.com/search?ibp=htl;jobs&q=software+engineer+jobs+in+New+York%2C+New+York%2C+United+States&htidocid=KeSPkJQGSIHqbktDAAAAAA%3D%3D&hl=en",
"as_of": "2026-10-28", "retrieved_at": "2026-10-28T05:54:44Z",
"notes": null
}

Price

USD 0.004 per job row, charged as each row is written, plus a small charge when a run starts (both shown on this page). Set a maximum total charge on the run; the actor stops cleanly at it, keeps every row written so far, and says so in the run's status message.

Reliability

Google is fetched through Apify's Google SERP proxy. A blocked, challenged or failed page is fetched again through a new address with a growing wait, three attempts in all. Rows are written as they are read, so a run that stops early keeps what it found. The run's status message counts searches, pages, retries, blocks and rows, and names each search's end. Three outcomes are kept apart:

  • "Google returned no jobs for this query": every page was read and Google's own notice said there were none. The run succeeds with zero rows.
  • "Blocked by Google" and "Could not read the page": the run fails and says which, with zero rows rather than wrong rows.
  • Partial: some searches read, some not; the run succeeds and the message names the ones that stopped early.

Limits, honestly

  • Up to about 30 jobs a search (see Input). Google's infinite scroll is not served through the SERP proxy, so that route is closed.
  • Four countries. Google does not serve its Jobs tab through the proxy for Australia or Ireland, and shows no Jobs matches for English queries in Germany or France (tested 2026-10-27), so those are not offered.
  • No employment-type filter: Google's job-type chips carry one-off tokens, so there is no stable URL for them. Filter on employment_type in the output instead.
  • Salaries and posted dates are as Google shows them. Google sometimes labels an hourly rate "a year"; such rows carry salary_plausible: false and a note, and are never silently corrected.
  • Google's Jobs tab ranks and chooses the jobs; what it does not list, this actor cannot return.

FAQ

How many jobs does one search return? Up to about 30 distinct jobs: Google's first page plus its "past week" and "past day" pages. Set maxResultsPerSearch to stop earlier. For more coverage, add searches for nearby places or other wordings.

Can I filter by job type or remote? Not in the input: Google's filter chips have no stable URL. Filter the output on employment_type and remote; both are on every row.

Is the salary reliable? It is exactly what Google shows, split into numbers. When Google's own label does not fit the amount ("£13 a year"), salary_plausible is false and notes says why; nothing is silently corrected.

Does it scrape Indeed or LinkedIn? No. It reads Google's Jobs tab, which aggregates those boards and others; each row carries every apply link Google lists, with the board's name.

What happens if Google blocks a run? The run retries through new proxy addresses, then fails with "Blocked by Google" rather than returning wrong rows; you are charged only for the rows written. The Actor is self-tested every day.