Revenue Management: #5 Revenue Recognition in SaaS

Revenue Management: #5 Revenue Recognition in SaaS

If you're building or running a SaaS business, you've probably encountered this. You get paid upfront for a subscription and a one-time onboarding fee, but you end up with confusion about when to consider it revenue. Can I book all of it now? Should I spread it out? What if the customer upgrades or downgrades midway?

How do SaaS companies manage revenue recognition and stay compliant?   

Revenue Recognition Scenarios in SaaS 

In the world of SaaS, a business's billing of its customers has a direct impact on how and when it recognizes revenue. While the five-step model stays the same, the application varies significantly depending on the contract structure, billing frequency, and delivery pattern. Below are the common real-world scenarios that define these differences.


Annual Contract Paid Upfront

Most SaaS companies bill customers annually or quarterly in advance. However, accounting standards do not permit revenue to be recognized when cash is received. Instead, the revenue must be recognized over time, as the service is delivered.


For example, a $12,000 annual contract with $1000 onboarding. $1000 will be recognized immediately during billing, and $11,000 is spread across 12 months.

Monthly Billing

Customers pay monthly for access. There is typically no deferred revenue, and revenue is recognized in the same month the service is delivered.


Example: $500 per month subscription recognized monthly as it is earned.

Bundled Pricing

A typical SaaS contract might include platform access, onboarding, training and support as a part of the contract that gets billing as a bundle. According to ASC 606 and IFRS 15, these are separate performance obligations. The business must allocate revenue to each and recognize it based on how and when each is fulfilled.


Example: A $10,000 contract includes $2000 for setup, $6000 for software access, and $2000 for support. Revenue is recognized based on the timeline of each deliverable.

Amendments & Discounts

Customers often switch plans mid-cycle, receive promotional pricing, or get billed based on the actual usage. These changes introduce variable consideration and require contract modification, revenue reallocation, and recalculations for the remaining service term.


Example: A new allocation and recognition schedule must be set up if a customer moves from a $1000/month plan to a $1500/month plan mid-year.

Usage Based or Tiered Pricing

Some businesses charge based on consumption. For instance, API usage, user access, data storage, etc., they charge the customer again as and when the upper cap is met. This means revenue cannot be recognized until the service is used. Businesses must track usage data and apply the prorated or usage-based revenue rule to stay compliant.


Example: $0.10 per API call. If a customer makes 10,000 calls in March, $1000 is recognized in that month.

These scenarios illustrate the diverse billing models in SaaS and their direct impact on revenue recognition timing. Businesses that manage multiple pricing plans, onboarding services, or usage billing must ensure their recognition strategy aligns with the service delivery. This is where automation becomes critical.

InfoScenario:
You sign an annual contract worth $1,20,000 with a client. The client pays the full amount upfront. The contract includes $20,000 onboarding and $1,00,000 for uninterrupted access to the software for 12 months.  

Zoho Billing for SaaS Revenue Recognition

Zoho Billing simplifies SaaS revenue recognition by allowing the finance team to define a recognition rule based on the product or service offered.

For this kind of business, the Revenue recognition rule should be set in the following way:

There are two deliverables here: one is Onboarding, and the other is software access.

 

For onboarding

For Software Access

Recognition Frequency

Once

Monthly

Recognition Method

One-Time (Daily)

Evenly Distributed

Recognition Time

Period Start

Period End

 

Although the full payment is collected in advance, you cannot recognize the entire $1,20,000 as revenue immediately. Only the onboarding revenue of $20,000 is recognized in the first month. The remaining $1,00,000 must be recognized evenly over 12 months at $8,333 monthly.


Reports in Zoho Billing

If you look at the reports in Zoho Billing after three months of service rendering, you will see,


i) Recognized Revenue Report

Onboarding is complete three months into the contract, and three out of 12 months of application access have been delivered.

Component

Recognized Revenue

Description

Onboarding

$20,000

Fully recognized in Month 1

Software Access

$25,000

$8333/month for 3 months out of ($1,00,000)

Total Recognized

$45,000

Recognized at the end of 3 months

 


ii) Deferred Revenue Report

After three months, the company will have nine months of software access remaining.

Component

Deferred Amount

Software Access

$75,000 (9 months x $8333)

Total Deferred

$75000

 


iii) Revenue Waterfall Report

Months

Onboarding

Software Access

Total

Month 1

$20,000

$8,333

$28,333

Month 2

-----

$8,333

$8,333

Month 3

-----

$8,333

$8,333

Month 4 (upcoming)

-----

$8,333

$8,333

Month 5 (upcoming)

-----

$8,333

$8,333

Month 6 (upcoming)

-----

$8,333

$8,333

Month 7 (upcoming)

-----

$8,333

$8,333

Month 8 (upcoming)

-----

$8,333

$8,333

Month 9 (upcoming)

-----

$8,333

$8,333

Month 10 (upcoming)

-----

$8,333

$8,333

Month 11 (upcoming)

-----

$8,333

$8,333

Month 12 (upcoming)

-----

$8,333

$8,333

 

Idea

Best Practices for SaaS Revenue Recognition 

  • Disaggregate Contract Elements: Break down your subscriptions, onboarding, support, and other one-off deliverables as separate individual obligations.
  • Use Automated Rules: Configure a Recognition Rule based on the billing method and avoid tracking them manually.
  • Handle Modifications: Plan changes and upgrades should trigger reallocation of revenue.
  • Monitor Revenue Waterfall: Visual schedules ensure predictable reporting and forecasting.

 


      Zoho Campaigns Resources


        • Desk Community Learning Series


        • Digest


        • Functions


        • Meetups


        • Kbase


        • Resources


        • Glossary


        • Desk Marketplace


        • MVP Corner


        • Word of the Day


        • Ask the Experts


          • Sticky Posts

          • Community Learning Series | Digest #5 — September 2020

            Dear customers, We're happy to bring you the September edition of our #CommunityDigest! Keep track of your subscription KPIs right from your smartphone: Last month, we enhanced our Android mobile app to help our customers get daily updates on their business health. We got to know from a lot of customers that this has made their job much more easier because they no longer have to keep a reminder to manually check on the previous day's revenue or activations. If you have not downloaded it yet, here's
          • Community Learning Series | Digest #4 - August 2020

            Dear customers, We hope you're staying safe and healthy. I'm happy to bring you the fourth edition of our #CommunityDigest with some brand-new updates from us. 1. Daily Business Updates (for Android users) The Zoho Subscriptions Android app has got a cool new update: You can now get a push notification to your smartphone that lets you know how many activations and cancellations have taken place, and what's the net revenue for the previous day. The best part is, you can tell the app when exactly you
          • Community Learning Series | Digest #3 - July 2020

            Dear customers, We hope you're staying safe and healthy. We're glad to bring you the July edition of our #CommunityDigest. New community members can view our previous newsletters here. This time, we have two major updates and three interesting topics for you: 1. Zoho Subscriptions Developer Community Since the inception of Zoho Subscriptions, our team believed that the recurring billing platform we provide should be able to offer an extensive API library that empowers businesses to automate most
          • Introducing: Community Learning Series | Digest #1 - May 2020

            Dear customers, We hope you are staying safe and healthy. Helping businesses manage their customer subscriptions more efficiently has always been, and always will be, our goal at Zoho Subscriptions. We strongly believe this is possible if we grow together as a community and share what we know with each other. To nurture this shared learning experience, here is our brand-new Community Learning Series! ​ Welcome to the first edition of our digest! Each edition of our community digest includes guides

          Zoho CRM Plus Resources

            Zoho Books Resources


              Zoho Subscriptions Resources

                Zoho Projects Resources


                  Zoho Sprints Resources


                    Zoho Orchestly Resources


                      Zoho Creator Resources


                        Zoho WorkDrive Resources



                          Zoho CRM Resources

                          • CRM Community Learning Series

                            CRM Community Learning Series


                          • Tips

                            Tips

                          • Functions

                            Functions

                          • Meetups

                            Meetups

                          • Kbase

                            Kbase

                          • Resources

                            Resources

                          • Digest

                            Digest

                          • CRM Marketplace

                            CRM Marketplace

                          • MVP Corner

                            MVP Corner




                            Zoho Writer Writer

                            Get Started. Write Away!

                            Writer is a powerful online word processor, designed for collaborative work.

                              Zoho CRM コンテンツ




                                ご検討中の方

                                  • Recent Topics

                                  • Error "Invalid client task found corresponding properties" only when triggered from workflow ?

                                    Hi All, I am facing an error message I never encountered previously: Error in executing On Add - On Load script Error in executing thisapp.get_all_projects_api_call function. Line:(2) Error in executing thisapp.getAccessTokenFromRefreshToken function.
                                  • How to setup pricing in Zoho

                                    Hi everyone, I am relatively new here and have just moved from my old inventory system to the Zoho one. I am trying to get my head around how it all works. I am mostly setup connected to a shopify store, but I do manual sales also For manual invoicing,
                                  • Is it possible to create a word cloud chart in ZoHo Analystics?

                                    Hi there, I have a volume of transaction text that I would like to analyse using word cloud (or other approcah to detect and present word frequency in a dataset). For example, I have 50,000 records describing menu items in restaurants. I want to be able
                                  • How to interpret Campaign report statistics - definitions/explanation

                                    I am trying to make sure I understand the Campaign report correctly Do you have a list of definitions for: Delivered - it has reached the recipient's inbox Campaign reach - is this the number that have opened the campaign email? Unique Opens Clicks/Open
                                  • Meet Canvas' Grid component: Your easiest way to build responsive record templates

                                    Visual design can be exciting—until you're knee-deep in the details. Whether it's aligning text boxes to prevent overlaps, fixing negative space, or simply making sure the right data stands out, just ironing out inconsistencies takes a lot of moving parts.
                                  • Microsoft Teams now available as an online meeting provider

                                    Hello everyone, We're pleased to announce that Zoho CRM now supports Microsoft Teams as an online meeting provider—alongside the other providers already available. Admins can enable Microsoft Teams directly from the Preferences tab under the Meetings
                                  • Add Custom Reports To Dashboard or Home Tab

                                    Hi there, I think it would be great to be able to add our custom reports to the Home Tab or Dashboards. Thanks! Chad
                                  • Feature request - pin or flag note

                                    Hi, It would be great if you could either pin or flag one or more notes so that they remain visible when there are a bunch of notes and some get hidden in the list. Sometimes you are looking for a particular name that gets lost in a bunch of less important
                                  • How do I filter contacts by account parameters?

                                    Need to filter a contact view according to account parameter, eg account type. Without this filter users are overwhelmed with irrelevant contacts. Workaround is to create a custom 'Contact Type' field but this unbearable duplicity as the information already
                                  • Default in fields on Form B based on the user selection in Form A

                                    Hi Everyone, I have added an action button to a form report to bring up a new form based on user selection, see it indicated in red below: Then when the ne form loads, I want to default in some of the fields based on the record the user was selected on.
                                  • Schedule a Call by Date and Time when a specific lead status is selected

                                    Hi Wanting to create a workflow where a call can be scheduled by date & time when a specific lead status is selected. Can only currently set the date by Due Date - Trigger Date - Plus 'x' day(s) Thanks
                                  • Zoho CRM's Copy Customization functionality now works across DCs, for customized accounts, and more

                                    Availability This feature is available in Standard, Professional, Enterprise, and Ultimate editions. These changes have been rolled out to all users in all DCs. For more information, please refer to these help documents: Overview | Instructions Hello
                                  • How can I bold text on Zoho Forms submit buttons?

                                    In the old theme builder, I could bold the text on a form's submit button. With the new theme builder, I can only change the text of the header or fields in the form, and not the button itself.
                                  • Workflow workdrive rollout

                                    Hi! When will workflow be rolled out to all users? Thanks.
                                  • Stage History

                                    when viewing a ticket , and you look at stage history tab (kanban view) and look at the stage duration column in days, it shows the current stage of the ticket as " current stage ". Should it not rather show the amount of days it has been in that current
                                  • Lead Owner Signature Merge Field

                                    I want to automatically insert a signature (i.e. contact info usually found at the bottom of an email) into an email template, depending on who the lead owner is. What is the merge code for the Signature from a Users profile? CRM > Settings > Customization > Templates There is a popup near the bottom of the edit screen which says: "You can insert a Signature, which is available as a merge field in the users section." It is also referenced on this page: https://help.zoho.com/portal/en/kb/crm/customize-crm-account/customizing-templates/articles/template-builder#Merge_Fields
                                  • 5名限定 課題解決型ワークショップイベント Zoho ワークアウト開催のお知らせ (10/31)

                                    ユーザーの皆さま、こんにちは。Zoho ユーザーコミュニティチームの中野です。 10月開催のZoho ワークアウトについてお知らせします。 今回はZoomにて、オンライン開催します。 参加登録はこちら(無料):https://us02web.zoom.us/meeting/register/BGYTysOnSqa9LA9eY2IKww ━━━━━━━━━━━━━━━━━━━━━━━━ Zoho ワークアウトとは? Zoho ユーザー同士で交流しながら、サービスに関する疑問や不明点の解消を目的とした
                                  • Hiding Pre-defined Views

                                    You can enhance Zoho with custom views - but you cannot hide the pre-defined views. Most users focus on 4 or 5 views. Right now for EVERY user EVERY time they want to move to one of their 4 or 5 views - they have to scroll down past a long list of pre-defined views - we don't use ANY of the pre-defined views. Adding the feature to allow a predefined view to be hidden completely or only visible to certain users would be a big improvement in usability for Zoho CRM. This feature is already available
                                  • Rich-text fields in Zoho CRM

                                    Hello everyone, We're thrilled to announce an important enhancement that will significantly enhance the readability and formatting capabilities of your information: rich text options for multi-line fields. With this update, you can now enjoy a more versatile
                                  • Send Automated WhatsApp Messages and Leverage the Improved WhatsApp Templates

                                    Greetings, I hope all of you are doing well. We're excited to announce a major upgrade to Bigin's WhatsApp integration that brings more flexibility, interactivity, and automation to your customer messaging. WhatsApp message automation You can now use
                                  • [Integration Edition] Deluge Learning Series – Third-Party Integrations with Deluge | October 2025

                                    We’re excited to continue this three-month edition of the Deluge Learning Series: Session 1 – Integrating Zoho Apps with Deluge Using Built-In Integration Tasks Session 2 – Integrating Zoho Apps with Deluge Using invokeURL and invokeAPI Session 3 – Third-Party
                                  • Has anyone integrated SMS well for Zoho Desk?

                                    Our company does property management and needs to be able to handle inbound sms messages which create a ticket for Zoho Desk. We then need to be able to reply back from Zoho desk which sends the user an sms message. This seems like a fairly common thing
                                  • Feature Request: Tag, Search, and Report on Individual Private Comments

                                    Zoho Desk Team, First, I want to say that we are extensive users of Zoho Desk and it is a core part of our support operations. We rely heavily on the private comments feature for internal communication, knowledge sharing, and maintaining a clear history
                                  • Zoho CRM Community Digest - August 2025 | Part 2

                                    Hello Everyone! Here's a quick round-up of handy tips, clever workarounds, and product updates from late August. Product Updates: Meeting Enhancements in Zoho CRM! Track whether a meeting is online, in-office, or at the client’s location using the new
                                  • Is anyone using Zoho Flow with airtable?

                                    I need to build a flow that collects data from airtable and uses some of that data to create folders and files in google drive. I have fully function version of this in zapier and want to migrate to zoho. I am trying to perform a very basic fetch from
                                  • Assistance Needed: Ticket Status Not Updating and Sorting by Last Customer Reply in Zoho Desk

                                    Hello, I’m facing two issues in Zoho Desk that I’d like your guidance on: Ticket Status Not Updating: When a customer replies to a ticket, the status does not change to Reopened. Instead, it remains in Waiting on Customer, even after the customer’s response
                                  • Round robin

                                    Hi, I'm trying to set up a round robin to automatically distribute tickets between agents in my team but only those tickets that are not otherwise distributed by other workflows or direct assignments. Is that possible and if so which criteria should I
                                  • Optimising CRM-Projects workflows to manage requests, using Forms as an intermediary

                                    Is it possible to create a workflow between three apps with traceability between them all? We send information from Zoho CRM Deals over to Zoho Projects for project management and execution. We have used a lookup of sorts to create tasks in the past,
                                  • Time Entry Notifications

                                    Hi All - I have support staff who place notes of their work in the time entry section of Zoho Desk. Is there a specific workflow or setting I need to enable to have the ticket holder updated via email when an entry is saved?
                                  • Change text in help desk

                                    Hi, Please let me know how can i change the this text, see screenshot.
                                  • Customer happiness customisation

                                    Hi, I was wondering if it's possible to somehow customise to whom and when customer happiness request is sent? Can you enable it only for selected tickets for example based on workflow or any other criteria (customer name, tag or anything else)? Also
                                  • Marketer’s Space - WhatsApp Pricing Update: What Marketers Need to Know and Do

                                    Hello Marketers, Welcome back to Marketer’s Space! WhatsApp made changes to their pricing model on July 1, 2025, moving from conversation-based pricing to a per-message pricing model. This week’s post focuses on what these changes mean for your WhatsApp
                                  • Cells Border

                                    Hi I am using Zoho Sheet on S Tab , is there any option to make all border of any cell at once. I think this is very basic which we are missing. This is available in mobile but not in tab or suggest if i am missing this function. And for Tab can you give
                                  • Custom order for Current Stage (Blueprint field)

                                    Hi! I suggest adding the option to set a custom order in reports for the Blueprint field ‘Current Stage’. Currently, these fields can only be sorted in ascending or descending order. Thanks!
                                  • Zoho Sheets saying locked when not locked

                                    Zoho Sheets won't let me add more rows to sheet because it's saying the sheet is locked, but the sheet is not locked. I tried using a different browser but I still have the same issue.
                                  • No Zoho Support Response in Months

                                    I want to say that I love Zoho FSM, Books, and CRM, but the support is scary bad. About 2-3 months ago, I emailed Zoho FSM support with two specific issues I needed help with, and I have still not received one single response. I also submitted a support
                                  • Has anyone built a custom AI support agent inside Zoho (SalesIQ/Zobot)?

                                    Hi all, I’ve been experimenting with building my own AI support assistant and wanted to see if anyone here has tackled something similar within Zoho. Right now, I’ve set up a Retrieval-Augmented Generation (RAG) pipeline outside of Zoho using FAISS. It
                                  • Display Client Name in Zoho Creator Client Portal Dashboard

                                    Hello Zoho Creator Team, We hope you are doing well. Zoho Creator recently introduced the option to set a client’s display name in the Client Portal settings, which is very helpful for providing a personalized portal experience. However, there is currently
                                  • Null

                                    If a result is null how do I make it so that a custom error pops up instead of the default error? Can someone write an example as if I were using the script builder?
                                  • Introducing Zoho Creator's 2025 Release Projection 2

                                    Hello Creators! I'm Prakash, from the Creator product management team, and today I'm delighted to unveil our next set of features as part of Release Projection 2 for 2025. With thoughtful analysis and planning, we've curated powerful new capabilities
                                  • Next Page