Google Jobs Scraper (Cheap, No Browser) avatar

Google Jobs Scraper (Cheap, No Browser)

Pricing

from $1.00 / 1,000 jobs

Go to Apify Store
Google Jobs Scraper (Cheap, No Browser)

Google Jobs Scraper (Cheap, No Browser)

Scrape Google Jobs listings by query and country: title, company, location, source (LinkedIn, Indeed...), posted date, salary, job type, description and apply links. No browser. $1.00 per 1,000 jobs plus Google SERP proxy usage.

Pricing

from $1.00 / 1,000 jobs

Rating

0.0

(0)

Developer

subimpact

subimpact

Maintained by Community

Actor stats

0

Bookmarked

3

Total users

2

Monthly active users

10 hours ago

Last modified

Share

Search Google Jobs by query and country and get one clean row per job: title, company, location, source, posting age, salary, employment type, description and apply links. Pure HTTP through Apify's Google SERP proxy. No browser, no Google API key, no login.

What it does

  • Runs one Google Jobs search per query (google.com/search?q=...&udm=8, Google's Jobs view).
  • Parses both copies of each listing that Google ships (the list card and the hidden detail panel) and merges them by Google's job id, so every job becomes exactly one dataset row.
  • Returns the description text, the part that is collapsed behind "..." included, plus every "Apply" button Google shows.
  • Pushes rows as they are ready. You are charged only after a row is written to the dataset.
  • Writes a status row instead of failing silently when a query has no jobs or Google returns an unexpected page. Status rows are free.

Input

The prefilled input in the Apify Console is also a working API input:

{
"queries": ["software engineer jobs kuala lumpur"],
"countryCode": "my",
"maxJobsPerQuery": 10
}

An empty input {} also works: it searches software engineer jobs in the us Google, with English, and delivers about 10 jobs.

InputTypeDefaultWhat it does
queriesarray of strings["software engineer jobs"]Google Jobs searches, for example software engineer jobs kuala lumpur or barista jobs singapore. Up to 100 per run. Duplicate queries are removed.
countryCodestringusTwo-letter Google country code (gl): us, my, sg, gb, au, ca, in and so on. uk is accepted and mapped to gb.
languageCodestringenGoogle interface language (hl): en, ms, de, or a regional code such as en-MY.
locationstringemptyFree text appended to every query, for example Kuala Lumpur or remote.
maxJobsPerQueryinteger10Cap on delivered rows per query (1-10). Google returns about 10 listings per query and has no working page 2, so add more specific queries to collect more.
maxItemsinteger100Global cap across all queries. This is the hard cost ceiling of the run.
concurrencyinteger5Queries fetched in parallel, 1 to 10.

Output

One dataset row per job. Every row has the same fields:

FieldExampleNotes
jobId81WRPjdaGz_QX9mmAAAAAAGoogle's stable document id for the listing.
jobTitleBackend Software Engineer (Golang)As shown by Google.
companyNameTechnology Bucket (M) Sdn BhdAs shown by Google.
locationKuala Lumpur, Federal Territory of Kuala LumpurNull when Google shows no location.
viaIndeedOriginal job board or careers site.
postedAgo2 days agoRelative age exactly as Google shows it.
postedAt2026-10-22T12:00:00.000ZEstimate derived from postedAgo and the scrape time. Google only gives coarse text, so treat it as approximate.
employmentTypeFull-timeFull-time, Part-time, Contractor and similar, when shown.
salaryRM 8K–RM 12K a monthRaw pay string exactly as shown. Null when no salary is shown.
descriptionRoles & Responsibilities: ...Description text from the detail panel, including the collapsed remainder.
applyLinks[{"title": "Apply directly on Indeed", "url": "https://www.google.com/goto?url=..."}]Apply buttons as {title, url}. The URL is Google's redirect, which lands on the employer or job-board page.
companyLogohttps://encrypted-tbn0.gstatic.com/images?...Null when Google shows a letter avatar instead of a logo.
querysoftware engineer jobs kuala lumpurThe query that produced the row.
countryCodemyGoogle gl setting.
languageCodeenGoogle hl setting.
position1Rank on Google's results page for that query, starting at 1.
scrapedAt2026-10-24T12:00:00.000ZWhen the page was fetched.
statusokok for a job, empty or error for a status row.
errorMessagenullWhy a status row is not ok.

Example row, with the description shortened here and the Google redirect token replaced by ... in the link:

{
"jobId": "81WRPjdaGz_QX9mmAAAAAA",
"jobTitle": "Backend Software Engineer (Golang)",
"companyName": "Technology Bucket (M) Sdn Bhd",
"location": "Kuala Lumpur, Federal Territory of Kuala Lumpur",
"via": "Indeed",
"postedAgo": "2 days ago",
"postedAt": "2026-10-22T12:00:00.000Z",
"employmentType": "Full-time",
"salary": "RM 8K–RM 12K a month",
"description": "Roles & Responsibilities:\n• Design, develop, and maintain backend services and APIs using Go (Golang).\n• Build scalable, distributed, and event-driven systems ...",
"applyLinks": [
{
"title": "Apply directly on Indeed",
"url": "https://www.google.com/goto?url=..."
},
{
"title": "Apply on LinkedIn",
"url": "https://www.google.com/goto?url=..."
}
],
"companyLogo": "https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcRDOj5L_0R_M-vGNHZeOqUiv83LhTU7qeoZbM3N&s=0",
"query": "software engineer jobs kuala lumpur",
"countryCode": "my",
"languageCode": "en",
"position": 1,
"scrapedAt": "2026-10-24T12:00:00.000Z",
"status": "ok",
"errorMessage": null
}

A query with no jobs gets one status row (status: "empty") and a failed query gets one status row (status: "error"); job fields are null on those rows and they are never charged.

Pricing

  • $0.001 per job row, which is $1.00 per 1,000 jobs. The job event is charged once, right after the row is successfully pushed to the dataset.
  • Error and empty status rows are free. So are rows that fail to push.
  • Apify platform usage and Google SERP proxy usage are billed to you separately by Apify. The Google SERP proxy costs about $0.0025 per query page. At about 10 jobs per page that is about $0.25 per 1,000 jobs.
  • All in, about $1.25 per 1,000 jobs including estimated proxy usage.

A default run ({}) is one query and about 10 jobs: about $0.01 of job charges plus about $0.0025 of proxy usage, well under $0.05. maxItems is the hard ceiling on job rows; set it to the number of jobs you are willing to pay for.

How this compares

Free-plan list prices checked 24 October 2026. Competitor platform usage is extra (see each listing) and is not included below.

ActorPrice on the Free planWhat users saw in the last 30 days
This actor$1.00 per 1,000 jobs, plus about $0.25 per 1,000 jobs of Google SERP proxy usageNew actor
johnvc/Google-Jobs-Scraper$0.09 per results page of up to 10 jobs, about $9 per 1,000 jobs490 users, 91.5% run success
epctex/google-jobs-scrapersee listing0.1% run success, rating 2.9
gio21 Google Jobs actorsee listing87% run success, rating 2.4

At the list prices above, 1,000 jobs cost about $1.25 here including the estimated proxy usage, against about $9 with johnvc before their platform usage.

Limits and things to know

  • First page only. Google's Jobs view returns about 10 listings per query. The usual start=10 page parameter returns an empty Jobs page, and num=20 or num=100 are ignored (measured 24 October 2026). Each query therefore delivers up to about 10 rows. Add more queries to collect more jobs.
  • No date-posted filter. Google's htichips=date_posted:today and :week parameters were measured on 24 October 2026 and did not change the results, so this actor does not offer a date filter rather than pretend one works.
  • The same job found by two queries is delivered once. Deduplication uses Google's job id, falling back to title plus company plus location.
  • Apply links are Google redirects. They work in a browser but carry an expiring token, so follow them when you use them rather than storing them forever.
  • postedAt is an estimate. Google exposes text such as "3 days ago", not an exact timestamp. Months are counted as 30 days and years as 365 days.
  • Google can change its markup or rate-limit a session. The actor checks the response shape before selling anything: an unexpected page becomes a free error row, not a charge. CAPTCHA and "sorry" pages are detected and retried with a fresh proxy session.
  • Hard limits: 100 queries per run, 500 rows accepted per maxJobsPerQuery, 1,000 rows per maxItems, 10 concurrent queries, 45 second request timeout, 3 retries with a fresh proxy session, and no retry on HTTP 404.
  • The Google SERP proxy is required. The actor runs on Apify Proxy with the GOOGLE_SERP group. If that proxy is unavailable, the run fails with a clear message. It never falls back to a direct connection.

How it works

The actor sends a plain HTTP GET to http://www.google.com/search?q=...&udm=8 through Apify's Google SERP proxy. Google returns a normal results page: a list of about 10 job cards plus a hidden detail panel for each card. The parser takes the job id from the card's stable attributes, pairs the card with its detail panel, and reads the title, company, location, source, posting age, salary, employment type, description and apply buttons. It does not use a browser, so it needs no browser image and the default memory of 256 MB is enough.

Responsible use

This actor collects publicly visible job listings for legitimate research, recruiting, market analysis and job-board aggregation. Respect Google's Terms of Service and the laws that apply to you, keep request volumes reasonable, and do not use the data to harass candidates or to republish listings in a way that infringes the rights of the employer or job board. Job ads go stale: confirm details with the employer before acting on them.