SaaS Revenue Essentials


This guide will use the following format:

Example Recommended Event
When to trigger the event and any other contextual information

  • Recommended property to set at the same time an event triggers
  • Recommended property to set at the same time an event triggers
  • Etc.

Subscription Billed

Triggered when a customer is successfully billed for their payment.

  • Subscription Billing Amount: Numeric. The amount that the customer paid. You do not need to include the currency symbol.
  • Subscription Billing Length: Numeric. Indicates in months how frequently the customer is being billed. Fractional months are accepted too.
  • Subscription Plan Level: Text. Describes what plan the person is on.

Example 1: Joe pays $50/mo for your Small Plan.

# Example 1
KM.identify( <Joe_Identity> );
KM.record('Subscription Billed', {
  'Subscription Billing Amount' => 50,
  'Subscription Billing Length' => 1,
  'Subscription Plan Level' => 'Small' });

Example 2: Ted pays $1200/year for your Large Plan.

# Example 2
KM.identify( <Ted_Identity> );
KM.record('Subscription Billed', {
  'Subscription Billing Amount' => 1200,
  'Subscription Billing Length' => 12,
  'Subscription Plan Level' => 'Large' });

Subscription Canceled

Triggered when a customer cancels their plan and stops paying you.

  • Subscription Cancelation Reason: Text. Describes why the customer canceled.

Example: Joe cancels his account because he doesn’t have the budget anymore.

# Example
KM.identify( <Joe_Identity> );
KM.record('Subscription Canceled', {
  'Subscription Cancelation Reason' => 'No Budget' });

Subscription Upgraded

Triggered when a customer upgrades to start paying you more money.

  • Subscription Billing Amount: Numeric. The new amount that the customer is paying. You do not need to include the currency symbol.
  • Subscription Billing Length: Numeric. Indicates in months how frequently the customer will be billed. Fractional months are accepted too.
  • Subscription Plan Level: Text. Describes the new plan the person is on.

Example: Joe upgrades his plan from $50/mo Small plan to a $100/mo Medium plan.

KM.identify( <Joe_Identity> );
KM.record('Subscription Upgraded', {
  'Subscription Billing Amount' => 100,
  'Subscription Billing Length' => 1,
  'Subscription Plan Level' => 'Medium' });

Subscription Downgraded

Triggered when a customer downgrades to start paying you less money.

  • Subscription Billing Amount: Numeric. The new amount that the customer is paying. You do not need to include the currency symbol.
  • Subscription Billing Length: Numeric. Indicates in months how frequently the customer will be billed. Fractional months are accepted too.
  • Subscription Plan Level: Text. Describes the new plan the person is on.

Example: Joe downgrades his plan from $100/mo Medium plan to a $50/mo Small plan.

KM.identify( <Joe_Identity> );
KM.record('Subscription Downgraded', {
  'Subscription Billing Amount' => 50,
  'Subscription Billing Length' => 1,
  'Subscription Plan Level' => 'Small' });

Section 2. How do I import previous transactions?

Please refer to our page on Importing Data. The properties are somewhat unique, so you’ll most likely find yourself writing a little code to work with your backend servers or payment platform’s API.

Again, your best bet will be to Import the Past Data. Chances are you have a way to refer back to who was billed when…with that information, you can use the appropriate method of importing data to set the new properties you haven’t been tracking, like “Subscription Billing Length”.

Is anything on this page unclear? Suggest edits on Github!