by asiifdev
Open-source AI sales & marketing OS: find leads, draft outreach in your own voice, approve, close. Self-host or use alatpintar.id
# Add to your Claude Code skills
git clone https://github.com/asiifdev/business-leads-ai-automationGuides for using ai agents skills like business-leads-ai-automation.
See how business-leads-ai-automation compares with popular alternatives.
business-leads-ai-automation is an open-source ai agents skill for AI coding assistants such as Claude Code, Codex CLI, and ChatGPT, built by asiifdev. Open-source AI sales & marketing OS: find leads, draft outreach in your own voice, approve, close. Self-host or use alatpintar.id. It has 211 GitHub stars.
business-leads-ai-automation's catalog security scan is still queued. You can run an instant dependency and prompt-injection check now with the "Scan for vulnerabilities" button above.
Clone the repository with "git clone https://github.com/asiifdev/business-leads-ai-automation" and add it to your Claude Code skills directory (see the Installation section above).
business-leads-ai-automation is primarily written in HTML. It is open-source under asiifdev on GitHub, so you can review or fork the full source.
Yes. SkillsLLM lists many other AI Agents skills you can browse and compare side by side. Open the AI Agents category from the badge at the top of this page, or use the Related Skills and comparison links further down to weigh business-leads-ai-automation against similar tools.
No comments yet. Be the first to share your thoughts!
⚠️ Third-Party Software Notice
This skill is third-party open-source software developed and hosted independently on GitHub. SkillsLLM is an informational directory and does not control or maintain the underlying repository.
Any security checks, ratings, or warnings displayed by SkillsLLM are automated and limited in scope. They do not constitute a security certification or guarantee that the software is safe, error-free, or free from malicious code, vulnerabilities, compromised dependencies, or prompt-injection risks.
Review the source code, permissions, dependencies, and configuration before installing or running any third-party skill. Use is at your own risk. To the maximum extent permitted by applicable law, SkillsLLM is not liable for losses arising from third-party software.
The deep catalog scan for this skill is still queued. Run an instant dependency check now instead.
Selling to local businesses means hundreds of first messages and just as many follow-ups. Most tools either hide the work behind a bulk sender that gets numbers banned, or leave you to write everything yourself.
Prospex splits the job in two. The AI does the typing: it finds the leads, writes each draft, and drafts the replies and follow-ups. You do the deciding: every message waits in your Outbox until you approve it, and approved messages leave at a pace you set, one at a time.
Prefer not to run servers? The hosted version at alatpintar.id runs Prospex for you. Self-hosting is free under the AGPL.
If Prospex is useful to you, a star helps other people find it.
| Step | What happens |
|---|---|
| Find | Scrape Google Maps by industry and city, with progress per search area and a map of the results. |
| Score | Each lead gets a 0 to 100 score from data completeness, rating (weighted by review count), industry and location, with a bonus when the business has no website. Scoring is rule-based, so it works without any AI key. |
| Draft | The AI writes the first message from the lead's real data (rating, reviews, no website) and your own style. If your knowledge base has the answer, it uses that. If not, it does not quote a price. |
| Approve | Read, edit, approve or reject each draft in the Outbox. Nothing is sent before this step. |
| Send | Approved messages go out through WhatsApp one at a time: hourly and daily caps, quiet hours, random gaps, and a typing indicator before each one. |
| Reply and follow up | A reply updates the lead, cancels pending follow-ups, and creates a reply draft for you. Leads that stay silent get up to two follow-up drafts, after 3 and 5 days. A recipient who writes STOP is never contacted again. |
AI Style is optional. If you use it, you export a few of your own WhatsApp chats (WhatsApp's official Export chat feature, .txt or .zip) and pick which participant is you. Prospex then:
It is retrieval, not model training, so you can delete the profile at any time and nothing remains in a model. Everything can run on your machine with Ollama. How it works, what it costs and how well it did in testing.
WhatsApp bans numbers that behave like bulk senders. Prospex is built around not behaving like one:
| Safeguard | Default |
|---|---|
| Human approval before every message | Always on |
| Messages per hour | 10 (configurable 1 to 30) |
| Messages per day | 80 (configurable) |
| Quiet hours | 21:00 to 07:00 in your timezone |
| Gap between messages | Random, 0.6x to 1.4x of the hourly average |
| Typing indicator | Shown before each message, scaled to its length |
| Number check | Skips numbers that are not on WhatsApp, without counting them as failures |
| STOP handling | Cancels pending messages and blocks the number permanently |
| Opt-out line | Added to every first message and follow-up |
| Circuit breaker | Pauses sending after 3 failures in a row |
| Crash safety | A message interrupted mid-send is marked failed, never resent automatically |
Pace decides the calendar. At the defaults (10 per hour, 80 per day) a list of 1,500 leads takes about 19 days. Raising the daily cap to 140, the most that 10 per hour allows between 07:00 and 21:00, shortens it to about 11 days. Start with a batch of 30 to 50 leads, watch the reply rate and the account, then scale up. Details and the reasoning are in docs/whatsapp-outbox.md.
Two ways to connect WhatsApp. Today Prospex connects as a linked device (Baileys), which works with any number but is unofficial, so use a dedicated business number. An adapter for the official WhatsApp Business Cloud API is planned; the sender already talks to WhatsApp through one provider interface, so adding it does not change the queue. The hosted version will offer both.
| Layer | Technology |
|---|---|
| Frontend | Next.js 16 (App Router), shadcn/ui, Tailwind CSS, Recharts, English and Indonesian interface |
| Backend | NestJS 10, Prisma ORM, REST API with Swagger |
| Database | PostgreSQL 16 with pgvector |
| Queue | BullMQ and Redis 7 for scraping jobs |
| AI | Any OpenAI-compatible provider: OpenAI, OpenRouter, Ollama |
| Baileys (linked device) | |
| Monorepo | Turborepo and pnpm workspaces |
You need Node.js 20+, pnpm 9+ and Docker.
git clone https://github.com/asiifdev/business-leads-ai-automation.git
cd business-leads-ai-automation
pnpm install
cp .env.example apps/api/.env
cp .env.example packages/database/.env
# edit apps/api/.env: DATABASE_URL, JWT_SECRET, ENCRYPTION_KEY, OPENAI_*
docker compose up -d # PostgreSQL 16 with pgvector, and Redis
pnpm --filter @prospex/database db:deploy # apply migrations
pnpm --filter @prospex/database exec prisma generate
pnpm --filter @prospex/api dev # API on :3001
pnpm --filter @prospex/web dev # dashboard on :3000
Open http://localhost:3000, register, and create your first campaign. Swagger lives at http://localhost:3001/api/docs.
Your first outreach, step by step:
The full walkthrough is in docs/USER_GUIDE.md (Indonesian).
Any OpenAI-compatible endpoint works. Drafts need a chat model, and the style and knowledge features need an embedding model (EMBEDDING_MODEL). Switching the embedding model later means re-importing your chats and re-indexing your sources, because vectors from different models cannot be compared.
# OpenAI
OPENAI_API_KEY=sk-...
OPENAI_MODEL=gpt-4o-mini
EMBEDDING_MODEL=text-embedding-3-small
# OpenRouter
OPENAI_API_KEY=sk-or-...
OPENAI_BASE_URL=https://openrouter.ai/api/v1
OPENAI_MODEL=anthropic/claude-haiku-4-5
# Ollama, fully local
OPENAI_API_KEY=ollama
OPENAI_BASE_URL=http://localhost:11434/v1
OPENAI_MODEL=gemma4
EMBEDDING_MODEL=qwen3-embedding
With OPENAI_API_KEY empty, scraping and rule-based scoring still work, and the AI features (drafts, AI Style, knowledge base) are off. Prospex does not fill the gap with canned text. A local model can take around 40 seconds per draft, so drafting runs in the background and the Outbox shows progress.
| Variable | Default | Purpose |
|---|---|---|
WA_AUTH_DIR |
./.wa-auth |
Where linked-device sessions are stored. Mount it as a volume in production and treat it like a password. |
WHATSAPP_DISABLED |
false |
Set to true to turn off the sender, WhatsApp connections and follow-up scheduling (used in CI). |
cp .env.example .env # strong passwords, real API keys
docker compose -f docker-compose.prod.yml up -d
This starts PostgreSQL with pgvector, Redis, the API, the dashboard and Nginx. Keep WA_AUTH_DIR on a persistent volume, otherwise every redeploy asks you t