Home › Guides › Google Jobs Scraper

Google Jobs data: listings, salaries and direct apply links by keyword and location

Google Jobs — the Jobs tab of Google Search — gathers postings from LinkedIn, Indeed, employers' careers sites and ATS boards into one panel. The Google Jobs Scraper returns one row per job for any keyword, location and country: title, company, location, posted date, the job description (full text in the US; a preview in some countries, flagged), direct apply links, salary where Google shows it, employment type, highlights, the employer's own domain and the ATS behind the posting. No Google account, no API key, no browser — requests go through Apify's Google SERP proxy.

Who it's for

What you get

GroupFields
JobTitle, company, location, posted text ("2 days ago"), posted date, days since posting, employment type (full-time, part-time, contractor, internship, temporary), remote flag
PaySalary as Google shows it, minimum, maximum, currency (with an "inferred" flag), period (hour, day, week, month, year)
ApplyGoogle's first apply link, all apply links with source, domain, Google's rank and whether the link names this employer; links that belong to another company kept apart; the source Google credits
EmployerThe employer's own domain (never a job board or ATS), ATS provider and URL, company logo
ContentDescription (with a preview flag), qualifications, responsibilities, benefits, other highlights, perks ("Health insurance", "Work from home")
ContextGoogle's job ID (unique per row), Google Jobs URL, query, location searched, country, language, the Google search that found the job, position, scrape time

A real row from a test search on 2026-09-27 — software engineer in New York, NY (trimmed: 1 of the job's 8 apply links shown):

{
  "title": "Software Engineer, Systems ML - Compilers",
  "companyName": "Meta",
  "location": "New York, NY",
  "postedText": "2 days ago",
  "postedAt": "2026-09-25",
  "employmentType": ["FULL_TIME"],
  "isRemote": false,
  "salaryText": "183,997–257,000 a year",
  "salaryMin": 183997,
  "salaryMax": 257000,
  "salaryCurrency": "USD",
  "salaryCurrencyInferred": true,
  "salaryPeriod": "YEAR",
  "applyUrl": "https://www.linkedin.com/jobs/view/software-engineer-systems-ml-compilers-at-meta-4470554281",
  "applyOptions": [
    { "source": "LinkedIn", "domain": "linkedin.com", "shownByGoogle": true, "googleRank": 1, "matchesEmployer": true, "evidence": "url-employer", "titleInUrl": true }
  ],
  "via": "LinkedIn",
  "descriptionIsPreview": false,
  "qualifications": ["3+ years of experience in developing compilers, toolchains, or code optimization software"],
  "perks": ["Health insurance"],
  "jobId": "UmM1Ljk7hQKcMQZZAAAAAA==",
  "query": "software engineer",
  "searchLocation": "New York, NY",
  "country": "us"
}

How it gets past 10 jobs per search

Google Jobs shows 10 jobs per search, and the search page has no page 2. To collect more, the scraper runs the related searches Google lists on the page plus role-neutral variants ("… full time", "… senior", "… no degree"), removes duplicates by Google's job ID, and stops when new searches stop finding new jobs. It does not promise every job for a query; the measured runs below show what to expect.

Remote jobs are handled explicitly. Google mixes nationwide remote jobs — location "Anywhere" — into location searches: in a platform test of "software engineer" in New York, NY, 11 of 50 jobs were "Anywhere". With the default remoteJobs: "auto", a search with a location leaves them out: the New York run then returned 50 jobs, 45 in New York City, 4 listed in several places and 1 in Newark, NJ. Set include to keep them, exclude to always drop them, or only for remote jobs only.

Apply links are the real posting URLs. The links Google shows are its own redirects; the scraper reads the direct URLs Google embeds in the page. Google sometimes groups other employers' postings under a job — in one test it listed Paramount's and Capgemini's careers sites and Palantir's Lever page as apply links for an Uber job. Such links are moved to otherEmployerOptions only on strong evidence (another company's own ATS page or careers site that does not show this job's title), and Google's first link never moves.

Input

InputWhat it does
queriesJob searches, one per line ("software engineer", "registered nurse", "Softwareentwickler")
locationsCity, state or region, one per line; each search runs once per location
country · languageWhich Google Jobs to search (39 countries, default us) · interface language
maxJobsPerQueryJobs per search and location, up to 300 (default 50)
datePostedAny time, today, 3 days, week or month
employmentTypeKeep only these types; jobs without a type label are kept
remoteJobsauto, include, exclude or only
includeDescription · includeHighlightsTurn the long text fields off for smaller datasets

Nurses in Texas, full-time only, posted in the last 7 days:

{ "queries": ["registered nurse"], "locations": ["Texas"], "employmentType": ["FULL_TIME"], "datePosted": "week", "maxJobsPerQuery": 100 }

Several cities in one run (duplicates across searches are delivered once):

{ "queries": ["electrician"], "locations": ["Houston, TX", "Dallas, TX", "Austin, TX"], "maxJobsPerQuery": 50 }

Measured data quality

Share of jobs with a value in three platform runs (n = 50, 50 and 30):

FieldSoftware engineer, New YorkRegistered nurse, TexasSoftwareentwickler, Berlin
Title, company, location, source, apply link100%100%100%
Posted date86%84%67%
Description100% full98% full100% preview
Employment type100%100%100%
Salary44%18%37%
Qualifications / responsibilities98% / 96%88% / 94%—
Company domain22%34%10%

No run returned a duplicate job ID (12 runs, 445 jobs). Twelve apply links on twelve different sites — employer careers sites, LinkedIn, Built In, StepStone, the German employment agency — were opened; all 12 showed the job's title and company.

Honest limits

Speed

On the Apify platform, 50 jobs took 160–171 seconds (software engineer in New York with 10 Google searches; registered nurse in Texas with 7), 30 Berlin jobs took 127 seconds and the 10-job starting input took 37 seconds. Run time depends mostly on Google's response time through the proxy. Turning descriptions off makes the dataset smaller but does not shorten the run.

Pricing

Pay per result: one job event per delivered job. Status rows — a search with no results, or one where the filters removed everything — are free, and each run has Apify's actor-start event. Current prices are on the actor's Pricing tab on Apify.

See who is hiring: enter a role and a city, and get each job with its direct apply links, salary where shown, employer domain and ATS — exportable to JSON, CSV or Excel.

Open the Google Jobs Scraper →

Related

Google Jobs shows who is hiring for a role across a market; a company's own job board lists the roles one employer has published. The ATS hiring signals guide covers Greenhouse, Lever, Ashby, Workday and other boards, and the LinkedIn company data guide covers open-role counts on company pages. All Google datasets are in the Google data section.

Frequently asked questions

Why do I get fewer jobs than I asked for?

Google Jobs shows 10 jobs per search and has no page 2. The scraper widens with related searches and role-neutral variants until new searches bring no new jobs, so narrow or unusual searches run dry sooner. The SOURCE_REPORT record shows how many searches ran and how many jobs were duplicates.

Are the apply links direct?

Yes. applyUrl and the apply options are the posting URLs Google embeds in the page, not Google redirects, with utm_* parameters removed. In a check of 12 apply links on 12 different sites, all 12 showed the job's title and company.

Why are there no remote jobs in my New York search?

With a location, the default remoteJobs: "auto" leaves out jobs Google lists as "Anywhere", so the results are jobs placed in your location. Set remoteJobs to include to add them, or to only for remote jobs only. SOURCE_REPORT shows how many were left out.

Why is companyDomain often empty?

It is filled only from an apply link on the employer's own domain, whose name matches the company's. Job boards, ATS and careers platforms and hosting services are never used, so jobs posted only on boards such as LinkedIn or Indeed have none.

Can I get only new jobs every day?

Use datePosted: "today" on a daily schedule. Jobs Google shows without a date are left out when a date window is set.

Google Jobs Scraper — pay per job, direct apply links, no Google account.

Get job listings on Apify →