OpenLeads

io.github.Samyrrrrrr990由 GitHub 帳號 Samyrrrrrr990 發布v5.2.0更新於 Nov 5, 2026

Find leads with honest email evidence, then work them: CRM, sequences, tasks, deals. No API keys.

概覽

AI 產生的概覽

OpenLeads 從免費公開來源尋找 B2B 潛在客戶與工作信箱,並在本地 CRM 中管理名單、序列、任務與商機。

可以做什麼
  • 用一句自然語言描述尋找潛在客戶,並查詢或驗證工作信箱,每個地址都標註證據來源與可投遞等級
  • 列出可搜尋的公開資料來源
  • 搜尋並檢視已儲存的聯絡人與公司,包括階段、契合分數、技術堆疊、備註與活動紀錄
  • 管理本地工作區:儲存聯絡人、加入名單、設定階段、加上標籤、新增備註並查看統計
  • 處理追蹤佇列:建立與完成任務,並起草個人化冷郵件但不寄出
  • 管理商機與觸達:建立並推進商機階段、檢視序列、把聯絡人加入序列,以及列出與執行自動化工作流程
適用情境
適合需要做業務開發、招募或研究,並希望助理從公開來源蒐集潛在客戶與信箱、再整理進本地 CRM 的情境。也適合想在不依賴付費資料服務的情況下,維護名單、追蹤任務、序列與商機管道的小規模外呼工作。
執行需求
以 Python 套件形式透過 stdio 在本機執行(需 Python 3.8 或更新版本),也可用 npx 安裝,首次執行會建立獨立的 Python 環境。未宣告需要 API 金鑰或帳號。資料保存在本地工作區目錄中。部分信箱檢查依賴 25 埠,許多家用網路會封鎖該埠。
安裝前請注意
它會從公開來源蒐集個人聯絡資訊並起草外呼郵件,你必須自行遵守反垃圾郵件與隱私法規以及各來源的使用條款。工作區工具會寫入本地 CRM,工作流程以真實模式執行時會變更工作區並可能匯出資料。助理本身不寄送郵件,但序列與工作流程可依排程排入或寄送郵件。

安裝

在 SourceWeft 中

  1. 開啟 儀表板中的 OpenLeads,將其新增到工作區。
  2. 為需要使用其工具的對話啟用該服務。

Desktop only,透過 STDIO。 STDIO 服務會啟動本機處理程序,因此需要 SourceWeft 桌面主機。

其他 MCP 客戶端

參照 儲存庫 中的啟動說明。

README

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

bash
pipx install "openleads[all]"          # or: pip install "openleads[all]", or: npx openleadsopenleads find "dentists in Austin"    # ten leads, every email labeledopenleads web                          # the workspace at http://127.0.0.1:8787
[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:

EvidenceMeaning
foundPublished on the company's site, in a public commit or security.txt, or confirmed by the mail server
patternBuilt from an address format already seen at that company
guessedThe most common format for that name. Nothing confirms it, and the label says so
TierWhat happens
safeSent by default
riskyHeld for your review unless you opt in
badDropped (no mail server, disposable, or it bounced)

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.

Ask forSearchedExample
Local businesses, any cityOpenStreetMap (Overpass and Nominatim)"accountants in Toronto"
Startup founders, companies hiringY Combinator, Hacker News"AI startup founders"
Companies by industryWikidata, SEC EDGAR"fintech companies"
DevelopersGitHub"rust developers in Berlin"
ML buildersHugging Face"ML engineers"
ResearchersOpenAlex"machine learning researchers"
Everyone at one companythe company's own site"emails at stripe.com"
US healthcare providersNPI Registry"pediatricians"

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.

[The dashboard home: the date and what is due, four figures (contacts, emails sent, reply rate, open pipeline), today's tasks and the best leads to contact.][A sequence editor: a day-by-day step timeline (automatic email, threaded bump, call) with counts per step, and a live preview of the email for a contact with its spam score.]
Home. What is due today, how outreach is going, and the strongest leads you haven't contacted.Sequences. Email, call, LinkedIn and task steps with A/B variants and same-thread follow-ups. People leave when they reply, bounce or unsubscribe.
[A deal pipeline board with Qualify, Meeting, Proposal, Negotiation, Won and Lost columns, each with its value, under open pipeline, weighted forecast, won and win rate.][The dashboard home page in dark mode.]
Deals. A drag-and-drop pipeline with a weighted forecast. Winning a deal makes the contact a customer.Everything else. People and companies with Apollo-style filters, lists, ICP fit from A to D, a task queue, templates, CSV import, duplicate merge and a ⌘K palette.
bash
openleads people --fit A --never-contacted                 # best untouched leadsopenleads lists add "Q4 dentists" --where dentalopenleads seq enroll "Q4 outbound" --list "Q4 dentists"openleads tasks --bucket todayopenleads import apollo-export.csv --list "Imported"

Workspace guide  |  Sequences guide  |  Moving from Apollo

Use it from Python

python
import openleads
leads = openleads.find("gyms in Sydney", count=20)for lead in leads:    print(lead.email, lead.evidence, lead.tier)leads.write("gyms.csv")            # .csv, .json or .jsonlprint(leads.report.summary())      # which sources ran, what failed, why it stopped

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:

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

"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.

bash
openleads workflow templates                       # 7 ready-made workflowsopenleads workflow new dentists --from local-business-outreach   # arrives pausedopenleads workflow run dentists      # a test run: finds and writes, never sends
bash
openleads recipe add miami "marketing agencies in Miami" --every "weekdays 9am" --sendopenleads watch add new-dentists "dentists in Austin"     # tell me only about new matchesopenleads schedule on      # one agent: launchd, cron or Windows Task Scheduleropenleads runs             # what ran, what it found, what failed

Workflows  |  Writing emails  |  Timed runs. Exports go to CSV, Google Sheets, Notion, Airtable, HubSpot or any webhook. There is also a GitHub Action:

yaml
- uses: Samyrrrrrr990/[email protected]  with: { query: "marketing agencies in Miami", count: 50 }

Install

bash
pipx install "openleads[all]"     # recommendedpip install openleads             # minimal: the standard-library engine and CLInpx openleads                     # Node: sets up a private Python environment on first run
bash
openleads doctor    # checks your setup: DNS, port 25, mailboxopenleads demo      # the dashboard on an invented workspaceopenleads           # chat: type what you want

Python 3.8 or newer on macOS, Linux or Windows. Full walkthrough: quickstart.

Commands

bash
# findopenleads find "50 fintech founders, verified only" -o leads.csvopenleads find "accountants in Toronto" --explain     # the plan, each source's status, hintsopenleads company stripe.com                           # tech stack, socials, phones, peopleopenleads enrich my-list.csv                           # your names and companies, emails labeledopenleads verify [email protected]
# reach out (a dry run unless you add --live)openleads write "rust developers in Berlin" --variants 2 --explain   # drafts, scored, with the briefopenleads run "rust developers in Berlin"
# the workspaceopenleads people | companies | lists | seq | tasks | dealsopenleads import | export | dedupe | stats | backup
# set up and automateopenleads init | config | doctor | web | mcp | benchopenleads recipe | watch | schedule | runs

openleads --help lists every command by group.

How it works

mermaid
flowchart LR    Q["'dentists in Austin'"] --> P[Query parser]    P --> F[Planner<br/>picks the sources]    F --> S1[OpenStreetMap]    F --> S2[YC, HN, GitHub, Hugging Face,<br/>OpenAlex, EDGAR, Wikidata, NPI]    S1 & S2 --> D[People from team pages<br/>+ real-name check]    D --> E[Email checks<br/>harvest, pattern, MX, SMTP, Gravatar]    E --> L[Leads with evidence and tier]    L --> W[Workspace, sequences, exports]    E <--> DB[(Local SQLite<br/>learned patterns, workspace)]

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.

來源:README.md,提交 dd836b3

工具

25

find_leads

Find B2B leads from free public sources and verify their emails. Describe who you want in plain English, e.g. 'dentists in Austin', 'marketing agencies in Miami', 'fintech founders', 'rust developers in Berlin', or 'emails at stripe.com'. Returns people/companies with an email, a deliverability tier (safe/risky), and evidence (found/pattern/guessed).

輸入參數countquery必填sourcelocationsenioritydepartmentsave_to_listverified_onlybudget_seconds

find_email

Find the most likely work email for a person at a company domain.

輸入參數name必填domain必填

verify_email

Check whether an email address is deliverable (safe/risky/bad) and why.

輸入參數email必填

list_sources

List the public data sources OpenLeads can search.

無需輸入參數。

search_contacts

Search contacts

Search the people saved in your OpenLeads workspace (like Apollo's People tab). Filter by free text (name, email, company, title), stage, email status, seniority, department, tag, list, or minimum ICP fit score. Returns contacts with stage, fit score (0-100) and email tier.

輸入參數taglisttierlimitquerystagefit_minsenioritydepartmentnever_contacted

get_contact

Get a contact

Everything about one contact: profile, company, tags, lists, notes, open tasks, deals, sequences they're in, and recent activity.

輸入參數email必填

search_companies

Search companies

Search companies in the workspace by text, technology they use (e.g. HubSpot, Shopify), industry or stage. Returns people counts and tech stack.

輸入參數limitquerystageindustrytechnology

get_company

Get a company

One company: profile, tech stack, its people, deals, open tasks and notes.

輸入參數domain必填

list_tasks

List tasks

The follow-up queue (calls, emails, LinkedIn touches, to-dos) by due date.

輸入參數bucket

pipeline

Deal pipeline

The deal pipeline by stage with totals: open value, probability-weighted forecast, won value and win rate.

無需輸入參數。

list_sequences

List sequences

Outreach sequences with their steps, status and reply/bounce numbers.

無需輸入參數。

draft_email

Draft an email

Write a personalized cold email (or a follow-up) for a saved contact, or for a lead object from find_leads. Nothing is sent or saved. Returns the subject and body, a 0-100 quality score with reasons, the research brief (the facts the email may use: company, tech stack, signals like hiring or YC, the person's role) and why each line was chosen. Shared inboxes (info@, office@) get a 'who should I talk to' email. Uses the configured LLM when there is one (facts-checked), else the built-in writer.

輸入參數leadsteptoneangleemailuse_llmvariants

workspace_stats

Workspace stats

The workspace at a glance: contacts, sends, reply rate, tasks due, pipeline, ICP grades and data-quality issues.

無需輸入參數。

save_contacts

Save contacts

Save people to the workspace (e.g. results from find_leads), optionally into a list and with tags. Existing contacts are updated without blanking fields. Each contact needs an email; other fields are optional.

輸入參數listtagscontacts必填

add_to_list

Add to list

Add saved contacts to a people list (created if it doesn't exist).

輸入參數list必填emails必填

set_stage

Set stage

Move contacts to a stage: new, approaching, replied, interested, meeting, customer, not_interested, unresponsive, do_not_contact, bad_data.

輸入參數stage必填emails必填

tag_contacts

Tag contacts

Add (or with remove=true, remove) tags on contacts.

輸入參數tags必填emails必填remove

add_note

Add a note

Add a note to a contact's record (call notes, context, next steps).

輸入參數text必填email必填pinned

create_task

Create a task

Create a follow-up task. kind: call, email, linkedin or todo. due accepts today, tomorrow, +3d, +2h, a weekday (fri) or YYYY-MM-DD.

輸入參數duekindnotetitle必填contactpriority

complete_task

Complete a task

Mark a task done (a sequence task moves that contact to their next step).

輸入參數id必填

create_deal

Create a deal

Open a deal. stage: qualify, meeting, proposal, negotiation, won, lost. amount accepts 12000, 12k or $2.5k.

輸入參數name必填stageamountcompanycontactclose_date

move_deal

Move a deal

Move a deal to another stage (won makes its contact and company customers).

輸入參數id必填stage必填

enroll_in_sequence

Enroll in a sequence

Add contacts (by email or a whole list) to an existing sequence. People who are suppressed, unverified, or already in a sequence are skipped with a reason. Nothing is sent immediately; steps run on schedule.

輸入參數listemailssequence必填

list_workflows

List workflows

Your automation workflows (node graphs: triggers, find leads, filters, write, send, export…) and recipes, with whether each is active, live, when it runs and how many items are waiting.

無需輸入參數。

run_workflow

Run a workflow

Run one workflow and report what each node did (items in/out, notes, errors). By default this is a TEST RUN: it searches and drafts but never sends, exports, notifies or changes the workspace. mode='run' does a real run (workspace changes and exports happen; Send only previews). Only live=true with mode='run' sends real email, inside the warmup cap. Never set live=true unless the user explicitly asked to send.

輸入參數livemodename必填

版本歷史

4
  1. v5.2.0最新Nov 5, 2026
  2. v5.1.1Oct 30, 2026
  3. v5.0.0Oct 15, 2026
  4. v4.6.1Oct 13, 2026

評分

已滿足適用檢查項的 90%

該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。

  • 近 30 天內可連通25 分
  • 已宣告認證方式10 分

    請在註冊中心條目中宣告憑證請求標頭,或保持端點能夠回應探測,以便判定其認證方式。

  • 已列出工具必需15 分
  • 描述必需15 分
  • 圖示10 分
  • 文件15 分
  • 授權條款10 分