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

29

Total users

5

Monthly active users

4 days ago

Last modified

Security

Limited permissions

Share

Search public Google Jobs listings by keyword and location, then export job titles, companies, available salary text and application links to CSV, Excel or JSON. Google Jobs Scraper helps you build hiring snapshots without copying listing cards by hand. It returns available listing data, not a complete census of vacancies or guaranteed full job descriptions.

Version scope: India small mode is included in 0.1.47 and later builds containing that functionality. If your selected build is older, choose india-preview while testing. It is not included in 0.1.41. Check the selected run build before using the India recipe. Other supported searches and explicit acquisition choices remain available.

Quick start

  1. Enter one focused phrase in queries and an explicit location.
  2. Start with a small limit and the default settings. The example below uses a supported English US search.
  3. Run the Actor, check its status and open the dataset to inspect and export the rows.
{
"queries": ["software engineer"],
"location": "New York, NY",
"country": "US",
"language": "en",
"maxItems": 20
}

Prefer a video guide? This short Apify walkthrough shows you how to set up and run an Actor. It uses a different Actor, but the setup steps are the same.

What you get

  • Listing snapshots: job title, available employer, location and listing source.
  • Useful context: available salary text, employment labels, freshness text and description snippets.
  • Next-step links: available job URLs and labeled application links.
  • Reusable records: the search phrase and extraction timestamp alongside each listing. Some results also include the original job ID, source-board URL, company logo or position within that query's results.

Missing fields stay empty rather than being inferred. Application links and descriptions are optional.

Who is it for?

  • Recruiters researching employers hiring for a role in a particular city.
  • Job-market analysts collecting dated listing snapshots for their own comparisons.
  • Job-board builders who need available listing and application URLs for a downstream workflow.

Comparison, alerts and deduplication across separate runs belong in your own workflow. Listing counts are not a measure of all available jobs.

Input settings

JSON keySettingPurpose
queriesJob search queriesRequired list of phrases. Blank phrases are removed and duplicates searched once.
locationLocationCity, region or country. Specify it explicitly.
countryCountry / Google marketTwo-letter market code, default US.
languageLanguageResult language, default en.
maxItemsMaximum jobsTotal requested limit, default 20. Accepted range 1–1000, with mode-specific limits below.
datePostedDate postedOptional filter. Availability depends on the acquisition mode.
employmentTypeEmployment typeOptional full-time, part-time, contractor or internship filter.
acquisitionModeAcquisition modeauto by default, or explicit provider, browser and india-preview small mode.
useProxyUse Apify ProxyExisting connection choice. See field help for mode effects and usage.
proxyGroupsProxy groupsExisting managed group selection. See field help before changing it.

English searches in any Google Jobs market use provider acquisition for up to 20 jobs: set country to the two-letter market code and location to a city, region or country, for example "location": "Dresden" with "country": "DE", or "location": "Austin, TX" with "country": "US". If a place name is ambiguous or unknown, the whole country is searched for jobs mentioning that place. An empty location searches the whole country. Put the place in location, not in the search text: a search such as "marketing jobs in Germany" with location New York usually has no listings. The input form defaults location to New York. API input that omits location uses an empty location, so specify it for consistent results across clients. English searches with no date or employment filter, Auto/Provider acquisition and the default residential proxy settings (outside India) use the small-search memory allocation for all limits from 1 to 20. Explicit run memory overrides still apply.

Provider markets also include top-level regions such as Hong Kong (HK), Taiwan (TW), Puerto Rico (PR), Macao (MO) and Kosovo (XK). UK is accepted as an alias for GB.

Explicit Browser first uses the selected browser connection. English searches of up to 20 jobs with Any date/employment filters and default RESIDENTIAL settings may fall back to provider acquisition after zero saved rows, blocking or a failed main document (HTTP 429/502), without trying Unblocker. Any saved browser rows prevent fallback. Direct access, custom proxy groups, filters, other languages and larger limits remain browser-only. Rescue has no search-page fee and no second start charge. It uses one fixed 60-second provider window, only where remaining item capacity can cover provider pages and start income covers forward processing costs; it does not erase costs of the browser attempt. A skipped rescue is explained in the run status.

If Google Jobs has no listings for a search, the run finishes successfully with an empty dataset and a status message. Other language and filter settings use browser acquisition, where access and filter availability vary. Larger limits also select browser acquisition in Auto. Forced Provider rejects incompatible inputs rather than silently reducing the requested limit. There is no sorting input.

India small mode (0.1.47 and later)

Use a build containing India small mode, available from 0.1.47. If your selected build is older, choose india-preview as the run build while testing. For an ordinary Auto search, use country IN, language en, an explicit location and Any date/employment filters. Keep the existing enabled connection defaults. You do not need to select an acquisition mode or proxy group manually.

{
"queries": ["software engineer"],
"location": "Bengaluru",
"country": "IN",
"language": "en",
"maxItems": 10
}

This mode processes only the first query and returns up to 10 jobs in total, even if you supply several queries or request more. It does not continue to later queries when the first returns fewer jobs or no matches. The RUN-SUMMARY record in the run's key-value store reports actual output, effective limits, unprocessed searches and the stopping reason.

Descriptions are previews or unavailable. descriptionCoverage reports preview or unavailable. Salary, posted date and employment type can be null. Full descriptions and deeper India extraction are not supported claims. Explicit Browser/Provider choices, direct opt-outs and other selected managed groups retain their existing behavior. Other languages or non-Any filters do not use India small mode. Detailed conditions and the explicit india-preview acquisition-mode recipe are in the input help.

Output data

Each dataset item describes one job listing. This illustrative shape-only example is not an observed job:

{
"query": "software engineer",
"title": "Example role",
"company": null,
"location": null,
"source": null,
"postedAt": null,
"descriptionSnippet": null,
"salary": null,
"employmentType": null,
"jobUrl": null,
"applyLinks": [],
"scrapedAt": "2026-10-27T00:00:00.000Z"
}
FieldMeaning
query, titleSearch phrase and job title.
company, location, sourceAvailable employer, job location and listing-site label.
postedAtVisible freshness text, not a guaranteed normalized date.
salary, employmentTypeAvailable salary text and employment label.
descriptionSnippetAvailable listing text, not necessarily a full description.
jobUrl, applyLinksAvailable job URL and labeled application links.
scrapedAtUTC extraction timestamp for the row.
jobIdOriginal Google Jobs identity when available.
companyLogoUrl, sourceUrlOptional employer image and source-board URLs.
sourceRankOptional one-based position within a query's provider results, not a score across queries.
descriptionCoverageIndia small-mode description status, preview or unavailable.

Core unavailable fields can be null. Application links can be empty. Optional mode-specific fields are omitted when unavailable. Rows already saved remain accessible if a later search fails, so inspect both the run status and its dataset.

Download your results

Open your run's dataset, choose Export and select JSON, CSV or Excel. JSON keeps nested fields together. CSV and Excel are useful when you want to review the records in a spreadsheet.

See Apify's download and export guide for the available formats and field options.

Pricing

The start event is a one-time run-start charge after input and pricing checks. The item event charges for each listing saved to the dataset.

When the search-page terms shown for a run apply, search-page covers a base provider search page per query, including an empty or failed query, and additional pages of up to ten valid returned listings. Unavailable requested pages are not charged. Explicit Browser mode has no search-page fee, including its eligible provider rescue. Auto/Provider uses the run's active search-page terms; new searches use the faster queue with funded acquisition windows of up to 180 seconds per query, capped by the run timeout with output/shutdown time kept separate. Faster priority does not guarantee completion within that limit. Runs pinned to historical start and item terms retain those terms.

See the live Pricing tab for current rates and discounts.

Charges already incurred can remain on a failed run. Set a small maxItems and an Apify run budget. A budget or acquisition limit can stop a run before all queries finish.

Tips for best results

  • Start with one focused query. Check the returned titles, locations and available links before expanding your search.
  • Set location explicitly. This avoids differences between form defaults and omitted API input.
  • Choose a realistic limit. Provider searches support up to 20 jobs. India small mode (0.1.47 and later builds containing it) supports up to 10 from the first query only.
  • Keep missing values visible. Do not treat absent salary text or application links as evidence that a job lacks them elsewhere.
  • Keep separate dated datasets. Use query and scrapedAt when comparing snapshots in your own analysis.

Limits and caveats

Google may return fewer unique listings than requested, omit fields, change its layout or reject access. Browser acquisition is not guaranteed to recover a blocked search. Date and employment filters depend on the chosen mode and visible controls.

A provider-confirmed no-listings response succeeds empty with a status message. Browser-only zero-output searches can still fail; eligible Browser searches can use the bounded rescue described above. A skipped rescue because of remaining limits is not proof that there are no listings. India small mode succeeds empty for an explicit no-matches response. Blocking, unexpected responses, storage/billing errors and extraction defects are not treated as confirmed no matches. Empty output alone is not proof that a search worked.

Only public listings are targeted. No Google login is required. This is an independent scraper, not Google's official Jobs API. Search phrases and public search settings can be processed by an external jobs-data provider, so do not put sensitive information in queries.

Automation and integrations

Save your settings for next time

Once you have an input that works for you, save it as an Apify task. This keeps your settings together so you can use them again without filling in the form from scratch.

Run on a schedule

Need fresh results regularly? You can schedule the Actor or a saved task to run at a time that suits you.

Each scheduled run collects the data again. If you want to compare results or highlight changes, add that step in your own workflow.

Send results to your other tools

Use n8n, Make or Zapier to connect this scraper to the rest of your workflow. For example, you could pass its results to an AI assistant or add records to a spreadsheet. Follow the Apify integration guides for your chosen tool.

For a custom connection, an Apify webhook can notify your app when a run finishes or fails. Your app can then fetch the results or handle the failure.

API usage

Want to collect this data from your own app or automation? The examples below send input to the scraper and show how to collect its results.

The Node.js and Python examples wait for the run to finish before reading its results. The cURL example starts the run and returns its details. Wait for that run to finish, then use its defaultDatasetId to fetch the results.

For setup instructions, see Apify's JavaScript client guide, Python client guide and Actor runs API reference.

These examples use the default build and a bounded US search. For the India recipe, check that your selected build contains India small mode (0.1.47 and later). If it is older, select the india-preview run build using the run options documented by your client.

cURL

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

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',
country: 'US', language: 'en', maxItems: 20
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(run.status, items);

Python

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

MCP and AI agents

You can ask your AI assistant to collect data with Google Jobs Scraper and help you work with the results. The scraper returns the data, and your assistant can then summarize it, compare records or prepare notes.

Connect your assistant through the Apify MCP server. MCP gives your assistant a way to find this scraper, run it and read the results. Follow the official setup and sign-in guide for your app.

Easier setup with an Apify plugin

If you use a supported coding assistant, the official Apify plugin can set up the connection for you. It connects your assistant to Apify and includes instructions for common tasks. Follow the guide for your particular app.

Use Apify AI in Console

Prefer to keep everything in Apify? Open Apify AI in Console and ask it to find Fetch Cat's Google Jobs Scraper. You can describe the data you want and ask questions about the results.

Apify AI is currently in beta. It asks for confirmation before starting an Actor, and normal run charges apply.

Choose your assistant

Connect just this scraper

To keep your setup focused on this scraper, add this server configuration to a compatible MCP client:

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

Sign in to Apify when your client asks. If your client uses a Bearer token instead, follow its setup guide and keep the token in its secure configuration. Configuration formats vary by app, so use the linked guide if your client needs a different format.

Use Apify's general server

Already connected to the general Apify MCP server at https://mcp.apify.com? You can use it to find this scraper without adding another server. Ask your assistant to use Google Jobs Scraper by Fetch Cat, or give it the identifier fetch_cat/google-jobs-scraper.

Your assistant can check the available settings and retrieve the results from the returned run. If the run is still working, it should follow that run rather than start it again. Both connection options use Apify's hosted service.

Example requests

  • “Find up to 20 software engineer jobs in New York and list the available employers and application links.”
  • “Get up to 10 data analyst jobs in London and summarize the salary text where it is available.”
  • “Collect up to 20 product manager listings across the United States and prepare a table of titles, companies and locations.”

Normal Apify charges apply. Check the live Pricing tab before asking your assistant to run a larger batch. These requests use supported US/GB searches, not India small mode. Hosted discovery and execution depend on the client's current tools and permissions.

Pay with x402

If your AI agent has a funded wallet, it can pay for Apify usage through x402. This experimental option lets an agent use Apify without a conventional account.

Apify AGI provides a prepaid API token with a spending cap after payment. Your agent can use that token to run this limited-permission scraper through the Apify API or an authenticated MCP connection.

Some MCP setups also support paying for each request directly. That is a different payment option with its own eligibility requirements, so check the official guide for its availability. Direct per-request payment has not been verified for this Actor.

Follow the official guide for wallet setup, supported payment options and current terms. Apify handles the payments. Keep wallet keys and payment tokens in your agent's secure configuration.

Other ways for agents to pay

Apify also supports MPP for prepaid access through AGI and Skyfire for eligible Actors. If your agent already uses one of these, see the agentic payment guide to choose the right setup.

FAQ

Can I use this as a Google Jobs API?

Yes, through the Apify API and client libraries above. It is an independent scraper, not an official Google API. You can also export the dataset to CSV, Excel or JSON.

Does it include full job descriptions?

No full-description guarantee is made. Listings can supply snippets or no description. India small mode explicitly labels descriptions as preview or unavailable.

These depend on the listing and source. Missing information is not inferred. Freshness can be relative text rather than a calendar date.

Why did India small mode process only one query?

India small mode intentionally processes the first query and saves at most 10 jobs globally. A larger requested limit does not expand it. Check RUN-SUMMARY for actual counts and unprocessed searches. This mode is included in 0.1.47 and later builds containing that functionality, not in 0.1.41.

Inspect the run status and dataset. Saved rows can remain available after a later failure. Access is not guaranteed, and changing filters or connection settings can change which mode applies. Read the input help rather than assuming a fallback will recover every search.

Which alternative should I use for an employer's own job board?

Use the relevant Ashby, Lever or Greenhouse scraper below when you want that employer-hosted source rather than a Google Jobs snapshot.

Support and feedback

For custom additions or integrations, email hello@fetchcat.dev.

Found an error or have a feature request? Open an issue with the run URL, a non-sensitive input example and what you expected.

Need help sharing it? See Apify’s guide to sharing a run when reporting an issue. Sharing a run can give the developer access to its input, logs and results, so use a run that contains no sensitive data. Please leave out API tokens, passwords, cookies, private documents and personal data. Use a public sample URL or a redacted example instead.

Tried this scraper? We'd love to hear how it worked for you. Leave a review from the Actor page to help others choose the right tool and help us improve it. Your feedback means a lot to us.

Made with care for curious people, AI agents and the possibilities in data. ♥