How Tos
Prices & Discounts

Affiliate Tracking

Automatically track affiliate campaigns and split funds with promotional partners.

Tracking third-party affiliate sales

You may be looking to implement Paddle for your online store while using a third-party affiliate network or tracking platform to manage your affiliate sales instead of using our Paddle affiliates tool. If that’s the case, you’ll need to send conversion data back to your platform to calculate commissions for your affiliates.

The data required by your affiliate platform will depend on your provider and your own tracking preferences. As a minimum however, they will typically require:

  • A unique transaction ID
  • The value of the transaction (this is usually net value, and may need to be sent in a fixed currency)
  • When should I send conversion data?
  • If you have a success page redirect then it is recommended to fire your conversion event on the thank you page to ensure that the redirect does not interfere with your tracking pixel.

If you do not have a success page redirect then tracking code can be run within the successCallback block in your function.

Order information can be retrieved either from the checkout data in scope in the successCallback block, or in some cases by polling the order information API after the checkout has completed.

We recommend you send the checkout hash as the unique transaction ID to your tracking platform. This hash can also be provided to the Order Details API to retrieve further details in the thank you page.

To use success callback data in a thank you page instead of within your store page, the fields below can be passed as URL parameters or session storage data to the new page.

  • Checkout hash -
  • Gross checkout value in vendor default currency -
  • Product quantity - data.checkout.product.quantity
  • Product name -
  • Product ID -

Some platforms may instead require net prices or prices in the sale currency.

Can I use server to server tracking?

Many affiliate platforms support sending conversion data via a server to server (S2S) call. To implement this, we’d recommend enabling the payment_succeeded webhook and sending a request from your server on receipt of a new transaction alert.

See the links below for a range of popular third party options for affiliate network management and tracking, and minimal example integrations.

Want us to add your third party network or tracker? Get in touch here.

Paddle Affiliates

Paddle Affiliates has been deprecated for new sellers. If you would like to implement affiliate tracking, please use a third-party affiliate network instead.

To use Affiliates, you’ll need to ensure you have set up Paddle.js by calling the Paddle.Setup() method with your Vendor ID (shown in the code below) on page load for all pages the user navigates to between the affiliate link landing page and the final checkout page:

<script src=""></script>
<script type="text/javascript">
	Paddle.Setup({ vendor: 1234567 });

If your affiliate link landing page has a different subdomain from your final checkout page (e.g. user lands on from the affiliate link but the checkout is on, please include the code below on the landing page to ensure that the affiliate order is attributed correctly (replacing the setDomain value located near the start of the code, with your own domain):

<script type="text/javascript">
	var setDomain = "", getCookies = function() {
	  for (var b = document.cookie.split(";"), c = {}, a = 0; a < b.length; a++) {
	    var d = b[a].split("=");
	    c[(d[0] + "").trim()] = decodeURIComponent(d[1]);
	  return c;
	}, setCookie = function(b, c, a, d) {
	  var e = new Date;
	  e.setTime(e.getTime() + 864E5 * a);
	  a = "expires=" + e.toUTCString();
	  document.cookie = b + "=" + c + ";" + a + ";domain=" + d + ";path=/";
	}, deleteCookie = function(b) {
	  document.cookie = b + "=;expires=Thu, 01 Jan 1970 00:00:01 GMT;";
	}, setPaddleCookies = function(b) {
	  var c = getCookies();
	  Object.keys(c).forEach(function(a) {
	    a.startsWith("paddlejs_") && (deleteCookie(a), setCookie(a, c[a], 30, b));
	window.addEventListener ? window.addEventListener("load", setPaddleCookies(setDomain)) : window.attachEvent && window.attachEvent("onload", setPaddleCookies(setDomain));

The checkout must be invoked using Paddle.js to use Affiliate tracking. It will not work with static checkout links, checkout links generated via the Pay Link API nor will it work using the override parameter on Paddle.js with a custom checkout link.

The maximum attribution window for all affiliate links is 30 days (7 days in Safari following the release of iOS 12.2 and Safari 12.1). This means that any attribution window specified in your Affiliate dashboard that is longer than 30 days will only track orders made in the initial 30 days.

By doing the above you’re automatically integrated with Paddle’s affiliate tracking, with no additional integration work required.

You can manage your affiliate program, commissions, invite and approve affiliates from the Affiliates section of your Paddle Dashboard.

In addition to tracking sales and conversions, Paddle.js will automatically track and attribute the following actions for affiliates:

  • Conversion/Sale (automatic)
  • Unique Visits (automatic)
  • Page Views (automatic)
  • Downloads (requires Download Tracking integration)
  • Audiences/Email Subscribers (requires Audience integration)

Analytics on activity for the above actions being driven by your affiliates is available within the Affiliates section of your Paddle Dashboard.

Using Pay Links to Split Funds

Funds from a transaction can be split with a list of other Paddle vendors by passing the parameter affiliates to the API containing an array of strings composed of a vendor_id and a commission amount for each recipient. See the example below for a better illustration. For example, to give a 25% to vendor 12345 and a 15% split to vendor 54321:

"affiliates": [

See our Pay Link API for full details on usage and required parameters.