Funnel, end to end
Meta spend through closed sale, for the selected window.
Show rate by day
Where sales are lost
Ads, ranked
Sorted by the number that matters. Ads with under 8 leads are excluded from ranking.
Upcoming calls
Synced from the GoHighLevel calendar. Set an outcome and it writes straight back.
Recently closed out
Settings
Connect GoHighLevel and Meta right here. Values are saved server-side in your Worker's database — never stored in this browser.
Worker API
The Cloudflare Worker URL this app talks to. Leave blank to run on demo data.
Connect your accounts
First time here: choose a passphrase below — it protects these settings so only you can change them. You'll enter the same one on every future save.
GoHighLevel → Settings → Business Profile → Private Integrations → create one with Contacts, Calendars, and Opportunities read/write scopes → copy the token here.
GoHighLevel → Settings → Business Profile — listed near the top as "Location ID". You can also read it out of the URL: app.gohighlevel.com/location/this-part/...
Any random string you make up. Paste the same value into the GHL webhook's custom header when you set it up (README → "Wire the GHL webhook") — it stops anyone else from posting fake outcomes to your worker.
Meta Business Suite → Business Settings → Users → System Users → create a system user → Generate Token with ads_read on your ad account. System-user tokens don't expire the way personal ones do.
Ads Manager → top of page or the account dropdown, or Business Settings → Accounts → Ad Accounts → click your account and copy the ID. Include the act_ prefix, e.g. act_123456789012345.
The custom field key in GHL that stores the Meta ad_id at lead capture. Leave as ad_id unless you named it something else.
Connection status
Backups
Snapshots write to the tc-sales-backups R2 bucket automatically. See README to restore.