Skip to main content
With double opt-in, a new signup from one of your public forms isn’t mailable straight away. InstantCampaign emails a confirmation link to the address the person entered. The contact becomes active only after they click it. Double opt-in proves that the person owns the address and asked to hear from you. It keeps typos and fake addresses off your lists and protects your sender reputation.

What it applies to

Double opt-in applies to public signup form submissions only. Imported contacts and contacts added through the API are treated as already consented and don’t get a confirmation email. Contacts synced from integrations keep the consent state they have in the other system. For example, a Mailchimp contact who is pending there arrives as Pending, and a Shopify customer who hasn’t consented to email marketing arrives as Unsubscribed. They don’t get a confirmation email either. Contacts you already have aren’t affected when you turn it on.

Turn it on for the workspace

1

Open the setting

Go to Settings → Double opt-in.
2

Enable it

Click Enable. The status changes to Enabled with the note New form signups are held as Pending until confirmed.
Only workspace owners and admins can change this setting.
If you haven’t set up a sending address, confirmation emails are sent from InstantCampaign’s platform address and the settings page warns you. Add a default sender profile (see Settings → Sender Information) so confirmations come from your own domain.

Override it for a list

Each list can follow the workspace setting or override it. Go to Contacts → Lists. On the list’s card, set Double opt-in to:
  • Team setting: follow the workspace setting (the default)
  • On: always require confirmation for signups to this list
  • Off: never require confirmation for this list

Use your own confirmation email

Unless double opt-in is Off for the list, the list’s card also has a Confirmation template picker. Choose one of your templates, or keep Built-in confirmation mail. Your template must contain the {{confirm_url}} merge tag where the confirmation link should go:
The usual contact merge tags also work. If the template doesn’t contain {{confirm_url}}, the built-in confirmation mail is sent instead, so signups are never stranded.

What the subscriber sees

  1. They submit your form.
  2. They receive an email asking them to confirm their subscription. The link is valid for 7 days.
  3. They click the link and see Subscription confirmed. If they click it again, they see Already confirmed.
Until they confirm, the contact and their list subscription show as Pending, and they don’t enter any journey. When they confirm, they enter the journeys triggered by the form they submitted. Each confirmation email confirms only the list it was sent for. If someone signs up to two double opt-in lists through two different forms, they get two emails, and each link confirms its own list. Clicking the first link doesn’t subscribe them to the second list. A resent confirmation covers every list that is still waiting when you send it. The contact page shows Awaiting double opt-in confirmation — this contact is excluded from all sends until they confirm.

Resend a confirmation

If someone didn’t get the email, or their link expired, open the contact and click Resend Confirmation. The button is also in the contact’s menu on the Contacts page. It is offered when:
  • the contact is Pending, or
  • the contact is Active but still has a Pending subscription to a double opt-in list, for example an existing subscriber who signed up to another list through a form. Their contact page says which lists are waiting.
A confirmation is never sent to a contact who is Unsubscribed, Bounced, Complained or erased. To protect the recipient, one address can be sent at most 3 confirmation emails an hour, and each team member can send at most 20 an hour. You need permission to edit contacts to resend a confirmation.
Confirmations can trigger other systems. The List subscription confirmed (double opt-in) webhook event fires once for each list a click confirms, including when a contact who was already subscribed elsewhere confirms a new list. The Contact confirmed (double opt-in) event fires only when a pending contact confirms for the first time. See Webhooks.

Troubleshooting

That’s expected. Pending contacts are left out of every send until they confirm.
Each confirmation link confirms only the list it was sent for, so a list joined through another form waits for its own link. Use Resend Confirmation on the contact to send one link that covers every list still waiting.
Check that the template contains {{confirm_url}} exactly, and that the list’s Double opt-in isn’t set to Off.