Bulk Deletion of Zoho Projects Using Node.js and Zoho Projects API

Bulk Deletion of Zoho Projects Using Node.js and Zoho Projects API

Zoho Projects currently does not provide a built-in option to delete multiple projects in bulk from the UI. When working with testing environments or large numbers of temporary projects, deleting them one by one becomes time-consuming.

To address this, I created a small automation using Node.js and the Zoho Projects API to programmatically delete projects.

Below are the steps I followed.

Prerequisites
• Node.js installed
• Access to Zoho Projects portal
• Zoho API Self Client for OAuth authentication

Step 1 – Install Node.js

Download and install Node.js from:
https://nodejs.org

Verify installation:

node -v
npm -v

Step 2 – Create a working directory

cd Desktop
mkdir zoho-delete-projects
cd zoho-delete-projects

Step 3 – Initialize the Node project

npm init -y

Step 4 – Install Axios (HTTP client)

npm install axios

Step 5 – Create the script file

notepad deleteProjects.js

Step 6 – Add the following script

const axios = require("axios");

const TOKEN = "YOUR_ACCESS_TOKEN";
const PORTAL_ID = "YOUR_PORTAL_ID";

function sleep(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}

async function deleteProjects() {
try {

const res = await axios.get(
`https://projectsapi.zoho.in/restapi/portal/${PORTAL_ID}/projects/`,
{
headers: {
Authorization: `Zoho-oauthtoken ${TOKEN}`
}
}
);

const projects = res.data.projects;

console.log("Projects found:", projects.length);

for (const p of projects) {

const projectId = p.id_string;

await axios.delete(
`https://projectsapi.zoho.in/restapi/portal/${PORTAL_ID}/projects/${projectId}/`,
{
headers: {
Authorization: `Zoho-oauthtoken ${TOKEN}`
}
}
);

console.log("Deleted:", p.name);

// Delay added to avoid Zoho API rate limits
await sleep(2000);
}

} catch (err) {
console.log(err.response?.data || err.message);
}
}

deleteProjects();

Step 7 – Create a Self Client in Zoho API Console

https://api-console.zoho.com

Scopes used:

ZohoProjects.projects.READ
ZohoProjects.projects.DELETE

Step 8 – Generate a Grant Token

Step 9 – Convert the Grant Token to an Access Token

curl -X POST "https://accounts.zoho.in/oauth/v2/token" ^
-d "grant_type=authorization_code" ^
-d "client_id=CLIENT_ID" ^
-d "client_secret=CLIENT_SECRET" ^
-d "redirect_uri=https://www.zoho.com" ^
-d "code=GRANT_TOKEN"

Step 10 – Copy the access_token from the response.

Step 11 – Find your Portal ID

Example:

https://projects.zoho.in/portal/yourportalname

Portal ID = yourportalname

Step 12 – Update the script

const TOKEN = "ACCESS_TOKEN";
const PORTAL_ID = "yourportalname";

Step 13 – Run the script

node deleteProjects.js

The script will fetch the list of projects and delete them sequentially while respecting Zoho API rate limits.


      • Sticky Posts

      • Tip of the Week: Task Sorting

        I believe that sorting of tasks helps managing the activities in a better fashion. You might second it too . By default, the tasks are listed chronologically. However, you can sort the tasks either by its title, start date, end date, priority, created by and percentage completion. All you have to do is, click the Task Sorting option and select the required criteria. Few points to be noted about task sorting: This option is available in the Classic View only (within My Tasks, Tasks & Milestones section).
      • Tip # 3 - Follow And Add Followers To Your Project Modules

        Besides owning effective managers and quick-witted employees, you need to have supportive followers for accomplishing your project goals. Accompanying this note, today, lets run through a quick and easy tip on  'How to follow and add followers to your project activities?' . Follow the project activities all by yourself -Follow to get real-time milestone updates Milestones are nothing but your project goals, which can ultimately uplift your projects' quality to the next level. Now, users in the portal
      • Tip of the Week: Task Dependency (Duration in Hours)

        I hope the tip on task dependency helped in understanding how it works in Zoho Projects. In a real-time, the successor task may or may not start on the predecessor's completion date. On either case, a project management tool should allow the users to set dependency between tasks. Ain't it? In Zoho Projects, the Task Duration in Hours option allows the users to set dependency between tasks that ends and starts on the same day. The Portal Owner and Admin role users can activate this option from the
      • Tip of the Week: Task Dependency

        Task Dependency - a feature that allows the users to establish dependency / linking between tasks within the project. Points to be noted with respect to this feature: Task Dependency can be set only from the Dependency View section within the Tasks & Milestones module Tasks setup with duration (start & end date) will only be displayed in the Dependency View The supported dependency model is Finish to Start Dependency can be established only between the tasks in the same project A task can be dependent
      • Tip of the Week: Drag and Drop option in Calendar

        As the thoughts flow in your mind, you plan the tasks, provide duration and assign users. While you go through the calendar later, you feel that a couple of tasks should needs to be postponed by a couple of days. Do you navigate to the Tasks & Milestones section and change the task duration? is the question I have for you. In case of YES, I would say that the task duration can be changed from the Calendar module itself. All you need to do is: Drag the task bar and Drop it on the required date. Note:

        • Recent Topics

        • [Webinar] What's New in Zoho Analytics: Q1, 2026

          To all the data enthusiasts out there, we're back again with another power-packed webinar in the What's New series! This last quarter was marked by exciting new features and product updates focused on offering you top-notch solutions. With new data connectors,
        • Ask The Expert: Deep Dive into Zoho CRM, Desk, SalesIQ, and Campaigns!

          Are you using Zoho to power your sales, support, and marketing, and have questions about configuration, automation, or best practices? We have great news: the “Ask The Expert” session is coming to the Zoho Benelux Community! This session is specifically
        • Introducing parent-child ticketing in Zoho Desk [Early access]

          Hello Zoho Desk users! We have introduced the parent-child ticketing system to help customer service teams ensure efficient resolution of issues involving multiple, related tickets. You can now combine repetitive and interconnected tickets into parent-child
        • Workflows being applied and the Large unwanted popup

          When a workflow is being applied do to an action, then the Agent is left with a large Window asking if they would like the see the changes this workflow did. Is there any way to disable this prompt from appearing?
        • Users I've shared the sheet with cannot use the Custom Functions

          Hi, I have a Zoho Sheet worksheet that I shared to 2 colleagues, giving them full access: In that worksheet, I created a button with a custom Deluge function and it works flawlessly for me: For those I shared the worksheet to, when they click the button,
        • Limiting the form - Zoho People

          Hi Team, I would like to limit the number of form/request submissions for employees within a given month. For example, if an employee has already submitted 3 requests in the current month, they should not be allowed to submit any further requests. An
        • Zoho Analytics: Clarification on Email Schedule Limits in Basic Plan

          Hi Team, I have a question regarding the email scheduling limits in the Zoho Analytics Basic Plan. The plan shows that I can create 4 email schedules. However, I understand that schedule consumption is calculated based on recipients (i.e., 1 schedule
        • Zoho Books | Product updates | April 2026

          Hello users, Welcome to our April 2026 product updates roundup! Highlights include profit margin for sales transactions, insights in reports, recording deposits from undeposited funds in banking, and faster production workflows with improved assembly
        • Zoho Form not synching with Zoho CRM in CRM email template

          I have in the past successfully created an email template that has access to a Zoho Form in the url link to Forms in the email template. I am in the Contact Module of the CRM and I have created a Form for contacts and mapped the two. I am using the upsert
        • Standardize your booking forms with Centralized Customer Form

          We’re excited to introduce Centralized Customer Form, a new way to manage and standardize how customer information is collected across your event types. With this feature, you can define a common set of booking form fields once and apply them across your
        • Zoho Creator In-App Notification

          Hi Team, I have implemented an in-app notification using code, as it required some customization. I followed the example in the link below: https://www.zoho.com/deluge/help/pushnotify-using-deluge.html#Example I have a couple of questions regarding this
        • Add Flexible Recurrence Options for Meeting Scheduling in Zoho Cliq (e.g., Every 2 Weeks)

          Hello Zoho Cliq Team, We hope you are doing well. Currently, when scheduling a meeting inside Zoho Cliq, the recurrence options are limited to Daily, Weekly, Monthly, and Yearly. There is no ability to set a meeting to occur every X weeks — for example,
        • Announcing Zoho Sheet desktop app for macOS and Windows (Beta)

          Hello Sheet users, We know you’ve been waiting for this one. It has always been the top priority on our roadmap to provide a single native desktop app for macOS and Windows that works both online and offline. Today, we are excited to announce that the
        • In App Auto Refresh/Update Features

          Hi,    I am trying to use Zoho Creator for Restaurant management. While using the android apps, I reliased the apps would not auto refresh if there is new entries i.e new kitchen order ticket (KOT) from other users.   The apps does received notification but would not auto refresh, users required to refresh the apps manually in order to see the new KOT in the apps.    I am wondering why this features is not implemented? Or is this feature being considered to be implemented in the future? With the
        • Unable to Log In to FSM Mobile App

          Hello FSM Team, We are encountering an issue when logging in to the FSM mobile app. When entering the user email, the system shows the error: “This account does not exist.” However, the same user is able to log in successfully via web (fsm.zoho.com).
        • Clarification on “Change Owner” vs Dispatcher Role in Work Orders

          Hi Mr. Abid, Good day! We would like to understand the purpose and correct usage of the “Change Owner” option in the Work Order module. As we noticed, there is an option to Change Owner in the Work Order. At the same time, there is also a separate field/role
        • New Income Tax Act 2025 and Rules 2026 for India (Effective 1 April 2026)

          Hello everyone, The Income Tax Act 2025 came into effect from 1 April 2026. This new law replaces the old Income Tax Act of 1961. Along with the new Act, the Income Tax Rules 2026 have also been released by the government. These updates bring practical
        • Facturation électronique 2026 - obligation dès le 1er septembre 2026

          Bonjour, Je me permets de réagir à divers posts publiés ici et là concernant le projet de E-Invoicing, dans le cadre de la facturation électronique prévue très prochainement. Dans le cadre du passage à la facturation électronique pour les entreprises,
        • How can I delete a user profile created ?

          I can't delete custom profiles created. Why ?
        • Search API filter/sort ignores comment-triggered modifiedTime updates

          Summary When a comment is added to a Call or Account, the parent record's modifiedTime is correctly bumped. This bumped value is visible in: GET /api/v1/calls/{id} ✅ GET /api/v1/calls/search without a filter ✅ — the record's response body shows the new
        • ZOHO Cadence

          Can you edit when a cadence is set to enroll? For instance, I currently have it set up to enroll three days after a new record is created that fits the custom view criteria; however, I would like to change it to enroll immediately. I do not see where
        • Automate the file import step

          Hello everyone, I have a Sales - 'Account' category, and currently import the file to update it as follows: Import Accounts - From File - Update existing Accounts only - select and match the field the CRM. Since we have been using Microsoft 365 SharePoint.
        • Introducing SlyteUI : From Idea to a Working Interface in Minutes

          Hello everyone! Are you spending hours building basic UIs? Does even the smallest customization feel like a major task? CRM customization should feel intuitive and straightforward, not time consuming or exhausting. SlyteUI makes this possible by simplifying
        • What's New in Zoho Billing | March 2026

          March is here with a fresh wave of updates to Zoho Billing. From making compliance easier, reporting more flexible, to making day-to-day workflows smoother across the board. Here's everything that's new this month. Introducing Usage-Based Billing Reports
        • Dynamic Multi-Staff Selection for Ad-Hoc Bookings

          Summary Allow customers or internal schedulers to select specific staff members at the time of booking, with Zoho Bookings automatically surfacing only the time slots where all selected members are simultaneously available. Current Behaviour Zoho Bookings
        • How Can I Clear Deleted Members and Free Up Their Storage?

          Can we remove these deleted members and free up their storage?
        • Zoho Books Create Invoice API

          I am creating zoho invoices via the API.  Now that zoho has released sub-accounts, i'd like to create invoices and link them to sub-accounts within "sales" account.   For example; my chart of accounts looks like this; Sales ->Website Sales    ->Campaign Sales ->Offline Sales However, when I try to pass these accounts to the API, I receive an error that only Bank accounts can be passed with the create invoice.  
        • Multiselect lookup in subform

          It would be SO SO useful if subforms could support a multiselect look up field! Is this in the works??
        • Ability to Set Text Direction for Individual Cells in Zoho Sheet

          Dear Zoho Sheet Team, We hope you are doing well. We would like to request an enhancement in Zoho Sheet that allows users to set the text direction (right-to-left or left-to-right) for individual cells, similar to what is available in Google Sheets. Use
        • Help Centre - Description Field on Submit New Ticket

          Hello. I cannot find a way to show the Description field when submitting a ticket via the Help centre form. The description field seems to be locked down (see screenshot). Do you know of another field that I can use which can be visible in help centre
        • Problem in usage zoho

          Difficulty to submit the from in my training to handle ticket on your free trial
        • Contact not saved after editing

          Hi. I discovered a couple of problems with Zoho contact. (1) BUG. Contact is not saved after editing. If you edit an existing contact by putting a bracket in one of the fields you get the message "Contact updated successfully" but nothing is saved. All updates (including the other fields) are lost. Steps to reproduce. Go to an existing contact and change the first name to "Robert (Bob)". (2) In the phone number fields you can only save numeric data (0 to 9). This seems an unneccessary restriction.
        • Zoho Mail Android app update: UI revamp

          Hello everyone! We are excited to share that the first phase of the Zoho Mail Android UI revamp is now live. In this update, we have redesigned navigation bar at the bottom to quickly access the Email, Calendar, Contacts, and Settings modules. Also, the
        • Opt-out from mailing list means can't email at all??

          It seems that if a contact unsubscribes from a mailing list the only way to email them is to uncheck the email opt-out box first, then re-check after the email has been sent. I've been through a chat with support and they confirmed this. This seems bizarre.
        • Email Opt Out Question

          Has the problem where if a customer is emailed opt out prevents you sending standard emails? For me this feature is simply to stop any email marketing and should not block people from receiving emails via Zoho mobile, which makes no sense.
        • Items Landed Cost and Profit?

          Hello, we recently went live with Zoho Inventory, and I have a question about the Landed Cost feature. The FAQ reads: "Tracking the landed cost helps determine the overall cost incurred in procuring the product. This, in turn, helps you to decide the
        • Bank Feeds

          Since Friday my bank feeds wont work. I have refreshed feeds, deactivate and reactivate and nothing is working
        • Show backordered items on packing slip

          Is it possible to show a column on the Packing Slip that shows number of backordered items when a PO is only partially filled? I would also like to see the Backordered column appear on POs after you receive items if you didn't get ALL of the items or partial amounts of items. And lastly, it would be nice to have the option of turning on the Backordered column for invoices if you only invoice for a partial order. -Tom
        • Newby Questions

          Q1. The top bar of Zoho Books has a "Search in Banking (/) " field. What is the proper use of this text box? - Searching for Amazon for example has no results but there are transactions. - Is the search case sensitive? - Are regular expressions allowed?
        • Add Custom Fields only in Customer module and not on supplier module!? Is not there a way to do that!?

          I am trying to create custom fields on clients module but it also gets created on suppliers module; which of course does not make sense at all as a lot of custom fields are client or supplier specific but never both. I am missing something? This seems
        • Next Page