# How to Sync Revenue and Offline Conversions in Meta Ads

Set up Meta Conversions API push from SourceLoop. Find your Pixel ID, generate a System User Access Token, map SourceLoop events to Meta event names, and test the flow.

Source: https://sourceloop.ai/help/configure-meta-conversions-api/
Updated: 2026-05-28

---

After you've [connected Meta Ads to SourceLoop](/help/connect-meta-ads/), the next step is wiring up the Conversions API push. You'll paste a Pixel ID and access token, then map which SourceLoop events get sent to which Meta event_name with what value.

This is the part that determines whether Meta's bidding optimises on real revenue or just whatever the browser pixel could see.

## Before you start

You'll need:

- [Meta Ads connected](/help/connect-meta-ads/) (the card on the Ad Platforms tab shows the ad account name)
- Access to **Meta Events Manager** for the Pixel you want to report to
- Access to **Meta Business Settings** to generate a System User Access Token (recommended)
- A list of SourceLoop conversions you want to push and what Meta event_name each should map to (`Lead`, `Schedule`, `Purchase`, `Subscribe`, custom)

## Step 1: Find your Pixel ID

1. Sign in to [Meta Business Suite](https://business.facebook.com/) with a Business Admin user.
2. Open **Events Manager** (left sidebar).
3. Pick the **Pixel** (or **Dataset**) attached to the ad account you connected to SourceLoop.
4. On the Pixel's **Overview** tab, copy the **Pixel ID**, it's a 15-16 digit number shown at the top of the page.

Hold onto this; you'll paste it into SourceLoop in step 3.

## Step 2: Generate a System User Access Token

User tokens expire every 60 days. System User tokens don't expire. For anything production-grade, use a System User token.

1. In Meta Business Suite, open **Business Settings** (gear icon, top-right).
2. Go to **Users -> System Users**.
3. Either pick an existing System User or click **Add** to create a new one. Name it something descriptive (e.g., "SourceLoop CAPI").
4. With the System User selected, click **Add Assets** and assign:
   - The **ad account** you connected to SourceLoop (with Manage permission)
   - The **Pixel** you'll be reporting to (with Manage permission)
5. Click **Generate New Token**.
6. Select the SourceLoop app from the dropdown (or your Business' default app for Conversions API).
7. Check **ads_management**. (You can leave other scopes unchecked.)
8. Set token expiry to **Never** if available, otherwise the longest option.
9. Click **Generate token** and copy the token shown. **Save it somewhere safe** — Meta only shows it once.

## Step 3: Paste both values into SourceLoop

1. Sign in to [SourceLoop](https://app.sourceloop.ai/).
2. Open **Setup -> Ad Platforms -> Meta Ads**.
3. In the **CAPI configuration** section of the drawer:
   - Paste the **Pixel ID** from Step 1
   - Paste the **System User Access Token** from Step 2
   - (Optional) Paste a **Test event code** for end-to-end testing (see FAQ above)
4. Click **Save**.

SourceLoop validates the token against Meta's API. If it's valid, the connection status flips to **Active**.

## Step 4: Add your conversion sync mappings

Now wire up which SourceLoop events get pushed to which Meta event_name.

1. In the Meta drawer, scroll to **Conversion sync**.
2. Click **Add conversion mapping**.
3. Pick the **Trigger event type**:
   - **Conversion created** — fires for every new lead conversion (form, meeting, chat with email captured, initial payment)
   - **Expected revenue updated** — fires when the lead's expected revenue changes
   - **Realized revenue updated** — fires when a payment integration confirms revenue
4. (Optional) Set a **Trigger event name filter** to scope this mapping to a specific source (e.g., `stripe_charge.succeeded`).
5. Pick an **Attribution model**: **Last touch** or **First touch**.
6. Pick the **Meta event_name** the conversion should map to:
   - **Lead** — most common for forms / meetings / chats
   - **Schedule** — for meeting bookings
   - **Subscribe** — for new SaaS subscriptions
   - **Purchase** — for one-off product sales
   - **CompleteRegistration**, **AddPaymentInfo**, **InitiateCheckout** — funnel events
   - **Custom event name** — type any string (Meta supports custom events too)
7. Toggle **Include value** if you want to send a revenue figure. Pick the value source (`quote_value`, `sales_value`, or fixed amount) and currency.
8. Set the **dedup window** in minutes (default 1440). Meta's own dedup window is 7 days; SourceLoop respects whichever is shorter.
9. Click **Save**.

SourceLoop starts pushing matching conversions on the next 2-minute flush cycle. Allow a few minutes for the first event to appear in Meta Events Manager.

> **Always start with a test_event_code**
> Enable a test code in Events Manager's Test events tab and paste it in SourceLoop's CAPI configuration. Fire a real conversion (incognito, with utm params, complete checkout / form), and watch it appear in Events Manager's Test events view within seconds. Confirm Match Quality is green, then remove the test code so events flow to production.

## What gets sent in each event

For every matching SourceLoop conversion, the push to Meta includes:

- **event_name** from your mapping (e.g., `Lead`, `Purchase`)
- **event_time** in Unix seconds
- **event_id** — a stable identifier per SourceLoop conversion, used by Meta to dedup against browser-side pixel events
- **action_source** = `website`
- **event_source_url** — the landing page where the conversion happened
- **user_data** — the matchable signals SourceLoop has captured:
  - `fbc` (click cookie) when present
  - `fbp` (browser cookie) when present
  - hashed email (SHA256)
  - hashed phone (SHA256)
  - hashed first / last name when available
  - client IP and user agent
- **custom_data** — `value` and `currency` when value is included; plus any custom properties you've configured

The richer the `user_data`, the better Meta's match rate. Click ID alone gives ~95% match; email + phone alone gives ~80%; both together approaches 100%.

## What's next

- **Troubleshoot pushes that aren't appearing in Events Manager:** [Troubleshoot Meta Ads sync issues](/help/troubleshoot-meta-ads-sync/).
- **Add more conversion mappings** for separate funnels (lead vs purchase vs subscription): repeat the Step 4 flow with each Meta event_name.

## Frequently Asked Questions

### Where do I find my Meta Pixel ID?

In Meta Events Manager (business.facebook.com/events_manager). Pick the Pixel you want to use, look at the Overview tab, the Pixel ID is the 15-16 digit number at the top. You can also click the Settings tab for the same value plus extra details.

### What's a System User Access Token and why is it better than a normal token?

A System User in Meta Business Manager is a non-human service account whose access tokens never expire (unlike user tokens which expire every 60 days). For production Conversions API push, this is the recommended path. You generate one in Business Settings -> Users -> System Users -> [user] -> Generate New Token, scoped to ads_management with access to your Pixel.

### What permissions does the System User need?

At minimum, the `ads_management` permission with access to the Pixel you're reporting to and the ad account that owns it. The System User itself needs to be added to the Pixel's Assigned Users list as either Admin or Standard. Without that assignment, the token can authenticate but cannot write events.

### Can I use a different event_name per conversion source?

Yes. SourceLoop's Conversion sync configuration lets you map different SourceLoop event types (form submission, meeting booked, payment) to different Meta event_name values (Lead, Schedule, Purchase). Add a config row per mapping. You can even send the same SourceLoop event to multiple event names if you want both a Lead and a Purchase fired from the same checkout completion.

### How does dedup work between browser-side Pixel events and CAPI events from SourceLoop?

SourceLoop generates a stable `event_id` per SourceLoop conversion. If your browser-side Pixel also fires with the same `event_id` (most server-side setups handle this), Meta dedupes within a 7-day window. If you don't share event_ids, both events count, that's why most teams either switch to CAPI-only or wire matching event IDs in their browser-side tags.

### What's the test_event_code for and where do I find it?

While testing, you can enable a "Test event code" in Meta Events Manager's Test events tab. Paste the same code in SourceLoop's Meta drawer. CAPI events sent with that code are routed to the Test events view instead of production, so you can verify the integration works without polluting your real campaign data. Remove the code once you're confident the integration is right.

### My business uses Datasets instead of Pixels. Does this still work?

Yes. The "Pixel ID" field in SourceLoop accepts either a Pixel ID or a Dataset ID (Meta uses the same identifier format and the same Conversions API endpoint for both). Paste whichever is set up in your Business.
