How to Format and Upload a Customer List to Facebook Ads

How to upload a customer list to Facebook Ads so it actually matches: the columns Meta reads, how to write emails and phone numbers, whether to hash, and every step in Ads Manager.

By The Digital Marketing Support team · Updated · 9 min read

To upload a customer list to Facebook Ads, you need three things: a clean CSV file with the columns Meta reads, permission to use the data, and about ten minutes in Ads Manager. The upload itself is easy. The hard part is the file. A list with local phone numbers, no country column and one email per person can match only a small share of your customers.

A customer list audience (Meta calls it a “customer list custom audience”) lets you show ads to people who already bought from you, leave them out of prospecting ads, or use them as the seed for a lookalike audience.

Before you start

Check these before you export anything. Each one can stop the upload, and none of them is about the file.

  • You need the right permissions. Meta’s setup page says you must own the ad account, or have admin or advertiser permissions on it, and the account must be connected to a business portfolio.
  • You need a legal basis for the data. You must have the rights and permissions to use the list, as set out in Meta’s Customer List Custom Audiences Terms. Under GDPR, Meta treats you as the data controller for any list you upload.
  • The terms must be accepted. The first time you create a customer list audience, Ads Manager asks you to accept the custom audience terms. If an app you connected to Meta (a CRM or email tool) says the terms are missing, sign in to Ads Manager as someone with a role on that ad account and accept them there. Meta’s note on the terms explains that the acceptance covers the business that owns the ad account.
  • New ad accounts may have to wait. If the account is new or was recently linked, Meta says it may take a few weeks before you can create a customer list audience. That is an account limit. A better file won’t fix it.
  • Stay clear of prohibited information. Meta’s data preparation page bans health and financial information, Social Security numbers, card and bank numbers, passwords, data about children under 13, and people who opted out of this kind of targeting. Removing columns isn’t enough. Meta’s setup page says the audience can’t be named, include, or be based on prohibited information. So a clinic’s patient list or a lender’s list of borrowers breaks the rule even with no health or money columns, because the reason people are on the list is itself sensitive. Since September 2, 2025, Meta flags audiences that suggest specific health conditions or financial status, and a flagged audience can’t be used to run ad campaigns.

The columns Meta reads

Meta matches on identifiers: pieces of data that point to one person. Every list needs at least one main identifier. The others are optional, but they help Meta tell people with the same name apart. These are the header names from Meta’s formatting guidelines:

Header What goes in it Notes
email One email address per cell Main identifier. Up to 3 email columns.
phone Phone with country code Main identifier. Up to 3 phone columns. Punctuation is allowed.
madid Mobile advertising ID (Apple or Android) Main identifier.
appuid, pageuid Facebook app or Page user ID Main identifiers, numbers only.
fn, ln First name, last name Two separate columns, never one full-name column.
ct, st, zip City, state, ZIP or postal code US states can be written in full or as two letters.
country Two-letter code, such as US or GB Add it even if every customer lives in one country.
dob, doby, gen, age Birth date, birth year, gender, age Optional extras.

Two rules matter more than the rest. Meta’s data preparation page names them as its most important tips: always include the country code in phone numbers, and always include a separate country column, even if all your customers are in one country. Meta matches people worldwide, so (650) 555-0161 alone is ambiguous. +16505550161 is not.

Meta accepts emails, and phone numbers, in up to three separate columns (formatting guidelines). If a customer has two emails, add a second column with the same header. The example file Meta links from its data preparation page does exactly that: email,email,email,phone,phone,phone. Meta also says that more main identifiers give a better chance of a good match rate.

You can use your own column names, but then you must map each column to its type by hand during the upload. Using Meta’s names saves that step and avoids mistakes.

A template you can copy

Here is a minimal Facebook customer list template with two made-up customers. Save it as a CSV file in UTF-8.

email,email,phone,fn,ln,ct,st,zip,country
[email protected],[email protected],+16505550161,Emily,Sampleton,Menlo Park,CA,94025,US
[email protected],,+447700900123,Raj,Example,London,,SW1A 1AA,GB

Notice three things. Raj has no second email, so that cell is simply empty. His state is empty too, which is fine outside the US. And both phone numbers start with a country code.

You can also add an optional value column with a number for each customer, such as total spend, to build a value-based lookalike. It must be a plain number with no currency symbol.

Filling this template by hand works for 50 rows, not 5,000. The customer list formatter for Meta fills it from a Shopify, WooCommerce or CRM export: it maps your columns, adds country codes, splits full names and writes Meta’s headers. It runs in your browser, so the list stays on your computer.

Hash it yourself, or let Meta do it?

Hashing turns each email or phone into a fixed string of letters and numbers (with SHA-256), so the raw value isn’t sent. Meta hashes your identifiers before matching when you upload a plain file in Ads Manager. For most small businesses, a plain file is the right choice. It’s simpler, and you avoid hashing mistakes.

Hash it yourself only if you send data through Meta’s Marketing API, or your company’s rules say personal data must be hashed before it leaves your systems. Then the order is: clean up first, hash second. Meta’s developer guide gives the clean-up rules (Meta calls this normalizing): trim spaces and lowercase emails; remove symbols, letters and leading zeros from phones, with the country code in front; lowercase names with no punctuation. Mobile advertising IDs are never hashed, and the value column isn’t either.

A file hashed without that clean-up gives hashes that match no one. The upload will still go through, so you won’t see an error, only a poor match score.

Upload it in Ads Manager

1. Export your customers 2. Clean and format the CSV 3. Create audience, accept terms 4. Map identifiers, import 5. Populating, then Ready
Steps 1 and 2 happen on your computer. Steps 3 to 5 happen in Meta Ads Manager.

These are the steps from Meta’s Ads Manager guide. Menu names change from time to time, but the order stays the same.

  1. Open Audiences. In Ads Manager, open the Audiences page, click Create audience and choose Custom audience.
  2. Choose Customer list as the source and click Next.
  3. Pick how the audience can be used. Inclusions or exclusions keeps every option open. Only exclusions can’t be changed later, and an exclusion-only audience can’t be the source of a lookalike.
  4. Add your file. Upload the CSV or TXT file, or paste the values. Meta asks whether the list includes a customer value column. Answer yes only if you added value.
  5. Name the audience and accept the terms if Meta asks.
  6. Map the identifiers. A tick means a column is mapped and ready. An exclamation mark means a column was left out or needs a manual fix, often a second email or phone column or a header Meta didn’t recognize. Fix those first; it improves the match.
  7. Click Import and create. The audience shows Populating while Meta hashes and matches the list. Meta says hashing may take a few minutes, depending on the size of the list.

After the upload

Check the match score. In the Audiences list you can add a Match score column. It’s a score out of ten, shown in steps of 0.5: matched rows divided by uploaded rows in your last successful upload (formatting guidelines). A low score points back to the data, not to Meta.

Keep the list fresh. A customer list is a snapshot, not a live sync. To change it, open the audience and add customers, remove customers or replace the whole list (edit a customer list). Edits can take a few hours and your ads keep running meanwhile. If a list hasn’t been updated in more than 30 days, Meta marks it Outdated, which may affect delivery. And a customer list that hasn’t been used in an active ad set for over two years is flagged for deletion. Using it in an active ad set tells Meta to keep it.

Take out people who opt out. Adding is fine for new customers. When people unsubscribe or ask to be removed, open the audience, choose Edit and use Remove customers with a file of just those people, or Replace customers with a fresh export (edit a customer list). Meta’s rules don’t allow you to target people who opted out of this kind of use, so they must leave the audience.

Five mistakes that lower the match rate

  1. Phone numbers without a country code. Store exports often save local numbers like (650) 555-0161. Add the code from the customer’s country.
  2. No country column. Meta asks for it even when all customers are in one country. It costs nothing to add.
  3. One identifier per person. An email-only list matches only people who use that exact email on Facebook or Instagram. Add phone numbers and a second email where you have them.
  4. Typos, test rows and shared inboxes. gmial.com, [email protected] and info@ addresses rarely match a person. Before you upload, run the export through the customer list quality check. It counts bad emails, missing country codes, duplicates and role addresses, and it shows the list size against Meta’s 1,000-customer guideline.
  5. A file broken by Excel. Opening and saving a CSV in Excel can strip the plus sign from phones, drop leading zeros from ZIP codes and change the text encoding. Download the finished file and upload it as it is.

Fix those five and most lists match far better on the next upload. If you also advertise on Google, the same customers can become a Google Ads audience too: see why a Customer Match list comes out small for the Google side, then format the file for Meta with the Customer List Formatter for Meta.

Frequently asked questions

How do I upload a customer list to Facebook Ads?

In Ads Manager go to Audiences › Create audience › Custom audience › Customer list. Upload a CSV or TXT file, name the audience, accept the custom audience terms, check that each column is mapped to the right identifier, then click Import and create. Meta’s step-by-step help has the current screens.

What format does a Facebook customer list need?

A CSV or TXT file with one person per row and one identifier type per column. Use Meta’s header names (email, phone, fn, ln, zip, ct, st, country and so on), put first and last names in separate columns, and include the country code in every phone number. See Meta’s formatting guidelines.

What is the minimum size for a Facebook customer list?

Meta’s formatting guidelines say a customer list should include at least 1,000 customers. Only part of the list will match, so a bigger list gives you a more usable audience.

Do I need to hash my customer list before uploading it to Meta?

No. When you upload a plain file in Ads Manager, Meta hashes the identifiers before matching. You only need to hash yourself if you send data through the Marketing API or your company’s rules require it. Then you must normalize first and use SHA-256.

Do Facebook custom audiences update automatically?

A customer list audience does not refresh itself from your CRM. It changes only when someone adds, removes or replaces customers, by hand or through a connected app that uses Meta’s API. After 30 days without an update the audience is marked Outdated, which may affect delivery. Use Edit to add, remove or replace customers.

Why is my Facebook custom audience match rate low?

Usually because of the data: phone numbers without a country code, no country column, typos in emails, work or shared inboxes, and only one identifier per person. Meta’s match score is matched rows divided by uploaded rows, so every dead row lowers it. Add a second email or phone where you have one.

Need help setting this up? Talk to EmproIT