Healthcare Provider Lead Scraper
LEAD GENERATIONSEO TOOLS
Healthcare Provider Lead Scraper
Scrape dentist, doctor, clinic, and orthodontist leads from Google Maps. Returns name, address, phone, rating, reviews count, coordinates, and category for each provider.
What it does
Given a search query (e.g. "dentist", "orthodontist", "urgent care") and a location (e.g. "New York, NY"), the actor:
- Opens Google Maps and searches for providers matching the query near the location
- Scrolls the results panel to load up to
maxItemslistings - Extracts structured data from each result card
- Returns one record per provider
Google Maps is a fully client-rendered SPA — a real browser (Playwright + Chromium) with residential proxy is required to receive the hydrated search results.
Input
| Field | Type | Required | Description |
|---|---|---|---|
searchQuery |
string | Yes | Type of provider to search for (e.g. "dentist", "orthodontist", "pediatric dentist") |
location |
string | Yes | City and state or ZIP code (e.g. "New York, NY", "90210") |
maxItems |
integer | Yes | Maximum number of results to return (default: 10) |
Example input
{
"searchQuery": "dentist",
"location": "New York, NY",
"maxItems": 20
}
Output
Each result is one dataset record:
| Field | Type | Description |
|---|---|---|
place_id |
string | Google Maps internal place CID (hex format) |
name |
string | Business name |
address |
string | Street address (parsed from listing card) |
city |
string | City (not available from listing cards; enriched in future version) |
state |
string | State (not available from listing cards; enriched in future version) |
postal_code |
string | ZIP/postal code (not available from listing cards) |
country |
string | Country code (default: "US") |
phone |
string | Phone number (when shown in listing card) |
website |
string | Website URL (not available from listing cards; planned for v0.2) |
rating |
number | Average star rating (e.g. 4.9) |
reviews_count |
integer | Total number of reviews |
category |
string | Business category (e.g. "Dentist", "Orthodontist") |
latitude |
number | Latitude from Google Maps URL |
longitude |
number | Longitude from Google Maps URL |
maps_url |
string | Direct Google Maps place URL |
search_query |
string | The searchQuery input that produced this result |
search_location |
string | The location input that produced this result |
scraped_at |
string | ISO 8601 timestamp of when the record was scraped |
Example output record
{
"place_id": "0x89c2598b826e5555:0x6d6e8f617e6f7d54",
"name": "Park Slope Dental Associates",
"address": "209 E 56th St 1st floor",
"city": "",
"state": "",
"postal_code": "",
"country": "US",
"phone": "(212) 555-0100",
"website": "",
"rating": 4.9,
"reviews_count": 312,
"category": "Dentist",
"latitude": 40.7589,
"longitude": -73.9728,
"maps_url": "https://www.google.com/maps/place/Park+Slope+Dental+Associates/...",
"search_query": "dentist",
"search_location": "New York, NY",
"scraped_at": "2026-06-05T02:30:00.000Z"
}
Notes
- Residential proxy is required. Google Maps blocks datacenter IPs. Proxy cost is included in the actor's price.
- Google Maps shows up to ~20 organic results per search query. For broader coverage, run multiple searches with specific neighborhoods or ZIP codes.
- Phone and website are not consistently shown in listing cards. Phone is extracted when present; website enrichment is planned for a future version.
- Coordinates (latitude, longitude) are extracted from the Maps place URL — no additional API calls required.
maxItemscaps results at the Google Maps listing limit (~20). Set lower to reduce run time and cost.