Google Jobs Scraper
Pricing
from $1.85 / 1,000 jobs
Google Jobs Scraper
Google Jobs scraper: job search by title and place, one row per job with the employer, place, salary, schedule, every board to apply on with its real link, Google's highlights and the full description. Filter by date posted, job type, remote, employer and job board. You pay only for jobs delivered.
Pricing
from $1.85 / 1,000 jobs
Rating
0.0
(0)
Developer
Dami's Studio
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 hours ago
Last modified
Categories
Security
Limited permissionsShare
Scrape Google Jobs by job title and place and get one row per job: the employer, the place, the pay where Google shows it, the schedule, every board you can apply on with its real link, Google's highlights and the full description. Type a search such as "registered nurse" and a place such as "Chicago, IL", or paste a Google Jobs address from your browser. Pay comes back only where the posting shows it, which was about half the jobs in our tests.
| Input | Job searches and places, or Google Jobs addresses |
| Output | One row per job: title, employer, place, pay, schedule, apply links, highlights, full description |
| Ceiling | 500 jobs per search, 10,000 per run |
| Speed | Roughly 13 to 31 jobs a minute on four test runs |
| Account needed | None from you |
| Price | $1.85 per 1,000 jobs, the same on every plan. The free plan's $5 a month covers about 2,700 |
🔍 What Google Jobs Scraper does
Google Jobs gathers postings from job boards and from employers' own careers sites into one list. One posting often sits on six or eight boards at once, and Google shows them as a single job with every place to apply. This actor reads that list the way it appears on Google, for any search and place you give it, and returns each job with its detail: the description, the highlights Google picks out of it, and the apply links.
Google shows a search ten jobs at a time. When you ask for more, the run reads the same search again through Google's own date, job type and remote filters, until it has your number or no new jobs come back. A job that turns up twice is delivered and charged once.
Filters you set are checked on every row as well. Google treats a job type as a hint, so a part-time search still gets some full-time jobs back; those are left out and not charged.
📋 What data you get from each Google Jobs listing
| What you get | Field |
|---|---|
| The job and who is hiring | title, companyName, companyLogo |
| Where, with coordinates for the place | location, latitude, longitude, workFromHome |
| The board Google found it on | via |
| When it was posted | postedAt, postedAtDate |
| Schedule | scheduleType, jobTypes |
| Pay, as shown and as numbers | salary, salaryMin, salaryMax, salaryCurrency, salaryPeriod |
| Google's tags | healthInsurance, dentalCoverage, paidTimeOff, retirementPlan, qualification, extensions |
| The text | description, descriptionHtml (optional), jobHighlights, qualifications, responsibilities, benefits |
| Where to apply | applyOptions, applyLink, sourceUrl |
| The job on Google | jobId, googleJobsUrl, relatedLinks |
| The search that found it | searchQuery, searchLocation, country, language, googleDomain, position, scrapedAt |
▶️ How to scrape Google Jobs
- Open Google Jobs Scraper and click Try for free.
- Type your searches into Job searches, one per line.
- Put a city or region in Place, and pick the Country.
- Set Jobs per search, and any filters you need under Filters.
- Click Start, then download the dataset as JSON, CSV or Excel, or read it from the API.
💰 How much does it cost to scrape Google Jobs?
$1.85 per 1,000 jobs, the same on the Free, Starter, Scale and Business plans. On the free plan, the $5 Apify gives you each month covers about 2,700 jobs.
You pay for jobs delivered to your dataset and nothing else. Jobs your filters leave out, a job already delivered by an earlier search in the same run, and every note row are free. The run also stops at the maximum cost you set for it.
📥 What you give it
{"queries": ["registered nurse", "nurse practitioner"],"location": "Chicago, IL","country": "US","datePosted": "week","jobTypes": ["FULLTIME"],"maxResultsPerSearch": 50}
| Field | Default | What it is |
|---|---|---|
queries | none | What you would type into Google's job search, one per line. Up to 100. With no searches and no addresses, the run searches "software engineer". |
location | none | A city, region or country, typed the way you would type it: Austin, TX, London. |
locations | none | More places. Every search runs in each, up to 50 places and 200 searches a run. |
country | US | The country whose Google Jobs you search. Two letters. |
language | en | The language of Google's page: en, de, es, pt-BR. Tags and dates come back in it. |
googleDomain | google.com | Such as google.co.uk. Most runs set the country instead. |
startUrls | none | Google Jobs addresses from your browser (the Jobs tab, with udm=8). Their words and filters are kept. |
locationUule | none | Search as someone in a place, by Google's own name for it: Chicago,Illinois,United States. |
datePosted | any | today, 3days, week or month. |
jobTypes | none | FULLTIME, PARTTIME, CONTRACTOR, INTERN. Jobs of other types are left out and not charged. |
remoteOnly | false | Only jobs marked work from home, or listed as Anywhere. |
radiusKm | none | How far around the place to look, 1 to 1,000 km. Google takes it as a guide. |
includeCompanies | none | Keep only these employers. Part of a name works; /pattern/ is a regular expression. |
excludeCompanies | none | Leave these employers out. |
excludeVia | none | Leave out jobs listed through these boards, such as Indeed. |
maxResultsPerSearch | 30 | Jobs for each search in each place, 1 to 500. |
maxResults | 1000 | Jobs for the whole run, 1 to 10,000. |
includeUnfilteredResults | false | Also read each search with Google's similar-results filter off. A few more jobs, sometimes. |
includeDescriptionHtml | false | Adds descriptionHtml. The plain description is always there. |
csvFriendlyOutput | false | Lists become single text cells, one job per spreadsheet line. |
outputFields | none | Keep only these fields in each row, such as title, companyName, applyLink. |
outputFileName | none | Also save the jobs as one JSON file of that name in the run's key-value store. |
requestDelaySeconds | 0 | A pause before each extra request to Google, 0 to 10. |
📤 What you get back
A real row from a test run on 3 November 2026, with the long fields cut short and a few left out:
{"ok": true,"jobId": "wHGzXyfDoycOwhPkAAAAAA==","title": "Warehouse Associate/Material Handler","companyName": "Motor Controls, Inc.","location": "Dallas, TX","latitude": 32.7766642,"longitude": -96.7969879,"via": "Indeed","postedAt": "10 days ago","postedAtDate": "2026-10-24","scheduleType": "Full-time","jobTypes": ["FULLTIME"],"workFromHome": false,"salary": "$19 an hour","salaryMin": 19,"salaryMax": 19,"salaryCurrency": "USD","salaryPeriod": "hour","healthInsurance": true,"dentalCoverage": true,"paidTimeOff": true,"qualification": "No Degree Mentioned","description": "Skills can be taught. Pride in your work, a strong attitude, and being a dependable teammate are harder to find...","qualifications": ["Previous forklift operating experience required"],"benefits": ["Medical, Dental, and Vision coverage (including a free HSA plan option)", "Quarterly performance bonus"],"applyOptions": [{ "title": "Indeed", "link": "https://www.indeed.com/viewjob?jk=77a37262eae1a926&utm_campaign=google_jobs_apply&utm_source=google_jobs_apply&utm_medium=organic" },{ "title": "Motor Controls Inc. Career Site", "link": "https://careers.motorcontrols.com/jobs/725718-warehouse-associate-material-handler?utm_campaign=google_jobs_apply&utm_source=google_jobs_apply&utm_medium=organic" }],"searchQuery": "warehouse associate","searchLocation": "Dallas, TX","position": 7,"scrapedAt": "2026-11-03T08:17:35.350Z"}
| Field | How to read it |
|---|---|
jobId | Google's own id for the listing. The same job keeps it across searches and days, so it is the key to diff on. |
postedAt, postedAtDate | Google gives an age ("10 days ago"); postedAtDate is the day that age points to, from when the run read it. Both are null when Google shows no age. |
salary | As Google shows it. salaryMin and salaryMax are equal for a single figure, and all five pay fields are null when the posting shows no pay. |
latitude, longitude | The centre of the place Google names, which can be a city, a region or a whole country. null for Anywhere. |
applyOptions | Every board and careers site Google lists for the job, with each posting's own address. |
scheduleType | Google's words, in the page's language. jobTypes turns them into codes, two for "Full-time and Contractor". |
🧾 Reading the output
Every row has ok. A job is ok: true and is charged. A note row is ok: false with diagnostics: true, an errorCode and an error that says what happened and what to change; note rows are never charged. Filter on ok == true and you have your jobs.
| Code | What it means |
|---|---|
NO_RESULTS | Google lists no jobs for that search, or none passed your filters. The row says which. |
NOT_SERVED | That search was not served this run. Re-run it later. |
BAD_INPUT | A field could not be used, named in field. Nothing was searched. |
TIME_LIMIT | The run stopped before its time limit to keep what it found. Give it more time. |
COST_LIMIT | The run reached the maximum cost you set. Raise it to get more. |
UNEXPECTED_ERROR | Something broke inside the run. Jobs before it are kept, and the row carries a reference to quote. |
The key-value store's SUMMARY record says, per search, how many Google pages were read, how many jobs Google listed, how many were delivered, repeated or left out by each filter, and why the search ended.
💡 What people use it for
- A recruiter's weekly sweep of one role across ten cities, diffed on
jobIdto see what opened since last week. - Pay research: every posting for a title in a region, with
salaryMin,salaryMaxandsalaryPeriodready to chart. - A staffing agency's map of a market: which employers are hiring for which roles, and on which boards.
- A job alert of your own, run daily with Posted within set to the past 24 hours.
From a search to the employers' full boards, in two runs:
- Run this one on a role and a city and keep the
companyNameandapplyOptionscolumns. - Paste the employers into Career Site Jobs Scraper to get every open role on their own careers sites.
🚧 What it does not do
- It lists what Google lists for a search. A very broad search does not return every job in a country. Split it by place or by title.
- Pay, posting age and tags appear only where Google shows them.
- It does not open the boards. Descriptions and apply links are the ones Google carries; a closed posting can still show on Google for a while.
- Remote jobs often have no place, because the posting names none.
- It is not an official Google tool. Dami's Studio is independent and is not affiliated with or endorsed by Google, or by any other company named on this page.
🧭 Which job scraper do you need?
| If you want | Use |
|---|---|
| Jobs from every board at once, the way Google Jobs lists them | This one |
| Open jobs at companies you name, read from their own hiring system | Career Site Jobs Scraper |
| Whole Greenhouse, Lever or Ashby boards | Multi-ATS Jobs Scraper |
| Public LinkedIn jobs by keyword and location | LinkedIn Jobs Scraper |
| US jobs with salary from ZipRecruiter | ZipRecruiter Scraper |
| Remote jobs, with the region the employer hires from | Remotive Jobs Scraper |
| Ordinary Google search results for a keyword | Google Search Results Scraper |
❓ Questions people ask
Do I need a Google account to scrape Google Jobs?
No. The run reads Google Jobs the way a signed-out visitor sees it, and there is no account or cookie field.
Why don't I see the same jobs in my browser?
Google tailors Jobs to the place and language it thinks you are in. Open a private window, set the same country and language, and search the same words with the place in them. Google's list also moves a little from one minute to the next.
Can I call it from code or connect it to an AI assistant?
Yes. The API tab has code for Python, JavaScript and the CLI. MCP clients like Claude and ChatGPT use https://mcp.apify.com/?tools=fetch-actor-details,dami_studio/google-jobs-scraper. Both bill your Apify account at the same price.
Is scraping Google Jobs legal?
The listings are public and are read the way a signed-out visitor sees them, with no account and nothing private. Job postings can name people, such as a recruiter, and GDPR and similar laws apply to personal data, so keep only what you need, and mind the rules on cold contact if you use any contact details. Google's own terms still apply to what you do with the data. Apify's write-up on the legality of web scraping is a fair starting point. We are not lawyers.
🆘 If something breaks
Open the Issues tab on the actor page with the run ID and the search that misbehaved. The note rows and the SUMMARY record usually explain it on their own.