⚙️ Settings
Scoring, currency, data & account.
Tune the Scale/Kill lines. Recommendations recolour live across the dashboard.
ROAS
Return on Ad SpendPrimary when FTD > 0
×
×
CTR
Click-Through Rate
%
%
CPR & CPA
Cost Per Register
$
$
Cost Per FTD
$
$
CPM & NR
Max CPM (kill signal)
$
NR
Frequency (Impr ÷ Reach)
Audience SaturationHigher = same people seeing ad again
×
×
Lead → NR Rate (Leads format)
Lead quality: NR ÷ LeadsReal range 0–28%. P75=15%, P50=8.7%, P10=3.6%
%
%
Budget Utilisation (Spend ÷ Budget)
Delivery healthLow = campaign underdelivering or throttled
%
%
Data Maturity
Min entries before Scale/KillToo little data → stays Monitor
days
Deposit Maturation & LTV
Deposit maturation windowFirst deposits lag signups — the AI won't recommend Kill on ROAS until a campaign is this old
days
Redeposit multiplier (LTV)Projected lifetime ROAS = first-deposit ROAS × this. An estimate until the redeposit webhook lands.
×
Metric Weights
Currency
FX rate (USD → MYR)Drives all RM figures shown beside USD
MYR
Each saved entry keeps the FX rate used at that time, so changing this default never rewrites your past numbers.
Manual backup
Backup downloads everything as JSON to your computer — campaigns, thresholds, weights, brands, FX, creative captions. This is your copy outside the server. Restore replaces current data.
Off-site backups (automatic)
A full copy is saved to secure cloud storage every day (last 45 kept). Download any to your computer.
Maintenance mode
seconds
When you turn maintenance ON, the team gets this many seconds of warning (pop-up + countdown bar) to save their work before they are locked out.
While ON, the team sees an "updating" screen and can't make changes — you keep full access. Safe-deploy ritual: Backup → turn ON → deploy → verify → turn OFF.
Edit the options in the Type / Hook / Angle / Offer dropdowns on Ad Creative cards. Changes apply for the whole team.
Dashboard
Ad Network
Brand
Format
Total Spend
June 2026
Total Revenue
TDV all brands
Avg ROAS
FTD campaigns
Total FTDs
first-time deposits
Total NRs via Ref. Code
new registers
Overall CR
FTD ÷ NR conversion
Avg Spend / Campaign
across unique campaigns
Avg Rev / NR
revenue quality / register
Avg CPA
cost per first deposit
Avg FTD Amount
avg deposit value
Avg CPR
cost per new register
Active Campaigns
running now
Daily Spend & ROAS
Bars = spend · Line = ROAS
Spend
ROAS
Avg CPR & CPA
Cost per registration & acquisition
Daily FTDs
First-time deposits per day
CTR by Campaign
Avg click-through rate
Ad Network Split
Spend by ad network
CPM Trend
Cost per 1,000 impressions
Attribution by Brand
NR & FTD attributed to campaigns via referral codes
Campaign Log
0 rows
Network
Brand
Format
Action
White Labels
NR & FTD Entry
Manual Input
👈
Select a white label to enter data
Performance
📈
Deep-dive performance view — Phase 3
BM Accounts
📱
BM account management — Phase 3
Team
Loading team…
Content Planner
Plan what to run — overlaid with what actually ran (spend · FTD).
Creative stage
Linked Ad Creative (optional)
Notes
Campaign Code Generator
The ad-manager campaign objective. Decides whether results report as NR (Traffic) or Leads.
The creative format — static image, video, carousel, etc.
The marketing angle / hook the creative leads with.
The promotion or bonus this ad is pushing.
GA Tracking URL (UTM Generator)
Generated campaign code — auto-fills utm_id & utm_campaign.
Task Board
Marketing & ops tasks — drag cards between columns.
My profile
Or pick a preset
Accent colour — your unique colour on chips & cards
Display name
Shown across the app in place of your login name.
Account
Change password
📖 Guide
Beta
Welcome to AdTrack 👋
AdTrack tracks our Meta ad campaigns across all white-label brands in one place: spend, registrations (NR), first-time deposits (FTD), and the costs behind them. Its scoring engine then recommends whether each campaign should be scaled, monitored, or killed — so we stop burning budget on dead campaigns a day earlier.
This is a beta. Please click around, try to break things, and post anything odd in the group chat — plus any feature ideas. For bugs, a screenshot + "what I did → what I expected → what happened" is perfect.
🚀 Your first 10 minutes
  1. Sign in with the username + password KV gave you. Your session lasts 30 days per browser — works on your phone too, same address.
  2. You land on the Dashboard. The cards up top are company-wide totals for the selected date range — spend, revenue, ROAS, FTDs, NRs.
  3. Click the 📅 date pill in the header. MTD = this month, 7D = last week, Since Last Mtg = since the last Mon/Wed/Fri meeting, All = everything. Every number and chart on the page follows this range.
  4. Scroll to the Campaign Log and click a campaign's to expand its day-by-day history.
  5. Look at the AI Rec column — that's the engine's verdict per campaign. Hover any badge for the reasoning.
  6. If you're an editor: try the + button on a campaign row to add today's numbers. That's the core daily action.
👤 Accounts & roles
RoleCan doCan't do
adminEverything — incl. thresholds, brands, team accounts, restore
editorAll daily campaign work: add/edit/delete entries, imports, actions, brand assignmentChange thresholds, manage brands or team
viewerSee every dashboard, chart and campaign; export CSVChange anything (edit buttons are hidden)
Your name and role show top-right of the Dashboard, with the Sign out button. If a button seems missing, it's probably above your role.
📊 Reading the Dashboard

KPI cards — totals for the current date range and filters. Monetary cards show USD with the RM equivalent beside it. "Total NRs via Ref. Code" counts only registrations attributed to our campaigns; the small % shows how much of the brands' total traffic we drove.

Filters — chips for Ad Network, Brand, and Format sit under the header. They narrow everything: KPIs, charts, and the log. Reset Filters in the Campaign Log header clears the lot.

Charts — Daily Spend & ROAS (bars + line with the Scale/Kill threshold lines), CPR & CPA by brand, daily FTDs, CTR by campaign (green = above target), network split, CPM trend. The ⤢ button enlarges any chart.

Attribution by Brand — one card per brand: campaigns linked, running vs stopped, and how much of the brand's NR/FTD our ads drove.

🏆 Best Performing Campaigns — ranked by total NR or FTD (toggle at the top-right of the card).

📋 The Campaign Log

One row per campaign, summarising its whole lifetime (within the date range). Click the row to expand daily entries. The coloured stripe on the left = the action currently taken. An amber dot means the AI disagrees with the action taken — the ⚠ Mismatches button filters to only those.

Per-campaign buttons: campaign name opens its ad creative · + quick-adds a day entry · deletes the whole campaign · the brand badge assigns/changes the brand (important after CSV imports!). On expanded day rows: ✎ Edit and ✕ Delete per day.

Status vs Action vs AI Rec: Status = is the campaign live or stopped. Action = what we actually did (click it to change: Pending / Scale / Monitor / Kill / Banned). AI Rec = what the engine advises. Score = 0–100 health. Trend = direction vs its own history (↑ improving, ↓ declining).

AI Rec badges decoded
▲ Scale — strong across ROAS/CTR/costs on its recent entries (last 7). Worth more budget.
◉ Monitor — mixed signals; keep running, don't add budget.
✕ Kill — losing money on multiple metrics.
⏳ Needs Data — fewer than 3 entries; too early to judge.
⚠ No FTD — registrations but zero deposits; can't recommend Scale without revenue proof.
⚡ High Freq — the same people are seeing the ad 5+ times; audience saturated. Scale blocked.
▼ Plateau — metrics peaked and are reversing on 2+ signals; hold budget.
⏸ Scale Cooldown — scaled very recently; wait before scaling again.
✏️ Entering data (3 ways)

1 · NR & FTD Entry page (sidebar) — the daily back-office numbers. Pick the brand, enter the brand's total NR/FTD for the day, then per referral code the attributed NR / FTD / deposit value in RM — USD is converted automatically at the configured rate.

2 · Quick-add in the log — the + on a campaign row adds a day of ad-side numbers (spend, impressions, reach, clicks…). CPM/CTR/CPR/CPA compute themselves.

3 · ⬆️ Import CSV — for Meta Ads Manager exports. In Ads Manager: Reports → Export table data → set Breakdown by Day → CSV. Drop the file in; columns are auto-detected and previewed before anything is saved. Rows with the same date+campaign update rather than duplicate.

Why doesn't the import fill NR? Meta's "Results" column means different things per campaign (often just link clicks), so we never trust it as registrations. NR/FTD always come from the brand back office — that keeps CPR/CR honest. Also note: numbers here can differ slightly from Ads Manager (attribution windows) — that's expected.
📖 Metric glossary
MetricMeaningGood looks like
NRNew registrationsvolume, cheaply
FTDFirst-time deposits — the money eventmore = better
CRFTD ÷ NR — how many registrants deposithigher %
CPRSpend ÷ NR — cost per registration≤ $5
CPASpend ÷ FTD — cost per depositor≤ $12
ROASDeposit value ÷ spend≥ 3.5×
TDVTotal deposit value (entered in RM, shown in USD)
CTRClicks ÷ impressions≥ 3%
CPMCost per 1,000 impressions< $40
Freq.Impressions ÷ reach — ad fatigue signal< 3.5×
L→NR%Leads that became registrations (Leads format)≥ 12%
"Good" columns show current thresholds — admins can tune them in ⚙️ Settings → Scoring Thresholds, and every badge recolours instantly.
🗂 Other pages

White Labels — one card per brand: today's numbers, attribution, campaign counts, manual vs webhook data mode.

Ad Creative — store the image/video + caption used per campaign, so "which ad was CodeAds013 again?" has an answer. Beta caveat: media files currently live only in your own browser — captions and data sync, the image files themselves don't yet.

Team (admin) — add/remove accounts, change roles, reset passwords.

⚙️ Settings (admin) — scoring thresholds & weights, FX rate, backups, server sync, maintenance mode.

🔄 Saving & sync

There is no save button. Every change writes to the shared database immediately — the green ● Server badge in the header confirms it. Everyone sees the same data; a page refresh pulls the latest.

If the badge shows ○ Offline (or you see a red "sync failed" toast), your change was kept locally in that browser but didn't reach the server — screenshot it and post in the group, then retry the change once the badge is green again.

🧪 What to beta test
Enter a real day of data end-to-end · import a Meta CSV · change an action and refresh to confirm it stuck · try it on your phone · deliberately do something wrong (duplicate entry, weird CSV) and see if AdTrack catches it. Post every bug, confusion, and "it would be nice if…" in the group chat — confusing-but-working counts as a bug too.
Ad Creative
0 campaigns
Creative Ledger