↖ Blog index

Comparing Octane with Stripe for Usage-Based Billing

Salem Hilal


If you’re reading this, you’ve likely heard of Stripe, the payments-as-a-service company. Stripe Billing, their subscriptions and invoices product, is used by businesses of every shape and size, from mom-and-pop shops to multinational corporations. If you run a company and you need to collect money from a customer, you probably reach for Stripe Billing first.

While Stripe Billing is a good fit for anyone, it may not be the best fit for everyone. Stripe Billing is a bit like a Leatherman multitool — it’s incredibly useful in all sorts of situations. But if you wanted to slice bread, would you reach for a Leatherman?

At its heart, Stripe Billing is a billing platform that accepts usage data, while Octane is a usage platform that facilitates billing. While the difference may seem subtle, it has important implications. This post is all about how Stripe Billing and Octane differ, and what scenarios might make our approach to billing a better fit for a business.

Octane is built for usage first

One of Octane’s core design decisions is to make it as easy as possible to collect usage data. We aim to be the single source of truth for the usage data of a product, which enables us to provide accurate billing, forecasting, and analysis. Recording and making use of timeseries usage data is, unsurprisingly, the core part of how we do everything from calculating invoicing to forecasting future usage. Stripe Billing takes a different approach, treating usage data as an input to their invoicing calculations rather than as data that they are responsible for. This strategy has a few important implications.

Maintaining usage data takes special care — recording timeseries data quickly and reliably, while still making it available for analysis and billing calculations, requires special infrastructure and implementation considerations. While Stripe Billing can calculate an invoice using usage data, it is up to you to maintain your own system for recording customer usage. They similarly encourage bulk uploading of usage data on a daily basis to avoid their rate limits. In other words, Stripe Billing facilitates a hand-off of pertinent usage data, but won’t act as a real-time hub for recording and tracking usage over time.

Octane’s usage is decoupled from billing

At Octane, we made the unique decision to decouple usage data from customer subscriptions. Since we treat usage data as a first-class citizen, we wanted to allow it to be recorded, regardless of where it came from or whether it was being billed on or not. By comparison, Stripe Billing only accepts usage data you plan on charging for. Any data that doesn’t pertain to the current billing period is considered invalid, and if a billing period is ended early, unbilled usage data is not billed for.

Our approach enables us to support many kinds of usage-based billing that would traditionally be complex. For instance, by accepting usage regardless of when it occurred, we can support billing on usage collected away from network connectivity, like in an air-gapped security system or an autonomous vehicle. 

We can also collect usage for something that isn’t yet part of a pricing strategy. If you might bill on some feature in the future, there’s no reason not to measure it anyways. We can analyze usage for a specific measurement, forecast usage for a group of customers, and even replay any usage data we have using hypothetical price plans — something that’s infinitely useful for companies still experimenting with their pricing model. And should you ever need direct access to your usage data, we make querying for it simple and uncomplicated as well. Stripe Billing only provides access to usage data on a per-subscription basis — aggregating measurement data across subscriptions or among groups of users over time isn’t possible.

Octane makes complex usage-based plans simple

Stripe’s model for usage-based billing is simple: anything you want to sell is a “product”, the way you charge for a product is determined by its “price”, and a customer has access to a product through a subscription. If your business is driven by usage-based billing, this model might prove to be complex. 

Imagine you run a cloud hosting service. You might want to charge customers by how much storage they’re using, how much processing time they’ve accumulated, and how much network bandwidth they’ve taken up. Under Stripe’s model, those are three separate “products”, which means three separate subscription items to keep track of. Usage in Stripe is associated with a specific “subscription item”, which is a combination of a product and its price. This model means that if you want to change the price of a product, you also need to change how your application’s code logs usage for that product. It also means that if you want to offer a subscription with preferential pricing for a particular customer, you have to track usage for that pricing using different logic in your application’s code. On top of that, if you then wanted to offer multiple subscription tiers for groups of products, each with their own limits and rates, you would need to encode those tiers in your application’s logic. All of these exceptions to logging usage can end up making your application extremely complex and can require frequent code changes.

Octane models billing a bit differently. We call something you can measure a “meter”. A meter can be either a counter or a gauge (the latter of which is not supported by Stripe Billing). A counter tracks the number of times something has happened, while a gauge measures the rate of something over time. Gauges are particularly useful for tracking things like storage. If you wanted to calculate the amount of storage a user was using when creating a monthly bill using a counter, you could take a measurement once a second, every second, for the span of a month. That’s extremely cumbersome, both to measure and to store. With a gauge, you can take a measurement any time the amount of storage being used changes, and we’ll calculate the rest.

Meters are added to a price plan, which customers can subscribe to. Price plans are what you imagine when you look at a billing page: “Basic”, “Team”, “Enterprise”, etc. Price plans act like a template for a subscription — they define how each meter is turned into a charge, and can include a flat base rate or plan-specific features like customer support. When a customer signs up for a price plan, we create a single subscription from a price plan which can be customized further to fit a customer (with a preferential discount, for example). This model makes it possible to represent very complex billing strategies, all while still making it extremely straightforward to handle customer subscriptions.

Octane is not just built for engineers

Stripe is well known and loved in the engineering community for having such a good developer experience. Their documentation is impeccable and includes examples, their APIs are easy to use, and they support a number of fantastic features, from a full-featured React component library to a robust webhook system. They designed and built a system that’s owned by engineers first and foremost.

While Octane takes great pains to provide a fantastic engineering experience, our primary goal is to get out of the way of engineers entirely. Put another way, we think that the best engineering experience is as little experience as possible. To integrate with Octane, the only real requirement for an engineering team is to install our SDK, paste a few lines of code anywhere you want to measure something, and then go back to doing more important things. Any other changes to pricing or billing can be performed by the people who actually own the monetization of a business, all without engineering support.

We’re able to make our technical integration so straightforward because we enable the people in charge of pricing and billing to be the ones setting prices, creating price plans, applying discounts, and analyzing usage. Tasks that would traditionally require an engineering team to coordinate closely with a sales team or a finance team can now be done exclusively through our web portal, no technical experience required. Our model for integration simply lets everyone do the job that they’re best at, with as little extra coordination as possible.

Wrapping it up

There is no denying that Stripe Billing is incredibly powerful for many different flavors of billing. We provide first-class Stripe integrations ourselves for customers looking to augment our features with Stripe functionality, like customer management and tax collection. At the same time, Stripe’s solution around usage makes it singularly complicated for businesses seeking to adopt a usage-based payment model. We have found that Octane’s first-class support for usage makes it a much more effective choice for usage-based billing in almost every case, especially for companies with particularly complex billing strategies. To bring the metaphor home: if you’re planning on cutting bread, we make an exceptional bread knife.

Product, Engineering, Tools
↖ Blog index