Google Local MCP server
Registry name: io.github.johnisanerd/google-local. Maintained by AlphaOSINT (Apify developer johnvc, GitHub johnisanerd).
What it does
Search local businesses for a query and place and get name, rating, review count, phone, hours, address, place ID and coordinates.
Returns the ranked local results Google shows for a search, with country, language and device targeting. Use it for local SEO rank checks and building business lists for an area.
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-local-api 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 |
|---|---|---|
| Setup | $0.002 | One-time setup fee per Actor run. Covers instance provisioning, memory allocation, and search session initialization. |
| Pages Processed | $0.02 | Fee per page of Google Local search results processed. Returns the local pack businesses with rating, reviews, address, phone, hours, GPS, place_id, and links for that page. |
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 Search local results (the local pack), 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-local-api - Auth: Apify OAuth, or
Authorization: Bearer <APIFY_TOKEN>
Setup
Claude Code
claude mcp add --transport http google-local "https://mcp.apify.com/?tools=johnvc/google-local-api"
VS Code (.vscode/mcp.json)
{
"servers": {
"google-local": {
"type": "http",
"url": "https://mcp.apify.com/?tools=johnvc/google-local-api"
}
}
}
Cursor (~/.cursor/mcp.json)
{
"mcpServers": {
"google-local": {
"url": "https://mcp.apify.com/?tools=johnvc/google-local-api"
}
}
}
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-local": {
"command": "npx",
"args": [
"-y",
"mcp-remote",
"https://mcp.apify.com/?tools=johnvc/google-local-api"
]
}
}
}
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-local-api |
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-local-api
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
q |
string | yes | "coffee" |
The Google Local search query. Examples: ‘coffee’, ‘dentists near me’, ‘plumbers in Brooklyn’, ‘best pizza’. Combine with the ‘location’ field for city-level targeting. Any term valid in Google Local search is accepted. |
location |
string | "Austin, Texas, United States" |
City-level location (e.g., ‘Austin, Texas, United States’, ‘London’, ‘Brooklyn, New York’). Optional but recommended. Cannot be combined with ‘uule’. If both are omitted, results use the API’s default origin. | |
uule |
string | Advanced: Google-encoded location string for precise geographic targeting. Use instead of ‘location’ for fine-grained control. Cannot be combined with ‘location’. | ||
google_domain |
string | "google.com" |
Which Google domain to query (e.g., ‘google.com’, ‘google.co.uk’, ‘google.fr’, ‘google.de’). Defaults to ‘google.com’. Use the regional domain for localized result formatting. | |
gl |
string | "us" |
Two-letter country code (ISO 3166-1 alpha-2, e.g., ‘us’, ‘uk’, ‘fr’, ‘de’, ‘jp’). Localizes search results to that country. Defaults to ‘us’. | |
hl |
string | "en" |
Two-letter language code (ISO 639-1, e.g., ‘en’, ‘es’, ‘fr’, ‘de’, ‘ja’). Sets the language for the interface and result content. Defaults to ‘en’. | |
ludocid |
string | Advanced: Google customer identifier (CID) for a specific place. When provided, narrows results around that single business. | ||
tbs |
string | Advanced: Google search filter string for criteria not exposed elsewhere. See Google’s filter documentation for valid syntax. | ||
device |
string: desktop, tablet, mobile | "desktop" |
Which device to emulate. Affects results-per-page count (desktop returns about 20 per page, mobile about 10) and result formatting. Defaults to ‘desktop’. | |
max_pages |
integer | 1 |
Maximum number of result pages to fetch (1-indexed). Set 0 for unlimited, bounded by a safety cap of 20 pages. Default: 1. Each fetched page is billed separately under pay-per-event. |
Example arguments:
{
"helloWorld": 123
}
Output
The tool returns JSON rows with these fields.
| Field | Type | Description |
|---|---|---|
search_parameters |
object | The complete set of input parameters used for this search, echoed back in each result page for traceability. |
search_metadata |
object | Aggregate statistics about the search run - total results estimate, pages processed, and pagination status. |
search_timestamp |
string | ISO 8601 timestamp of when this search page was executed (e.g., ‘2026-05-12T10:30:00.123456’). |
page_number |
integer | 1-indexed page number this dataset item represents. Each page of results is pushed as a separate dataset item. |
local_results |
array | Local pack businesses on this page. Each item: title, rating, reviews, address, phone, hours, type, price, place_id, gps_coordinates, links, service_options. |
ads_results |
array | Paid local placements (Google Local Ads) on this page. Same business fields as local_results plus ad_title. |
local_map |
object | Embedded local map preview returned by Google. Contains the map image URL when present. |
discover_more_places |
array | Related local search suggestions Google surfaces under the main results (e.g., ‘Best coffee’, ‘Coffee shops nearby’). |
pagination |
object | Pagination state for this page. Contains the current page index. Use the Actor’s max_pages input to fetch additional pages rather than walking links. |
error |
boolean | True when this dataset item represents an error record rather than search results. |
error_message |
string | Human-readable description of the error that occurred, if error is true. |
error_type |
string | Machine-readable error category (e.g., ‘ValidationError’, ‘InsufficientFunds’, ‘SearchError’, ‘ChargeFailed’). |
timestamp |
string | ISO 8601 timestamp of when the error occurred. Only present on error records. |
Links
- Actor on Apify: johnvc/google-local-api
- Data source page on AlphaOSINT: /sources/google-local-api/
- All AlphaOSINT MCP servers: /mcp/