> For the complete documentation index, see [llms.txt](https://help.branch.io/llms.txt).

# Braze | Amazon SES Configuration

> Connect Braze with Amazon SES to Branch so your email links deep link users into your app with full attribution.

## Overview

Connect Braze with Amazon Simple Email Service (Amazon SES) to Branch so your email links deep link users into your app with full tracking and attribution.

> **Every tracked link opens your app**
>
> Amazon SES rewrites every tracked link in your email to your click tracking domain (CTD), including footer links such as unsubscribe, privacy policy, and terms of service. When you add the CTD to your app's Associated Domains, iOS opens your app for every one of those links before the request reaches Branch. Android App Links work the same way once Branch hosts your `assetlinks.json` file. Branch can't send a link to the browser on its own, because the operating system never sends the click to Branch.
>
> Before you send to customers, handle every link that has no screen in your app. Either add the `$web_only=true` flag and make sure your app handles it, or exclude the link from click tracking. Otherwise, those links fail for every user who has your app installed. See [Route web-only links](#route-web-only-links).

## How it works

1. A user selects a link in an email from their mobile mail client, such as Gmail or Apple Mail.
2. If the user has the app installed, the operating system opens the app. Branch routes the user to the matching in-app content, such as a product detail page or category shopping page.
3. If the user doesn't have the app installed, Branch routes the user to the web URL in their default mobile browser.
4. If you flag a link as web-only, your app opens the web URL in the browser. Your app must include the web-only handler for this to work.

## Before you begin

> **Note**
>
> Branch Email requires the following roles to enable:
>
> - Developers
> - CRM/Email Team
> - Braze Account Manager / Support Team
> - AWS SES Account Manager / Support Team

To enable Braze + Amazon SES, you first need to:

1. Have admin access to [Branch](https://dashboard.branch.io/).
2. Have Branch's Engagement [product](https://help.branch.io/marketer-hub/products.md) enabled for your Branch account.
3. Implement the Branch SDK into your mobile app ([iOS](https://help.branch.io/developer-hub/ios-sdk-overview.md) | [Android](https://help.branch.io/developer-hub/android-sdk-overview.md)).

   - Set up deep link routing. How your mobile app routes to in-app content determines how you create and tag your Branch Links.

     - [Build custom routing inside the routing callback](https://help.branch.io/developer-hub/in-app-routing.md#option-1-build-custom-routing-inside-the-routing-callback)
     - [Let Branch use your existing deep link routing](https://help.branch.io/developer-hub/in-app-routing.md#option-2-let-branch-use-your-existing-deep-link-routing)
   - [Track events](https://help.branch.io/developer-hub/track-branch-events.md).
   - Add the web-only link handler ([iOS](https://help.branch.io/developer-hub/ios-advanced-features.md#web-only-content) | [Android](https://help.branch.io/developer-hub/email-integration-for-developers.md#how-to-open-emails-in-android-to-support-web-only-use-case)). You need this step if your emails contain any link that doesn't have a screen in your app.
4. Review the [Email Overview](https://help.branch.io/marketer-hub/email-overview.md) and [Basic Email Integration Guide](https://help.branch.io/marketer-hub/email-integration-guide.md) to understand the feature and our integrations.
5. Obtain or set up your Amazon SES click tracking domain (CTD). Contact your Amazon SES account manager for assistance.

## Enable Braze + Amazon SES

Complete the following steps to connect and configure the Braze + Amazon SES integration in Branch.

### Connect Braze + Amazon SES in Branch

In Branch, navigate to **Email > Manager**, find **Braze Amazon SES** under **More Integrations**, and select **Enable**.

### Input click tracking domain

Click tracking domains (CTDs) let you track engagement on email opens and link selections.

The Braze + Amazon SES integration requires you provide the following:

- **Click Tracking Domain**: The domain you use with Braze + Amazon SES for links in emails.
- **Amazon SES Domain**: The domain Amazon SES uses to collect data.

For additional help, see [Amazon's documentation on custom open and click domains](https://docs.aws.amazon.com/ses/latest/dg/configure-custom-open-click-domains.html).

> **Caution**
>
> - Remove `https://` when adding your click tracking domain.
> - Never add the same CTD to both your **Live** and **Test** Branch environments.
> - You can enable the integration with multiple CTDs, if needed, but you **can't** add the same CTD to multiple Branch instances or ESP integrations.

## Configure your app

Update your iOS app configuration to support deep linking from your Braze + Amazon SES email links.

### Add your Braze + Amazon SES CTD to your associated domains

For your iOS app, add the CTD to the Associated Domains. Find additional details in the [iOS basic integration guide](https://help.branch.io/developer-hub/ios-basic-integration.md#_3-configure-associated-domains).

Once the CTD is an associated domain, iOS opens your app for every link on that domain, not only the links you intend to deep link. **Important**: before you ship your app, complete the steps to [Handle web-only links in your app](#handle-web-only-links-in-your-app).

### Return `YES` to `continueUserActivity`

Add the CTD to your iOS app's `Info.plist` file. Find additional details in the [iOS advanced features guide](https://help.branch.io/developer-hub/ios-advanced-features.md#esp-ctd-email).

### Handle web-only links in your app

When a user who has your app installed selects a web-only link, the operating system opens your app. The Branch SDK then returns the link data to your deep link handler. The Branch SDK doesn't open the URL for you: it doesn't show any UI, open a WebView, or launch a browser. Your app must check for the `$web_only` parameter and open the original URL itself, either in the system browser or in an in-app browser such as `SFSafariViewController` on iOS or Chrome Custom Tabs on Android. Without this handler, unsubscribe, privacy policy, and other web-only links open your app and go nowhere.

- **iOS**: Add the handler from [Handle deep links for web-only content](https://help.branch.io/developer-hub/ios-advanced-features.md#web-only-content). The handler checks the link parameters for `$3p` and `$web_only`, then opens the URL in `$original_url` with the system browser.
- **Android**: Add the handler from [How to open emails in Android to support web-only use case](https://help.branch.io/developer-hub/email-integration-for-developers.md#how-to-open-emails-in-android-to-support-web-only-use-case). The handler checks for `$web_only` and opens the URL in `$canonical_url` with an intent.

## Point DNS CNAME to Branch

Follow your web hosting provider's instructions to configure your DNS CNAME.

Here are a few common providers' instructions for reference:

- [AWS](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/resource-record-sets-creating.html)
- [GoDaddy](https://www.godaddy.com/help/edit-a-cname-record-19237)
- [CloudFlare DNS](https://support.cloudflare.com/hc/en-us/articles/360020615111-Configuring-a-CNAME-setup)

Update the DNS CNAME and point it to `thirdparty.bnc.lt`. Once you add the CNAME record, allow up to an hour for Branch to generate SSL and AASA files for your click tracking domain.

> **Note: Important CNAME info**
>
> - Branch must be enabled and reflect the CTD **before** you add the CNAME.
> - If the CTD already has SSL setup, confirm your security credentials allow a third party to submit a CSR on behalf of the domain. If not, contact Branch Support to coordinate providing an SSL certificate manually.
> - Once you add the CNAME, Branch auto-generates an SSL certificate and AASA file for your click tracking domain. It may take up to an hour to resolve SSL errors. During this time, link redirects on the click tracking domain redirect to the **Default URL** you provided in **General Configuration**.
> - If you are making this change to a live domain with active email traffic, schedule the CNAME change during off-hours with low traffic.

## Add Branch Links to your emails

Before you send a campaign, decide what each link in the email does and flag it accordingly. You don't need to tag every link. Tracked links open your app by default, so only links that must open a web page need a flag. Every link falls into one of three groups:

| Link type | Examples | What to do |
| --- | --- | --- |
| Opens a screen in your app | Product page, category page, account page | No flag required to open the app. Add `$deep_link=true` as a query parameter so Branch converts the link to a Branch Link with deep link data and attribution. |
| Opens a web page, with click tracking | Promotion landing page, blog post | Add `$web_only=true` as a query parameter. Requires the [web-only handler](#handle-web-only-links-in-your-app) in your app. |
| Opens a web page, no click tracking | Unsubscribe, privacy policy, terms of service, links whose URL Braze generates | Add the `ses:no-track` attribute to the anchor tag so Amazon SES leaves the link alone. |

### Add deep linking flag

For the email links that you want to deep link to content, add `$deep_link=true` to the URL as a query parameter:

```html
<a href="https://www.example.com/products/123?$deep_link=true">Link to your app!</a>
```

This converts your links to Branch Links that open the app on iOS and Android, with full tracking and attribution.

### Route web-only links

All tracked email links open the app on devices that have it installed. To route a link to the web instead, add `$web_only=true` to the URL as a query parameter:

```html
<a href="https://www.example.com/promo?$web_only=true">Read more on our site</a>
```

When a user selects this link, your app opens, reads the `$web_only` flag, and opens the web URL in the browser. The handler in [Handle web-only links in your app](#handle-web-only-links-in-your-app) does this for you. Braze and Amazon SES still record the click, and Branch still attributes it.

### Exclude a link from click tracking

Amazon SES doesn't rewrite a link that carries the `ses:no-track` attribute, and it removes the attribute before the email reaches the recipient. The `href` stays on your own domain, so the link opens in the browser on every device and never touches your CTD or your app. Braze, Amazon SES, and Branch don't record engagement on it.

```html
<a ses:no-track href="https://www.example.com/privacy">Privacy policy</a>
<a ses:no-track href="{{${set_user_to_unsubscribed_url}}}">Unsubscribe</a>
```

Use this attribute for footer links that must work on every device and don't need click tracking. Also use it for links whose URL Braze generates with Liquid, where you can't reliably append a query parameter. For details, see Amazon's [email sending metrics FAQs](https://docs.aws.amazon.com/ses/latest/dg/faqs-metrics.html).

### Tag email campaigns for analytics

To view email campaign performance in Branch, tag your email links with the `~campaign` tag. If your team uses UTM tags, Branch also ingests `utm_campaign`. This helps remove duplicate counts and surface downstream events. You can add the campaign tag in any comparisons and filters across dashboard views.
