This is some text inside of a div block.
Get Free Migration Kit
This is some text inside of a div block.

Test text

Salesforce Marketing Cloud Advertising Studio is Retiring August 2026 — Switch to Cezium Ads. Same SFMC integration. Better features.

SFMC Tips
8 min read

Sync SFMC Audiences to Meta Custom Audiences — Get the Match Rates Right

Published on
June 11, 2026
Categories and Tags
SFMC Tips
SFMC
Audience Matching
Advertising Studio
Journey Builder
Cezium Ads Team
By subscribing you agree to our Privacy Policy.
Thank you! Your submission has been received!
Oops! Something went wrong while submitting the form.

Most SFMC teams sending audiences to Meta are leaving match rate on the table. They export email addresses, hash them, upload a CSV, and get a 40–55% match. That number is not wrong — it is what email-only typically produces on Meta. But if your Data Extension already holds phone numbers, zip codes, first and last names, or dates of birth, you have the ingredients for substantially better coverage. The problem is getting all of those fields into a properly formatted, correctly hashed upload without building a brittle ETL process around it.

This post is about doing that correctly — both the manual method (with its real failure modes) and the native approach from inside SFMC. If you are also navigating the Advertising Studio shutdown, the Advertising Studio end-of-life post and the alternatives comparison are useful background.

Meta's Customer File API: what it accepts

Meta's customer file Custom Audiences support a notably wide set of match keys. Beyond email and phone, you can provide:

  • First name and last name
  • City, state/province, ZIP/postal code, country
  • Date of birth
  • Gender
  • Mobile advertiser ID (IDFA or GAID)

Meta requires all personally identifiable fields to be SHA-256 hashed before upload. That requirement is non-negotiable — and it is the source of most of the operational risk in the manual method. Phone numbers need to be in E.164 format before hashing; names should be lowercase with special characters stripped; email addresses lowercase and trimmed. Get the normalization wrong and Meta's matching algorithm sees a hash that corresponds to nothing in their graph.

The payoff for getting it right is real. More keys per record gives Meta's identity graph more signals to confirm a match. An email-only upload that matches at 45% may reach 60–70% or higher with the same contact list when you add phone, name, and ZIP. The exact lift depends on your audience's profile and Meta's coverage — but in my experience, teams that have never sent keys beyond email are almost always leaving meaningful reach behind.

What you can build once the audience is matched

Custom Audiences from customer files are the foundation for several campaign types on Meta:

Retargeting and suppression. Suppress recent purchasers from acquisition campaigns. Retarget cart abandoners with a specific creative sequence. Exclude unsubscribes from any paid touchpoint. These are all audience-list operations at their core.

Lookalike Audiences. Meta can generate a Lookalike Audience from any Custom Audience seed. Quality scales with seed coherence — a seed of your top-revenue customers produces a better lookalike than a seed of your full email list. If your Data Extension carries revenue or order-value data, Meta supports value-based lookalike seeds, which weight toward the characteristics of your highest-LTV customers.

Advantage+ campaigns. Meta's Advantage+ Shopping and Advantage+ Audience products can use Custom Audiences as signals or constraints. Custom Audiences also feed into Advantage+ catalog ads for dynamic retargeting.

The manual method — what it actually takes and where it fails

To be fair to teams doing this today: a manual upload is not inherently wrong for a single, static campaign. The process is straightforward enough in outline:

  1. Export the relevant Data Extension from SFMC as a CSV.
  2. Normalize each field — lowercase email, E.164 phone, lowercase/stripped name fields, consistent date-of-birth format.
  3. SHA-256 hash each field individually. Fields are hashed separately; you do not hash a concatenated row.
  4. Format the file according to Meta's column headers. Check Meta's current documentation here — the exact column names and file structure requirements are updated periodically.
  5. Upload via Ads Manager or Meta's Audiences API.
  6. Repeat whenever your segment changes.

The operational picture falls apart at scale or frequency.

Match-key coverage degrades silently. If your normalization script has a bug — a phone number coming through without the country code, a date of birth formatted inconsistently — those records simply do not match. Meta does not tell you which records failed or why. You see a match rate and have no signal that it could be higher.

Audiences go stale between uploads. A Data Extension that updates daily is not something you can reasonably re-export and re-upload manually at that cadence. In practice, uploads happen weekly or monthly. Your suppression list contains people who bought three weeks ago. Your prospecting audience contains people who opted out last Tuesday.

Opt-outs and deletions are not propagated. This one has real compliance implications. When a contact opts out of ad targeting or requests deletion, the obligation to honor that request extends to your downstream ad platforms. A static CSV sitting in Meta's system does not know about events in your SFMC instance. Depending on your privacy policy and applicable regulations, that gap is a liability.

Data handling happens outside your governance boundary. Before the file reaches Meta, it passes through someone's local machine. Even if it is hashed by the time it uploads, the normalization step often involves an intermediate file with clean PII. That file needs to be handled, stored, and eventually deleted under your data governance policies. In practice, it frequently is not.

For a deeper look at what can go wrong at the hashing step specifically, see the customer match hashing explainer.

The native method: Cezium Ads inside SFMC

Cezium Ads is an AppExchange package — one install, one-click, no infrastructure to run. It has passed Salesforce's AppExchange security review. Go-live is typically about a week.

The key design decision that matters for Meta in particular: hashing happens inside your Marketing Cloud instance, before anything leaves your environment. Here is the flow.

Connecting Meta. A Meta Ads account admin authorizes the connection via OAuth 2.0. No credentials stored, no shared logins. IT can revoke from either side. Meta's API then becomes an available destination for audience pushes.

Creating an audience. You select a Data Extension in SFMC and map your identifier columns to Meta's match key schema — email, phone, name fields, ZIP, date of birth, whatever your DE holds. This is where the multi-key advantage becomes operationally accessible: you can map all of them in one configuration step, without building a multi-step normalization pipeline.

Hashing in-instance. Cezium Ads generates an automation inside your own MC instance. That automation normalizes and SHA-256 hashes the identifier fields before any data is sent. Raw PII does not cross your instance boundary. This is not a policy claim — it is how the data flow is architected.

Continuous sync, no manual steps. The automation runs on an ongoing basis. Contacts added to the Data Extension appear in the Meta Custom Audience. Contacts removed — because they opted out, were deleted, or fell out of the segment's filter criteria — are removed from the audience on the next sync. There are no CSVs, no re-uploads, and no stale suppression lists.

Journey Builder activity. There is a native Journey Builder activity for add/remove operations. You can wire audience membership changes directly into journey logic: a contact who completes a purchase exits the prospecting audience as part of the same journey that triggers the confirmation email.

Audit trail. Every sync, every audience modification, every removal is logged. When your privacy team asks what was sent to Meta and when, you have an answer.

Meta-specific considerations worth planning for

Multiple key normalization is exacting. Meta's requirements for how each field type should be normalized before hashing are specific — particularly for phone (E.164), date of birth (YYYYMMDD), and name fields. If you are building a manual process and handling more than just email, test your normalization on a small batch before running your full list. The in-instance automation handles this; manual scripts need to be validated carefully.

Custom Audience terms. Meta requires that advertisers using customer file Custom Audiences represent that they have the right to use that data for advertising purposes. That is a business and legal determination, not a technical one — but it is worth having documented before your first upload.

Audience size and delivery. Meta has minimum audience size requirements before an audience becomes usable in an ad set. Very small suppression lists (fewer than a hundred records, for instance) may not be immediately actionable. Plan for this in your segmentation strategy.

Value-based lookalike setup. If you want to seed a value-based lookalike, your Data Extension needs a field that Meta can use as the value signal. Make sure that column is mapped correctly in your audience configuration. The lift from value-based seeding can be substantial for acquisition campaigns targeting high-LTV prospects.

For practical guidance on improving your match rates beyond the defaults, see this post on SFMC ad match rate optimization. For context on the broader migration away from Advertising Studio, the migration checklist covers the transition end to end.

FAQ

Does Meta require data to be hashed before upload?
Yes. Meta's Custom Audiences from customer lists require SHA-256 hashing of all PII fields before they are transmitted. This applies whether you are uploading via Ads Manager, the Audiences API, or a third-party integration. With Cezium Ads, the hashing automation runs inside your MC instance so hashed data is what leaves your environment.

How many match keys should I send to Meta?
Send as many as your Data Extension reliably holds. Email alone typically matches at 40–55%. Adding phone, name, ZIP, and date of birth gives Meta's identity graph more signals per record and generally improves match rates meaningfully. The exact lift depends on your contact profile and Meta's coverage of your audience — but there is rarely a reason to send fewer keys than you have.

What happens to contacts who opt out after an audience is synced?
With continuous sync via Cezium Ads, a contact removed from the source Data Extension — whether due to an opt-out, a deletion request, or segment logic — is removed from the Meta Custom Audience on the next sync cycle. With a manual CSV upload, nothing happens until someone re-uploads the list, which may be weeks later.

Does this work for Instagram ads as well as Facebook?
Yes. Meta Custom Audiences are shared across Meta's ad inventory, which includes Instagram, Facebook, Messenger, and the Audience Network. An audience synced from SFMC can be used for targeting or suppression across all of these placements from within Meta Ads Manager.

Ready to transform your CRM audience activation?

Join marketers who've simplified their workflow with Cezium Ads