AutomationFlowsEmail & Gmail › Automate Hs Code Lookup & Enrichment with Google Sheets and Customs API (beta)

Automate Hs Code Lookup & Enrichment with Google Sheets and Customs API (beta)

ByThomas @thomas-z on n8n.io

"I used to spend hours every week just copy-pasting product descriptions to find the right tariff codes for our international shipments. It was tedious and prone to errors." - Accounting specialist.

Chat trigger trigger★★★★☆ complexityAI-powered15 nodesChat TriggerHTTP RequestGoogle SheetsGmail
Email & Gmail Trigger: Chat trigger Nodes: 15 Complexity: ★★★★☆ AI nodes: yes Added:

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

This workflow follows the Chat Trigger → Gmail 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": "LdR1WNr3yM5Lw9X8",
  "name": "Customs_Tariff_Number_Research V2",
  "tags": [],
  "nodes": [
    {
      "id": "ec7c3dd9-74ee-4008-b32c-da57d6069e30",
      "name": "Chat Trigger",
      "type": "@n8n/n8n-nodes-langchain.chatTrigger",
      "position": [
        -336,
        336
      ],
      "parameters": {
        "options": {}
      },
      "typeVersion": 1.1
    },
    {
      "id": "0f817acd-9c17-4756-90ba-ff1106edad53",
      "name": "Customs Tariff API Query",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        -144,
        336
      ],
      "parameters": {
        "url": "=https://www.zolltarifnummern.de/api/v2/cnSuggest?term={{ encodeURIComponent($json.chatInput) }}&lang=de",
        "options": {
          "timeout": 10000,
          "response": {
            "response": {
              "responseFormat": "json"
            }
          },
          "allowUnauthorizedCerts": true
        },
        "sendHeaders": true,
        "headerParameters": {
          "parameters": [
            {
              "name": "Accept",
              "value": "application/json"
            },
            {
              "name": "User-Agent",
              "value": "n8n-workflow/1.0"
            }
          ]
        }
      },
      "typeVersion": 4.2,
      "continueOnFail": true
    },
    {
      "id": "8d670dda-9b23-4542-bb8f-ce7074beac64",
      "name": "Output Customs Tariff Number",
      "type": "n8n-nodes-base.set",
      "position": [
        48,
        336
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "assignment-1",
              "name": "text",
              "type": "string",
              "value": "={{ $json.suggestions[1].code }}"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "9b92a873-ecb8-43cc-929f-9514bed35c5e",
      "name": "Read Item Descriptions",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        128,
        560
      ],
      "parameters": {
        "options": {},
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": "gid=0",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1nJ_VAeCwOnFwF-t7rFlbftbkAuT35gig9d7YCGsurHs/edit#gid=0",
          "cachedResultName": "Sheet1"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "1nJ_VAeCwOnFwF-t7rFlbftbkAuT35gig9d7YCGsurHs",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1nJ_VAeCwOnFwF-t7rFlbftbkAuT35gig9d7YCGsurHs/edit?usp=drivesdk",
          "cachedResultName": "Customs Numbers"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.5
    },
    {
      "id": "f95221b2-9d6d-4dd2-bd22-7faab04341f9",
      "name": "Loop Over Items",
      "type": "n8n-nodes-base.splitInBatches",
      "position": [
        384,
        560
      ],
      "parameters": {
        "options": {}
      },
      "typeVersion": 3
    },
    {
      "id": "60ddfdb2-b326-4cae-bc20-10cf2631a6ae",
      "name": "Write Customs Tariff to Sheet",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        992,
        576
      ],
      "parameters": {
        "columns": {
          "value": {},
          "schema": [
            {
              "id": "Artikelbeschreibung",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Artikelbeschreibung",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Zolltarifnummer",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Zolltarifnummer",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "row_number",
              "type": "number",
              "display": true,
              "removed": true,
              "readOnly": true,
              "required": false,
              "displayName": "row_number",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "autoMapInputData",
          "matchingColumns": [
            "Artikelbeschreibung"
          ],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "update",
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": "gid=0",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1nJ_VAeCwOnFwF-t7rFlbftbkAuT35gig9d7YCGsurHs/edit#gid=0",
          "cachedResultName": "Sheet1"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "1nJ_VAeCwOnFwF-t7rFlbftbkAuT35gig9d7YCGsurHs",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1nJ_VAeCwOnFwF-t7rFlbftbkAuT35gig9d7YCGsurHs/edit?usp=drivesdk",
          "cachedResultName": "Customs Numbers"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.5
    },
    {
      "id": "9b5f275d-136a-4227-9a62-120bc32e0c0e",
      "name": "Customs Tariff API Query Batch",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        592,
        576
      ],
      "parameters": {
        "url": "=https://www.zolltarifnummern.de/api/v2/cnSuggest?term={{ encodeURIComponent($json['Artikelbeschreibung']) }}&lang=de",
        "options": {
          "timeout": 10000,
          "response": {
            "response": {
              "responseFormat": "json"
            }
          },
          "allowUnauthorizedCerts": true
        },
        "sendHeaders": true,
        "headerParameters": {
          "parameters": [
            {
              "name": "Accept",
              "value": "application/json"
            },
            {
              "name": "User-Agent",
              "value": "n8n-workflow/1.0"
            }
          ]
        }
      },
      "typeVersion": 4.2,
      "continueOnFail": true
    },
    {
      "id": "653ef025-1c47-4115-94f3-867138e1f654",
      "name": "Send Completion Email",
      "type": "n8n-nodes-base.gmail",
      "position": [
        784,
        352
      ],
      "parameters": {
        "sendTo": "test@example.com",
        "message": "Job completed successfully",
        "options": {},
        "subject": "Completed: Customs Tariff Number Research Finished"
      },
      "credentials": {
        "gmailOAuth2": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2.1
    },
    {
      "id": "b02dc4a3-b4e0-4bb1-9d8a-112ac0301b87",
      "name": "Aggregate",
      "type": "n8n-nodes-base.aggregate",
      "position": [
        560,
        352
      ],
      "parameters": {
        "options": {},
        "aggregate": "aggregateAllItemData"
      },
      "typeVersion": 1
    },
    {
      "id": "bb6f42bd-de6e-4adb-97d2-b89867709d5c",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -384,
        256
      ],
      "parameters": {
        "color": 6,
        "width": 640,
        "height": 256,
        "content": "## Manual Single Query for Customs Tariff Number\nEnter item description and receive suggestion #1 from the API query"
      },
      "typeVersion": 1
    },
    {
      "id": "6229ef15-b823-48f2-82bb-f81d07f7f976",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -384,
        528
      ],
      "parameters": {
        "width": 1552,
        "height": 256,
        "content": "## Batch Query from List\nAll entries in column A \nwill be enriched with customs \ntariff numbers in column B\n(select Google Sheet and tab)"
      },
      "typeVersion": 1
    },
    {
      "id": "7c9e9844-9995-41d6-9ec2-db4a3af10160",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        272,
        256
      ],
      "parameters": {
        "color": 4,
        "width": 896,
        "height": 256,
        "content": "## Completion\nNotification email that process \nis finished (configure desired email address)"
      },
      "typeVersion": 1
    },
    {
      "id": "18289af3-a07a-46ef-abed-10d4bc6aec29",
      "name": "Start Query",
      "type": "n8n-nodes-base.manualTrigger",
      "position": [
        -48,
        560
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "31ef430b-a463-4742-bf36-57509464a684",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -816,
        256
      ],
      "parameters": {
        "color": 3,
        "width": 416,
        "height": 256,
        "content": "### [Video Tutorial](https://youtu.be/UccIqmMmq7w)\n@[youtube](UccIqmMmq7w)"
      },
      "typeVersion": 1
    },
    {
      "id": "18d3e9ef-6168-482f-bcd7-d05ae1789975",
      "name": "prepare data",
      "type": "n8n-nodes-base.set",
      "position": [
        800,
        576
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "assignment-1",
              "name": "Zolltarifnummer",
              "type": "string",
              "value": "={{ $json.suggestions && $json.suggestions[1] ? $json.suggestions[1].code : 'Nicht gefunden' }}"
            },
            {
              "id": "assignment-3",
              "name": "Artikelbeschreibung",
              "type": "string",
              "value": "={{ $('Loop Over Items').item.json['Artikelbeschreibung'] }}"
            },
            {
              "id": "bb2fbbce-b66b-42b6-a639-baa949b763e8",
              "name": "Beschreibung der Zolltarifnummer",
              "type": "string",
              "value": "={{ $json.suggestions[1].value.split(/<br\\s*\\/?>/i)[1].trim() }}"
            },
            {
              "id": "f4389d75-a1f3-4ccd-9a62-0f7544923e02",
              "name": "Score",
              "type": "string",
              "value": "={{ ($json.suggestions[1].score * 100).toFixed(1) + '%' }}"
            }
          ]
        }
      },
      "typeVersion": 3.4
    }
  ],
  "active": false,
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "7e35bde7-5057-41a1-a1a9-e332db984cff",
  "connections": {
    "Aggregate": {
      "main": [
        [
          {
            "node": "Send Completion Email",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Start Query": {
      "main": [
        [
          {
            "node": "Read Item Descriptions",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Chat Trigger": {
      "main": [
        [
          {
            "node": "Customs Tariff API Query",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "prepare data": {
      "main": [
        [
          {
            "node": "Write Customs Tariff to Sheet",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Loop Over Items": {
      "main": [
        [
          {
            "node": "Aggregate",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Customs Tariff API Query Batch",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Read Item Descriptions": {
      "main": [
        [
          {
            "node": "Loop Over Items",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Customs Tariff API Query": {
      "main": [
        [
          {
            "node": "Output Customs Tariff Number",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Write Customs Tariff to Sheet": {
      "main": [
        [
          {
            "node": "Loop Over Items",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Customs Tariff API Query Batch": {
      "main": [
        [
          {
            "node": "prepare data",
            "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

"I used to spend hours every week just copy-pasting product descriptions to find the right tariff codes for our international shipments. It was tedious and prone to errors." - Accounting specialist.

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

More Email & Gmail workflows → · Browse all categories →

Related workflows

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

Email & Gmail

Paste any competitor's YouTube URL in chat — and this n8n workflow does everything automatically. WayinVideo API reads the entire video, extracts the summary, key highlights with timestamps, and hasht

HTTP Request, Gmail, Chat Trigger
Email & Gmail

This template is ideal for HR teams, startup founders, operations leads, remote-first companies, and freelancers managing onboarding manually or across multiple tools.

Google Sheets Trigger, Jira, HubSpot Trigger +7
Email & Gmail

✨🔪 Advanced AI Powered Document Parsing & Text Extraction with Llama Parse. Uses gmail, gmailTrigger, limit, stickyNote. Webhook trigger; 54 nodes.

Gmail, Gmail Trigger, HTTP Request +6
Email & Gmail

Stop finding out you're out of stock after a customer already tried to buy. This workflow monitors your entire product inventory daily, calculates how fast each SKU is selling, and automatically raise

Google Sheets, HTTP Request, Gmail +1
Email & Gmail

n8n Graphic Design Team. Uses googleSheets, googleDrive, httpRequest, outputParserStructured. Event-driven trigger; 37 nodes.

Google Sheets, Google Drive, HTTP Request +5