One prompt to your agent. Then a two-minute card queue.
FunnelKeeper is built to be installed by the same AI that built your product, and run by you in the time it takes to drink the first coffee.
What does the AI set up?
Your agent creates the product, connects the sources, and verifies each one delivers data. Over MCP it holds the same tools the CLI has: create_product, connect_source_start (which returns the one Google consent link a human must click), set_semrush_key, test_connection. The whole exchange lands in the audit log under the agent's key.
What does the human approve?
Anything that touches money. The Keeper and your agent can propose a budget change — with a rationale and a rollback condition — and it becomes a card in your queue with one number and two buttons. A database constraint means a proposal cannot reach approved without a human on record. Everything else (reads, event logging) needs no ceremony.
$ fk signup # or start at https://app.funnelkeeper.com $ fk login $ fk product create --name "Ledgerly" --slug ledgerly $ fk connect ga4 --product ledgerly open this url to connect ga4 for ledgerly: https://accounts.google.com/o/oauth2/v2/auth?… waiting for authorization … ga4 connected. property: Ledgerly (properties/4210…) $ fk connect semrush --product ledgerly semrush connected. snapshots run weekly. Funnel is live. First payback verdict in ~18 days. Nothing spends money without your tap.
What data does it need?
Read access to where your traffic, spend and revenue already live. Every source is read-only, with two named exceptions: Tag Manager can publish the FunnelKeeper tracking snippet when you explicitly confirm it, and an ad budget change is possible only as a card a person approves. If your revenue is not in a database we can reach, send the events instead.
| Source | What is read | Access |
|---|---|---|
| MySQL | Rows in your tables become funnel events, identity, attribution and revenue | read-only |
| Postgres | The same row-to-event mapping as MySQL, across any schema | read-only |
| MongoDB | Documents become funnel events, addressed by dot-notation paths | read-only |
| First-party event tracking | Funnel events you send from the browser or your backend | you send, we store |
| Google Analytics 4 | Sessions and engagement by channel and landing page, daily | read-only |
| PostHog | Sessions, mapped events and session replay, on one API key | read-only |
| Google Ads | Spend, impressions and clicks at campaign, ad group, keyword and ad grain | read + human-approved proposals |
| Meta Ads | Daily campaign spend, impressions and clicks | read + human-approved proposals |
| Microsoft Clarity | Recording links plus rage-click and dead-click counts by page | read-only, your token |
| Semrush | Rank, organic keywords and traffic estimates, weekly | read-only, your key |
| Google Tag Manager | Live container version — is the GA4 tag present and unpaused | read, plus publish on explicit confirm |
Each row has its own page — what is pulled, what is never touched, and how to connect it: all integrations.
How long until the first verdict?
Spend, funnel and revenue appear within an hour of connecting. A payback verdict waits for a cohort old enough to judge — typically two to three weeks. Until then the curve is drawn without calling a winner, because calling it early would be a guess wearing a chart.