Skip to content

Prepare a CSV for custom audiences

A custom audience file is a list of people you already know, sent to an advertising platform so you can target them or exclude them. Signals reads the file from a location you control and delivers the matched list onward.

One file serves four destinations: Meta, Google, Snapchat and TikTok. LinkedIn does not support custom audiences, so there is nothing to send there. The file carries identity and location only. There are no product or catalog columns, because an audience is a list of people rather than a record of what they bought.

  • A source instance in Studio with Audience selected as the Integration Type, and a delivery location connected. Signals reads from AWS S3, Google Cloud Storage, FTP or SFTP.
  • The Audience sample file, which carries the exact column names and two example rows.
  • The customer data terms accepted in each advertising platform you are sending to. Without that the platform will not create the audience.
  • An account with permission to manage custom audiences in the destination platform. Admin or advertiser level is required.
  • A way to apply SHA-256 hashing in your export process. Apply SHA-256 hashing to PII has snippets for Google Sheets, SQL and the common languages.

Use a consistent pattern that carries the date on which the file is uploaded, and add a numeric suffix if you send more than one file for a date.

Three, and all four destinations require the same three.

ColumnWhat goes in it
audience_nameThe name the audience will carry in the advertising platform. Required by every destination, and sent in plain text. Keep it stable, because changing it creates a second audience rather than renaming the first.
email_1_hashedHashed email address. Required by every destination. Two further columns take a second and third address.
One phone columnAt least one of the six phone columns. Required by every destination.

Every identifier you add raises the share of your list the platform can match. What is useful depends on where you are sending it.

ColumnNotes
first_name_hashed, last_name_hashedRecommended by Meta and Google. Snapchat and TikTok do not use them.
city_hashed, state_hashed, country_hashed, zipcode_hashedMeta only. See the Google exception below.
Country, zipcode, city, stateThe same location fields in plain text. These are the ones Google uses.
gender_hashed, date_of_birth_whole_hashedMeta only. Gender is a single letter and the combined date of birth is DD/MM/YYYY.
date_of_birth_year_hashed, date_of_birth_month_hashed, date_of_birth_day_hashedThe same date split across three columns: YYYY, MM from 01 to 12, and DD from 01 to 31. Use these or the combined column, not both.
facebook_app_user_idThe numeric Facebook user ID of someone who uses your app, available through the Facebook SDK. Meta only, and sent in plain text.
facebook_page_user_idThe numeric Facebook user ID of someone who has interacted with your Page. Meta only, and sent in plain text.
mobile_advertiser_id, idfaThe Android and Apple advertising identifiers, both hashed. Required by Meta, Snapchat and TikTok only where you have neither an email address nor a phone number. Not used by Google.

City, state, country and postcode are hashed for Meta and not hashed for Google. The template carries both versions of each field for that reason: use the hashed columns for Meta and the plain Country, zipcode, city and state columns for Google.

Email address and phone number are hashed for every destination including Google. This exception applies to the location fields only.

  • Email address. Trim leading and trailing whitespace and lowercase it. One address per column, up to three columns.
  • Phone number. E.164, so a leading plus sign then the country code and the number, up to fifteen digits. A country code is required for the number to match.
  • Names and city. Letters a to z only, trimmed and lowercased, no punctuation.
  • State. The two-character code in lowercase for the United States, the full region name lowercased elsewhere.
  • Postcode. Lowercase and no whitespace. United States, first five digits only. United Kingdom, the Area, District and Sector format.
  • Country. Two-letter ISO 3166-1 alpha-2 code.
  • Gender. A single letter, m or f.
  • Date of birth. DD/MM/YYYY in the combined column.

Normalize first, then hash. Never hash an empty cell, because a hashed blank looks like a valid value and matches nobody.

  • A comma-separated .csv file.
  • A header row naming the columns. You only need the columns you are actually sending, so a file with fewer columns than the template is fine.
  • There is no limit on the number of rows or on the size of the file.

A header mismatch fails quietly. A column whose header does not match the template is skipped rather than reported, and the file processes normally without it, so a renamed or misspelled header does not produce an error. It produces events with that field missing. If a match rate is lower than you expected on a file that processed cleanly, compare the header row against the template first, including case and underscores.

These are counted after matching, not before. A list of 5,000 people that matches 80 of them will not produce a Meta audience.

PlatformMinimum
Meta100 matched users before the audience can be created.
Google Customer Match1,000 matched users. Account eligibility also applies: good standing, at least 90 days of history, and a lifetime spend threshold.
Snapchat1,000 matched users before the audience can be used in a campaign.
TikTok1,000 seed users for a lookalike.
  • The audience takes 24 to 48 hours to populate after a sync. A status of Populating during that period is normal.
  • Keep the list fresh. Aim for a sync within the last seven days, and for retargeting keep the underlying data no more than 90 days old.
  • Deduplicate in your own export. Duplicate rows do not create duplicate audience members, but they make the size figures harder to read.
  • If you use an audience for suppression, check your sync schedule is faster than your campaign changes. A slow list keeps spending on people you meant to exclude.
  • Check the phone numbers carry a country code. A missing country code is the most common single cause.
  • Check you have not hashed the location fields for Google.
  • Check the email addresses. Work addresses match less well than personal ones, and disposable addresses barely match at all.
  • Check the hashing. The email address has to be lowercased and trimmed before SHA-256, not after.
  • Check how old the data is. Addresses that are no longer in use cannot match.