Google Jobs Scraper & API — Job Listings & Salaries
Pricing
from $3.20 / 1,000 jobs
Google Jobs Scraper & API — Job Listings & Salaries
Scrape Google Jobs to JSON, CSV or Excel: title, company, location, salary range, dates, job type, benefits, full description, qualifications and every apply link. Search by keyword and location or paste Google Jobs URLs. Pay per job delivered plus a small start fee, no platform fees.
Pricing
from $3.20 / 1,000 jobs
Rating
0.0
(0)
Developer
Aaron Tuttle
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
6 days ago
Last modified
Categories
Share
Scrape Google Jobs into clean JSON, CSV or Excel, from $3.20 per 1,000 jobs. Get the job title, company, location, salary range, posting date, job type, remote flag, benefits, qualifications, responsibilities, the full job description and every apply link (LinkedIn, Indeed, Glassdoor, the company's own site and more). Search by keyword and location, or paste Google Jobs URLs.
Google Jobs pulls postings from thousands of job boards and career sites into one list, collects job listings from every board Google indexes, and you can get them all in one run. Google also blocks automated access quickly, which is why many Google Jobs scrapers return empty or partial results. This one fetches results through Apify's own Google Search proxy and parses them offline, so it keeps working — and you pay per job delivered plus a small run-start fee, with no platform fees on top.
✅ Why use this Google Jobs scraper
- Every field Google shows. The full description, all job highlights and every apply option, not just the first one, plus a ready-to-use
applyUrl. - Salaries you can sort and filter. "$120K–$150K a year" becomes
min: 120000,max: 150000,currency: "USD",period: "year". Hourly, monthly, K, lakh and crore amounts and over 25 currencies are understood. - Reliable by design. Results come through Apify's Google Search proxy — the service built for exactly this — and are parsed offline, with a new IP whenever Google pushes back. Every search is bounded, so runs never hang.
- No platform fees on top. You pay a small fee per run plus a fee per job delivered. Compute and proxy costs are included. Searches that fail or find no jobs cost nothing beyond the run fee.
- No duplicates. A job found by two of your searches is delivered and charged once.
- Many searches in one run. Every search runs for every location you list, e.g. 5 job titles × 10 cities = 50 searches.
- Privacy built in. Recruiter emails, phone numbers and personal profile links inside descriptions are removed before anything is saved.
📊 What data you get
| Field | Example |
|---|---|
title, companyName, location | Senior Software Engineer · Acme Corp · Austin, TX |
via | The site Google found the job on, e.g. LinkedIn |
postedAgo, postedAt | "3 days ago" and an estimated ISO date |
scheduleType, employmentType | Full-time · FULL_TIME (also part-time, contractor, internship, temporary…) |
workFromHome | true for remote / work-from-home jobs |
salary | text, min, max, currency, period |
benefits | Badges like Health insurance, Paid time off, Dental insurance |
qualifications, responsibilities, benefitsDetails | The bullet lists from Google's job highlights |
description | The full job description |
applyOptions, applyUrl | Every "Apply on …" link with its source name |
jobId, googleJobsUrl | Google's ID for the job and a link that opens it on Google |
searchQuery, searchLocation, position | Which search found the job and its rank among the jobs delivered for that search |
Works for any job title or keyword, in dozens of countries, with Google's own filters for date posted, job type and remote jobs.
💸 How much does it cost?
You pay per job delivered, plus a small run-start fee. Compute and proxy costs are included, there are no platform fees, and the per-job price drops as your Apify plan's discount tier goes up:
| Event | Free plan | Bronze | Silver | Gold | Platinum | Diamond |
|---|---|---|---|---|---|---|
| Job delivered | $0.004 | $0.004 | $0.0036 | $0.0032 | $0.0032 | $0.0032 |
| Run start (once per run, at the default 2 GB) | $0.01 | $0.01 | $0.01 | $0.01 | $0.01 | $0.01 |
That is $4 per 1,000 jobs on the free plan and from $3.20 per 1,000 jobs on Gold.
| Example | Free plan | Gold |
|---|---|---|
| 1 search (~10 jobs) | $0.05 | $0.04 |
| 10 searches in one run (~100 jobs) | $0.41 | $0.33 |
| 1,000 jobs in one run | $4.01 | $3.21 |
Searches that fail after all retries, searches Google has no jobs for and duplicate jobs are not charged. To cap any run, set Apify's Maximum cost per run: the scraper stops cleanly at the limit.
🚀 How to scrape Google Jobs
- Enter your job searches, one per line, e.g.
software engineerornurse. You can also paste Google Jobs URLs. - Optionally add locations, one per line, e.g.
Austin, TXorRemote. Every search runs for every location. - Pick the country and how many jobs per search you want.
- Optionally set the date posted, job type or remote only filters.
- Click Start, then download your jobs as JSON, CSV or Excel, or get them through the API.
Input examples
One job title in two places:
{ "queries": ["software engineer"], "locations": ["Austin, TX", "Remote"], "maxJobsPerSearch": 10 }
Part-time jobs posted in the last week:
{ "queries": ["nurse", "medical assistant"], "locations": ["Boston, MA"], "datePosted": "week", "employmentType": "PARTTIME" }
Straight from a Google Jobs URL (search on Google, open the Jobs tab, copy the address):
{ "queries": ["https://www.google.com/search?q=data+analyst+jobs+in+London&udm=8&gl=gb&hl=en"] }
Output example (shortened)
{"position": 1,"title": "Senior Software Engineer","companyName": "Acme Corp","location": "Austin, TX","via": "LinkedIn","postedAgo": "3 days ago","postedAt": "2026-10-02T12:00:00.000Z","scheduleType": "Full-time","employmentType": "FULL_TIME","workFromHome": false,"salary": { "text": "$120K–$150K a year", "min": 120000, "max": 150000, "currency": "USD", "period": "year" },"benefits": ["Health insurance", "Dental insurance", "Paid time off"],"qualifications": ["3+ years of experience with Node.js", "Strong communication skills"],"responsibilities": ["Build and ship new features", "Review code"],"benefitsDetails": ["401(k) matching", "Health insurance"],"description": "About the role\nYou'll build the systems that…","applyOptions": [{ "source": "LinkedIn", "url": "https://www.linkedin.com/jobs/view/…" },{ "source": "Acme Careers", "url": "https://careers.acme.example/jobs/…" }],"applyUrl": "https://www.linkedin.com/jobs/view/…","jobId": "eyJqb2JfdGl0bGUiOi…","googleJobsUrl": "https://www.google.com/search?q=software+engineer+in+Austin%2C+TX&udm=8#vhid=…","searchQuery": "software engineer","searchLocation": "Austin, TX","country": "US","scrapedAt": "2026-10-05T12:00:00.000Z"}
The dataset has two ready-made table views: Jobs (the main fields) and Full details (salary numbers, highlights, description and apply links). The run's OUTPUT record lists every search with its job count, whether Google's list ended, and any errors.
🧭 What it doesn't do
- About 10 jobs per search. Google Jobs shows roughly 10 results per search; this scraper reads that first page. To cover more, run several focused searches — split by location, seniority, date or job type.
- Public listings only. It reads what Google shows anyone on the Jobs tab, logged out. It doesn't log in to LinkedIn, Indeed or any board, and it never solves CAPTCHAs.
- No recruiter contact details. Emails, phone numbers and personal profile links in descriptions are removed before anything is saved.
- Not an official Google API. Google offers no public API for its job results; this reads the same listings a person sees.
🔌 Use it from your code, Zapier, Make or AI agents
JavaScript:
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: 'MY_APIFY_TOKEN' });const run = await client.actor('aaronoptimus/google-jobs-scraper').call({ queries: ['software engineer'], locations: ['Austin, TX'] });const { items } = await client.dataset(run.defaultDatasetId).listItems();
Python:
from apify_client import ApifyClientclient = ApifyClient("MY_APIFY_TOKEN")run = client.actor("aaronoptimus/google-jobs-scraper").call(run_input={"queries": ["software engineer"], "locations": ["Austin, TX"]})items = client.dataset(run["defaultDatasetId"]).list_items().items
AI agents and MCP: add the scraper as a tool through Apify's MCP server in Claude, Cursor or any MCP client, and ask for Google Jobs data in plain language:
{ "mcpServers": { "apify": { "url": "https://mcp.apify.com?tools=aaronoptimus/google-jobs-scraper" } } }
You can also schedule runs and send the results to Google Sheets, Slack, Zapier, Make or webhooks with Apify integrations.
💡 Tips
- Need more jobs? Google Jobs returns about 10 results per search. To get more, run several focused searches — split by location or seniority, or add a date or job-type filter.
- Daily job feeds: schedule a run with Date posted: Past day, and use
jobIdto skip jobs you already have. - Country and language: Google shows jobs for the country you pick. English (
en) gives the most complete date and salary parsing; job texts stay in the language they were posted in. - Faster runs: raise Parallel searches when you have many of them.
❓ FAQ
Why did I get fewer jobs than I asked for? Google Jobs returns about 10 results per search, and sometimes fewer when its list for that search is short. The run's OUTPUT record shows endOfList: true for that search. Run more focused searches — by location, seniority or date — to get more jobs.
What happens when Google blocks a request? The scraper never solves CAPTCHAs. When Google's "unusual traffic" check blocks a request, it retries with a new IP through Apify's Google Search proxy. If a search still fails after all retries, it's listed in the OUTPUT record with the reason and not charged.
Are recruiter contact details included? No. Emails, phone numbers and personal profile links inside job descriptions are replaced with [email removed], [phone removed] or [profile link removed]. Company names and all job details are kept.
How exact are the posting dates? Google only shows relative times like "3 days ago", so postedAt is estimated from the time of the scrape. For "30+ days ago" the date is marked with postedAtIsUpperBound: true.
Is there an official Google Jobs API? No. Google offers no public API for its job search results. This scraper reads the same listings anyone sees on Google's Jobs tab.
Is it legal? The scraper only collects job listings that Google shows publicly to anyone, without logging in. It doesn't solve CAPTCHAs, and it removes personal contact details. You're responsible for using the data in line with Google's terms and your local laws.
Related tools
Related tools by the same developer: Google Trends Scraper for demand for a job title over time and by state, Google Autocomplete Scraper for how people phrase job searches, Google News Scraper for hiring and layoff headlines, Google Ads Transparency Scraper for employers' recruiting ads, Google Analytics 4 Exporter for your job board's GA4 reports, PageSpeed Insights Bulk Audit for your careers pages' Core Web Vitals, Google Hotels Scraper and Google Flights Scraper for relocation and travel prices.
🛠 Support
Found a problem or need a feature? Open an issue on the Issues tab. See the Changelog for updates.
This is an independent scraper and is not affiliated with, endorsed by or sponsored by Google. "Google" and "Google Jobs" are trademarks of Google LLC. It collects only data that Google shows publicly to logged-out visitors.