Overview
Connecting Meta Ads enables two features:- Conversions API (CAPI) — NSM sends attributed
Purchaseevents directly to Meta’s server-side API, bypassing browser-side pixel limitations - Ad spend sync — Campaign, ad set, and ad-level spend data is imported every hour
Meta’s Conversions API is the recommended way to send conversion data since iOS 14.5. Server-side events are not affected by App Tracking Transparency (ATT), Safari ITP, or ad blockers — meaning Meta receives more complete conversion data for better optimization.
Prerequisites
Before connecting, make sure you have:- A Meta Business Manager account
- A Meta Ads account with active campaigns
- A Meta Pixel created in Events Manager
- Admin access to the Business Manager
Setup Guide
Navigate to Integrations
In your NSM dashboard, go to Dashboard > Integrations > Meta Ads and click Connect Facebook.
Authenticate with Facebook
You will be redirected to Facebook to log in. Grant the following permissions:
| Permission | Why It’s Needed |
|---|---|
ads_read | Read campaign and ad set spend data |
ads_management | Send conversion events via CAPI |
business_management | Access Business Manager ad accounts |
NSM requests the minimum permissions needed. We never create, modify, or delete your ads or campaigns.
Select Ad Account
Choose the Ad Account that contains the campaigns you want to track. If you manage multiple accounts via Business Manager, select the specific account for this store.
Select Pixel
Choose the Meta Pixel that NSM should send conversion events to. This should be the same pixel installed on your store (if you have a browser-side pixel) for proper deduplication.
What Data is Sent to Meta
NSM sends the following with eachPurchase event via CAPI:
| Field | Source | Hashed? | Purpose |
|---|---|---|---|
event_name | ”Purchase” | No | Event type |
event_time | Order timestamp | No | When the purchase occurred |
event_id | NSM event ID | No | Deduplication with browser pixel |
value | Shopify order total | No | Conversion value for ROAS optimization |
currency | Store currency | No | Currency code (e.g., USD, EUR) |
em (email) | Customer email | Yes (SHA-256) | Customer matching |
ph (phone) | Customer phone | Yes (SHA-256) | Customer matching |
fbclid | URL parameter from ad click | No | Click-level attribution |
external_id | NSM visitor ID | No | Cross-session matching |
client_ip_address | Visitor IP | No | Geo matching (required by Meta) |
client_user_agent | Browser UA | No | Device matching |
Improving Event Match Quality (EMQ)
Meta’s Event Match Quality score (visible in Events Manager) measures how well your server-side events can be matched to Facebook users. A higher EMQ means better optimization.How to maximize your EMQ score
How to maximize your EMQ score
- Collect customer emails at checkout — This is the single most impactful matching parameter
- Collect phone numbers — Enable phone number collection at checkout in Shopify
- Ensure fbclid is captured — NSM automatically captures the
fbclidparameter from ad click URLs - Use consistent data — Make sure your Shopify checkout collects the same email customers use on Facebook
What is a good EMQ score?
What is a good EMQ score?
| EMQ Score | Assessment |
|---|---|
| 8.0+ | Excellent — maximum optimization benefit |
| 6.0-8.0 | Good — most events are matched |
| 4.0-6.0 | Fair — consider improving data collection |
| Below 4.0 | Needs attention — check data flow |
Deduplication with Browser Pixel
If you run both a browser-side Meta Pixel and NSM’s CAPI integration, Meta handles deduplication automatically:- NSM includes an
event_idwith each CAPI event - If Meta receives both a browser-side and server-side event with the same
event_id, it counts it only once - This means you get the best of both worlds: browser-side events for real-time tracking and server-side events for iOS 14+ recovery
Troubleshooting
EMQ score is low
EMQ score is low
Low EMQ typically means customer matching data is incomplete. Check:
- Are customer emails being collected at checkout? (Required)
- Are phone numbers being collected? (Recommended)
- Is the
fbclidparameter being captured from ad click URLs? - Verify in Dashboard > Settings > Webhooks that order webhooks are being received with customer data
Events not appearing in Events Manager
Events not appearing in Events Manager
- Go to Events Manager > Test Events and check for recent events
- Verify the integration status in Dashboard > Integrations shows “Connected”
- Check that you selected the correct Pixel ID during setup
- Wait at least 1 hour — CAPI events can take time to process
- If still missing, try disconnecting and reconnecting the integration
Spend data not syncing
Spend data not syncing
- Check that your Facebook account still has access to the ad account
- Verify the OAuth token has not expired (look for “Reconnect” button)
- If you recently changed Business Manager permissions, reconnect the integration
- Spend sync requires active campaigns — accounts with zero spend will show $0
Duplicate conversions in Ads Manager
Duplicate conversions in Ads Manager
If you see roughly double the expected conversions:
- Verify that
event_iddeduplication is working — check Events Manager > Test Events for matching event IDs - Ensure you are not sending CAPI events from another tool simultaneously
- Contact support if deduplication appears to be failing