Google Jobs is the best free job index on the web. It pulls listings from LinkedIn, Indeed, company career sites and hundreds of smaller boards into one search. What it does not have is an API.
The scrapers that fill that gap tend to break: they drive a browser through Google, get blocked, and you pay for failed runs. In October 2026 the most used one on the Apify Store failed 19% of its runs and charged $0.35 to $0.90 per 100 jobs, and another succeeded in only 1 of 500 runs in a month.
So I built one that does not scrape Google from a browser at all. It reads Google Jobs through a commercial search-data API, so there are no proxies to rotate and nothing to break. This post shows how to use it.
What you get per job
You send one or more searches and a country, optionally a city. You get one record per job:
{
"query": "data engineer",
"country": "US",
"position": 1,
"title": "Senior Data Engineer",
"company": "Acme Corp",
"location": "Austin, TX",
"contract_type": "Full-time",
"salary": "$140Kâ$180K a year",
"salary_min": 140000,
"salary_max": 180000,
"salary_currency": "USD",
"salary_period": "year",
"posted_ago": "2 days ago",
"source": "LinkedIn",
"apply_url": "https://..."
}
(Example of the output format.)
What to expect from real data: in a test of 3 US searches (30 jobs), Google showed a salary on 5 of the 30 jobs. Many apply links go straight to the company's own career site. When the apply link is on a company job board (Workday, Greenhouse, Lever or Ashby), the record also includes the full job description; in a test of 79 US jobs that was 16 of them. Other jobs keep the apply_url to the original posting.
Run it
The tool is the Google Jobs Scraper Actor on Apify.
From the console
Open the Actor, type your searches, pick a country, optionally a city such as Austin,Texas, and press Start. Results appear as a table you can export to CSV, Excel or JSON.
From curl
curl -X POST "https://api.apify.com/v2/acts/hirepulse~google-jobs-scraper/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"queries": ["data engineer"], "country": "US", "location": "Austin,Texas", "max_jobs_per_query": 50}'
From Python
from apify_client import ApifyClient
client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("hirepulse/google-jobs-scraper").call(run_input={
"queries": ["account executive", "sales development representative"],
"country": "GB",
"employment_types": ["fulltime"],
})
for job in client.dataset(run["defaultDatasetId"]).iterate_items():
print(job["title"], "|", job["company"], "|", job.get("salary"))
From an AI agent
Add Apify's MCP server with this one tool to Claude, Cursor or any MCP client:
https://mcp.apify.com?tools=hirepulse/google-jobs-scraper
Then ask: "Which companies in Austin are hiring data engineers this week, and what do they pay?"
Pricing
- $0.005 per search that returns jobs. Searches with no results are free.
- $0.001 per job.
- 100 jobs from one search cost about $0.11.
You need an Apify account. You can try it on the free Apify plan: each free run returns the first 10 jobs of your first search. Full results need a paid Apify plan, because every search has a real data cost.
Related
If you track specific companies rather than roles, the ATS Job Scraper reads every open job, with full descriptions, straight from a company's Greenhouse, Lever, Ashby or Workable board, and tells you what changed since the last run.
Top comments (0)