Revenue Management: #6 Revenue Recognition in Professional Services Industry

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 spans several months? What if there is a revision or unplanned scope creep in?


How do service-based businesses recognize revenue for time, materials, and milestones?

Revenue Recognition Scenarios in the Professional Services

This can happen to any service-based firm, like legal advisors, consultants, marketing agencies, and IT services providers, as they don't sell physical goods. Instead, they provide time, expertise, and deliverables with different timelines. This means, the revenue is recognized as work is performed and not when the invoices are sent. Here are some of the common scenarios that a service-based company faces:

Time & Material Billing

Many firms work on time and material contracts, where billing is based on hours logged. In contrast, fixed-fee projects promise a set scope for a lump sum. Revenue must be recognized based on the work delivered, not simply how much time has passed or been billed.

Example: A consultant bills $150/hour. If 40 hours are worked in April, $6000 is recognized for that month.

Bundled Services

Like SaaS, A contract might include onboarding, implementation and support. Each has a different timeline and must be recognized separately. Without clear performance obligations, firms risk misstating their revenue.


Example: A network provider sells routers, installs them, and provides support for a one-year period for $50,000. Here, the revenue earned by routers is recognized immediately; revenue from installation will be recognized as and when it is done. However, the revenue for support will be recognised only at the end of the year.

Milestone-Based Deliverables

Some contracts are milestone-based. Even if the client pays upfront or monthly, revenue must be recognized only when the milestone is met. This leads to uneven revenue patterns and complex tracking.


Example: A $20,000 marketing strategy contract has different stages, starting with $500 for discovery, $10,000 for planning, and $5000 at the time of delivery. Revenue aligns with each milestone.

Different Start Date

There can be cases where the client pays upfront for a project that begins after a few weeks. The revenue cannot be considered recognized until the project begins, and it will be deferred until the actual start date.


Example: $10,000 was paid in June for a project that starts in August. The revenue will have to be maintained as a liability/deferred until August.

Scope Changes & Goes for Rework

Projects often evolve with new tasks, changes in timeline, or even the entire deliverable gets changed. These contract modifications require updated revenue allocation and potentially re-recognition of previously booked revenue.


Example: A legal advisory firm signs a six-month contract for $60,000. After two months, the clients expanded the scope by adding training and doubling the reviews from the earlier contract, which required reallocating revenue for the remaining months.

Since service delivery isn't always linear, tracking obligation completion is essential. Manually doing this for a large-scale contract is going to be close to impossible.


Info
Scenario:

A digital consultancy service signs a contract for $60,000 with a client that includes $10,000 worth of an upfront discovery workshop. Additionally, System implementation is planned for $30,000 and will take three months to complete. Technical assistance will be offered at $20,000 for six months.
 

Zoho Billing for Professional Service Revenue Recognition


Zoho Billing allows professional services firms to configure revenue recognition rules tailored to the contract's stages and services.


For the scenario above, the rule could be set as follows:

 

For Discovery Workshop

For Implementation

For Technical Assistance

Recognition Frequency

Once

Monthly

Monthly

Recognition Method

Daily

Evenly Distributed

Evenly Distributed

Recognition Time

Period Start

Period Start

Period Start

 

Once configured, Zoho Billing will take care of recognizing the revenue automatically.


It recognizes $10,000 after the discovery sessions are done. For implementation, $10,000 will be recognized per month for the next three months. For technical assistance, $3,333 per month will be recognized, which sums up to $20,000 for the committed six-month period.


Reports in Zoho Billing

If you look at the Revenue Recognition reports after two months in Zoho Billing, you can find,


i) Recognized Revenue Report

Two months into the engagement, the discovery workshop is over, two months of implementation have been delivered, and two months of technical assistance have been rendered.

Component

Recognized Revenue

Description

Discovery Workshop

$10,000

Fully recognized

System Implementation

$20,000

$10,000/month for two months

Technical Assistance

$6666

$3333/month for two months

Total Recognized

$36,666

Revenue earned in two months

 

ii) Deferred Revenue Report

The remaining revenue in deferred is for pending implementation and assistance services that are to be done.

Component

Deferred Amount

System Implementation

$10,000 (one month left)

Technical Assistance

$13,334 ($3333/month x4)

Total Deferred

$23,334

 

iii) Revenue Waterfall Report

Month

Discovery Workshop

Implementation

Assistance

Total

Month 1

$10,000

$10,000

$3,333

$23,333

Month 2

---

$10,000

$3,333

$13,333

Month 3 (upcoming)

---

$10,000

$3,333

$13,333

Month 4 (upcoming)

---

---

$3,333

$3,333

Month 5 (upcoming)

---

---

$3,333

$3,333

Month 6 (upcoming)

---

---

$3,333

$3,333

 

 

Idea

Best Practice for Professional Services Revenue Recognition

  • Define Deliverables Clearly: Break work into explicit deliverables/obligations to know how it will be delivered.
  • Match Revenue with Service Period: Use time-based or milestone-based rules depending on the service to be recognized.
  • Reassess on Scope Changes: The system should be equipped to automatically understand contract changes and recognize scheduled changes when the project terms shift.
  • Manual Revenue Recognition: It is best to use Manual Revenue Recognition based on completion for long-term milestone-based projects.
  
    • 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
      • Recent Topics

      • "Performed changes in the query is not allowed due to following reason" when adding columns or reordering data

        I'm trying to make changes to a query but every time i try to save it i get this error message. I'm not touching the data it's flagging. All I've tried to do is reorder a couple of fields and add a new one. Why won't it let me do this? It's a core query
      • Onboard new users easily with native screen recording in Zoho Projects Plus

        Communication involving both visual and audio elements tends to capture more interest among the audience. Whenever we onboard new employees to the organization, the task of engaging them in the induction sessions, and keeping the spark going in their
      • Request to Add Support for PDF Templates and More Flexibility in Email Editor

        Hi Zoho Campaigns Team, I hope you're doing well. I wanted to share some feedback and request a few improvements in the Email Template feature of Zoho Campaigns. Right now, we can create email templates using the HTML editor, which is helpful. But we’re
      • Can you stop Custom View Cadences from un-enrolling leads?

        I'm testing Cadences for lead nurture. I have set un-enroll properties to trigger on email bounce/unsubscribe, and do NOT have a view criteria un-enroll trigger. However, help documents say that emails are automatically un-enrolled from a Cadence when
      • Zoho Desk Android and iOS app update: Agent detail overview

        Hello everyone! We’ve introduced agent detail overview on the Zoho Desk Android and iOS app update. With this feature, you can get a complete view of agent’s tickets, response times, logged hours (for both tickets and activities), customer happiness ratings
      • Blog Widget: Show recent blog posts on my homepage

        Hey there I am using the Zoho Sites Blog feature. On my homepage, on the bottom I'd like to have a featured content section where I show some of my blog posts (selected, most recent, filtered by category and so on...). It would be nice to have a blog
      • How to iterate through excel data using zoho rpa

        I wanted to iterate or loop through excel data ( datatable). How can i do that
      • Zoho Commerce

        Hi, I have zoho one and use Zoho Books. I am very interested in Zoho Commerce , especially with how all is integrated but have a question. I do not want my store to show prices for customers that are not log in. Is there a way to hide the prices if not
      • Mass (Pull back) (Close WOs) (Close APs)

        Hi develop team. Just idea because Zoho FSM is great but its too manual. we have a lot of task to do every day and the system needs to have more features to automatic our tasks. I need to close several WOs, APs and Pull Back per day. Please we need mass
      • Customising Zohidesk portal default widgets

        Hello, I'm wondering how could I customise the default widgets such as "popular topics", "popular articles" using CSS or to make the tiles at the bottom match the ones that I made in the picture attached. I have made some custom widgets and edited them
      • If there’s a batch at the end, the ‘mark as inactive’ function doesn’t work.

        when my batch has a date to batch end and I "mark as inactive" he batch does not obey the status and reactivates the batch.
      • Seamless multilingual messaging and tone control in Zia IM Composer

        Hello everyone! Managing customer conversations across multiple languages can be time-consuming. Using Zia in the Instant Messaging (IM) Composer helps you overcome this by providing tools to translate content, adjust your tone, and refine your messages
      • Advanced Deluge help needed with custom function and COQL limits

        I have a scheduled function that takes a snapshot of specific metrics and saves them to a custom module. However I'm struggling with the limits of COQL. I attach my full code, but an example of the issues I'm having is that it's erroring with a 'Limit
      • Tip of the Week - Conditional Formatting Chart

        Conditional formatting allows you to highlight your data series based on a pattern or a trend in your data. This makes it easy for you to identify when your data reaches certain values or when it deviates from the trend.  Zoho Analytics allows you to
      • Zoho Learn - AI Translate

        Hi Learn team, I had a situation today where I was providing training to a client team and I had written articles into their Zoho Learn to support their learning. I realised that one of the team members was a non-native English speaker and they were struggling
      • Power of Automation :: Auto-Sync Custom Date Field Between Related Tasks via Blueprint Transition

        Hello Everyone, A custom function is a software code that can be used to automate a process and this allows you to automate a notification, call a webhook, or perform logic immediately after a workflow rule is triggered. This feature helps to automate
      • Introducing auto-upgrade in Zoho LandingPage

        Hi everyone, We’re excited to share an upcoming update to help you get the most out of your landing pages — the auto-upgrade option, launching on October 22, 2025. Your landing pages are designed to bring in leads, and we want to make sure you never miss
      • Workdrive comment links stopped working.

        I have marked a PDF file with 95 comments, they have worked for a while. When i clicked on them they brought me to the correct page and showed me the outline that i had drew on the plans. The comments included the page number of the outline, but now it
      • How to Bulk-Update Sales Orders in CRM

        Hi - I need to bulk update existing sales orders with dates from our ERP of when the sales orders were created. I made a date field on the Sales Order module where I want to insert that data. I can't Mass Update because I am not updating the fields to
      • Zoho ToDo in Cliq

        Our organization utilizes Zoho ToDo in the Zoho Mail Desktop app. Is there a way for these to show up in Cliq Desktop app as well?
      • 【Zoho CRM】サンドボックス機能のアップデート:カスタムビューが利用可能になりました。

        ユーザーの皆さま、こんにちは。コミュニティチームの中野です。 今回は「Zoho CRM アップデート情報」の中から、サンドボックス機能のアップデートをご紹介します。 目次 1. カスタムビューとは 2. 今回の機能アップデートについて 1. カスタムビューとは カスタムビューは、ユーザーが設定した条件に基づいてデータをフィルタリング・整理し、 重要な情報へ効率的にアクセスできるようにする機能です。 「過去15日間の見込み客」や「受注間近の商談」、「特定の優先度レベルが設定された案件」など 条件を指定してわずか数クリックで設定できます。
      • Changing an agents email address

        How do you change an agent's email address? I keep getting a red circle even though I am an admin. And on one of my agents he has two email addresses? How is that possible?
      • Zoho CRM - Potentials Tab

        Hi! When I create a Deal (Potentials tab) the header looks like this: After a refresh on the page it looks like this: What should I do so that it is displayed like in the second pic without refresh? Also I have a user that as of recently, cannot see this
      • Is there a way to automatically add Secondary Contacts (CCs) when creating a new ticket for specific customers?

        Some of our customers want multiple contacts to receive all notifications from our support team. Is there a way to automatically add secondary contacts to a ticket when our support team opens a new ticket and associates it with an account? This would
      • Unable to create embed code for resource of workdrive using API

        Hello Team, I am trying to create embed code for a resource using workdrive api in powershell, however facing some issues with injecting data in body. Followed Doc: https://workdrive.zoho.com/apidocs/v1/filefoldersharing/shareeveryone Please help, below
      • Feature Request - Insert URL Links in Folders

        I would love to see the ability to create simple URL links with titles in WorkDrive. or perhaps a WorkDrive extension to allow it. Example use case: A team is working on a project and there is project folder in WordDrive. The team uses LucidChart to create
      • not able to convert pdf to jpg and other forms and vice versa.

        i want to change my pdf to jpg, word, etc and some times jpg to pdf. i don't know how to do in this.
      • Enable / show scroll bar when Mega Menu is opened

        Hey there I am using the mega menu add-on and experience a "flicker" whenever the mega menu opens. The reason is, that the scrollbar, which has a width of a few pixels, stops showing when the mega menu opens. As the scrollbar disappears the whole page
      • Reports: Custom Search Function Fields

        Hi Zoho, Hope you'll add this into your roadmap. Issue: For the past 2yrs our global team been complaining and was brought to our attention recently that it's a time consuming process looking/scrolling down. Use-case: This form is a service report with
      • Zoho Inventory - Composite Items - Assembly - Single Line Item Quantity of One

        Hi Zoho Inventory Team, Please consider relaxing the system rules which prevent an assembly items from consisting of a single line item and outputting a quantity of 1. A client I'm currently working with sells cosmetics and offers testers of their products
      • How can I transfer data from Production to Development environment?

        Hi, I am using Creator V6 and would like to bring all the data in production to the Development and Testing environments? Is there an easy way of doing that or I have to export and import each table?
      • Add "Reset MFA" Option for Zoho Creator Client Portal Users

        Hello Zoho Creator Team, We hope you are doing well. We would like to request an important enhancement related to Multi-Factor Authentication (MFA) for client portal users in Zoho Creator. Currently, Creator allows us to enforce MFA for portal users,
      • New portal SAML authentication error: User not found

        Dears, Has anyone else been experiencing this lately? I am creating a new portal authenticated by SAML (Entra ID). I followed the same process as I did with other portals, but any new portal created after this always encounters this error. I’ve been reporting
      • Devis et facture multi page

        Bonjour, je suis sur Zoho invoice et je rencontre un problème sur mes devis et factures lorsqu'ils dépassent 1 page. je me retrouve souvent avec des lignes coupées ou le sous total page 1 et le total page 2. j'aimerai savoir s'il existe une possibilité
      • Help with Filtering Records, HTML Pages, and Automatic File Uploads in Zoho Creator

        Hi Zoho Creator Community, I’m building a Zoho Creator application and need guidance on a few features I’ve been struggling with. I want to implement them safely and efficiently, and I’d appreciate any examples, tips, or best practices. I want users to
      • Convert invoice from zoho to xml with all details

        How to convert an Invoice to XML format with all details
      • Feature Suggestion for Zoho Websites – Inspired by Squarespace Systems

        Dear Zoho Team, I’m a Zoho user and also a Squarespace Platinum Circle member, and I recently noticed the launch of Zoho Websites in India. I wanted to share some ideas for features that could enhance the platform for professional users and agencies.
      • Custom View - Sort by Custom Field

        I created a custom field for our Engineering team to know which tickets to work first by numbering them.  I created a custom view to general data which includes the Engineering Priority.  However, I cannot sort the Engineering Priority column ascending
      • Zoho Indeed Intergation not pulling candidate details

        We have recently integrated zoho with indeed. Prior to this our candidates came into the candidates tab via the zoho.resumes email address from indeed and it pulled through the candidates mobile number, and majority of the time a postcode. However since
      • Custom View of tickets created today

        How can I create a custom view that list all my ticked created in the current date? Currently, if I select the "Created Time" criteria, the "Current Time" option does not work as today. Actually, I don't know how it works this "Current Time".
      • Next Page