Google Jobs Scraper avatar

Google Jobs Scraper

Pricing

$3.00 / 1,000 job scrapeds

Go to Apify Store
Google Jobs Scraper

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.003 per job.

Pricing

$3.00 / 1,000 job scrapeds

Rating

5.0

(3)

Developer

Gio

Gio

Maintained by Community

Actor stats

1

Bookmarked

549

Total users

220

Monthly active users

10 hours

Issues response

4 days ago

Last modified

Categories

Share

Google Jobs Scraper � Salaries, Companies & Apply Links

Google Jobs Scraper extracts job listings from Google for Jobs by search query and location: title, company, salary range, employment type, remote flag, apply links per network, posting date and full description. It works across 9 countries � United States, Brazil, Mexico, Canada, United Kingdom, India, Australia, Japan and Singapore � with no login, no cookies and no setup.

Export to JSON, CSV or Excel, pull it through the API, schedule it, or feed it straight to an AI agent. Think of it as a Google Jobs API for the listing data the official one doesn't give you.

What can you do with it?

  • 🎯 Recruiting & talent sourcing â€â€� track who's hiring for which roles in any city, with direct apply links to LinkedIn, Indeed, Greenhouse, Lever and company ATS pages.
  • 💰 Salary benchmarking â€â€� collect disclosed salaryMin / salaryMax by role and location to build median and p90 compensation bands.
  • 📊 Market & labor research â€â€� measure hiring demand, employment-type mix and posting velocity across queries, companies and regions.
  • � Remote jobs monitoring â€â€� filter for workFromHome roles and watch a niche for new remote openings on a schedule.
  • 🤖 AI / LLM datasets â€â€� produce clean, structured job JSON for RAG pipelines, agents and analysis.

What data does it extract?

FieldDescription
titleJob title
companyName / companyLogoHiring company and logo URL
location / latitude / longitudeLocation string and GPS coordinates when available
salaryMin / salaryMax / salaryCurrency / salaryPeriodDisclosed pay range, currency and HOUR/MONTH/YEAR period
jobType / workFromHomeEmployment type and remote flag
description / descriptionHtmlPlain-text and HTML job description
benefits / qualifications / responsibilitiesBullet lists parsed from the posting
applyOptionsApply links per network (LinkedIn, Indeed, Greenhouse, Lever, ATS)
postedAt / postedAtIso / postedViaPosting recency and originating job board
jobId / sourceQuery / scrapedAtIdentifier, originating query and extraction timestamp

Input

Provide one or more search queries and, optionally, a location and country. The most reliable mode is query + location.

FieldTypeDescription
queriesArrayOne or more search keywords (e.g. ["software engineer", "data scientist"]). Each query runs independently.
locationStringCity, state or region (e.g. "San Francisco, CA"). Leave empty for country-wide results.
countryCodeStringISO-2 code: us, br, mx, ca, gb, in, au, jp, sg. Default us. EU is excluded.
languageCodeStringISO language code for results (e.g. en, pt, es). Default en.
datePostedStringall, today, 3days, week or month. Default all.
jobTypeArrayFilter by FULLTIME, PARTTIME, CONTRACTOR, INTERN. Empty = all types.
workFromHomeBooleanReturn only remote jobs. Default false.
maxItemsIntegerHard cap on total jobs after dedup. Default 500, min 50, max 10,000.
maxCostNumberCost ceiling (USD) for matrix expansion when maxItems > 500. Default $2, max $20.

Note on country codes: use countryCode / languageCode (not country / language). Google disabled its Jobs widget across the EU/EEA after antitrust rulings, so EU codes are intentionally excluded � pick a supported country or let it default to us.

Output

One record per job:

{
"jobId": "JqaxCjx4oqiOf07WAAAAAA==",
"title": "Senior Software Engineer",
"companyName": "Acme Inc",
"companyLogo": "https://encrypted-tbn0.gstatic.com/images?q=...",
"location": "San Francisco, CA",
"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-06-18T00: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-06-23T12:00:00.000Z"
}

Field notes

  • salaryMin / salaryMax / salaryCurrency / salaryPeriod: only present when the employer discloses pay; otherwise null. salaryPeriod is HOUR, MONTH or YEAR.
  • applyOptions: one entry per apply destination with { network, url, directApply }. url is the canonical destination (Google's redirect wrapper is decoded), so you get the real LinkedIn / Greenhouse / Lever / ATS link. Empty [] when Google exposes no direct apply route.
  • postedAt / postedAtIso: postedAt is Google's relative string (e.g. "5 days ago"); postedAtIso is the parsed ISO 8601 date. Both null when Google omits recency.
  • latitude / longitude / companyLogo: null when Google doesn't provide them for that listing.
  • jobId: Google's internal identifier when available; otherwise synthesized from title|company|location for cross-run dedup.

How many results per query?

Google caps visible results to roughly 100 per filter slice. When maxItems > 500, the actor automatically expands the search matrix � rotating datePosted (today → 3days → week → month) and jobType filters and deduplicating by jobId � to escape that ceiling. The maxCost ceiling (default $2) caps expansion bandwidth so a large run never blows past your budget. For broad coverage, combine several specific queries and a location.

Integrations

  • API â€â€� start runs and fetch the dataset via the Apify API (REST/JSON) or the JS/Python clients. A Google Jobs API for the data the official one doesn't expose.
  • Schedule & monitor â€â€� run on a schedule for recurring remote-jobs or hiring monitoring; get notified on failures.
  • AI agents / MCP â€â€� expose this actor to ChatGPT, Claude and other assistants through the Apify MCP server so an AI can pull live job data on demand.
  • No-code â€â€� pipe results into Make, Zapier, Google Sheets, Slack or your database with Apify integrations and webhooks.

FAQ

How does Google Jobs Scraper work? It searches Google's Jobs widget exactly as a job seeker would, opens each listing, copies the visible data � title, company, salary, apply links and description � and organizes it into a structured dataset, only much faster and at scale.

Is it legal to scrape Google Jobs? The actor collects only publicly available job-listing information (no login, no personal data). As with any scraping, you are responsible for how you use the data and for complying with applicable laws and terms. See Is web scraping legal?

Do I need a Google account or login? No. No account, cookies or credentials � proxy and unblocking are handled automatically.

Which countries are supported? United States, Brazil, Mexico, Canada, United Kingdom, India, Australia, Japan and Singapore. Set countryCode (default us). EU/EEA countries are not supported � Google disabled its Jobs widget there after antitrust rulings.

Can I scrape only remote jobs? Yes � set workFromHome: true to return only remote / work-from-home roles. You can also filter by jobType and datePosted.

How do I get more than ~100 jobs per query? Raise maxItems above 500 and the actor automatically expands the search matrix across date and employment-type filters, deduplicating by jobId. The maxCost ceiling keeps expansion within budget.

Why did my run return 0 jobs but succeed? Google sometimes serves a soft-consent redirect where no cards render. The actor detects this, reloads, reconnects for a fresh exit IP and retries. If it still fails, you aren't charged for the empty run.

Can I get the data through an API or connect it to AI? Yes � run it via the Apify API/clients, or expose it to AI assistants through the Apify MCP server. See Integrations above.

Building a hiring or jobs data pipeline? Pair Google Jobs Scraper with:


â­� Like this actor?

If it saved you time, please take 30 seconds to leave a review on the Apify Store � it's the single biggest way to support continued development.