Google Jobs MCP server
Registry name: io.github.johnisanerd/google-jobs. Maintained by AlphaOSINT (Apify developer johnvc, GitHub johnisanerd).
What it does
Search job postings by keyword and location across Google’s 184 country domains and get structured rows with title, company, location, posting age, application links and the full description.
Google Jobs aggregates postings from LinkedIn, Indeed, company career sites and many smaller boards, so one query covers the whole market. Use it for job search agents, hiring-signal research and labor-market analysis.
Paid service on Apify’s hosted endpoint
This server is not self-hosted. It runs on Apify’s hosted MCP endpoint (mcp.apify.com), which starts the Apify Actor johnvc/Google-Jobs-Scraper for each tool call. You need an Apify account, and every call is billed to that account at the Actor’s prices below. Apify’s own pricing and terms apply to the account.
| Charge | Price (USD) | What it covers |
|---|---|---|
| Page Processed (up to 10 jobs) | $0.09 | Fee per page of search results returned (typically 10 job results) |
Prices shown are Apify’s free-plan rates; paid Apify plans get lower per-event prices. Apify also bills a token amount per run start and per stored row ($0.00001, $0.00005). Prices change from time to time; the Actor’s page on Apify shows the current ones.
Data source and terms
Google’s public job search results (the Google Jobs panel), collected by scraping. The server returns the data as published at the time of the call. You are responsible for using it in line with the source’s terms and the laws that apply to you. AlphaOSINT is not affiliated with the source.
Endpoint
- Transport: Streamable HTTP
- URL:
https://mcp.apify.com/?tools=johnvc/Google-Jobs-Scraper - Auth: Apify OAuth, or
Authorization: Bearer <APIFY_TOKEN>
Setup
Claude Code
claude mcp add --transport http google-jobs "https://mcp.apify.com/?tools=johnvc/Google-Jobs-Scraper"
VS Code (.vscode/mcp.json)
{
"servers": {
"google-jobs": {
"type": "http",
"url": "https://mcp.apify.com/?tools=johnvc/Google-Jobs-Scraper"
}
}
}
Cursor (~/.cursor/mcp.json)
{
"mcpServers": {
"google-jobs": {
"url": "https://mcp.apify.com/?tools=johnvc/Google-Jobs-Scraper"
}
}
}
Claude Desktop (Settings → Connectors → Add custom connector, paste the URL). Older versions without remote connectors can bridge through mcp-remote in claude_desktop_config.json:
{
"mcpServers": {
"google-jobs": {
"command": "npx",
"args": [
"-y",
"mcp-remote",
"https://mcp.apify.com/?tools=johnvc/Google-Jobs-Scraper"
]
}
}
}
Each client opens an Apify sign-in (OAuth) on first use. To use a token instead, send Authorization: Bearer <APIFY_TOKEN> as a header; create one under Apify Console → Settings → API & Integrations.
Tools
| Tool | What it does |
|---|---|
johnvc--Google-Jobs-Scraper |
Runs the Actor with the parameters below and returns the result rows. |
get-actor-run |
Status of a run started by the tool, for long runs. |
get-dataset-items |
Pages through a run’s full output by datasetId when it is larger than the inline result. |
get-key-value-store-record |
Reads a record a run stored, such as a run report. |
abort-actor-run |
Stops a run. |
Apify’s endpoint adds the four helper tools automatically whenever an Actor tool is loaded.
Parameters of johnvc--Google-Jobs-Scraper
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
query |
string | yes | "Software Engineer" |
The job search query (e.g., ‘Software Engineer’, ‘Data Scientist’, ‘Marketing Manager’) |
location |
string | "San Francisco, CA" |
Job location (city, state, or country). We recommend specifying a location at the city level for best results. If left empty and a Country Code is selected, the country name is used as the location automatically. If Goo… | |
country |
string: None, dz, as, ai, ag, ar … | "None" |
Country the search targets - this is what drives regional results (Google’s gl parameter), and when Job Location is empty the country’s name is used as the location automatically. If unset, it is derived from the Google… | |
language |
string: None, en, es, fr, de, it … | "None" |
Interface language for the search (Google’s hl parameter). Optional and usually best left unset: Google then uses the language that matches the country, which is required in many non-English markets - explicitly setting… | |
google_domain |
string: google.com, google.co.uk, google.ca, google.de, google.fr, google.com.a… | "google.com" |
Google domain to use for search. Also determines the default country when the Country Code input is unset (e.g. google.de -> de). Domains of countries where Google Jobs is unavailable stop the run with a clear message a… | |
posted_within |
string: any, 24h, 3d, 7d, 30d | "any" |
Only return jobs posted within this window. Great for daily scheduled runs: set ‘Last 24 hours’ to avoid re-collecting listings you already scraped. Default ‘Any time’ applies no date filter (existing runs and tasks are… | |
num_results |
integer | 100 |
Maximum number of job results to return | |
max_pagination |
integer | 0 |
Maximum number of pages to fetch (each page has ~10 results). Set to 0 for unlimited pagination (fetch all available pages). | |
include_lrad |
boolean | false |
Whether to include location radius filtering | |
lrad_value |
string | "5" |
Location radius value in km (e.g., ‘2’, ‘5’, ‘10’). Only used when include_lrad is true. | |
max_delay |
integer | 1 |
Delay between API requests in seconds (to avoid rate limiting) | |
output_file |
string | "google_jobs_results.json" |
Custom filename for saving results. Leave empty for auto-generated filename. |
Example arguments:
{
"helloWorld": 123
}
Output
The tool returns JSON rows with these fields.
| Field | Type | Description |
|---|---|---|
company_name |
string | Name of the company posting the job. |
location |
string | Location of this posting as published by the source (city, state, remote, etc.). Null when the listing carries none. This is the posting’s own location, not the location you searched for - see search_location. |
search_location |
string | The location this run searched, echoed from the input. Null when the run sent no location. |
via |
string | The platform or site where the job was listed (e.g., ‘via LinkedIn’, ‘via Indeed’). |
job_highlights |
array | Structured highlights including Qualifications, Responsibilities, and Benefits sections. |
related_links |
array | Links related to the job or company. |
thumbnail |
string | URL of the company logo thumbnail. |
job_id |
string | Unique Google Jobs identifier for this listing. |
detected_extensions |
object | Structured job metadata extracted by Google: posted_at, schedule_type, health_insurance, dental_coverage, paid_time_off, etc. |
extensions |
array | Raw job metadata tags (e.g., ‘Full-time’, ‘3 days ago’, ‘Health insurance’). |
share_link |
string | Google-generated shareable link for this job listing. |
apply_options |
array | List of platforms where you can apply, each with a title and direct link. |
query |
string | The search query used to find this job. |
country |
string | Country code used for the search (e.g., ‘us’, ‘gb’). |
language |
string | Language code used for the search (e.g., ‘en’). |
google_domain |
string | Google domain used for the search (e.g., ‘google.com’). |
search_timestamp |
string | ISO 8601 timestamp of when the search was performed. |
total_jobs_found |
integer | Total number of job listings found across all pages for this search. |
pages_processed |
integer | Number of result pages fetched during this run. |
Links
- Actor on Apify: johnvc/Google-Jobs-Scraper
- Data source page on AlphaOSINT: /sources/google-jobs-api/
- All AlphaOSINT MCP servers: /mcp/