Browse the documentation

Ad Spend & Cost Tracking

Applies to: Tracker & affiliate users · Tracker and ad manager setups only, when the network has the module switched on

Revenue on its own doesn't tell you whether a campaign made money — you need what you paid for the traffic too. The Ad Spend page connects your ad-network accounts and pulls in their campaign spend automatically, so the platform can set cost against revenue and show you profit and ROI per offer, without you exporting spreadsheets from each ad platform.

What this is#

You connect an ad account once by entering its credentials. From then on, the platform pulls that account's campaign spend on a daily schedule and stores it. That cost is matched against the revenue your offers earned over the same window, giving you profit and ROI on the same page as your traffic.

Credentials are stored encrypted and are never shown back to you. When you edit an account, leaving a credential field blank keeps the value already stored.

When you'll use this#

  • After launching on a new traffic source, to start tracking its spend.
  • When you want profit and ROI in reports, not just revenue.
  • When spend looks stale and you want to force an immediate re-pull.
  • When an account stops syncing and needs reconnecting.

Step by step#

  1. Open Ad Spend from the tracker menu.
  1. Choose Connect account.
  2. Pick the traffic source (the driver) from the list. Only drivers that are ready appear; others are marked coming soon.
  3. Give the account a label so you can tell your accounts apart (e.g. "Meta — main BM").
  4. Fill in the credentials the driver asks for. The form renders the exact fields for the driver you picked — an API key for some, an OAuth token exchange for others.
  1. Save. The account appears in the connected-accounts table.
  2. The first sync runs shortly after connecting, then daily. To pull immediately, choose Sync now on the account's row.

Options reference#

Supported traffic sources#

Source Auth Notes
Meta (Facebook) OAuth Marketing API campaign insights.
Google Ads OAuth Campaign-day cost via the Ads API.
TikTok OAuth Campaign reporting API.
Microsoft Advertising (Bing) OAuth Common channel for buyers moving off Meta.
Taboola API key Native.
Outbrain API key Native.
PropellerAds API key Push / pop.
Adsterra API key Push / pop.
ExoClick API key Adult vertical.
Snapchat OAuth —
Pinterest OAuth —
LinkedIn OAuth —
Yandex.Direct OAuth —

The Driver list in the connect form is the authoritative list for your platform — it has more networks than this table (MGID, RevContent, TrafficStars, TrafficJunky, Zeropark, RichAds and others). A source shown as coming soon can't be connected yet.

You can also connect one of the platform's own ad networks as a spend source if you're buying inventory there — pick that network and supply your advertiser API key for it.

Period toggle#

The summary reads over a rolling window. Switch it with the 7 / 30 / 90-day toggle; every figure on the page updates together.

Sync status badges#

Status Meaning What to do
Synced Last pull succeeded. Nothing.
Never synced The account hasn't been pulled yet. Wait for the first sync or use Sync now.
Rate limited The ad platform throttled the pull. Nothing — it retries automatically.
Reconnect needed Credentials expired or were rejected. Edit the account and re-enter the credentials.
Sync error The pull failed for another reason. Read the shown error; re-check credentials or retry.
Driver pending The driver isn't fully available yet. Wait for it to be enabled.

Cost & ROI by offer#

Below the summary, a Cost & ROI by offer table breaks profit and ROI down per offer:

Column Meaning
Offer The offer the spend is attributed to.
Spend Ad spend attributed to that offer for the period.
Revenue What the offer earned in the period.
Profit Revenue minus spend.
ROI Return on the spend, as a percentage.

Each source's spend is split across the offers its traffic reached, weighted by each offer's share of that source's clicks. Spend on a source that produced no clicks in the window stays unattributed rather than being guessed onto an offer.

Example#

Connect a Meta ad account for spend#

  1. Ad Spend → Connect account.
  2. Driver: Meta (Facebook).
  3. Label: Meta — dating BM.
  4. Complete the OAuth credential fields the form shows for Meta.
  5. Save. Within a few minutes the first sync pulls the trailing days of campaign spend; the row shows Synced with a spend figure.
  6. Open the Cost & ROI by offer table to see that spend set against each offer's revenue as profit and ROI.

For the cleanest per-offer attribution, bind your Meta tracking links to their external campaigns — the spend then lines up with the exact campaigns your clicks came from.

Add a native source with an API key#

  1. Connect account → driver Taboola.
  2. Label it, paste the Backstage API key.
  3. Save and Sync now to confirm it pulls without waiting for the daily run.

Tips#

  • Add a clear label per account — you may connect several accounts on the same platform.
  • If your accounts bill in different currencies, spend is converted to a single currency at pull time, so totals and ROI stay comparable across accounts.
  • Bind tracking links to their external campaign (on the Tracking Links page) so cost attributes to the right offer instead of being spread by click share.
  • Use Sync now right after connecting to confirm the credentials actually work — don't wait a day to find out.
  • Leave a credential field blank when editing to keep the stored value; you don't have to re-enter secrets to change a label.

Troubleshooting#

Symptom Likely cause Fix
Spend not syncing / stays at zero First sync hasn't run, or the account has no spend in the window Use Sync now; widen the period toggle; confirm the account actually spent in that range.
Status shows Reconnect needed OAuth token expired or was revoked, or the API key was rotated Edit the account and re-enter the credentials.
Status shows Rate limited The ad platform throttled the request Nothing — it retries on the next sweep.
Status shows Sync error Wrong credentials, wrong account ID, or a platform-side issue Read the shown error; re-check every credential field for that driver.
Spend pulls but doesn't attribute to an offer The source produced no clicks in the window, so spend stays unattributed Confirm traffic actually ran on links bound to that source in the period.
ROI looks off across accounts Mixed billing currencies Spend is normalised to one currency at ingest; the totals are already comparable — re-check the offer's revenue side.