AutomationFlowsData & Sheets › Automated Zoho Inventory to Supabase Product Data Pipeline

Automated Zoho Inventory to Supabase Product Data Pipeline

ByRahul Joshi @rahul08 on n8n.io

Description

Cron / scheduled trigger★★★★☆ complexity11 nodesHTTP RequestSupabase
Data & Sheets Trigger: Cron / scheduled Nodes: 11 Complexity: ★★★★☆ Added:

This workflow corresponds to n8n.io template #5503 — we link there as the canonical source.

This workflow follows the HTTP Request → Supabase recipe pattern — see all workflows that pair these two integrations.

The workflow JSON

Copy or download the full n8n JSON below. Paste it into a new n8n workflow, add your credentials, activate. Full import guide →

Download .json
{
  "id": "sezfOd4PU3efRizo",
  "name": "Zoho Inventory to Supabase",
  "tags": [],
  "nodes": [
    {
      "id": "a3eaaf09-eb05-4181-a196-ab80b2b1cc64",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1000,
        -60
      ],
      "parameters": {
        "width": 620,
        "height": 460,
        "content": "## Automated Zoho Inventory to Supabase Data Migration Workflow\n\nThis n8n workflow automates the process of migrating product data from Zoho Inventory to a Supabase table, ensuring seamless, scheduled updates and organized data management. Key features include:\n\t\u2022\tAutomated Scheduling: Runs on a set schedule to keep Supabase tables in sync with Zoho Inventory.\n\t\u2022\tSecure API Integration: Uses Zoho\u2019s OAuth2.0 for secure access token generation and API requests.\n\t\u2022\tComprehensive Data Retrieval: Fetches all listed items from Zoho Inventory, including detailed product attributes and stock information.\n\t\u2022\tData Structuring: Splits and organizes retrieved data for efficient migration.\n\t\u2022\tDirect Supabase Migration: Maps and transfers relevant fields\u2014such as product IDs, names, variants, attributes, and stock levels\u2014directly into your Supabase database.\n\t\u2022\tScalable & Reliable: Easily adapts to growing product catalogs and ensures consistent, up-to-date inventory records.\n\nIdeal for businesses looking to automate their inventory data pipeline between Zoho and Supabase, reducing manual work and minimizing errors."
      },
      "typeVersion": 1
    },
    {
      "id": "111cf5b9-cf9e-4a1a-9120-f2938207fac5",
      "name": "Scheduled Trigger1",
      "type": "n8n-nodes-base.scheduleTrigger",
      "position": [
        -100,
        80
      ],
      "parameters": {
        "rule": {
          "interval": [
            {}
          ]
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "24a43bf2-fd13-4c2a-9c8b-45687aa136ed",
      "name": "POST to Zoho API for Access Token1",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        120,
        80
      ],
      "parameters": {
        "url": "https://accounts.zoho.in/oauth/v2/token",
        "method": "POST",
        "options": {},
        "sendBody": true,
        "contentType": "form-urlencoded",
        "bodyParameters": {
          "parameters": [
            {
              "name": "refresh_token",
              "value": "your refresh token here"
            },
            {
              "name": "client_id",
              "value": "your client id here"
            },
            {
              "name": "client_secret",
              "value": "your client secret here"
            },
            {
              "name": "grant_type",
              "value": "refresh_token"
            }
          ]
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "6f450435-efb3-4ee7-bfe2-3950018c05f0",
      "name": "GET to Zoho Inventory for Listed Items1",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        340,
        80
      ],
      "parameters": {
        "url": "https://www.zohoapis.in/inventory/v1/items",
        "options": {},
        "sendQuery": true,
        "sendHeaders": true,
        "queryParameters": {
          "parameters": [
            {
              "name": "organization_id",
              "value": "your organization id here"
            }
          ]
        },
        "headerParameters": {
          "parameters": [
            {
              "name": "Authorization",
              "value": "=Zoho-oauthtoken {{ $json.access_token }}"
            }
          ]
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "433dba2c-a9a9-4c8b-af95-c884cdff3f62",
      "name": "Split for better organisation1",
      "type": "n8n-nodes-base.splitOut",
      "position": [
        560,
        80
      ],
      "parameters": {
        "include": "allOtherFields",
        "options": {},
        "fieldToSplitOut": "items"
      },
      "typeVersion": 1
    },
    {
      "id": "b96e2231-06f7-4b7a-8d6e-5c734ecafb79",
      "name": "Migrating to Supabase Table1",
      "type": "n8n-nodes-base.supabase",
      "notes": "https://docs.google.com/spreadsheets/d/1lm2cYalIe3mt8w7XZf7ZGeAxjksRst_EddW4uJ2SOV8/edit?usp=sharing",
      "position": [
        780,
        80
      ],
      "parameters": {
        "tableId": "Fairy Frills",
        "fieldsUi": {
          "fieldValues": [
            {
              "fieldId": "Product ID",
              "fieldValue": "={{ $json.items.group_id }}"
            },
            {
              "fieldId": "Product Name",
              "fieldValue": "={{ $json.items.group_name }}"
            },
            {
              "fieldId": "Brand",
              "fieldValue": "={{ $json.items.brand }}"
            },
            {
              "fieldId": "Variant ID",
              "fieldValue": "={{ $json.items.item_id }}"
            },
            {
              "fieldId": "Is Returnable Item",
              "fieldValue": "={{ $json.items.is_returnable }}"
            },
            {
              "fieldId": "AttributeName1",
              "fieldValue": "={{ $json.items.attribute_name1 }}"
            },
            {
              "fieldId": "AttributeType1",
              "fieldValue": "={{ $json.items.attribute_type1 }}"
            },
            {
              "fieldId": "AttributeName2",
              "fieldValue": "={{ $json.items.attribute_name2 }}"
            },
            {
              "fieldId": "AttributeType2",
              "fieldValue": "={{ $json.items.attribute_type2 }}"
            },
            {
              "fieldId": "AttributeName3",
              "fieldValue": "={{ $json.items.attribute_name3 }}"
            },
            {
              "fieldId": "AttributeType3",
              "fieldValue": "={{ $json.items.attribute_type3 }}"
            },
            {
              "fieldId": "Tags",
              "fieldValue": "={{ $json.items.tags }}"
            },
            {
              "fieldId": "Unit",
              "fieldValue": "={{ $json.items.unit }}"
            },
            {
              "fieldId": "Item Type",
              "fieldValue": "={{ $json.items.item_type }}"
            },
            {
              "fieldId": "Variant Name",
              "fieldValue": "={{ $json.items.item_name }}"
            },
            {
              "fieldId": "SKU",
              "fieldValue": "={{ $json.items.sku }}"
            },
            {
              "fieldId": "AttributeOptionData2",
              "fieldValue": "={{ $json.items.attribute_option_data2 }}"
            },
            {
              "fieldId": "AttributeOptionData3",
              "fieldValue": "={{ $json.items.attribute_option_data3 }}"
            },
            {
              "fieldId": "Stock On Hand",
              "fieldValue": "={{ $json.items.stock_on_hand }}"
            },
            {
              "fieldId": "UPC",
              "fieldValue": "={{ $json.items.upc }}"
            },
            {
              "fieldId": "EAN",
              "fieldValue": "={{ $json.items.ean }}"
            },
            {
              "fieldId": "ISBN",
              "fieldValue": "={{ $json.items.isbn }}"
            },
            {
              "fieldId": "Status",
              "fieldValue": "={{ $json.items.status }}"
            },
            {
              "fieldId": "Part Number",
              "fieldValue": "={{ $json.items.part_number }}"
            },
            {
              "fieldId": "Reorder Level",
              "fieldValue": "={{ $json.items.reorder_level }}"
            },
            {
              "fieldId": "Dimension Unit",
              "fieldValue": "={{ $json.items.dimension_unit }}"
            },
            {
              "fieldId": "Weight Unit",
              "fieldValue": "={{ $json.items.weight_unit }}"
            },
            {
              "fieldId": "Created Time",
              "fieldValue": "={{ $json.items.created_time }}"
            }
          ]
        }
      },
      "credentials": {
        "supabaseApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "83553668-5a8e-465f-9893-bd20d4391d00",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -20,
        300
      ],
      "parameters": {
        "color": 5,
        "width": 360,
        "height": 200,
        "content": "## POST for Access Token\n- Go to Zoho API Console\n- Create a self client with the scope ZohoInventory.items.READ\n- Get Refresh Token, Client ID, and Client Secret\n- This node is using the Refresh Token to create an Access Token for later use"
      },
      "typeVersion": 1
    },
    {
      "id": "f4cbe976-520f-4dd7-ab78-080754bd3750",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        220,
        -160
      ],
      "parameters": {
        "color": 4,
        "width": 360,
        "height": 200,
        "content": "## GET Items from Zoho Inventory\n- Find your organization ID from Zoho Commerce URL\n- This node gets all the items from Zoho Inventory"
      },
      "typeVersion": 1
    },
    {
      "id": "3f452ab6-7e20-49d1-93fb-c72b0acfc26b",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        420,
        300
      ],
      "parameters": {
        "color": 3,
        "width": 360,
        "height": 200,
        "content": "## Split Node\n- This node splits the list for better organization of the flow\n"
      },
      "typeVersion": 1
    },
    {
      "id": "758314fa-3684-41e1-b1ce-adaf960afd9c",
      "name": "Sticky Note4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        640,
        -160
      ],
      "parameters": {
        "color": 2,
        "width": 360,
        "height": 200,
        "content": "## Migrate to Supabase\n- Sending product information to Supabase Table\n- Find URL in the Notes for Table Coloumns\n- Make a Copy of the Google Sheet, and Import it to your Supabase Project from Table Editor"
      },
      "typeVersion": 1
    },
    {
      "id": "10d1ee56-7fd0-4493-849c-a3b4e8d88f33",
      "name": "Sticky Note5",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -220,
        -160
      ],
      "parameters": {
        "color": 7,
        "width": 360,
        "height": 200,
        "content": "## Scheduled Trigger 1\n- Use this trigger for scheduling the workflow at regular intervals \n"
      },
      "typeVersion": 1
    }
  ],
  "active": false,
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "d5c8959d-9406-456f-9271-59f0f63b83b1",
  "connections": {
    "Scheduled Trigger1": {
      "main": [
        [
          {
            "node": "POST to Zoho API for Access Token1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Split for better organisation1": {
      "main": [
        [
          {
            "node": "Migrating to Supabase Table1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "POST to Zoho API for Access Token1": {
      "main": [
        [
          {
            "node": "GET to Zoho Inventory for Listed Items1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "GET to Zoho Inventory for Listed Items1": {
      "main": [
        [
          {
            "node": "Split for better organisation1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}

Credentials you'll need

Each integration node will prompt for credentials when you import. We strip credential IDs before publishing — you'll add your own.

Pro

For the full experience including quality scoring and batch install features for each workflow upgrade to Pro

About this workflow

Description

Source: https://n8n.io/workflows/5503/ — original creator credit. Request a take-down →

More Data & Sheets workflows → · Browse all categories →

Related workflows

Workflows that share integrations, category, or trigger type with this one. All free to copy and import.

Data & Sheets

This workflow solves a common problem with RSS feeds: they often only provide a short summary or snippet of the full article. This template automatically monitors a list of your favorite blog RSS feed

HTTP Request, RSS Feed Read, Supabase
Data & Sheets

This workflow is a multi-system document synchronization pipeline built in n8n, designed to automatically sync and back up files between Microsoft SharePoint, Supabase/Postgres, and Google Drive.

HTTP Request, Supabase, Postgres +1
Data & Sheets

03 - Recordatorio 4h (CON VERIFICACIÓN) ✅. Uses supabase, httpRequest, twilio. Scheduled trigger; 17 nodes.

Supabase, HTTP Request, Twilio
Data & Sheets

02 - Recordatorio 24h antes (CON VERIFICACIÓN) ✅. Uses supabase, httpRequest, twilio. Scheduled trigger; 17 nodes.

Supabase, HTTP Request, Twilio
Data & Sheets

• Fetches IT-related tenders from the French BOAMP API (filter: informatique) • Scores each tender with OpenAI (pertinence, budget, stack, GO/NO-GO) • Routes to Supabase as hot (≥75) or archived • Run

HTTP Request, Supabase