Paste a Google Drive folder URL (or its ID). The folder structure decides
how campaigns and ad sets get organized — see the inline help below the input.
Expected folder structure
parent_folder/
CampaignName/ ← matches existing campaign by name
AdSetName/ ← creates a new ad set
media_file.jpg ← becomes one ad
(Or 2-level: parent = the campaign, subfolders = ad sets)
Scan results
Choose campaign
Pick an existing Meta campaign. New ad sets you create below will be added to it.
Ad sets
No ad sets yet. Click "Add ad set" above to start.
Uploader · TikTok
Launch TikTok in-feed ads from a Google Drive folder or manual upload. Videos must be 9:16.
Checking TikTok connection…
Connect TikTok Ads to launch
You need a TikTok Marketing API connection before you can upload creatives or launch ad groups.
From Drive folder
Videos must be 9:16 portrait, 5–60 seconds, ≥720p. Non-compliant files will be skipped.
Manual upload
Drag videos here, or click to choose files
9:16 portrait · 5–60s · ≥720p · MP4/MOV
Marketing Performance
Cross-platform performance overview for your campaigns across Meta and TikTok.
Revenue
—
Total value of all conversions attributed to your campaigns across all platforms.
ROAS
—
Total Spend
—
Conversions
—
CPA
—
Top performers
Top bleeders
Marketing calendar
Launched and scheduled adsets across all platforms.
—
0 items
Meta Ads
Campaign / Ad set / Ad metrics from your Meta ad account.
Checking connection…
Name
Spend
Revenue
ROAS
Purch.
CPA
Leads
CTR (link)
CPC
CPM
Impr.
Freq.
Pick a date range to load data.
TikTok Ads
Campaign / Ad set / Ad metrics from your TikTok ad account.
Checking connection…
Connect TikTok to see performance data
Link your TikTok ad account to pull campaign metrics and view cross-platform performance insights.
Name
Spend
Revenue
ROAS
Conv.
CPA
CTR
CPC
CPM
Impr.
Loading TikTok data…
Klaviyo
Email + SMS performance alongside your paid campaigns.
Klaviyo is part of Nara
Klaviyo integration lives in Nara — our retention-focused companion tool. Unlock it
there and the data flows into Cato automatically.
Two backend files to implement.
Image generation depends on backend/openai_api.py::generate_images.
Ad-copy generation depends on backend/claude_api.py::translate_and_improve.
Brand profile fetching depends on backend/brand_profile.py::scrape_brand_info.
Your Brand Profile
Paste your product URL — we'll auto-extract the name, description, image. Used as context for every generation.
Edit details manually
Generate Creatives
Media Buying · Meta
Automated kill / scale rules with optional human-in-the-loop approval
Operational mode
Cadence is auto-derived from your last-30d spend.
Loading…
Account snapshot · auto-learned
Analyzing your account…
Your thresholds
auto: —
auto: —
Multi-product mode
Different products with different margins? Set per-product thresholds.
Which naming tag represents the product?
Pick the part of your naming convention that identifies the product.
Product
Adsets
30d spend
ROAS
Breakeven
Scalable
Confidence
Click "Scan my ads" to find your products.
Preview · what the engine would do right now
Pending approvals
Each decision expires after 24h. Approving re-checks Meta state before acting.
Rules
Toggle each rule and tune its parameters. New / edited PAUSE rules shadow for 24h before acting.
Recent decisions
Time
Rule
Adset
Action
Status
Reason
No automation activity yet.
Media Buying · TikTok
Automated kill / scale rules for TikTok ad groups.
Checking TikTok connection…
Connect TikTok Ads to automate
You need a TikTok Marketing API connection before automation rules can act on TikTok ad groups.
TikTok automation
Coming soon — kill / scale rules for TikTok ad groups will mirror the Meta engine.
Rule engine for TikTok is staged but disabled until the Marketing API connection is exercised end-to-end.
Pre-flight check
Global checks
Per-adset checks
Welcome to Cato
Launching ads…
Starting…
Funnel Analysis
Landing-page audit + GA4 device breakdown
Not implemented yet.
Funnel depends on backend/ga4.py (GA4 query + landing-page scrape + recommendations).
Analyze a Landing Page
Support center
Help & FAQ
Find answers about onboarding, integrations, and the fastest ways to reach support.
Email support
For account, billing, onboarding, or technical questions, reach the Cato team by email.
In-app chat is on the roadmap and will be added soon for real-time support.
Coming soon
Frequently asked questions
Common answers for day-to-day support, onboarding, and billing.
How do I connect my Meta ad account?
Go to Settings → Meta Ads, paste your App ID, App Secret, Access Token, and Ad Account ID, then click Save & Connect. The status pill turns green when the credentials validate against the Marketing API.
How do I connect Google Drive?
Settings → Google Drive (OAuth). Create OAuth client credentials in Google Cloud Console with the redirect URI shown in the form, paste Client ID + Secret, then click Save & Connect to Google.
How does Media Buying auto-mode work?
The engine runs an hourly tick. In Auto mode it acts immediately on rule decisions; in Confirm mode it queues each decision for your approval; in Dry run mode it only logs what it would have done. Switch modes from the Operational mode card in the CMO tab.
How are breakeven and scalable ROAS calculated?
If you haven't entered manual values, the engine analyzes your last 30 days of adset insights and computes spend-weighted ROAS quartiles. Inferred breakeven is anchored at the P25; inferred scalable is anchored at the P75 (with floors so we never recommend below 0.8 / 2.0). Per-product overrides take precedence when multi-product mode is on.
What happens when a rule fires?
Decisions pass through safety gates (launch cooling, per-target action cooling, shadow period for new PAUSE rules, hard caps per tick). Surviving decisions either log to dry-run, queue for approval, or execute via Meta — depending on your operational mode. Every decision is written to the audit log.
Why am I hitting rate limits from Meta?
The dev-tier app has tight ceilings on calls per app and per ad-account. The engine caches Meta responses per user for ~90 seconds to reduce calls, but bursts of UI actions can still hit the limit. Once your app passes Meta App Review the ceiling goes up substantially.
How do I upload ads from a Drive folder?
Uploader → From Google Drive. Paste the folder URL, click Scan, tick the ad sets you want to launch, then click Launch (all paused by default). The job runs in the background — you can hit Run in background to navigate elsewhere while it completes.
What if something looks broken or data is missing?
Refresh the page first. If the issue persists, open DevTools → Console and copy any red errors, plus the Network response of the failing endpoint. Then email support with: the tab you were on, the brand/account, and what you were doing when it broke.
Copy the Client ID and Client Secret from Basic Information below.
Only channels you've invited @your-bot to are listed. To add a new one: open it in Slack and run /invite @your-bot, then refresh.
Reports & Alerts
Each schedule fires at its set time on the selected days. Reports show top scaleable (high ROAS + spend) and top bleeders (low ROAS + spend) over the lookback window.
No schedules yet. Click New schedule to set one up.
New schedule
Thresholds
Manual override applies one set of thresholds to every row, regardless of product.
Optional Integrations
Each unlocks a specific Creative Studio source. All optional.
Configuration
Ad Naming Convention
Define your tag letters and what each represents.
Set up with AIPaste an existing ad name and let Claude detect the structure, or generate a fresh skeleton.
Each row is one tag in your ad name. Tag = the letters in brackets. Field key = how the app refers to it internally (use product, angle, creator, editor, audience, date, or any custom string).
Products
Per-product description, URL, photos, and ROAS thresholds.
Detected automatically from your naming convention.
Performance thresholds
These drive the Needs Attention list on the Dashboard. Adsets get flagged when
they've spent at least the minimum in the lookback window AND ROAS is below break-even
(or CAC is above your ceiling).