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
- Recruiters and staffing agencies who need to know who is hiring for a role in an area, with the direct link to the posting and the date.
- Sales teams using hiring signals — companies hiring for a role, with their domain for enrichment and the ATS they use.
- Job boards and HR-tech products that need full descriptions, highlights, pay and type, de-duplicated by Google's job ID.
- Labour-market researchers comparing pay ranges and employment types by role, city and country.
What you get
| Group | Fields |
|---|---|
| Job | Title, company, location, posted text ("2 days ago"), posted date, days since posting, employment type (full-time, part-time, contractor, internship, temporary), remote flag |
| Pay | Salary as Google shows it, minimum, maximum, currency (with an "inferred" flag), period (hour, day, week, month, year) |
| Apply | Google'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 |
| Employer | The employer's own domain (never a job board or ATS), ATS provider and URL, company logo |
| Content | Description (with a preview flag), qualifications, responsibilities, benefits, other highlights, perks ("Health insurance", "Work from home") |
| Context | Google'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
| Input | What it does |
|---|---|
queries | Job searches, one per line ("software engineer", "registered nurse", "Softwareentwickler") |
locations | City, state or region, one per line; each search runs once per location |
country · language | Which Google Jobs to search (39 countries, default us) · interface language |
maxJobsPerQuery | Jobs per search and location, up to 300 (default 50) |
datePosted | Any time, today, 3 days, week or month |
employmentType | Keep only these types; jobs without a type label are kept |
remoteJobs | auto, include, exclude or only |
includeDescription · includeHighlights | Turn 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):
| Field | Software engineer, New York | Registered nurse, Texas | Softwareentwickler, Berlin |
|---|---|---|---|
| Title, company, location, source, apply link | 100% | 100% | 100% |
| Posted date | 86% | 84% | 67% |
| Description | 100% full | 98% full | 100% preview |
| Employment type | 100% | 100% | 100% |
| Salary | 44% | 18% | 37% |
| Qualifications / responsibilities | 98% / 96% | 88% / 94% | — |
| Company domain | 22% | 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
- Posted dates are missing where Google shows none. Google itself showed a date on only 50–93% of jobs in the test runs. Those rows have
postedAt: null; the date is never estimated. - Some countries show only a preview of the description. In Germany and France, Google showed a preview of up to 400 characters for every job in the latest measured runs, and so did one test search each in Spain and the Netherlands. Those rows have
descriptionIsPreview: true. The full text appears in the US. - Salary depends on the posting. It was present on 18–44% of jobs in the runs above. US pay labels have no currency sign, so the currency is filled in and flagged as inferred.
- The company domain is strict. It is filled only from an apply link on the employer's own domain, so jobs posted only on job boards have none.
- Not every country has Google Jobs. Poland and Turkey were removed after Google showed ordinary web results there instead of Google Jobs (2 of 2 test searches each).
- Google can change its page layout without notice; fields can then come back empty until the actor is updated.
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 →