Double opt-in is the recommended pattern for any list you plan to send marketing to. It protects deliverability, filters out typos and bots, and gives you documented consent in line with US email-marketing best practices (CAN-SPAM) and similar laws if you market internationally.
How the flow works
The setup is split into two independent flows so each step has a clean trigger and is easy to debug.| Flow | Trigger | What it does |
|---|---|---|
| Flow 1 — Confirmation request | Customer receives a subscription status in the selected channel or topic | Sends a confirmation email, waits 24 hours, sends a reminder if the customer hasn’t confirmed |
| Flow 2 — Welcome after confirmation | ”Customer subscription to channel” action is recorded (fired automatically when the customer clicks the confirmation link) | Sends the welcome campaign |
- Updates the subscription status from “implicit” or “pending” to “subscribed.”
- Generates a “Customer subscription to channel” action — this is what fires Flow 2.
Before you build the flows
You need three campaigns ready in Maestra before you wire the flows together.Confirmation email campaign
Create an automatic email campaign using the opt-in (subscription confirmation) sending profile. The opt-in profile lets you send to addresses that haven’t confirmed yet — your regular marketing profile will skip them.The email must contain a clearly labeled confirmation link or button (for example, “Confirm subscription”). When you insert it, choose the link type that triggers a subscription update on click.
Reminder email campaign
Create a second automatic email campaign, also using the opt-in profile. This is the nudge you send 24 hours later to customers who didn’t click the first email. Reuse the same confirmation link.
Flow 1: Subscription confirmation request
This flow runs the moment a new subscriber is captured — from a signup form, checkout subscribe box, popup, landing page, or any other source that writes a subscription status to Maestra.Trigger
Use the Subscription status changed trigger.- Event: customer acquires the selected subscription status in a channel or topic.
- Channel: Email.
- Topic: the topic you want to confirm (for example, your main newsletter topic).
- Status: the “implicit” / “pending” status assigned to new, unconfirmed subscribers.
The trigger fires for both explicit subscribes (a customer ticks a box) and implicit subscribes (a status assigned by another system or import). That’s intentional — you want every new address to go through confirmation.
Flow blocks
Start block: limit to one entry per customer
In the start block, set the execution limit to one entry per customer. This prevents the same customer from receiving duplicate confirmation emails if their subscription status is rewritten multiple times (for example, by a re-import).
Filter: contact exists and is valid
Add a filter that checks the customer has a valid email address. Drop anyone who fails — there’s no point continuing the flow for an invalid contact.Common conditions to include:
- Email is present.
- Email is not marked as invalid.
- Email is not on a suppression / hard-bounce list.
Send the confirmation email
Add a Send email block pointing to your confirmation email campaign (the one built with the opt-in profile).
Wait 24 hours
Add a Wait block set to 24 hours. You can tune this — 24 hours is a common default, but 48 or 72 hours also works depending on your audience.
Filter: subscription still unconfirmed
After the wait, add a filter that checks the customer’s subscription is still in the “implicit” / “pending” state. If the customer already clicked the confirmation link, they should exit the flow here — no reminder needed.
Send the reminder email
Send the reminder email campaign. Keep it lightweight — a quick “Did you mean to subscribe?” with the same confirmation button.
Flow 2: Welcome message after confirmation
This flow fires the instant the customer clicks the confirmation link. Because the click writes a “Customer subscription to channel” action, you can trigger directly off that action instead of polling for status changes.Trigger
Use the Customer action trigger.- Action: Customer subscription to channel.
- Channel: Email.
- Topic: the same topic you used in Flow 1.
Flow blocks
Start block: limit to one entry per customer
Set the start block to one entry per customer so a returning customer who resubscribes later doesn’t receive the welcome series a second time. If you do want re-subscribers to get it again, switch this to per-event instead.
Filter: confirmation click happened and subscription is active
Add a filter that verifies:
- The customer clicked the confirmation link (the action you’re triggering on).
- The customer’s current subscription status in this channel and topic is active / confirmed.
- The customer’s email is valid.
Send the welcome email
Add a Send email block pointing to your welcome campaign (the one using your standard marketing profile).
What to put in the welcome email
The welcome email has the highest open and click rates of any campaign you’ll ever send. Use it deliberately. Strong elements to consider:- A clear thank-you and brand intro. One or two sentences. Who you are and what the customer will get from being on the list.
- A subscriber incentive. A first-order promo code, free shipping, or loyalty-program bonus points. This single addition has been shown in multiple programs to push conversion to first purchase from around 40% up to 65%.
- Popular products or recently viewed items. Pull dynamically with personalization parameters so the email reflects what each customer has shown interest in.
- Channel preferences. Invite the customer to set their preferences (frequency, topics, SMS opt-in) — this lifts long-term engagement and reduces unsubscribes.
- A primary CTA. One main button — usually “Shop now” or “Claim your offer.”
Testing the setup
Before you go live, run an end-to-end test with a real address you control.Subscribe through your real signup path
Use the signup form, popup, or whichever source is in production. Don’t test by manually writing a subscription status in Maestra — you want to validate the trigger fires the way it will for actual customers.
Confirm Flow 1 sent the confirmation email
Check your inbox and the customer card in Maestra. The customer should be in the “implicit” / “pending” state, and the confirmation email should be logged as sent.
Click the confirmation link
Verify two things happen automatically:
- Subscription status flips to “subscribed.”
- A “Customer subscription to channel” action is recorded on the customer card.
Confirm Flow 2 sent the welcome email
The welcome email should arrive within a few minutes. Check that personalization parameters resolved correctly and the incentive code (if any) works.
Common issues
| Symptom | Likely cause | Fix |
|---|---|---|
| Confirmation email not sent | Campaign is using the standard marketing profile instead of the opt-in profile, so unconfirmed addresses are skipped | Switch the campaign to the opt-in / subscription-confirmation profile |
| Welcome email arrives even when the customer didn’t click | Flow 2 is triggering off a status change instead of the subscription action | Change the trigger to Customer action → Customer subscription to channel |
| Reminder sent after the customer already confirmed | Missing “still unconfirmed” filter after the 24-hour wait in Flow 1 | Add the filter that checks subscription status before the reminder send block |
| Both flows fire repeatedly for the same customer | Start block isn’t limited to one entry per customer | Set the start block to one entry per customer in both flows |
| Customer confirms but status doesn’t update | The confirmation button isn’t using the special opt-in link type | Recreate the link in the email editor, selecting the subscription-confirmation link option |
Why this setup works
- Two flows, two triggers. Splitting confirmation and welcome into separate flows means each one has a single, clean trigger. Debugging, editing, and A/B testing are dramatically easier than maintaining one giant flow with internal branches.
- One entry per customer. Prevents duplicate sends caused by re-imports, status rewrites, or customers who unsubscribe and resubscribe.
- Wait + re-check pattern. The 24-hour wait followed by an “is the customer still unconfirmed?” filter is the standard pattern for any reminder logic — reuse it for cart reminders, browse reminders, and review requests.
- Welcome on the marketing profile. Once confirmed, the customer goes through your normal sending profile, which keeps your opt-in profile clean for actual confirmation traffic and protects deliverability across both.