The sending engine is the easy part: import leads, send a few follow-ups from your own mailbox, stop when someone replies. An agent writes that in an evening. The rest of the weekend goes into what decides whether mail lands and stays legal: threading, daily caps, sending windows, bounce and reply handling, opt-outs. What stays out of reach is everything lemlist bundles around the sender: a lead database, a shared warm-up network, and LinkedIn steps that break LinkedIn's rules when you automate them yourself.
Before you buildBefore building, try Hunter's free plan (sequences from one mailbox, 500 recipients each) or Apollo's free plan (2 sequences); for a handful of prospects they may be enough.
Build me a personal cold-email sequencer to replace lemlist. Requirements:
- Node.js 22 + TypeScript: Fastify with server-rendered pages and htmx on
http://127.0.0.1:4800; storage in better-sqlite3 at ./data/outreach.db.
- Leads: import CSV with papaparse, map columns to email, firstName, company and
custom fields, skip duplicates and anyone on the suppression list.
- Campaigns: up to 6 email steps, each with a delay in days. Templates use
liquidjs ({{ firstName }}, {{ company | default: "your team" }}); preview any
step for any lead, and refuse to launch while a variable is empty.
- Sending: nodemailer over my own mailbox's SMTP (credentials in .env).
Follow-ups stay in the same thread (In-Reply-To and References headers).
Daily cap per mailbox (default 30), a sending window in the lead's time zone,
and a random 2-6 minute gap between emails.
- Replies and bounces: check the mailbox every 5 minutes with imapflow; a reply
stops that lead's sequence, a bounce marks the address invalid.
- Opt-out without a public server: every email ends with "reply STOP to opt
out" and carries a List-Unsubscribe mailto header; those replies go to a
permanent suppression list.
- Per-campaign stats (sent, replied, bounced, opted out) and a CSV export of
leads with their status.
- No accounts, no telemetry, local-first. No open-tracking pixels.
- Out of scope: finding emails, inbox warm-up and LinkedIn steps (automating
LinkedIn breaks its user agreement).
- README: SPF, DKIM and DMARC setup, why to send from a separate domain, CAN-SPAM
and GDPR basics, and a plain warning that deliverability depends on the domain
and the list, not on this code.Opens your agent with the prompt filled in, you press enter. Or copy it and paste it into an empty folder.
The first prompt builds the core. Run these one at a time in the same folder to grow it into your own lemlist.
Add email verification to the sequencer in this folder. Requirements: - Check every new lead against a self-hosted Reacher container (check-if-email-exists) at REACHER_URL in .env, at most 2 checks a second. - Store the result (safe, risky, invalid, unknown); never send to invalid, and sending to risky needs a per-campaign opt-in. - Show the counts on the campaign page before launch. - Update the README with the Docker command and a warning that Reacher needs outbound port 25, which many home and cloud connections block.
Add mailbox rotation to the sequencer in this folder. Requirements: - Store several mailboxes (SMTP and IMAP settings in .env, one block per mailbox), each with its own daily cap. - Assign each lead to one mailbox at launch and keep all its follow-ups on that mailbox so the thread stays intact. - Poll every mailbox for replies and bounces. - A settings page shows today's sends per mailbox against its cap. - Update the README.
Add reply sorting to the sequencer in this folder. Requirements: - Send each new reply to the LLM set in .env (OPENAI_API_KEY or ANTHROPIC_API_KEY) and label it interested, not now, not interested, out of office or opt-out. - Out of office pauses the lead until the return date in the reply, or 7 days if there is none. Opt-out adds the address to the suppression list. - An inbox view shows the labels; I can correct any label and my choice wins. - Never send a reply automatically. - Update the README with the cost per 1,000 replies.
Add a lemlist importer to the sequencer in this folder. Requirements: - Accept CSVs from lemlist (Campaign > Leads list > select all > Export as .CSV), one file per campaign. - Read the header first, show me the column mapping and ask before importing. - Custom variables become custom fields. - If the file has no status column, let me import the Replied, Bounced and Unsubscribed segments (exported separately with filters) straight into the suppression list. - Print a summary: imported, skipped, suppressed. - Update the README with the export steps.
Sales teams pay for one tool that finds the lead, writes and sends the sequence across email and LinkedIn, and keeps their mailboxes out of spam. The sending logic is simple; the lead data, the warm-up pool and LinkedIn automation that keeps working are the parts that need a company behind them.
Estimate · Free with a mailbox you already have. A separate sending domain costs about $10-15 a year and a Google Workspace or Microsoft 365 mailbox roughly $6-9 a month. The build is token usage on your agent plan.
| Plan | Monthly | Annual, per month | What you get |
|---|---|---|---|
| $69 | $55 | 50,000 emails a month at the listed price; unlimited users and sending mailboxes; lead database, email and phone finder, lemwarm warm-up, CRM integrations and API. | |
| Multichannel | $109/user | $87/user | 5 senders per user; unlimited emails and messages; LinkedIn and SMS steps, built-in dialer, Gmail and LinkedIn extension. |
| Enterprise | custom | — | More than 5 senders per user, SSO/SAML, custom roles, dedicated account manager. |
| Lead data enrichment add-on | $20 | $16 | 2,000 credits a month (about 400 emails or 100 phone numbers). |
Kinda. The core is a weekend build with the prompt on this page, but real gaps remain: The lead database and the email and phone finder, lemwarm warm-up and the deliverability hub.
About $69 a month on the Email plan, $828 a year (checked 2026-10-13).
The lead database and the email and phone finder; lemwarm warm-up and the deliverability hub; LinkedIn, call, SMS and WhatsApp steps; AI agents that research leads and write messages; CRM sync and shared campaigns for a team. If any of those matter to you, keep paying.
Yes: Warmbly (open source), Mautic (open source), OpenOutreach (open source).