Facebook Ads (Meta)
Upload Custom Audiences to Meta Ads for targeted advertising on Facebook and Instagram. SignalSmith syncs your warehouse segments directly to Facebook Custom Audiences, keeping your ad targeting in sync with your customer data.
Prerequisites
- A Meta Business Manager account
- A Facebook Ad Account with Custom Audience permissions
- Your Ad Account ID (numeric, without the
act_prefix) - For system user tokens: a system user created in Business Manager with the ad account assigned
- For OAuth: a Meta app with
ads_managementandads_readpermissions
Permissions
Your Meta app or system user must have the following permissions:
| Permission | Purpose |
|---|---|
ads_management | Create, update, and delete Custom Audiences |
ads_read | Read ad account and audience metadata |
The user or system user must have Advertiser or Admin role on the target Ad Account. Assign roles in Business Manager > Business Settings > Ad Accounts > People/Partners.
Authentication
SignalSmith supports two authentication methods for Facebook Ads. System user tokens are recommended for production because they can be set to never expire and are not tied to a personal Facebook account.
OAuth 2.0
- Click Connect with OAuth in SignalSmith
- Sign in with your Facebook Business account
- Authorize the requested permissions (
ads_management,ads_read)
OAuth tokens are valid for 60 days. SignalSmith refreshes them automatically, but if the token is not used for 60 days, you will need to re-authenticate.
System User Token (Recommended)
System user tokens are long-lived access tokens created in Meta Business Manager. They are not tied to a personal Facebook account, making them ideal for production integrations.
- Go to Meta Business Manager and click Business Settings (gear icon)
- In the left sidebar, navigate to Users > System Users
- Click Add to create a new system user, or select an existing one
- Set the system user role to Admin
- Click Add Assets, select Ad Accounts, choose your target ad account, and grant Full Control
- If you have an existing Meta app, click Add Assets, select Apps, and assign the app to the system user
- Click Generate New Token
- Select the app you assigned in step 6
- Under token expiration, select Never for production use (or set a specific expiry)
- Check the
ads_managementpermission (andads_readif listed) - Click Generate Token
- Copy the token immediately — it will not be shown again
- In SignalSmith, select the System User Token tab when creating the destination
- Paste the token into the Access Token field
Note: If you do not have a Meta app yet, create one at developers.facebook.com > My Apps > Create App. Select Other as the use case and Business as the app type. Then return to Business Manager to assign it to your system user.
Configuration
| Field | Type | Required | Description |
|---|---|---|---|
| Ad Account ID | Text | Yes | Your Facebook Ad Account ID (numeric only, without act_ prefix). Find it in Business Manager under Ad Accounts. Example: 1234567890 |
| API Version | Select | Yes | Facebook Graph API version. Options: v19.0, v18.0, v17.0. Default: v19.0 |
Target Settings
| Field | Type | Required | Description |
|---|---|---|---|
| Audience Name | Text | Yes | Name for the Custom Audience. If no Audience ID is provided, a new audience is created with this name. |
| Audience ID | Text | No | Existing Custom Audience ID. Leave blank to create a new audience. |
Supported Operations
Sync Modes
| Mode | Supported |
|---|---|
| Upsert | Yes |
| Insert | — |
| Update | — |
| Mirror | Yes |
Audience Sync Modes
| Mode | Supported |
|---|---|
| Add | Yes |
| Remove | Yes |
| Mirror | Yes |
| Upsert | Yes |
Features
- Field Mapping: Yes
- Schema Introspection: No
- Auto-Create Audiences: Yes — provide an Audience Name without an Audience ID
Required Mapping Fields
| Field | Alternatives | Description |
|---|---|---|
| hashed_email | Primary match key for Custom Audiences. SignalSmith auto-hashes if raw email is provided. |
Default Destination Fields
Raw Identifiers (auto-hashed by SignalSmith)
email, phone, fn (First Name), ln (Last Name), ct (City), st (State), country, zip (Zip Code), madid (Mobile Advertiser ID), doby (Date of Birth Year), gen (Gender)
Pre-Hashed Identifiers (passed through as-is)
hashed_email, hashed_phone, hashed_fn, hashed_ln, hashed_ct, hashed_st, hashed_country, hashed_zip
Tip: If your data is already hashed with SHA256, use the
hashed_*fields to avoid double-hashing. Otherwise, use the raw fields and SignalSmith handles hashing automatically.
How It Works
SignalSmith reads rows from your model query, applies field mapping, and extracts user identifiers (email, phone, external ID). Raw PII fields are normalized and hashed with SHA256 per Meta’s requirements — emails are lowercased and trimmed, phone numbers are normalized to E.164 format.
Users are uploaded to the Custom Audience in batches of up to 10,000 per API call. For Mirror mode, SignalSmith first clears the existing audience, then uploads the complete user set.
Each batch result is tracked individually — if some records fail, the sync continues with remaining batches and reports partial success.
Best Practices
Maximize match rates
Include as many identifier fields as possible. Meta matches users by cross-referencing multiple identifiers. An email alone yields ~30-50% match rates, but adding phone, name, and location can push rates above 70%.
Use consistent identifiers
Use the same email addresses and phone numbers that users registered with on Facebook. Work email addresses typically have very low match rates.
Audience sizing
Meta requires a minimum of approximately 1,000 matched users before an audience can be used for targeting. Audiences below this threshold appear with a size of “less than 1,000” and cannot be targeted.
Scheduling
For audience syncs, daily or hourly schedules work well. Meta processes audience uploads asynchronously — it may take up to 72 hours for newly uploaded audiences to fully populate.
Pre-hashed data
If your warehouse already stores SHA256-hashed PII (e.g., from an identity graph), use the hashed_* fields. This avoids unnecessary re-hashing and ensures the hashes match Meta’s expectations exactly.
Troubleshooting
Ad Account ID not found
Ensure you are using the numeric ID without the act_ prefix. Find it in Business Manager under Business Settings > Accounts > Ad Accounts. The ID is the number shown below the account name.
Insufficient permissions
The authenticated user or system user must have Advertiser or Admin role on the Ad Account with Full Control access. Check roles in Business Manager > Business Settings > Ad Accounts > People (for users) or System Users (for system users). Also verify the ads_management permission is granted on the token.
Token expired
OAuth tokens expire after 60 days of inactivity. If your sync fails with an authentication error, re-authenticate via OAuth or switch to a System User Token (recommended) which can be set to never expire.
Low audience match rate
Meta hashes user data before matching against its user base. To improve match rates:
- Ensure emails are lowercase with no extra whitespace
- Include country codes on phone numbers (e.g.,
+1for US) - Map first name, last name, city, state, and zip code in addition to email
- Use the
madid(Mobile Advertiser ID) field if available from your mobile data
Audience size shows “less than 1,000”
Meta requires a minimum of approximately 1,000 matched users for privacy reasons. If your audience is smaller than this, it cannot be used for ad targeting. Expand your source audience or include more identifier fields to increase the match rate.
Rate limiting
Meta’s Marketing API enforces rate limits per ad account. SignalSmith uses 10,000-user batches to minimize API calls. If you encounter rate limiting, reduce sync frequency or contact Meta to request a higher rate limit tier for your ad account.
Custom Audience creation failed
Verify that your ad account has not reached the maximum number of Custom Audiences (typically 500 per ad account). Delete unused audiences in Ads Manager > Audiences to free up capacity.