Free, open-source Apollo alternative: a universal entityโverified-email engine with pluggable free data sources (founders, developers, doctors, researchers) and an interactive chat CLI.
Project description
๐งฒ OpenLeads
The free, open-source Apollo alternative โ for everyone.
Find founders, developers, doctors, researchers โ anyone โ and verify their emails, using only free, public data. No paid APIs. No API keys. No seat fees. Now with an interactive chat CLI.
Apollo, Hunter, RocketReach, and ZoomInfo all sell the same two things: a contact database and email verification. Their moat is the database. OpenLeads inverts it.
OpenLeads is a universal
entity โ verified emailengine, fed by a registry of pluggable, free, keyless public data sources.
The email engine doesn't care who you're looking for. So coverage grows by adding small source plugins, not by paying for a database. v2.0 ships sources for startup founders, open-source developers, U.S. doctors, and academic researchers โ and you can add any vertical (lawyers, podcasters, real-estate agentsโฆ) by dropping a single .py file in a folder.
All for $0, in code you can read in one sitting.
openleads> find 25 AI founders, verified emails only
plan source=yc count=25 filter=AI verified-only parser=rule
โโโโโณโโโโโณโโโโโโโโโโโโโโโโโโณโโโโโโโโโโโโโโโณโโโโโโโโโโณโโโโโโโโโโณโโโโโโโโ
โ # โ โ โ Email โ Name โ Title โ Org โ Score โ
โกโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฉ
โ 1 โ OK โ ada@acme.ai โ Ada Lovelace โ Founder โ Acme โ 96 โ
โ 2 โ ~CAโ grace@cobol.dev โ Grace Hopper โ CEO โ COBOLwx โ 71 โ
โโโโโดโโโโโดโโโโโโโโโโโโโโโโโโดโโโโโโโโโโโโโโโดโโโโโโโโโโดโโโโโโโโโโดโโโโโโโโ
25 leads ยท 18 verified ยท /export FILE to save
OK= SMTP-verified ยท~CA= catch-all best-guess ยท~PG= MX-only pattern guess ยท Score = 0โ100 confidence
โจ Why OpenLeads
| OpenLeads | Apollo / Hunter (free tier) | |
|---|---|---|
| Cost | $0, forever | Credit-limited, then paid |
| API key required | โ None | โ Required |
| Who you can find | Founders, devs, doctors, researchers, + any vertical you plug in | Their database only |
| Email verification | โ
Live SMTP RCPT + 0โ100 score |
Paid feature |
| Catch-all detection | โ Yes | Sometimes |
| Interactive chat CLI | โ
Yes (openleads chat) |
โ |
| You own the code | โ Readable, hackable, extensible | โ Black box |
| Output | โ CSV / JSON / NDJSON | Often gated |
| Core dependencies | Zero (stdlib only) | โ |
๐ Install
# Python (recommended) โ zero-dependency engine + plain CLI
pip install openleads
# โฆwith the pretty interactive chat TUI
pip install "openleads[chat]"
# โฆwith the cold-email companion too
pip install "openleads[all]"
Prefer Node? A thin wrapper lets you run it with npx (it installs the Python package on first use):
npx openleads find "50 fintech founders verified only"
# or: npm i -g openleads
โก Quickstart
# Launch the interactive chat โ just type what you want
openleads
# Or go one-shot, non-interactive:
openleads find "50 fintech founders, verified only" --out leads.csv
openleads find --source npi --keyword pediatric --location CA --format json
openleads find "rust developers in Berlin" --source github --format ndjson --out devs.ndjson
# Verify specific addresses
openleads verify ada@acme.io grace@cobol.dev
# See what you can search
openleads sources
No signup, no key, no database fees.
๐ฌ The chat CLI
openleads chat (or just openleads) opens a Claude-Code-style REPL. Type requests in plain English and refine conversationally:
openleads> pediatricians in California
openleads> only verified
openleads> /source github
openleads> machine learning researchers as ndjson
openleads> /export leads.ndjson
- Works fully offline. A rule-based intent parser understands counts, verticals, locations, filters, and
verified onlyโ no API key needed. - Optionally smarter. Set
OPENROUTER_API_KEY(a free model works) and free-form input is parsed by an LLM. The active mode is always shown. - Slash commands for precision:
/source,/count,/verified,/format,/export,/sources,/cache,/help,/quit.
๐งฉ Sources (and adding your own)
$ openleads sources
github [people ] developers & open-source orgs
npi [people ] U.S. doctors & healthcare providers
openalex [people ] researchers & academics
producthunt [company] trending products & startups
yc [company] startup founders (Y Combinator)
All are keyless and free. Want a vertical we don't ship โ recruiters, lawyers, real-estate agents, your CRM export? Drop a *.py file in ~/.openleads/sources/:
from openleads.sources.base import Source
from openleads.models import Entity, Query
class LawyersSource(Source):
name = "lawyers"
kind = "people"
vertical = "attorneys"
description = "State bar directory."
def search(self, query: Query):
for row in fetch_from_some_free_directory(query):
yield Entity(full_name=row["name"], organization=row["firm"],
domain=row["firm_domain"], source=self.name)
Run openleads sources and it's there. The email engine handles the rest. Full guide: docs/sources.md.
๐ฆ Output formats
openleads find "20 founders" --format csv # default; CRM/mail-merge ready
openleads find "20 founders" --format json # array, includes score + signals
openleads find "20 founders" --format ndjson # one lead per line, streamable
openleads find "20 founders" --format json --out - # write to stdout
The CSV schema is a superset of v1's, so the cold-email companion and any existing tooling keep working.
๐ How it works
flowchart LR
Q[Your request<br/>chat or CLI] --> I[Intent parser<br/>rule-based ยฑ LLM]
I --> S[Source plugin<br/>yc ยท github ยท npi ยท openalex ยท โฆ]
S --> E[Email engine<br/>multi-resolver MX โ permutations โ SMTP RCPT]
E --> C[Confidence score 0โ100<br/>+ honest label]
C --> O[CSV ยท JSON ยท NDJSON]
E <--> K[(SQLite cache<br/>MX ยท SMTP ยท datasets)]
The crown jewel is the email engine (deep dive): MX cross-checked across two DNS-over-HTTPS resolvers, common name permutations, and a real SMTP RCPT probe (no message is ever sent) with catch-all detection. Results carry an explainable 0โ100 score. A SQLite cache avoids re-probing domains and mail servers between runs.
๐ก SMTP verification needs outbound port 25. Works on most servers; some home ISPs block it, in which case OpenLeads gracefully falls back to MX-validated pattern guesses.
๐จ Bonus: cold-email companion
openleads campaign turns leads.csv into personalized outreach โ LLM-drafted (free OpenRouter models supported), clean formatting, placeholder guards, sends over your own SMTP, and saves a copy to Sent. Dry-run by default; --live to send.
pip install "openleads[campaign]"
cp .env.example .env # add your SMTP + OpenRouter creds
openleads campaign # dry run (preview)
openleads campaign --live # send for real
โ ๏ธ This is the only part that touches your mailbox. The lead engine never sends anything.
๐งญ Responsible use
OpenLeads is for legitimate outreach, recruiting, research, and prospecting. Some verticals carry extra weight โ e.g. healthcare providers (NPI) and academics โ so please read docs/responsible-use.md. You are responsible for anti-spam law (CAN-SPAM, GDPR, CASL) and each source's terms.
๐บ๏ธ What's new in v2.0
- โ
Installable package +
openleadsCLI (pip & npx) - โ Interactive chat REPL (rule-based, LLM-optional)
- โ Pluggable sources + 4 new keyless verticals (GitHub, NPI, OpenAlex, ProductHunt)
- โ Confidence scoring (0โ100) with multi-resolver MX cross-checks
- โ SQLite caching layer
- โ
--format json/ndjsonoutput
See the full CHANGELOG.
๐ค Contributing
PRs very welcome โ see CONTRIBUTING.md. The easiest high-impact contribution is a new source plugin (guide) โ that's literally how OpenLeads becomes "Apollo for everyone."
๐ License
PolyForm Noncommercial 1.0.0 โ free for personal, research, educational, and nonprofit use. Commercial use? See COMMERCIAL-LICENSE.md.
๐ Acknowledgements
yc-oss/api ยท OpenAlex ยท NPI Registry ยท GitHub & ProductHunt public data ยท and everyone who has ever rage-quit a "request a demo" button.
If OpenLeads saved you a subscription, consider leaving a โญ โ it genuinely helps.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file openleads-2.0.0.tar.gz.
File metadata
- Download URL: openleads-2.0.0.tar.gz
- Upload date:
- Size: 52.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.9.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
baf4de7a4b726fb12f13fc7e5982f6dd2eab22c9645ae11ac299b931b8c7eb22
|
|
| MD5 |
85e119b6a6ff4e9da2e69243560c5354
|
|
| BLAKE2b-256 |
b3e4eb4ef1ca846590cf657c838d690975272c5cb7f05df91490c301b433fa46
|
File details
Details for the file openleads-2.0.0-py3-none-any.whl.
File metadata
- Download URL: openleads-2.0.0-py3-none-any.whl
- Upload date:
- Size: 51.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.9.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7958b69fe516d345102488949287f2a8d34b2dad2dc5503013464270b1abf4f8
|
|
| MD5 |
5c8950d784242af857f238ad1440cf8a
|
|
| BLAKE2b-256 |
80326c3524766949a8e7b815b86f9838bf0d318aa51078ee3cc3dcb759aeb204
|