Search Google Jobs for "nurse jobs Golden, CO" and you get jobs in Golden. Not in Lakewood, 13 km away, nor in Denver, 20 km away. Google's page has no radius control, only a "Choose area" picker, and the lrad URL parameter that sets a radius is dropped by Apify's Google SERP proxy (I tested it), so a scraper can't simply pass it along.
For anyone who commutes, recruits locally or studies a regional job market, "jobs within 50 km of here" is the question that matters. This post shows how to get exactly that from Google Jobs, with the distance to each job, in Python.
Disclosure: I built the scraper used below.
How it works
The scraper takes your search, a place and a radius, and then:
- Searches the place itself, in Google's order.
- If you want more jobs than that place has, searches the towns inside the radius too, biggest first.
- Finds each job's town in an open list of 236,000 places (GeoNames), measures its straight-line distance from your place, and keeps only the jobs within the radius.
Every job carries distanceKm, so you can sort by distance or cut closer afterwards.
A real run
Nurse jobs around Leadville, CO, a small mountain town, with a 60 km radius and 40 jobs wanted:
| Town | Jobs | Distance |
|---|---|---|
| Leadville, CO | 37 | 0 km |
| Fairplay, CO | 1 | 25.2 km |
| Edwards, CO | 2 | 50.9 km |
Leadville had 37 jobs, so the scraper searched the towns around it and completed the list with Fairplay and Edwards. With Golden, CO and 50 km, the city alone filled 60 jobs (59 in Golden and one in Evergreen, 15.9 km away), so no extra search was needed.
The code
Create a free Apify account, copy your API token from Settings → API & Integrations, then:
pip install apify-client
export APIFY_TOKEN="your-token-here"
import os
from apify_client import ApifyClient
client = ApifyClient(os.environ['APIFY_TOKEN'])
run = client.actor('famed_bonobo/google-jobs-scraper').call(run_input={
'queries': ['nurse jobs'],
'location': 'Leadville, CO', # written as Google writes places: "Toronto, ON", "Sevilla", "Guadalajara, Jal."
'radiusKm': 60, # 1 mile = 1.6 km
'maxJobsPerQuery': 40,
'country': 'us',
})
jobs = list(client.dataset(run.default_dataset_id).iterate_items())
for job in sorted(jobs, key=lambda job: job['distanceKm']):
print(f"{job['distanceKm']:>5} km {job['location']:<16} {job['title'][:50]:<50} {job['company']}")
Each job keeps everything else the scraper returns: company, salary as numbers (min, max, currency and period), job type, posting time, the full description, Google's highlights and the direct link to apply on LinkedIn, Indeed or the company site.
{
"title": "Registered Nurses",
"company": "Shift Key",
"location": "Edwards, CO",
"distanceKm": 50.9,
"salaryMin": null,
"salaryMax": null,
"employmentType": "Full-time",
"bestApplyUrl": "https://us.trabajo.org/job-5381-..."
}
salaryMin and salaryMax are null here because this posting shows no salary; Google shows one for roughly one job in three.
Things to know
-
The radius goes up to 1,000 km, and the place must be in the country you set (
country), since Google Jobs searches one country at a time. - Distances are straight lines between town centres, not driving distances. They are meant for filtering and sorting.
- Jobs that name no place, such as "Anywhere" or "Remote", are left out of a radius search. The log says how many.
- You pay per job stored, $1.50 per 1,000, whatever the number of towns searched. Apify's free plan includes $5 of monthly credit.
- Combine it with the other filters: posted in the last day or week, job type, remote, no degree, minimum yearly salary, companies or sites to leave out, and "only new jobs" for scheduled alerts.
The Google Jobs Scraper page has a ready-made example task for nurse jobs within 50 km of Denver; change the role and the place to make it yours.
This article was written with the help of an AI assistant. The runs shown are real and their numbers come from the datasets they produced.
Top comments (0)