> ## Documentation Index
> Fetch the complete documentation index at: https://docs.brew.new/llms.txt
> Use this file to discover all available pages before exploring further.

# A/B Test Two Subject Lines

> Split a saved audience 50/50 between two subject lines with a one-off flow, then compare the two paths in analytics.

A subject line decides whether the email gets opened at all. To learn which of two works better on your list, send each to a comparable group and compare.

Brew does this with a [one-off flow](https://docs.brew.new/recipes/run-a-one-off-flow.md): a manual-audience automation with a **Percentage split**. Set to 50/50, it sends about half the audience subject A and half subject B. Each path has its own numbers.

> [!NOTE]
>
> **Before you start.** You need a [verified sending domain](https://docs.brew.new/get-started/verify-your-sending-domain.md) and a finished email. You also need a [saved audience](https://docs.brew.new/audience/create-audiences.md) of opted-in contacts.

> [!WARNING]
>
> Every marketing recipient must have opted in to hear from you. Importing or syncing contact data into Brew is not permission to email it. See [What You Can Send](https://docs.brew.new/get-started/what-you-can-send.md).

## 1. Make Two Copies of the Email

Open the email on the canvas and clone it from the toolbar. Keep the body identical. The subject line should be the only difference, or you won't know which change moved the result.

Two copies give each path its own row in analytics. Name them so you can tell them apart, such as *Launch, subject A* and *Launch, subject B*.

## 2. Generate the Flow

Open **Home** and describe the test:

```text theme={null}
Build a one-off flow I can run manually against my "Newsletter
subscribers" audience.

Percentage split, 50/50.
Left path: send "Launch, subject A" with the subject "[subject A]".
Right path: send "Launch, subject B" with the subject "[subject B]".
```

Brew opens the flow with the trigger, the split, and both sends. Click each **Send Email** node and confirm it sends the right copy with the right subject. If the trigger isn't set to your audience yet, click it and use **Change trigger**.

## 3. Test Both Paths

Click **Test automation** and fire a test to your own address. A test sends you down one path only, so check that subject. Then [send a test](https://docs.brew.new/create-emails/create-and-send-an-email.md#send-the-email) of the other copy with its subject.

## 4. Run It

Check the contact count on the trigger node, then launch the run with **Run now** or **Schedule**. The automation shows **Sending** while the run is in flight and **Sent** when it completes.

Skip **Gradual send** for a test. Batches that go out hours apart make the two paths harder to compare.

## 5. Read the Result

Wait a day or two, then open the automation in [analytics](https://docs.brew.new/analytics/reading-analytics.md#automation-detail). **Email steps** lists both copies, each with its own sent, opened, and clicked.

Compare rates, not raw counts, since the two paths rarely get exactly the same number of sends:

* **Opens** are the subject line's direct effect, but they overcount. Apple Mail Privacy Protection and other privacy features open mail automatically, and Brew can't filter every one. See [Key Metrics](https://docs.brew.new/analytics/key-metrics-and-terms.md).
* **Clicks** are a stronger signal. Someone who clicked read the email.

A small audience gives noisy results. If A and B differ by a point or two, call it a tie and test again later. A difference that repeats across sends is worth acting on.

## 6. Use What You Learned

A percentage split doesn't pick a winner or send it to the rest of the list. Take the lesson to your next send instead: the shorter subject, the question, the number in the first word.

The flow stays in your Automations list. For the next test, swap in new copies and subjects in chat, and run it again. Each run keeps its own history.

## From an Agent or Code

Over [MCP](https://docs.brew.new/api-reference/mcp/tools.md):

* `clone_email` copies the design exactly, without AI.
* `save_automation` saves the flow: a manual-audience trigger on the saved `audienceId`, a split node with `mode: "percentage"` and `leftPercentage: 50`, and one send node per path. Each send node pins its own design and `subject`.
* `test_automation` runs one path. Pass `scenario: { splits: [{ nodeId: "<split node id>", branch: "left" }] }`, then again with `"right"`, to test each one. Use the node id stored on the saved flow.
* `run_automation` with `dryRun: true` returns the recipient count. The real launch returns a confirmation request on OAuth and organization connections. See [Confirmation](https://docs.brew.new/api-reference/mcp/authentication-and-scoping.md#confirmation).

Over the API the launch is `POST /v1/automations/{automationId}/run` with an `Idempotency-Key`.

For the result, `GET /v1/analytics/events` with the `automationId` and `groupBy=emailId,eventType` counts open and click events per copy. These are events, not people, so a reader who opens twice counts twice. Divide by each copy's sends for a rate.

[Per-Contact Engagement](https://docs.brew.new/api-reference/guides/per-contact-engagement.md#count-events-instead-of-listing-them) covers the counts.

## Related

* [Run a One-Off Flow](https://docs.brew.new/recipes/run-a-one-off-flow.md): manual-audience automations step by step.
* [Automations](https://docs.brew.new/create-emails/automations.md): the Percentage split and the other node types.
* [Reading Analytics](https://docs.brew.new/analytics/reading-analytics.md#automation-detail): Email steps on the automation page.
* [Key Metrics](https://docs.brew.new/analytics/key-metrics-and-terms.md): why opens overcount and clicks don't.
* [QA an Email Before a Big Send](https://docs.brew.new/recipes/qa-before-a-big-send.md): the checks to run on both copies first.

## Need Help?

Our team is ready to support you at every step of your journey with Brew. Choose the option that works best for you:

> [tab] Self-Service Tools
>
> > [card] Search Documentation
> >
> > Type in the "Ask any question" search bar at the top left to instantly find relevant documentation pages.
>
> > [card] [Ask ChatGPT or Claude](#top)
> >
> > Click here to open the **Copy page** menu at the top of this page, then send the page to ChatGPT, Claude, or your editor.

> [tab] Talk to Our Team
>
> > [card] [Schedule a Call](https://cal.com/team/brewdotnew/brew-demo)
> >
> > Book time with our founders for personalized guidance on strategy, best practices, or complex implementation questions.
>
> > [card] Call Us Directly
> >
> > Need immediate assistance? Reach us at **+1-(332)-203-2145** for urgent issues or time-sensitive questions.
>
> > [card] Slack Channel
> >
> > Our preferred support channel. You'll receive an invite after signup for direct founder support and fast responses.
>
> > [card] [Email Support](mailto:support@brew.new)
> >
> > Contact us at **[support@brew.new](mailto:support@brew.new)** for detailed inquiries or if you prefer not to use Slack.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.