Meta Customer List Best Practices 2026: The Complete Playbook

Meta Customer List Best Practices 2026: The Complete Playbook

AS

Written by

Quick overview

Amir Arsalan Sharifi· Founder & Automation Engineer, PEESHEE Ai

TL;DR — Quick Summary

  • Always include multiple identifiers (email + phone + first name + country) — multi-identifier lists produce 15–25% higher match rates than single-identifier uploads.
  • Phone must be in E.164 format. Emails must be lowercase. All fields must be SHA-256 hashed before API submission (Ads Manager hashes automatically for manual CSV uploads).
  • Refresh your customer list at least monthly — weekly via API is optimal. Audiences decay as Meta's user data evolves and your customer data gets stale.
  • Include an LTV value column to unlock value-based lookalikes — these consistently outperform standard lookalikes for ROAS-focused campaigns.

Meta Customer List Best Practices 2026: The Complete Playbook

Customer list custom audiences are one of Meta's most powerful targeting tools — and one of the most commonly misconfigured. A poorly formatted list gets a 10% match rate. An optimized list from the same contacts can achieve 55–65%. The gap is entirely in how you prepare, structure, and maintain the data.

This playbook covers every best practice: accepted identifiers, hashing requirements, file format specs, match rate optimization tactics, update frequency, suppression lists, and how to build value-based lookalikes from your customer data.

13
Identifiers Meta accepts per record
100
Minimum matched users to activate audience
55–65%
Match rate achievable on optimized multi-field lists
10,000+
Recommended minimum size for value-based lookalikes

All Accepted Meta Customer List Identifiers

Meta can match on 13 different identifiers. Using more identifiers per row increases the probability of a successful match — even if one identifier doesn't find a link, another might.

Identifier Column Name (CSV) Required Format Match Impact
Email address email Lowercase string High
Phone number phone E.164 (+countrycode + number) High
First name fn Lowercase, no special chars Medium
Last name ln Lowercase, no special chars Medium
Date of birth dob YYYY-MM-DD Medium
Year of birth doby YYYY (4 digits) Low
Gender gen "m" or "f" lowercase Low
City ct Lowercase, no spaces/special chars Low
State st 2-letter US state code or full name Low
Zip / Postal code zip String (leading zeros preserved) Low
Country country ISO 3166-1 alpha-2 (e.g., "ae", "gb") Medium
Mobile Advertiser ID madid Raw (not hashed) device ID High (app)
External ID extern_id Your internal user ID Attribution only
Priority stack: Always lead with email + phone. Add fn + ln + country as supplementary identifiers. Date of birth dramatically increases match accuracy when combined with name — include it if you have it. Gender and city add marginal match lift but are worth including when available.

Hashing Requirements: What Must Be Hashed and How

Meta uses SHA-256 hashing for privacy — neither Meta nor advertisers can reverse-engineer the original data from the hash. All identifiers except MADID (Mobile Advertiser ID) and External ID must be hashed.

Hashing Rules by Identifier

Email — lowercase, trim spaces, then hash

Remove leading/trailing whitespace. Convert to lowercase. Do NOT remove dots or plus signs from email addresses. Hash with SHA-256.

Phone — E.164 format, remove all non-digit chars except leading +, then hash

Must start with + and country code. Remove spaces, dashes, parentheses. UAE: +971501234567. UK: +447911123456. US: +12125551234.

Name fields (fn, ln) — lowercase only, no special characters

Remove diacritics if possible (é → e, ñ → n). Only letters and spaces. No hyphens in names. Then hash.

Date of birth — YYYY-MM-DD format, then hash

Must be zero-padded. January 5, 1990 → "1990-01-05". Do not use slashes or dots as separators.

!

MADID — do NOT hash

Mobile Advertiser IDs (IDFA for iOS, GAID for Android) are sent in raw form. Meta handles matching internally. Hashing a MADID will produce zero matches.

!

Ads Manager vs API hashing difference

When uploading via Ads Manager CSV: Meta hashes automatically. When uploading via Marketing API: YOU must hash. Sending unhashed data to the API is a policy violation and produces no matches.

The Correct Hashing Code

// Correct SHA-256 hashing — Node.js / n8n Code node const crypto = require('crypto'); const sha256 = (value) => { if (!value || value.toString().trim() === '') return null; return crypto.createHash('sha256') .update(value.toString().trim().toLowerCase()) .digest('hex'); }; // Phone normalization before hashing const normalizePhone = (phone) => { if (!phone) return null; const cleaned = phone.toString().replace(/[^\d+]/g, ''); return cleaned.startsWith('+') ? cleaned : null; }; // Example: building the payload array for Meta API const record = { phone: '+971501234567', email: 'user@example.com', fn: 'sarah', ln: 'almansouri', country: 'ae' }; const payload_row = [ sha256(normalizePhone(record.phone)), // PHONE hash sha256(record.email), // EMAIL hash sha256(record.fn), // FN hash sha256(record.ln), // LN hash sha256(record.country) // COUNTRY hash ];

File Format Requirements for CSV Uploads

When uploading via Ads Manager, your CSV must follow specific formatting rules:

  • First row: column headers matching Meta's identifier names (email, phone, fn, etc.)
  • Encoding: UTF-8 (important for Arabic names and non-Latin characters)
  • Delimiter: comma (CSV) — tabs not accepted
  • File size: no official limit, but files over 100MB should be split for reliability
  • Minimum rows: 100 records (though you need 100 matched users, not just 100 rows)
  • Do NOT include a header row when using Marketing API — only the data array with matching schema order

Example CSV Structure

email,phone,fn,ln,country,value user1@example.com,+971501234567,sarah,almansouri,ae,250 user2@example.com,+447911123456,james,smith,gb,180 user3@example.com,,ali,hassan,ae,95 ,+971521234567,fatima,ali,ae,320

Note that some rows have phone but no email (row 4), and some have email but no phone (row 3). That's fine — Meta will match on whatever identifiers are available per row. Don't leave records out just because they're missing one identifier.

Match Rate Optimization: The 7 Levers

Match rate is the percentage of your uploaded records that Meta successfully links to a Facebook/Instagram user. Here's what moves it:

Lever 1 — Add E.164 Country Codes (Impact: +10–25%)

The single highest-impact fix. Phone numbers without country codes match at near-zero rates. Adding +971 for UAE, +44 for UK, +1 for US to all numbers is the most reliable way to double a phone-only match rate.

Lever 2 — Include Email Alongside Phone (Impact: +15–20%)

Multi-identifier lists consistently outperform single-identifier uploads. A contact with phone + email gives Meta two independent matching paths. Both hashes are compared; if either matches a profile, the user enters the audience.

Lever 3 — Add First Name + Country (Impact: +5–12%)

Even when phone and email don't match, name + country + date of birth can find a user. This is particularly effective for markets where personal emails are less frequently linked to Facebook accounts (e.g., Gulf markets where Gmail adoption is lower).

Lever 4 — Clean Data Before Upload (Impact: +5–15%)

Invalid records don't match. Common issues that produce no-match rows: phone numbers with no country code, emails with trailing spaces, names with special characters not lowercased. Run a validation pass on your list before upload.

Lever 5 — Use Personal (Not Business) Contact Data (Impact: +10–20%)

Meta matches against consumer profiles, not business records. A person's work email (john.smith@company.com) may not be linked to their Facebook account. Their personal email (jsmith@gmail.com) almost certainly is. Use personal contact data for B2C, and enrich B2B lists with personal emails where possible.

Lever 6 — Segment by Geography (Impact: variable)

Don't mix UAE and UK contacts in the same list without country codes — Meta's matching algorithm uses country as a scoping signal. Segmenting by country and including the country field improves matching precision and reduces false positives.

Lever 7 — Refresh Regularly (Impact: ongoing)

An audience uploaded 6 months ago has lower effective reach as users change emails, phone numbers, or delete accounts. Weekly refreshes (via API automation) keep the audience current and maintain match rate over time.

List Type Typical Match Rate Key Issue
Phone only, no country code 5–10% Format invalid — nearly zero matches
Phone only, E.164 format 25–35% Limited to phone-linked accounts
Email only 30–45% Varies by email type (personal vs work)
Phone + Email 45–60% Best coverage for most markets
Phone + Email + Name + Country 55–70% Optimal — use this always
Phone + Email + all available fields 60–75% Maximum achievable on enriched lists

Suppression Lists: Remove Converters and Opt-Outs

A suppression list is a custom audience you exclude from targeting. The most important ones:

  • Existing customers: exclude your current customer list from acquisition campaigns — stop paying to advertise to people who already bought
  • Recent converters: exclude anyone who converted in the last 30 days — they're in their evaluation/onboarding phase, not ready for more ads
  • Opt-outs / unsubscribes: maintain a list of users who have requested no marketing contact and exclude them from all audiences
  • Lost deals (B2B): exclude CRM leads marked as "lost/closed" to stop wasting budget on non-buyers
Automate suppression via API: When a customer converts or opts out in your CRM, n8n can immediately call DELETE /<audience_id>/users with their hashed identifier to remove them from the active prospecting audience — no waiting for the next manual upload cycle.

Value-Based Lookalike Audiences: The LTV Column

Standard lookalikes find users similar to everyone in your customer list. Value-based lookalikes find users similar to your highest-value customers. The difference in ROAS can be significant.

How to Set Up LTV Columns

Add a value column to your customer list CSV with numeric lifetime value for each customer:

email,phone,fn,ln,country,value topbuyer@example.com,+971501234567,sarah,smith,ae,1500 midbuyer@example.com,+447911123456,james,jones,gb,450 lowbuyer@example.com,+12125551234,mike,chen,us,85

When creating a lookalike from this audience in Ads Manager:

  1. Go to Audiences → Create Audience → Lookalike Audience
  2. Select your customer list as the Source
  3. Check "Optimize for value" if the option appears (requires the value column to be present and Meta to have processed it)
  4. Select lookalike percentage (1% for highest similarity, 5–10% for scale)

LTV Column Rules

  • Must be a positive numeric value (no currency symbols, no commas as thousands separators)
  • Relative values — $85, $450, $1500 — are more useful than binary (0 or 1)
  • You need at least 100 customers with value data, but 10,000+ is recommended for Meta's algorithm to find meaningful patterns
  • Update the value column when customers make repeat purchases — LTV should reflect current total spend, not first-order value

Audience Size Guidance

Audience Size Status Recommended Use
Less than 100 matched Inactive — cannot target Grow your list before using
100–999 matched Active but limited Retargeting only — too small for prospecting or lookalikes
1,000–9,999 matched Good Direct targeting + 1% lookalike
10,000–49,999 matched Strong Full targeting + value-based lookalike + multiple percentages
50,000+ matched Excellent Segment into sub-audiences by value tier, behavior, or product category

Common Mistakes and How to Fix Them

Mistake 1: Uploading business emails for B2C campaigns. Business emails (work addresses) are rarely linked to personal Facebook accounts. Fix: enrich for personal email using Clay or People Data Labs before uploading.
Mistake 2: Not normalizing names. "SARAH" and "sarah" hash to different values. Meta compares hashes — if your hash doesn't match theirs, the record is lost. Fix: always lowercase and trim all name fields before hashing.
Mistake 3: Never refreshing the audience. A static customer list uploaded once becomes increasingly stale. Users change emails, get new phones, and Meta's internal data evolves. Fix: automate weekly refreshes via Marketing API with n8n.
Mistake 4: Not excluding existing customers from prospecting campaigns. Showing acquisition ads to people who already bought wastes budget and creates a poor experience. Fix: always add your customer list as an exclusion on any new-customer acquisition campaign.

FAQ

Can I upload the same customer list to multiple ad accounts?

Yes. Each Meta Business Manager account has its own Audiences section. You can create the same customer list audience in multiple ad accounts — useful for agencies managing several brand accounts. The data is hashed and processed independently per account.

How do I know if my match rate is good or bad?

Ads Manager shows your match rate as a percentage after processing. A rate of 40–60% is good for a well-prepared list. Below 20% usually indicates a formatting issue — missing country codes being the most common. Above 65% is excellent and typically requires multi-identifier enrichment.

Do I need consent to upload a customer list to Meta?

Meta's Customer List Terms require that you have the right to use the data for advertising purposes. In most jurisdictions, customers who purchased from you and haven't explicitly opted out can be targeted on this basis (legitimate interest). In GDPR regions, you must document your lawful basis. UAE PDPL has similar requirements. Include a data processing disclosure in your privacy policy.

What happens to my customer data after Meta processes it?

Meta receives only the hashed (SHA-256) version of your data. They compare hashes against hashed versions of data already in their system — the original data is never transmitted to Meta's servers. After matching, Meta stores the audience composition (which users to target) but not the original contact records. You can delete the audience at any time from Ads Manager.

Automate Your Meta Customer List Maintenance

We build automated pipelines that enrich your customer data, hash it correctly, and push weekly updates to Meta custom audiences — no manual uploads, no stale data, no wasted budget.

Get Your Pipeline Built

Read the full guide: Agentic Lead Gen Pipeline →

Frequently Asked Questions

Can I legally use phone numbers for Meta Custom Audiences in the UAE?

Yes, with conditions. UAE PDPL (effective September 2023) requires that the individuals on your list consented to receive marketing communications. Purchased lists without consent are non-compliant. Contacts who opted in through your website, app, or lead forms are generally safe to upload. Always hash phone numbers with SHA-256 before uploading to Meta — the platform requires this for privacy protection.

What match rate should I expect for phone number Custom Audiences?

Average Meta Custom Audience match rates for phone number lists range from 40–70%. UAE mobile numbers (starting with +971 or 05x) typically match at 55–65% when properly formatted. To maximize match rate: use E.164 format (+971XXXXXXXXX), include country code, clean duplicates, remove landlines, and supplement with email addresses. Match rates above 60% are considered strong for MENA markets.

What is an agentic lead generation pipeline?

An agentic lead generation pipeline is an AI-automated system that independently searches, extracts, validates, enriches, and delivers leads without human intervention at each step. A typical pipeline: n8n triggers a Clay workflow to scrape LinkedIn or Google Maps, Apollo enriches the data with emails and phones, an AI agent scores lead quality, and verified leads are automatically uploaded to Meta Custom Audiences or a CRM.

How do I auto-refresh Meta Custom Audiences with n8n?

Set up a weekly n8n workflow that: (1) pulls fresh leads from your CRM or scraping source; (2) formats phone numbers to E.164 standard; (3) hashes them with SHA-256 (n8n's Crypto node); (4) uses the Meta Marketing API to replace or append to an existing Custom Audience using the /adaccounts/{id}/customaudiences endpoint; and (5) sends a Slack or email notification confirming audience size update.

Amir Arsalan Sharifi — AI Consultant & Marketing Psychologist
Amir Arsalan Sharifi AI Consultant & Marketing Psychologist · PhD · Dubai & MENA

Amir is the founder of PEESHEE Ai and a PhD-level marketing psychologist specializing in AI automation, Shopify strategy, and agentic AI systems for businesses across the MENA region.

Back to blog