Revenue
Grow → Revenue shows which channel last-touched a conversion, then whether paid acquisition is paying back.
Email, Paid, and Other are last-touch credit from the same conversion ledger. Dollars appear when the conversion has an amount; otherwise you see the count. Payback, Paid LTV, and CAC stay on the page as supporting ads math.
It is not a Stripe Dashboard clone, and it is not a multi-touch attribution explorer.
What you see
- Email / Paid / Other for the selected date range (default 30 days)
- Supporting payback, Paid LTV, CAC, ARPU when those pipes exist
- A Trend chart of verified CAC vs current LTV — same date range controls as Acquisition → Analytics
- A channel table (Paid CAC; Email conversions when they exist)
- Named gaps when Stripe, Ads, or identify is missing — those do not hide Email wins
Paid LTV only counts Stripe customers who have an ad-click first touch on their contact. Company-wide LTV is the wider Stripe book.
What to connect
| Need | Where |
|---|---|
| Stripe | Settings → Integrations → Stripe |
| Google Ads spend | Settings → Integrations → Google Ads, then Grow → Paid |
| Ad click → customer | Tracking snippet + stx.identify({ email }) after signup |
Connect order does not matter. The scoreboard fills as each piece lands.
Identify after signup
stx.identify({ email: user.email })Call this when the user is signed in (signup and ideally login). It links the anonymous visit — and any Google click id on it — to the contact. Names and plan belong on POST /contacts; identify only needs email for this stitch.
If Revenue says identify is missing, wire that call (or ask Ranla to open a PR when GitHub is connected).
Paid vs Revenue
| Page | Job |
|---|---|
| Grow → Paid | Run the ad account — spend, drafts, approvals |
| Grow → Revenue | What email and ads last-touched, and whether paid acquisition pays back |
Next steps
- Google Ads — connect and operate Paid
- Instrument your product — snippet + events
- On-site messages — capture before signup