Copy as markdown[View .md](https://docs.funnelfizz.com/features/email "View the raw markdown for this page")[Open in Claude](https://claude.ai/new?q=Read%20https%3A%2F%2Fdocs.funnelfizz.com%2Ffeatures%2Femail.md%20and%20help%20me%20with%20this%20FunnelFizz%20topic%3A%20Email "Open this page in Claude with context")[Open in ChatGPT](https://chat.openai.com/?q=Read%20https%3A%2F%2Fdocs.funnelfizz.com%2Ffeatures%2Femail.md%20and%20help%20me%20with%20this%20FunnelFizz%20topic%3A%20Email "Open this page in ChatGPT with context")

# Email

The native email engine. No Mailchimp, no HubSpot, no third-party integration — FunnelFizz composes, renders, sends, and tracks everything in-house (using Resend as the delivery layer under the hood).

For conceptual background, start with [Concepts → Email](https://docs.funnelfizz.com/concepts/email.md). This page is the complete feature reference.

## What you can do[​](#what-you-can-do "Direct link to What you can do")

* **Drag-and-drop MJML editor** — 13 block types, all mobile-responsive out of the box.
* **Dynamic recipient lists** — target by funnel stage, split branch, or subscription status.
* **A/B testing** (PRO) — split audience, auto-pick winner by open or click rate.
* **Scheduled sends** — queue for future delivery.
* **Custom sending domain** (PRO) — verify your own domain with SPF + DKIM + DMARC.
* **Open & click tracking** — pixel + URL rewriting, on by default.
* **Automatic suppression** — hard bounces and unsubscribes never get emailed again.
* **Automations** — see [Features → Automation](https://docs.funnelfizz.com/features/automation.md) for the DAG editor.

## The editor[​](#the-editor "Direct link to The editor")

Open a campaign, click **Edit** → **Drag & drop**. You see three panels:

```
┌──────────┬─────────────────────────┬────────────┐

│  Blocks  │       Canvas            │  Settings  │

│          │                         │            │

│  header  │  (Your email preview)   │ font, size │

│  text    │                         │ padding,   │

│  button  │                         │ color,     │

│  image   │                         │ alignment  │

│  ...     │                         │            │

└──────────┴─────────────────────────┴────────────┘
```

Drag blocks from the left, drop them on the canvas, tune settings on the right. Undo / redo work. Mobile preview toggle shows what it'll look like on phones.

### Block types[​](#block-types "Direct link to Block types")

| Block       | What it is                                    |
| ----------- | --------------------------------------------- |
| **Title**   | H1-style heading, display font                |
| **Text**    | Paragraph, rich text                          |
| **Header**  | Top banner with logo + links                  |
| **Footer**  | Legal footer with unsubscribe link (required) |
| **Button**  | CTA button with link                          |
| **Image**   | Image with alt text and optional link         |
| **Logo**    | Your brand mark, centered                     |
| **Divider** | Horizontal rule                               |
| **Spacer**  | Vertical whitespace                           |
| **Video**   | Thumbnail + play overlay linking to a video   |
| **Columns** | 2- or 3-column layout container               |
| **Social**  | Your social icons (Twitter, LinkedIn, etc.)   |
| **HTML**    | Raw HTML passthrough (advanced)               |

All blocks render via MJML → inlined CSS HTML. Tested across Gmail, Outlook, Apple Mail, Yahoo, and the major clients.

### Composition modes[​](#composition-modes "Direct link to Composition modes")

* **Drag & drop** — default, most people use this.
* **HTML** — paste raw HTML if you want total control or have a pre-built template.
* **Plain text** — minimal, deliverable-friendly.
* **Template** — start from a library of prebuilt templates (welcome, feedback, churn).

## Recipient selection[​](#recipient-selection "Direct link to Recipient selection")

When you create a campaign, you pick a **recipient group**:

* **Stage-based** — everyone currently in a specific stage of a funnel.

  <!-- -->

  * e.g., "all TRIAL users in Main Funnel"
  * e.g., "all CUSTOMER users in Main Funnel where subscription = active"

* **Split-filtered** — a specific track within a split funnel.
  <!-- -->
  * e.g., "all TRIAL users who came from UTM source = reddit"

* **Churn-targeted** — the Churned slice of CUSTOMER stage.
  <!-- -->
  * e.g., "everyone who was a paying customer but doesn't have an active sub anymore"

The list re-evaluates at send time, not at draft time. If someone moves between stages between drafting and sending, they're automatically included/excluded correctly.

## A/B testing (PRO)[​](#ab-testing-pro "Direct link to A/B testing (PRO)")

1. Create a campaign.

2. In the settings, flip **A/B test** on.

3. Configure:

   <!-- -->

   * **Variant A** content.
   * **Variant B** content.
   * **Test audience %** — how much of the list goes to A/B before winner is declared (typical: 20%).
   * **Winner criterion** — open rate or click rate.
   * **Test duration** — how long before picking the winner (typical: 4 hours).

4. Schedule.

At send time:

* FunnelFizz randomly assigns each test-audience recipient to A or B (deterministic by recipient hash so re-runs are stable).
* After the test duration, the cron compares variant stats and picks the winner.
* The remaining audience gets the winning variant.

You can watch the test in progress from the campaign dashboard.

## Scheduled sends[​](#scheduled-sends "Direct link to Scheduled sends")

Set a send time in the future. The scheduled-campaigns cron runs every minute, picks up campaigns past their `scheduledAt`, and enqueues sends to the recipient list.

You can cancel a scheduled campaign up until the cron fires. After that, the sends are in the queue and will go out.

## Custom sending domain[​](#custom-sending-domain "Direct link to Custom sending domain")

By default on HOBBY, emails send from `funnelfizz.com`. That's fine for small volume but corporate mail servers sometimes throttle traffic from shared sender domains.

On PRO, verify your own:

1. Go to **Settings → Email → Domains → Add domain**.

2. Enter your domain (e.g., `mail.example.com` — we recommend a subdomain, not your apex).

3. FunnelFizz shows you three DNS records:

   <!-- -->

   * **MX** for the subdomain pointing to Resend.
   * **TXT (SPF)** — adds our sending servers to your authorized senders.
   * **TXT (DKIM)** — signing key for DKIM authentication.
   * **TXT (DMARC)** (optional but recommended) — your DMARC policy.

4. Add the records to your DNS registrar (Cloudflare, Namecheap, Route 53, etc.).

5. Back in FunnelFizz, click **Verify**. We poll DNS and mark the domain verified when all records resolve.

6. Once verified, you can pick this domain as the sender for any campaign.

Full guide: [Tutorials → Email drip campaign basics](https://docs.funnelfizz.com/tutorials/email-drip-campaign-basics.md#custom-domain).

## Tracking[​](#tracking "Direct link to Tracking")

* **Opens** — a 1x1 pixel is injected into the email. When the recipient's email client loads images, we log an `email_opened` event.
* **Clicks** — every link is rewritten to go through `funnelfizz.com/r/<token>` which redirects and logs an `email_clicked` event.
* Both events flow into your funnel as tracking events, so you can split or automate on "who opened the day-2 email."

Opens are notoriously unreliable (Apple Mail Privacy Protection pre-loads images, inflating open rates). Use click rate for serious measurement.

## Suppression lists[​](#suppression-lists "Direct link to Suppression lists")

* **Unsubscribes** — every email has a required unsubscribe link. If a recipient clicks it, they're added to the workspace-wide unsubscribe list and never receive anything else.
* **Hard bounces** — bounces marked permanent (invalid email, domain doesn't exist) go on the bounce list automatically.
* **Complaints** — anyone who marks you as spam goes on the list.

These lists are workspace-wide, not per-campaign or per-funnel. An unsubscribe applies forever.

## Plan limits[​](#plan-limits "Direct link to Plan limits")

|                      | FREE | HOBBY     | PRO       |
| -------------------- | ---- | --------- | --------- |
| Campaigns            | —    | Unlimited | Unlimited |
| Emails/month         | —    | 3,000     | 20,000    |
| A/B testing          | —    | —         | Yes       |
| Custom domain        | —    | —         | Yes       |
| Automations/stage    | —    | 1         | 5         |
| Max automation depth | —    | 3 steps   | 5 steps   |

Quotas reset the 1st of each calendar month. If you burn through your quota mid-month, new sends are queued until the next reset — or upgrade.

## What's not here[​](#whats-not-here "Direct link to What's not here")

* **No visual email builder for signups** — FunnelFizz does outbound only. Signup forms live on your site and fire events back via the tracking script.
* **No transactional email SDK** — for password-reset-style emails from your own app, use Resend directly. (FunnelFizz is for marketing email, not app email.)

***

**Next:** [Automation →](https://docs.funnelfizz.com/features/automation.md) — the DAG engine.
