Google Jobs Scraper avatar

Google Jobs Scraper

Pricing

from $0.42 / 1,000 google jobs listing saveds

Go to Apify Store
Google Jobs Scraper

Google Jobs Scraper

Extract public Google Jobs listings by query and location. Export titles, companies, locations, source sites, dates, snippets, salaries, and apply links.

Pricing

from $0.42 / 1,000 google jobs listing saveds

Rating

0.0

(0)

Developer

Fetch Cat

Fetch Cat

Maintained by Community

Actor stats

0

Bookmarked

28

Total users

7

Monthly active users

16 hours ago

Last modified

Share

Find public job listings from Google Jobs by keyword and location, then export clean rows to Apify datasets, CSV, JSON, Excel, Google Sheets, or your own API workflow.

What does Google Jobs Scraper do?

Google Jobs Scraper searches the public Google Jobs experience for the job phrases and locations you provide. It returns structured job listing records with the title, company, location, source, posted date, salary text when visible, employment type, description snippet, and application links.

Use it when you need repeatable job-market data without manually opening Google, copying cards, and cleaning spreadsheets.

Who is it for?

  • 🧑‍💼 Recruiters tracking hiring demand across cities or job families.
  • 📈 Labor-market analysts monitoring public job-posting trends.
  • 🧲 Sales teams building account lists from companies that are actively hiring.
  • 📰 Job-board operators checking what roles are visible for target searches.
  • 🧪 Researchers collecting public job snippets for market studies.

Why use this actor?

Google Jobs is a useful discovery layer because it aggregates public job listings from many sites. This actor helps you turn that search surface into structured data with consistent field names.

What data can I extract?

FieldDescription
querySearch phrase that produced the listing
titleJob title
companyEmployer name when visible
locationJob location or remote/hybrid text
sourcePublisher shown by Google Jobs
postedAtVisible posted-date or freshness label
descriptionSnippetPublic snippet from the job card/detail panel
salarySalary text when Google displays it
employmentTypeFull-time, part-time, contract, internship, or similar label
jobUrlFirst normalized job/application URL
applyLinksAll visible application links collected from the listing
scrapedAtTimestamp when the row was saved

Pricing

This Actor uses Apify pay-per-event pricing:

  • start: a one-time charge when a run starts.
  • item: charged per Google Jobs listing saved to the dataset. Runs whose original pricing contains only start and saved-listing events keep those charges only. If the approved search-page pricing applies to the original run, provider acquisition also charges one base page per query, including empty or failed queries, plus additional pages of up to ten valid returned listings. Unavailable requested pages are not charged. The run budget limits eligible depth before acquisition; item charges still apply only to saved listings. Before charging start, cloud runs verify the original pricing record against the Actor's full pricing history and SDK prices. Unsupported or inconsistent terms are rejected without acquiring jobs or adding a start charge. Pending prices and the calendar do not reprice an already-started run. Additional provider tasks must fit a bounded operating allowance; insufficient allowance fails explicitly before another task rather than silently truncating output. Recovery journals must match the original run, pricing and capacity; unbound or ambiguous history requires reconciliation rather than automatic resubmission or rebilling.

See the live Pricing tab for current rates and discounts available to your account. Apify may also charge platform usage for compute, storage, proxies, or data transfer. Check your run details for the final cost.

Quick start

  1. Add one or more job search queries.
  2. Enter a location such as New York, NY, London, or Remote.
  3. Set a small maxItems value for your first test.
  4. Run the actor.
  5. Open the dataset and export the results.

Input example

{
"queries": ["software engineer", "data analyst"],
"location": "New York, NY",
"country": "US",
"language": "en",
"maxItems": 20,
"datePosted": "any",
"employmentType": "any",
"useProxy": true,
"proxyGroups": ["RESIDENTIAL"]
}

Input fields

JSON keyLabelDescription
acquisitionModeAcquisition modeauto (default), provider, or browser; see routing below.
queriesJob search queriesOne or more job phrases to search.
locationLocationCity, region, country, or remote-work phrase appended to each query.
countryCountry / Google marketTwo-letter country code for Google market and proxy geotargeting.
languageLanguageLanguage code for visible labels.
maxItemsMaximum jobsMaximum number of listings to save across all queries.
datePostedDate postedOptional visible Google Jobs date filter.
employmentTypeEmployment typeOptional visible Google Jobs employment-type filter.
useProxyUse Apify Proxyfalse always selects direct browser access. true permits Auto provider acquisition; on the browser route it enables Apify Proxy.
proxyGroupsProxy groupsDefault RESIDENTIAL permits Auto provider acquisition. Custom selections always retain the browser route and chosen groups.

Acquisition routing

auto uses DataForSEO's provider-managed Google Jobs acquisition for English searches in New York/US, US-wide searches with an empty location, and London/GB, when datePosted is any, maxItems is at most 20, and proxy settings are the defaults. The provider retrieves coherent listing depth for the unchanged query; this is not ordinary Google Search or repeated first-page slicing. It uses its own acquisition network, not Apify Proxy, and does not expose its internal paging/session requests.

Provider acquisition remains limited to 20 jobs, including runs with approved active search-page pricing. Larger accepted limits retain browser acquisition in Auto; forced provider mode rejects them before charging start. The experimental 21–40 provider expansion is source-disabled pending separate qualification. Active fees, pending prices, input flags and environment variables do not enable expansion. No requested limit is silently truncated to 20.

In Auto mode, explicit useProxy: false, custom proxy groups, unsupported markets/languages/filters, and all limits above 20 retain the unchanged browser route, without truncating the requested limit. You can force browser. Forced provider rejects incompatible settings before the start charge instead of overriding them. Browser reliability and costs are unchanged by the provider repair.

The available provider route up to 20 uses normal priority and a 2.1 MB decoded-response bound with separate aggregate transfer limits. Fast-priority acquisition and larger response bounds belong only to the disabled expansion study, not an available input mode. Each run shares an acquisition window across queries, including submission, polling and detail retrieval. Current-priced runs can use 45–90 seconds only when their actual memory and elapsed runtime leave enough start-fee funding for the extra wait, with all parsing, storage, transfer and shutdown reserves retained. Runs with active search-page pricing retain the 45-second window. Earlier parsing/output also consumes wall time before a later query can start. Queue latency varies. Expired queries fail before another base charge or task submission, and pending task identities are retained for reconciliation, never blindly reposted or upgraded. Oversized responses fail explicitly instead of silently dropping details. Multiple empty or low-output queries may exhaust the operating allowance and fail before another task. No invented saved-job income is used to fund a failed search.

Listing parsing omits unused script/style text only when its HTML context is unambiguous. Listing templates, metadata and per-job associations are retained; uncertain HTML uses the original full-document parser. This optimization does not change result limits or charge events.

Browser acquisition is retained for compatibility but Google can still reject it; no direct-access success or universal filter/market coverage is promised. The exact useProxy: false example is not equivalent to the prefilled provider route.

Job search queries

Add the job phrases you want to search. Examples:

  • software engineer
  • registered nurse
  • warehouse manager
  • product marketing manager

Location

Use the same style you would type into Google Jobs. Examples:

  • Austin, TX
  • Berlin, Germany
  • Remote
  • United Kingdom

Country and language

Country controls the Google market and proxy geotargeting. Language controls visible labels where Google supports it.

Maximum jobs

Use a low number for testing. Increase it once your query returns the expected kind of listings.

Optional filters

Provider acquisition maps employment filters to the Jobs service's supported values. A non-any date filter selects browser acquisition; no unsupported date parameter is sent and missing timestamps are not invented. Browser acquisition attempts visible filter chips, whose availability varies by country, language and Google layout.

Output example

{
"query": "software engineer",
"title": "Software Engineer",
"company": "Example Company",
"location": "New York, NY",
"source": "LinkedIn",
"postedAt": "3 days ago",
"descriptionSnippet": "Build and maintain production services...",
"salary": "$120K–$160K a year",
"employmentType": "Full-time",
"jobUrl": "https://example.com/jobs/123",
"applyLinks": [
{ "label": "Apply on LinkedIn", "url": "https://example.com/jobs/123" }
],
"scrapedAt": "2026-06-29T08:00:00.000Z"
}

Optional provider enrichment

Provider rows also expose jobId (the original Google Jobs ID), companyLogoUrl (an HTTP(S) employer image when supplied), sourceUrl (the provider's source-board URL, distinct from the enriched application URL), and sourceRank (a positive one-based rank within that query's provider results). These reuse the fetched payload without extra requests. Missing or invalid optional values are omitted; browser rows do not invent them. Rank is not a cross-query score, and a logo is not a company website. Existing fields, deduplication and saved-item billing are unchanged.

Tips for better results

  • 🎯 Use specific job titles instead of very broad terms.
  • 🗺️ Include a clear location for local hiring searches.
  • 🔁 Run multiple focused queries instead of one huge vague query.
  • 🧪 Start with maxItems 10–20 before scaling.
  • 🌐 Use Auto with the default proxy settings for validated provider routes; direct/custom proxy choices retain browser acquisition.

Common use cases

Recruiting market maps

Track how many public jobs appear for target roles across several cities.

Sales prospecting

Find companies hiring for technologies or departments that match your product.

Job board monitoring

Compare job visibility for your niche across Google Jobs searches.

Labor-market research

Collect snapshots of public listing text for recurring demand analysis.

Integrations

You can connect the dataset to:

  • Google Sheets for lightweight monitoring.
  • Make or Zapier for alerts when new listings appear.
  • A CRM enrichment workflow for hiring-signal prospecting.
  • A data warehouse for longer-term job-market trend analysis.
  • Apify webhooks for post-run automation.

API usage

The examples below show Node.js, Python, and cURL ways to run the actor.

API usage with Node.js

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('fetch_cat/google-jobs-scraper').call({
queries: ['software engineer'],
location: 'New York, NY',
maxItems: 20,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);

API usage with Python

from apify_client import ApifyClient
import os
client = ApifyClient(os.environ['APIFY_TOKEN'])
run = client.actor('fetch_cat/google-jobs-scraper').call(run_input={
'queries': ['software engineer'],
'location': 'New York, NY',
'maxItems': 20,
})
items = client.dataset(run['defaultDatasetId']).list_items().items
print(items)

API usage with cURL

curl -X POST "https://api.apify.com/v2/acts/fetch_cat~google-jobs-scraper/runs?token=$APIFY_TOKEN" \
-H 'Content-Type: application/json' \
-d '{"queries":["software engineer"],"location":"New York, NY","maxItems":20}'

MCP usage

Use the Apify MCP server to run this actor from Claude Code, Claude Desktop, or another MCP-compatible agent.

MCP URL pattern:

https://mcp.apify.com/?tools=fetch_cat/google-jobs-scraper

Add it in Claude Code:

$claude mcp add apify-google-jobs "https://mcp.apify.com/?tools=fetch_cat/google-jobs-scraper"

Claude Desktop JSON config example:

{
"mcpServers": {
"apify-google-jobs": {
"url": "https://mcp.apify.com/?tools=fetch_cat/google-jobs-scraper"
}
}
}

Example prompts:

  • “Run Google Jobs Scraper for data analyst jobs in Chicago and summarize the companies.”
  • “Find 20 remote product manager roles and export the dataset fields.”
  • “Compare software engineer listings in Austin and Denver.”

Scheduling

Schedule recurring runs to monitor the same query weekly or daily. Keep maxItems aligned with how many rows you need for each snapshot.

Data freshness

Google Jobs results change frequently. Each run captures the public results visible during that run. Use scrapedAt to separate snapshots.

Limits and caveats

Google may vary the visible layout by country, language, query, and traffic conditions. Some listings may not show salary, employment type, or direct application links. Fields that are not visible are returned as null or an empty list.

Proxy guidance

On Auto's validated provider routes, acquisition uses the provider's own network and no Apify Proxy. Explicit direct access and custom Apify Proxy groups are never silently replaced by that route. On browser acquisition, each query starts with your selected groups. If a RESIDENTIAL navigation is rate-limited, bootstrap-blocked or exhausts bounded loading attempts, it may recover once through Apify UNBLOCKER in the same country. Other groups retain their selection. Browser recovery can add metered proxy usage. Direct runs do not use proxy recovery. Keep requests small: Google can reject browser acquisition regardless of proxy selection.

FAQ

Can I use this actor as a Google Jobs API?

Yes. Run it through the Apify API, SDKs, webhooks, or MCP server and export the resulting dataset as JSON, CSV, Excel, or through an integration.

Does it require a Google account?

No. The actor is designed for public Google Jobs results and does not need your Google login.

Can I schedule recurring monitoring?

Yes. Use Apify schedules to run the same query and location daily or weekly, then compare rows by title, company, location, and scrapedAt.

Troubleshooting

Why did my run return fewer jobs than requested?

Google may show fewer public jobs for a query/location combination, or the page may expose fewer unique listings than your limit. Try a broader query or a different location.

Why are salary or employment type missing?

Those fields are only returned when Google displays them publicly for the listing.

Why did Google block the run?

Reduce request volume, keep proxy enabled, and try a smaller batch. Google anti-bot behavior can vary by region and time. When proxy is enabled, the Actor can recover a rate-limited, bootstrap-blocked or exhausted navigation once; RESIDENTIAL recovery uses Apify UNBLOCKER, which selects a new connection without sticky sessions. Other supported proxy groups use a fresh session. The requested country remains explicit. A repeated rejection or zero useful results is reported as a failure, not an empty successful result. Direct runs with useProxy: false do not rotate sessions.

Legality and responsible use

This actor is intended for public job-listing information. Make sure your use case complies with applicable laws, platform terms, privacy rules, and internal policies. Do not use extracted data for spam, discrimination, or prohibited employment decisions.

You may also use these actors from the same account for recruiting and search workflows:

Version notes

v0.1 focuses on public Google Jobs listing rows by query and location. Future versions may add stronger filter coverage, richer detail extraction, and additional output normalization after reliability testing.

Support

If a run fails or a query returns unexpected data, share enough detail to reproduce it:

  • the Apify run URL,
  • the exact input JSON,
  • the expected output,
  • the actual output you received,
  • and a reproducible public URL or Google Jobs query/location example.

Field glossary

source is the site label shown by Google Jobs, often a job board or employer career site. applyLinks contains visible outbound links associated with a listing. descriptionSnippet is not guaranteed to be the full job description.

Best practices

Run targeted searches, deduplicate downstream by title/company/location, and store recurring snapshots if you need trends over time.

Export formats

Apify datasets can be exported as JSON, CSV, Excel, XML, RSS, and HTML table views from the run page or API.

Automation patterns

  • Daily alert for new remote jobs matching a niche keyword.
  • Weekly city-by-city hiring report.
  • CRM enrichment based on companies hiring for target roles.
  • Competitive hiring watch for specific job families.

Privacy note

The actor does not require your Google account and does not scrape private account-only data.

Final checklist for users

  • Choose focused queries.
  • Set a clear location.
  • Keep the first run small.
  • Review the dataset sample.
  • Scale gradually.

Privacy and data handling

This Actor only requests the permissions needed to run the input you provide. It uses your input (such as URLs, search terms, identifiers, filters, and limits) only to fetch the requested public data from the relevant source site or API for this Actor, then writes results to your Apify dataset/key-value store.

Data may pass through Apify platform services and, on browser acquisition, Apify Proxy. On provider acquisition, public keywords, location, language and employment filters are sent to DataForSEO, which processes and retains task results under its own terms; result retrieval is available for seven days, which is not a deletion guarantee. Do not include private or sensitive information in search phrases. FetchCat does not send your inputs or outputs to advertising networks or model-training services. Provider task state and aggregate reported provider costs are stored in your run's key-value store to support bounded recovery; provider credentials are never user input or output.

You are responsible for using this Actor lawfully, respecting the target site's terms, and avoiding unnecessary personal or sensitive data in inputs. Review the output before storing, sharing, or combining it with other data.