What it does
Most local lead lists start with a Google Maps scraper, and most of the pain comes with it: blocked requests, proxies, CAPTCHAs and a results list that stops at around 120 places per search. If what you actually need is names, addresses, phone numbers and websites for every dentist in Austin or every restaurant in Berlin, you do not need Google at all.
Business Places Data reads the Overture Maps Foundation places dataset, an open GeoParquet release of 80M+ business points of interest refreshed monthly and built from Meta, Microsoft, Foursquare, AllThePlaces, BrightQuery and other sources. Nothing is scraped, so a whole city comes back in seconds. Each row carries the business name, category, full address, latitude/longitude, E.164 phone numbers, website, business email, social links and brand, plus a plain Google Maps search link.
It is built for agencies, SDR teams and data people who want permissive, resellable lead data. Every row lists its sources, licence and attribution, and the licences (CDLA-Permissive-2.0, Apache-2.0, CC0) are not share-alike, so you may store, enrich and resell the leads as long as attribution travels with them. The trade-off is honest: this is not Google data, so there are no reviews, star ratings, opening hours or photos.
How it works
- You give a city name (32,000+ cities are built in), a bounding box, or a lat/lon centre with a radius, plus optional categories such as dentist or plumber.
- The actor finds the newest monthly Overture release and reads only the GeoParquet row groups that overlap your area, typically 15-45 MB for a city.
- Places are filtered by category (2,100+ Overture ids, with plain-word synonyms), name, confidence and whether they have a website, phone or email.
- Phones are normalised to E.164, possibly personal emails are removed, and each row is written with its sources, licence and attribution.
- Results are ordered by confidence (or by distance for a radius search) and the run stops at your maxPlaces cap or spend limit.
Input example
A typical run input (JSON). Every field is also available as a form in the Apify console.
{
"location": "Austin, TX",
"categories": [
"dentist"
],
"maxPlaces": 200,
"minConfidence": 0.5,
"requireWebsite": true,
"countryCode": "US"
}All input fields
| Field | Type | Required | Default | What it does |
|---|---|---|---|---|
location | string | no | A city, optionally with region or country: "Austin, TX", "Berlin", "London, Ontario", "Paris France". You can also type "dentists in Austin TX" (the part before "in" becomes the category when Categories is empty)… | |
categories | array | no | [] | Plain words (dentist, plumber, restaurant, coffee, hotel, lawyer...) or Overture category ids (dental_clinic, italian_restaurant...). A parent category includes its children, so restaurant also returns… |
keyword | string | no | "" | Optional. Only places whose name (or brand name) contains this text, case-insensitive, e.g. "Starbucks" or "dental". |
maxPlaces | integer | no | 1000 | Stop after this many places. Highest-confidence places come first (nearest first for a radius search). Places beyond the cap are never charged. |
minConfidence | number | no | 0.5 | Overture's 0-1 confidence that the place exists as described. 0.5 drops most stale or duplicate records; 0.9 keeps only well-corroborated places; 0 returns everything. |
bbox | array | no | Optional [west, south, east, north] in degrees (longitude, latitude, longitude, latitude), e.g. [-9.20, 38.69, -9.10, 38.76]. Up to 1.5 x 1.5 degrees (about one metro area). Takes priority over location. | |
lat | number | no | Optional centre latitude for a radius search (with lon and radiusKm). Takes priority over location. | |
lon | number | no | Optional centre longitude for a radius search. | |
radiusKm | number | no | Radius for lat/lon (default 5 km). With a city name it searches this radius around the city centre instead of the whole city. Results get distanceKm and come nearest first. | |
countryCode | string | no | "" | Optional two-letter ISO code (US, DE, GB...). Picks the right city when a name exists in several countries and keeps only places whose address is in that country. |
requireWebsite | boolean | no | false | Skip places without a website. Skipped places are never charged. |
requirePhone | boolean | no | false | Skip places without a phone number. |
requireEmail | boolean | no | false | Skip places without a business email (after the personal-email filter). |
includePhones | boolean | no | true | Business phone numbers as published for the place, normalised to E.164 (+15125550100) where possible. |
includeEmails | boolean | no | true | Business emails from the source data. Addresses on the business's own website domain and role mailboxes (info@, office@, bookings@...) are kept; free-mail addresses (gmail, outlook...) are kept only when they contain… |
matchAlternateCategories | boolean | no | false | Also return places whose secondary (alternate) categories match, not only their main category. Wider but less precise. |
includeFields | array | no | [] | Optional. Keep only these fields in each row (id is always kept). Any of: id, name, category, basicCategory, categoryHierarchy, alternateCategories, confidence, operatingStatus, address, fullAddress, lat, lon… |
listCategories | boolean | no | false | Instead of places, output Overture's category list (id, parent, hierarchy, worldwide place count). Filter it with Categories or Name contains, e.g. "dent". Free. |
release | string | no | "" | Optional, advanced: pin an Overture release such as 2026-09-23.1. Empty = the newest release (Overture publishes monthly). |
Output example
A run for dentists in Austin, TX returns rows like these, one per place, with contacts and licence on every row:
| name | category | fullAddress | phones | websites | emails | confidence | licence |
|---|---|---|---|---|---|---|---|
| Bowcutt Dental | dental_clinic | 2501 S Lakeline Blvd, Cedar Park, TX 78613, US | +15123796571 | https://bowcuttdental.com/ | info@bowcuttdental.com | 1 | CDLA-Permissive-2.0 |
| Pecan Park Family Dentistry | dental_clinic | 10601 Pecan Park Blvd, Austin, TX 78750, US | +15122502424 | http://www.pecanparksmiles.com | info@pecanparksmiles.com | 0.9722 | Apache-2.0 AND CDLA-Permissive-2.0 |
| Serenity Dental | dental_clinic | 8731 State Hwy 71 #102, Austin, TX 78735, US | +15123875799 | https://serenitydentalaustin.com/ | info@serenitydentalaustin.com | 1 | CDLA-Permissive-2.0 |
| Kelly W. Keith, DDS | dental_clinic | 3800 Speedway, Austin, TX 78751, US | +15127954082 | 1 | CDLA-Permissive-2.0 |
Pricing
Pay per event: you are charged only for the results you receive, with no subscription. Set a maximum total charge on any run and it stops cleanly at the cap.
| Charged for | When | Price | Per 1,000 | Worked example |
|---|---|---|---|---|
| Area query | once per run, when the area query returns at least one place | $0.003 | $3 | Any city, bbox or radius = $0.003; a query with no matching places is free |
| Place result | Charged per place row delivered (contacts, address, coordinates, sources and attribution included) | $0.001 | $1 | 200 dentists in Austin = $0.003 + $0.20 = $0.203; 1,000 restaurants in Berlin = $1.003 |
| Actor Start (platform start fee) | Charged when the Actor starts running. Number of events charged depends on Actor memory (one event per GB, minimum one event). | $0.00005 | — | One run at 1 GB = $0.00005 |
Prices are read from the live Apify Store listing when this page is built. The listing is always authoritative.
Try Business Places Data on Apify. Pay only for the results you get.
Run on Apify →Use cases
Local outreach lists for agencies
Pull every plumber, dentist or law firm in a city with phone, website and role email in one run. Use requireWebsite or requireEmail so you only pay for places you can actually contact.
Territory and market sizing
Count how many coffee shops or hotels sit inside a bounding box or radius before opening a branch or assigning sales territories. Run listCategories (free) first to find the right Overture category ids.
Enriching a CRM with coordinates
Each place comes with latitude/longitude, a full address and a Google Maps search link, which makes it easy to map, geocode-match or deduplicate against records you already hold.
Resellable datasets
Because the source licences are permissive and not share-alike, you can merge the rows into your own product or data offering, provided you keep the attribution field with them.
How it compares
| ActorForge Business Places Data | Typical Google Maps scrapers | Manual research in a spreadsheet | |
|---|---|---|---|
| Data source | Overture Maps open data | Google Maps pages | Search engines, directories |
| Blocks, CAPTCHAs, proxies | None, nothing is scraped | Common | No |
| Results per search | Whole city, up to 20,000 per run | Often capped around 120 per search | As many as you have time for |
| Reviews, ratings, opening hours, photos | No | Yes | Partial |
| Licence to store and resell | Yes, permissive licences with attribution | Unclear | Depends on sources |
| Freshness | Monthly Overture release | Live | Live |
| Price | $1 per 1,000 places + $0.003 per area query | About $4 per 1,000 for the leading scraper | Your time |
If you need Google reviews, star ratings, opening hours or same-day freshness, a Google Maps scraper is the better tool. If you need contactable business rows at city scale with a clear licence, open data is cheaper and does not break.
Limits and honest notes
- Open data, not Google: no reviews, ratings, review counts, opening hours, photos, popular times or price levels. The Google Maps link in each row is a plain search URL built from the name and address; nothing is fetched from Google.
- Freshness follows Overture's monthly releases. The newest release is found automatically (or pin one with release). operatingStatus is often empty, so a closed business can still appear until a source drops it; minConfidence (default 0.5) filters most stale records.
- Coverage varies by country and category. In the test cities almost every dentist and restaurant had a phone and a website; emails were present for about 75% of Austin dentists but about 32% of Berlin restaurants. Rural areas and parts of Africa and Asia are thinner.
- Categories are Overture's taxonomy (2,100+ ids such as dental_clinic or italian_restaurant). Common plain words are mapped for you; run listCategories (free) to browse the rest.
- One query per run, up to 1.5 x 1.5 degrees (about one metro area). For a region or country, run once per city. A city query typically reads 15-45 MB of public GeoParquet in 5-15 seconds at 1 GB memory.
- Business contacts only: phones, emails and socials are the business's published contacts. Free-mail addresses that do not contain the business name and off-domain personal-looking addresses are removed (counted in droppedPersonalEmails). You remain responsible for how you use the data under GDPR, CAN-SPAM and similar laws.
- City names resolve offline from a built-in list of 32,000+ cities (Overture divisions, OpenStreetMap-based); smaller towns are looked up in Overture's divisions data and need a region or country ("Dripping Springs, TX"). No external geocoder is called.
- The run's spend limit is respected: the area query is reserved first, places are charged before delivery, and the run stops cleanly at the limit.
Data licence and attribution
Places come from the Overture Maps Foundation places theme. Each row's sources lists the contributing datasets with their record ids, licence and licenceUrls give the licences, and attribution holds the required credit lines. If you republish the data, keep the attribution field (or show the lines below).
- © Overture Maps Foundation, overturemaps.org - Meta, Microsoft, PinMeTo, Krick, RenderSEO, DAC, BrightQuery: "Data from <source>. Available under CDLA Permissive 2.0." (CDLA-Permissive-2.0) - Foursquare: "Copyright 2024 Foursquare Labs, Inc. All rights reserved. Available under Apache 2.0. Foursquare data was transformed to the Overture schema. Changed: 2026-03-18." (Apache-2.0) - AllThePlaces: "Data from AllThePlaces. Available under CC0 1.0."
None of these licences is share-alike, so the rows may be used commercially, stored, merged with your own data and redistributed, provided the attribution and licence texts travel with them.
City boundaries used to turn a city name into a search area come from the Overture divisions theme: © OpenStreetMap contributors, Overture Maps Foundation, available under the Open Database License (ODbL) 1.0. They are used only for the search area and are not part of the output rows. The built-in city list is a derivative database offered under the ODbL; it is rebuilt from the public Overture release by a documented query.
Changes made by this actor: rows are selected by area, category, name and confidence; fields are flattened and renamed; phone numbers are normalised to E.164; possibly personal emails are removed.
Foursquare OS Places NOTICE (preserved in full, as Apache-2.0 requires; also included in the run's OUTPUT record whenever Foursquare rows are delivered):
> © 2026 Foursquare Labs, Inc. All rights reserved. > > The Foursquare OS Places dataset (the "Data") is licensed under the Apache License, Version 2.0 (the "License"). You may not use, modify, or distribute the Data except in compliance with the License. > > As set forth more fully in the License, if you use, modify, or distribute the Data, you must: provide recipients with a copy of the License; if applicable, include prominent notices to the extent you've changed the Data; preserve attribution to Foursquare, including preserving the full content of this NOTICE.txt file. > > To ensure appropriate attribution to Foursquare, we recommend the following: if using/distributing the Data in flat file form as-is or after making changes/modifications: include this NOTICE.txt file, which may be modified to include an additional notice of your changes/modifications, if any; if using/distributing the Data in API form as-is or after making changes/modifications: include a copy of the content from this NOTICE.txt file prominently in your developer documentation for such API, which may be modified to include an additional notice of your changes/modifications, if any. > > You may obtain a copy of the License at: http://www.apache.org/licenses/LICENSE-2.0. Unless required by applicable law or agreed to in writing, the Data distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
This actor is not affiliated with, endorsed by or sponsored by Google, the Overture Maps Foundation or any data contributor. "Google Maps" is a trademark of Google LLC and is used only to describe what this actor is an alternative to.
FAQ
Is this Google Maps data?
No. Rows come from the Overture Maps Foundation places dataset, which is built from Meta, Microsoft, Foursquare, AllThePlaces, BrightQuery and other sources. The Google Maps link in each row is a plain search URL built from the name and address; nothing is fetched from Google.
How many businesses can I get from one city?
One run covers one area of up to 1.5 x 1.5 degrees, roughly a metro area, and returns up to 20,000 places (maxPlaces). There is no 120-result cap. For a region or country, run once per city.
How often is the business data updated?
Freshness follows Overture's monthly releases, and the newest release is picked automatically. You can pin an older one with the release field. A closed business can still appear until a source drops it; the default minConfidence of 0.5 filters most stale records.
Does it return business email addresses?
Yes, where the source data has them. Emails on the business's own domain and role mailboxes such as info@ are kept; free-mail addresses are kept only when they contain the business name, and others are dropped and counted in droppedPersonalEmails. In testing, about 75% of Austin dentists had an email but only about 32% of Berlin restaurants.
Can I use the leads commercially?
The source licences (CDLA-Permissive-2.0, Apache-2.0, CC0) allow commercial use, storage and redistribution as long as the attribution and licence texts travel with the rows. You remain responsible for how you contact people under GDPR, CAN-SPAM and similar laws.
What does a typical run cost?
$0.003 per area query plus $0.001 per place delivered. 200 dentists in Austin cost $0.203; 1,000 restaurants in Berlin cost $1.003. Places filtered out or beyond your cap are never charged.
Use it from code
Run the actor through the Apify API with the input above.
cURL
curl -X POST "https://api.apify.com/v2/acts/actor-forge~business-places-data/run-sync-get-dataset-items" \
-H "Authorization: Bearer $APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"location": "Austin, TX", "categories": ["dentist"], "maxPlaces": 200, "minConfidence": 0.5, "requireWebsite": true, "countryCode": "US"}'JavaScript (Node.js)
// Node.js 18+ (built-in fetch). Set APIFY_TOKEN in your environment.
const input = {
"location": "Austin, TX",
"categories": [
"dentist"
],
"maxPlaces": 200,
"minConfidence": 0.5,
"requireWebsite": true,
"countryCode": "US"
};
const res = await fetch(
"https://api.apify.com/v2/acts/actor-forge~business-places-data/run-sync-get-dataset-items",
{
method: "POST",
headers: {
Authorization: `Bearer ${process.env.APIFY_TOKEN}`,
"Content-Type": "application/json",
},
body: JSON.stringify(input),
}
);
const items = await res.json();
console.log(items.length, items[0]);Python
# pip install apify-client (set APIFY_TOKEN in your environment)
import os
from apify_client import ApifyClient
client = ApifyClient(os.environ["APIFY_TOKEN"])
run_input = {
"location": "Austin, TX",
"categories": [
"dentist"
],
"maxPlaces": 200,
"minConfidence": 0.5,
"requireWebsite": True,
"countryCode": "US"
}
run = client.actor("actor-forge/business-places-data").call(run_input=run_input)
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item)The run-sync-get-dataset-items endpoint waits for the run (up to 5 minutes) and returns the dataset rows directly. For longer runs, start the run asynchronously and read the dataset when it finishes, as the Python example does. Replace APIFY_TOKEN with your own token from the Apify console.
Step-by-step guides
How to Get Local Business Leads Without Scraping Google Maps
Query the open Overture Maps places dataset by city and category with Business Places Data to get names, addresses, phones, websites and emails for…
Related actors
Facebook Pages by City — Open Data, Not Affiliated with Meta
Facebook Page leads by city: page URL and ID, name, category, address, lat/lon, phone, website, email and other socials, from Overture Maps open…
$3 per 1,000 · area queryCompanies House Enrichment — UK Company Directors & Filings
Enrich UK companies from the official Companies House API: profile, SIC codes, current and resigned directors and officers, and the latest filing…
$5 per 1,000 · enriched companyAny URL to Markdown — Web Pages, PDF, Word, Excel & OCR
Turn any URL into clean, LLM-ready Markdown: web pages, PDFs, Word, Excel, PowerPoint, EPUB, CSV and JSON, plus OCR for images and scanned PDFs. One…
$1 per 1,000 · page resultSEO Audit Crawler — On-Page SEO Checker for Whole Sites
Crawl a whole website and audit every page for technical and on-page SEO: titles, meta descriptions, H1s, canonicals, noindex, duplicates, broken…
$6 per 1,000 · page auditedTry Business Places Data on Apify. Pay only for the results you get.
Run on Apify →