Meta Custom Audiences
Renta builds a Meta Custom Audience from your data warehouse: every row in the data model becomes a person in the audience you target or exclude in campaigns.
The row carries only identifiers, such as email, phone number, name, address parts, mobile advertising id, or your own CRM id. Renta hashes them before they leave, so Meta matches people without ever receiving raw contact data.
Authentication
Renta authenticates with Meta OAuth. Authorize the Facebook account that has access to the ad account holding the audience.
A Customer File Custom Audience can only be created in an ad account that belongs to a Business. For a personal ad account Meta answers Business Account Needed to Create/Edit This Audience and the pipeline cannot be created. Add the ad account to your Business in Meta Business Settings first.
Connect Meta Custom Audiences destination
- Navigate to the Connections > Catalog section in the left sidebar and open the Destinations tab.
- Open the Reverse ETL category and click the Meta Custom Audiences card.

Click Log in to your Meta Custom Audiences account. Meta opens in the same tab.

Confirm the Facebook account and click Continue. Use Edit settings if you need to change which businesses and ad accounts Renta may reach. Meta returns you to Renta.

Renta confirms the granted access and shows the authorized account. Finish the setup:
- Destination name.
Specify a name for this destination. This is used exclusively in the Renta interface.
Click Save to finish.

The new destination appears in the Destinations list with the Active status. You can now use it in Reverse ETL pipelines.

Prepare a data model
A Reverse ETL pipeline reads from a data model: a SQL query saved in the Data models section that decides which warehouse rows to sync and what each row holds. Build it before the pipeline, because the mapping dropdowns are filled from its columns.
An audience model holds identifiers and nothing else. Meta has no use for order values or plan names here, so keep the query to the columns that identify a person.
-- Audience members prepared for Meta. The query returns rows only, no table is created.
WITH demo_audience AS (
SELECT
'james.miller@example.com' AS email,
'+12125550101' AS phone,
'James' AS first_name,
'Miller' AS last_name,
'New York' AS city,
'NY' AS state,
'10001' AS zip,
'US' AS country,
'u-1001' AS external_id
UNION ALL SELECT 'olivia.johnson@example.com','+13125550102','Olivia','Johnson','Chicago','IL','60601','US','u-1002'
UNION ALL SELECT 'william.davis@example.com','+12145550103','William','Davis','Dallas','TX','75201','US','u-1003'
)
SELECT * FROM demo_audienceCreate the data model
In the left sidebar, open Data models and click New model. Then:
- Source.
Choose the warehouse connection the query runs against. - Write your model query.
Paste your SQL. Keep SQL query as the query type. - Run preview.
Check the rows and column names before moving on. Click Next step when the result looks right.

Pick Reverse ETL only for a model that feeds pipelines. Choose one of the AI agents options instead if the same model should also answer agent questions.

Review the columns Renta read from the query and mark the one that identifies a row. Reverse ETL needs this key to tell a changed row from a new one, so pick the column you will also match on in Meta, such as the email.

Give the model a name and a short description, then click Create model. The name is what you pick from the Data model dropdown when you build the pipeline.

The model appears in the list with the Reverse ETL scope and is ready to use in a pipeline.

Create a Meta Custom Audiences pipeline
The destination and the data model have to exist before you start.
In the left sidebar, click New pipeline. On the Source step, switch the toggle to Reverse ETL and pick your data warehouse, such as Google BigQuery.

Choose the warehouse connection that holds your data models and click Next step.

On the Destination step, select Meta Custom Audiences under Already connected and click Next step.

Choose the Meta connection you created earlier and click Next step.

Pipeline configuration
On the final step, choose where the audience lives and which columns identify the people in it.
What Renta sends
Pick the object, the data model, and the ad account.

- What would you like Renta to send to Meta.
Custom Audience is the only object today. Lookalike and website audiences are built by Meta itself and cannot be written to. - Data model.
Choose the model to sync. The columns available for matching and mapping below come from it. - Ad account.
The Meta ad account the audience belongs to. The list holds every ad account the authorized user can reach.
Audience
Decide whether Renta creates the audience or writes into one you already have.

| Mode | Description |
|---|---|
| Create a new audience | Renta creates the audience in the selected ad account when you create the pipeline, then writes into it on every run. |
| Sync to an existing audience | Renta writes into an audience you already built in Meta. Supply its id. |
For a new audience, fill in New audience name. This is the name you will see in Meta Ads Manager, so make it recognisable.
Record matching
Tell Renta which column identifies a person, so the same row keeps updating the same audience member instead of adding another one.

The left dropdown offers the unique key of the data model, and the right one offers the Meta identifier holding the same value. Renta sends the matched value with every row, so you do not need to repeat it in the mapping block below.
Field mapping
Map every identifier you have. Meta matches a person when any one of them lines up, so a wider mapping means a larger audience.

| Group | Fields |
|---|---|
| Direct identifiers | Email address, Phone number, Mobile advertiser ID (IDFA / GAID), External identifier (your CRM id) |
| Name | First name, Last name, First initial |
| Demographics | Gender, Date of birth (year, month, and day as separate fields) |
| Location | City, State / region, ZIP / postal code, Country |
Renta hashes email, phone number, name parts, and the location fields with SHA-256 before the request leaves. The mobile advertising id and your CRM id travel as written, because Meta matches those directly.
Name and address fields rarely match on their own. Treat them as a supplement to email, phone number, or an advertising id rather than a replacement.
Sync behavior
Set what happens to a person whose row disappears from the data model.

| Option | Description |
|---|---|
| Ignore | The person stays in the audience. This is the default. |
| Remove from audience | Renta removes the person from the audience. Use it when the model is the authoritative list of who should be targeted, such as an active-subscriber segment. |
Audience declarations
Meta requires you to declare what kind of list this is and which privacy rules apply to it.

-
Audience subtype.
Customer file audience is the only subtype Renta writes to, because the other kinds are built from Meta's own pixels and pages. -
Customer file source Declare where the data came from.
Value Description User-provided only Your business collected the data directly from the people in it. Partner-provided only The data came from a partner or a third-party provider. Both user-provided and partner-provided The list mixes both sources. -
LDU country and LDU state Declare Limited Data Use, which Meta applies for privacy regimes such as CCPA. Auto-detect on both lets Meta work the geography out from the payload, which is the usual choice. Set them explicitly only when your legal team asks for it.
The customer file source is part of Meta's Customer File Custom Audience terms. Answer it accurately for the list you are actually uploading.
Then name the pipeline.

Integration name is the name of your pipeline. Edit it to match your preferences.
Schedule
Choose how often the pipeline runs.

| Schedule type | Description |
|---|---|
| Manual | The pipeline runs only when triggered manually through the interface or via API. |
| Daily | The pipeline runs once a day at the specified update time. |
| Interval | The pipeline runs at specified time intervals. |
| Cron Expression | The pipeline runs on a schedule defined by a cron expression. |
For Daily schedules, set the Update time (the exact time each run starts), then click Create pipeline.

Renta also supports API triggers and integration with external orchestrators such as Apache Airflow, Dagster, and Prefect. See the full scheduling documentation for details.
The new pipeline appears in the Pipelines section under the Reverse ETL tab, where you can track its runs and progress.

Sync strategy
Renta syncs incrementally. A run compares the data model against the state the previous run recorded and sends only what moved, which keeps the audience current without re-uploading it every night. The first run has nothing to compare against and delivers the model in full.
| Row state | What Renta does |
|---|---|
| New | Adds the person to the audience. |
| Changed | Sends the identifiers again so Meta re-matches the person on the new values. |
| Unchanged | Sends nothing. |
| Deleted | Follows the deleted-row policy: leaves the person in the audience, or removes them. |
Limits
- The ad account has to belong to a Business.
Meta refuses to create or edit a customer-list audience in a personal ad account. - Matching is Meta's, not Renta's.
Renta reports a row as delivered once Meta accepts it. How many people that resolves to is decided inside Meta, and the audience size stays hidden until it is large enough to target. - An audience needs time before it can be used.
Meta processes an uploaded list before the audience becomes available in campaigns, so expect a delay between a successful run and a usable audience. - A run stops when rejections pile up.
Renta halts the run when more than 30% of a batch, or more than 10% of the rows delivered so far, come back rejected. People already delivered stay in the audience, and the next run picks up where this one stopped.
Ready to get started?
Build your data pipeline today or get a personalized demo. Start free!
Need help?
Get expert support to ensure your project succeeds. We're here to help!
Feature requests?
Help shape our product! Share your ideas for new features and integrations.