Google Jobs Scraper
Pricing
from $0.42 / 1,000 google jobs listing saveds
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
Maintained by CommunityActor stats
0
Bookmarked
28
Total users
7
Monthly active users
16 hours ago
Last modified
Categories
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?
| Field | Description |
|---|---|
query | Search phrase that produced the listing |
title | Job title |
company | Employer name when visible |
location | Job location or remote/hybrid text |
source | Publisher shown by Google Jobs |
postedAt | Visible posted-date or freshness label |
descriptionSnippet | Public snippet from the job card/detail panel |
salary | Salary text when Google displays it |
employmentType | Full-time, part-time, contract, internship, or similar label |
jobUrl | First normalized job/application URL |
applyLinks | All visible application links collected from the listing |
scrapedAt | Timestamp 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
- Add one or more job search queries.
- Enter a location such as
New York, NY,London, orRemote. - Set a small
maxItemsvalue for your first test. - Run the actor.
- 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 key | Label | Description |
|---|---|---|
acquisitionMode | Acquisition mode | auto (default), provider, or browser; see routing below. |
queries | Job search queries | One or more job phrases to search. |
location | Location | City, region, country, or remote-work phrase appended to each query. |
country | Country / Google market | Two-letter country code for Google market and proxy geotargeting. |
language | Language | Language code for visible labels. |
maxItems | Maximum jobs | Maximum number of listings to save across all queries. |
datePosted | Date posted | Optional visible Google Jobs date filter. |
employmentType | Employment type | Optional visible Google Jobs employment-type filter. |
useProxy | Use Apify Proxy | false always selects direct browser access. true permits Auto provider acquisition; on the browser route it enables Apify Proxy. |
proxyGroups | Proxy groups | Default 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 engineerregistered nursewarehouse managerproduct marketing manager
Location
Use the same style you would type into Google Jobs. Examples:
Austin, TXBerlin, GermanyRemoteUnited 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
maxItems10–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 ApifyClientimport osclient = 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().itemsprint(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.
Related scrapers
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.