Local Business Lead Builder
Pricing
from $2.55 / 1,000 place rows
Local Business Lead Builder
Build local business lead lists from Google Maps. Enter a category and a place, or a search like dentist in Austin, TX. Get one row per business with website, phone, full address, coordinates, categories, rating, review count, and hours. No Google API key. CSV or Clay ready.
Pricing
from $2.55 / 1,000 place rows
Rating
0.0
(0)
Developer
Mamba Labs
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
19 hours ago
Last modified
Categories
Features
Share
What's new (October 2026)
- Owner, emails, and social links from each business website. Set the new
include_website_contactsinput totrueand each place row addsowner_nameandowner_title,website_emails, and the business'slinkedin_url,facebook_url,instagram_url,x_url,youtube_url, andtiktok_url, read from up to 3 pages of its own website.site_pages_readandsite_contacts_statussay what was read. Off by default.
No price change. Existing fields and saved inputs work as before.
Build a local business lead list from Google Maps. Enter a business category and a place, such as roofing contractor and Denver, CO, or a full search such as dentist in Austin, TX. You get one row per business with its name, website, phone, full address, coordinates, categories, star rating, review count, and opening hours, plus one free summary row per search. Rows are flat, so they export to CSV or drop into a Clay table.
Features
- Categories times places. Give a list of categories and a list of locations and every pair is searched, or paste your own searches one per line. Up to 100 searches and 500 businesses per search in one run.
- The fields a lead list needs. Website (tracking parameters removed) and its domain, phone in local and international format, street, city, postal code, state, country, latitude, longitude, every Google Maps category, rating, review count, and weekly hours.
- Filters that save money. Minimum rating, minimum reviews, website required, and phone required. A business your filters drop is not returned and not charged.
- No repeats. A business found by two searches in the same run is returned once and charged once. The Google place ID is on every row, so you can dedupe across runs too.
- A summary per search. Each search ends with one free row that says how many businesses Google Maps listed, how many were returned, and how many pages were read.
- Contacts from the business website (opt in). With
include_website_contactson, each business's own homepage, contact, team, and about pages are read for the owner or manager name, role emails, and social links, at no extra charge. - Cost guards. Max places per search and a max charge per run.
How it reads Google Maps
The actor sends the same search request the Google Maps web page sends and reads the businesses from the answer, 20 per page, through the Apify proxy. A refused request moves to Apify residential addresses on its own. No Google account, no Google API key, and no other developer's actor.
Input
| Field | Type | Default | What it does |
|---|---|---|---|
queries | array | Searches, one per line, the way you type them in Google Maps. The Console form starts with plumber in Austin, TX | |
categories | array | Business categories. Each is searched in every location | |
locations | array | Places: a city with its state or country, a ZIP code, or a neighborhood | |
max_places_per_query | string | 20 | Place rows per search, 1 to 500 |
min_rating | string | Keep businesses rated at or above this, for example 4.0 | |
min_reviews | string | Keep businesses with at least this many reviews | |
require_website | string | false | Skip businesses with no website |
require_phone | string | false | Skip businesses with no phone |
dedupe | string | true | Skip a business an earlier search in the run returned |
include_website_contacts | string | false | true reads up to 3 pages of each business's website for the owner or manager, emails, and social links. No extra charge; runs take longer |
language | string | en | Language of the results |
country | string | us | Country Google uses to rank results |
max_charge_usd | string | Stop before a row would pass this amount | |
proxy_mode | string | auto | auto (Apify proxy, residential when refused) or residential. A reliability choice |
Every field is text, so a Clay column can fill any of them: numbers as "60", yes or no as "true" or "false". Lists also accept text: one item per line, items split by a semicolon or a pipe, or a JSON array. A comma does not split, so Austin, TX stays one place.
Output
| Field | Example |
|---|---|
row_type | place or query_summary |
query, category_searched, location_searched, rank | plumber in Austin, TX, null, null, 1 |
name, place_id, google_maps_url | Reliant Plumbing - Austin, ChIJO3z3jPnLRIYRdSUTGwQd_dk, link |
website, website_domain | https://reliantplumbing.com/plumbing-projects-austin/, reliantplumbing.com |
phone, phone_international | (512) 675-4220, +1 512-675-4220 |
address, street, city, postal_code, state, country_code | 12111 Menchaca Rd, Austin, TX 78748, ..., US |
latitude, longitude | 30.1421389, -97.8326841 |
primary_category, categories | Plumber, ["Plumber"] |
rating, review_count | 4.7, 1717 |
hours_text, open_status_text | Wednesday: Open 24 hours; ..., Open 24 hours |
places_found, places_returned, pages_read | query summary rows only |
owner_name, owner_title | Deborah, owner. With include_website_contacts: the owner or manager the website names |
website_emails | ["hello@austinplumbery.com"]. With include_website_contacts: role addresses on the business's own domain, and a free mailbox named after the business. A named person's own address is left out |
linkedin_url, facebook_url, instagram_url, x_url, youtube_url, tiktok_url | https://www.facebook.com/AustinPlumbery. With include_website_contacts: profiles the website links to |
site_pages_read, site_contacts_status | 2, ok. ok, no_website, unreachable, or blocked; null when include_website_contacts is off |
row_status, error_reason, billable_events_json | ok, null, {"place-row":1} |
The run summary (key-value store record RUN_SUMMARY) lists searches, places, filtered and repeat counts, requests, and the proxy route used.
Pricing
Pay per event. You pay only these events; the Apify platform and proxy costs of your run are paid by Mamba Labs.
| Event | Free plan | Bronze | Silver | Gold |
|---|---|---|---|---|
Place row (place-row), one business | $0.003 | $0.00285 | $0.0027 | $0.00255 |
Actor start (apify-actor-start), once per run | $0.0005 | $0.0005 | $0.0005 | $0.0005 |
Free rows: the search summary rows, and blocked, error, and no results rows. Businesses removed by your filters and repeats skipped by dedupe are not returned and not charged. On the Apify free plan the actor stops at 1.50 USD of evaluation a month (about 500 place rows); any paid Apify plan removes that cap.
Example: 3 searches with 60 places each return 180 place rows for about 0.54 USD plus the 0.0005 USD start.
Usage examples
Apify Console or API
{ "queries": ["plumber in Austin, TX", "dentist in Manchester, UK"], "max_places_per_query": "60" }
{ "categories": ["roofing contractor", "HVAC contractor"], "locations": ["Denver, CO", "Boulder, CO"], "min_rating": "4.0", "require_website": "true", "max_places_per_query": "100" }
{ "queries": ["plumber in Austin, TX"], "max_places_per_query": "20", "include_website_contacts": "true" }
Clay
Add an HTTP API or Apify column that sends a category and a city from your table, then map name, website_domain, phone, city, rating, and review_count into columns. Send website_domain on to an email finder or a company enricher.
MCP
The MCP server @mambalabsdev/mcp-local-business-lead-builder exposes this actor as a tool for Claude and other MCP clients.
Error handling
| Situation | What you get |
|---|---|
| Google Maps refuses every route for a search | One free summary row with row_status blocked and the reason |
| A search has no businesses, or none pass your filters | One free summary row with row_status no_results and the counts |
| Google stops answering mid search | The rows already read ship, and the summary row says where it stopped |
| Max charge reached | The run stops before the next billable row and says why in the status message |
Limitations
- Google Maps lists at most a few hundred businesses for one search. For a whole metro area, split it into neighborhoods or ZIP codes.
- The place is read from your search text. Name the state or country (
Portland, OR,Portland, ME) to avoid the wrong city. - Fields are what the Google Maps profile shows. A business with no website or phone on its profile returns null for that field. Business websites are read only with
include_website_contacts, up to 3 pages each, and only emails the website itself publishes are returned; nothing is guessed. - Hours are as listed on the day of the run and include holiday changes Google shows.
- Google can change the format of its Maps answers without notice. A change shows as
blockedorerrorsummary rows until the actor is updated. - Google's terms govern its services, and its robots.txt asks crawlers not to request
/search. You are responsible for how you use the rows.
More from Mamba Labs
Built by Mamba Labs.