The biggest open-source cold email platform.
Warmbly warms your mailboxes, sends your campaigns, and triages every reply. Run it on our cloud or self-host the whole thing on yours.
14 days, 3 mailboxes, no credit card. Apache 2.0 if you want to self-host.
| Account | Sent | Warmup | Status | ||
|---|---|---|---|---|---|
| FO founder@acme.co | 37 | 22 | healthy | ||
| HE hello@acme.co | 24 | 18 | healthy | ||
| TE team@northwind.dev | 46 | 34 | healthy | ||
| ML ml@helio.gen | 18 | 12 | warming |
jenna@northwind.dev · Thursday 10am works for me…
Sequences that branch on real behavior.
Build a multi-step flow on the canvas, then drag a connector from any step to fork on opens, clicks, and replies. It's the exact builder you'll use in the app.
Q1 Sales Outreach
draftcmp_8fK2pQ7rXa19
Send only inside their working hours.
A calendar-style editor with full per-day control. Draw a sending window on any weekday, drag to move it, grab an edge to resize. Everything snaps to 30 minutes.
7 windows across 5 days
12pm
5pm
5pm
12pm
6pm
5pm
3pm
Each day is independent. Set different windows per day, or several windows in one day. Sends are scheduled in America/New York; worker IPs spread distribution naturally.
Optional bounds for when the campaign may send. Leave both blank to run open-ended.
Every reply, triaged the moment it lands.
Replies from every connected mailbox stream into one searchable queue. The classifier tags each one on arrival so you act on the labels that matter.
Proof of what actually landed.
Deliverability across the whole workspace: sent, opens, clicks, replies and bounces, with per-campaign breakdowns and account health on one screen.
Draft the whole email from one line.
Describe what the email should do and the assistant writes it in your voice, merge fields and tone already in place. Edit inline, regenerate, or keep what works.
Compose the email this step sends.
Internal label only. Recipients never see it.
Hi {{.FirstName}}, ...
Hi Alex,
Noticed Acme has been scaling fast on AWS. Teams your size are usually overpaying 30 to 40 percent on compute they spun up once and never tuned.
I help engineering teams find that spend without re-architecting anything. Worth a quick 15-minute call to walk through the three line items I'd check first?
Open to next Tuesday or Wednesday afternoon?
Best,
Jordan
Plug into the stack you already run.
Connect Gmail, Microsoft 365, your CRM, Slack and Zapier over OAuth. Tokens are encrypted at rest and every webhook is HMAC-signed.
Send and sync through your Google Workspace mailboxes.
Send and sync through Outlook and Exchange Online mailboxes.
Real-time alerts for positive replies, bounces, and deliverability.
Push positive replies and new leads straight into your CRM.
Sync leads, contacts, and email activity to Salesforce.
Triggers and actions across 8,000+ apps.
HMAC-signed event delivery to your own endpoint.
On-demand lead sync from a spreadsheet into your contacts.
When this happens, do that.
Every reply, booked meeting, bounce and warmup dip is a trigger. Wire it to your stack on a canvas: branch on intent, post to Slack, open the deal, update the CRM. The one below is running its test right now. Press Test in the window to fire it again.
One IF chip routes on intent, confidence, source, or a random split. Yes goes right, no goes down, and the no path is still yours to wire.
Seven built-in actions plus Slack, Discord, HubSpot, Salesforce, Pipedrive, Close and HMAC-signed webhooks. No keys to paste for automation tools.
Dry-run any automation against a sample event and read every node verdict, yes or no, before the switch ever flips.
An API you can build a product on.
Everything in the dashboard is a REST endpoint: scoped API keys, idempotent writes, opaque cursors, and HMAC-signed webhooks.
curl https://api.warmbly.com/v1/campaigns \
-H "Authorization: Bearer wmbly_live_a1…" \
-H "Content-Type: application/json" Pass the secret as a Bearer header. Every request returns rate-limit headers (X-RateLimit-Limit, X-RateLimit-Remaining) so well-behaved clients can self-throttle before hitting 429.
{
"id": "cmp_01HQX9F7P3A8KY",
"status": "scheduled",
"daily_cap": 50,
"created_at": "2026-06-06T14:02Z"
} Events post to your endpoint with an X-Warmbly-Signature header. Verify the HMAC-SHA256 digest before you trust the body.
From positive reply to closed won.
When a reply lands positive, Warmbly opens the deal and pauses the sequence on its own. From there you get one timeline that threads every send, open, reply, and stage change back to the exact sequence step that started it.
Stratech
- just nownote Ben Hsu
Logged a call with Rowan. Sending the seat-tiered proposal.
- 2m agoreply Rowan Cole
Replied positively. Classified Positive, sequence auto-paused.
- 2m agostage system
Deal opened in Qualified, linked to the reply.
- 2m agoFollow-up Ben Hsu
Auto-created from the reply, due Jun 10.
- Jun 05note Ben Hsu
Two opens on the Step 02 thread, no reply yet.
- Jun 05send sequence
Step 02 soft follow-up, variant B, from ben@acme.com.
- Jun 04open system
Opened Step 01, tracked near San Francisco.
- Jun 02send sequence
Step 01 initial outreach, variant A, from ben@acme.com.
The latest from Warmbly.
New features, behavioural changes, and fixes, in the order they reached production. Every entry is dated, tagged, and traceable to a commit.
-
Launch prep: coming-soon banner, self-host warmup notice, trial/free-tier copy, and the SEO blog cluster
- Site-wide LaunchBanner announcing Warmbly Cloud is coming soon (open source and self-hostable today, waitlist at…
- Reusable WarmupPoolNotice explaining the shared warmup pool is a cloud feature; a self-hosted instance starts with an…
- Trial copy updated to 3 addable mailboxes; free-tier limitation copy added (not for production, unfilled pool, good for…
-
Feature/gmail imap sync fixes
- Feature/gmail imap sync fixes.
-
Fix realtime image publish: native multi-arch runners instead of 6h QEMU hang
- Build linux/amd64 on ubuntu-latest and linux/arm64 on a native ubuntu-24.04-arm runner (no QEMU)
- Push each arch by digest, then merge into one multi-arch manifest with docker buildx imagetools create
- Per-arch GHA build cache scopes
-
Fix Gmail and SMTP/IMAP sync/send bugs; bring both to parity with the Graph path
- History sync mapped id-only stubs. History responses carry just {id, threadId, labelIds} — no envelope, headers, or…
- Read state was inverted. The mapper turned the UNREAD label into \Seen — unread messages were recorded as read. \Seen…
- MessageId-map key mismatch. Adds were keyed by RFC Message-ID, but remove/label lookups used the Gmail id, so removes…
Read the code. Run it yourself.
Read exactly how warmup, sending and deliverability really work, self-host the whole platform, and send a pull request. Help us build the biggest open-source cold email and warmup platform.
Every layer is open
- Go Backend API Control plane and business orchestration
- Go Consumer Turns Kafka events into platform state
- Go Workers Distributed sending and mailbox sync
- Rust Tracking Open and click pixel service
- Elixir Realtime Websocket fanout for live dashboards
- React Dashboard & admin The product UI and the admin console
- Astro Marketing site This very site you are reading
Made to contribute to
Run it your way
- Run on your own infra: Postgres, Redis, Kafka, S3, KMS
- One make up command boots the whole stack
- Cloud, with the shared warmup pool, is coming soon
- BYOK encryption and SSO on enterprise
One caveat: the shared warmup pool runs on our cloud. It only works with a large base of vetted mailboxes sending to each other, which a single self-hosted instance starts without. Self-hosting still gives you the full sending, inbox, CRM and API stack. The pool is the one part that needs the cloud.
Go templating, rendered at send time
Every step is a Go text/template. Merge fields, if/else conditionals, and spintax all resolve per recipient the moment the email goes out, and the composer previews exactly what each contact will receive.
Merge fields
Pull any contact field with a leading dot. Missing values render empty, so a blank field never breaks the line.
{{.FirstName}}{{.LastName}}{{.Company}}{{.Email}}{{.Phone}} Conditionals
Branch on a contact field with if / else / end. Compare values with eq.
{{if eq .role "Engineer"}}
We built this for teams like yours.
{{else}}
Thought this might be useful.
{{end}}
Combine checks with and / or, for example
{{if and (eq .role "Engineer") .Company}}.
Spintax
List variants in braces and Warmbly picks one per send, so the same step reads a little differently to every recipient.
{Hi|Hey|Hello} {{.FirstName}} Everything resolves at send time, and the composer previews the result against sample data before you launch.
Defaults that protect reputation.
Cold-email platforms typically optimise for volume. Warmbly optimises for sender reputation. The numbers below ship as defaults and the system enforces them.
| Setting | Warmbly | Typical cold-email tool |
|---|---|---|
| Per-mailbox cold cap | 50 / day default | 200+ / day on request |
| Warmup pool composition | Vetted, monitored, quarantined | Mixed with trial mailboxes |
| Reputation response | Acts at 10% spam placement | Acts at 80%+ spam placement |
| Worker concentration | Sum of mailbox budgets | Flat per-worker ceiling |
| Auth validation on connect | SPF · DKIM · DMARC checked | Manual DNS setup, no check |
| Source available | Apache 2.0 on GitHub | Closed source |
Warmup, sending, inbox, engineered together.
The signal one part collects is the signal the next part acts on.
Quarantines on warning, not catastrophe
Watch band kicks in at 10% spam placement, months before mailbox providers act.
Placement, not open rate
We probe inbox placement through the pool, then act on it.
Distributed across workers & IPs
One worker per machine. Each with its own IP. Migrable on the fly.
Sequences with branching, A/B and TZ-aware delays
Up to 12 steps. Variants per step. Business-hour delays by recipient time zone.
Vetted pool, real reputation surface
Premium pool diversity across Gmail, Outlook, iCloud, Yahoo and self-hosted IMAP.
Pay for what you send.
The number on each card is daily send volume. Warmup, the unified inbox, analytics, CRM and the API are in every paid plan.
Starter
Great for small businesses with a small budget.
/ month · billed yearly
- Unlimited warmup
- Unlimited mailboxes
- 150 emails / day
- Unified inbox + reply detection
- Sequences with branching
Grow
Ideal for growing businesses scaling their outreach.
/ month · billed yearly
- Unlimited warmup
- Unlimited mailboxes
- 3,000 emails / day
- CRM · pipelines · deals · tasks
- API & HMAC-signed webhooks
Business
For established teams that need higher limits and advanced features.
/ month · billed yearly
- Everything in Grow
- 15,000 emails / day
- Dedicated IPs
- Team roles + audit log
- Priority support
Enterprise
Large orgs with custom volume and dedicated support.
/ month · billed yearly
- Everything in Business
- 15,000+ emails / day
- BYOK encryption · SSO / SAML
- Custom data residency
- Dedicated CSM
The free tier is a limited demo with an unfilled warmup pool. Use it to see what the product does, not to send at volume.
Send cold email people actually open.
Connect a mailbox, warm it up, send your first campaign today.