Connect an account
Google Ads is live today. On the Ads page, open Settings and connect Google Ads with a standard OAuth flow. After connecting, pick which ad accounts should sync. Tokens are stored encrypted, server-side only; anything granvl creates on your ad account arrives paused, never live.Meta (coming soon)
The one-click Meta connection isn’t live yet: granvl is in Meta’s app review queue. Once review clears, Meta will connect from the same Ads Settings screen with the same OAuth flow, and everything below (syncing, the ads tables, tracking health, guardrails) applies to Meta exactly as it does to Google.You don’t have to wait to see your Meta numbers. Until Meta review clears, ask your agent to record your Meta campaigns, ad sets, ads, and spend over MCP with the
record_ad_entities and record_ad_spend tools. Recorded spend shows up in Campaigns just like a native sync.Syncing
- Automatic: a daily sync pulls campaigns, ad sets, ads, creatives, and day-level spend for every connected account.
- Manual: hit Sync now on the Ads page after making changes on the platform. It runs in the background and the page updates when it lands (fresh data invalidates the caches immediately).
The ads tables
The Ads page (and each campaign hub) shows the campaign → ad set → ad tree with spend, impressions, CTR, CPM, CPC, platform conversions, granvl first-party conversions, conv %, and CPA. Winner badges mark the best CTR / conv % among siblings; health dots flag rows with tracking issues. Click any ad (or its thumbnail) to open the creative modal: full-size preview (images and playable video), headline and body copy, CTA, destination URL, delivery metrics, and for Google responsive ads, per-asset performance ratings and audience targeting.Joining spend to conversions
The join runs on UTMs. Use the funnel page’s Copy URL & Meta UTMs / Copy URL & Google UTMs buttons as your ad’s destination URL. The template carries dynamic campaign / ad-set / ad IDs that the platforms fill at delivery, which is how a visitor’s session links back to the exact ad that paid for it. Tracking health audits this continuously: every campaign/ad-set/ad gets a verdict, and problems (missing UTMs, unlinked accounts, URL mismatches) surface with a suggested fix.An account can also be marked external (e.g. it drives a Shopify store, not your granvl funnels). It stays visible but is excluded from “not linked” warnings.