OpenLeads
Describe a customer. Get the people, with every email labeled by how we know it.
OpenLeads searches free public sources for the businesses and people you describe,
finds their work emails, and marks each one found, pattern or guessed. Then it
works them like Apollo does: lists, ICP scoring, sequences, tasks and a deal pipeline.
It runs on your machine, with no API keys and nothing to pay.
[PyPI]
[npm]
[Python 3.8+]
[CI]
[Live benchmark]
[License: AGPL v3]
Website |
Docs |
Live benchmark |
Changelog
[The People page of the OpenLeads dashboard: a filter column beside a table of contacts with title, company, email with its evidence mark, stage and last contact.]
The local dashboard on the demo workspace (openleads demo, invented data).
Every email says how we know it
Most free finders call a first.last@ guess "valid". OpenLeads labels each address
with where it came from, then decides separately whether it is safe to send:
Seven checks decide the tier, and most of them work without port 25, which home
internet providers block: two DNS-over-HTTPS resolvers that must agree on the mail
server, SPF and DMARC, disposable/role/free-mail lists, Gravatar, published
addresses, learned company patterns, and SMTP with catch-all detection when port 25
is open. How the scoring works.
Measured against live data every night
Unit tests can't tell you whether "dentists in Austin" returns dentists, so a GitHub
Action runs the same real searches against the live sources every night, asks for ten
leads each, and commits what came back to BENCHMARK.md, empty
nights included. Run it yourself with openleads bench.
What you can search
One sentence fans out across the sources that fit it. You never have to pick one,
but -s name pins a source.
Companies are turned into named people from their team and about pages. When a
search comes back short, OpenLeads says which source failed or ran out of time and
what to try next. Need a source we don't have? A source is
one Python file.
Work your leads
Everything you find lands in a local workspace: the same data in the dashboard, the
terminal and your AI assistant.
Workspace guide | Sequences guide | Moving from Apollo
Use it from Python
Python API
Use it from Claude, Cursor or Claude Code
OpenLeads is an MCP server. Your assistant can find and verify leads
mid-conversation, and work your lists, tasks and sequences:
"Find 10 law firms in London with emails we can actually send to, save them to a list called London law, and give me a call task for each partner."
The assistant can search and edit your workspace, but it never sends email itself.
Automate it
Workflows are n8n-style node graphs you draw in the dashboard: triggers (schedule,
new leads, a reply), find, verify, filter and split by tier, write email, wait, send,
add to a list or sequence, create tasks, and export. Test runs never send; every run
shows what each node did. Sends stay inside your daily cap, warmup ramp and business
hours, and stop for anyone who replies.
Workflows | Writing emails | Timed runs. Exports go to CSV, Google
Sheets, Notion, Airtable, HubSpot or any webhook. There is also a GitHub Action:
Install
Python 3.8 or newer on macOS, Linux or Windows. Full walkthrough:
quickstart.
Commands
openleads --help lists every command by group.
How it works
The engine is Python standard library only. Requests that fail transiently are
retried, a search returns within its time budget with whatever finished, and every
run produces a report of which sources answered, which fell back and why. Your
leads, drafts, mailbox credentials, learned patterns and the whole workspace live in
~/.openleads. There is no hosted backend, no account and no telemetry.
Architecture.
Responsible use
OpenLeads is for legitimate prospecting, recruiting and research. You are
responsible for anti-spam law (CAN-SPAM, GDPR, CASL) and each source's terms. It
ships the guardrails: dry runs by default, a suppression list, one-click
unsubscribe, warmup caps and no tracking pixels.
Responsible use.
License
Open source under AGPL-3.0. Using OpenLeads is free, including at your
company. If you embed it in a closed-source product, or run a modified version as a
service without publishing your changes, you need a
commercial license.
Contributing
The most useful contribution is a new source (guide); the next
is a query that openleads bench scores badly, with the fix. See
CONTRIBUTING.md. Thanks to everyone who has sent a pull
request, including @xmejl, @harrisonoconnorhover and @Shalinipks for 5.1.
Thanks
OpenStreetMap contributors,
OpenAlex, yc-oss/api,
Hugging Face, the NPI Registry,
SEC EDGAR, Wikidata, Gravatar, and the US Social Security Administration for its
given-name data. The dashboard and website use
Atkinson Hyperlegible by the Braille
Institute.