Google Jobs Scraper
Pricing
from $3.90 / 1,000 job scrapeds
Google Jobs Scraper
Scrape Google Jobs with full descriptions, every apply link (employer site, LinkedIn, Indeed, Glassdoor), salary ranges, highlights and a remote flag. Filter by date posted, job type and remote. Up to ~100 unique jobs per keyword; pay only per job.
Pricing
from $3.90 / 1,000 job scrapeds
Rating
0.0
(0)
Developer
Automation Lab
Maintained by CommunityActor stats
3
Bookmarked
383
Total users
29
Monthly active users
a day ago
Last modified
Categories
Features
Share
Search Google Jobs by keyword and extract structured job listings with full descriptions, every apply link (employer site, LinkedIn, Indeed, Glassdoor…), salary ranges, qualifications, responsibilities and benefits — all included in every result at no extra cost. Filter by date posted, job type, remote, location, country and language.
What does Google Jobs Scraper do?
Google Jobs Scraper searches Google's job aggregation engine and extracts detailed, structured data from every listing. Google Jobs pulls listings from thousands of job boards (Indeed, LinkedIn, Glassdoor, ZipRecruiter, company career pages) into one unified interface — this scraper turns those results into clean, exportable data.
Enter your job search keywords, and the scraper extracts every job Google shows: title, company, location, salary (min, max, currency, interval), employment type, posting date, the full job description, all apply links, highlights (qualifications, responsibilities, benefits), perk tags, a remote flag and a stable job ID.
Google shows about 10 jobs per search page. For larger limits the scraper widens each search through related variants (full-time, part-time, contract, recent postings, entry level, senior…) and removes duplicates by job ID, so you get up to about 100 unique jobs per keyword. The final status message tells you how many were found against your limit.
Who is Google Jobs Scraper for? (Who is it for)
- 🏢 Recruiters and HR teams tracking job market trends and competitor postings across industries
- 📊 Compensation analysts collecting salary data across roles, locations, and companies
- 🔍 Job aggregator platforms building comprehensive job databases from Google's curated listings
- 🧪 Labor market researchers studying employment trends, skill demand, and hiring patterns
- 🤖 Job board startups sourcing listings from Google's aggregated feed of thousands of boards
- 💼 Career coaches analyzing what employers look for in specific roles and industries
- 📈 Data analysts building datasets for workforce analytics, salary benchmarking, and market intelligence
- 🏛️ Policy researchers studying employment patterns, remote work trends, and regional job availability
Why use Google Jobs Scraper?
- 🌐 Aggregated from thousands of sources — Google Jobs combines listings from Indeed, LinkedIn, Glassdoor, ZipRecruiter, and company career pages in one place
- 📋 Full details in every row — description, all apply links, qualifications, responsibilities, benefits and perk tags, no extra charge
- 🎯 Filters — date posted (24 hours, 3 days, week, month), job type (full-time, part-time, contractor, internship) and remote only
- 🌍 Location + language filtering — target specific countries, cities, and languages for localized results
- 📦 Multiple queries per run — search for "software engineer", "data analyst", and "product manager" in a single run
- 💰 Pay per result — only pay for jobs actually extracted, no flat subscription fees
- ⚡ More than one page — about 100 unique jobs per keyword through de-duplicated search variants, up to 10 keywords per run
How much does it cost to scrape Google Jobs?
Google Jobs Scraper uses pay-per-event pricing. You only pay for what you use. The run-start fee is charged together with the first job, so a search that finds nothing costs nothing:
| Event | Price |
|---|---|
| Run started (one-time) | $0.035 |
| Per job scraped (Free tier) | $0.006 |
| Per job scraped (Bronze) | $0.0054 |
| Per job scraped (Silver) | $0.0048 |
| Per job scraped (Gold) | $0.0039 |
| Per job scraped (Platinum) | $0.003 |
| Per job scraped (Diamond) | $0.0024 |
Example costs (Free tier):
- 10 jobs for 1 keyword: $0.035 + (10 x $0.006) = $0.095
- 50 jobs for 2 keywords: $0.035 + (100 x $0.006) = $0.635
- 100 jobs for 1 keyword: $0.035 + (100 x $0.006) = $0.635
Apify Free plan users get $5/month in free credits — enough for ~833 job listings.
Data you can extract from Google Jobs
| Field | Type | Description |
|---|---|---|
title | string | Job title (e.g. "Senior Software Engineer") |
company | string | Employer name |
location | string | Job location (city, state, or "Remote") |
description | string | Full job description text as Google shows it |
salary | string | Validated salary text when available (e.g. "$120K–$160K a year"); unrelated bare numeric ranges are ignored |
salaryMin | number | null | Parsed minimum compensation amount (for example, 120000) |
salaryMax | number | null | Parsed maximum compensation amount, or null for a single value |
salaryCurrency | string | ISO currency code when shown (for example, USD) |
salaryInterval | string | Pay interval when shown: hour, day, week, month, or year |
employmentType | string | Full-time, Part-time, Contract, Internship |
datePosted | string | When the job was posted (e.g. "3 days ago") |
sourceUrl | string | The Google Jobs search that returned this job |
sourceDomain | string | Domain of the source site (e.g. "linkedin.com") |
applyUrl | string | First apply link (usually the employer site or main job board) |
applyLinks | object[] | Every place to apply, as { title, url } — employer site, LinkedIn, Indeed, Glassdoor and more |
highlights.qualifications | string[] | Required qualifications and skills, when Google lists them |
highlights.responsibilities | string[] | Key job responsibilities, when Google lists them |
highlights.benefits | string[] | Listed benefits, when Google lists them |
benefitTags | string[] | Perk tags on the card, such as Health insurance, Paid time off, Dental insurance |
workFromHome | boolean | True when Google marks the job as remote |
jobId | string | Google Jobs ID, stable across runs; use it to de-duplicate |
googleJobUrl | string | Opens this job in Google Jobs |
query | string | The search keyword that returned this result |
scrapedAt | string | ISO 8601 timestamp when the data was collected |
How to scrape Google Jobs step by step
- Go to Google Jobs Scraper on Apify Store
- Click Try for free
- Enter your job search keywords (e.g., "software engineer", "data analyst")
- Optionally add a location filter (e.g., "New York", "Remote", "London")
- Set the maximum number of jobs per query (default: 20)
- Optionally narrow by Date posted, Job type or Remote only
- Adjust country and language if needed (default: US, English)
- Click Start and wait for results
- Download your data as JSON, CSV, Excel, or connect it to your workflow
Input configuration
| Field | Type | Description | Default |
|---|---|---|---|
queries | string[] | Job search keywords (e.g., "software engineer", "nurse"); up to 10 queries per run | required |
location | string | Location filter appended to each query (e.g., "New York", "Remote") | none |
maxResults | integer | Maximum jobs to extract per query (1–200) | 20 |
datePosted | string | any, today (24 hours), 3days, week or month | any |
jobType | string | any, full-time, part-time, contractor or internship | any |
remoteOnly | boolean | Only remote / work-from-home jobs | false |
country | string | Country code for localized results (e.g., "us", "uk", "de") | "us" |
language | string | Language code for results (e.g., "en", "de", "fr") | "en" |
maxRequestRetries | integer | Optional browser fallback attempts if the primary HTTP path returns no jobs (0–2) | 0 |
Example input
{"queries": ["software engineer", "data analyst"],"location": "New York","maxResults": 20,"datePosted": "week","jobType": "full-time","country": "us","language": "en"}
Output example
{"title": "Senior Software Engineer","company": "Google","location": "New York, NY","description": "We're looking for a Senior Software Engineer to join our Cloud Platform team. You will design and build large-scale distributed systems, mentor junior engineers, and drive technical strategy...","salary": "$160,000–$210,000 a year","salaryMin": 160000,"salaryMax": 210000,"salaryCurrency": "USD","salaryInterval": "year","employmentType": "Full-time","datePosted": "3 days ago","sourceUrl": "https://careers.google.com/jobs/results/1234567890","sourceDomain": "careers.google.com","applyUrl": "https://careers.google.com/jobs/results/1234567890/apply","applyLinks": [{ "title": "careers.google.com", "url": "https://careers.google.com/jobs/results/1234567890/apply" },{ "title": "linkedin.com", "url": "https://www.linkedin.com/jobs/view/1234567890" }],"workFromHome": false,"benefitTags": ["Health insurance", "Paid time off"],"jobId": "owlZAECnAEz8r80nAAAAAA==","highlights": {"qualifications": ["Bachelor's degree in Computer Science or equivalent","5+ years of experience in software development","Proficiency in Python, Java, or Go","Experience with distributed systems and cloud infrastructure"],"responsibilities": ["Design and implement scalable backend services","Mentor junior team members and conduct code reviews","Collaborate with product teams to define technical requirements","Drive architectural decisions for new features"],"benefits": ["Competitive salary and equity","Health, dental, and vision insurance","Flexible remote work policy","Annual education stipend"]},"query": "software engineer","scrapedAt": "2026-03-27T14:30:00.000Z"}
Tips for best results
- 🎯 Use specific job titles — "frontend react developer" returns more relevant results than just "developer"
- 📍 Add location for local jobs — use the location field for city-specific searches like "Austin, TX" or "London"
- 🌐 Try "Remote" as location — filter for remote-only positions by setting location to "Remote"
- 📏 Start small — test with 10 results first, then scale up once you verify the output matches your needs
- 🔄 Batch related queries — add up to 10 job titles in one run to build a comprehensive dataset efficiently
- 💡 Use country codes — set
countryto "uk" for British job listings or "de" for German ones - 🗣️ Match language to country — set
languageto "de" when searching German jobs for localized titles and descriptions - 📊 Check salary fields — not all listings include salary data; Google shows it when the source provides it
Integrations
Connect Google Jobs data to your existing tools and workflows:
- 📊 Google Sheets — automatically export job listings to a spreadsheet for tracking and analysis
- 🔗 Zapier / Make — trigger workflows when new jobs matching your criteria appear
- 💾 Webhooks — push results to your own API endpoint in real time
- 📁 S3 / Google Cloud Storage — store large job datasets for batch processing
- 📈 Power BI / Tableau — import structured job data for salary benchmarking dashboards
- 🤖 Slack notifications — get alerts when new jobs matching your keywords are posted
- 📧 Email alerts — receive daily digests of new job listings via Apify integrations
Using Google Jobs Scraper with the API (API Usage)
Node.js
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: 'YOUR_API_TOKEN' });const run = await client.actor('automation-lab/google-jobs-scraper').call({queries: ['software engineer', 'data analyst'],location: 'New York',maxResults: 50,country: 'us',});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(`Found ${items.length} job listings`);items.forEach((job) => {console.log(`${job.title} at ${job.company} — ${job.salary || 'Salary not listed'}`);});
Python
from apify_client import ApifyClientclient = ApifyClient('YOUR_API_TOKEN')run = client.actor('automation-lab/google-jobs-scraper').call(run_input={'queries': ['software engineer', 'data analyst'],'location': 'New York','maxResults': 50,'country': 'us',})items = client.dataset(run['defaultDatasetId']).list_items().itemsprint(f'Found {len(items)} job listings')for job in items:print(f"{job['title']} at {job['company']} — {job.get('salary', 'Salary not listed')}")
cURL
curl "https://api.apify.com/v2/acts/automation-lab~google-jobs-scraper/runs" \-X POST \-H "Content-Type: application/json" \-H "Authorization: Bearer YOUR_API_TOKEN" \-d '{"queries": ["software engineer"],"location": "New York","maxResults": 20,"country": "us"}'
Using with MCP (Model Context Protocol)
Claude Code
Add Google Jobs Scraper to your Claude Code setup:
$claude mcp add --transport http apify "https://mcp.apify.com?tools=automation-lab/google-jobs-scraper"
Then ask Claude: "Search Google Jobs for 'product manager' in San Francisco and show me the top 20 listings with salaries"
Claude Desktop
Add this to your Claude Desktop claude_desktop_config.json:
{"mcpServers": {"apify": {"url": "https://mcp.apify.com?tools=automation-lab/google-jobs-scraper"}}}
Cursor
Add https://mcp.apify.com?tools=automation-lab/google-jobs-scraper as a remote MCP server in Cursor Settings → Tools & MCP.
VS Code
Add the same remote MCP server URL in VS Code's MCP configuration, then start the apify server from the MCP tools view.
Example prompts for MCP
- "Find remote data engineering jobs and list them with salary ranges"
- "What companies are hiring machine learning engineers in New York?"
- "Search for entry-level marketing jobs in London and show the required qualifications"
Data handling, dependencies, and support
The Actor sends your search terms, location, country, and language to Google's public Search and Jobs surfaces through Apify's GOOGLE_SERP proxy. It uses deterministic extraction and does not call an AI model. No Google login, API key, or user-supplied third-party credential is required. Google and Apify process ordinary request metadata under their respective terms and privacy policies; selecting a country localizes results but does not guarantee a processing region.
Inputs, operational logs, and public job records are stored only in the run's Apify storage and follow your Apify account's retention settings. The Actor creates no external database, backup, or cross-run cache. Delete the run and its storages through Apify Console or API when you no longer need them; the Actor cannot delete Google-side request records. Logs contain bounded route/error context and do not include proxy credentials or private account data.
The company bears Actor compute and proxy costs. The start event is charged once per run and job-scraped only for delivered dataset rows; internal retries are not item-charged. Search recovery is bounded, and complete exhaustion with no rows fails clearly instead of returning a misleading successful empty run. For help, use the Issues tab on this Actor's Apify Store page.
Google Jobs is used nominatively to identify the public data source. This Actor is independently operated and is not affiliated with, endorsed by, or certified by Google.
Is it legal to scrape Google Jobs? (Legality)
Google Jobs Scraper accesses only publicly available content — the same job listings any visitor sees when searching on Google. Web scraping of public data is generally considered legal, as established by the U.S. Ninth Circuit's ruling in hiQ Labs v. LinkedIn (2022).
This scraper does not:
- Access private or restricted content
- Bypass authentication or paywalls
- Collect personal data beyond what is publicly displayed
- Circumvent any technical protection measures
When a run fails for a reason other than invalid input, the Actor sends sanitized diagnostic input, the error, and the Actor, build, and run IDs to our private GlitchTip error tracker so we can repair it. Secret fields and URL query strings are removed, and reports are kept for 30 days.
The data extracted consists of job postings that employers have intentionally made public. Always review and comply with applicable laws in your jurisdiction before scraping.
FAQ
How many jobs can I extract per query? Google shows about 10 jobs per search page. The scraper widens each keyword through up to 11 related variants (job types, recent postings, seniority) and removes duplicates, which typically gives 40–100 unique jobs per keyword. Filters narrow the variants, so filtered searches return fewer. The status message says how many were found against your limit.
Why am I getting fewer results than the max I set? Google may have fewer matching jobs for your query, location and filters, or it may withhold some result pages on a given run. The status message says which: "Google shows no more matching jobs" or "Google withheld N result page(s); run again for more".
Why is the salary field empty for some jobs? Google Jobs only displays salary information when the source site provides it. Many employers don't include salary ranges in their listings. The scraper only treats currency-bearing or explicit pay-period values as compensation, preventing unrelated numeric ranges from being reported as salary.
Does it support non-English job searches?
Yes. Set the country and language fields to match your target market. For example, use country: "de" and language: "de" for German job listings.
The scraper failed without results — what happened? Google may occasionally return a timeout or a page without the Jobs widget. The scraper retries with bounded fresh sessions and alternate search profiles. If every route is exhausted without a job card, the run fails clearly rather than reporting a misleading successful empty dataset; retry later or verify that Google Jobs has listings for the query and location.
Can I filter by employment type (full-time, part-time, remote)? Include these terms in your search query, e.g., "software engineer remote" or "part-time data entry". Google Jobs interprets these naturally, just like searching on Google directly.
Can I schedule recurring job searches? Yes. Use Apify's built-in scheduling to run searches hourly, daily, or weekly. This is ideal for monitoring job markets, tracking new postings, or building time-series datasets of job availability.
What job boards does Google Jobs pull from? Google aggregates listings from thousands of sources including Indeed, LinkedIn, Glassdoor, ZipRecruiter, Monster, company career pages, staffing agencies, and government job sites. You get a unified view without scraping each board individually.
Related scrapers
- Indeed Scraper — scrape job listings directly from Indeed
- LinkedIn Jobs Scraper — extract job postings from LinkedIn Jobs
- Glassdoor Jobs Scraper — scrape jobs and company data from Glassdoor
- Greenhouse Jobs Scraper — extract job listings from Greenhouse-powered career pages
- Naukri Scraper — scrape job listings from Naukri.com (India)
- Google Search Scraper — scrape general Google search results