---
title: "Get started with Adapty Mail"
description: "Set up Adapty Mail and launch your first email flow."
---

In this guide, you will set up Adapty Mail and launch your first email flow.

The setup has six parts:

1. [Configure your Adapty SDK](#1-configure-your-adapty-sdk)
2. [Connect Adapty Mail to your app data](#2-connect-adapty-mail-to-your-app-data)
3. [Set up your sending domain](#3-set-up-your-sending-domain)
4. [Create a web paywall](#4-create-a-web-paywall)
5. [Generate a campaign with AI](#5-generate-a-campaign-with-ai)
6. [Launch a flow](#6-launch-a-flow)

## Before you start

Make sure these are in place before you start:

- **DNS access**: You can add records to your root domain.
- **Web payment provider**: You have a Stripe, Paddle, or PayPal account with your subscription products configured.

## 1. Configure your Adapty SDK

:::important
Adapty Mail is a **standalone product**. You can use it even if your paywalls, subscriptions, or analytics aren't handled by Adapty — migrating your entire stack is not required.

To get accurate revenue data, the minimum setup is to install the Adapty SDK in observer mode and enable App Store server notifications.
:::

Adapty Mail needs three things from your app: purchase data (so it can attribute revenue back to the email that drove each conversion), a stable user identifier, and user emails.

1. **Let Adapty track your revenue.** The first step depends on whether you already have in-app purchases implemented:
   - If you **already have in-app purchases implemented with Adapty**, you don't need to do anything else at this stage.
   - If you **already have in-app purchases implemented without Adapty** and don't plan to migrate to Adapty, install the Adapty SDK for your platform in observer mode. At this stage you only need to add the SDK to your project, activate it with observer mode enabled, and report transactions. Platform guides: [iOS](implement-observer-mode), [Android](implement-observer-mode-android), [React Native](implement-observer-mode-react-native), [Flutter](implement-observer-mode-flutter), [Unity](implement-observer-mode-unity), [Kotlin Multiplatform](implement-observer-mode-kmp), [Capacitor](implement-observer-mode-capacitor).
   - If you **don't have in-app purchases implemented yet and want to use Adapty**, complete the steps from the [quickstart guide](quickstart) to delegate handling purchases to Adapty.

   Then [enable App Store server notifications in Adapty](enable-app-store-server-notifications) to receive revenue-related updates directly from the App Store.

2. **Set up user identification.** Pass a stable ID — your backend user ID, Firebase UID, or similar — either by calling `Adapty.identify()` or by passing `customerUserId` to `.activate()` at SDK startup. The `customer_user_id` is how Adapty Mail matches campaigns, clicks, and purchases back to the right profile.

   Platform guides: [iOS](identifying-users), [Android](android-identifying-users), [React Native](react-native-identifying-users), [Flutter](flutter-identifying-users), [Unity](unity-identifying-users), [Kotlin Multiplatform](kmp-identifying-users), [Capacitor](capacitor-identifying-users).

3. **Collect user emails.** Once a user provides their email in your app (for example, at sign-up or checkout), pass it to Adapty by calling `updateProfile` with the email attribute. Every recipient of a campaign needs this value.

   Platform guides: [iOS](setting-user-attributes), [Android](android-setting-user-attributes), [React Native](react-native-setting-user-attributes), [Flutter](flutter-setting-user-attributes), [Unity](unity-setting-user-attributes), [Kotlin Multiplatform](kmp-setting-user-attributes), [Capacitor](capacitor-setting-user-attributes).

   If your app doesn't yet collect emails, see [Email collection strategies](mail-collect-emails#email-collection-strategies).

## 2. Connect Adapty Mail to your app data

With the SDK wired up, two dashboard settings hook your app up to Adapty Mail so the product can actually use what the SDK sends.

1. **Enable the Adapty integration.** In Adapty Mail, go to **Settings → Integrations** and turn on the **Adapty** integration. When enabled, Adapty sends info on all events generated by your customers — new subscriptions, renewals, trials, conversions, refunds, and billing issues. These events directly drive which segment a customer falls into, which campaign they're assigned to, and whether sending emails is stopped based on their purchase state.

   

2. **Add your App Store or Google Play URL.** In Adapty Mail, go to **Settings → App metadata** and paste a direct store URL — `https://apps.apple.com/…id{numbers}` for iOS or `https://play.google.com/store/apps/details?id={package}` for Android.

## 3. Set up your sending domain

Adapty Mail sends from your own domain. You add DNS records once — all campaigns use the same verified domain.

1. In Adapty Mail, go to **Settings → Email Domains**.
2. Enter your root domain (for example, `yourapp.com`) and click **Preview**. Only apex domains are accepted — subdomains like `app.yourapp.com` are rejected at input.

3. Adapty generates two sending subdomains (`mail.yourapp.com` and `email.yourapp.com`). Click **Confirm** to show the required DNS records.

4. In your domain registrar, add the 10 DNS records shown (5 per subdomain):
   - 3 CNAME records (DKIM) per subdomain
   - 1 MX record (Mail-From) per subdomain
   - 1 TXT record (SPF, `v=spf1 include:amazonses.com ~all`) per subdomain
5. Optionally, add a DMARC TXT record on your root domain (recommended).
6. Return to **Settings → Email Domains** and click **Check Verification**.

Verification timing at a glance:

- **Automatic polling**: First check runs about 5 minutes after you submit. Intervals grow to once per hour until records are found.
- **Manual check**: Click **Check Verification** any time to trigger an immediate check.
- **DNS propagation**: Usually minutes, up to 48 hours in rare cases.
- **Verification window**: 7 days. If it lapses, your DNS records stay in place — re-enter your domain in **Settings → Email Domains** to start a new window.

For details on each record type and domain warm-up, see [Set up your sending domain](mail-sending-domain).

## 4. Create a web paywall

Every email links to a web paywall — the checkout page users land on when they click a CTA. You have two options:

- **Generate with AI**: Let the bundled web paywall builder produce one for your app.
- **Use your own hosted paywall**: Plug in a paywall you already host.

To start, in Adapty Mail go to **Web Paywalls → Create**.

### Option A: Generate with AI

1. Select **Generate with AI**.
2. Click **Log in to the paywall builder**. The web paywall builder opens in a new tab. If you aren't already signed in, sign in using your Adapty credentials.
3. In the builder, enable your payment provider integration (Stripe, Paddle, or PayPal). See [Web paywall configuration](web-paywall-configuration) for details.
4. Return to Adapty Mail and click **Proceed to generation**.
5. Review the generated paywall, then save and publish.

### Option B: Use your own hosted paywall

1. Select **Enter URL manually**.
2. Paste the URL of your hosted paywall. The URL must include the `{email}` and `{external_profile_id}` placeholders as query parameters — Adapty Mail fills these in per recipient so the checkout page knows who the visitor is. Example:

   ```
   https://example.com/paywall?email={email}&profile={external_profile_id}
   ```
3. Save and publish.

:::important
The paywall must be published before it can serve checkout traffic. Unpublished paywalls return an error when users click email checkout links.
:::

For checkout funnel anatomy and how personalization works, see [Set up checkout](mail-checkout).

## 5. Generate a campaign with AI

AI creates the full email sequence for you — copy, design, hero images, and personalized checkout links, all tailored to your app.

1. In Adapty Mail, go to **Campaigns** and click **Create**.
2. Set the campaign name.
3. In the **Web paywall** dropdown, select the web paywall you added on the previous step.

4. Click **Generate emails**.
5. In the generation dialog, pick a tone and language. By default, AI determines the number of emails to generate based on the best practices and the app context. If you want to set the number of emails yourself, click **Set number manually** and set it (**1–15**, default 4).

6. Click **Generate**. Generation usually takes a few minutes. The system times out after 5 minutes if it can't complete — retry if that happens.
7. Preview each email. You can regenerate individual emails, edit the copy, or open the HTML editor for fine-grained control.

8. Click **Create** to save the campaign.

The campaign saves as a **draft** and isn't sending yet — campaigns go live only when attached to a flow (next step). There's no separate "publish" action in the campaign editor.

## 6. Launch a flow

A flow pairs a **trigger** (an event like a subscription expiring) with a **segment**, and sends that segment the **campaign** you choose. Adapty Mail ships with three fixed triggers, each with its own flow view.

1. In Adapty Mail, go to **Flows**, then open the trigger you want to configure:
   - **Never purchased** — users who signed up but haven't bought yet.
   - **Expired** — subscriptions that have ended.
   - **Refunded** — purchases that got refunded.
2. Click **Create** to open the dialog.

3. In the dialog:
   - Pick a **Segment** (for example, **All Users** to target everyone who hits this trigger, or, create a new segment based on the profile attributes).
   - Leave content type set to **Campaign** (the A/B Test option is covered in [A/B testing](mail-ab-testing)).
   - Select the **Campaign** you saved in Step 5.
4. Click **Save**.

The flow goes live immediately — there's no separate launch step. From this point on, users who match the segment will start receiving the campaign as soon as they hit the trigger event.

:::note
You can add more than one segment → campaign row to the same trigger; they run in priority order. The **All Users** row, if used, must be the last (lowest-priority) row so it catches everyone not matched by a more specific segment.
:::

## Troubleshooting

| Issue                          | Solution                                                                                                                 |
| ------------------------------ | ------------------------------------------------------------------------------------------------------------------------ |
| DNS verification stuck         | Check that records match exactly — no trailing dots, correct CNAME targets. Wait 5–10 minutes, then click **Check Verification** again |
| Verification window expired    | Your records remain in place. Re-enter your domain in **Settings → Email Domains** to start a new window                  |
| Generation failed or timed out | Check your internet connection and try again. If the issue persists, contact Adapty support                              |

## Learn more

- **[Collect user emails](mail-collect-emails)**: Strategies for getting email coverage if your app doesn't collect them yet.
- **[Set up your sending domain](mail-sending-domain)**: DNS record details, warm-up tiers, and troubleshooting.
- **[Set up checkout](mail-checkout)**: Checkout funnel anatomy and personalization.
- **[Campaign analytics](mail-analytics)**: Track delivery, engagement, and revenue.
- **[A/B testing](mail-ab-testing)**: Test multiple sequence versions.