When Meta's Ads Manager shows twenty leads, the affiliate network fifteen and the tracker twelve, you want to find the one correct number. Oddly enough, there are three correct numbers: each system counts by its own logic. The goal of Facebook Ads tracking is not a perfect match but understanding where the gap comes from and seeing the money for every campaign, ad set and ad.
What Facebook Ads tracking consists of
The full setup looks like this:
- URL parameters in the ad pass the campaign, ad set and ad IDs and the placement to the tracker.
- fbclid is the click ID Facebook appends on its own. You need it later to report the conversion to Meta.
- The tracker records the click with all parameters and sends the person to the offer with a click ID for the affiliate network.
- The postback from the network brings the lead, approval or rejection to the tracker.
- Conversions are sent to Meta through the pixel on the page and/or the Conversions API from the server.
- Spend is entered manually, calculated by a cost model or pulled from the ad account.
Below, each link in turn.
Dynamic URL parameters in Facebook
Tags are set in the ad, in the «URL parameters» field. You write a parameter string there without the question mark, and Meta appends it to the website URL. This is more convenient than putting tags straight into the URL: when you duplicate an ad, the URL and the tags will not get mixed up.
Facebook uses double curly braces for dynamic parameters:
| Parameter | What it inserts |
|---|---|
{{campaign.id}} |
Campaign ID |
{{adset.id}} |
Ad set ID |
{{ad.id}} |
Ad ID |
{{campaign.name}} |
Campaign name |
{{adset.name}} |
Ad set name |
{{ad.name}} |
Ad name |
{{placement}} |
Placement |
{{site_source_name}} |
Site: Facebook, Instagram, Messenger, Audience Network |
A sample string for the «URL parameters» field:
utm_source=facebook&utm_medium=paid&utm_campaign={{campaign.id}}&utm_content={{ad.id}}&sub2={{adset.id}}&sub3={{placement}}&sub4={{site_source_name}}
IDs or names
Pass IDs, and names only if you want them. An ID does not change when you rename a campaign, and the tracker uses it to match clicks with spend from the ad account. Names are easier to read in a report, but they can contain spaces, emoji and non-Latin characters that break links and grouping. A full breakdown of tags and macros across platforms is in UTM parameters and ad platform macros.
Tip. Add your own creative or buyer label to a tag, for example
sub5=b07. That value does not come from Meta, but you will see it in the slice report, which is handy when several people work in one ad account.
fbclid: the Facebook click ID
When someone clicks an ad, Facebook appends the fbclid parameter, a unique click ID, to the link. You do not need to add it. What you do need is to preserve it:
- do not strip parameters during redirects between domains;
- do not lose them when moving from the landing page to the offer if
fbclidis needed further down; - store the value in the tracker together with the click.
To send server events, Meta does not use the raw fbclid but an fbc value built from it (a prefix, the click time and the ID itself). If fbclid is lost, the event matches worse, and the algorithm gets less out of every conversion. Click IDs across platforms are covered in fbclid, gclid, ttclid, yclid explained.
The Facebook and Instagram in-app browser
Most mobile traffic opens in the app's built-in browser. That brings some quirks:
- cookies live inside the app and do not carry over to the regular browser;
- if the person comes back to the site later from Safari or Chrome, the browser pixel will not «recognize» them;
- the referrer is often lost in this browser, so relying on it to identify the source is unreliable.
The takeaway: identify the source by tags and fbclid, and send conversions from the server.
Sending conversions to Meta: Pixel and Conversions API
For Facebook's algorithm to optimize delivery toward people who buy, it needs events. Two channels deliver them:
| Meta Pixel | Conversions API | |
|---|---|---|
| Who sends | The visitor's browser | Your server or tracker |
| Ad blockers, cookies, in-app browser | Affect it | Do not affect it |
| Status after the lead (approved, rejected) | No | Yes, if the tracker knows it |
| What you need | Code on the page | Pixel (dataset) ID and an access token |
If you run traffic to an affiliate network's offer, you usually have no access to its «Thank you» page, so there is nowhere to put a pixel. Then the Conversions API is the only working channel: the tracker receives the postback from the network and sends the event to Meta itself.
If you use both channels, the event must carry a shared ID, or one lead will be counted twice. How to choose between the channels is covered in postback vs pixel, and step-by-step Conversions API setup in sending conversions to ad platforms.
Which event to send
- Lead, right at submission. Lots of events and fast learning, but some are junk and duplicates.
- Purchase or a custom event on approval: reflects money more accurately, but arrives after the hold delay.
Many buyers start with leads and switch to approved conversions once there are enough of them. Statuses are covered in lead, hold, approved, rejected.
Attribution: why Facebook and the tracker count differently
Discrepancies are inevitable. The main reasons:
| Reason | What happens |
|---|---|
| View-through attribution | Meta credits a conversion to someone who saw the ad but did not click. The tracker does not see these conversions |
| Attribution window | Meta assigns a conversion to an ad within a window after the click or view. The tracker ties it to a specific click, with no window |
| Conversion date | Systems may attribute the conversion to the impression date, click date or conversion date |
| Modeled conversions | For part of the traffic with privacy restrictions, Meta estimates conversions statistically |
| Time zones | The ad account's time zone and the tracker's may differ |
| Duplicates | Pixel and server without deduplication double the events |
The attribution window is set at the ad set level; the default is usually 7-day click and 1-day view, but options and defaults change, so check the current interface.
Tip. For profit decisions, rely on the tracker and the affiliate network's data. Use Ads Manager to manage delivery and compare ads with each other: within one system, the numbers are comparable.
Spend: how to get accurate cost
Without spend, the tracker shows revenue but not profit. There are three options:
- Manually: enter the daily amount per campaign. Accurate, but takes discipline.
- By a cost model: average CPC or CPM. Quick but approximate: Facebook charges for impressions, and the cost per click fluctuates.
- Imported from the ad account: the tracker pulls spend through the API. The most convenient option, provided the tracker matches campaigns by ID. For that, the campaign ID has to arrive with the click, one more reason to pass
{{campaign.id}}.
How this turns into profit and ROI is covered in how to calculate profit and ROI.
Reports: which slices to watch
Tagging exists for the sake of reports. Useful slices for Facebook:
- campaign → ad set → ad: where the money is and where it leaks;
- placement: Instagram Stories and the Facebook feed often convert differently;
- site (
site_source_name): Facebook, Instagram, Audience Network; - country and device, especially in multi-geo campaigns;
- your own tags: creative, buyer, combo.
Compare ads by EPC and CR, not only ROI: on low volume a single conversion changes ROI dramatically. The metrics are collected in affiliate marketing metrics.
Facebook Ads tracking in ArtisanClo
In ArtisanClo, a platform is described once as a traffic source, from the Facebook Ads template. The source defines the parameters (campaign ID, creative ID, platform click ID, placement and an unlimited number of SubID tags) and the cost per click model. In a flow with a tracker, the chosen source lays these parameters out as campaign tags, from which the ad link is built.
Next:
- Conversions from the affiliate network arrive by postback in «Receiving conversions»: about 300 ready-made network templates, with statuses mapped automatically.
- Sending to Meta: on higher plans, conversions are sent directly to your ad account using your keys: the pixel ID and the token.
- Spend from the ad account: on the Business plan, spend for the last 3 days is pulled every morning; a campaign is matched to a flow by the campaign ID in the clicks.
- If you need the exact amount, daily spend can be entered manually in «Reports», and it is spread over that day's clicks.
- Reports: «Money by slice» (flow, source, day, country, offer, device, sub1–sub10 tags) and a report builder with multi-level grouping.
The Facebook and Instagram in-app browsers are recognized, and the fbclid click ID is recorded in the click card. To count traffic without filtering, a flow has «Tracker» mode, which works when connected with the PHP file. Sending conversions to the ad account works only for flows with a tracker. More about the platform on the Facebook Ads page, plan terms on the pricing page.
Step-by-step setup before launch
A short checklist that saves hours of investigation after launch:
- Create a Facebook source in the tracker and set the cost per click model.
- Build the parameter string with
{{campaign.id}},{{adset.id}},{{ad.id}},{{placement}}and your own tags. - Paste it into the «URL parameters» field of each ad, not into the website URL.
- Set up the postback in the affiliate network's dashboard and make sure the tracker's click ID goes into the offer link.
- Connect sending to Meta: the pixel ID and token for the Conversions API. Choose the event the campaign will optimize for.
- Make a test click on the published ad from a phone, in the Facebook or Instagram app. The tracker should show the campaign, ad set and ad IDs and
fbclid. - Send a test conversion and check that it attached to the click in the tracker and showed up in the test events section of Events Manager.
- Check spend: the next day it should land on the same campaign as the clicks.
Tagging for a team
When several buyers work in one ad account, agree on a tag scheme in advance: which sub holds the buyer, which the creative, which the combo. Without that, a month later the report will have five spellings of the same creative. How to organize reporting is covered in affiliate marketing as a team.
Common Facebook tracking mistakes
- Tags in the URL instead of «URL parameters»: when ads are duplicated, one campaign's tags end up in another.
- Spaces and non-Latin characters in names passed through
{{campaign.name}}, breaking grouping. - fbclid lost after a redirect: the Conversions API receives events with no link to a click.
- Pixel and server without deduplication: double conversions in Ads Manager and a mistrained algorithm.
- Comparing Ads Manager against the tracker without accounting for the attribution window: an endless hunt for a bug that does not exist.
- No campaign ID in the click: the spend import cannot match the campaign to the flow.
Bottom line
Facebook Ads tracking runs from the link to the money: campaign, ad set and ad IDs in «URL parameters», a preserved fbclid, a postback from the network, server-side events sent to Meta and spend for every campaign. Ads Manager and the tracker will disagree, and that is fine as long as you know why. Rely on the tracker and the network for profit decisions, and on Ads Manager for optimizing delivery.



