Ad attribution
Hey Glancy puts what you spend on ads next to what those ads bring in: visits, sign-ups, customers and revenue per channel and campaign, with ROAS, CAC, CPA, CPC and CTR. Open Ads in Hey Glancy to see it.
It takes two things: knowing which visits came from ads, and knowing what you spent.
Which visits came from ads
You don't need to track anything extra. On every page view, Hey Glancy reads the page URL and keeps the campaign
details in context.campaign:
- UTM parameters:
utm_source,utm_medium,utm_campaign,utm_term,utm_content,utm_id; - ad click ids that the platforms add on their own:
fbclid(Meta),gclid,gbraid,wbraid(Google),ttclid(TikTok),twclid(X),rdt_cid(Reddit),epik(Pinterest).
A visit counts as paid when it has a platform's click id, or when its utm_source names a platform
(facebook, instagram, google, tiktok…) and it also has a paid utm_medium (cpc, paid_social,
display…) or a utm_campaign. A plain utm_source=facebook link shared in a post stays organic.
So the one thing to do is tag your ad links. Most platforms add click ids automatically; for the rest, use
UTMs, ideally with the campaign name or id as utm_campaign, so visits match the spend for that campaign:
https://shop.example.com/?utm_source=facebook&utm_medium=paid_social&utm_campaign=autumn_sale&utm_content=broad_25_44
Add the ad set's (ad group's) name or id as utm_content too, and each campaign breaks down by ad set: on Meta,
utm_content={{adset.name}}; on Google Ads, utm_content={adgroupid}.
What you spent
In Integrations → Catalog → Advertising, a bucket admin opens the platform and clicks Add ad account under Import spend, once per ad account:
- Connect the account. Hey Glancy pulls the daily spend, impressions, clicks and the platform's own conversion count per campaign and ad set (Meta ad sets, Google Ads ad groups) every 6 hours, re-reading recent days as the platforms update them. Supported: Meta Ads, Google Ads, TikTok Ads, X Ads, Reddit Ads, Pinterest Ads and OpenAI Ads. Each source's form explains which credentials it needs, and they're stored encrypted.
- Or import a CSV exported from the platform. Hey Glancy recognises the usual column names (
Date,Campaign,Amount spent,Cost,Impressions,Clicks, andAd set/Ad groupif you have it). Importing again for the same dates replaces them, so nothing is counted twice.
Conversions and revenue
In Ad spend → Matching you choose:
| Setting | Default | |
|---|---|---|
| Conversion event | Order Completed |
The event that counts as a conversion |
| Revenue property | properties.revenue |
Where the conversion's revenue is (used for ROAS) |
| Customer event | Order Completed |
A person's first one makes them a new customer (used for CAC) |
| Attribution | First touch | Credit the person's first ad visit, or their last one before converting |
| Window | 30 days | How far back an ad visit can be credited |
So the more your conversion events carry a numeric revenue, the more useful the report gets:
glancy.track("Order Completed", { revenue: 49.9, currency: "EUR", order_id: "1093" });
Server-side conversions work too, as long as they're sent with the same user id as the visitor (see Events, users and sessions).
Spend is shown in each ad account's own currency.