# Google Jobs Scraper: Salary, Apply Links and Filters

> Google Jobs Scraper is an Apify actor (API) by CheapAPI Labs. Jobs by keyword and location with company, salary, posting date and apply links. Monitoring returns only new jobs. It costs $2.10 per 1,000 jobs on every Apify plan, billed through your Apify account with no API key. Compared with the most used Google Jobs actor (about 3,800 users): 1,000 Google Jobs listings costs $2.10 here and about $3.50 to $9.00 there (Apify Store listing prices, checked September 2026). Apify platform usage is billed on top here.

- Page: https://cheapapilabs.com/actors/google-jobs-scraper/
- Run on Apify: https://apify.com/cheapapi/google-jobs-scraper
- Publisher: CheapAPI Labs (Apify username cheapapi)
- Main price: $2.10 per 1,000 jobs on Free, $2.10 on Gold
- Our prices updated: 2026-10-30

## Prices per event (USD)

| Event | Free | Bronze | Silver | Gold |
|---|---:|---:|---:|---:|
| Job listing | $0.0021 | $0.0021 | $0.0021 | $0.0021 |
| Result page checked | $0.0018 | $0.0018 | $0.0018 | $0.0018 |

Platinum and Diamond pay the Gold price. Apify platform usage: billed separately by Apify.

## Call it from code

```bash
curl -X POST "https://api.apify.com/v2/acts/cheapapi~google-jobs-scraper/run-sync-get-dataset-items" \
  -H "Authorization: Bearer $APIFY_TOKEN" -H "Content-Type: application/json" \
  -d '{"searchTerms":["software engineer"],"country":"US","language":"en","maxJobsPerSearch":20,"postedWithin":"any","monitoringStoreName":"google-jobs-monitor"}'
```

## Example output row

```json
{
  "id": "870af54819d97b92",
  "searchTerm": "devops",
  "position": 2,
  "jobId": "-V-GEAqDGeZ8J05xAAAAAA==",
  "title": "Cloud and DevOps Engineer (5–8 yrs)",
  "employerName": "Advanced Space",
  "employerWebsite": null,
  "location": "Westminster, CO",
  "isRemote": false,
  "salary": "116K–150K a year",
  "salaryMin": 116000,
  "salaryMax": 150000,
  "salaryCurrency": "USD",
  "salaryPeriod": "year",
  "employmentType": "Full-time",
  "postedAt": "2026-09-24T22:28:53.000Z",
  "postedAgo": "1 day ago",
  "applyUrl": "https://www.clearancejobs.com/jobs/9190535/cloud-and-devops-engineer-5-8-yrs",
  "applyVia": "Clearance Jobs",
  "googleSearchUrl": "https://www.google.com/search?q=devops&udm=8&hl=en&gl=US&gws_rd=cr&ie=UTF-8&oe=UTF-8",
  "searchCountry": "US",
  "searchLocation": "US",
  "language": "en",
  "scrapedAt": "2026-09-25T22:29:10.412Z"
}
```

## Fields

| Field | Type | Example |
|---|---|---|
| `id` | string | `870af54819d97b92` (stable: same job, same id in every run) |
| `searchTerm` | string | `devops` |
| `position` | number | `2` |
| `jobId` | string | `-V-GEAqDGeZ8J05xAAAAAA==` |
| `title` | string | `Cloud and DevOps Engineer (5–8 yrs)` |
| `employerName` | string | `Advanced Space` |
| `employerWebsite` | string / null | `null` (Google Jobs lists usually omit it; always present as a key, `null` when Google shows no website) |
| `location` | string | `Westminster, CO` |
| `isRemote` | boolean | `false` |
| `salary` | string / null | `116K–150K a year` |
| `salaryMin` | number / null | `116000` |
| `salaryMax` | number / null | `150000` |
| `salaryCurrency` | string / null | `USD` |
| `salaryPeriod` | string / null | `year` (`hour`, `day`, `week`, `month`, `year`) |
| `employmentType` | string / null | `Full-time` |
| `postedAt` | ISO date / null | `2026-09-24T22:28:53.000Z` |
| `postedAgo` | string / null | `1 day ago` |
| `applyUrl` | string | `https://www.clearancejobs.com/jobs/9190535/...` |
| `applyVia` | string | `Clearance Jobs` |
| `googleSearchUrl` | string | Google Jobs search page these results come from |
| `searchCountry` | string | `US` |
| `searchLocation` | string | `US` (the location this job was searched in: the country code when the whole country is searched, or the matched location name such as `Austin,Texas,United States` for a city; with several locations, tells you which one returned it) |
| `language` | string | `en` |
| `scrapedAt` | ISO date | `2026-09-25T22:29:10.412Z` |

The dataset has three views: **Jobs** (the overview), **Salaries** (parsed salary columns) and **All fields**. A `RUN_SUMMARY` record in the key value store lists how many jobs were found, filtered, de duplicated and delivered, plus the searched locations and any problems per search term and location (and, in monitoring mode, how many jobs were skipped as already seen).

## Compared with alternatives

Typical run: **1,000 Google Jobs listings**. ", " means the Store listing does not state it.

| Option | Price for 1,000 jobs | Billing | Full description | Parsed salary min/max | Countries |
|---|---|---|---|---|---|
| Most used Google Jobs Actor (~3,800 users) | ≈ $3.50 to $9.00 | $0.035 (Gold and above) to $0.09 (Free) per results page (estimate assumes ~10 jobs per page) | ✓ |, |, |
| Per job Google Jobs Actor with start fee (~2,800 users) | $150 to $200 | $0.15 to $0.20 per job + $0.14 to $0.20 per run start |, |, |, |
| Flat price Google Jobs Actor (~1,300 users) | $3.00 | $0.003 per job |, |, | 9 listed |
| Google Jobs Actor with descriptions (~400 users) | $3.00 **+ platform usage** | $0.003 per job, you also pay compute | ✓ | ✓ |, |
| Pay per result Google Jobs API Actor (~450 users) | $10 to $15 | $0.01 (Bronze and above) to $0.015 (Free) per job |, |, |, |
| Tiered Google Jobs Actor with optional details (~340 users) | $2.40 to $6.00 + start fee | $0.006 (Free), $0.0039 (Gold), $0.003 (Platinum), $0.0024 (Diamond) per job + $0.018 to $0.035 per run start | optional |, |, |
| **This Actor** | **$2.10 + platform usage** | $0.0021 per delivered job, no start fee; $0.0018 per result page that delivered no job; Apify platform usage billed separately | ✗ | ✓ | 230+ |

Prices from public Apify Store listings, checked September 2026. The table is not exhaustive: it lists the most used Google Jobs Actors plus notable cheaper ones; Actors with fewer users are left out. For this Actor, Apify platform usage is billed separately by Apify (at the default 256 MB a small run typically uses about $0.001 to $0.005) on top of the price shown. This Actor is the lowest price per 1,000 jobs in this comparison on every plan (the closest is the tiered Actor at $2.40 + start fee, on Apify's Diamond plan only), but three alternatives can return the **full job description** and we do not. If you need the description text, one of those is the better fit; if you need titles, employers, salaries and apply links at the lowest price, with "only new jobs" monitoring, this one is.

## Not included

- **Full job descriptions**, qualifications and benefits bullets. Google Jobs result lists do not contain them; use `applyUrl` to open the original posting.
- **Direct LinkedIn, Indeed or Glassdoor scraping.** Google Jobs aggregates listings from many boards (LinkedIn, Indeed, Glassdoor, ZipRecruiter, company career pages and more, shown in `applyVia`), but we only read what Google Jobs shows. Jobs that exist only on a board Google has not indexed are not returned, and board specific fields (applicant counts, Easy Apply, recruiter names) are not included.
- **GPS coordinates and company logos** (not in Google Jobs result lists).
- **Regular Google web results** for a job query: use [Google SERP Scraper](https://cheapapilabs.com/actors/google-serp-scraper/).
- **Employer details** such as address, phone, rating and reviews: use [Google Maps Scraper Plus](https://cheapapilabs.com/actors/google-maps-scraper-plus/) with the employer name.

## Limits

- Up to 200 jobs per search (term × location) (Google Jobs limit). Split large searches by city or role to get more.
- With several locations, language, radius, employment type and the other filters are shared by all locations; run the Actor separately if a city needs different filters. Up to 100 locations per run.
- When the spending limit cannot pay for every search, searches are started in input order (all terms for the first location, then the next location), so the last locations are the ones skipped.
- A location name with a country hint (e.g. `London, United Kingdom`) is matched best; a bare city name is matched within **Country**, and an ambiguous name that is also a country falls back to that country if no city matches.
- No full job description, qualifications, benefits or GPS coordinates (not part of Google Jobs result lists).
- One apply link per job (the source Google shows first).
- "Posted within" and "Only jobs with salary" are applied after collection, so heavily filtered runs return fewer rows than requested.
- Salary parsing is best effort; unusual formats keep the text in `salary` and leave the numeric fields empty.
- Company logos are not included.
- "Only new jobs" remembers up to 5,000 job ids per search; very old ids are forgotten first.

## FAQ

**Is there a limit on the Apify Free plan?**
Yes: up to $0.25 of this Actor's results per calendar month, enough to try it. Apify pays developers nothing for Free plan usage while our data costs are real, so this keeps the Actor sustainable. Runs that reach the allowance stop cleanly and keep everything collected so far; the allowance resets on the 1st of the month. Any paid Apify plan has no limit.

**Is it legal to scrape Google Jobs?**
The Actor collects publicly visible job listings only, without logging in. Job listings are business information; make sure your use complies with the applicable laws (such as GDPR) and the terms of the job sites you link to. If in doubt, consult a lawyer.

**How fresh is the data?**
Every run searches Google Jobs live at run time; nothing is served from an old cache. Each row has `scrapedAt` (when it was collected) and `postedAt`. `postedAt` is derived from Google's "posted X days ago" label, so it is accurate to the hour/day Google shows.

**Why did I get fewer results than "Maximum jobs per search term"?**
Google Jobs often shows fewer jobs than requested for narrow terms or small locations. Filters (posted within, only with salary, part time), duplicate removal and **Only new jobs** also reduce the count. You are charged per delivered job; only when a search delivers fewer jobs than the result pages it fetched is each uncovered page charged $0.0018. `RUN_SUMMARY` shows found, filtered, duplicate, already seen, delivered and `resultPagesChecked` counts.

**Why was I charged "Result page checked" ($0.0018)?**
Google Jobs is read in pages of 10 jobs, and every fetched page costs us money even when no job on it reaches your dataset. You see this fee only when a search delivered fewer jobs than pages fetched: Google had no jobs for it, your filters (posted within, only with salary, part time) or **Only new jobs** removed them, all were duplicates of another search, or the search got no answer / did not finish within **Maximum wait**. Example: 20 jobs asked, 20 returned, all already delivered yesterday → 2 pages × $0.0018 = $0.0036. `RUN_SUMMARY` → `problems` names each search and how many pages were charged. Tip: a lower **Maximum jobs per search term** in monitoring runs keeps this fee small.

**Do you include the full job description?**
No. Google Jobs result lists do not include the full description, qualifications, benefits, GPS coordinates or logos. Use `applyUrl` to open the original posting.

**How do I control my budget?**
Set **Maximum cost per run** in the run options. The Actor only starts the searches your limit can pay for and stops delivering exactly at the limit. At $2.10 per 1,000 jobs, a $1 limit gets about 476 jobs (a little less when some searches pay result page fees). Apify platform usage (compute) is not included in the limit's event fees and is billed separately by Apify: at the default 256 MB a small run typically uses about $0.001 to $0.005; long economy runs that wait for results use more.

**How do I get only new jobs every day?**
Turn on **Only new jobs since the last run** and create an Apify Schedule (Console → Schedules). Each run delivers and charges only jobs that earlier runs of the same search have not delivered (plus $0.0018 per result page for searches with fewer new jobs than pages fetched). See "Only new jobs (monitoring mode)" above.

**Which export formats are supported?**
JSON, CSV, Excel, XML, HTML table and RSS from the dataset page or the API, plus direct export to Google Sheets and other tools via integrations.

**Can I search a specific city, or several cities and countries in one run?**
Yes. For one city, put it in **City or region** (e.g. `Austin, Texas` or `London, United Kingdom`); for exact control use **Exact location name** or **Location code** in the advanced section. For several, list them in **Several locations** (e.g. `Austin, Texas`, `Denver, Colorado`, `Germany`). Each search term runs in each location, so 5 terms × 10 cities = 50 searches, and every row has `searchLocation` and `searchCountry`. You pay per delivered job as usual; with **Remove duplicate jobs** on, a job found in two nearby cities is delivered and charged once.

**Why is the salary currency sometimes guessed?**
Google often shows salaries without a currency sign (e.g. "116K–150K a year"). In that case `salaryCurrency` is the local currency of the searched country. The original text is always in `salary`.

**Something is not working. How do I get support?**
Open an issue in the Actor's **Issues** tab with your run ID. We read every issue and reply there. Feature requests are welcome too.
