Skip to Content
MCPToolsLocal business search

Local business search

Give it a business type and a place — “restaurants” in “Bondi Junction, Sydney” — and get back the local businesses Google Maps returns for it.

Tool
google_maps_listings
Cost
0.3 credits per business listing
Category
Source Leads
Required input
querylocation
Returns
Business listings, optionally with reviews

What it does

  • Returns business listings from Google Maps for a search query, for sourcing local business leads.
  • query is the search query — what you would type into the Maps search box. A business type ("restaurants", "auto service centers"), or business type plus place ("restaurants in Bondi Junction").
  • location is the place to search in — a suburb, city, or city and state ("Bondi Junction, Sydney", "Austin, TX").
  • include_reviews scrapes each place detail page for reviews and richer data. It costs the same per business, but it does more work per place.

The API only enforces query, but a query with no geography searches everywhere and returns whatever Maps considers relevant. Treat location as required for anything you intend to work as a territory.

This is the standard first step of a local-business list build. Listings give you names and websites; they do not give you contacts. Chain scrape_emails_from_website on each website to get an address you can write to.


Use cases

  • Build a local-business territory list. A trade plus a suburb returns the businesses in that patch, which is the whole prospect universe for local services.
  • Source SMB leads that no B2B database carries. Restaurants, clinics, gyms and trades are on Maps long before they are in a firmographic index.
  • Qualify on ratings and review volume. Pull reviews and the list sorts itself into established businesses and ones that just opened.
  • Feed a website-scrape chain. Listings give you names and sites; scrape_emails_from_website turns those sites into contacts.

How to use it

Connect the MCP server

Follow the setup guide for your client. Browser sign-in, no API key.

Pull the listings

Get Google Maps listings for "auto service centers", location Richmond, Melbourne, 50 results.

Add reviews when you need to qualify

Same search, but include reviews. Rank the workshops by review count and flag anything rated under 4.0.

Turn listings into contacts

For every listing with a website, scrape emails from that website. Skip anything with no site. Report how many credits you used.

Verify before you send

Verify each email you found and drop anything that isn't deliverable.

Example prompts

Ask your clientWhat you get back
”Google Maps listings for restaurants in Bondi Junction”query: "restaurants", location: "Bondi Junction, Sydney"
”Auto service centers in Richmond, Melbourne — 50 of them”Same, plus max_results: 50
”Plumbers and electricians in Shoreditch, London”Two calls, one trade each — one query per call
”Same search with reviews, ranked by rating”Listings plus review data per place
”Build me a list of Austin dentists with contact emails”Chains scrape_emails_from_website per website
”Find the owner’s LinkedIn for each of these”Chains find_people on the domains

Best prompting practices

  • Put the geography in the query and in location. "dentists in Austin" plus location: "Austin, TX" is more reliable than either alone.
  • Use customer words in query. “Auto service centers”, “panel beaters”, “day spas” — the phrasing on the shopfront. Industry codes and internal category names return nothing.
  • Qualify an ambiguous city. "Portland, OR" and "Portland, ME" are different territories; "Portland" alone picks one for you.
  • Go suburb by suburb for a dense metro. max_results tops out at 100, so “restaurants in Sydney” is a sample. "Bondi Junction, Sydney", then "Surry Hills, Sydney", and so on, is the actual territory.
  • Only turn on include_reviews when you will use them. It scrapes each place detail page, so the call takes noticeably longer on a large max_results.
  • Set max_results to the size of the list you actually want. The default of 10 is a sample, not a territory — and since you are charged per business listing, it is also what you pay for.
  • Run one business type and one place per call. “Dentists and physios in Austin and Dallas” gives you a worse result set than four clean calls.
  • Number the steps down to contact details. Source the listings, drop the ones with no website and say how many survived, then scrape — the drop step is free and it is what keeps the paid step small.
  • Deduplicate across suburbs. Chains and franchises appear in every adjacent patch. “Dedupe on website domain before scraping anything.”
  • Ask for a CSV, blanks left blank. Name, website, phone, address, rating, review count — “leave the cell empty where nothing was published, do not guess”.
  • Chain, do not guess. Ask for emails to be scraped from the returned websites rather than letting your client invent info@ addresses.

Output

{ "query": "dentists in Austin", "listings": [ { "name": "Congress Ave Dental", "website": "https://congressavedental.com", "phone": "+1 512-555-0142", "rating": 4.7 } ] }

Credits and limits

0.3 credits per business listing, so max_results sets the ceiling on the call — 50 listings costs up to 15 credits. Run check_credits (free) before a large batch.

Listings carry a website and a public phone number, not a named decision-maker. Budget for the follow-on calls: one scrape_emails_from_website per website at 0.5 credits each adds up faster than the listing call itself.


Parameters

ParameterTypeRequiredNotes
querystringYesThe search query — a business type, e.g. "restaurants", "auto service centers", "dentists in Austin"
locationstringIn practiceSuburb, city, or city and state — e.g. "Bondi Junction, Sydney", "Austin, TX". Optional in the schema; omit it and the search has no territory
include_reviewsbooleanNoScrapes each place detail page for reviews and richer data
max_resultsnumberNo1–100, default 10

query — what to search for

Use the words a customer would use, not an industry classification. “Auto service centers” returns listings; “SIC 7538” returns nothing.

Business typeExample query
Hospitality"restaurants", "cafes", "bars", "catering services"
Automotive"auto service centers", "mechanics", "panel beaters", "tyre shops"
Health"dentists", "physiotherapists", "veterinary clinics", "medical centres"
Trades"plumbers", "electricians", "builders", "landscapers"
Professional services"law firms", "accountants", "real estate agencies", "insurance brokers"
Fitness & beauty"gyms", "pilates studios", "hair salons", "day spas"
GranularityExample locationUse it when
Suburb"Bondi Junction, Sydney", "Richmond, Melbourne", "Shoreditch, London"Territory work — one rep, one patch, a list you can actually cover
City"Austin, TX", "Brisbane, QLD", "Manchester, UK"Standard list build. Big cities cap out at max_results, so page by suburb if you need the whole metro
City and state"Portland, OR" vs "Portland, ME"The city name is ambiguous — always qualify it
Region or country"Sydney, Australia", "United Kingdom"Scoping only. Results skew to the largest centres and thin out fast

Suburb-level is the sweet spot: query: "auto service centers" with location: "Richmond, Melbourne" returns a workable list, where the same query against "Australia" returns a scattered sample you cannot sell into.


ToolUse it instead when
scrape_emails_from_websiteYou have the websites and need contact addresses — 0.5 credits
scrape_phones_from_websiteYou need office numbers from the site — 0.5 credits
find_companiesYou are building a B2B list on firmographics, not geography
enrich_organizationYou have the domain and want firmographics — 2 credits

Next steps


Keep learning

Two courses take these tools past the reference page — clustered by GTM job, then chained into workflows.