Google for Jobs Scraper (Salaries and Apply Links) avatar

Google for Jobs Scraper (Salaries and Apply Links)

Pricing

from $0.41 / 1,000 jobs

Go to Apify Store
Google for Jobs Scraper (Salaries and Apply Links)

Google for Jobs Scraper (Salaries and Apply Links)

Scrape Google Jobs (Google for Jobs) by date posted with no login: title, employer, location, source board, salary as numbers, job type, full description and every apply link, plus the employer's US H-1B/PERM filing record and UK sponsor licence. Only-new mode for alerts. $0.75 per 1,000 jobs.

Pricing

from $0.41 / 1,000 jobs

Rating

0.0

(0)

Developer

locaihost data

locaihost data

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Share

Search Google Jobs in 21 countries the way you would in a browser and get one row per job with title, employer, location, the board it came from, salary as numbers, job type, the full description and every "Apply on" link, plus the employer's US H-1B/PERM filing record and UK sponsor licence. No login, no cookies.

  • Feed a job board: Google Jobs already gathers postings from many boards and career sites; get them as one clean feed.
  • Research salaries: salary ranges as numbers by title and city, with the period (hour, day, week, month or year).
  • Get a daily job alert: schedule a saved search with onlyNew and receive only jobs you haven't seen.
  • Skip the redirects: every apply link with its real URL, and applyUrl pointing to the first direct one.
  • Find jobs that can sponsor a visa: see what the posting says about sponsorship and whether the employer actually files.

Quick start

Paste this into the JSON tab of the input and click Start:

{"queries": ["data analyst"], "location": "Chicago, IL", "maxResults": 10}

You get 10 jobs in about a minute: most of that is the run opening its Google session, after which pages come back in a few seconds each. maxResults is per search, and each search runs in every location you give.

Filter by date posted

Set datePosted to today (past 24 hours), 3days, week or month; the default any keeps every job. The run uses Google's own "Date posted" filter: it opens your search, then follows the link behind Google's "Date posted" chip for that window, exactly as clicking it in a browser would. If Google's page has no chip (rare), it searches with the chip's words instead ("… since yesterday"). Either way each job's age ("3 days ago") is checked again, so a job outside the window is dropped and never charged. A job whose card shows no age is kept, because Google's filter let it through.

Past 24 hours is the exception. Google's own "Yesterday" filter returns almost nothing for logged-out searches (one nurse job in Houston and no data analyst jobs in Chicago when we tested on 18 Oct 2026). So today uses Google's "Last 3 days" filter and keeps only the jobs whose age shows 24 hours or less. A job with no age shown is dropped, since it can't be shown to be that recent. The run's SUMMARY record says which way each search went (dateFilter.searchesViaGoogleChip) and counts droppedOlder and keptWithoutDate.

{"queries": ["registered nurse"], "location": "Austin, TX", "datePosted": "3days", "maxResults": 20}

What data can I get?

GroupFields
JobjobId (stable across runs), title, companyName, location, via (the board Google found it on), postedAgo, postedDate (approximate), googleJobsUrl
SalarysalaryText, salaryMin, salaryMax, salaryCurrency, salaryPeriod
TypeemploymentType, jobTypes, remote, qualification, tags (such as "Health insurance", "Work from home")
ApplyapplyLinks (every site, with its real URL and whether Google marks it "Apply directly"), applyUrl (the first direct one, else the first)
Descriptiondescription, descriptionIsPreview, highlights, and the same highlights as flat lists: qualifications, responsibilities, benefits
What the posting sayspostingSponsorship (offers or declines) with the sentence in postingSponsorshipText
US sponsorshipsponsorSignal (strong, some, none), sponsorMatch, h1bEmployer, h1bCertifiedLatestFY, h1bCertifiedTotal, permCertifiedTotal, similarFiledTitle, similarTitleFilings, similarTitleMedianWage + currency and period
UK sponsorshipukLicensed, ukSponsorName, ukRating, ukRoutes, ukMatchBasis, possibleMatches
Plain EnglishsponsorNote: one sentence you can show a candidate
RunsearchQuery, searchLocation, searchCountry, scrapedAt

How the sponsorship flag works. US evidence is the employer's certified H-1B (and H-1B1/E-3) Labor Condition Applications and PERM cases from the US Department of Labor's public disclosure files, FY2024 to date; similarFiledTitle is the employer's filed title closest to this job, with its median filed wage. UK evidence is the Home Office register of licensed sponsors; ukMatchBasis is exact, trading-name, brand-map (a reviewed brand to legal-entity list) or unconfirmed (only similar names, listed in possibleMatches). When nothing is found the note says "no filings found under this name", never "doesn't sponsor". The flag is evidence, not legal advice.

One real row (run on 2026-10-18, shortened):

{
"jobId": "VhkQmYW-CckTwmfsAAAAAA==",
"title": "Finance Data Analyst",
"companyName": "GEICO",
"location": "Chicago, IL",
"via": "ZipRecruiter",
"salaryText": "$86,100–$133,250 a year",
"salaryMin": 86100,
"salaryMax": 133250,
"salaryCurrency": "USD",
"salaryPeriod": "year",
"employmentType": "Full-time",
"remote": false,
"applyUrl": "https://www.careerbuilder.com/job-details/finance-data-analyst-chicago-il--255f67ad-d082-4c11-915a-55a1b4cd5668?utm_campaign=google_jobs_apply&utm_source=google_jobs_apply&utm_medium=organic",
"applyLinks": [
{"name": "ZipRecruiter", "url": "https://www.ziprecruiter.com/c/Geico/Job/Finance-Data-Analyst/-in-Chicago,IL?jid=24948ba39a4f07b1&utm_campaign=google_jobs_apply&utm_source=google_jobs_apply&utm_medium=organic", "direct": false},
{"name": "CareerBuilder", "url": "https://www.careerbuilder.com/job-details/finance-data-analyst-chicago-il--255f67ad-d082-4c11-915a-55a1b4cd5668?utm_campaign=google_jobs_apply&utm_source=google_jobs_apply&utm_medium=organic", "direct": true}
],
"descriptionIsPreview": false,
"postingSponsorship": "declines",
"postingSponsorshipText": "At this time, GEICO will not sponsor a new applicant for employment authorization for this position.",
"sponsorSignal": "none",
"sponsorNote": "No H-1B/PERM filings (FY2024–FY2026) or UK sponsor licence found under this name. The employer may file under a different legal name."
}

The dataset has four views (Overview, Visa sponsorship, Salary, Qualifications, duties, benefits) and exports to JSON, CSV, Excel or HTML. The run's SUMMARY record lists the searches run, jobs skipped and why.

How much does it cost?

You pay per job returned, with descriptions, apply links and sponsorship flags included. There is no charge for Apify platform usage on top.

RowFree and StarterScaleBusiness
Job$0.75 per 1,000$0.56 per 1,000$0.41 per 1,000

Plus $0.00005 per run start. Apify's free $5 monthly credit covers about 6,600 jobs. Free-plan runs stop at 500 jobs each; any paid Apify plan removes the cap.

What's free: a job found by two of your searches or locations (returned and charged once), jobs that fail your date, job type or remote filters (every filter is checked again on each row, so a job Google lets through anyway is dropped), jobs dropped by sponsorship: only-with-evidence, jobs skipped by onlyNew, and runs that find nothing. To cap a run's spend, set Maximum cost per run in the run options.

Limits, stated up front

  • Logged-out only. It reads the Google Jobs results any visitor sees. It never signs in and never asks for your cookies.
  • Google shows a few hundred jobs per search at most (about 200 for "registered nurse in Texas"). For more, split by city with locations or add related searches.
  • Google sometimes asks for a traffic check; the run handles it. On the rare run where it can't, you get the first 10 jobs of each search and the status message says so.
  • Salary appears only when the posting has one. When Google prints no currency symbol, the currency of the country you chose is used.
  • Dates are approximate: Google shows "3 days ago", not a timestamp, and some cards show no date. datePosted windows follow Google's own filter (see above).
  • In the EU, Google shows only a short preview of each description; descriptionIsPreview says so, and the apply links lead to the full text.
  • Google Jobs isn't offered everywhere. Australia, New Zealand, Ireland, the Nordics and Poland get web results instead of a Jobs list, so they aren't in the country list.
  • Outside English-speaking countries, write the city the way locals do ("München", not "Munich"). When the first wording finds nothing, the run tries looser ones and keeps their jobs only if they are about your search.
  • radiusKm is Google's own radius setting, which Google treats as a guide, so a job a little further out can still appear.
  • Field labels are read in English; descriptions stay in the posting's own language. US filing data is refreshed quarterly; the latest fiscal year is partial.
  • Time limit: if a run nears its timeout, it stops, keeps what it found and says so in the status message.

Only new since last run, and schedules

Turn on onlyNew in a saved task and schedule it daily: each run returns only jobs that no earlier run of the same search returned, so you get a clean job alert and never pay twice for the same job. Skipped jobs cost nothing. Set up a schedule under Schedules in Apify Console.

Integrations: API, n8n, Make and AI agents

API. Run it and get the rows back in one call:

curl -X POST "https://api.apify.com/v2/acts/locaihost~google-jobs/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"queries": ["registered nurse"], "locations": ["Austin, TX", "Dallas, TX"], "datePosted": "week", "maxResults": 50}'

Apify's API clients for Python and JavaScript work the same way.

n8n, Make, Zapier, Google Sheets, Slack, webhooks. Apify's built-in integrations send each run's dataset wherever you need it.

AI agents (MCP). Add this Actor to Cursor or any other MCP client with https://mcp.apify.com/?tools=locaihost/google-jobs, then ask something like "Find remote Python developer jobs posted in the past 3 days that list a salary, and give me the direct apply links."

FAQ

How much does it cost to scrape Google Jobs?

$0.75 per 1,000 jobs on the Free and Starter plans, descriptions, apply links and sponsorship flags included, and less on Scale and Business. Apify's free $5 monthly credit covers about 6,600 jobs.

Can I use it through the API or from Python?

Yes. Use the run-sync-get-dataset-items call above, or Apify's Python and JavaScript clients. Every run's data is also available as JSON, CSV or Excel from its dataset.

Can I use it from an AI agent?

Yes. Through the Apify MCP server (https://mcp.apify.com/?tools=locaihost/google-jobs) any MCP client can run a search and read the jobs back.

The Actor reads only the job listings Google shows to any logged-out visitor, plus public US Department of Labor files and the UK sponsor register. It never signs in. Google's terms restrict automated access, so weigh that for your use. Email addresses, phone numbers and profile links in descriptions are replaced, and a name that follows a recruiter cue ("Recruiter: ...") becomes "[name removed]". Use the data for job search, job-board aggregation and labour-market research, and respect Google's and each source board's terms when you republish postings, plus the privacy laws that apply to you.

21: the US, UK, Canada, India, Germany, France, Spain, Italy, Switzerland, Singapore, Malaysia, the Philippines, Indonesia, Hong Kong, the UAE, Saudi Arabia, South Africa, Nigeria, Kenya, Mexico and Brazil.

Why are some fields empty?

Salary appears only when the posting has one, some cards show no date or job type, highlights lists are empty when Google shows none, and sponsorship fields are null when no filing matched the employer's name.

More from locaihost data

Did it help?

If this saved you time, a quick rating on the Store helps other people find it.

Support

Something not working, or a field you need? Open an issue on the Issues tab: we answer issues within 24 hours.