UTMs on Hotmart and Kiwify: why they go on the checkout link
Updated by the UTM Builder team at Limner.
Because the sale is recorded by the checkout, not by your sales page. Hotmart and Kiwify are Brazilian platforms for selling digital products such as online courses, and the checkout runs on their side. If the buy button points to a fixed link, the buyer reaches the checkout with no parameters at all, and the source of the sale is lost, even with a perfect UTM on the page before.
What Hotmart says
For a sales page you host yourself, such as a WordPress site, Hotmart’s help explains that landing on the page from an ad with UTMs doesn’t guarantee that this information is passed along. For the source to be read, the customer has to click the button to the checkout through an official link that already carries the UTM parameters.
Other points from the same page:
- The question mark goes in only once. If the link already has a parameter, such as
?checkoutMode=10, the UTM goes in with&. More than one?corrupts the URL, cancels tracking and gets in the way of reaching the checkout. - Ad platform macros, such as
{{campaign.name}}, can be used, as long as they don’t produce special characters that break the URL. - Structured UTM parameters are not passed in the webhook. The suggested alternative is the
xcodparameter.
To see the source of each transaction, Hotmart recommends adding its own src and sck parameters.
What Kiwify says
Kiwify accepts src, sck, utm_source, utm_medium, utm_campaign, utm_term, utm_content, s1, s2 and s3 on the checkout URL and stores the information in a cookie for the purchase. For tracking to work from your sales page, that page’s URL has to be registered in the product’s links. Affiliates add &src= straight to their own link, with no question mark.
How to fix it in practice
- Ad that links straight to the checkout: build the checkout URL with the UTM and check that there’s only one
?. - Ad that links to the sales page: the buy buttons have to pass along the parameters that reached the page. To do that, use a script on the page that copies the query string of the current URL to the checkout links. Eduzz, another Brazilian platform, documents this script as mandatory, for example.
- Test with a real purchase or the platform’s test mode and check that the source shows up in the sales report.
What about GA4?
GA4 on your sales page reads the UTM as usual. What doesn’t arrive on its own is the sale: the checkout lives on the platform’s domain. That’s why the number of sales per campaign in GA4 and on the platform rarely matches, and the platform’s report is the source of truth for sales.