Most. Help

Keitaro Cost Import: Facebook Ad Spend Into Your Tracker

Published Sep 14, 2026Updated Sep 22, 20266 min readIntermediate
Hand-drawn coin stack labeled spend on the left, an orange arrow crossing a dotted border into a tracker box showing profit, and a small calendar marking the refresh day
What you'll learn
  • How the Facebook Costs integration differs from conversion sending
  • Which fields the Add account setup needs, token included
  • Why the {{adset.id}} parameter decides whether costs get recorded
  • How the update schedule and currency conversion work
Intermediate
3views

The case for Keitaro cost import is simple: ad spend in the tracker turns it from a conversion counter into a profit calculator: with spend in the reports, every campaign row shows ROI instead of payouts alone. Keitaro ships this as a dedicated integration - Facebook Costs - that imports costs from an ad account on a schedule, converts them into the tracker's currency, and posts them into campaign reports. This guide walks the setup end to end: how the integration differs from conversion sending, the exact fields it needs, the one campaign parameter that silently decides success, and the troubleshooting list for when costs refuse to appear.

The money-frame around this setup - why tracker ROI and platform ROAS disagree - is in the tracker ROI vs ROAS guide; here the focus is the plumbing.

What the Facebook Costs Integration Is

Keitaro's documentation is explicit about the boundary: the integration "imports costs from a Facebook Ads ad account to Keitaro," and "the cost integration is separate from the conversion sending integration" (Facebook Costs documentation). Two integrations, two credentials, two jobs: Facebook Conversions sends your conversions out to Meta; Facebook Costs pulls spend in.

Spend lands in campaign reports, which is where it becomes useful: per-campaign and per-source profitability, honest per-offer comparisons, and the tracker ROI denominator from the money reconciliation guide. The cost parameter in the postback contract covers per-conversion cost models; the integration covers the ad-account spend that never travels through postbacks.

The Setup: Fields That Matter

The documented setup sequence:

  1. Open Integrations, select Facebook Cost, click Add account.
  2. Fill the fields: Name for the integration label; Choose campaigns - the Keitaro campaigns to update; Ad account ID copied from Facebook Ads Manager; Access Token for the API connection; the Facebook API version; Update every - the automatic refresh interval; and Use proxy for routing the requests.
  3. Save - and note that the integration list also offers Pause, Resume, Clone, Delete, and a manual Update costs button for an immediate refresh.

One field deserves its own minute - the token. Per the docs: in Facebook, create an app (Other, then Business type), enable Marketing API in the app settings, open Tools, tick the boxes, and generate the token to copy into Keitaro (Facebook Costs documentation).

The {{adset.id}} Requirement

Under the hood, the integration maps Facebook's spend data onto Keitaro campaigns through campaign parameters, and the ad set identifier is the load-bearing one: {{adset.id}}. The documentation states the failure mode verbatim: "If campaign parameters are empty or differ from the template, costs are not recorded."

In practice that means three places must agree:

  1. The Facebook campaign's URL parameters carry the template macros - at minimum the ad set identifier.
  2. The tracker campaign's parameter columns are set to receive them.
  3. For remote-hosted sites (KClient PHP, the tracking script, the WordPress plugin), the tags travel onward in the site URL, and through apps the parameters pass along the chain - the documentation shows sub1={{adset.id}} into the app, then sub1={sub1} into Keitaro.

When costs silently never appear, this parameter chain is the first suspect - before tokens, before API versions.

Schedule and Currency

Updates run per the interval in Update every, and coverage is documented: each update "updates costs for the last 5 days," while "the first update covers 30 days." Currency handling is automatic on the tracker side: Keitaro pulls the currency from the Facebook account and converts it into the tracker's currency, so your reports show the tracker's base currency either way.

One reporting consequence from the reconciliation guide applies directly: spend updates are periodic, so same-hour ROI comparisons can mix a fresh revenue row with yesterday's spend row. Compare on settled periods, never on the live edge.

Troubleshooting: When Costs Do Not Appear

For missing costs, the documented checklist runs:

  1. "Integration is not tied to a campaign" - no Keitaro campaign was selected in the integration; add one and save.
  2. Parameters empty or different from the template - costs are not recorded; restore the {{adset.id}} chain from the section above.
  3. Version mismatches - the Keitaro version and the Facebook API version in the integration both need to be current.
  4. Token problems - the Marketing API token must be live and copied fully.
  5. Region access - the proxy option exists for reaching specific regions and reducing block or captcha risk on frequent automated requests.

On the platform-side leg of the picture - what Meta actually counted - Pixel Activator and Test Events cover verification, while the postback checklist handles the conversion half of the books.

Importing Facebook Ad Spend: Frequently Asked Questions

Frequently asked questions

Sources

Sources

Spend meets revenue
  • Verify the revenue half: Pixel Activator fires free test events while you wire the spend side.
  • Both books, one system: Most keeps conversions flowing while your spend imports itself.
Was this guide helpful?
Author
Most Team
Справочная служба

Официальные руководства и глоссарий для платформы Most и Активатора пикселей.

Topic
Affiliate Conversion Tracking: The Complete Guide
Main article of the topic
Related articles

Related guides

Affiliate Conversion Tracking: The Complete Guide

The entry point to our affiliate tracking cluster: how a conversion that lands on someone else's offer travels through a postback, a tracker, and a Conversions API call, and where each specific failure has its own deep-dive guide.

16 min

Pixel Warming Without Burning Budget: A Practical Sequence

Warming is not a ritual - it is an ordering problem. Verify delivery before spend, feed clean well-attributed events while the baseline forms, and scale on evidence. This guide turns pixel warming into the sequence buyers actually follow, with the platform documentation behind each step and the affiliate-specific twists of warming a pixel you feed by postback.

7 min

Keitaro Macros: The S2S Postback and Sub ID Reference

Every Keitaro S2S postback is a template, and the placeholders are its vocabulary. This reference collects the documented macros in working groups - identifiers, money, statuses with mappings, timestamps, campaigns and offers, geo and device - plus the sub ID fields and the encoding and currency rules that keep substituted URLs intact.

6 min

Conversion Value Payout: Passing Affiliate Payout as Event Value

A flat Purchase counts actions; a Purchase with the network's payout counts money. This guide traces the payout number from the network postback into the event's value and currency fields, then through the messy parts - partial approvals, rebills, clawbacks, and currency mismatches - to a value policy the algorithm can actually optimize on.

8 min