How to Sync SFMC Audiences to X Ads Custom Audiences (Without the Export Grind)
Whatever your current stance on X as a channel, the operational argument for using first-party CRM data when you do advertise there is straightforward: platform-native targeting is based on self-reported interests, follow graphs, and inferred behavior. Your CRM data is based on actual purchase history, email engagement, lifecycle stage, and product usage. When those two meet in a custom audience, you are working with signal that X's own targeting cannot replicate.
Custom audiences on X (formerly tailored audiences on Twitter) let you reach known customers, suppress them from irrelevant acquisition campaigns, and build lookalike-equivalent expansions from high-value segments. The question is not whether to use them — it is whether you are building and refreshing them in a way that reflects your data in near real time, or running on stale exports that may be weeks out of date.
This post walks through what X custom audiences actually accept, why the manual export workflow is structurally limited, and how a native SFMC integration changes the operational picture.
What X Custom Audiences Accept
X custom audiences are built by uploading hashed identifiers. The platform accepts several key types, which gives SFMC teams more matching options than destinations that only accept email:
- Hashed email addresses — the most common starting point for CRM-based audiences
- Hashed phone numbers — useful when your SFMC data includes mobile numbers, often increases match rates relative to email alone
- X handles / usernames — if you have X handles in your CRM or preference center, these map directly with no identity inference required
- Mobile advertising IDs (MAIDs) — if your mobile app or data warehouse feeds MAIDs into SFMC, these can be included as an additional key
All identifiers must be SHA-256 hashed before upload. X validates hash format on ingestion; malformed or unhashed data will fail or produce unexpectedly low match rates. Normalization before hashing matters: email addresses should be lowercase with whitespace stripped. Phone numbers need to be in E.164 format (e.g. +15555550123) before hashing. See the guide on audience hashing explained for a practical walkthrough of normalization steps.
Audience types available on X:
- Retargeting audiences: reach known contacts — existing customers, active subscribers, high-LTV segments — across X timelines and search
- Suppression audiences: exclude converters from acquisition campaigns; particularly useful for preventing repeat-purchase offers landing on customers who just bought
- Lookalike (similar) audiences: upload a high-quality seed list and X will expand to users with similar characteristics — typically fed by your best-customer or highest-LTV segment; availability and behavior subject to X's current platform policies
A note on match rates: as with all CRM-based audience platforms, the match rate you see is determined by the intersection between your identifier set and X's account identity graph — not by the upload tool. Email-only lists typically return match rates in the 40–55% range. Adding phone numbers and X handles where available will improve this. The richer your key set in the uploaded audience, the better. See tips for improving ad match rates if this is an area you want to optimize.
The Manual Export Workflow: Honest Assessment
The manual process for getting a Salesforce Marketing Cloud Data Extension into X Ads custom audiences has these steps:
- Build a query or filter in SFMC to define your segment
- Export the resulting Data Extension to CSV
- Normalize identifier fields (lowercase email, strip whitespace, format phone to E.164)
- SHA-256 hash each field
- Upload the file through the X Ads Manager UI
- Repeat on whatever cadence you've decided on — weekly, biweekly, monthly
For a one-time campaign or a relatively static segment (a suppression list for a product line you're not actively promoting), this is workable. For anything that needs to reflect your live data, it is not.
Where it breaks down in practice:
The most common failure mode is not a technical one — it is timing. Your export captured the state of your Data Extension at the moment you ran it. A customer who made a second purchase yesterday is still in your "prospecting" audience. A contact who unsubscribed last week is still in your retargeting list. The gap between the data and reality grows with every day you don't re-export.
The second failure mode is opt-out propagation. If a contact requests deletion or opts out of marketing, that signal needs to flow through to every active audience they're in. With manual uploads, this does not happen automatically. You have to notice, re-export the affected audiences, and re-upload. Under most privacy frameworks, this is not a "nice to have" — it is an obligation. The manual workflow puts the operational burden for meeting that obligation entirely on whoever owns the export process.
Third: there is no record. When an audit or privacy inquiry asks what was in your X Ads audience on a specific date, a manual upload workflow gives you nothing except a collection of timestamped CSV files — if you kept them. That is not an audit trail.
Finally, none of this integrates with Journey Builder. You cannot trigger an X Ads audience add or remove as a journey step. Real-time behavioral actions in your marketing program stay disconnected from your paid media audiences.
Native SFMC-to-X Sync with Cezium Ads
Cezium Ads is an audience activation layer that runs inside SFMC, installed from the Salesforce AppExchange (passed AppExchange security review). X is one of seven live destinations alongside Meta, Google, TikTok, Snapchat, Pinterest, and LINE.
Here is the end-to-end flow once connected:
Account connection: A user with admin rights on your X Ads account authenticates via OAuth 2.0. This is a one-time step that puts the connection under IT-controlled access management — the same pattern as any enterprise OAuth integration. Cezium Ads holds no standing credentials.
Audience setup: You point an audience at a Data Extension in your SFMC instance. The platform generates an automation inside your own Marketing Cloud environment. Cezium does not hold a copy of your data or process it on external infrastructure.
Hashing: SHA-256 hashing of email addresses, phone numbers, and any other identifier fields occurs inside your Marketing Cloud instance, before anything is transmitted. This is not a claim that needs to be taken on faith — it is a structural property of where the automation runs.
Continuous sync: Once live, the audience stays current automatically. There are no scheduled export jobs to maintain, no CSV files to manage, and no cron tabs to break. When a contact drops out of the qualifying segment, they are removed from the X audience on the next sync. When a new contact qualifies, they are added.
Opt-outs and deletions: These propagate automatically. If a contact opts out or triggers a deletion request in your SFMC instance, that propagation happens on the next sync cycle without any manual intervention. The audience reflects what your data actually says.
Journey Builder activity: A native Journey Builder activity lets you add or remove contacts from X Ads audiences as an inline journey step. You can build a sequence where a contact who completes a purchase goal is suppressed from your X acquisition campaigns and added to a loyalty audience in the same journey canvas. Paid and owned-channel logic in one place.
Installation: One AppExchange package, one-click install, no infrastructure provisioning. Typical go-live is about a week.
Pricing is per active audience, starting at $500/month for five audiences ($100/audience/month) with volume discounts at scale. Annual contracts. For teams also evaluating the Advertising Studio transition, this is worth knowing: Salesforce is discontinuing Ad Studio effective August 15, 2026, and Cezium Ads pricing runs at least 40% below previous Salesforce fees for teams replacing it. See Ad Studio alternatives if you are evaluating options.
X-Specific Gotchas Worth Knowing
X handles are a differentiator you should use. If you run a preference center or collect social handles anywhere in your data pipeline, X handles in a custom audience skip the identity inference step entirely. The match is exact. Most teams upload only email and leave this on the table.
Phone numbers require format consistency before hashing. If your SFMC Data Extension stores phone numbers in mixed formats (some with country codes, some without, some with dashes), your pre-hash normalization step is where quality is either built or lost. E.164 is the required format; anything else either fails on upload or hashes to a value that will never match an X account identity.
Audience minimums apply. X requires a minimum audience size before a custom audience can be activated for targeting. Check X's current documentation for the specific threshold, as it can change. Build your initial audience with this in mind — very small segments may not activate.
Suppression audiences save budget and protect experience. The suppression use case is underutilized relative to retargeting. If you run acquisition campaigns on X, a suppression audience of current customers prevents wasted spend and protects the experience for people who are already bought in. This is operationally trivial with a continuous sync; with manual uploads, it requires discipline to maintain.
Account structure: custom audiences in X Ads are scoped to the ad account level. If you run multiple X Ads accounts, you will need to establish separate connections for each. Plan for this when scoping your setup.
FAQ
Can I use X custom audiences for B2B targeting, or is this a B2C-only play?
Custom audiences work for any CRM data you hold on people who have X accounts. B2B applicability depends on your audience and their X presence — it tends to vary more by industry and role than consumer advertising does. If X is part of your B2B mix, custom audiences from your CRM contacts are still a better signal than platform-native interest targeting. The practical question is whether your B2B contact list has meaningful overlap with X's active user base.
What happens if a contact in my X custom audience later opts out in SFMC?
With a continuous sync like Cezium Ads, the opt-out propagates automatically on the next sync cycle — no manual action required. With manual uploads, you need to re-export the affected audience and re-upload to remove them. Given that opt-out propagation is a compliance requirement under most frameworks, the manual process places a high operational burden on your team to stay current.
Does the Journey Builder integration work for both adding and removing from audiences?
Yes. The Cezium Ads Journey Builder activity supports both add and remove operations. A contact can be added to a retargeting audience when they enter a re-engagement journey, and removed from an acquisition suppression list when they convert — all within the same journey canvas, without any external step.
My match rates from X custom audiences seem low. What can I do?
Match rates are determined by X's identity graph and the keys you provide — not the upload method. The most direct levers are: add phone numbers if you have them (in E.164 format, normalized before hashing), add X handles if you collect them, and improve data quality in your underlying SFMC Data Extensions (remove invalid email formats, deduplicate records). A detailed breakdown of field-level optimization is in the guide on improving ad match rates.
Also relevant: Advertising Studio end-of-life August 2026 and the migration checklist if you are evaluating a platform change alongside your audience strategy.
Ready to transform your CRM audience activation?
Join marketers who've simplified their workflow with Cezium Ads