Google Jobs Scraper
Pricing
$8.00 / 1,000 job scrapeds
Google Jobs Scraper
Scrape Google for Jobs. 22+ fields per posting (title, company, salary, apply links, remote flag). US/BR/MX/CA/UK/IN/AU/JP/SG. Pay $0.008 per job.
Scrape Google for Jobs at scale with full salary data and apply links. 22 structured fields per job, multi-network apply tracking, automatic matrix expansion for large runs.
Highlights
- ✅ 22 fields per job including
salaryMin/salaryMax/salaryCurrency/salaryPeriod - ✅ Apply links per network (LinkedIn, Indeed, Glassdoor, Workday, Greenhouse, Lever, company ATS)
- ✅ Matrix expansion for runs > 500 jobs — automatically rotates date filters + employment types to escape Google's pagination ceiling
- ✅ Hard cost ceiling (
maxCost, default $2) so runs never blow past your budget - ✅ Brightdata Scraping Browser under the hood — no cookies, no manual auth, just results
- ✅ Self-healing: detects soft-consent redirects and Brightdata exit-IP burns, auto-reconnects for a fresh session
Table of Contents
Pricing
| Event | Price | Description |
|---|---|---|
job-scraped | $0.008 | Charged once per job pushed to the dataset |
- $0.05 minimum charge per run (prevents tiny abandoned runs from bypassing cost)
- No actor-start fee
- You only pay for jobs we successfully extract — empty runs cost $0
Coverage
Google's Jobs widget is region-restricted (disabled in the EU since 2023). Supported regions:
| Country code | Region |
|---|---|
us | 🇺🇸 United States |
br | 🇧🇷 Brazil |
mx | 🇲🇽 Mexico |
ca | 🇨🇦 Canada |
gb | 🇬🇧 United Kingdom |
in | 🇮🇳 India |
au | 🇦🇺 Australia |
jp | 🇯🇵 Japan |
sg | 🇸🇬 Singapore |
EU countries (DE, FR, IT, ES, NL, etc.) are not supported — Google disabled the Jobs widget in the EEA after antitrust regulations.
Input
Required
| Field | Type | Description |
|---|---|---|
queries | string[] | Array of search keywords (e.g. ["software engineer", "data scientist"]) |
Optional
| Field | Type | Default | Description |
|---|---|---|---|
location | string | country default | City, region or full address (e.g. "San Francisco, CA") |
countryCode | string | "us" | Two-letter country code |
languageCode | string | "en" | Two-letter language code |
maxItems | integer | 500 | Hard cap on total jobs scraped (min 50) |
datePosted | string | — | today / 3days / week / month / all |
jobType | string[] | — | ["FULLTIME","PARTTIME","CONTRACTOR","INTERN"] |
workFromHome | boolean | false | Filter for remote roles only |
maxCost | number | 2 | Hard cost ceiling in USD — actor stops expanding once spent estimate reaches this |
proxyConfiguration | object | RESIDENTIAL | Standard Apify proxy config |
Example input
{"queries": ["software engineer", "data scientist"],"location": "San Francisco, CA","countryCode": "us","languageCode": "en","maxItems": 500,"datePosted": "week","jobType": ["FULLTIME"],"workFromHome": false,"maxCost": 4}
Output
Each row in the dataset is one job with the schema below:
{"jobId": "eyJhbGciOi...","title": "Senior Software Engineer","companyName": "Acme Inc","companyLogo": "https://encrypted-tbn0.gstatic.com/images?q=...","location": "San Francisco, CA, US","latitude": 37.7749,"longitude": -122.4194,"description": "We're hiring senior engineers for our infrastructure team...","descriptionHtml": "<p>We're hiring senior engineers for our infrastructure team...</p>","postedAt": "5 days ago","postedAtIso": "2026-04-10T00:00:00.000Z","jobType": "FULLTIME","workFromHome": false,"salaryMin": 180000,"salaryMax": 240000,"salaryCurrency": "USD","salaryPeriod": "YEAR","benefits": ["Health insurance", "401(k)", "Stock options"],"qualifications": ["5+ years experience", "Go or Rust proficiency"],"responsibilities": ["Design distributed systems", "Mentor junior engineers"],"applyOptions": [{ "network": "linkedin", "url": "https://www.linkedin.com/jobs/view/...", "directApply": false },{ "network": "greenhouse", "url": "https://boards.greenhouse.io/acme/jobs/...", "directApply": false }],"postedVia": "LinkedIn","sourceQuery": "software engineer","scrapedAt": "2026-05-24T12:00:00.000Z"}
Field reference
| Field | Type | Notes |
|---|---|---|
jobId | string | Google's internal identifier (or synthesized from title|company|location for dedup) |
title | string | Job title |
companyName | string | Hiring company |
companyLogo | string | URL of company logo image (Google CDN) |
location | string | Human-readable location string |
latitude, longitude | number | GPS coordinates when Google provides them |
description, descriptionHtml | string | Plain text + HTML versions of job description |
postedAt | string | Relative date string from Google (e.g. "5 days ago") |
postedAtIso | string | ISO 8601 — parsed from postedAt |
jobType | string | FULLTIME / PARTTIME / CONTRACTOR / INTERN |
workFromHome | boolean | True for fully remote |
salaryMin, salaryMax | number | Salary range when disclosed |
salaryCurrency | string | ISO currency code |
salaryPeriod | string | HOUR / MONTH / YEAR |
benefits, qualifications, responsibilities | string[] | Bullet lists extracted from job posting |
applyOptions | object[] | {network, url, directApply} per apply destination |
postedVia | string | The job board that posted it on Google |
sourceQuery | string | Which input queries[] produced this row |
scrapedAt | string | ISO 8601 timestamp of extraction |
Example use cases
Recruiter — track competitor hiring
{ "queries": ["senior backend engineer"], "location": "Austin, TX", "datePosted": "week", "maxItems": 100 }
Returns this week's senior backend roles in Austin with salary, company, and one-click apply.
Salary benchmarking — by role and city
{ "queries": ["product manager"], "location": "Seattle, WA", "datePosted": "month", "maxItems": 300, "maxCost": 3 }
Combine with simple aggregation to get median / p90 salary for PMs in Seattle this month.
Remote-only sourcing
{ "queries": ["devops engineer"], "countryCode": "us", "workFromHome": true, "maxItems": 200 }
Filter for fully remote roles across the US.
Multi-role digest for a job board
{ "queries": ["data scientist","ml engineer","data engineer"], "location": "London", "countryCode": "gb", "maxItems": 500, "maxCost": 5 }
Aggregate three related roles in one run for a daily digest.
Cost calculator
| Jobs scraped | Cost |
|---|---|
| 50 | $0.40 |
| 100 | $0.80 |
| 250 | $2.00 |
| 500 | $4.00 |
| 1,000 | $8.00 |
| 2,000 | $16.00 |
Costs are deterministic — you're charged per successfully extracted job, not per API call.
FAQ
Q: Why does Google Jobs scraping need Brightdata?
A: Google's Jobs vertical (udm=8) ships a different consent flow than regular search and frequently rejects datacenter IPs with a "before you continue" redirect. Brightdata Scraping Browser carries the CF / consent cookies needed to render the Jobs widget.
Q: My run returned 0 jobs but succeeded — why? A: Google occasionally serves a soft-consent redirect (page title becomes the URL itself, 0 cards render). The actor detects this and (1) reloads the page, (2) reconnects to Brightdata for a fresh exit IP, retrying up to 3 times. If it still fails after that, you weren't charged for the empty run.
Q: Can I scrape EU jobs?
A: No — Google disabled the Jobs vertical in the EEA in 2023 due to antitrust action. The widget simply isn't there. If you set countryCode: "de" the actor will fail gracefully.
Q: How does maxItems > 500 actually find more?
A: Google caps visible results per single filter slice to ~100. To unlock more, the actor automatically expands the search matrix by iterating over datePosted (today → 3days → week → month) and jobType filters, deduplicating by jobId. Costs scale with successful extractions, not slices attempted.
Q: How fresh is the data? A: Real-time from Google's index. Jobs are typically posted to Google within hours of being added to the source job board (LinkedIn, Indeed, etc.).
Q: Can I get the full apply URL on LinkedIn / Greenhouse without a Google redirect?
A: Yes — applyOptions[].url is the canonical destination URL (we decode Google's redirect wrapper).
Notes & limits
- EU countries are not supported (Google disabled the widget there in 2023).
- Pagination ceiling: Google caps visible results to ~100 per filter slice.
maxItems > 500triggers matrix expansion automatically. jobIdis sourced from Google's internal identifier when available; otherwise synthesized fromtitle|company|locationfor cross-run dedup.- Apply networks detected: LinkedIn, Indeed, Glassdoor, Workday, Greenhouse, Lever, Ashby, BambooHR, plus direct company career pages.
- Empty runs ($0 charged) typically mean Google flagged the IP — re-running usually succeeds.
Related actors
- stepstone-scraper — Germany / DACH job board (StepStone)
- craigslist-scraper — Multi-city classified ads including gigs and jobs
- upwork-jobs-scraper — Freelance gigs on Upwork
If this actor saved you time, please leave a ⭐⭐⭐⭐⭐ review on the Apify Store — it helps a lot 🙏