Open-Source Cold Email & Warmup Platform | Warmbly

9 min read Original article ↗

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

Drag to branch

Pull a link from a step to add an “if opened / clicked / replied” path. No match just stops.

A/B at every step

Weighted subject + body variants; the stronger one keeps sending.

Threaded follow-ups

Follow-ups reply on the previous subject, so they land in the same conversation.

Explore campaigns

Scheduling

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.

Per-day windows

Independent windows for each day: mornings only, or split shifts. Several per day is fine.

Timezone-aware

Sends follow the chosen timezone; worker IPs spread the volume naturally.

One-click presets

Mon–Fri 9–5 in a tap, then fine-tune by dragging the blocks.

See sending controls

Unified inbox

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.

One queue, every mailbox

Scope by inbox, tag, or status: unread, awaiting reply, snoozed, scheduled.

Classified on arrival

Positive, out-of-office, unsubscribe and bounce are labeled before you open them.

Reply in place

Snooze, schedule, and send from the same pane, keyboard-first.

Tour the inbox

Analytics

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.

Placement, not vanity

Track the metrics that move reputation, over 7, 30 or 90 days.

Best performers, surfaced

Top campaigns and account health rank themselves as sends roll in.

Shareable report card

Export a branded image of any range in a single tap.

View analytics

AI assistant

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.

One-line briefs

Tell it the goal; get back a ready-to-send draft with variables filled in.

Tone presets

Friendly, professional, concise, persuasive. Switch and regenerate in a click.

Credits, no surprises

Each draft uses one writing credit, shown before you generate.

Try the assistant

Integrations

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.

OAuth in two clicks

Authorize a provider and Warmbly handles the rest. Revoke anytime.

Signed webhooks

Every event is HMAC-signed and HTTPS by default, with SSRF protection.

Encrypted at rest

Secrets are sealed with your data key, never stored in plaintext.

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.

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.

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.

Explore automations or start free

Developers

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.

Scoped keys

Mint read, write, or send-only keys per environment and rotate without downtime.

Idempotent by default

Send an Idempotency-Key and retries are always safe.

Webhooks that verify

Subscribe to events like contact.replied with signed payloads.

Read the API docs

CRM

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.

Born from the reply

A reply classified positive in the unibox opens the deal and pauses the sequence, so nothing keeps sending to someone who already said yes.

One timeline, traced to the send

Every send, open, reply, and stage change lands on the deal, each tagged with the sequence step and mailbox it came from.

Pipeline and forecast in one view

Move deals across your stages on the board while value, weighted total, and probability stay current on the record.

Tasks with a type and an owner

A positive reply spins up a typed follow-up task on the deal, assigned to a teammate with a due date, so the next step never slips.

See the CRM

Changelog Shipping continuously

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.

View full changelog
  1. 2026-07-26 #85 Fixed

    Renumber duplicate migration 000077_ai_variables_resolved to 000078 so the backend boots

    • 000077warmupgenerationscale.{up,down}.sql (merged via #82)
    • 000077aivariablesresolved.{up,down}.sql (merged via #83)
  2. 2026-07-22 #84 New

    Ship the dashboard and admin as production release images

    • Web and admin build to static SPAs served by nginx (multi-stage Dockerfiles, SPA history fallback), published on…
    • Solves the Vite build-time env problem: a small runtime config shim reads window.WARMBLYENV, rendered into /config.js…
    • The prod docker-compose serves those built images instead of a Vite dev server. Hot-reload dev stays on make app.
  3. 2026-07-22 #83 New

    AI content blocks and a much more capable dashboard assistant

    • A couple of things in one branch.
  4. 2026-07-22 #82 New

    Automate warmup content and replies

    • Generates complete warmup conversations and coherent replies, scales and refreshes the content bank automatically, and turns the admin pages into monitoring views. Checks: Go lint, admin typecheck and lint, docs typecheck and lint.

Older releases and the full history Read the full changelog

Open source Apache 2.0

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 largest open-source cold email and warmup platform.

Apache 2.0

Fork it, ship it

Public

Issues and pull requests

warmbly · self-host

$ git clone https://github.com/warmbly/warmbly.git

$ cd warmbly

$ make up # build images, boot the full stack

Warmbly is live on http://localhost:8080

$

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

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.

Built with Go · Rust · Elixir · React · Astro DocsArchitectureChangelogApache 2.0 license

Personalization / Templating

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.

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.

Picks one variant

Hey Alex Hi Alex Hello Alex

Everything resolves at send time, and the composer previews the result against sample data before you launch.

How we differ

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.

One platform

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.

Healthy

Watch

Quarantined

Blocked

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.

Step 12 variants

Intro · plain text

Step 2if no reply

Wait 3 biz days

Step 34 variants

Follow-up · context

Step 4if no open

Soft break · 7 days

Vetted pool, real reputation surface

Premium pool diversity across Gmail, Outlook, iCloud, Yahoo and self-hosted IMAP.

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.

All plans include warmup, sending, inbox, analytics and CRM.

See full comparison

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.

Start the trial Or self-host it