We’ve got a SaSS business where there are monthly subscriptions. At any time, a customer can upgrade or downgrade and we handle the changes as you’d expect even if it happens mid month. There is fundamental questions on how to model this in amplitude, and I’m shocked there is no guidance that I can find in community or help docs.
It’s highly likely I’ve missed something, so if I have, happy to get pointed to definitive guides for this!
I see in the Node.js SDK the Revenue tracking calls:
https://www.docs.developers.amplitude.com/data/sdks/typescript-node/#revenue-tracking
This is the example:
import { Revenue, revenue } from '@amplitude/analytics-node';
const event = new Revenue()
.setProductId('com.company.productId')
.setPrice(3.99)
.setQuantity(3);
revenue(event, {
user_id: 'user@amplitude.com',
});
That example makes sense.. kind of. What i’m understanding here is that you have discrete revenue event to account to help power revenue charts like the Revenue LTV.
Here are 3 scenarios that are super common in subscription businesses:
Scenario 1: New user subscribes to paid plan
User signs up and pays for a plan as a new subscriber.
Scenario 2: Paid user downgrades to cheaper paid plan
User downgrades mid month / mid billing cycle. How most services, including us, handles it is like this: User retains access to their existing higher priced paid until end of month, but then at 1st day of next month, they are billed for their cheaper plan. (e..g $20 vs $10/month).
Scenario 3: Paid user upgrades to more expensive paid plan
Same as scenario 2, except at mid month they upgrade to higher plan (so going from $10 to $20/month). We recognize the price difference, give them credit for the remaining time on old plan (so $5) and then charge them prorated price of the new plan (half of month of $20/month plan is $10). So the net price they pay is $5 for this month. On 1st of next month they pay $20.
Given these scenarios, my mind is melting in how to model this.
- If we just do server side Revenue() calls, there is no event tracked specifically for the upgrade and downgrade and this seems to be a problem. Even though we can see “Revenue Events” in charts, it’s so non specific what it was (e.g. Subscription Upgraded vs Subscription Downgraded vs Subscription Renewed).
- Given this, my thought was that we fire events for the plan upgrade/downgrade/renewal but do not attach any revenue properties to the events. Instead, we fire those events, but also fire Revenue() calls to provide the real accounting of revenue impact.
- Assuming this is correct, can anyone advise on how specifically to model the revenue() call for Scenario 3? It’s a mid-month upgrade, and there doesn’t seem to be an obvious “revenue_type” property to define. Is this something we cusotmize within the “properties” JSON Object?