Open source Apache 2.0

The largest 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.

  • Free to self-host
  • Free plan with 10 mailboxes
  • No credit card
github.com/warmbly/warmbly · Apache 2.0 · Run it on our cloud or your own infra · Go · Rust · Elixir · React
Campaigns

Sequences that branch on real behavior.

Build the flow on a canvas and fork it on opens, clicks and replies.

Drag to branch. Pull a link from any step to add a path.
A/B at every step. Weighted variants, the stronger one keeps sending.
Threaded follow-ups. Replies land in the same conversation.
Explore campaigns
Scheduling

Send only inside their working hours.

Draw a sending window on any weekday. Drag to move it, grab an edge to resize.

Per-day windows. Mornings only, split shifts, several a day.
Timezone-aware. Sends follow the timezone you pick.
One-click presets. Mon to Fri, 9 to 5, in a tap.
See sending controls
Unified inbox

Every reply, triaged the moment it lands.

Replies from every mailbox stream into one queue, labeled on arrival.

One queue. Scope by inbox, tag or status.
Classified on arrival. Positive, out of office, unsubscribe, bounce.
Reply in place. Snooze, schedule and send from the same pane.
Tour the inbox
Analytics

Proof of what actually landed.

Sent, opens, clicks, replies and bounces, with account health on one screen.

Placement, not vanity. The metrics that move reputation, over 7, 30 or 90 days.
Best performers. Top campaigns rank themselves as sends roll in.
Shareable report. Export a branded image of any range.
View analytics
AI

AI that writes the email and runs the steps.

Ask at the caret and the draft lands where you type. Put a Switch or an AI step in the flow and the model decides each contact's path.

Where you type. A sparkle on the line, or ⌘J. Undo or run it again.
Switch on AI. A prompt reads each reply and picks a case, every case its own path.
AI step. An agent that tags, tasks and unsubscribes. Only the actions you allow.
Try the assistant
Integrations

Plug into the stack you already run.

Gmail, Microsoft 365, your CRM, Slack and Zapier, connected over OAuth.

OAuth in two clicks. Authorize once, revoke any time.
Signed webhooks. HMAC-signed and HTTPS by default.
Encrypted at rest. Secrets sealed with your data key.
Browse integrations
iOS app

The whole workspace, in your pocket.

Replies classified as they land, campaigns you can pause from anywhere, mailbox health at a glance. SwiftUI, in the same open-source repo, on the same realtime socket as the dashboard.

9:41
Positive reply now

jenna@northwind.dev: Thursday 10am works for me, send over an invite

THURSDAY, JULY 16
Good morning, Mia
SL
2.4K
Sent this week
61%
Open rate
148
Replies
Mailboxes All 12
M
mia@sunriselabs.io
Warming
92
S
sales@northwind.dev
Google Workspace
84
B
ben@coastline.io
Warming
61
This week Analytics
Sent Opens
MonTueWedThuFriSatSun
Campaigns See all
Q1 SaaS founders
1,248 sent
41%open 6.2%reply
Berlin startups
312 sent
44%open 7.1%reply
Search in emails P L
ALL INBOXES 1.2K 24 unread
JO 3
Jenna Ortiz 9:12
Re: Quick question about Northwind
Thursday 10am works for me, send over an invite and I will get the team in the room.
Interested
MH
Marcus Hale 8:47
Automatic reply: Following up
I am out of the office until Monday with limited access to email.
Out of office
PN
Priya Nair 8:15
Re: Warmbly for agencies
Can you send pricing for around 40 mailboxes? We would move our whole client roster.
Pricing
TB 2
Tom Becker Yesterday
Re: Intro from Sunrise Labs
You: Following up here, any thoughts on the trial?
AS
Ana Silva Yesterday
Re: A quicker way to warm inboxes
Interesting. How does the warmup pool actually work under the hood?
LF
Leo Fischer Tue
Re: Berlin startup outreach
Please remove me from this list.
Unsubscribe
Search campaigns P L
ALL CAMPAIGNS 12 6 sending
Q1 SaaS founders 2d
1.2K sent · 486 opens · 78 replies
Running · 50/day
Agency outreach 5d
640 sent · 243 opens · 31 replies
Running · 40/day
Berlin startups 1w
312 sent · 137 opens · 22 replies
Paused · 30/day
Post-demo follow-up 3w
96 sent · 59 opens · 17 replies
Finished · 20/day
Dormant leads revival 4w
No sends yet
Draft · 50/day
Automations

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.

app.warmbly.com/automations/reply-to-revenue
Branches like you think

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.

Acts across your stack

Seven built-in actions plus Slack, Discord, HubSpot, Salesforce, Pipedrive, Close and HMAC-signed webhooks. No keys to paste for automation tools.

Test before it is on

Dry-run any automation against a sample event and read every node verdict, yes or no, before the switch ever flips.

Developers

An API you can build a product on.

Everything in the dashboard is a REST endpoint.

Scoped keys. Read, write or send-only, per environment.
Idempotent by default. Send an Idempotency-Key and retries are safe.
Webhooks that verify. Signed payloads for every event.
Read the API docs
CRM

From positive reply to closed won.

A positive reply opens the deal and pauses the sequence on its own.

Born from the reply. Nothing keeps sending to someone who said yes.
Board and value. Stages with their open value at a glance.
Edit in place. Stage, value and close date in one dialog.
See the CRM
Forms

Lead capture that lands in the same pipeline.

Hosted forms whose submissions become contacts, attributed to the send that brought them.

Themes and layouts. Card, wide or split, with a brand cover.
Personalized links. Prefilled per contact, no second email ask.
Your own domain. Serve every form from a subdomain you own.
Read the forms guide
warmbly/warmbly Apache 2.0

Read the code. Run it yourself.

See exactly how warmup, sending and deliverability work, self-host the whole platform on your own infra, and send a pull request when something should be better.

100%
Open source
$0
To self-host
1
Command to boot
Public
Issues and PRs
warmbly/warmbly main Go · Rust · Elixir · TS
cmd/backend API, the control plane Go
cmd/worker Distributed senders Go
tracking Open and click pixels Rust
realtime Live dashboard fanout Elixir
web The dashboard TypeScript
docs docs.warmbly.com MDX
self-host
$ git clone https://github.com/warmbly/warmbly.git
$ cd warmbly && make up
Warmbly is live on http://localhost:8080
$

Self-hosting is free, and you still get the warmup. When Warmbly Cloud launches, link your instance and we warm your mailboxes in the same shared pool the cloud uses: free for up to 10 mailboxes, $15 a month for unlimited. How linking works.

Personalization

One template. A different email for every recipient.

Every step is a template rendered at send time. Merge fields, conditionals, helpers and spintax resolve per recipient, and the composer shows the exact result before you launch.

Step 1 · template written once
{Hi|Hey|Hello} {{.FirstName | default "there"}},

{{if eq .role "Engineer"}}we built this for
teams like yours.{{else}}thought this might
be useful for {{.Company}}.{{end}}
Alex Rivera alex@acme.com · role: Engineer

Hey Alex, we built this for teams like yours.

spintax picked Heyif branch: Engineer
Jenna Carter jenna@northwind.dev · role: Founder

Hi Jenna, thought this might be useful for Northwind.

else branch{{.Company}}
No first name mail@brightco.io · role: empty

Hello there, thought this might be useful for Brightco.

default "there"blank never breaks
rendered per recipient, at send time

Every field, including yours

Standard fields plus every column from your CSV import. Keys with spaces or dashes work everywhere, even inside conditions.

{{.job title}}

Helper functions

Case and string helpers, arithmetic, and numeric compares that coerce strings, so number-like fields just work.

{{if gtf .employees 50}}

Spintax, nested

Alternation groups resolve innermost first and nest freely. Subjects spin too, so no two sends read identical.

{Hi|Hey {there|again}}

A/B variants per step

Test variants of any step. The original and every variant share the same editor, preview and content score.

Variant B · 50%

Previewed with the real engine

The composer renders your template with the actual send engine against sample data. Conditionals, functions and spintax all run.

Hey Alex,

Validated before launch

A broken {{if}} blocks the campaign and unresolved tokens get flagged. A failing render falls back to plain substitution, never a lost send.

if: missing {{end}}
One platform

Warmup, sending, inbox, engineered together.

The signal one part collects is the signal the next part acts on.

Inbox 12 unread across 8 mailboxes
Jenna Carter
Re: quick question on outbound
2m interested
Aman Patel
Re: intro from Maya
14m interested
Lina Park
Re: pricing tier?
1h question
Karim Salah
Re: not the right time
3h not now
Jenna Carter replied
"Thursday 10am ET works for me."
Reply
One inbox

Every reply lands in one place

Replies from all of your sending addresses arrive together, already sorted by what the person actually said.

Warmup healthy
40 / day
up from 10, over 15 days
Runs itself

Mailboxes that warm themselves up

New addresses start slow and build real sending history on their own, so your first campaign is not your first impression.

Step 1
Intro email
replied
Stop here
no more follow-ups
no reply
Wait 3 days
business hours
Step 2
Follow-up
Knows when to stop

Follow-ups that end at "yes"

Each step branches on what the person did. Answer once and the rest of the sequence is cancelled automatically.

By provider
Gmail 97%
Outlook 95%
Yahoo 94%
96%
reached the inbox
1% spam
No guessing

See if you landed in the inbox

We test where your mail actually arrives at each provider, so you find out before your reply rate does.

Compose 1 of 2,480

Hi {{first_name}}Jenna,

Saw {{company}}Northwind is hiring across {{team}}support. We keep outreach out of the spam folder for teams that size.

Worth a look?

Sounds human

Written once, personal to everyone

Pull real details from your contact list so each person gets their own version, without writing each one.

Pricing

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.

Save 20%

Starter

Great for small businesses with a small budget.

$23 $29

/ month · billed yearly

Save $72 a year

150 sends / day
Start free
  • Unlimited warmup
  • Unlimited mailboxes
  • Unified inbox with reply detection
  • Sequences that stop on reply
  • Inbox placement monitoring

Grow

Ideal for growing businesses scaling their outreach.

$71 $89

/ month · billed yearly

Save $216 a year

3,000 sends / day
Start free
  • Everything in Starter
  • CRM with pipelines and deals
  • A/B variants per step
  • Bulk contact import
  • API and signed webhooks

Business

Most popular

For established teams that need higher limits and advanced features.

$263 $329

/ month · billed yearly

Save $792 a year

15,000 sends / day
Start free
  • Everything in Grow
  • Sending kept apart from other customers
  • Team roles and permissions
  • Full audit log
  • Priority support

Enterprise

Large orgs with custom volume and dedicated support.

Custom

/ month · billed yearly

15,000+ sends / day
Talk to sales
  • Everything in Business
  • Custom volume and contract
  • BYOK encryption · SSO / SAML
  • Custom data residency
  • Dedicated CSM
All plans include warmup, sending, inbox, analytics and CRM. See full comparison

Self-hosting is free. When Warmbly Cloud launches, link your instance and we warm up to 10 of your mailboxes in the shared pool at no cost, unlimited for $15 a month.

Send cold email people actually open.

Connect a mailbox, warm it up, send your first campaign today.