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.
Upload Complete
Your ads have been submitted successfully.
Square (1:1) recommended · up to 10 files
No creatives yet. Upload your first ad above!
ads_read scope).
Each brand is a separate Meta ad account pulled using the token above.
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);
Used for alerting, health scoring, and scenario baselines. Adjust per client as needed.
Automated alerts are coming soon. They'll trigger when ROAS drops below target, frequency spikes, or spend goes anomalous — delivered via Slack or email.