Recurring revenue is the holy grail of SaaS. So we assume that every SaaS company runs on a subscription model. Most email marketing advice is tailored to these companies.
But what if your company is different?
You might be using some of these "less popular" pricing models:
- Commission-based model. You charge a commission fee on each transaction processed through your platform.
- Credits (pay-as-you-go) model. You sell packages of credits upfront.
- Metered pricing without a subscription. You charge users based on how much they consume.
As a result, you face these challenges:
- The definition of "a paying customer" is fuzzy. Someone might have been a customer in the past, but now they stopped using your product. Who is gone, and who's just waiting until they need your product again? How do you bring them back?
- There's oftentime no specific deadline, such as "trial expiring", that could help you drive conversions.
- You're only making money when they're using your product. So you feel extra pressure to drive user engagement continuously, not just during the onboarding phase.
Please don't allow these challenges to drive you into paralysis.
In this guide, we'll dissect the email marketing strategy for non-subscription products. We'll show you how exactly to set up your customer data, segments, and behavior-based campaigns.
We'll also discuss the special cases:
For more context on SaaS email marketing automation, please first read this guide on SaaS email marketing strategy.
Why email marketing is so important for non-subscription revenue models
In SaaS models like free trial or freemium, your user clearly transitions from a trial to a paid plan, or from a free plan to a paid plan. The email marketing goal is to drive these conversions. Once someone's on a subscription plan, you keep making money consistently unless they churn.
In your case, there's no subscription fee: you get revenue only if they're active. Therefore, your email marketing goal is to drive user activity throughout their lifecycle.
You can't just send one user onboarding campaign and pray for the best. It's not enough.
Let's see how you can do it better, shall we?
Meet the customer activation funnel
Have you tried mapping a lifecycle journey for your product? You've likely discovered that it's super fuzzy.
What do you do then? We recommend thinking about their lifecycle as a customer activation funnel.
Here are the lifecycle segments:
- Customers — anyone who owns an account
- Customers: Activated — users who have done at least one transaction ever (so they paid you at least once)
- Customers: Advanced — users who have done at least X transactions
- Customers: Inactive — users who haven't done any transactions (or used any credits) during the last e.g. 60 days
Once a user joins a segment, you will send them a corresponding email campaign (and likely stop their previous campaign):
- User Onboarding Campaign — make sure new customers have all they need to get started
- Customer Success Campaign — once they've started using your product, continue their education and improve customer success
- Customer Loyalty Campaign — build relationships with your advanced customers
- Reactivation Campaign — win back inactive users so that they start bringing in revenue again
This funnel model is simple but effective. It helps you establish lifecycle "breakpoints" and trigger relevant emails throughout the lifecycle journey.
"The fuzzy funnel"
Sometimes, real life is more complicated than going from 1 to X transactions. So you can make your segments more nuanced and "fuzzy."
Here are some ways.
Refine your definition of an Activated Customer segment:
- Straightforward: customer used the product at least once — transactions > 0
- Nuanced: customer has reached a certain level of usage — e.g. transactions > 10 and projects > 3
Refine your definition of an Inactive Customer segment:
- Straightforward: identify fully inactive customers — has performed transaction_processed = 0 times in the last 60 days
- Nuanced: identify customers with low activity and high churn risk before they halt to a full stop — has performed transaction_processed = less than X times in the last 60 days
What data do you need to track?
First, let's see what customer data you need to track.
You'll be sending these properties and events from your application's back end to your email marketing platform, thus continuously updating each customer profile.
- The total number of transactions processed or credits purchased since they started out: e.g. transactions or credits, depending on your model
- Custom properties that reflect their setup: e.g. stripe_connected (true, false)
- Custom properties for other success metrics: e.g. products (products they're selling) or clients (clients they're working with)
- A custom event that reflects every transaction, so that you can identify active and inactive customers based on their timeline: e.g. transaction_processed, credit_purchased, credit_used
How to organize your segments
Here's how your segment conditions will look:
- Leads — user_id has no value
- Customers — user_id has any value (anyone who has created an account in your system)
- Customers: Activated — transactions > 0
- Customers: Advanced — transactions > 15 (or any other value that makes sense for your business)
- Customers: Active — has performed transaction_processed > 0 times in the last 60 days
- Customers: Inactive — has performed transaction_processed = 0 times in the last 60 days
How to set up your campaigns
See this guide on campaign triggers to see why you need customer data to trigger your email campaigns.
User Onboarding Campaign
This is the most important campaign, as your goal is to take your customer from zero to one in their product usage.
Similar to other onboarding campaigns, we're mixing up general educational messages with specific feature check-ins. You only send such check-ins if they're not using a certain feature yet.
Campaign trigger: user joins segment Customers.
Exit condition: user joins segment Customers: Activated. As soon as the user is using the product, we need to stop this campaign and start a more advanced one.
- Welcome to our product
- How to set up your payments — only send if stripe_connected = false
- Let's set up your first product — only send if products = 0
- Inspiring case study
- Book a call with our tech team — only send if stripe_connected = false
- Top tips on being great at X
- How to troubleshoot your transactions — only send if transactions = 0
- How to optimize your X process
These messages are usually sent 1-3 days apart from each other.
Customer Success Campaign
With this campaign, your goal is to educate your paying customers, tell them about advanced features, and make them more successful. This includes sharing useful content, checking in on advanced features, etc.
Campaign trigger: user joins segment Customers: Activated.
- Did you know that you can use [feature A] — only send if feature_a = 0
- Share a useful piece of content
- Did you know how [feature B] can help you improve your […] — only send if feature_b = 0
- Share a useful piece of content
- Let's book a strategy call to make the most out of your account
- Share a useful piece of content
These messages are less urgent, so you'll be sending them 7-14 days apart from each other. This is your most voluminous campaign and can include as many as 10-20 messages.
Customer Loyalty Campaign
With this campaign, your goal is to build a relationship with customers who have been using your product a lot. This includes sharing useful content, checking in on advanced features, offering upsells, asking for feedback, etc.
Campaign trigger: user joins segment Customers: Advanced.
- Congrats for making great progress. Would you like to schedule a customer success call?
- Here's a promocode to share with your friend
- Can you please share a testimonial?
- Fill out our 5-min feedback survey
- Would you like a free shirt? — invite them to fill out a form with their postal address & size information
- Have you heard of our referral program?
These messages are almost like personal requests, so you'll be sending them 1-2 months apart from each other.
Orchestrate by days of the week. You don't need to stop the Customer Success Campaign to start sending loyalty emails, so make sure these two campaigns are spaced out on different days of the week. E.g. you only send success tips on Wednesdays, and loyalty emails on Sundays.
Your goal with this campaign is to bring back inactive users.
And yes, most likely they have their own business reasons for being inactive — so you shouldn't overestimate the power of emails. However, your revenue does depend on their activity. Please don't leave this opportunity on the table.
Use the exit condition to make sure reactivated users stop receiving your nudges.
Campaign trigger: user joins segment Customers: Inactive.
Exit condition: user leaves segment Customers: Inactive.
- Here's X free credits for your next Y campaign
- Top 5 tips for being great at X
- Inspiring case study
- Top 3 industry challenges & our solutions to them
- We haven't heard from you lately. Is there anything we can help you with? Book a call with our success team
Space these emails 7-14 days apart.
You want to keep the language positive, and focus on content that makes them successful. It's okay to say things like "we've noticed that you haven't been active", but don't overdo it.
Escalating to manual recovery
Use Zapier to escalate inactive customers (or customers with declining activity) after sending them automated emails. This way, your customer success team can reach out to them manually. It's particularly important for your high-value accounts.
To do that, create a new segment:
- Customers: Manual Recovery: haven't done any transactions during the last 90 days + transactions > 50.
We're using 90 days = your inactive criteria 60 days + approximate length of your reactivation campaign. This means automated emails have already been sent, and the user is still inactive.
Transactions > 50 (or any other value that makes sense) means this is a high-volume customer with a good history. So you only escalate the most valuable customers.
Once a user joins that segment, fire a Zapier automation that sends a message to your company's Slack. To make it convenient, include their contact info and a few success metrics.
Addendum 1. Credits-based pricing model
Additional properties to track:
- Total number of credits purchased and used throughout their lifetime — credit_purchased_total, credit_used_total
- Current balance of credits, so that you can help them refill — credit_balance
Additional events to track:
- Customer purchasing credits — credit_purchased
- Customer using credits, which will help you identify active or inactive customers — credit_used
- Inactive Customer segment — credit_used 0 times in the last 60 days
- Credits running low — triggered when credit_balance = X
Make sure you use a recurring campaign for low balance reminders or failed payments. Recurring campaigns are sent every time a trigger happens, vs traditional one-off educational campaigns that are only sent once.
Loadster, a load testing tool, runs on "fuel" credits. Their founder Andy Hawkes shares how they handle their trial credits to stimulate the conversion:
"With our model, the deadline is when your 50 trial units of fuel run out. It's usage-based instead of time-based, but still a deadline that could drive conversions."
Addendum 2. Subscription fee + commission fee
Let's imagine you're also charging a baseline subscription fee alongside a commission fee per transaction. You might also have a free trial for that subscription.
For example, Apotheo is a client management system for fitness professionals, and they charge both a subscription fee and a transaction fee. Their founder Adam Matthews shares how confusing the situation had been:
"I found it hard trying to come up with email marketing ideas. Nobody really talks about it. All the examples didn't fit. I was procrastinating on user onboarding emails anyway, but lack of a good example made it even harder."
In this case, you can still use the funnel model above, but you will introduce additional campaigns around your payments.
Additional properties to track:
- Trial expiration date — trial_expires_at
- Billing plan — billing_plan (basic, premium, etc)
- Monthly or annual billing — billing_interval (monthly, annual)
- Billing state — billing_state (trial, active, past_due, cancelled)
- Trial Expiring Campaign — triggered based on their trial_expires_at
- Failed Payment Recovery Campaign — triggered if billing_status = past_due (learn more about this campaign here)
Additional emails to include in your Customer Success Campaign:
- Upgrade to annual billing — send if their billing_interval = monthly
- Upgrade to the premium plan — send if their billing_plan = basic
Let's get started
Hope this guide brings more clarity for your "unconventional" SaaS model. Once again, your goal is to bring value to the right users at the right time. As simple as that.
Here are other guides worth exploring:
- How to Trigger a Behavior-based Email Campaign
- Email Marketing for B2C SaaS
- How to Save Money on High Volume Email
- One Email List, Multiple Products
— Regards, Jane.