Overview
A confirmed opt-in (also called double opt-in) requires new email subscribers to verify their email address by clicking a confirmation link in a follow-up email. This extra step ensures your email subscribers genuinely want to hear from you.This guide walks you through how to set up a confirmed opt-in workflow using a minimum of 1 Tag, Segment, and Journey. See our Pricing page for details on plan limits.If you want to set up a confirmed opt-in flow via API directly, see Example verification magic link OTP.
Single vs double opt-in
- Single opt-in: A user enters their email (e.g., signup form) and is immediately added to your mailing list.
- Double opt-in (confirmed opt-in): After entering their email, the user must click a confirmation link in a verification email before they’re added.
Benefits of double opt-in
- Improves engagement and list quality
- Verifies compliance with GDPR, CAN-SPAM, and other regulations
- Filters out fake, spam-trap, or mistyped addresses
- Reduces bounce and complaint rates
- Protects against abuse and list bombing
Most professional senders use double opt-in to protect their domain reputation and maximize deliverability.
How to create a confirmed opt-in journey
This setup will use a tag calledconfirmed_opt_in
with a value of true
or false
to identify confirmed subscribers. If you already have a list of email subscribers that are confirmed, you can use the CSV Importer to add the tag to these users.
Prerequisites:
Before getting started, set your email addresses as test Subscriptions in OneSignal. See Test Subscriptions for more details.
1. Create a segment of users that did not confirm opt-in
Within the OneSignal dashboard, go to Audience > Segments and click New Segment. Build a segment called Did not confirm email opt-in that uses the following filters with AND logic:- User Tag with
confirmed_opt_in
“is not”true
- Device Type is Email
- Test Users is true (will remove before setting live in Production)
confirmed_opt_in
set to false
or is not set.

Did not confirm email opt-in segment
2. Create a confirmed opt-in email template
Navigate to Messages > Templates > New Email Template and select HTML Editor or Drag & Drop Editor. Design a simple confirmation email:- Clear subject line (e.g., “Confirm your subscription”)
- A single, prominent confirmation CTA (“Confirm Subscription”)
- Do not include any other links like social media buttons or other CTAs that may distract the user from the confirmation process.
HTML

Opt-in Email Template
Notice the “Confirm Subscription” button links to a page
https://media4.giphy.com/media/v1.Y2lkPTc5MGI3NjExOHgxZjNrcTRvM2FoZTNzNDVhN2c1ZmN3ajdwYjFlcjR6ZmU0MDVuNCZlcD12MV9pbnRlcm5hbF9naWZfYnlfaWQmY3Q9Zw/fxI1G5PNC5esyNlIUs/giphy.gif
It is recommended to change this to your website page that thanks the user for confirming their subscription.3. Build a confirmed opt-in Journey
Navigate to Journeys > New Journey and select Start from scratch.Journey settings
- Name the Journey:
Confirm Email Opt-in
or anything you like to recognize what this Journey does. - Entry Rules: Include Segment Did not confirm email opt-in segment.
- Exit Rules: Check They moved through the entire Journey.
- Re-entry Rules: Select No, they can receive this only once.
- Schedule: Select Start immediately or schedule it for a later time and Never stops.
Email message step
Add an Email message step and select the Confirm Email Opt-in template. Your Journey should so far look like this:
Email message step & Journey Settings
Wait until step
Add a Wait Until step and set the Branch A condition to:- Previous Message
- Confirm email subscription template name
- Clicked
1 Day
and Continue Journey”.

Wait until step
Tag users who confirm
Under the branch A (Message Clicked) add a Tag User action and set the tag toconfirmed_opt_in
and the value to true
.

Tag User action
confirmed_opt_in
tag will change from false
to true
. This will allow you to track which users have confirmed their email subscription.
Follow up with non-confirmers
After 1 day, if the user did not click the button to confirm their subscription, they will go down the Expire (1 Day) branch. At this point you can create a new email template and repeat the process (Confirm email subscription 2 > Wait until clicked > Tag if clicked). It is recommended to repeat the process at least one more time to ensure the best opt-in rate.
Full Confirm Email Opt-in Journey Example
4. Test
At this point the Journey should be ready to test. If you followed this tutorial, remember that we use the “Test Users” filter in the Segment, so this will only send to emails you marked as “testers” and fit the tag criteria. If you need to add more test emails, you can do so manually within the OneSignal dashboard following these instructions: When ready to test:- Click Set Live in the Journey.
- Wait a few minutes and you should receive the first email template.
- Click the button in the email. Wait a few more minutes.
- Your user should exit the Journey and have the updated
confirmed_opt_in=true
tag.
Troubleshooting
Once you set the Journey live, if you did not get the confirmation email after a few minutes:- Navigate back into the active Journey
- Click the first Email Step
- Select Audience Activity at the top left. See Journey Analytics for more details on Audience Activity.
- You should see your email in the “Delivered” column. If its not there, check if your email address is Subscribed and fits the Segment criteria.
- Navigate to Audience > Users
- Search for your email address
- Check the “Tags” column. You should see
confirmed_opt_in=true
if the Journey worked correctly.
Still need help?Email us at
support@onesignal.com
with the following information:- The email address that you are testing.
- A link to the Journey. You can copy-paste the URL from the browser address bar.
- Any additional information that you think may be helpful.
5. Set live in production
When ready to send this to actual users, you will need to do the following:- Navigate to the Journey and click More Options > Stop + Archive.
- Navigate to the Segment and click Options > Pause, then Options > Duplicate.
- Update the Segment to remove the “Test Users” filter.
- Navigate back to the Journeys page and click Options > Duplicate.
- Update the Journey to use the Segment without the “Test Users” filter and Save.
- Click Set Live when ready to go live to all users.
Subscribers who confirm now carry the
confirmed_opt_in=true
tag, which you can use for segmentation and to ensure you only message verified users.Important Considerations & Gotchas
Regulatory Compliance
Regulatory Compliance
- GDPR requires explicit consent, which double opt-in provides.
- CAN-SPAM doesn’t require double opt-in, but it reduces complaints.
- Always store proof of consent (timestamp + source).
Deliverability Best Practices
Deliverability Best Practices
- Confirmation emails should be plain and short — avoid heavy images.
- Don’t add marketing content to your confirmation email.
- Set up proper email authentication (SPF, DKIM, DMARC) to avoid spam folders.
UX and Conversion Tips
UX and Conversion Tips
- Show a thank-you page after signup that explains the confirmation step.
- Use a clear subject line (e.g., “One last step: Confirm your subscription”).
- Send reminders sparingly — 2–3 attempts max.
Common Issues
Common Issues
- Links not tracking: Make sure your button uses a tracked link from the OneSignal template editor.
- Users never confirm: Some emails may land in spam. Encourage users to check spam or promotions folders.
- Duplicate opt-ins: Only allow
confirmed_opt_in = true
users in your primary send segments.
Next Steps
- Use the
confirmed_opt_in
tag to build high-quality email segments. - Review Email Setup & Compliance to protect your domain reputation.
- Explore Journeys actions and branches for advanced retry strategies.