How to Upload Phone Numbers to Meta Custom Audiences: Complete Guide (2026)
Amir Arsalan Sharifi
TL;DR — Quick Summary
- Phone numbers must be in E.164 format (+countrycodenumber, no spaces) or your match rate will be 10–15% instead of 40–60%.
- Via Ads Manager: create a Customer List custom audience, upload a CSV, map columns. Via API: hash first with SHA-256, then POST to the audience endpoint.
- Always include a second identifier (email or name) alongside phone — multi-identifier lists consistently outperform phone-only uploads.
- You need 100 matched users minimum for the audience to activate. Aim for 1,000+ before building lookalikes.
How to Upload Phone Numbers to Meta Custom Audiences: Complete Guide (2026)
Published March 2026 · Technical guide for marketers and growth teams running Meta Ads campaigns with customer phone lists.
Uploading a phone list to Meta and getting a 10% match rate is not a success. It is a symptom of a formatting problem. The contacts are real. The people are on Meta. But Meta cannot match your data to its users because the phone numbers are formatted differently from how Meta stores them — and SHA-256 hashing means even a single character difference produces a completely different hash that will never match.
This guide covers everything you need to upload phone numbers to Meta custom audiences correctly — the format spec, the column requirements, the step-by-step process via Ads Manager, the programmatic API path via n8n, and the specific mistakes that silently destroy match rates without throwing an error.
- A Meta Business account with Ads Manager access
- A phone number list in CSV or TXT format
- Country codes for all numbers (mandatory for acceptable match rates)
- Optionally: email addresses and/or first/last names to boost match rate
Step 1: Format Your Phone Numbers Correctly (This Is Where Most People Fail)
Before you open Ads Manager, your phone numbers need to be in E.164 format. This is the international standard for phone numbers: country code prefix, followed by the full national number, no spaces, no dashes, no parentheses, no leading zeros after the country code.
| Country | Wrong Format | Correct E.164 Format |
|---|---|---|
| UAE | 050 123 4567 / 0501234567 | +971501234567 |
| Saudi Arabia | 0501234567 / 05 0123 4567 | +966501234567 |
| UK | 07911 123456 / +44 7911 123456 | +447911123456 |
| US | (555) 123-4567 / 1-555-123-4567 | +15551234567 |
| India | 9876543210 / +91 98765 43210 | +919876543210 |
How to Clean Your Phone List in Google Sheets
If your list is in Google Sheets, use this formula in a new column to standardize UAE numbers:
For Python users processing larger lists:
Step 2: Prepare Your CSV — What Columns Meta Accepts
Meta accepts a CSV with one or more identifier columns. The more identifiers you include, the higher your match rate. Phone alone will match some users. Phone + email + name will match significantly more, because Meta attempts to verify the match across multiple identifiers before including a user in the audience.
| Column Name | Meta Identifier | Format Required | Impact on Match Rate |
|---|---|---|---|
| phone | PHONE | E.164 (+countrycodenumber) | Primary — high impact |
| Lowercase, trimmed | Strongest identifier — very high impact | ||
| fn | FN (First Name) | Lowercase, no accents | Medium impact as secondary |
| ln | LN (Last Name) | Lowercase, no accents | Medium impact as secondary |
| country | COUNTRY | ISO 3166-1 alpha-2 (ae, gb, us) | Low individual impact, improves overall |
| dob | DOBY / DOBM / DOBD | Year: YYYY, Month: MM, Day: DD | Medium — useful for consumer lists |
| gen | GEN | m or f (lowercase) | Low individual, useful in combination |
A minimal high-performing CSV for a UAE phone list looks like this:
Empty cells are fine — Meta simply cannot use that identifier for that record. A row with phone + email + name gives Meta three chances to match. A row with only phone gives it one.
Step 3: Uploading via Meta Ads Manager — Step by Step
In Meta Ads Manager, click the grid icon → Audiences. Or navigate directly to business.facebook.com/adsmanager/audiences. You need Business Manager access, not just a personal ad account.
Click "Create Audience" → "Custom Audience" → "Customer List". This is the option for uploading external contact data. Do not select "Website" or "App Activity" — those are pixel-based audiences.
Meta will ask if you want to include a Customer Value column (LTV for value-based lookalikes). Skip this for your first upload unless you have reliable LTV data — incorrect LTV data can degrade lookalike quality. Click "No, upload a customer list without customer value".
Upload the CSV you prepared in step 2. Meta will auto-detect column headers if they match its standard names (phone, email, fn, ln, country). If your headers are different (e.g., "mobile", "first_name"), the next screen will ask you to map them manually.
Review the column mapping screen carefully. Each column should show a green checkmark and the correct identifier type. If a column shows "Do Not Upload", change the dropdown to the correct identifier. The phone column must be mapped to "Phone" — not "Other".
Check the data use agreement (confirming you collected this data lawfully and have permission to use it for advertising). Click "Upload and Create". Meta will begin hashing and matching immediately. Allow 30 minutes to 24 hours for large lists to fully process.
Return to the Audiences screen. Your new audience will show an estimated size once processing is complete. The audience detail will show the percentage of uploaded records that matched — your match rate. If it's below 20%, revisit your phone formatting.
Step 4: Automating the Upload with n8n and the Meta Marketing API
The Ads Manager upload works, but it is a manual process that does not scale. Every time your contact list grows, someone has to export, upload, and re-trigger the audience refresh. The Meta Marketing API solves this by allowing programmatic audience updates — your n8n workflow handles the upload automatically, on a schedule, whenever new contacts are added.
The n8n Workflow: Automated Weekly Audience Refresh
Set a weekly cron schedule (e.g., every Monday at 6am GST). This fires the workflow automatically without any human action required.
Read all rows from your contact sheet where "Synced_to_Meta" column is empty. Filter to only new contacts since the last run using a stored timestamp.
Run the normalization and SHA-256 hashing logic on each record. Key rules: lowercase before hashing, trim whitespace, E.164 for phone. Output: array of hashed payloads in Meta's schema format.
The hashing code in n8n's Code node (JavaScript):
POST the hashed payload to the Meta Marketing API audience endpoint. Include your access token in the Authorization header. Batch up to 10,000 records per API call.
The API call structure:
Update the "Synced_to_Meta" column to the current timestamp for all processed records. This prevents double-uploading on the next run.
POST /act_{AD_ACCOUNT_ID}/customaudiences and store the returned ID for subsequent updates.
Common Upload Errors and How to Fix Them
| Problem | Likely Cause | Fix |
|---|---|---|
| Match rate under 20% | Missing country codes, inconsistent phone format | Reformat to E.164, add country code to all numbers |
| Audience stuck at "Processing" | Large file size or Meta backend delay | Wait 24 hours. If still stuck, re-upload a smaller batch |
| API returns "Invalid hash" | Data not normalized before hashing | Ensure lowercase + trim before SHA-256 |
| Audience shows "<1,000" size | List too small or too few matched users | Upload more contacts or improve enrichment to raise match rate |
| "This audience can't be used" | Policy restriction (housing/employment/financial ads) | Check Meta's Special Ad Categories — customer lists restricted for these since March 2025 |
| Column mapping shows "Other" | Column header not recognized by Meta | Rename headers to Meta standard names (phone, email, fn, ln) or map manually |
After Upload: Building Lookalike Audiences from Your Phone List
A custom audience of matched phone contacts is the seed. The lookalike audience built from it is where the scale comes from. Once your custom audience has 1,000+ matched users, Meta has enough signal to identify users who share similar characteristics — even people whose phone numbers are not in your list.
In Ads Manager → Audiences → Create Audience → Lookalike Audience. Select your phone list custom audience as the source. Choose 1% similarity for the highest-quality, most targeted lookalike. Select your target country (UAE, GCC, or globally). Meta will build the lookalike within 6–24 hours.
At 1% similarity in the UAE, Meta finds approximately 50,000–80,000 users who most closely resemble your matched phone contacts. This is your highest-ROI expansion audience — Meta has validated these people against real contact data, not interest tags or demographic guesses.
LinkedIn Lead Generation Agent — Automated Contact Sourcing
Before you can upload phone numbers to Meta, you need them. The LinkedIn Lead Gen Agent identifies your target decision-makers or business contacts, reaches out automatically, and collects structured contact data — including phone and email — that goes directly into your pipeline for Meta upload. It replaces the manual work of building a prospect list from scratch.
- Identifies 50–200 qualified contacts per week matching your ICP
- Exports structured data (name, company, LinkedIn URL, email where available) for Clay enrichment
- Runs outreach sequences that prompt contacts to share their details
- Integrates with Google Sheets for direct pipeline input
Want the Full Pipeline — Not Just the Upload?
Read our complete guide to building an agentic lead gen pipeline: from AI contact sourcing through to Meta campaign launch — fully automated with n8n.
Read the Full Pipeline Guide Get the LinkedIn Agent — AED 176Questions about setup? WhatsApp us — we respond within the hour.
Frequently Asked Questions
How do I upload phone numbers to Meta custom audiences?
Go to Meta Ads Manager → Audiences → Create Audience → Custom Audience → Customer List. Prepare a CSV with phone numbers in E.164 format (e.g., +971501234567). Upload the file, map the phone column to the Phone identifier, and let Meta hash and match the records. You need at least 100 matched users for the audience to go live.
What format do phone numbers need to be in for Meta?
E.164 format: country code followed by the full national number, no spaces, dashes, or parentheses. UAE example: +971501234567. UK example: +447911123456. Numbers without country codes will match at a fraction of their potential rate.
Does Meta hash phone numbers automatically?
Yes — when uploading via Ads Manager, Meta hashes data automatically. When using the Marketing API programmatically, you must SHA-256 hash all identifier values yourself before submitting. Sending raw un-hashed data to the API will cause errors.
What is a good match rate for phone number custom audiences?
A well-formatted, enriched phone list should achieve 40–60% match rate. Raw lists typically match at 10–15%. If you're below 20%, the most common causes are missing country codes, inconsistent formatting, or using business landlines instead of personal mobile numbers.
Can I automate the phone number upload to Meta?
Yes. The Meta Marketing API supports programmatic custom audience updates. Using n8n, you build a workflow that takes new contacts from a Google Sheet, hashes their identifiers with SHA-256, and POSTs the payload to Meta automatically on a weekly schedule. No manual CSV uploads required once the workflow is live.
How many contacts do I need to start running Meta ads against a custom audience?
Meta requires a minimum of 100 matched users for a custom audience to be eligible for ad delivery. For meaningful campaign optimization and lookalike audience creation, aim for 1,000+ matched users. At a 40% match rate, this means uploading approximately 2,500 contacts.
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.
View Full Profile