Ready to send better email?
Brew is the AI-native ESP. Define your brand once, ship on-brand email in minutes.
Brew is the AI-native ESP. Define your brand once, ship on-brand email in minutes.
151 real email sequences with the day each message landed. Browse them, remix one into a draft automation, or read them all from code over the API and MCP.

Most template galleries show you one email at a time. That is the least useful unit. A single welcome email tells you almost nothing about why it worked, because what makes a sequence work is the order, the gaps between sends, and the job each message does at that point in the arc.
So we kept the whole sequence. A flow in Brew is every email one brand sent after a signup or a newsletter subscribe, in order, with the day each one landed. There are 151 of them today, and all of them are readable from code.
GET /v1/flows and the list_flows MCP tool return the same records, so an agent can study all 151 sequences without a human clicking anything.emailId you can pass straight to create_email_design as referenceEmailId.Zapier's post-signup sequence runs eight emails over 10.7 days:
| Day | Subject |
|---|---|
| 0 | Welcome aboard 👋 | Let's make some magic with AI |
| 1 | Why you should ditch spreadsheets for Tables |
| 2 | Build your first Zap workflow with Copilot ⚡ |
| 3 | What engineers are automating this week |
| 5 | Put AI to work for you |
| 9 | Go beyond workflows 🚀 |
| 10 | Stuck? Or need automation ideas? |
| 10.7 | Your Zapier trial ends in three days ⏲️ |
Read the days, not just the subjects. Four emails land on consecutive mornings, then the gap stretches to two days, then four. The "stuck?" email arrives on day 10 and the trial-expiry email follows seventeen hours later. Somebody decided that the last useful thing before a paywall is an offer of help, and that the two should almost touch.
You cannot see that in a screenshot of one email.
The viewer opens on the first email, which has a wait only after it. Step into the middle, as in the Ro sequence above, and the gap shows on both sides. Ro's welcome flow is a slower shape than Zapier's, 12 emails over 46.7 days, and the gaps say so before you read a single subject line.

Each step carries the subject, the preview text, the day it landed, the wait since the previous send, a category, and a preview image. Ask for it and you get the rendered HTML too.
The corpus is one sequence per brand, so 151 flows means 151 companies:

That sits alongside the single-design gallery, which holds another 4,098 newsletters, 105 welcome emails and 68 promotions. Flows are the part that tells you the order.
Remixing is the part people expect to be a copy. It isn't.
Brew builds the automation graph first: your trigger, then the source flow's gaps as wait nodes, then one send node per step. That half is arithmetic, not generation. Nobody asks a model to guess that the fourth email goes out on day three.

Those wait nodes read 53 hours and 122 hours because that is what the source brand sent, rounded to the nearest hour. A whole-day gap stays a whole day, and anything under an hour becomes one. Only the emails are generated, and they are generated in parallel, each one against your brand. Your colors, your fonts, your voice, your product. Each step also gets a brief describing its job in the sequence and what sits on either side of it, because the subagents writing those emails cannot see each other's work and would otherwise produce eight unrelated messages on a shared schedule.
You get a draft automation with the pacing of a sequence a real company has already run, and copy that belongs to you. You still have to read it. The rebrand is good, not finished.
Every flow is available over the REST API and over MCP, so an agent can read the corpus directly.
# Every flow, newest first
curl "https://brew.new/api/v1/flows" \
-H "Authorization: Bearer $BREW_API_KEY"
# One sequence, every step
curl "https://brew.new/api/v1/flows?slug=zapier.com" \
-H "Authorization: Bearer $BREW_API_KEY"Filter by brand, category, or type (signup or newsletter). Sort by emails for the longest sequences, span for the ones that run longest, or remixes for what other people found worth copying. Pass semantic to search by what a sequence is about, which is how you find a trial-expiry win-back without knowing which brand wrote one.
The same read is a tool and a resource on the Brew MCP server:
list_flows # the tool, same filters and sorts
list_flows { slug: "zapier.com" } # one sequence with every step
brew://flows # @-mentionable in a chat
In the TypeScript SDK it is brew.flows.list(), and from a terminal it is brew-cli flows list --slug zapier.com. All four paths hit the same endpoint and return the same records. Flows are organization-wide, so the call takes no brand.
Questions that used to be a matter of taste become a query.
Which signup flows put a discount in the first email, and which wait until the trial is nearly over? What do developer tools send on day two? How long do newsletter welcome sequences run before they stop? How many sequences open with a question rather than a benefit? Every one of those is a filter and a loop over steps[], not an afternoon of opening screenshots.
The handoff that makes this training material rather than reading material is the emailId on each step. It is the same reference the template gallery uses, and it is exactly what create_email_design takes as referenceEmailId. So an agent reads the arc, picks the step that matters, and hands that one email to the design tool:
list_flows { slug: "zapier.com" }
→ steps[4].emailId = "pt1_k97hmahabyjrp1yfmga8m1rhah8e572q"
create_email_design {
referenceEmailId: "pt1_k97hmah…",
prompt: "day-5 activation email for our API product"
}
Study the arc, pull the specific email, build your version. No copy-paste in between.
Capture keeps at most twelve emails per flow and cuts the tail, so emailCount: 12 means twelve or more were sent, not exactly twelve. That is the 59 flows above.
Rendered email is bulky. Asking for HTML over MCP gets you the first step or two before the response fills up, and the rest arrive without it. The summary says how many were kept. The REST route has no such cap, so read the flow there when you want every body: GET /v1/flows?slug=…&include=html.
Open the gallery and read three sequences in your own category before you write anything. Then remix the one whose pacing you would defend to your own team, and change what does not fit.
If you are pointing an agent at this, list_flows with no arguments is the right first call. It returns cards with slugs, and the slug is the only thing you need for everything else. The full field list is in the API reference.
Every email one brand sent after a single signup or newsletter subscribe, in order, with the day each one landed relative to that trigger. One flow per brand, and the flow's slug is the brand's domain.
No. Brew copies the structure, meaning the step count, the order and the gaps, reproduced to the nearest hour. Every email is then rebuilt against your brand using the source design as a reference, so the output carries your colors, fonts and voice.
Yes for the REST and MCP reads, which use the same templates.read capability as list_templates. The gallery itself is public and needs no account.
Up to twelve. Capture keeps the first twelve and cuts the tail, so a flow reporting twelve emails may have run longer. 59 of the 151 published flows sit at that ceiling.
Yes, with include=html on a single-flow read. Over MCP only the first step or two fit inside one response and the summary tells you how many were kept. The REST route returns every body.
