Daily ROI: Cost Import and Reports reconciliation
The morning media-buyer routine: pull real spend from the ad cabinet into the tracker, confirm cost on Dashboard and Reports matches the cabinet, then scale or pause campaigns. Without Cost Import, ROI often relies on the manual campaign cost model or looks unrealistically good.
When to use. Every working day before reviewing funnels; after overnight spend; before a team ROI standup. If ROI looks “great” while the cabinet shows bleed — cost is usually not synced yet or external id mapping is wrong.
Prerequisites
- ATracker campaigns already exist — import attaches to them.
- Ad-cabinet tokens/credentials (Facebook access token + ad account id, Google developer token + refresh token, etc.).
- External campaign id from URL or cabinet column — not the display name in the UI.
Step 1 — Integration in Cost Import

- Sidebar → Cost Import (
/cost-import). - Create integration → pick provider (Facebook, Google Ads, TikTok, Yandex.Direct, VK Ads, myTarget).
- Fill credentials using in-UI hints (Facebook: access token + ad account id).
- Save. Save failures are usually a bad/expired token or ad account id.
Step 2 — Map external campaign id
- In the same integration open campaign mapping.
- Copy id from Ads Manager (URL or column) → bind to the ATracker campaign.
- Run sync for one day (yesterday) first — not a full month.
Step 3 — Daily Costs

- Open the Daily Costs tab.
- Check rows: date, amount, currency, campaign, provider.
- Compare daily total to cabinet spend (account timezone and currency).
- On mismatch: edit/delete the row, fix id mapping, sync again.
Step 4 — Dashboard and Reports for the same period


- Open Dashboard — period = synced dates (often “yesterday” or “last 7 days”).
- Open Reports with the same period and campaign filter.
- Report cost should reflect imported spend; profit and ROI recalculate with real cost.
- Order matters: Daily Costs first, then Dashboard/Reports — not the reverse.
CSV path (cabinet without API)
- Cost Import → CSV upload → select ATracker campaign.
- File: date, cost, currency (per upload template in UI).
- Map columns → verify Daily Costs → Reports.
Do not upload the same day twice unless intentional — duplicated spend breaks ROI.
Reconciliation checklist vs cabinet
- Dates match the report period (tracker account timezone vs cabinet).
- Same ATracker campaign as in external id mapping.
- Currency aligns with Settings → General.
- No duplicate day rows in Daily Costs.
- Cost in Daily Costs but ROI looks empty — check Reports period/filter, not the flow.
Typical scenarios
Morning FB/Google sync → Daily Costs → “Daily ROI” Reports preset → scale/stop decision.
Rotated Facebook System User token → update integration credentials → sync yesterday as a check.
One-day mismatch → often timezone; align tracker and cabinet day boundaries.
Two ad accounts on one tracker campaign → two integrations and two id mappings, or split into separate campaigns.
Common mistakes
- Sync succeeds, cost empty — wrong external campaign id or wrong ad account.
- Cost on the wrong campaign — fix mapping; delete bad daily rows.
- ROI too good — cost not synced for the period or you read only the manual cost model.
- Expecting Login with Facebook for every network — most need pasted tokens.
- Reading ROI for dates not yet imported.
Next: Auto-Rules and dayparting after funnel warm-up. Reference: documentation.