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.
queryis 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").locationis the place to search in — a suburb, city, or city and state ("Bondi Junction, Sydney","Austin, TX").include_reviewsscrapes 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_websiteturns 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 client | What 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"pluslocation: "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_resultstops 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_reviewswhen you will use them. It scrapes each place detail page, so the call takes noticeably longer on a largemax_results. - Set
max_resultsto 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
| Parameter | Type | Required | Notes |
|---|---|---|---|
query | string | Yes | The search query — a business type, e.g. "restaurants", "auto service centers", "dentists in Austin" |
location | string | In practice | Suburb, 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_reviews | boolean | No | Scrapes each place detail page for reviews and richer data |
max_results | number | No | 1–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 type | Example 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" |
location — where to search
| Granularity | Example location | Use 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.
Related tools
| Tool | Use it instead when |
|---|---|
scrape_emails_from_website | You have the websites and need contact addresses — 0.5 credits |
scrape_phones_from_website | You need office numbers from the site — 0.5 credits |
find_companies | You are building a B2B list on firmographics, not geography |
enrich_organization | You have the domain and want firmographics — 2 credits |
Next steps
- All MCP tools — the full catalogue with credit costs
- Research & Web Scraping — workflows that chain this tool into a local list build
Keep learning
Two courses take these tools past the reference page — clustered by GTM job, then chained into workflows.