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.
Scenario:
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 |
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.
Recent Topics
Bulk Fill In & Edit PO/Bill/SO/Invoice
Hello, I am adding stock in bulk on a PO, the system is automatically populating the Rate (price) and Tax from the item data. Problem is that the bill rate is different from the rate on the item data, so I have to manually erase each and enter the price.
Fixed Assets beg balance
Hello, I trust you are well I'm a new zoho books user and I find it difficult to plug in the fixed assets balance and here's what I have done: 1- I imported the fixed assets data into the fixed assets module as per the instructions 2- the import process
Syncing with Google calendar, Tasks and Events
Is it possible to sync Zoho CRM calendar, task and events with Google Calendar's tasks and events. With the increasing adoption by many major tool suppliers to sync seamlessly with Google's offerings (for instance I use the excellent Any.do task planning
CRM Deluge how can link attach file with workdrive file.
Hi, We have create file at workdrive and would like to link to attachment at crm module by deluge. Right now can only upload it to attachment but can not link the file from workdrive. Thank you
Feature announcement: AI-powered document generator in Zoho Sign
Hi there! We recently announced manual document creation by offering an editor within Zoho Sign. Today, we are excited to announce AI-powered document generation to help you draft agreements, purchase orders, and other important business documents in
Permanently deleted files
Is there a way to get back permanently deleted files from your account if they were accidentally deleted and no longer recoverable from the recycling bin? I know I am probably screwed but I just figured I would ask.
Shared Mailbox in iOS app
Hi, On the desktop I am using a Shared mailbox for our company's general mailbox that somebody else should be able to view. In the iOS app however I can't find it? Old sources on the internet says this isn't possible but that can't be right? Somebody
Tip #41- Simplify Compliance and Efficiency with Zoho Assist’s Data Cleanup Feature- 'Insider Insights'
Managing device data efficiently is just as important as securing remote access. With Zoho Assist’s Data Cleanup feature, admins can easily remove outdated or unnecessary device records, keeping the console organized and secure. This action is carried
Revenue Management: #6 Revenue Recognition in Professional Services Industry
If you run a consulting firm, agency, or any service-based business, you have a situation where you have signed the contract, maybe even sent the invoice, and have received some initial payments. So, can you consider this as revenue? What if the project
Zoho fsm scheduled maintenance dispatch
Hi, I'm reaching out regarding an issue I'm encountering with the Scheduled Maintenance feature in Zoho FSM. I’m trying to configure it so that it automatically dispatches all maintenance jobs scheduled within the next 150 days, starting from today. However,
zoho.inventory.getRecords returns no records
I running a custom function (Deluge) in Zoho Flow with a connection to Zoho Inventory. To debug the problem, I created the test function below. It returns "Number of contacts fetched: 0". This confirms that there's no issue with the org ID or connection
Zoho Campaigns Event timestamps do not propagate to Zoho CRM
We have integrated Zoho CRM and Zoho Campaigns. But when looking at Contact records, the Campaign event data is missing the actual timestamps: especially when a particular email was sent. They're not in the Campaigns related list, and the cannot be found
Feature announcement - Simplifying document creation with Zoho Sign
Hi there, We are pleased to announce the release of our document creation feature, enabling you to create, edit, and finalize documents like agreements, purchase orders, and contracts without relying on external tools or applications. <br> This
Integrating File Attachments in Zoho Flow Email Notifications
Hi, I would like to be able to send an email once an entry is made in a form, and in this email, I would like to attach a file that has been added to the form using the ImageUpload (or FileUpload) widget. So, I started by creating a flow that will trigger
Zoho project purchases
Hi Folks, I think having a purchase module in projects will help in putting together a project p and L. Project wise purchases and expenses. Do let me know your thoughts.
Create Tasklist with Tasklist Template using API v3
In the old API, we could mention the parameter 'task_template_id' when creating a tasklist via API to apply a tasklist template: https://www.zoho.com/projects/help/rest-api/tasklists-api.html#create-tasklist In API v3 there does not seem to be a way to
How can I restore all the deleted Time entries of a Task in Zoho Projects
How can I restore all the deleted Time entries of a Task in Zoho Projects? Query: In Zoho Projects, I cloned a task and deleted the time entries from the cloned task. However, this also deleted the time entries from the original task. How can I restore
Is there a way to make an account inactive in ZoHo Desk
We have a few Clients "Accounts" that we no longer do business with. It would be beneficial for them to not show up in lists. However, we want to go back and view tickets, time, etc.
How to set the value of the Phone field importing contacts in Zoho Desk
Hi everyone, i'm new in Zoho Desk, we're setting up the environment and i'm importing contacts from another CRM using a file CSV and i'm getting a problem with phone numbers (italian): the leading zero is cut away, also if the value is inside double quotes.
Set Custom Icon for Custom Modules in new Zoho CRM UI
Deprecation Notice: OpenAI Assistants API will be shut down on August 26, 2026
I recieved this email from openAI what does it means for us that are using the integration and what should we do? Earlier this year, we shared our plan to deprecate the Assistants API once the Responses API reached feature parity. With the launch of Conversations,
How to center a field inside a section?
I’ve been trying to center a field inside a section in Zoho Canvas. When I align it visually, it looks centered in the editor, but after clicking Save, the field appears misaligned on the actual canvas. I also tried setting the field to full width, but
Kaizen #192 - Implementing Custom Token Persistence in Python SDK
Welcome back to another week of Kaizen! Last week, we discussed how to implement Login with Zoho using OAuth 2.0 and saw how to bring it to life in a real-world application with the Zoho CRM Python SDK. We also discussed how Zylker Academy built a custom
Showing the map along with mileage expense
When you use the GPS to track mileage, it shows you the map of the actual path travelled. It would be very useful and practical to save that map with the mileage expense, so that when the report is created, it provides a map of each mileage expense associated
Enable Validation Rule for Multi-Select Picklist Field
Zoho, Please allow validation rules for multi-select fields.
File Upload field not showing in workflow
Hi, I have added a field on Zoho CRM. I want to use it in a workflow where that particular field is updated based on another field, however it is not showing up in the field list to select it in the workflow. Why is this please?
CRM Custom function updating a module record shows the Super Admin user as the record modifier
Dear Zoho CRM Team, Is there any way to update this so that when a custom function has updated a record the Super Admin user doesn't become the modifier? This happens on the record as a modifier and shows up in the audit logs. It would be more useful
Best practice importing items and matching assemblies
Hi, I was wondering what would be the best practice to import items and composite items (assemblies) From my backup, what should I import first? The items or the composite items? I am on Zoho one, using inventory and books. Kind regards, Sabine
Best way to fetch employee names from Zoho People into Zoho Creator Inventory Stock Form field Employee Name Lookup
Hi Team, I have a requirement in my Zoho Creator application (Inventory Stock Adjustment) where I need to fetch employee names from Zoho People and use them as a lookup in a form. Currently, I am considering using an integration field to fetch this data
get file api is returning Junk data
I am working on extension development where at one point I need to retrieve attachments on records I found out I can use only invokeconnection and not invokeurl in extension development The invoke connection returns the image in raw binary format. When
Need help with message box
End user updates many records at once. Each have unique serial number. They want a confirmation box that says starting number, ending number and qty. Is there any way to do this? I been searching and asking support but seems like no great solution.
[Webinar] The Transformative Power of Gen BI
Traditional decision-making tools are no longer enough. The integration of generative AI into business intelligence (BI) is proving to be a true game changer—enabling businesses to make faster, smarter, and better informed decisions. Early adopters of
Backorder process review - Automating Removal of Sales Order from "On Hold" When PO is Received
Hello Zoho Inventory Team, Currently, sales orders in On Hold status are released only when the bill for the purchase order is created. In our workflow, it would be much more efficient if the sales order could automatically move out of On Hold as soon
How to access the saved Query using API?
I have created a query in setting. Is it possible to access it from a API? What's the endpoint? I tried /v8/queries/important_deals but didnt' work.
création d'une base de données
base de donnee d'un lycée
User Session variables to recall after form submit & redirect to menu
Hey, Forgive me if this is a simple answer I have overlooked. I have built a big onboarding process for my SAAS platform which is built and managed by an external Dev team. I am hoping to embed my new creator app on the SAAS platform. I have a menu page
Zoho Writer Merge Template with data from Zoho Analytics Views
Hello, Is there any way to pull information from Zoho Analytics and put it into a Merge Template? I am trying to create a bulk export of one report that filters on a field to create a single document for each of the filter fields.
Having to enter bill before stock shows as available.
Hi, Am I right in thinking you must create a bill from the purchase order receipt before the goods are available for shipping?
Agent Availability Report
From data to decisions: A deep dive into ticketing system reports Businesses need to track when their support agents check in and check out from work. This report, titled Agent Availability, is one of the static reports that helps managers track the number
Writing by Hand in "Write" Notes
Hi there! I just downloaded this app a few moments ago, and I was wondering if there was a way to write things by hand in "Write" mode instead of just typing in the keyboard. It would make things a bit more efficient for me in this moment. Thanks!
Next Page