Sending a Marketing Email

A blast is one message per recipient, built from an email template and addressed to the recipients you choose. There is no scheduling, no pause and no undo: pressing Send hands the whole thing to a queue, and the next surface you see is a send report. That makes the shape of the composer worth learning before you use it rather than after.

Where the composer is

The composer is Engage ▸ Emails. Its list groups your emails as Drafts, Queued and Sent, with a pinned New email row on top that opens the template gallery — the built-in starters and your own templates. Picking one copies it into a new draft named after the template and stamped with today’s date; from then on the draft owns its content, and later edits to the template do not reach it. Two other screens start a draft for you: Contact Filters and Accounts each have a New email menu offering Blank and your five most recently used templates, and the draft it creates arrives with the current segment or account already filled in as recipients.

The older Email Marketing screen at /emails still works. It has four tabs — New Email, All Contacts, Groups and Sent Emails — and is reachable only by typing the URL: it is not in the tab rail. Legacy URLs that still work lists it and its siblings. Its contact tabs are documented with Engage, in contacts and importing contacts, and its Groups tab in contact groups and audiences. Its New Email composer is described under the legacy composer below, and its Sent Emails tab in the second half of this page.

Composing

A draft in Engage ▸ Emails

A draft is one document you edit whole — masthead, content blocks and compliance footer — with these fields above it:

  • Name — the label this send carries in the Emails list. Recipients never see it.
  • Recipients — any mix of individual contacts (search by name or email), Contact Filters segments (All contacts, Hot leads, Stalled, a persona, a committee role), contact groups and accounts. They are unioned and deduplicated, so a person named twice is mailed once. The count beside the field is everyone they name, with a warning mark when some were emailed within the last month; the Recipients tab in the right rail lists them one by one, badged Opted in, Opted out or Bounced, and says how many will receive it.
  • Subject and Preview text — both required to send. They start as the template’s defaults.
  • Asset and Page — shown only when the content uses an asset or page merge field or a page-bound block. They fill those fields with tracked links for each recipient.
  • Template — which template the email renders through. Switching asks first, because it replaces the content, subject and preview text with the new template’s.

The body is the same block editor as a template, and Generate with AI (Mod + J) on its toolbar writes or rewrites blocks from a prompt, filling in the subject and preview text if they are empty. Edits save automatically — there is no Save button, and a chip in the header reads Saving…, Saved or Unsaved changes — and several people can edit one draft at once, each seeing the others’ cursors. The right rail’s Preview tab renders the draft through the template’s look and your brand, in light and dark.

The overflow menu holds Delete, which removes drafts only — queued and sent emails are kept as send history — and, on Growth and up, Save as template, which turns the email’s content or just its structure into a new template.

Placeholders gate the send

A template marks the slots each email must fill as placeholder blocks. In a draft they show as numbered to-dos, and Send stays disabled until every one is filled; its tooltip names what is missing — Fill 2 placeholders first: Headline, Feature image. The same check covers the subject and the preview text, and any merge field the send cannot fill — an asset or page field with nothing chosen in Asset or Page, or a form-submission field, which only a form’s response email can fill. A Dynamic pages block is the one exception: your site fills it at send time, so it never blocks a send. How placeholders are authored is on email layouts.

The legacy composer

The New Email composer with all four fields filled and the Recipient Preview listing group members
  • Email Name — defaults to Email Blast plus a timestamp. Recipients never see it; it is the label this send carries in Sent Emails forever, so replace the default with something you will recognize in six months.
  • Recipient Group — the contact group to send to. The dropdown lists groups and nothing else, and is disabled outright when the workspace has none. Pick one and the Recipient Preview appears on the right, listing the resolved members with pagination so you can page through the actual audience rather than trusting a count.
  • Email Template — the email layout supplying the subject and the HTML body. Also disabled when there are none.
  • Page (optional) — a published page to feature. It populates the layout’s page variable, so it does something only if the layout uses it; leave it empty and a layout that references page renders that block empty.

Send a test to yourself

A draft in Engage ▸ Emails has no test button of its own. To see a real message in your inbox, open its template in Design ▸ Email templates and press Send test: it mails the template to your own account address, with sample data in every unfilled block. The template editor needs Growth; below it, a form that answers with the template has a Send test email button in its response-email settings on every plan. In the legacy composer, Send a test to yourself is available as soon as a layout is selected. Either way the test goes to you — not to any recipient, and not to any address you can type — and it is classified transactional, so it is outside both the marketing-email gate and the monthly meter.

Sending

In Engage ▸ Emails, Send sits in the draft’s header. There is no confirmation dialog: pressing it saves any pending edits and sends. It is disabled, with the reason in its tooltip, until every placeholder is filled (Fill 1 placeholder first: …), until recipients are chosen (Choose recipients first), and for anyone below Content Publisher (Requires contact:publish). Below Starter there is no Send button at all — an upgrade banner sits above the editor, reading “Upgrade to Starter to send marketing email to your opted-in contacts. You can still compose drafts.” In the legacy composer, Send opens a confirmation dialog titled Send Email, and below Starter an upgrade banner takes the button’s place.

The composer on a Free workspace, with the marketing-email upgrade banner where the Send button would be
Captured on a Free workspace. Everything above the banner is fully usable; only the send is blocked.

What happens next runs in two halves. The first half is synchronous and answers you straight away; for Engage ▸ Emails it runs in this order:

  1. Access and entitlement checks. You need contact:publish (Content Publisher), and the workspace needs the marketing-email feature. Below Starter this returns 402 with reason: "feature_gated".
  2. Check the draft. An email already sent is refused with 409; one with no recipients with 400 Email has no recipients selected.
  3. Check the content. A document missing its masthead or footer is refused with 400 Malformed email document, and any unfilled placeholder, empty subject or preview text, or unfillable merge field with 400 Missing required content: and the list.
  4. Resolve the recipients. Every selection is expanded through the contact visibility cap, so contacts locked above your plan’s quota are never candidates, and only contacts who are opted in and not hard-bounced are kept. If nobody survives, the request fails with 400 No opted in recipients.
  5. Check the monthly allotment. If this send would push the month past the quota, it is refused whole — see below.
  6. Claim, freeze and queue, then return 201. The draft moves to Queued, the look it renders with — template, brand palette, logo and width — is frozen onto it, so a later brand or template edit cannot change what goes out, and the batch request is queued. Nothing has been sent yet.

The legacy composer runs the same gates with two differences: it needs only contact:write, and step 4 drops only do-not-contact, refusing an empty group with 400 No opted in users in group.

The second half runs off the queue, and this is where a blast can go quiet:

  1. A second tier and allotment check. Queue lag or a concurrent blast can land an event that is no longer within quota, so both gates are re-evaluated against the live audience.
  2. Filter to opted-in and not-hard-bounced. For a legacy send this is the consent pass that the Recipient Preview does not apply.
  3. Freeze the recipient list, create the batch and its recipient rows, then fan out at 100 recipients per queue message. An Engage ▸ Emails send records how far the fan-out got, so a failure part-way resumes where it stopped rather than starting again.
  4. Render and send each message individually, stamping the sent time on the recipient’s row. Once the fan-out is complete the email moves to Sent.
sequenceDiagram
  autonumber
  participant C as Engage ▸ Emails
  participant A as POST /api/emails/:id/send
  participant Q as Email queue
  participant B as Batch handler
  participant S as Send handler
  participant R as Recipient

  C->>A: Send (pending edits saved first)
  A--)C: 402 feature_gated — below Starter
  A->>A: Check recipients, placeholders, subject, preview text
  A--)C: 400 Missing required content
  A->>A: Resolve recipients (visibility-capped)<br/>keep opted-in, not hard-bounced
  A->>A: Monthly allotment check
  A--)C: 402 quota_exceeded — quota · used · currentTier
  A->>A: Move to Queued · freeze the look
  A->>Q: create-email-batch
  A--)C: 201 accepted
  Q->>B: create-email-batch
  B->>B: Re-check tier and allotment
  B--xB: Back to Drafts and logged — you are never told
  B->>B: Freeze recipients<br/>create the batch and its rows
  B->>Q: send-email × N, 100 per message
  Q->>S: send-email
  S->>S: Render · rewrite links · unsubscribe check
  S->>R: Deliver
  S->>S: Stamp the sent time

The three dashed returns are the failures you see; the crossed self-message is the one you do not.

StageConditionWhat you seeWhere
Feature gateWorkspace is below Starter402 with reason: "feature_gated", feature, requiredTier, currentTierBefore anything is queued
Content gateA placeholder, the subject or the preview text is empty400 Missing required content: … — and Send is disabled before you get that farEngage ▸ Emails
Empty audienceNobody eligible survives400 No opted in recipients (legacy: 400 No opted in users in group)Before anything is queued
AllotmentThis send would pass the monthly quota402 with reason: "quota_exceeded", quota, used, currentTierBefore anything is queued
Queue-side re-checkTier or quota changed after acceptanceNothing. The event is dropped and logged; an Engage ▸ Emails send returns to DraftsNowhere else in the CMS
Per-recipient guardRecipient hard-bouncedThat recipient is skippedNowhere — their row keeps no sent time
Per-recipient guardRecipient opted out after fan-outThat recipient is skippedNowhere
Per-recipient guardRow already has a sent timeNo second message is sentNowhere — Leed has no resend

Every 402 on this page carries the same body shape as every other gate in Leed; when a feature is gated decodes it field by field.

Your monthly allotment

PlanMarketing emails per monthWhat happens at the limit
Free0The feature gate fires first — there is no Send button to press
Starter5,000The next blast that would cross the line is refused whole
Growth50,000The same
EnterpriseUnlimitedNo allotment check runs

Those are the launch defaults. A workspace’s stored quota is the real value and an administrator may have a different one; usage and limits shows yours, alongside the contacts limit and analytics retention — the only three quotas in Leed.

How it is counted

The window is the current UTC calendar month. It resets at midnight UTC on the first, not on your billing date and not in your timezone.

Only marketing rows count. A row is charged from the moment its batch is accepted, not from the moment it is delivered: usage is rows sent this month plus rows reserved by batches created this month and not yet sent. That is what stops two blasts fired seconds apart from both passing a check against a stale sent-only count and overshooting between them.

Transactional email never counts — not a form response email, not a test send, not a sign-in code. How email works in Leed lists which is which.

What happens at the limit

The whole batch is refused before anything is queued. Leed never half-sends a blast: if a 900-recipient send would take you from 4,500 to 5,400 on a 5,000 allotment, all 900 are refused, not 500 of them. The 402 tells you the quota, how much you have used and your current tier, so the arithmetic is visible rather than guessed.

While a workspace sits at or over its marketing allotment, Leed emails every active administrator once a day, and suppresses the notice for seven days after each one so a long overage does not become a daily nag. A Free workspace never receives it — a zero allotment with a feature gate in front of it has nothing to exhaust.

The only remedies are waiting for the month to roll over or moving up a plan; there is no way to buy a top-up. Changing plans and downgrades covers what happens to an in-flight month when you switch.

Results in Engage ▸ Emails

A sent email in Engage ▸ Emails swaps the editor for its results. Performance shows Sent, Clicked and Unsubscribed, and an Opened donut that splits recipients into opened, Prefetched — images Apple Mail Privacy Protection loaded on delivery, which are not counted as opens — and no response. Below it is the email as it went out, as one recipient saw it, with links disabled. The right rail adds a Delivery panel (status, sent time, recipients, template, bounced and unsubscribed rates), the engagement analytics — opens and clicks over time, the destinations clicked, and who opened and clicked — and the site visits the email drove.

The sent copy and the per-recipient analytics need the reader-identity entitlement, which is Starter and up. Blasts sent from the legacy composer are listed here too, read-only, with their tracking numbers but without the original email. Where the opens and clicks come from is on tracked links and open tracking.

Sent Emails

The legacy screen’s Sent Emails tab is the older report. Each row is one blast — from either composer — with four engagement columns that each show a count and, beneath it, that count as a percentage of recipients. A metric of zero shows a dash instead of 0.0%.

The Sent Emails table showing several sends with recipients, opens, clicks, bounces and unsubscribes
ColumnWhat it countsPer recipient or per eventWhen the number is written
NameThe Email Name you typed—At batch creation
DateWhen the batch was created—At batch creation
Contact GroupThe group the send was addressed to, linked—At batch creation
PageThe page from the Page field, linked—At batch creation
RecipientsRows created at fan-outPer recipientAt fan-out, after opt-out and bounce filtering
OpensRecipients who opened at least oncePer recipientOn the first tracking-pixel hit
ClicksRecipients who clicked at least oncePer recipientOn the first tracked-link click
BouncesRecipients whose delivery failedPer recipientWhen the bounce report arrives
UnsubscribesRecipients who opted out from this sendPer recipientOn the unsubscribe click

Four things this table does not say, all of which get misread:

  • It shows only blasts. The list is filtered to marketing sends from Engage ▸ Emails and the legacy composer. Form response emails, and any future campaign send, are excluded by batch type — so a form that has mailed ten thousand people leaves no row.
  • The metrics are flags, not counts. Each is a boolean on the recipient’s row, so the columns count recipients who did the thing at least once. A contact who opens your email six times adds one to Opens, and Opens can never exceed Recipients. An Apple Mail prefetch is not an open, so it is not in Opens either.
  • Recipients is post-filter. It counts the rows created at fan-out, after opted-out and hard-bounced contacts were removed. It will often be smaller than the number you saw while composing, and both numbers are correct — the funnel is drawn out on contact groups and audiences.
  • There is no drill-down here. You cannot click a row to see who opened. Per-send recipient analytics are in Engage ▸ Emails, and one contact’s full email history — every send they received, opened and clicked — is on their record in contacts. Both need the reader-identity entitlement, which is Starter and up.

Where the Opens and Clicks numbers physically come from, and what they can and cannot tell you — image blocking, privacy proxies, and what a forwarded email does to attribution — is on tracked links and open tracking. The Unsubscribes column is explained by unsubscribes and opt-outs, and the Bounces column is only meaningful once you know the three classes of bounce and which one permanently retires an address.

What you cannot do yet

Stated plainly, so you do not go looking:

  • Schedule a blast for later. Send sends now; Queued means waiting in the send pipeline, not scheduled. Publish-time scheduling exists in Leed, but it is a page feature — you can schedule the page a blast points at, not the blast.
  • Pause or cancel a send in flight. Once the email is queued there is no stop.
  • Resend to non-openers. Each recipient gets one row per send and a row that has been sent is never sent again, so a follow-up means a new email to a new audience.
  • A/B test a subject line. One email, one subject. Two variants means two emails to two audiences, compared by hand.

If you need email as one channel among several in a coordinated push, the planning side of that lives in campaigns and deliverables — which coordinates the work but does not send — and the measurement side in journeys, funnels and attribution.

ESC