Ads Monitor

Agency access only.

Smiles Agency · Sign in with your Google account

Smiles Ads Dashboard

Dashboard
Fetching data…
📊

Ready when you are

Add your Meta token and ad account IDs in Setup, then hit Run Report to pull live campaign data.

🎯

No campaign data yet

Run a report first to see individual campaign breakdowns.

❤️

No health data yet

Run a report to see your account health scores.

⚠️

No data yet

Run a report to see revenue at risk from underperforming campaigns.

🔮

No data yet

Run a report to model what-if scenarios for your campaigns.

No actions yet

Run a report to generate a prioritised action list.

AI-powered recommendations

Add your Anthropic API key in Setup, run a report, and Claude will analyse your campaigns and tell you exactly what to do this week.

New Ad Creative
🖼️
Drop images here
PNG, JPG, GIF — up to 30 MB each
Square (1:1) recommended · up to 10 files
Creative Library
🎨

No creatives yet. Upload your first ad above!

Client
Displayed on the client selector screen and in reports.
Domain or direct image URL — shown on the client selector card.
Meta Ads Token
Shared across all brands unless overridden per brand below. Business Manager → System Users → Generate Token (ads_read scope).
Meta Brands

Each brand is a separate Meta ad account pulled using the token above.

Klaviyo
Klaviyo → Settings → API Keys → Create Private API Key.
AI Insights — Anthropic
Get a key at console.anthropic.com — enables Claude to write recommendations after each report run.
Google Ads — CSV Upload
Google Ads API can't be called from a browser. Export a Campaign report from the Google Ads UI and upload it here.
📁
Drop Google Ads CSV here
or click to browse
Team Sync — Supabase
Connect a free Supabase database so your whole agency shares one live config.
The public "anon" key from Supabase Settings → API.
Ad Uploader — Database Setup

Run once to create the creative_batches table in Supabase.

CREATE TABLE IF NOT EXISTS creative_batches (
  id          uuid DEFAULT gen_random_uuid() PRIMARY KEY,
  client_id   text REFERENCES clients(id) ON DELETE CASCADE,
  brand_name  text,
  ad_name     text,
  headlines   jsonb DEFAULT '[]'::jsonb,
  primary_texts jsonb DEFAULT '[]'::jsonb,
  campaign_id   text,
  campaign_name text,
  adset_id    text,
  adset_name  text,
  cta         text DEFAULT 'SHOP_NOW',
  destination_url text,
  status      text DEFAULT 'draft'
                CHECK (status IN ('draft','uploaded','error')),
  meta_ad_id  text,
  error_message text,
  image_count integer DEFAULT 0,
  thumbnail   text,
  created_by  uuid REFERENCES auth.users(id),
  created_at  timestamptz DEFAULT now()
);

ALTER TABLE creative_batches ENABLE ROW LEVEL SECURITY;

CREATE POLICY "Authenticated users can manage batches"
ON creative_batches FOR ALL
USING (auth.uid() IS NOT NULL);
KPI Targets & Settings

Used for alerting, health scoring, and scenario baselines. Adjust per client as needed.

Alert Rules

Automated alerts are coming soon. They'll trigger when ROAS drops below target, frequency spikes, or spend goes anomalous — delivered via Slack or email.

ROAS drops below target
Triggers when campaign ROAS falls below your floor
Coming soon
Frequency exceeds threshold
Warns when ad frequency hits your critical level
Coming soon
Daily spend anomaly
Flags unusual spend swings above/below baseline
Coming soon