Install and uninstall actions

Install and uninstall actions

Hello Biginners!

In our previous forum post, we explored creating connections - specifically, custom service connections in the Bigin Developer Console. In this post, we'll focus on another feature that can be used in every topping: install actions.

We'll look at what install actions are and when to use them, and then we'll walk through a real-world example where users are notified whenever a topping is installed or uninstalled.

What are install actions?

Install actions are important features of a topping that let you execute custom logic during installation and uninstallation events.

Instead of treating installation and uninstallation as silent background events, the Bigin Developer Console allows you to run your own logic the moment a user installs your topping, updates it, or decides to uninstall it. This logic can be implemented as Deluge functions that are executed automatically based on the installation action.

Primarily, install actions are executed in the following scenarios:
  1. On Installation: This action is triggered when the topping is installed for the first time or when the topping is upgraded. (A topping upgrade refers to a new version of the topping being installed by the organization user.) In both cases, the On Installation action runs to perform the required logic.
  2. On Uninstallation: This action is triggered when the topping is uninstalled or removed from an organization.
Let's look at each of these in detail.

On Installation

The On Installation action is triggered immediately after a topping is successfully installed or updated in a Bigin organization. Conceptually, this is the topping's first run and the right place to perform one-time setup tasks that you don't want users to handle manually.

Note: You can write only one On Installation script per topping. This script is executed only during two key events of the topping: the topping being installed for the first time and an updated version of the topping being installed after publishing changes.

This means the On Installation script is not executed repeatedly. It runs only when the topping is installed or updated, ensuring that setup logic is executed only when it's actually required.

To create an On Installation script, access the Bigin Developer Console, navigate to the Install Actions section in the left panel, and choose Toppings.

You'll be redirected to the Deluge editor where you can write the script for the On Installation action.


In the right panel of the Deluge editor, you'll be able to find the installParamMap which contains important contextual details such as the organizationId, installerId, previousVersion, and other details that are provided by the install action script itself. These keys can be used within your script to perform custom logic based on the installation context.

For more information about the keys that you can use inside the installation script, refer to the install actions documentation.

On Uninstallation

The uninstallation process of a topping will be handled by the On Uninstallation action. This function runs when a topping is removed from an organization.

To create an On Uninstallation script, navigate to Install Actions in the left panel, choose Toppings, and write the script in the On Uninstallation section of the Deluge editor.


In the On Uninstallation action, the installParamMap provides the keys organizationId and installerId. These values indicate which organization the topping is being removed from and which user initiated the uninstallation.

Now that we've explored how both of the install actions work, let's move on to creating a topping using these actions in a real-world scenario.

Let's create a topping with install actions

To understand how install actions work in a real-world scenario, we’ll build a Compliance Notification Topping.

The purpose of the topping is to keep organization administrators of the Bigin account informed about the lifecycle of the topping—specifically when it becomes active and when it's removed from their Bigin account.

In many business environments, it's important for admins to be aware of compliance-related changes and system-level additions. Using install actions in the topping ensures that such notifications are handled automatically, without requiring any manual effort from the user.

To achieve this functionality, we'll rely on both of the install actions:
  1. When a user installs the topping, the On Installation action is triggered, through which an email notification is sent to all active admin users in the organization, informing them that the Compliance Notification Topping has been successfully enabled. Along with this, a compliance checklist document stored in Zoho WorkDrive is also attached to the email.
  2. When the topping is uninstalled, the On Uninstallation action is triggered, sending an email notification to all active admin users in the organization to inform them that the Compliance Notification Topping has been successfully disabled. A compliance checklist document stored in WorkDrive is also attached to the email.
Let's learn how to do this.

Setting up the topping

First, create a topping in the Bigin Developer Center. For detailed instructions on creating a topping, refer to this post on how to create a topping.

After creating a topping and accessing it in the Bigin Developer Console, the next step is to create the required service connections.
A connection for Bigin will be used to fetch admin users from the organization into the topping. In this connection we'll use the scope ZohoBigin.org.ALL, as we need to retrieve the org details of the Bigin account where the topping is installed.

Next, we need a WorkDrive connection because we need to download the compliance checklist file stored in WorkDrive and attach it to the notification email. For the WorkDrive connection, we'll be using the scopes WorkDrive.files.READ and ZohoFiles.files.READ.

For a detailed explanation of creating the default connections, refer to this post.

Once the connections are created, we can write the install action scripts.

Implementing the scripts

When the topping is installed, we need to send an email to all the active admin users with the installation details and the WorkDrive checklist as an attachment.

To begin, navigate to the Install Actions section in the left panel and select Toppings. Under the On Installation tab, we’ll write the Deluge script that needs to be executed when the user installs the extension.

Writing the On Installation script

In our topping, the On Installation script performs the following actions:
  1. Fetches all the active admin users in the organization
  2. Downloads the checklist file from WorkDrive
  3. Sends an email notification to the admin users with the installation details and the checklist file.
  1. topping_name = "Compliance Notification Topping";
  2. // 1) Fetch admin users
  3. resp = invokeurl
  4. [
  5. url :"https://www.bigin.com/developer/docs/apis/v2/get-users.html"
  6. type :GET
  7. connection:"biginplus__biginnewconnection"
  8. ];
  9. // 2) recipient list
  10. stakeholders = List();
  11. usersList = resp.get("users");
  12. if(usersList != null)
  13. {
  14. for each user in usersList
  15. {
  16. email = user.get("email");
  17. status = user.get("status");
  18. if(email != null && (status == null || status.toLowerCase() == "active"))
  19. {
  20. stakeholders.add(email);
  21. }
  22. }
  23. }
  24. // 3) Download WorkDrive file via Download API
  25. header = Map();
  26. header.put("Accept","application/vnd.api+json");
  27. resource_id = "khw4zbab917b7f4774260a06636089ef0074f";
  28. fileResp = invokeurl
  29. [
  30. url :"https://download.zoho.com/v1/workdrive/download/" + resource_id
  31. type :GET
  32. headers:header
  33. connection:"biginplus__zohoworkdriveconnection"
  34. ];
  35. // 4) constructing email
  36. org_id = installParamMap.get("organizationId");
  37. installer_id = installParamMap.get("installerId");
  38. current_time = zoho.currenttime;
  39. subject = "Bigin Topping Enabled: " + topping_name;
  40. message = "";
  41. message = message + "<b>" + topping_name + "</b> was <b>Installed</b>.<br/><br/>";
  42. message = message + "<b>Organization ID:</b> " + org_id + "<br/>";
  43. message = message + "<b>Installed by (User ID):</b> " + installer_id + "<br/>";
  44. message = message + "<b>Time:</b> " + current_time + "<br/><br/>";
  45. message = message + "<b>Business impact:</b> This topping is now active for the organization.<br/>";
  46. //sending the email
  47. if(!stakeholders.isEmpty())
  48. {
  49. sendmail
  50. [
  51. from :zoho.adminuserid
  52. to :stakeholders
  53. subject :subject
  54. message :message
  55. Attachments :file:fileResp
  56. ]
  57. }
For details about the API endpoints and request formats used in this code, refer to the Bigin and WorkDrive API documentation. For the syntax to send emails via a Deluge task, you can refer to this documentation.

Writing the On Uninstallation script

When a user decides to remove the topping, we'll send an email notification to ensure the admins stay informed.
  1. topping_name = "Compliance Notification Topping";
  2. // Fetch admin users
  3. resp = invokeurl
  4. [
  5. url :"https://www.zohoapis.com/bigin/v2/users?type=AdminUsers"
  6. type :GET
  7. connection:"biginplus__biginnewconnection"
  8. ];
  9. stakeholders = List();
  10. usersList = resp.get("users");
  11. if(usersList != null)
  12. {
  13. for each user in usersList
  14. {
  15. email = user.get("email");
  16. status = user.get("status");
  17. if(email != null && (status == null || status.toLowerCase() == "active"))
  18. {
  19. stakeholders.add(email);
  20. }
  21. }
  22. }
  23. org_id = installParamMap.get("organizationId");
  24. uninstaller_id = installParamMap.get("installerId");
  25. current_time = zoho.currenttime;
  26. subject = "Bigin Topping Disabled: " + topping_name;
  27. message = "";
  28. message = message + "<b>" + topping_name + "</b> was <b>Uninstalled</b>.<br/><br/>";
  29. message = message + "<b>Organization ID:</b> " + org_id + "<br/>";
  30. message = message + "<b>Uninstalled by (User ID):</b> " + uninstaller_id + "<br/>";
  31. message = message + "<b>Time:</b> " + current_time + "<br/><br/>";
  32. message = message + "<b>Business impact:</b> This topping is no longer available from now on.<br/>";
  33. if(!stakeholders.isEmpty())
  34. {
  35. //Send email
  36. sendmail
  37. [
  38. from :zoho.adminuserid
  39. to :stakeholders
  40. subject :subject
  41. message :message
  42. ]
Once we've configured both the On Installation and On Uninstallation scripts, we can test and publish the topping. When the user installs the topping, the install actions will be triggered automatically based on the topping's lifecycle events.

Let's walk through what happens at runtime.

What happens when the topping is installed or uninstalled

Upon installation, the user receives an email notification along with the topping checklist attachment as shown below.


When the topping is uninstalled, the user receives an email indicating that the topping has been disabled as shown below:


In this post, we've explored how install actions and uninstall actions give us control over the toppings. We'll cover more features of the Bigin Developer Console in our upcoming posts.

Stay tuned!

<<Previous                                                                                                                                                                            Next>>
      • Recent Topics

      • Keeping project teams in the know with Zoho Cliq

        Project management is all about processes, data flow, and maintaining order. But communicating appropriate information at crucial times to stakeholders is as important as the moving parts of a project. Zoho Cliq can facilitate effective communication
      • Remove "Subject" as a required field on quotations

        Not sure why, but Zoho has made 'Subject' a system defined required field. I'm not entirely sure why subject would be required as a key field (i.e. you cannot deactivate it or change it from required). It doesn't make much sense on many product quotations,
      • Multi-currency and Products

        One of the main reasons I have gone down the Zoho route is because I need multi-currency support. However, I find that products can only be priced in the home currency, We sell to the US and UK. However, we maintain different price lists for each. There
      • Enable Credit Note creation for Sales Returns BEFORE receiving goods

        Currently, it is not possible to issue a Credit Note linked to a Sales Return until the goods have been officially marked as "received" in the system. In our business, we often need to issue a credit note to our clients immediately upon the initiation
      • Best way to setup Inventory bin tracking for products with multiple boxes/crates

        Hi - we need some advice from the community on setting up Items in the Inventory for products with multiple crates. We have large products in our warehouse where the product is delivered as two large (double pallet) crates. We've setup the Items for these
      • Getting Internal Server Error message when filing for MTD

        I am trying to file for the MTD submission, and after I filled in all the information and click (Fetch Obligation) this message "Internal Server Error [500]" pops up. I have been trying for awhile and its still the same. What shall I do as today is deadline
      • No access to change view permission for team members

        Hi, I want team members to be able to update the percentage progress on their goals at mid year. Currently they cannot edit this, they can only update the comments against the goals. The ability to add view permission to goal progress for team members
      • Turn your Zoho One Home into your workspace with Dashboard 2.0

        When you open Zoho One, you probably don't need to see everything. You need to see what matters to you. A sales manager may want to track pipeline and revenue. An HR manager may want to monitor employee information. A business leader may want a quick
      • Zoho Assist Feature Update: August 2026

        Web Forms Web Forms in Zoho Assist help you collect support requests directly from your website and route them to the right team. Embed a customizable form so customers can raise issue details or join an active remote session using a session ID. Depending
      • Tip #84 – A More Natural Remote Experience with Custom Cursor Support – 'Insider Insights'

        Hello Zoho Assist Community! Anyone who has spent time in a remote support session knows the feeling. You're guiding a customer through a task, moving the cursor across the screen, and something feels just slightly off. The cursor doesn't behave the way
      • 【無料/オンライン】8/20開催|Zoho ワークアウト|ユーザー同士で学び合うオンラインもくもく会

        ユーザーの皆さま、こんにちは。 コミュニティグループの中野です。 8月20日(木)開催の「Zoho ワークアウト」をご案内します。 Zoho ワークアウトは、参加者それぞれが取り組みたいテーマを持ち寄り、 ユーザー同士で交流しながら、設定・検証・運用改善を進めるオンラインの「もくもく会」です。 「作業を進めたいけれど、一人だと手が止まってしまう」 「他社がどのように活用しているのか知りたい」 「同じ課題を持つユーザーと情報交換したい」 そんな方は、ぜひお気軽にご参加ください。 ▶︎ 参加登録はこちら(無料)
      • Assign Price Book to Accounts (again!)

        I can see this topic has been bumping about for over 10 years and unfortunately Zoho hasn't seen the need (or use case) in CRM to be able to assign an account to a price book to automate quoting (amongst other things). Strange given they DO assign price
      • Custom Statuses - Can You Do Anything With Them?

        As far as I can tell, one really cannot do much with custom statuses. I created a new custom status for sales orders called "Customizing / Hold". This is for sales orders that have the Confirmed status. The use case here is that, as an e-commerce company,
      • Price Book in foreign currency

        We have many customers who buy in foreign currency (USD), where our base currency is our local currency (AUD). It would be normal (it is in Zoho Books, Zoho Inventory etc.) to assign a currency to a price book, but I cannot find this option in Zoho CRM
      • How to disable option to search (In Advanced Field > Matrix Choice > Dropdown)

        In Advanced Field > Matrix Choice > Dropdown I don’t want the option to search or type to fill in words. How can I disable or remove this function?
      • Layout rules in Zoho FSM

        As titled, is there an item in the pipeline or an ETA for the implementation of layout rules in Zoho FSM? Similar to how they work in Zoho CRM https://help.zoho.com/portal/en/kb/crm/customize-crm-account/customizing-page-layouts/articles/create-conditional-layouts
      • Marketing Tip #45: Use WhatsApp to engage customers and drive more sales

        Email is great. Social media is useful. But when it comes to getting a message actually read? WhatsApp wins. In general, open rates on WhatsApp messages are significantly higher than email, and the conversation feels personal rather than promotional.
      • Client Script also planned for Zoho Desk?

        Hello there, I modified something in Zoho CRM the other day and was amazed at the possibilities offered by the "Client Script" feature in conjunction with the ZDK. You can lock any fields on the screen, edit them, you can react to various events (field
      • View Answer Bot conversations?

        We are trialing Zia and are experimenting with Answer Bot on our knowledge base. So far so good! Management asks me if it is possible to view Answer Bot conversations, the purpose being to look over its shoulder and confirm that it is working as des
      • Add Comment workflow action delayed by 1–2 minutes in Zoho Desk

        Hello Zoho Support team, We are experiencing an issue with a workflow in Zoho Desk. The workflow is triggered when the Quote ID field is updated and performs two actions: A standard Field Update An Add Comment custom action When the Quote ID field is
      • Where do I edit the "Welcome to [portal name]" message

        I am looking for a way to edit the "Welcome to" part of the message that is seen on the landing page (ex: https://help.zoho.com/portal/en/home). When I use the French interface, it doesn't make sense... I want to change it from "Bienvenue chez" to" Bienvenue au". Thanks!
      • Zoho Books | Product updates | August 2026

        Hello users, July has been an exciting month for Zoho Books! This month, we're excited to introduce HTML PDF Templates, Placeholders as Pills, expanded approval workflows for Sales Returns and Journals, and significant compliance updates across the India,
      • Zoho CRM Layout Rules: Nine New Actions, Profile-Based Execution, and Interactive Preview

        Hello everyone, Availability: This feature is now available for customers in the JP and SA DCs. It is planned to be released for other customers in soon. We’re excited to announce powerful new enhancements to Layout Rules in Zoho CRM - a feature built
      • Zoho Books and TRAINING SALES receipt label for eTims?

        Hi, Can Zoho Books implement TRAINING SALES receipts and push them to eTims for test? In other words how can we send to Zoho or even create in Zoho training mode invoices and TEST the workflow POS>Zoho Books>eTims and back without actually registering
      • Reporting Tags and COGS

        Is there any way to get COGS recorded against reporting tags? The use cases seems very straightforward to me. If I'm running a P/L report against a specific reporting tag (I use mine for customer type, but it could be used for regions, etc.), the revenue
      • Hide Custom Fields for Customers or Vendors

        For whatever reason, all custom fields added to the Customer module also get added to the Vendor module. This leads to a clunky experience for users, as many custom fields we add only apply to one or the other. There should be a "hide" option to hide
      • Onboarding process

        I urgently need onboarding support. My account still shows trial period.
      • Detailed General Ledger - Display Transaction Description in Reports

        Hi Zoho Team, I'm currently using Zoho Books and have a question regarding the Detailed General Ledger report. When we enter a description or narration in transactions (Bills, Journal Entries, Expenses, etc.), the report does not display this description.
      • Zoho Mail Does Not Integrate with Analytics

        Hello everyone, Just wanted to make a quick post about the problem with zoho mail. Currently it does not connect to Zoho Analytics, which I think is crazy considering both of these applications have existed for a long period of time. Even zoho voice a
      • Net ##th Terms (e.g. due on the following 15th)

        I have a client who pays me twice monthly per our contract. It would be helpful to have terms on my invoices where the invoice is due on the 15th or the 30th of the same or the following month.
      • Project status update visibility within a project

        Currently the only place within Zoho projects to see status updates for a given project is actually not in the project it's self it's in the Collaboration section and then by searching for a given project and clicking on the status tab. It would be great
      • Using custom CRM fields

        I have created a series of fields in the Deals module that need to be linked to fields in a contract I have customized. I can only see how to map standard fields, not the custom ones. How do I do this?
      • Como limitar o Zia Agent?

        Geralmente quando estamos criando um agente de IA no ZIa Agent Studio, colocamos o que ele deve fazer, utilizando as instruções que colocamos no Knowledge Base. Mas como colocamos limites que não devem ser ultrapassados? Para isso utilizamos os Guardrails,
      • An important update for Zoho Cliq desktop users

        The latest version of the Zoho Cliq desktop app (v1.8.0) will no longer be supported on macOS 10.15 Catalina and earlier versions. This is because the framework we use (Electron) no longer supports some older macOS versions. If you’re using macOS 10.15
      • All new Address Field in Zoho CRM: maintain structured and accurate address inputs

        Availability Update: 29 September 2025: It's currently available for all new sign-ups and for existing Zoho CRM orgs which are in the Professional edition exclusively for IN DC users. 2 March 2026: Available to users in all DCs except US and EU DC. 24
      • Zoho Flow - Zoho Desk trigger "Ticket created or updated" overrides Department

        Just in case anyone else has this issue. We had a Zoho Flow with the Zoho Desk trigger "Ticket created or updated". In the trigger I had selected a Department (Sales). What happens is that the Department ID (Sales) is submitted as part of the request
      • 2026 Product Roadmap and Upcoming Features

        This is your guide to what is coming in Zoho Vertical Studio throughout 2026. We’ll update this post throughout the year as items move from development to release, and as and when new initiatives are added. Once a feature is released, it will be reflected
      • Introducing Canvas templates: Design once, apply everywhere

        Greetings all! We're happy to introduce Canvas templates, a Forms view enhancement that enables you to design form layouts just once and apply them seamlessly across multiple modules. Imagine you use five CRM modules (Contacts, Deals, Leads, and more),
      • Zoho Projects - Will there ever be a send email feature in Zoho Project?

        Hi team, Are there plans to or will there ever be a sendemail feature in Zoho Projects, brining it in line with other similar platforms like Asana, ClickUp and Monday? I know that you can add comments via email to a specific task, but I believe this only
      • Why cant i see the Campaigns module in my Zoho app

        I am on the ZOHO CRM Standard edition. I can clearly see and use the Campaign module when viewing the ZOHO CRM desktop. When I switch to my phone, the Campaign Module does not show. I have gone through all the settings I can think of, but I still can't
      • Next Page