The Challenge of Multi-City Scraping at Scale
Scraping a single city like "Dentists in Miami, FL" is straightforward. But when your agency needs to build nationwide lead databases across 250+ metropolitan areas, naive scraping approaches collapse under three major bottlenecks:
Bypassing the 120-Lead Cap
Google Maps natively caps search results at ~120 listings per query. While standard scrapers get stuck at 120, Bolt Scraper automatically bypasses the 120-lead limit, extracting more than 120 leads per keyword out of the box.
Heavy Duplicate Overlap
Querying adjacent suburbs (e.g., Dallas, Plano, Frisco) returns overlapping service-area businesses. Bolt Scraper automatically deduplicates these in the cloud using place_id.
Data Pipeline Throughput
Running hundreds of locations sequentially in a desktop browser takes days. Scaling requires asynchronous cloud scraper processing.
1. How to Structure Multi-City Keyword Lists
The foundation of high-yield prospecting is granular geographic targeting. Break broad regions down into municipality or neighborhood keywords:
| Ineffective Broad Query | Optimal Granular Query Structure | Yield Increase |
|---|---|---|
"Plumbers in Ohio" | "Plumbers in Columbus, OH", "Plumbers in Cleveland, OH", "Plumbers in Cincinnati, OH" | +450% leads |
"Roofers in Houston" | "Roofers in The Woodlands, TX", "Roofers in Katy, TX", "Roofers in Sugar Land, TX" | +310% leads |
"HVAC in London" | "HVAC in Camden", "HVAC in Westminster", "HVAC in Croydon" | +280% leads |
2. Maximizing Yield with Ultra Mode (Up to 3x More Leads)
Even without Ultra Mode, Bolt Scraper extracts more than 120 leads per keyword, breaking through Google Maps' native 120-lead cap.
However, in hyper-dense urban centers like Manhattan, Central Chicago, or Greater London, thousands of businesses are packed into tight commercial zones. This is where Ultra Mode provides maximum coverage.
When launching jobs programmatically, you have two options depending on your latency needs:
Option A: Synchronous Real-time Search API
For live search queries or interactive web apps where you need immediate Google Maps rankings and business details:
curl -X POST "https://boltscraper.com/api/v1/maps/search" \
-H "Authorization: Bearer bs_YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"keyword": "commercial roofing in Austin, TX",
"page": 1,
"hl": "en"
}' Option B: Asynchronous Batch Pipeline Jobs (Multi-Metro with Ultra Mode)
For large-scale nationwide campaigns requiring website crawling (emails & socials) and Ultra Mode deep extraction:
import requests
ENDPOINT = "https://boltscraper.com/api/v1/maps/jobs"
HEADERS = {
"Authorization": "Bearer bs_YOUR_API_KEY",
"Content-Type": "application/json"
}
# Nationwide niche expansion: Top Texas Metros
TARGET_METROS = [
"Commercial roofing in Austin, TX",
"Commercial roofing in Round Rock, TX",
"Commercial roofing in San Antonio, TX",
"Commercial roofing in Dallas, TX",
"Commercial roofing in Fort Worth, TX",
"Commercial roofing in Houston, TX"
]
payload = {
"keywords": TARGET_METROS,
"scrape_websites": True, # Crawls websites for contact emails and social media
"ultra_mode": True, # Extracts up to 3x more leads
"webhook_url": "https://api.yourcrm.com/webhooks/multi-city-leads"
}
response = requests.post(ENDPOINT, headers=HEADERS, json=payload)
print("Batch Job Launched:", response.json()) 3. Automatic Cloud Deduplication: Zero Manual Effort
When querying multiple adjacent cities or overlapping metropolitan areas, service contractors inevitably appear in several searches.
Built-in Place ID Deduplication
You don't have to build complex deduplication filters or maintain separate tracking tables. Bolt Scraper automatically deduplicates listings across all keywords in your job in the cloud using Google's unique, permanent place_id. Your output dataset is clean, unique, and ready for CRM import.
4. Feed-Ready Data Structure for Outbound Sales Reps
The leads delivered through the API or CSV download are formatted to map directly into CRM properties (HubSpot, Salesforce, Pipedrive) and cold email tools (Lemlist, Instantly, Smartlead):
{
"place_id": "ChIJLw-v9uOnRIYRA34r2mS5fXQ",
"title": "Apex Roofing & Construction",
"category": "Roofing contractor",
"phone": "+1 512-555-0144",
"website": "https://apexroofingtx.com",
"email": "[email protected]",
"address": "1400 Congress Ave, Austin, TX 78701",
"city": "Austin",
"state": "TX",
"rating": 4.9,
"reviews_count": 188,
"instagram": "https://instagram.com/apexroofingtx",
"facebook": "https://facebook.com/apexroofingtx",
"linkedin": "https://linkedin.com/company/apex-roofing-tx"
} To automate these multi-city sweeps so they execute on a recurring weekly schedule, read our tutorial on how to schedule Google Maps scraping with webhooks. If your team is evaluating the cost advantages over native services, see our Google Places API alternative / comparison, or build visual workflows with our Google Maps scraper n8n / Make integration.
Part of the Google Maps Scraping Playbook
Explore the other core guides in this topic cluster to build robust, automated prospecting pipelines:
Scale Your Lead Pipeline Nationwide
Extract hundreds of cities in parallel with automatic cloud deduplication, website email scraping, and webhook delivery. Bypass the 120-lead limit natively on every search.
Instant cloud setup • Permanent CSV/JSON export • Test live Google Maps API for free & view docs
Frequently Asked Questions
POST /api/v1/maps/jobs. The queries run in parallel across cloud workers, and a single webhook event notification arrives when the full batch is completed. place_id. You never have to manually clean duplicate rows.