From a company domain to an outbound pipeline an agent runs
Dark Funnel learns your company from a domain, finds buyers with a reason to hear from you today, and runs the outreach. What I cut, what I decided, and why it's built this way.

Summary
Give Dark Funnel a domain. It finds buyers worth emailing today.
Dark Funnel runs outbound for B2B sales teams. It reads your site, builds your ICP, finds prospects with verified emails and a reason to write now, then handles outreach, follow-ups, replies and demos. It does the research, verification and follow-up work a sales team usually does by hand. You only see what isn't a yes.
The bet
Sales teams shouldn't be the bottleneck in their own pipeline. List tools sell you names. Most agents sell you a queue: approve this lead, approve that reply. You didn't hire an agent to become its reviewer. Dark Funnel runs the loop, and you handle the exceptions.
- 1
- input to start: your website
- 0
- per-prospect approvals. Replies that aren't a yes come back to you.
- 3.7¢
- per researched prospect on Pro at full use. Misses are free.
- 3 days
- how often every list re-verifies its emails
Three decisions that shaped it
- Website in, not a form. First screen: a draft ICP and prospects. Cost: the draft is only as good as your site.
- Price by result. Per researched prospect, misses free. Cost: I eat the research.
- Review by exception. No lead queue. Cost: the scoring has to earn your trust.
Status
Solo. Pre-revenue. Live at darkfunnel.pro. Outreach is in beta. Solo means every call on this page is mine, and so is every mistake. Deliverability is currently protected by the 3-day re-verify, but I haven't stress-tested it past a few hundred sends.
Tags: Shipped is live. Measured I timed it. Reasoned I calculated it. Self-rated is my score. Assumed is untested.
The bet
GTM is a loop. Everyone sells you a piece.
Eight steps: learn the company, find the buyer, find a reason to write, check the email, write, follow up, read the reply, book the call. Most tools stop at step three. A database here, a sequencer there, an inbox somewhere else, and the team stitches the loop together by hand. That stitching is the job nobody wants.
The buyer is a CRO or head of sales who owns pipeline and has no spare hours. The pain isn't finding names. It's everything between the list and the booked demo.
Why now: an agent can read a site, research a prospect and judge fit well enough to replace the analyst. Reasoned Whether teams let it run unattended is the bet. Assumed
| Layer | What it does | Status |
|---|---|---|
Company knowledge from your website | Builds your ICP | Shipped |
Prospects with work emails | ICP-fit people, a signal on each | Shipped |
CRM and API Attio, HubSpot, API key | Carries the list into your stack | Shipped |
Outreach follow-ups, replies, demos | Runs the sequence, books the call | Beta |
Briefing in Slack | What's working, what's tuning | Shipped |
Product judgment
The pain
Apollo sells a database. Clay sells a toolkit. Both leave the hard part to you: defining who your buyer is, building the research that finds them, and rebuilding it for every campaign. Dark Funnel starts from your domain, builds the ICP and the research columns itself, and runs the loop from there.
Four decisions. What each replaced.
1. Domain in, ICP out
- Situation. Onboarding was a form: job title, company, where you heard about us. It collected data and produced nothing.
- Options. A shorter form. A blank chat box. One input: your domain.
- Picked. The domain. The agent reads the site, writes the company knowledge with sources, and proposes the ICP: who signs, which tools and hires signal a fit, who to exclude, deal size, sales cycle. Prospects appear on the same screen.
Shipped - Why. The ICP is the product, so it gets defined first, from evidence, before the first search runs.



2. Every prospect is a row of research
- Situation. Every list tool returns names and emails. A fit score is one number on top of the same contact.
- Options. Contacts only. Contacts plus a score. A sheet where every column is a question about the prospect.
- Picked. The sheet, and the agent builds it. From your ICP it writes the columns: fit, why-now signal, buying intent, plus whatever your market turns on, like the tool they run, the role they just posted, or the competitor they already use. Every cell is researched live and sourced. In the run above: Series D, $276.0M raised, 31 open roles, Hot.
Shipped - Why. The columns come from your ICP, so you don't have to build the table yourself.
3. Price by researched prospect
- Situation. The agent does the work. A seat price charges for headcount.
- Options. Per seat. A flat fee. Per researched prospect.
- Picked. Per researched prospect. Pro is $149 for up to 4,000. Scale is $349 for up to 12,000. Verified emails only, misses free.
Shipped - Why. Revenue follows verified output. A wrong email earns nothing.
4. Own the loop, review by exception
- Situation. Every other agent makes you the approver: approve each lead, chase each reply. The real pain is the whole stretch between a list and a booked demo: find, verify, write, follow up, handle replies, book. A query box covers the first inch of it.
- Options. Approve every lead. Approve every campaign. Review by exception. For the surface: polish the box, add filters, or build a workspace around the loop.
- Picked. Review by exception, no per-prospect approvals, inside a workspace: research sheets, signals, campaigns, exports, CRM handoff, and a morning briefing in Slack. Research, verification and scoring are
Shipped. Outreach is inBeta. - Why. An agent's value is the work you don't do. An approval queue hands it back.
What I didn't build
- A query box. It returns a list. The pain starts after the list.
- An approval queue. Ten leads in, ten decisions out. You're still doing the job.
- Seat pricing. Two people running it flat out would pay less than twenty seats nobody opens.
- Our own database. Apollo already owns one. More rows don't make a better buyer.
Taste
One screen, one job. The last one says what you got.
The screens under decision 1 are the proof: ICP answers pre-checked, Required and Optional on every question, the result beside the questions. The clip at the end is the last screen. Before, you handed the product information and got nothing back. Now it gives you something first.
| Item | Before | After |
|---|---|---|
Onboarding asks | Job title, company, where you heard about us | One input: your website |
You get | Nothing | Your ICP and prospects with signals |
Product | A query box that found a prospect and researched an email | A workspace that runs the outbound loop |
Landing hero | Modeled on another product | An interactive demo of the real onboarding |
Three rules
- Say the result, not the feature. The last screen reads "Your GTM intelligence is ready." and shows what you got: prospects found, average ICP fit 97%. Nobody finishing onboarding should wonder whether it worked.
Self-rated - Label what's required, optional and skippable. Required or Optional on every question, Skip for now on the CRM step, Disconnect on a connected workspace. People trust a product that tells them what they can ignore.
- Every guess is one click from fixed. Every ICP answer is a checkbox the agent already ticked. The agent drafts, you decide, and fixing is cheaper than filling in.
The product comes to you
You shouldn't have to open a dashboard to find out how outbound is going. Every morning a briefing lands in Slack: what's working, what the agent is tuning, where the pipeline is moving. Replies that aren't a yes show up there too. Shipped
The last step
Prospect count on the left, your CRM on the right, dots between them. The button reads "Exporting prospects" while it works. Shipped
Architecture
How I build the production system.
The proxy routes signed cookies and batches Neon reads into the query cache; writes check live sessions. Keyed, capped Inngest jobs run research outside requests and retry without repeating work. Search and enrichment supply evidence for JEV scoring. Progress publishes separately. Both paths share Neon Postgres through Drizzle over HTTP.
| Stage | When it goes wrong |
|---|---|
Research a durable job per search Shipped | A retry doesn't repeat work. |
Evidence facts only Shipped | A fact not found stays missing. |
Fit score JEV grades against your ICP Shipped | No evidence, no score. It never invents a fit. |
Email check work emails only Shipped | Catch-alls out. Re-verified every 3 days. A stale email drops the row. |
Outreach sequence, replies, booking Beta | Anything that isn't a yes goes to you in Slack. |
Why this split
- Keep research off requests. Keyed Inngest retries avoid duplicate work; per-user caps limit long searches.
- JEV only scores when evidence exists. No evidence = unscored. It never invents fit.
- Verify before outreach. Re-check work emails every 3 days to protect sender reputation.
Why it can run unattended
What it is not allowed to do.
- It will not score without sources.
- It will not email a catch-all or a stale address.
- It will surface every non-yes reply.
- Everything else it is allowed to run.
A person still handles the exceptions: replies that aren't a yes, and anything the sequence can't. Everything else runs without approval.
Numbers
The product numbers are the story. The code number is a footnote.
| Metric | Number | How I know |
|---|---|---|
Per-prospect approvals | 0 | Shipped. Outreach is in beta. |
Input to start | 1: your website | Shipped |
Price per researched prospect | 3.7¢ Pro, 2.9¢ Scale | Reasoned. Price over plan limit. |
Email re-verification | Every 3 days | Shipped |
Average ICP fit | 97% | Self-rated. The product's own score. |
Buying intent fit | 92% | Self-rated. 1,000 researched prospects. |
Verified work email | 96% | Measured. Non-catch-all, re-verified every 3 days. |
Landing page cold start | 5-6 s to under 400 ms | Measured |
The 97% is the product's own score. Hand-checked precision is the next number I'm after.
Fix
Replace the query demo with the full outbound loop.
The onboarding
It asked who you are: job title, company, where you heard about us. Then it said set up your workflow. You answered a form and got nothing back. Now it's one input and a result. A first session should end with something you can use.
The product
The query box returned one prospect and a researched email. It worked for a demo, but stopped before the rest of the pipeline. I rebuilt it as a workspace that takes a company from domain to handoff: durable research runs gather evidence, JEV scores fit from that evidence, and verification checks work emails. Campaigns handle outreach and follow-ups. The result goes to Attio or HubSpot, while Slack delivers the briefing and replies that aren't a yes. Outreach is in beta.
The hero
Modeled on another product. It looked fine and said nothing about mine. Now it's an interactive demo of the real onboarding. The page should show the product doing the job, not describe it.
Close
How I'd work on your team.
Give me a problem, not a ticket. I own it end to end, from what to build to shipping it, and you won't have to babysit me. I've built several products on my own, so I'm used to making the call and living with it. I tell you early what I'm choosing and what it costs, so nothing surprises you.
Want to see it run? I'll walk you through it. darkfunnel.pro