Docs
De docs doorbladeren

Affiliate program

How the Privatus Analytics affiliate program works, from your referral link to the 30-day hold, Wise payouts and account credit, with cookieless attribution.

Als Markdown bekijken

Earn 25% of every payment (after discounts, excluding tax) from the customers you refer, for 24 months from each customer's first payment.

Apply#

Account settings → Affiliate program. The form asks for:

Field What to enter
Website or channel Where you'll promote Privatus Analytics. Required
How will you promote Privatus Analytics? For example a newsletter, a blog, videos or client work. Required, up to 2,000 characters
Referral code Optional. 3 to 24 letters, digits or hyphens. Left blank, we suggest one from your name
How should we pay you? Wise (with the email address of your Wise account) or Account credit (with a workspace you own). See Getting paid

We review applications within two business days and email you the result. If we can't approve it, the email says why and you can apply again. You can have one application, so a pending or approved one can't be sent again.

Once approved, your page shows a link like https://privatusanalytics.com/r/your-code. It opens the sign-up page. People can also enter your code, exactly, in "How did you hear about us?" when they create their first workspace.

Signup box#

A signup form for your own site. Visitors get a Privatus Analytics tracking code for their site without leaving your page, and each new account is credited to you like a link referral.

Account settings → Affiliate program → Signup box has a live preview and your code. Pick a theme, then paste one of these where the box should appear.

Theme What it does
auto Matches the visitor's device (the default)
light Always light
dark Always dark

The script fits the box to its content, supports prefill and tells your page when someone signs up:

html
<div data-privatus-signup="your-code" data-theme="auto"></div>
<script async src="https://privatus.page/js/signup-box.js"></script>

A plain iframe works on sites that don't allow scripts. It has a fixed height and no prefill:

html
<iframe src="https://privatus.page/embed/signup/your-code?theme=auto"
        title="Privatus Analytics signup" allow="clipboard-write"
        style="width:100%;max-width:480px;height:640px;border:0"></iframe>

What the visitor does#

  1. They enter their first name, email and the domain of their site, accept the Terms and the Privacy Policy, and choose whether they want product emails.
  2. The box shows their tracking code with a copy button and a Check installation button. Pageviews are counted from this moment.
  3. We email them a one-time link to their dashboard, which stays good for a week. Opening it creates their account (or signs them in if they already have one) and puts the site in it. Submitting the form again with the same email and domain sends a new link.

A signup that nobody opens the link for is removed after 7 days, with everything it collected. Until then it never stops someone else from adding the same domain to their own account.

Prefill for signed-in visitors#

If your visitors are signed in on your site, add what you already know to the element. They can still change every field, and they always tick the terms themselves.

Attribute Fills in
data-first-name First name
data-email Email address
data-domain The domain of their site, like example.com

Two more attributes control the box itself:

Attribute What it does
data-theme auto, light or dark. Anything else is treated as auto
data-title The accessible title of the frame. The default is "Privatus Analytics signup"

The script hands these values to the box inside the visitor's browser. They are never put in a URL, and we store nothing until the visitor submits the form.

React on your page#

The script fires these events on the element, and they bubble:

Event Fires when
privatus:signup:submitted The form was submitted and the tracking code is shown
privatus:signup:installed The tracking code was found on the visitor's site
privatus:signup:receiving The first pageview arrived
js
document.addEventListener("privatus:signup:submitted", () => {
  // show your next step
})

The events carry no name, email, domain or site id.

Count signups as a conversion#

The box is a frame from another site, so the tracker on your page cannot see its form. Automatic form tracking and data-privatus-event do not fire for it. If your site uses Privatus Analytics, send an event yourself when the box reports a signup:

js
document.addEventListener("privatus:signup:submitted", () => {
  privatus.track("Signup box", { placement: "pricing" })
})

submitted fires once per box, after we accepted the signup. A form that fails its checks fires nothing. Create an event goal for the event name, and you can use it as the goal of an experiment on the page that holds the box.

With the plain iframe#

The plain iframe has no script, so it fires no events on your page. The frame still posts messages to its parent window, and you can listen for them:

Message Sent when
{ type: "privatus:signup:state", state: "submitted" } The form was submitted and the tracking code is shown
{ type: "privatus:signup:state", state: "installed" } The tracking code was found on the visitor's site
{ type: "privatus:signup:state", state: "receiving" } The first pageview arrived
js
let counted = false
window.addEventListener("message", (event) => {
  if (event.origin !== "https://privatus.page") return
  const data = event.data || {}
  if (data.type !== "privatus:signup:state") return
  if (data.state !== "submitted" || counted) return
  counted = true
  privatus.track("Signup box")
})

Always check event.origin, because any frame can post a message to your page. A message can arrive more than once, so count it once. The frame also posts privatus:signup:ready and privatus:signup:height, which the script uses to prefill and size the box.

What counts#

  • 25% of each net payment: after discounts, excluding tax.
  • Pro and Business payments from a workspace created by someone who signed up through your link or your signup box, or entered your code, for 24 months from that workspace's first payment.
  • A signup box credits you for new accounts. Someone who already had a Privatus Analytics account and uses your box gets their site, but is not a referral.
  • Refunds and chargebacks are taken back from the commission. A reversed chargeback restores it.
  • Self-referrals aren't allowed. A referral of yourself, or of someone at your own email domain, is flagged and earns nothing unless we approve it after a review (shared webmail domains like gmail.com are fine).
  • While an affiliate account is suspended, new referrals and commissions aren't recorded.

Getting paid#

Each commission is on hold for 30 days, then becomes payable.

  • Wise: once you have $50 or more payable we send it to the Wise account email you gave us and email you the transfer reference.
  • Account credit: payable commissions come off the next renewal of your own subscription automatically, with no minimum. You pick a workspace you own, and it needs a paid subscription. We add as much as the renewal can absorb and the rest waits for the following one. A subscription can hold only one discount, so a workspace in a discount program can't take credit: choose Wise or another workspace. Credit also waits while the subscription bills in a different currency than your commissions. Your affiliate page tells you when credit is waiting and why. Switch to Wise at any time.

Change the method under Payout details on your affiliate page.

Each row in your commission list has a type and a status:

Type Meaning
commission 25% of a referred customer's payment
clawback A refund or chargeback, as a negative amount
reversal A chargeback that was reversed, as a positive amount
Status Meaning
pending On hold for the 30 days
approved Payable
paid Included in a payout
void Canceled, for example by a full refund during the hold

Your page and the API show signups, paying customers, what's on hold, payable and paid, and every commission and payout. The Signup box page shows the box's own numbers: signups waiting to confirm, confirmed signups and paying customers.

API and MCP#

  • GET /account/affiliate.json (MCP tool affiliate_get): status, referral link, stats and balances.
  • GET /account/affiliate/commissions.json (MCP tool affiliate_commissions_list): commissions, paginated, with an optional status filter (pending, approved, paid or void).
  • GET /account/affiliate/signup-box.json (MCP tool affiliate_signup_box_get): your signup box code for a theme (auto, light or dark) and the box's numbers.

Applying and changing payout details need a signed-in browser.

How referrals are attributed (privacy)#

The program follows the same rules as the product: no tracking cookies, no fingerprinting, no click logs.

  • /r/your-code sets no cookie and records nothing. It only redirects to the sign-up page with the code in the address.
  • The sign-up page keeps the code in its own session cookie, which ends when the browser closes, and in the sign-up link we email. The code is dropped when the account is created.
  • We then store which affiliate referred the new account and, later, its workspace. That's all. We never store the visitor's IP address, device or the pages they viewed.
  • You see counts (signups and paying customers) and commissions, never who your referrals are.

The signup box follows the same rules:

  • It sets no cookie on your site or ours, and uses no storage.
  • Until the visitor opens their emailed link we keep no account, no email address and no name: only the site they asked for, and a keyed hash of the address so the right person can claim it. The first name and the email choice travel inside the signed link.
  • The visitor's IP address is used in memory for the bot check and rate limits, and never stored.
  • Your page learns that a signup happened, never who signed up.