Downloads · 30 days
0
Abhisingh-18/AI-Lead-Generation-Outreach
AI-Lead-Generation-Outreach is a machine learning model from Abhisingh-18. Use it for the machine learning task on the model card, and read the license before you ship it in a product.
Find local-business leads from Google Maps, audit their web presence with AI, score them with a rule engine, and auto-generate personalized WhatsApp outreach — all stored in PostgreSQL.
Downloads · 30 days
0
Access
Public
Updated Jul 13, 2026
Repo size
—
Likes
1
Public
Click a slice to open those files.
.py122 KB · 44%
From the Hugging Face model README
Find local-business leads from Google Maps, audit their web presence with AI, score them with a rule engine, and auto-generate personalized WhatsApp outreach — all stored in PostgreSQL.
Phase 1 (MVP) is implemented in
backend/. Phase 2 (LangGraph automation) and Phase 3 (multi-source + vision audits + dashboard) are planned — seememory/for the full roadmap.
Google Maps -> Lead Collector -> PostgreSQL
|
Website Analyzer (HTTP/HTML signals)
|
AI Audit Agent (LLM: opportunities + services)
|
Lead Scoring (rule engine, 0-100)
|
Message Generator (LLM: WhatsApp draft)
FastAPI · SQLAlchemy · PostgreSQL · Playwright · BeautifulSoup · httpx · OpenRouter / GLM (Zhipu) via OpenAI-compatible API.
docker compose up -d db
(Or use your own Postgres / Supabase and update DATABASE_URL.)
cd backend
python -m venv .venv
.venv\Scripts\activate # Windows (PowerShell: .venv\Scripts\Activate.ps1)
pip install -r requirements.txt
python -m playwright install chromium
backend/.env already exists (gitignored). Confirm LLM_PROVIDER, keys, and
DATABASE_URL. Copy from .env.example if you need a fresh one.
python run_dev.py
# -> http://localhost:8000/docs (interactive Swagger UI)
Tables are auto-created on startup.
curl -X POST http://localhost:8000/api/scrape \
-H "Content-Type: application/json" \
-d '{"city":"Jaipur","category":"restaurants","max_results":10,"run_pipeline":true}'
curl "http://localhost:8000/api/leads?min_score=70&limit=20"
| Method | Path | Purpose |
|---|---|---|
| POST | /api/scrape | Scrape Google Maps, persist, optionally run pipeline |
| GET | /api/leads | List/filter leads (city, category, status, min_score) |
| GET | /api/leads/{id} | Single lead |
| POST | /api/leads/{id}/process | Re-run audit/score/message for a lead |
| GET | /api/leads/{id}/audits | Audit history |
| GET | /api/leads/{id}/messages | Generated messages |
| GET | /api/stats | Dashboard counters |
| POST | /api/messages/{id}/send | Send one drafted WhatsApp message |
| POST | /api/send/batch | Send all drafts (best leads first, daily cap) |
9648531091):
cd backend
python wa_login.py
WHATSAPP_DRY_RUN=true (default) — simulates sends, marks DB.WHATSAPP_DRY_RUN=false in .env, then:
curl -X POST "http://localhost:8000/api/send/batch?min_score=70&limit=10"
Set in .env. Default is an OpenRouter free model. Strong free options:
deepseek/deepseek-chat-v3.1:freemeta-llama/llama-3.3-70b-instruct:freeqwen/qwen-2.5-72b-instruct:freeGLM (Zhipu) is configured as a fallback — set LLM_PROVIDER=zhipu to use it.
Free models on OpenRouter have rate limits; if you hit them, switch provider/model.
.env. It is gitignored. If a key was ever pasted in chat or
shared, rotate it in the provider dashboard.memory/project-compliance.md.