Skip to main content
A Meta Custom Audience is a list of people built from your own data. Once the list exists in Ads Manager you can target it, exclude it from prospecting campaigns, or use it as the seed for a Lookalike Audience. This destination keeps that list in sync with a table in your Catalog, so the audience always reflects the segment your data defines instead of a CSV someone exported last quarter.

1. How it works

Each row of your input table is one person. Nekt hashes the personal fields with SHA-256, uploads them in batches of 100, and Meta matches those hashes against its users.
A few behaviors worth knowing before you build the table:
  • Each run adds the people in your table to the audience. People already in the audience stay there, and uploading the same person again does not create a duplicate.
  • The connector does not remove people. If your segment is meant to shrink, for example a “trial users who have not converted” audience, either create a fresh audience or manage removals in Ads Manager.
  • Meta needs at least 100 matched people before an audience can be used for targeting. Small segments will be created but stay unusable.
  • Matching is not instant. After a successful run the audience shows as “Populating” in Ads Manager and takes from a few minutes to a few hours to be ready.
Send more than just the email. Each additional identifier gives Meta another chance to match the person, and match rate is what decides whether the audience is large enough to target.

2. Prepare your input table

The table must contain exactly the columns you map

Every column of the input table is announced to Meta as part of the audience schema. A leftover created_at or customer_id column that you do not map causes the upload to be rejected. Build a Query whose SELECT lists only the fields you are going to send.

Normalize your values before they are hashed

Nekt hashes the value exactly as it appears in your table, with no lowercasing, trimming, or reformatting. Maria.Silva@Example.com and maria.silva@example.com produce different hashes, and only the second one matches anyone.
Do not pre-hash these columns while “Would you like Nekt to automatically hash fields required by Facebook?” is enabled, or the values are hashed twice and match nobody. If your table already stores hashed values, disable the option, and then every field above must arrive already hashed.

Example: high-value customers from your CRM

The resulting table: Mapping is one to one: email → EMAIL, phone → PHONE, fn → FN, and so on.
A person is matched if any identifier matches, so rows with missing fields are still useful. Do not drop a customer just because you lack their address.

3. Add your Facebook Custom Audiences access

1

Add the destination

Go to Destinations, click Add destination, and select Facebook Custom Audiences.
2

Authorize and choose the ad account

  • Facebook authorization: authorize an account with access to the Facebook Ad Account you want to send data to.
  • Account ID: the specific Facebook Ad Account that will own the audience.
3

Create a new audience or point at an existing one

  • Create new audience: fill in Audience name and Audience description. Nekt creates the audience on the first run and reuses it on every run after that.
  • Use existing audience: fill in Audience ID, found in Ads Manager → Audiences.
4

Choose the hashing behavior

Would you like Nekt to automatically hash fields required by Facebook? should stay enabled unless your table already stores hashed values.
5

Select your data and map the columns

Choose the layer and the table you prepared, then map each column to its audience field.
6

Name it and set a trigger

Describe the destination, set a trigger, and click Done. Daily is a good default for an audience fed by a segment that changes slowly.
Accept Meta’s Custom Audiences terms in the Business account before the first run. Uploads from an account that has not accepted them are rejected.

4. Available fields

All of them are hashed by Nekt when automatic hashing is enabled. See Meta’s customer list reference for the full definition of each field.

5. After the run

  1. Open Ads Manager → Audiences and find your audience by name.
  2. Availability shows Populating right after the run, then Ready once Meta finishes matching.
  3. Size is the number of matched people, not the number of rows you uploaded. A large gap between the two means your identifiers are not matching, usually because values were not normalized before hashing.

6. Troubleshooting

Your input table has columns that were not mapped. Rewrite the Query so the SELECT returns only the columns you are sending.
Meta is still processing a previous upload of the same audience. Wait for the availability to go back to Normal in Ads Manager and run again. Overlapping schedules on the same audience are the usual cause.
Meta matched few of the rows. Check that values were normalized before hashing, that phone numbers carry the country code, and that automatic hashing is not being applied on top of already-hashed values. Adding more identifiers per person also helps.
Meta requires at least 100 matched people. Widen the segment that feeds the table, or improve the match rate by sending more identifiers.
Runs only add people. To shrink an audience, remove them in Ads Manager or point the destination at a newly created audience.

Facebook Conversions

Send offline and server-side conversion events to Meta.

Facebook Campaign Management

Pause, activate, and rebudget campaigns from a table.
If you encounter any issues, reach out to us via Slack, and we’ll gladly assist you!