Skip to main content

🧲 OpenLeads

Find people and their work emails from free public data. No API keys. $0.

Type who you want ("dentists in Austin", "fintech founders", "law firms in London") and OpenLeads searches OpenStreetMap, Y Combinator, GitHub, OpenAlex, SEC EDGAR, Wikidata and company websites, finds the real people, and tells you honestly which emails are confirmed and which are guesses. Then it can write and send the emails on a schedule. It runs on your machine.

License: AGPL v3 PyPI npm Python 3.8+ Zero dependencies CI Live benchmark Stars

pipx install openleads        # or: pip install openleads   ·   npx openleads
openleads find "dentists in Austin"

Website · Docs · Live benchmark · Changelog

A workflow in the OpenLeads dashboard: a schedule triggers Find leads, Verify branches into safe and risky, then Write, Send, Review, and Export. A test run lights each node up with its counts.

A real test run in openleads web: 6 dentists found, 6 safe addresses, 6 drafts, exported to Sheets, nothing sent.


$ openleads find "dentists in Austin" -n 6
  ◆ federated search · local …
    1  ▌safe   info@example-dental.com        Example Dental        ▰▰▰▰▰▰▰▰▰▰  98% found
    2  ▌safe   hello@smile-example.com        Smile Example Co      ▰▰▰▰▰▰▰▰▰▰  98% found
    3  ▌risky  maria.lopez@smile-example.com  Maria Lopez           ▰▰▰▰▰▰▱▱▱▱  62% guessed
    4  ▌safe   d.kim@ortho-example.com        Daniel Kim            ▰▰▰▰▰▰▰▰▰▱  88% pattern
  ──────────────────────────────────────────────────────
  6 leads   4 safe deliverable   2 risky unconfirmed   ██████████████████░░░░░░
  4 found or built from a seen pattern · 2 guessed

Output shape from a real run; businesses and people renamed.

Why it's different

Apollo, Hunter and ZoomInfo sell a contact database and email verification, then charge again for sending. OpenLeads does all three for free, from public data, on your laptop. Two things matter most:

It's honest about every email. Most free finders label a first.last@ guess as "valid". OpenLeads marks each address:

Evidence Meaning
found Published on the web, or confirmed by the mail server
pattern Built from the format a real address at that company uses
guessed A common format, unconfirmed. It's labelled, so you decide

Those feed a send decision: safe (send it), risky (held back unless you opt in), bad (dropped). Read how the scoring works.

It's measured against live data every night. Unit tests can't tell you whether "dentists in Austin" returns dentists. openleads bench runs 12 real queries against the live sources and publishes the results:

Real query v4.0 v4.5
"marketing agencies in Miami" 6 of 20 "people" were page headings ("Refund Policy") 0 junk names
"dentists in Austin" chiropractors and transport companies, 0 usable 10 dentists
"machine learning researchers" 0 results 10 researchers
"rust developers in Berlin" still running after 4 min 10 in 5s

Latest full run (12 queries, 10 leads each): 12/12 return results · 84% fill · 0% junk names · 32% of emails found or pattern-backed, the rest labelled guessed · 54s median. Full scoreboard →

One query fans out across the sources that fit it. You never pick a source, but -s name pins one.

Ask for Searched Example
Local businesses, any city OpenStreetMap (Overpass + Nominatim) "accountants in Toronto"
Startup founders, companies hiring Y Combinator, Hacker News "AI startup founders"
Companies by industry Wikidata, SEC EDGAR "fintech companies"
Developers GitHub "rust developers in Berlin"
Researchers OpenAlex "machine learning researchers"
Everyone at one company the company's own site "emails at stripe.com"
US healthcare providers NPI Registry "pediatricians"

Each company is turned into named people from its team and about pages. Every address then goes through the email checks: published-address harvest, learned company pattern, MX/SPF/DMARC, Gravatar, and SMTP where port 25 is open.

Need a source we don't have? A source is one Python file.

Use it from Claude, Cursor or Claude Code

OpenLeads is an MCP server. Your AI assistant can find and verify leads mid-conversation:

claude mcp add openleads -- openleads mcp
{ "mcpServers": { "openleads": { "command": "openleads", "args": ["mcp"] } } }

"Find 10 law firms in London with emails we can actually send to, and draft a two-line intro for each."

Build it as a workflow

openleads web opens a local dashboard with search, a CRM, analytics, and Workflows: each saved search is drawn as a node canvas, like n8n. Click a node to edit it (who to find, what to offer, when to run, where to export), then hit Test run and watch every node fill in from the live engine. Test runs never send. Workflows guide →

Export nodes push leads to CSV, Google Sheets, Notion, Airtable, or any webhook, so the rest of your stack (n8n, Zapier, Make) can take it from there.

Put it on a schedule

openleads recipe add miami "marketing agencies in Miami" --every "weekdays 9am" --send
openleads schedule on     # one agent: launchd · cron · Windows Task Scheduler
openleads runs            # what ran, what it found, what failed

Schedules can be plain English (every 2h, mon,thu 14:00) or cron. Sends stay inside your daily cap, warmup ramp and business-hour windows, and stop for anyone who replies. Failed runs send a desktop alert, plus a webhook if you set one. Timed runs →

Rather run it in CI? There's a GitHub Action:

- uses: Samyrrrrrr990/openleads@v4.6.0
  with: { query: "marketing agencies in Miami", count: 50 }

Install

pipx install "openleads[all]"     # recommended
pip install openleads             # minimal: stdlib-only engine + CLI
npx openleads find "…"            # Node: sets up a private Python env on first run
openleads doctor    # checks your setup (DNS, port 25, mailbox)
openleads           # chat: type what you want
openleads web       # local dashboard at http://127.0.0.1:8787

Full walkthrough: docs/quickstart.md.

Commands

openleads find "50 fintech founders, verified only" -o leads.csv
openleads find "emails at stripe.com"
openleads enrich my-list.csv                   # your names/companies → verified emails
openleads verify ada@acme.io                   # check one address

openleads run "rust developers in Berlin"      # find → write → send (dry-run unless --live)
openleads recipe add NAME "query" --every "…"  # save it, schedule it
openleads watch add NAME "query"               # alert me only on new matches
openleads schedule on | off | status
openleads runs

openleads bench                                # live quality benchmark
openleads mcp                                  # MCP server for AI tools
openleads sources · crm · config · doctor · inbox

Sending is a dry run by default everywhere. Add --live to send.

How it works

flowchart LR
    Q["'dentists in Austin'"] --> P[Intent parser]
    P --> F[Federation<br/>picks sources]
    F --> S1[OpenStreetMap]
    F --> S2[YC · HN · GitHub · OpenAlex · EDGAR · Wikidata]
    S1 & S2 --> D[Team-page people discovery<br/>+ real-name gate]
    D --> E[Email checks<br/>harvest · pattern · MX · SMTP · Gravatar]
    E --> L[Leads with evidence + tier]
    L --> W[Write → Send → Follow up<br/>on your schedule]
    E <--> DB[(Local SQLite<br/>learned patterns · CRM)]

The core is Python standard library only. Everything, including your leads, drafts, mailbox credentials, learned patterns and CRM, lives in ~/.openleads. There's no hosted backend, no account and no telemetry. Details: docs/architecture.md.

Responsible use

OpenLeads is for legitimate prospecting, recruiting and research. You're responsible for anti-spam law (CAN-SPAM, GDPR, CASL) and each source's terms. It ships the guardrails: dry-run by default, suppression list, one-click unsubscribe, warmup caps, no tracking pixels. Read docs/responsible-use.md.

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. Releases up to 4.0.1 were PolyForm Noncommercial.

Contributing

The highest-impact PR is a new source (guide). The second is a query that openleads bench scores badly, along with the fix. See CONTRIBUTING.md.

Thanks

OpenStreetMap contributors · OpenAlex · yc-oss/api · NPI Registry · SEC EDGAR · Wikidata · Gravatar · US Social Security Administration (given-name data).

If OpenLeads found you a customer, a ⭐ helps other people find it.

Metadata

Release files for openleads 4.6.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for openleads 4.6.0
File Size Uploaded
openleads-4.6.0.tar.gz 306.9 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for openleads 4.6.0
File Interpreter ABI Platform
openleads-4.6.0-py3-none-any.whl Python 3 none any Details

Total release size: 551.0 kB

Release files / openleads-4.6.0.tar.gz

Download URL openleads-4.6.0.tar.gz
Size 306.9 kB
Tags Source
SHA-256 checksum
How to use checksums
5619fe355b3016a6e0e87dfbb497a1d0e9ba44a899770eddf6e7420a6d3ffc50
BLAKE2b-256 checksum
How to use checksums
4d5e23b6211b011148c672542c0d82bca902e1a1ae489f11925010ac56beea51
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / openleads-4.6.0-py3-none-any.whl

Download URL openleads-4.6.0-py3-none-any.whl
Size 244.1 kB
Tags Python 3
SHA-256 checksum
How to use checksums
5af6204a2a296cc06ec3a52f3d464b6ee4ce11e68035346d67fa1affb35b66c2
BLAKE2b-256 checksum
How to use checksums
6fa52933187a48130a132e29eac1d4d827c53426ebc24700cd94e8dbaa00016f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release history Release notifications | RSS feed

4.6.1

2 release files

This release

4.6.0 This release

2 release files

4.5.0

2 release files

4.0.1

2 release files

4.0.0

2 release files

3.5.0

2 release files

3.1.0

2 release files

3.0.0

2 release files

2.0.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page