Measure real CAC
Report paying customers, not sign-ups, to Google Ads - so the bidding optimises for the clicks that pay.
If the only conversion Google Ads sees is a sign-up, it learns to buy sign-ups. Most trials never pay, so the campaign that looks cheapest per sign-up can be the most expensive per customer. Customer acquisition cost is spend divided by customers who paid, and the paying moment happens in a Stripe webhook days later, where no tag can see it.
This is the short version of wiring that up.
1. Keep the click from the first page
Mount the tracker on your marketing site as well as your app. The click id is only in the URL of the landing page, and the SDK stores it in a first-party cookie shared across your subdomains.
import { BuildBaseTracking } from '@buildbase/sdk/tracking';
<BuildBaseTracking serverUrl={url} orgId={orgId} clientId={siteClientId} />;2. Let Google see the visitors who never answer the banner
Use a regional consent default so Google tags load in every region, with cookies off until consent where the law asks for it. Google then models the conversions it cannot observe instead of losing them.
3. Sign-up and workspace creation carry the click
Nothing to do on SDK 0.0.72 or later: signIn() and workspace creation send the stored click to the server, which keeps it on the user and the workspace.
4. Report the paying moment
Follow Conversions without a browser: create a Paid subscription click-import action in Google Ads, attach the export URL as a scheduled upload, and list your internal accounts.
5. Bid on it
In Google Ads, make Paid subscription a primary conversion for the campaign and your sign-up action secondary. Give it a few weeks of data before switching the bid strategy to target it: a paid conversion is rarer than a sign-up, so the signal is slower but it is the one that pays.
Your CAC for a campaign is then its cost divided by its Paid subscription conversions, and refunds come back out through the adjustments file.