
The **Upload Profiles to Custom Audience** node lets you export a data file with profiles from Synerise and upload it in bulk to a Custom Audience in Facebook. Use it in workflows that retrieve large segments of profiles (hundreds of thousands to millions) and sync them with Facebook on a recurring schedule.


<div class="admonition admonition-tip"><div class="admonition-icon"><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2.5"><path stroke-linecap="round" stroke-linejoin="round" d="M9.663 17h4.673M12 3v1m6.364 1.636l-.707.707M21 12h-1M4 12H3m3.343-5.657l-.707-.707m2.828 9.9a5 5 0 117.072 0l-.548.547A3.374 3.374 0 0014 18.469V19a2 2 0 11-4 0v-.531c0-.895-.356-1.754-.988-2.386l-.548-.547z" /></svg></div><div class="admonition-body"><div class="admonition-content">

To update a single profile's presence in a Custom Audience as part of a real-time, event-triggered workflow, use the [Add Profiles to Custom Audience](/docs/automation/integration/facebook/send-custom-audience) node instead.

</div></div></div>
  

A typical workflow looks like this:

**Scheduled Run** → **Get Profiles** → **Data Transformation** → **Upload Profiles to Custom Audience** → **End**  

## Key benefits
---
- **Built for volume** - Large audiences are uploaded as lists, not profile by profile, so full-segment refreshes complete faster and at a fraction of the API cost of sending profiles one by one.
- **No engineering work** - You can configure the node directly in the workflow builder, with no custom scripts, middleware, or developer tickets required.
- **Always-fresh audiences** - Scheduled runs keep Facebook audiences aligned with your current Synerise segmentation, so targeting and suppression lists reflect the real customer state.


## Prerequisites
---
- [Generate the system user access token in Facebook](https://developers.facebook.com/docs/marketing-api/collaborative-ads/managed-partner-ads/api-guide/prerequisites/generate-access-token-system-user); as the `scope` value, select `ads_management`.
- [Create a Custom Audience in Facebook](https://www.facebook.com/business/help/170456843145568?id=2469097953376494). Save the ID of the Custom Audience in the notepad.



### Data requirements

The file that reaches this node must contain a column named exactly `matchingId`, which holds the value profiles are matched on in Facebook (an email address or a phone number).


<div class="admonition admonition-note"><div class="admonition-icon"><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2.5"><path stroke-linecap="round" stroke-linejoin="round" d="M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z" /></svg></div><div class="admonition-body"><div class="admonition-content">

Values in the `matchingId` column are automatically trimmed, lowercased, and hashed with SHA-256 before the upload. This normalization does not reformat phone numbers - if you select **Phone** as the identifier type, make sure the numbers already meet Facebook's format requirements (for example, they include the country code) before they reach this node.

</div></div></div>


Because the **Get Profiles** node exports attributes under their original names, the file rarely contains a `matchingId` column by default. Add a **Data Transformation** node between **Get Profiles** and this node, and use the [Rename Columns](/docs/automation/data-transformation-and-imports/transformations-and-data-operators/rename-columns) node to rename the column that holds the identifier (for example, `Email`) to `matchingId`.


<div class="admonition admonition-tip"><div class="admonition-icon"><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2.5"><path stroke-linecap="round" stroke-linejoin="round" d="M9.663 17h4.673M12 3v1m6.364 1.636l-.707.707M21 12h-1M4 12H3m3.343-5.657l-.707-.707m2.828 9.9a5 5 0 117.072 0l-.548.547A3.374 3.374 0 0014 18.469V19a2 2 0 11-4 0v-.531c0-.895-.356-1.754-.988-2.386l-.548-.547z" /></svg></div><div class="admonition-body"><div class="admonition-content">

In the same transformation rule, use the **Handle incomplete data** section on the Rename Columns node and select **Skip row if error occurred** to exclude profiles with a missing or empty identifier before they reach this node.

</div></div></div>


## Node configuration
---
1. Click the node.
2. Click **Select connection**.
3. Select an existing connection from the list, or create a new one - see [Create a connection](#create-a-connection) below.

### Create a connection
Generate an access token which allows you to send a request (upload a file with profiles from Synerise to Facebook).

1. Click **Add connection**.
2. On the **Setup connection** pop-up:
    1. In the **Connection name** field, enter a name for the connection.
    2. In the **Access token** field, enter the app access token you generated in Facebook.
        
       <div class="admonition admonition-note"><div class="admonition-icon"><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2.5"><path stroke-linecap="round" stroke-linejoin="round" d="M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z" /></svg></div><div class="admonition-body"><div class="admonition-content">

       You can read more about access tokens in [Facebook documentation](https://developers.facebook.com/docs/marketing-api/conversions-api/get-started/#access-token).

       </div></div></div>

3. Click **Create**.  
    **Result**: A connection is created and selected.

### Define the integration settings
In this part of the configuration process, you select the ID of the Custom Audience to which you upload profiles from Synerise, the type of identifier profiles are matched on, and the API version of Facebook.

<figure><img src="/api/docs/image/c5c41dd9fdfa15deef2af3b1ece7ead1ee1d9292/docs/automation/_gfx/facebook-upload-profiles-custom-audience.png" class="medium" alt="A configuration form in Upload Profiles to Custom Audience with Connection, Custom Audience ID, Identifier type, and Graph API version fields"><figcaption>Configuration form in Upload Profiles to Custom Audience</figcaption></figure>


<div class="admonition admonition-note"><div class="admonition-icon"><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2.5"><path stroke-linecap="round" stroke-linejoin="round" d="M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z" /></svg></div><div class="admonition-body"><div class="admonition-content">

Fields marked with the <img src="/api/docs/image/c5c41dd9fdfa15deef2af3b1ece7ead1ee1d9292/icons/snippet-icon.svg" alt="Snippet icon" class="icon" > icon accept [snippets](/docs/assets/snippets) or [inserts](/developers/inserts), but you can’t use profile-related inserts.

</div></div></div>


1. In the **Custom Audience ID** field, enter the ID of the Custom Audience.
    You can find the ID in the settings of the Custom Audience in Facebook.
2. From the **Identifier type** dropdown list, select the type of identifier stored in the `matchingId` column -  **Email** or **Phone**.
3. In the **Graph API version** field, enter the currently used version of the Facebook API.
4. Confirm by clicking **Apply**.  
    **Result**: When the workflow runs, profile data from the file are uploaded to the selected Custom Audience in Facebook. This is a business-level operation — since no single profile is the actor of the workflow, no activity event is generated for uploaded profiles. The outcome of the run, including any rows skipped due to a missing or invalid `matchingId` value, is available in the **Transformation logs** tab of the workflow.

## Example of use
---
This example describes a workflow that exports a segment of customers with an assigned email address and uploads them to a Custom Audience in Facebook on a recurring schedule.

### Prepare a transformation rule
1. [Create a transformation rule](/docs/automation/data-transformation-and-imports/creating-data-transformation).
2. As the first node, add **Data Input**. Upload a file sample with the same column names the **Get Profiles** node will export. For example:  

    
   <pre><code class="language-plaintext">Email
   john.doe@example.com
   jane.smith@example.com</code></pre>


3. Add a **Rename Columns** node. In the configuration:
    1. Select the `Email` column.
    2. Under **Edit values by**, select **Replacing** and enter `matchingId` as the new column name.
    3. In the **Handle incomplete data** section, select **Skip row if error occurred**.
4. As the last node, add **Data Output**.
5. Save and publish the transformation.

### Build the workflow
1. Start the workflow with a **Scheduled Run** node. Set the desired recurring schedule.
2. Add a **Get Profiles** node. Select the segmentation of customers, and select the email address attribute under **Attributes values**.
3. Add a **Data Transformation** node. Select the transformation rule you created above.
4. Add a **Facebook > Upload Profiles to Custom Audience** node. Configure the node according to the [instructions above](#node-configuration):
    1. Select or create a connection.
    2. Enter the **Custom Audience ID**.
    3. From **Identifier type**, select **Email**.
    4. Enter the **Graph API version**.
5. Add an **End** node.
