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..."}}}}

All tools · OpenAPI