Scrapes Google Maps to find local businesses that have a phone number but no website — ideal prospects for offering web development services.
- Searches Google Maps for a business type + location
- Scrolls through results to collect listings
- Visits each business page to extract phone, address, website, rating, and category
- Filters to businesses with a phone but no website
- Exports leads to CSV or JSON
pip install -r requirements.txt
playwright install chromiumNo API keys needed.
# Basic (checks 20 businesses)
python find_leads.py -q "taquerias" -l "Tulsa, OK"
# Check more businesses
python find_leads.py -q "barber shops" -l "Memphis, TN" --max 40
# Output as JSON
python find_leads.py -q "auto repair" -l "Omaha, NE" -o leads.json
# Include all businesses (even ones with websites)
python find_leads.py -q "nail salons" -l "Fresno, CA" --all
# Show the browser window (useful for debugging)
python find_leads.py -q "food trucks" -l "Portland, OR" --headedGenerates a leads.csv (default) with these columns:
| name | phone | address | category | rating | reviews | google_maps |
|---|
| Flag | Description |
|---|---|
-q, --query |
Business type to search for (required) |
-l, --location |
City or area (required) |
-m, --max |
Max businesses to check (default: 20) |
-o, --output |
Output file, .csv or .json (default: leads.csv) |
--all |
Include all businesses, not just ones without websites |
--headed |
Show the browser window |
These business types are most likely to lack a website:
- Food: taquerias, food trucks, bakeries, catering
- Personal care: barber shops, nail salons, hair braiding
- Services: cleaning services, handyman, mobile mechanics, junk removal
- Trades: welders, fencing contractors, concrete work
Smaller cities and suburbs tend to have a higher hit rate than major metros.
- Each run takes roughly 1-2 minutes per 20 businesses
- Built-in rate limiting between page visits to avoid being blocked
- Uses a stealth headless browser to bypass bot detection