Cost reconciliation

One cost per install, not three different counts.

Meta says 900, TikTok says 1,100, your dashboard says 1,400. Import each network's spend and see cost per install for every campaign, against the installs LinkTrail counted.

Who runs it
Paid ads, marketers
Time to set up
A CSV per network
Plan
Growth
1The link you make

Tag every paid link the same way.

Tag each paid link with the channel and campaign, so LinkTrail knows where a click came from on its own. Then import each network's cost export; LinkTrail reads the CSV rather than connecting to your ad accounts.

  • The ad network URL from the share panel carries the campaign ID.
  • Re-import overlapping days; figures update rather than double.
2The screen they land on

Each network's ad still lands in the app.

Every paid link is a smart link: the app opens on the screen the ad promised, after install too. Reconciliation doesn't cost you the landing.

  • Works on iPhone and Android.
3The number that proves it worked

Cost per install, per campaign.

Spend from your import, installs and event revenue from LinkTrail, joined per network campaign. Better still, follow cost per activated user, using the event that matters to you.

  • Spend, installs, cost per install and return on ad spend per campaign.
  • Campaigns with spend and no installs show up too.
For your developer

One-time setup, then it's all yours.

Your developer adds the LinkTrail SDK once; the rest is links and CSV imports. Your app sends the events you want cost per activated user on.

LinkTrail.onLink(link => {
  // link.customData = { ch: "tiktok", cmp: "q3-launch" }
  router.navigate(link.path, link.customData);
});

// when they finish their first run
LinkTrail.trackEvent("first_run");

The full walkthrough: Channel cost reconciliation: one CPI across networks that each count their own way

Every ad network reports its own installs, using its own attribution window and its own definition of a click. Add them up and you get more installs than you had. Divide spend by each network's own number and every channel looks better than it is. The reconciliation spreadsheet that fixes this is usually a week old by the time anyone reads it.

What problem does this solve?

You want cost per install and cost per activated user, by channel, from one attribution source, next to the spend that produced them. Not four dashboards that disagree and a manual join.

How do you set the links up?

Tag every paid link with the channel and the campaign, consistently, so the attribution side knows where a click came from independently of what the network claims. Then import each network's cost export so spend lines up against the same campaign identifiers — LinkTrail reads the CSV rather than connecting to the ad accounts. Cost data from Meta, Google, TikTok and X is a Growth-plan capability, and the integrations page covers what each network supports.

{
  "deepLinkPath": "/",
  "customData": {"ch": "tiktok", "cmp": "q3-launch", "cr": "video-15s-b"}
}

Why do the numbers disagree in the first place?

SourceWhat it countsWhy it inflates
The networkInstalls it can associate with any ad impression or clickAttributes on impressions, uses long windows, counts organic installs that saw an ad
Your attributionInstalls matched to a click on a tagged linkDoesn't — but it undercounts where deterministic signals are missing
Your store consoleEvery installDoesn't attribute at all; it's the ceiling

None of these is lying. They answer different questions. The reconciled view uses one of them — the attributed install — as the denominator for every channel, so the comparison is fair even if the absolute number is conservative.

Which installs should count?

The match audit log records each install as deterministic, probabilistic or none. For a spend decision, deterministic installs are the ones to trust. Probabilistic matching is off by default, and if you switch it on the audit log lets you report the two separately rather than blending them into one number that is partly guesswork.

Which metric should you watch?

Cost per activated user by channel, where activation is the post-install event that matters to you, not the install. Two channels with the same CPI routinely have activation costs that differ by a factor of three, and that is the number the budget should follow.

Which teams own channel cost reconciliation?

  • Performance & paid
  • Growth marketers

Which LinkTrail features does channel cost reconciliation need?

  • Ad-network cost data (Meta, Google, TikTok, X)
  • Per-link channel tagging
  • Post-install events
  • Match audit log (deterministic vs probabilistic)

Cost reconciliation questions.

Why do ad networks report more installs than you actually got?

Each network counts installs it can associate with any impression or click in its own window, including organic installs that saw an ad. Your attribution counts installs matched to a click on a tagged link, and your store console counts every install without attributing any.

How do you compare CPI fairly across channels?

Use one source — the attributed install — as the denominator for every channel, next to the spend imported from each network's cost export. The absolute number is conservative, but the comparison between channels is fair.

Which installs should count for a spend decision?

Deterministic ones. The match audit log records each install as deterministic, probabilistic or none; probabilistic matching is off by default, and if it's on, report it separately rather than blending it in.

Import your first spend.

Free for your first 5,000 users. No card, no sales call.