Skip to main content
At Cello, we’re committed to building a robust and reliable referral program with accurate attribution tracking. In addition to the implemented conversion tracking, Cello also detects and recovers missed attributions to avoid gaps in attribution data.

How it works

When a user boots the Cello widget for the first time, we check for the presence of a Cello referral code (ucc) stored as a first-party cookie. If one is found, we treat this as a potential signup. However, if the referral code (ucc) maps back to the user themselves, it’s not considered valid. If you’re using our Stripe or Chargebee webhooks, Cello uses the user’s provided email to identify their dataset and link it to related transactions.

How to find these referrals in the Cello Portal

The detected referrals are marked with the shortcode AA in the type column of the New User Signups and New User Purchases pages. The issuing of a reward for a referral that was tracked by Cello’s auto-attribution is, by default, delayed by 7 days. New User Signups with AA type markers New User Purchases with AA type markers

Help us to improve accuracy

To improve the accuracy for auto-detected attributions you can make two minor enhancements :
  1. Provide new user id and organization id during the creation of the Stripe or Chargebee customer. Cello will use this information to match the Customer to the new user.
  2. Provide the signup date when booting the Cello Widget as a parameter of the JWT token.

How to provide new user id and organzation id via metadata?

If you’re using our Stripe or Chargebee webhooks, you can increase the accuracy of the auto-attributions by always adding the new_user_id and the new_user_organization_id to the metadata of your customer object. Example Stripe
const stripe = require('stripe')('sk_test_51KiCYYCSMQAUBF...');

const customer = await stripe.customers.create({
  metadata: {
			new_user_id: "xcsdad", // product user id of the new user
        new_user_organization_id: "123456" // organization id of the new user
			}
});
Example Chargebee
var chargebee = require("chargebee");

chargebee.configure({site : "getmoonly-v3-test", api_key : "test_jqXGuQLkBHUSR2PM0qgUV21W1VqSFJIU"});
chargebee.customer.create({
   meta_data: {
			new_user_id: "xcsdad", // product user id of the new user
        new_user_organization_id: "123456" // organization id of the new user
			}
})

How to provide the signup date?

By providing the signup date for each user during user authentication, the accuracy will increase.
const tokenPayload = {
  productId: 'REPLACE_WITH_PRODUCT_ID',
  productUserId: 'REPLACE_WITH_CURRENT_USER_ID',
  orgIds: ['ORG_A', 'ORG_B'],
  signupDate: '2022-10-05T14:14:34Z'
};
const secret = 'REPLACE_WITH_PRODUCT_SECRET';

const token = sign(tokenPayload, secret, {
  algorithm: 'HS512',
});

Org-level Support for auto-attribution

If you are using org-level attribution for your referral program, it’s necessary to provide a list of assigned orgs for each user in JWT during the user authentication.

const tokenPayload = {
  productId: 'REPLACE_WITH_PRODUCT_ID',
  productUserId: 'REPLACE_WITH_CURRENT_USER_ID',
  orgIds: ['ORG_A', 'ORG_B'],
  signupDate: '2022-10-05T14:14:34Z'
};
const secret = 'REPLACE_WITH_PRODUCT_SECRET';

const token = sign(tokenPayload, secret, {
  algorithm: 'HS512',
});