# How to Sync Audiences to Custom Audience


This guide walks you through the process of syncing a saved audience to your Custom Audience destination.

To set up the Custom Audience destination in RudderStack, see [Custom Audience Setup Guide]({{< ref "audiences/syncs/custom-audience/setup-guide.md" >}}).

## Prerequisites

**On your audience platform**

- A target audience list created on your platform — note its **Audience ID**

**In RudderStack**

- Set up an [Audience]({{< ref "audiences/audience-builder/create-audience.md" >}})
- Set up a [Custom Audience destination]({{< ref "audiences/syncs/custom-audience/setup-guide.md" >}})

## Add sync

1. Open the audience's **Syncs** tab and click **Add sync**.
2. Select **Custom Audience**, then select the required **Custom Audience** destination.
3. Configure the following settings to specify the target audience and map your warehouse data:

### Specify target audience

{{< warning >}}
Create the audience on your platform before entering these values. RudderStack **does not create** audiences at the destination for this integration.
{{< /warning >}}

| Setting | <div style="width: 350px;">Description</div> |
| :--- | :--- |
| Audience name | Specify the name of the audience to sync data to  |
| Audience ID | Specify the ID of the list on your platform |

### Sync mode

RudderStack supports only [Mirror mode]({{< ref "data-pipelines/reverse-etl/developer-guides/sync-modes.md#mirror-mode" >}}) for this integration. 

On the first run, the full membership is sent to the platform. Later runs send only inserts, updates, and deletes.

### Map identifiers

Map warehouse columns to each [template field]({{< ref "audiences/syncs/custom-audience/setup-guide.md#request-body-template" >}}) defined in the Custom Audience destination.

You can map two types of fields:

- **Warehouse fields**: Dropdown of warehouse columns
- **Static fields**: Specify literal values for fields configured as **Static** in the [destination settings]({{< ref "audiences/syncs/custom-audience/setup-guide.md#template-fields" >}})

{{< image src="images/audiences/destinations/custom-audience/map-static-fields.webp" alt="Map static fields" >}}

Required destination fields appear with an asterisk (*) during mapping.

### Advanced settings

| Setting | Description |
| :--- | :--- |
| Automatically hash PII data | When set to **Yes**, RudderStack applies each field's configured hash algorithm to unhashed warehouse data. <br /><br />When set to **No**, data is treated as already hashed and hashing is skipped — even if a field has a [hash type]({{< ref "audiences/syncs/custom-audience/setup-guide.md#template-fields" >}}) configured. <br /><br />See [Data hashing](#data-hashing) for more information. |

## Sync settings

{{< customreadfile "/includes/audiences/sync-settings.md" >}}

## Enable sync

{{< customreadfile "/includes/audiences/enable-sync.md" >}}

## Data hashing

The [Automatically hash PII data](#advanced-settings) setting lets you hash your user data before sending it to your API.

- Configure the setting to **Yes** if your incoming data is not pre-hashed
- Configure this setting to **No** if your data is already hashed

{{< warning >}}
Incorrect configuration of the **Automatically hash PII data** setting will result in failures.

- If the **Automatically hash PII data** setting is configured to **Yes** and your data is pre-hashed, the event will fail.
- If the **Automatically hash PII data** setting is configured to **No** and your data is not pre-hashed, the event will fail.
{{< /warning >}}

Such events are rejected with a clear error message, for example:

```text
Hashing is disabled but the value for field EMAIL appears to be unhashed. Either enable hashing or send pre-hashed data.
```

You will also see errors in the **Events** tab for cases that were previously marked as successful but resulted in no matches, helping you identify and fix data quality or configuration issues.

## Troubleshooting

| Issue | <div style="width: 350px;">Resolution</div> |
| :--- | :--- |
| `400` errors for all records | Required fields are unmapped or the warehouse values are empty |
| Wrong audience on API side | Verify the [Audience ID](#specify-target-audience) and `$$.connection.audienceId` while [configuring the template]({{< ref "audiences/syncs/custom-audience/setup-guide.md#request-body-template" >}}) |
| Double-hashed identifiers | [Automatically hash PII data](#advanced-settings) setting is set to **Yes** while your incoming warehouse data is pre-hashed — set this setting to **No** |
| Sync fails after destination edit | Update sync mappings if destination field names or required flags have changed.<br /><br />See [Template fields]({{< ref "audiences/syncs/custom-audience/setup-guide.md#template-fields" >}}) for more information |
