Business Leads Scraper - Phone, Email & Website by City
Pricing
from $17.00 / 1,000 results
Business Leads Scraper - Phone, Email & Website by City
Generate local business leads with contact details: phone, email and website plus name, address and coordinates. Search any business category (restaurants, dentists, plumbers, hotels, real estate and more) in any city or map area. Export to JSON, CSV or Excel.
Pricing
from $17.00 / 1,000 results
Rating
0.0
(0)
Developer
Scrapers Lat
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
0
Monthly active users
11 days ago
Last modified
Categories
Share
Business Leads Scraper - Phone, Email & Website by City
Here is one real result, with every field the actor returns:
{"osmId": "node/530780552","name": "The Omelettry","category": "restaurant","phone": "+1-512-453-5062","email": "info@theomelettry.com","website": "http://www.theomelettry.com","facebook": "https://www.facebook.com/omelettry/","street": "4631 Airport Boulevard","city": "Austin","state": "TX","postcode": "78751","country": null,"latitude": 30.3067572,"longitude": -97.7154666,"openingHours": "07:00-15:00","brand": null,"mobile": null,"whatsapp": null,"fax": null,"instagram": null,"twitter": null,"linkedin": null,"youtube": null,"tiktok": null,"operator": null,"cuisine": ["breakfast"],"description": null,"wikidata": null,"wikipedia": null,"suburb": null,"unit": "131A","googleMapsUrl": "https://www.google.com/maps/search/?api=1&query=30.3067572,-97.7154666","source": "OpenStreetMap","observedAt": "2026-08-10T14:04:22.720Z"}
The most complete OpenStreetMap business leads scraper available. It returns every contact and location field the community map database exposes for each business, plus derived fields like a ready-to-use Google Maps link, and an optional paid add-on that finds a public contact email and name, so you can build targeted call and email lists by category and city.
📥 Input · 📤 Output · 💰 Pricing · ▶️ Examples
Table of contents
- What it does
- Quickstart
- Input reference
- Output reference
- Example output record
- Run via API and CLI
- Fetch results
- Billing and limits
- FAQ and troubleshooting
What it does
The actor takes a business category and a city or map area, queries the OpenStreetMap community map database for matching businesses, and writes one normalized record per business to the run's dataset. Each record carries the published contact details (phone, mobile, WhatsApp, email, website, and social handles), the full address, coordinates, opening hours, and a ready-to-open Google Maps link. Missing source values are returned as null, never invented.
You can target an area with a plain city name or with a custom bounding box (south, west, north, east). An optional paid contact-enrichment add-on tries to find a public business email and a contact person's name for leads that have no email on file.
Quickstart
Open the actor, paste this into the input, and press Run. It returns 10 restaurant leads in Austin, Texas.
{"maxBusinesses": 10,"category": "restaurant","city": "Austin, Texas","withContactOnly": false,"enrichContacts": false,"enrichContactsMax": 50}
Every input field is optional. Use a common category word such as dentist, plumber, hotel, or a precise OpenStreetMap tag such as shop=bakery or office=accountant.
Input reference
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
maxBusinesses | integer | no | 10 | Maximum businesses to collect (1 to 10000). |
category | string | no | restaurant | Kind of business to find. A common word (restaurant, dentist, plumber, hotel, real_estate, lawyer, pharmacy, gym) or an OpenStreetMap tag as key=value (shop=bakery, amenity=cafe, office=accountant). |
city | string | no | Austin, Texas | City, town, or region to search, for example Manchester, UK. Leave empty if you provide a bounding box. |
south | string | no | (empty) | Minimum latitude of a custom map area. Provide all four bounding box values to override the city. |
west | string | no | (empty) | Minimum longitude of a custom map area. |
north | string | no | (empty) | Maximum latitude of a custom map area. |
east | string | no | (empty) | Maximum longitude of a custom map area. |
withContactOnly | boolean | no | false | Keep only businesses that have at least a phone, email, or website. |
enrichContacts | boolean | no | false | Paid add-on. For each lead with no email, attempt to find a public business contact email and a contact person's name. Billed per attempt, plus an extra charge only when an email is found. |
enrichContactsMax | integer | no | 50 | Cap how many leads the add-on tries to enrich. Leave empty to attempt all. Free Apify accounts are capped at 3. |
Output reference
One dataset item per business. Types: string, number, string[], or null when the source value is absent.
| Field | Type | Description |
|---|---|---|
osmId | string | OpenStreetMap element id, for example node/530780552. |
name | string | Business name. |
category | string | Category matched by the search. |
phone | string | Published phone number. |
email | string | Published email address. |
website | string | Published website URL. |
facebook | string | Facebook page URL. |
street | string | Street address. |
city | string | City. |
state | string | State or region code. |
postcode | string | Postal code. |
country | string | Country. |
latitude | number | Latitude of the business. |
longitude | number | Longitude of the business. |
openingHours | string | Opening hours in OpenStreetMap format. |
brand | string | Brand name, if tagged. |
mobile | string | Mobile phone number. |
whatsapp | string | WhatsApp contact. |
fax | string | Fax number. |
instagram | string | Instagram handle or URL. |
twitter | string | Twitter / X handle or URL. |
linkedin | string | LinkedIn URL. |
youtube | string | YouTube URL. |
tiktok | string | TikTok handle or URL. |
operator | string | Operator of the business, if tagged. |
cuisine | string[] | Cuisine tags (for food businesses). Empty when none. |
description | string | Free-text description, if tagged. |
wikidata | string | Wikidata identifier, if linked. |
wikipedia | string | Wikipedia reference, if linked. |
suburb | string | Suburb or neighbourhood. |
unit | string | Unit or suite number. |
googleMapsUrl | string | Ready-to-open Google Maps search link for the coordinates. |
source | string | Data source. Always OpenStreetMap. |
observedAt | string | ISO 8601 timestamp of when the record was collected. |
enrichedEmail | string | Contact email found by the paid add-on (only when enrichContacts is on). |
enrichedContactName | string | Contact person's name found by the add-on. |
enrichedJobTitle | string | Contact person's job title found by the add-on. |
enrichedEmailStatus | string | Deliverability status of the enriched email. |
enrichedSource | string | Source URL the enriched contact was found on. |
enrichedConfidence | string | Confidence level of the enriched contact. |
Example output record
Real record from a live run (input {"category": "restaurant", "city": "Austin, Texas", "maxBusinesses": 10}):
{"osmId": "node/457485574","name": "Galaxy Cafe","category": "restaurant","phone": null,"email": null,"website": "https://www.galaxycafeaustin.com/","facebook": null,"street": "1000 West Lynn St","city": null,"state": null,"postcode": "78703","country": null,"latitude": 30.2794133,"longitude": -97.7600581,"openingHours": "Th-Tu 08:00-21:00; We 08:00-14:00","brand": null,"mobile": null,"whatsapp": null,"fax": null,"instagram": "galaxycafeatx","twitter": null,"linkedin": null,"youtube": null,"tiktok": null,"operator": null,"cuisine": ["american"],"description": null,"wikidata": null,"wikipedia": null,"suburb": null,"unit": null,"googleMapsUrl": "https://www.google.com/maps/search/?api=1&query=30.2794133,-97.7600581","source": "OpenStreetMap","observedAt": "2026-08-10T14:04:22.720Z"}
Run via API and CLI
Start a run and wait for it to finish, then read the dataset. Replace <TOKEN> with your Apify API token.
Run synchronously and get dataset items in one call:
curl -X POST "https://api.apify.com/v2/acts/scrapers_lat~overpass-osm-business-leads-scraper/run-sync-get-dataset-items?token=<TOKEN>" \-H "Content-Type: application/json" \-d '{"category":"restaurant","city":"Austin, Texas","maxBusinesses":25}'
Start a run asynchronously:
curl -X POST "https://api.apify.com/v2/acts/scrapers_lat~overpass-osm-business-leads-scraper/runs?token=<TOKEN>" \-H "Content-Type: application/json" \-d '{"category":"dentist","city":"Miami, Florida","maxBusinesses":100,"withContactOnly":true}'
Apify CLI:
apify call scrapers_lat/overpass-osm-business-leads-scraper \--input '{"category":"shop=bakery","city":"Sydney"}'
Fetch results
Every run writes to a dataset. Fetch items as JSON, CSV, or Excel by changing format:
# JSONcurl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=json"# CSVcurl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=csv"# Paginate large datasetscurl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&offset=1000&limit=1000"
<DATASET_ID> is returned as defaultDatasetId in the run object. Use offset and limit to page through large result sets. clean=true drops empty and internal fields.
Billing and limits
- Pay per result. You are charged per business returned (
resultevent). See the pricing tab for the current per-result price. - Contact enrichment add-on. When
enrichContactsis on, each enrichment attempt is billed, plus an extra charge only when an email is found. Leave it off to pay only for base leads. - No charge on failure. Empty runs cost nothing.
- Spend cap respected. Set
maxTotalChargeUsdon the run; once reached, the actor stops emitting and charging further billable results. - Free Apify plans are capped at 10 businesses per run, and the enrichment add-on is capped at 3 leads. Upgrade for higher
maxBusinesses.
FAQ and troubleshooting
A run returned 0 records. Why?
The category or area matched nothing in the source. Loosen the filter (widen the city or bounding box), try a broader category word, or drop withContactOnly. Zero-result runs are not charged.
Which categories can I search?
Common words work out of the box: restaurant, cafe, bar, hotel, dentist, doctor, pharmacy, lawyer, accountant, real_estate, plumber, electrician, gym, supermarket, hairdresser, and many more. You can also pass any precise category as key=value.
How do I target an exact area? Use a city name for a quick start, or provide the four bounding box values (south, west, north, east) to cover an exact rectangle on the map.
Do all businesses have a phone, email, and website?
No. These fields are filled only when the business has published them. Use withContactOnly to keep just the leads with at least one contact detail.
How does the contact enrichment add-on work?
For each lead that has no email, it attempts to find a public business contact email and a contact person's name, writing them to the enriched* fields. It is off by default and billed only when enabled.
How fresh is the data?
Records are read live at run time, so each reflects the latest published details. See observedAt for the exact collection time.
Example tasks
Preconfigured templates for common scenarios. Open one and press Run, or use it as a starting point:
- Scrape Restaurant Leads in Austin
- Scrape Dentist Leads in Miami
- Scrape Lawyer Leads in Denver
- Scrape Hotel Leads in Chicago
- Scrape Cafe Leads in Seattle
- Scrape Pharmacy Leads in London
- Scrape Plumber Leads in Berlin
- Scrape Gym Leads in Toronto
- Scrape Bakery Leads in Sydney
- Scrape Car Repair Leads in Mexico City
Related scrapers
- Google Maps Business Leads Scraper: Local businesses with contacts by keyword and area.
- Hotfrog Business Scraper: Business directory listings with contacts.
- Europages Suppliers Scraper: European B2B suppliers and manufacturers.
- Cybo Business Leads Scraper: Global business directory leads.
More scrapers at scrapers.lat
Built and maintained by scrapers.lat, where we publish scrapers for US and Latin American public platforms: company registries, government data, finance, e-commerce and more. Browse the catalog or request a custom scraper at scrapers.lat.
Independent tool built on open, publicly available community map data. Use the results in accordance with the source's terms and applicable laws.
