Local Leads Finder
Fast, scalable local business lead generation powered by Decodo Web Scraping API.
Turn a simple keyword and location into a ready-to-use dataset of local businesses from Google Maps. Perfect for freelancers, agencies, and SMBs who need quality leads at scale.
Table of Contents
Quick Start
Option 1: Use the hosted web app (recommended)
- Visit Local Leads Finder website to use Local Leads Finder instantly.
- Enter your Decodo username and password directly in the UI when prompted.
- Start a search and download results without any local setup.
Option 2: Run locally
Step 1: Installation
# Clone the repository
git clone https://github.com/yourusername/local-leads-finder.git
cd local-leads-finder
# Install dependencies
pip install -r requirements.txt
# Or install as a package
pip install -e .
Step 2: Get Decodo credentials
Get your Scraper API credentials from Decodo Dashboard:
- Navigate to "Scraper" tab
- Find your username and password
Step 3: Configure environment (CLI only)
Note: The web interface has its own credential management - users enter credentials directly in the UI.
For CLI usage, create a .env file:
# Create .env file
cp .env.example .env
# Add your credentials
echo "DECODO_USERNAME=your_username" >> .env
echo "DECODO_PASSWORD=your_password" >> .env
Step 4: Start collecting leads
Option A: Web Interface
cd webapp
python app.py
Check the terminal output for the exact URL (default is http://localhost:5000, but another free port may be used) and open it in your browser.
Option B: Command Line
leads-finder --query "dentist" --city "Toronto" --out leads.csv
Usage
Web Interface
The web interface provides a modern, user-friendly way to find leads:
-
Start the web server:
cd webapp python app.py
-
Open your browser to the URL printed in the terminal (defaults to
http://localhost:5000, but may vary if that port is in use) -
Fill in the search form:
- Business Type (e.g., "dentist", "pizza restaurant")
- Location with a given radius to look around
- City (e.g., "Toronto", "New York")
- Results Limit (1-1000)
- Country (optional)
-
Watch real-time progress as leads are collected
-
View results in an interactive table
-
Export to CSV or JSON with one click
Command Line Interface
Basic Examples
# Find dentists in Toronto
leads-finder --query "dentist" --city "Toronto" --out toronto_dentists.csv
# Find pizza places in New York (200 results)
leads-finder --query "pizza" --city "New York" --limit 200 --out nyc_pizza.csv
# Find plumbers in Montreal
leads-finder --query "plumber" --city "Montreal" --out montreal_plumbers.csv
CLI Options
leads-finder --help
| Option | Description | Default |
|---|---|---|
--query |
Search keyword (e.g., "dentist", "pizza") | Required |
--city |
Target city name | Required |
--limit |
Max results to collect | 100 |
--out |
Output file (CSV or JSON) | leads.csv |
--rps |
Requests per second rate limit | 1.0 |
--username |
Decodo username | DECODO_USERNAME env var |
--password |
Decodo password | DECODO_PASSWORD env var |
Batch Processing
# Process multiple cities
for city in "Toronto" "Montreal" "Vancouver"; do
leads-finder --query "dentist" --city "$city" --out "dentists_$city.csv"
done
Export to JSON
leads-finder --query "gym" --city "Los Angeles" --out gyms.json
Output Format
CSV file with the following columns:
| Field | Description |
|---|---|
name |
Business name |
category |
Primary category or type |
phone |
Contact number |
website |
Business website |
rating |
Google Maps rating (1-5) |
reviews_count |
Number of reviews |
address |
Full address |
city |
City name |
country |
Country code (US, CA, etc.) |
lat |
Latitude |
lon |
Longitude |
source |
Data source (Google Maps) |
scraped_at |
ISO timestamp |
Docker Usage
Build the image
docker build -t leads-finder .
Run the CLI inside Docker
docker run --rm \
-e DECODO_USERNAME=your_username \
-e DECODO_PASSWORD=your_password \
-v "$(pwd)/output:/out" \
leads-finder \
--query "dentist" --city "Toronto" --out /out/leads.csv
Run the web interface inside Docker
docker run --rm \
-p 5000:5000 \
-e DECODO_USERNAME=your_username \
-e DECODO_PASSWORD=your_password \
leads-finder \
web
Open your browser to http://localhost:5000. To use a different port, change the mapping (-p 8080:8080) and set -e PORT=8080.
API Request Example
from leads_finder.core.scraper_api_session import ScraperAPISession
session = ScraperAPISession(username="user", password="pass")
results = session.google_maps_search(
query="dentist",
geo="Toronto",
limit=100
)
businesses = results.get("results", [])
Future Features
- Social media profiles
- Business hours
- Scheduled scraping
Contributing
Contributions welcome! Please open an issue or PR.
Author
Metadata
Release files for leads-finder 1.0.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| leads_finder-1.0.1.tar.gz | 18.5 kB | Without provenance | Details for leads_finder-1.0.1.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| leads_finder-1.0.1-py3-none-any.whl | Python 3 | none | any | Details for leads_finder-1.0.1-py3-none-any.whl |
Total release size: 36.7 kB
Release files / leads_finder-1.0.1.tar.gz
| Download URL | leads_finder-1.0.1.tar.gz |
|---|---|
| Size | 18.5 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
c496caa2fc16308b3119f7a1dfbc5b0a12229e90741f03a55c208d4c7970502f
|
|
BLAKE2b-256 checksum How to use checksums |
3b2b2bb91760241c14a370110f1e1f4c85d6ab80977d55b7dcee2a13c9399e70
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.9.18
|
Release files / leads_finder-1.0.1-py3-none-any.whl
| Download URL | leads_finder-1.0.1-py3-none-any.whl |
|---|---|
| Size | 18.2 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
4b6a7dfe1225ba0bb5c32bdcbfae9222930e6ad43b674a861958317f6de59451
|
|
BLAKE2b-256 checksum How to use checksums |
1f0871d89276c75b1e39f73f7a4fb6be6a85c0273f1c6b261e14763eed4fefb7
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.9.18
|
Security for leads-finder 1.0.1
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.