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
8 hours ago
Last modified
Categories
Share
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.
- 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 |
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 |
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" }
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. The actor does not visit business websites or find emails.
- 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.