apify_google_serp_maps $0.01125 per call
Search Google Maps businesses by keyword and location. Scrape Google Maps for businesses matching a keyword in a place — name, address, phone, website, rating, review_count, categories, hours and coordinates, with email and social-profile enrichment from each business site included in the result price (Apify · Google Keyword Data)
For AI agents: call apify_google_serp_maps
POST https://toll402.dev/v1/p/apify.google.serp.maps
{
"searchStringsArray": [
"coffee shop"
],
"locationQuery": "Austin, TX",
"maxCrawledPlacesPerSearch": 1,
"maxCrawledPlaces": 1,
"scrapeContacts": false,
"maxReviews": 0,
"scrapePlaceDetailPage": false,
"skipClosedPlaces": true
}Answers 402 with x402 payment requirements; pay with any x402 client (@x402/fetch, x402 for Python, toll402-client, toll402-mcp) or send a prepaid-credits key as x-toll402-key (https://toll402.dev/credits). Paid per call via x402 (USDC on Base) or with a prepaid-credits key (x-toll402-key, card at /credits); charged only on success. Start at /llms.txt or connect the MCP server:
npx -y toll402-mcp · remote https://toll402.dev/mcp.Input schema
{
"type": "object",
"properties": {
"searchStringsArray": {
"type": "string",
"description": "keywords to search, one per entry (dentist, plumber, coffee shop); each is searched inside locationQuery and every business becomes one row",
"examples": [
[
"coffee shop"
]
]
},
"locationQuery": {
"type": "string",
"description": "where to search, as typed into Google Maps: 'Austin, TX', 'London, UK', or a whole country. Omit to let each term carry its own location",
"examples": [
"Austin, TX"
]
},
"maxCrawledPlacesPerSearch": {
"type": "integer",
"description": "max businesses per search term, 1-500, counted AFTER filters; default 100",
"examples": [
20
]
},
"maxCrawledPlaces": {
"type": "integer",
"description": "total businesses across all terms; 0 = no ceiling. You pay per business returned, so set this to cap the bill",
"examples": [
100
]
},
"language": {
"type": "string",
"description": "result language, e.g. en|es|fr|de|ja|zh-CN|vi; default en",
"examples": [
"en"
]
},
"scrapeContacts": {
"type": "boolean",
"description": "look up each business site for emails and social links (emails, email_type, social_links). Default true — these fields are part of the result price, not an add-on",
"examples": [
true
]
},
"scrapePlaceDetailPage": {
"type": "boolean",
"description": "also open each place's Maps page for hours, price_level, popular_times and any missing phone/site. Default false; makes a run noticeably longer",
"examples": [
false
]
},
"maxReviews": {
"type": "integer",
"description": "reviews to attach per business, 0-500; default 0 (none). A place page holds roughly the first 8",
"examples": [
0
]
},
"placeMinimumStars": {
"type": "string",
"description": "keep only businesses rated at or above '1'|'2'|'3'|'4'|'4.5'; empty keeps all. Filtered-out places are not returned, not charged",
"examples": [
""
]
},
"website": {
"type": "string",
"description": "allPlaces | withWebsite | withoutWebsite — filter on whether the business has its own site. Filtered-out places are not charged",
"examples": [
"allPlaces"
]
},
"skipClosedPlaces": {
"type": "boolean",
"description": "leave out permanently-closed businesses so you do not pay for dead leads. Default true",
"examples": [
true
]
},
"geo_split": {
"type": "boolean",
"description": "split a wide area into a grid and search each cell to get past Google's ~120-per-view ceiling. Default false; turn on for anything wider than a city",
"examples": [
false
]
},
"proxyUrls": {
"type": "string",
"description": "leave empty to use the residential proxy included in the run price; or pass your own gateway URLs (http://user:pass@host:port)"
}
},
"additionalProperties": true,
"required": [
"searchStringsArray"
],
"description": "the response is the dataset items array directly — no run envelope, no polling. Each row carries place_id, name, address, phone, website, rating, review_count, categories, hours, latitude, longitude, google_maps_url, and (when scrapeContacts is on) emails and social_links. Cap every call with maxTotalChargeUsd, the spend limit Apify enforces; the body row limit sets how many rows run. Filters (pla"
}
MCP
{"mcpServers":{"toll402":{"command":"npx","args":["-y","toll402-mcp"],"env":{"TOLL402_WALLET_KEY":"0x..."}}}}