diff --git a/features/remarketing-audience-upload.mdx b/features/remarketing-audience-upload.mdx
index 86c9918..e3ec779 100644
--- a/features/remarketing-audience-upload.mdx
+++ b/features/remarketing-audience-upload.mdx
@@ -1,26 +1,163 @@
---
title: "Audience from Customer List"
+description: "Send a Linkrunner cohort to Google Ads or Meta, either as a one-off CSV upload or as a sync that keeps the audience in step with the cohort."
icon: "upload"
---
-Upload a list of customers directly to the ad platform to create a custom audience for remarketing.
+Send a Linkrunner cohort to Google Ads or Meta as a custom audience. There are two ways to do it.
+
+| | Sync from Linkrunner | Manual upload |
+| ---------------------------------- | -------------------- | ------------------------ |
+| Setup | Once per cohort | Every time |
+| Stays in step with the cohort | Yes | No |
+| Removes people who stop matching | Yes | No |
+
+
+ A cohort is a live rule, not a fixed list of people. It is recalculated every time it is
+ read, so a CSV you exported last week describes who matched last week.
+
+
+## Sync from Linkrunner
+
+Map a cohort to an audience once. Each sync recalculates the cohort and replaces the
+audience membership, so people who stop matching drop out.
+
+### Before you start
+
+
+
+ Connect Google Ads or Meta from **Integrations**.
+
+
+ Linkrunner writes into an audience you already own. It does not create one for you.
+
+ In Google Ads, create a **Customer list** in **Audience manager** and leave it empty.
+ In Meta, create a **Custom Audience** with **Customer list** as the source.
+
+
+ On Google this must be a **Customer list**. Audiences that Google builds from rules
+ (for example "All converters") cannot receive uploads, and a sync pointed at one
+ always fails.
+
+
+
+
+### Set up the sync
+
+
+
+ Go to **Users → Cohorts** and click the cohort.
-## Google
+
+
+
+ Scroll to **Ad network sync**, choose the ad network and ad account, then paste the
+ audience ID.
-### 1. Prepare Your Data
+ In Google Ads, go to **Tools → Shared library → Audience manager**, open the segment,
+ and read **List ID** on its detail page. It also appears in the URL as `userListId`.
+ In Meta, the **Custom Audience ID** is in the ID column in **Ads Manager → Audiences**.
+
+
+
+
+ The segment above is rule based. It is shown only because **List ID** appears in the
+ same place on every segment. The ID you paste must belong to a Customer list.
+
+
+ Set **Default Country** if your phone numbers are stored without a country code. See
+ [Match rate](#match-rate).
+
+
+ Click **Sync now**. The chip on the destination shows the result, and the line beneath
+ it explains anyone who was left out.
+
+
+
+
+
+### Status
+
+| Chip | Meaning |
+| ------------------------ | -------------------------------------------------------------- |
+| **Never synced** | Mapped, but nothing has been sent yet |
+| **Syncing...** | A sync is running |
+| **Up to date** | The last sync succeeded |
+| **Cohort unchanged** | Nobody joined or left, so nothing was re-uploaded |
+| **Last sync failed** | The reason is shown underneath |
+| **Paused** | Syncing is off until you resume it |
+| **Reconnect ad account** | The ad account authorisation expired. Reconnect it in Integrations |
+
+### How long it takes to reflect
+
+The sync finishes in seconds. The wait is on the ad platform.
+
+
+
+ Google accepts the upload straight away but applies it in the background. Allow up to
+ 48 hours for membership to appear.
+
+ Google also hides audiences that are too small. A list needs roughly 100 matched members
+ before it can be used for Display, and around 1,000 for Search and YouTube. Below that it
+ shows a size of 0 even though the upload succeeded, which is the most common reason a
+ working sync looks like it did nothing.
+
+
+ Set the membership duration deliberately. People leave a Google audience by expiring,
+ not by being deleted. Each sync refreshes everyone who still matches, so anyone who
+ stops matching drops out when their membership ends. Left at the 540 day maximum,
+ nobody is ever removed. Set it close to how often you sync (30 days is a reasonable
+ default).
+
+
+
+ Meta usually reflects a replaced audience within an hour. It needs roughly 1,000 matched
+ people before the audience can be targeted.
+
+
+
+### Match rate
+
+Only people carrying an identifier the ad platform can match are uploaded. The cohort preview
+shows how much of the cohort is matchable, split by email, phone, GAID and IDFA.
+
+- Email and phone are hashed with SHA-256 before they leave Linkrunner. Advertising IDs (GAID
+ and IDFA) are sent unhashed, which is what both platforms require.
+- Phone numbers need a country code. A number stored as `9876543210` cannot be matched,
+ because there is no way to tell which country it belongs to. **Default Country** fixes those.
+- People who opted out of ad tracking are never uploaded.
+- People with no identifier at all are skipped.
+
+### Pausing and removing
+
+**Pause** stops syncing and leaves the mapping in place. **Remove** deletes the mapping only.
+The audience in the ad platform is left untouched.
+
+## Manual upload
+
+Use this for a one-off audience, or when you would rather not connect the ad account.
+
+
+ A manual upload is a snapshot. It does not update as the cohort changes, and people who
+ stop matching are not removed. Uploading a fresh file only adds to the audience.
+
+
+### Google Ads
+
+#### 1. Prepare your data
- Create a segment in Linkrunner from Audience Cohort and download the CSV
-### 2. Upload to Google Ads
+#### 2. Upload to Google Ads
-#### Navigate to Audience Manager
+##### Navigate to Audience Manager
1. In your Google Ads account, click the **Tools** icon (the wrench) in the left menu
2. Under the "Shared library" section, click **Audience manager**
-#### Create a New Customer List
+##### Create a New Customer List
1. Click the blue **+** button
@@ -34,7 +171,7 @@ Upload a list of customers directly to the ad platform to create a custom audien
-#### Configure the List
+##### Configure the List
- **Segment Name**: Give your audience a clear, recognizable name (e.g., "Newsletter Subscribers Q1")
- **Data Type**: Choose "Upload emails, phones, and/or mailing addresses"
@@ -45,15 +182,15 @@ Upload a list of customers directly to the ad platform to create a custom audien
Click on **"Save and continue"** to create the customer list.
-## Meta
+### Meta
-### 1. Prepare Your Data
+#### 1. Prepare your data
- Create a segment in Linkrunner from Audience Cohort and download the CSV
-### 2. Upload to Meta Ads
+#### 2. Upload to Meta Ads
-#### Navigate to the Audiences Dashboard
+##### Navigate to the Audiences Dashboard
1. Open Meta Ads Manager
2. Click the **All Tools** menu (the three horizontal lines or "hamburger" icon) on the left sidebar
@@ -61,14 +198,14 @@ Click on **"Save and continue"** to create the customer list.
-#### Create a Custom Audience
+##### Create a Custom Audience
1. Click the blue **Create Audience** dropdown button
2. Select **Custom Audience**
-#### Choose Your Source
+##### Choose Your Source
1. Under "Your sources," select **Customer list** and click **Next**
@@ -78,15 +215,44 @@ Click on **"Save and continue"** to create the customer list.
-#### Set Up Your List
+##### Set Up Your List
1. **Customer Value**: Meta will ask if your list includes a column for customer value. Select **No**, then click **Next**
2. **Name Your Audience**: Give it a clear, descriptive name (e.g., "Purchasers - March 2026") and an optional description. Click **Next**
-#### Map Your Identifiers
+##### Map Your Identifiers
1. Meta will preview your data and attempt to map your columns to its accepted identifiers
2. **Action Needed**: Review the "Mapped" and "Unmapped" tabs. If a column is unmapped, manually select the correct identifier from the dropdown menu, or tell Meta to ignore that column
3. Click **Import and Create** to create the audience.
+
+## Troubleshooting
+
+
+
+ Google applies uploads in the background and hides audiences below roughly 100 matched
+ members. Wait up to 48 hours, then check the cohort is large enough. See
+ [How long it takes to reflect](#how-long-it-takes-to-reflect).
+
+
+ Check the audience is a **Customer list**. Audiences Google builds from rules cannot
+ receive uploads.
+
+
+ Open the cohort and read the line under the destination. It breaks the drop down by
+ reason. Missing country codes on phone numbers are the usual cause, which
+ **Default Country** fixes.
+
+
+ The stored authorisation expired or is missing a permission. Reconnect the account from
+ **Integrations**, then run the sync again.
+
+
+ Members leave by expiring. Lower the audience's membership duration in Google Ads so it
+ is close to how often you sync.
+
+
+
+**Need help?** Contact [support@linkrunner.io](mailto:support@linkrunner.io)
diff --git a/images/audience_sync/ad-network-sync.png b/images/audience_sync/ad-network-sync.png
new file mode 100644
index 0000000..81bb16b
Binary files /dev/null and b/images/audience_sync/ad-network-sync.png differ
diff --git a/images/audience_sync/cohorts-tab.png b/images/audience_sync/cohorts-tab.png
new file mode 100644
index 0000000..3d6bc41
Binary files /dev/null and b/images/audience_sync/cohorts-tab.png differ
diff --git a/images/audience_sync/google-list-id.png b/images/audience_sync/google-list-id.png
new file mode 100644
index 0000000..d60d235
Binary files /dev/null and b/images/audience_sync/google-list-id.png differ