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, and Ad set / Ad group if 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.