Sources, campaigns, launches and instances
Growth answers one question - which marketing channels produce revenue that lasts - and it uses four nested words to do it. They are easy to mix up, so this page defines each one and says what it is actually for.
The four levels
- Source
- A traffic origin:
product_hunt,google,twitter. Taken from UTM parameters or referrer data on each visit and signup. This is the broadest useful unit and the one the leaderboard is built on. - Campaign
- An optional sub-label under a source, for splitting one channel into more specific efforts - two different Google Ads campaigns, two separate newsletters. A source works perfectly well with no campaigns at all.
- Launch
- An optionally pre-registered record that gives a source/campaign pair a friendlier display name and a cost figure. It is purely cosmetic plus cost tracking - not registering one loses you nothing except the nicer label.
- Instance
- One occurrence of a repeated channel under the same source and campaign - a single Product Hunt attempt, one email batch. This is what lets you compare your second launch against your first rather than blending them into one average.
How a visit gets a source
The Growth script tag classifies each visit automatically, in roughly this order of preference:
- Explicit UTM parameters -
utm_source,utm_campaignand friends, if present. - Click IDs - ad IDs (
gclid,msclkid) and social IDs (twclid,fbclid). - Referral parameters -
ref,via,aff. - The referrer - grouped into channels like organic search, social, and known referral sources such as Hacker News or Product Hunt.
Classification happens per visit, not per visitor. If someone lands organically and then clicks a link carrying a different source a few minutes later, that new source records a second visit rather than overwriting the first - so both channels are credited for the click each actually drove. It is the source that has to change, not the campaign: a later link with the same utm_source and a different utm_campaign stays part of the same visit, and so does a direct hit part-way through. See Events for what that means for your usage count.
Unidentifiable visits are called direct, not guessed
When none of the above yields a channel, the visit is counted as direct. Growth deliberately does not force it into a bucket - a slightly larger direct number is more honest than a channel figure inflated with visits that may not belong to it.
First touch vs. last touch
- Last touch
- The source credited with the visit that immediately preceded the action. It answers "what brought them back this time?"
- First touch
- The very first source ever recorded for that visitor. It answers "what made them aware of us at all?"
Growth records both, and shows them side by side, because either one alone misleads. Last touch over-credits channels that sit close to the decision - direct visits and branded search - and under-credits the content or social post that did the discovery work weeks earlier. Reading the two together tells you which channels start relationships and which close them.
Both cookies are shared across your subdomains, so someone who lands on your marketing site and signs up on a separate app subdomain keeps their original attribution instead of appearing as an internal referral.
Both are cookies, though, so both depend on Chartsy being allowed to store one. For a visitor it stores nothing for - an EEA/UK visitor on a site with no consent banner wired up, for instance - there is no first touch to carry forward, and every visit they make is classified on its own.
What attribution needs to work
Three things, in order: the script tag for visits, signup tracking to tie a person to a channel, and a connected Stripe or Paddle account to tie that person to money. The first two both record events - visits and signups each count toward your usage; connecting billing does not. With the first two only, you get traffic and signups by channel; every revenue figure stays empty rather than being estimated until billing is connected.


