Launch a pay-as-you-go business model
PayGo (pay-as-you-go) refers to a consumption-based pricing model where businesses pay only for the software resources or features they use in arrears, instead of committing to a fixed subscription or long-term contract. This model has become increasingly popular, especially in cloud-based solutions and SaaS platforms, due to its flexibility, scalability, and cost-efficiency. Typically, customers sign up directly on a company’s website, often at the list price, without needing to talk to a company representative. Given the limited friction in accessing the product, PayGo motions are ideal for product lines where customer growth is a key goal.
PayGo motions are used by companies at varying scales:
- New startups launching their first product
- Public companies maintaining existing B2C product lines
- Transforming companies augmenting their legacy subscription business models with a new usage product
In this guide you'll learn how to implement a PayGo business on Metronome.
Use case
The fictional company used in this guide, called AutoSales, has just come out of stealth and wants to sell on the market for the first time. This is a sales-tech company focused on automating top-of-funnel processes to help companies identify and qualify leads faster. AutoSales has four core products:
-
Automated email generation detects visitors on a website and automatically sends them an email offering to connect with a sales representative.
-
Automated reminders scrapes an email inbox and flags emails that should be followed up on. This might be because a prospect hasn’t responded after X days or because a prospect reached out but hasn’t received a reply.
-
Spreadsheet updates automatically creates a tracker in a spreadsheet that captures prospect information and communication history with them.
-
Slack® integration spins up a Slack room for a qualified prospect.
The company initially offers three models: Basic, Better, and Best, which price and package their products differently. Each package is an example of a PayGo configuration.
Basic | Better | Best |
---|---|---|
Email generation at $0.10 per email | Email generation at $0.10 per email | Email generation at $0.10 per email |
Spreadsheets updates at $0.15 per row update | Spreadsheets updates at $0.15 per row update | Spreadsheets updates at $0.15 per row update |
Automated reminders at $0.20 per reminder | Automated reminders at $0.20 per reminder | |
Slack integration at $0.10 per Slack room | Slack integration at $0.10 per Slack room | |
Configurable AI model to personalize automations at $10 per month |
Set up Metronome
For AutoSales to implement pay-as-you-go, the first step is to get Metronome set up. Here's what you need to set up to enable this sales motion:
- Events data streaming into Metronome to track the usage of each product per customer.
- Five products created in Metronome. For AutoSales, they have five products, where four represent each of the usage products, and the fifth represents the monthly fee for configuring an AI model. To expedite the provisioning process, they should tag products that are only on the Better and Best bundles with a
premium
tag. - One rate card For AutoSales, their rate card has the standard pricing for all four usage products with
entitlements
set totrue
. You can later disable access to certain products based on the plan the customer chooses. - (Optional) Stripe integration For this example, AutoSales uses Stripe for their invoicing and payments, which is common for Metronome customers implementing a PayGo motion. However, end invoicing and payment workflows can be configured to other destinations.
Sign up customers
Looking ahead in the fictional scenario, AutoSales has officially launched their product and has their listing live on their website. Within minutes, they have a customer signed up for their Basic plan.
To execute an initial customer sign-up in Metronome:
-
Create the customer in Stripe.
As the payment processor, Stripe needs to have the credit card information of the customer. After the customer signs up on their website, AutoSales needs to create the customer in Stripe and add the credit card as the preferred payment method. To learn how to do this, go to Stripe’s docs.
By creating the customer in Stripe first, the Stripe customer ID can be added to the Metronome object. This enables Metronome to map the entities between both systems and automatically invoice the customer.
-
Create the customer in Metronome.
See this example payload that’s sent to the
/customers
endpoint:curl https://api.metronome.com/v1/customers \
-H "Authorization: Bearer <TOKEN>" \
-H "Content-Type: application/json" \
-d '{
"ingest_aliases": [
"team@customer.com"
],
"name": "First Customer",
"billing_config": {
"billing_provider_type": "stripe",
"billing_provider_customer_id": "stripe001",
"stripe_collection_method": "send_invoice"
}
}'The response to this call returns the Metronome
customer.id
, needed for the next step. -
Provision the customer with the Basic contract.
Now that the customer exists, create a contract and configure the rate card to match the desired plan. For this new customer, provision the Basic plan. As the Basic plan only includes two out of the four usage products, create an override on the contract to model this.
See this example payload that’s sent to the
/contracts/create
endpoint:curl https://api.metronome.com/v1/contracts/create \
-H "Authorization: Bearer <TOKEN>" \
-H "Content-Type: application/json" \
-d '{
"customer_id": "43ae3f41-480b-412b-9b05-1c4d11169c09",
"rate_card_id": "40c0661e-d3ee-4080-88e7-4d3a7ed619d8",
"starting_at": "2024-10-01T00:00:00Z",
"name": "Basic Contract",
"overrides": [
{
"starting_at": "2024-10-01T00:00:00Z",
"entitled": false,
"applicable_product_tags": [
"premium"
]
}
]
}'This returns the generated
contract.id
. It’s useful to store this information in an internal database for use later on, like for upgrades. As the request didn’t specify any billing schedule, the usage invoice defaults to bill monthly. -
Provide access and start billing.
Now that the contract exists in Metronome and the customer is linked to its Stripe counterpart, the customer can have access to the service. Metronome begins billing them automatically!
Upgrade customers
Looking ahead, AutoSales’ customer loves their experience and wants to upgrade to the Best bundle to take advantage of the additional features. From AutoSales’ website, they can self-serve this upgrade. They sign up for 6 months and reevaluate from there.
For AutoSales to execute this in Metronome, they need to:
-
End the current contract.
Using the stored
contract.id
from the previous phase, end the current contract for the customer using the/contracts/updateEndDate
endpoint:curl https://api.metronome.com/v1/contracts/updateEndDate \
-H "Authorization: Bearer <TOKEN>" \
-H "Content-Type: application/json" \
-d '{
"customer_id": "43ae3f41-480b-412b-9b05-1c4d11169c09",
"contract_id": "19nm9k87-754b-423p-4m33-2s5q34377v12",
"ending_before": "2025-02-01T00:00:00Z"
}' -
Create a new contract for the Best bundle.
Now that the previous contract has ended, provision access based on the terms of the Best offering:
curl https://api.metronome.com/v1/contracts/create \
-H "Authorization: Bearer <TOKEN>" \
-H "Content-Type: application/json" \
-d '{
"customer_id": "43ae3f41-480b-412b-9b05-1c4d11169c09",
"rate_card_id": "40c0661e-d3ee-4080-88e7-4d3a7ed619d8",
"starting_at": "2025-02-01T00:00:00Z",
"ending_at": "2025-08-01T00:00:00Z",
"name": "Best Contract",
"scheduled_charges": [
{
"product_id": "609e4cf2-6ea2-4b07-a46c-6596f041b69e",
"schedule": {
"recurring_schedule": {
"starting_at": "2025-02-01T00:00:00Z",
"ending_before": "2025-08-01T00:00:00Z",
"frequency": "monthly",
"amount": "10000",
"amount_distribution": "each"
}
}
}
]
}' -
Provide access to Best features and bill the customer.
Once the new contract is in place, the customer can start using the new products offered by the Best bundle. The new
contract.id
must be saved internally. As before, the customer gets billed monthly in Stripe.