When you search "data engineer jobs in Austin" on Google, you get the job panel: postings from LinkedIn, Indeed, company career pages and many smaller boards, merged in one list. This is Google Jobs (also called Google for Jobs).
It is a very good data source. The problem: Google does not offer an API for it. (Google Cloud Talent Solution is a different product. It searches your own job postings, not Google's.)
So the usual options are:
- Scrape it yourself. Google blocks automated requests fast. You need proxies, retries, and parsing code that you fix every time Google changes the page.
-
Use a SERP API subscription. It works, but most plans are monthly subscriptions, and you get the raw text:
"$150K–$200K a year","3 days ago". You still parse it. - Use a ready-made scraper and pay per use. This is what this post shows.
The 10-line version
I built a Google Jobs Scraper on Apify. You give it search queries and locations; it returns one JSON item per job posting.
pip install apify-client
export APIFY_TOKEN=<your token> # free account: Apify Console > Settings > API & Integrations
import os
from apify_client import ApifyClient
client = ApifyClient(os.environ["APIFY_TOKEN"])
run = client.actor("krammer/google-jobs-scraper").call(run_input={
"queries": ["data engineer"],
"locations": ["Austin, TX"],
"country": "us", # us, gb, in, de
"datePosted": "7d", # any, 24h, 3d, 7d, 30d
"maxResultsPerSearch": 50, # 1 to 200
})
for job in client.dataset(run["defaultDatasetId"]).iterate_items():
print(job["title"], "|", job["company"], "|", job["salaryMin"], job["salaryMax"])
What you get back
One item per posting (abridged, company name replaced):
{
"job_id": "RtLv7vlPTbn2E40SAAAAAA==",
"title": "Staff Software Engineer - Card Technology",
"company": "Example Corp",
"location": "New York, NY (+3 others)",
"description": "Example Corp is hiring a Staff Software Engineer ...",
"apply_options": [{ "title": "Example Corp Careers", "link": "https://careers.example.com/jobs/12345" }],
"salary": "$150K–$200K a year",
"posted": "3 days ago",
"salaryMin": 150000,
"salaryMax": 200000,
"salaryCurrency": "USD",
"salaryPeriod": "year",
"postedDate": "2026-11-05",
"jobTypes": ["FULLTIME"],
"workMode": null
}
The raw Google text is kept (salary, posted), and the Actor also parses it into fields you can sort and filter on: salaryMin, salaryMax, salaryCurrency, salaryPeriod, postedDate, jobTypes and workMode (remote or hybrid). Postings that do not show a salary on Google have null there.
Three things to build with it
The full scripts are in this repo: krammer0/google-jobs-scraper-examples. search_jobs() below is the 10-line call above, wrapped in a function (common.py).
1. Compare salaries across cities
Search one role in several cities and take the median of the yearly ranges:
from statistics import median
jobs = search_jobs(["data engineer"], ["New York, NY", "Austin, TX", "Seattle, WA"])
yearly = [j for j in jobs if j["salaryPeriod"] == "year" and j["salaryCurrency"] == "USD"
and j["salaryMin"] is not None and j["salaryMax"] is not None]
for city in {j["searchLocation"] for j in yearly}:
js = [j for j in yearly if j["searchLocation"] == city]
print(city, len(js), median(j["salaryMin"] for j in js), median(j["salaryMax"] for j in js))
2. Find the companies that are hiring
Recruiters and sales teams use this to see who is hiring for what, and where:
from collections import Counter
jobs = search_jobs(["registered nurse"], ["Chicago, IL"])
for company, count in Counter(j["company"] for j in jobs).most_common(20):
print(count, company)
3. Daily job alerts without duplicates
Run with datePosted: "24h" once a day and keep the job_id values you have already seen:
fresh = [j for j in search_jobs(["python developer"], ["London"], country="gb", datePosted="24h")
if j["job_id"] not in seen]
You can schedule the run in Apify Console, or call it from cron, n8n or an AI agent (the Actor works with the Apify MCP server).
What it costs
You pay per Google results page (up to 10 jobs): $0.028 to $0.09 per page, depending on your Apify plan. Searches that return nothing are free. For example, 50 jobs is about 5 pages, so $0.45 or less on the Free plan, and Apify's free plan includes monthly credit to try it.
Supported countries right now: United States, United Kingdom, India and Germany.
Links
- Actor: apify.com/krammer/google-jobs-scraper
- Example scripts: github.com/krammer0/google-jobs-scraper-examples
If you need another country or another field, leave a comment.
Top comments (0)