{"id":50425506,"url":"https://github.com/soapyred/n8n-nodes-freightutils","last_synced_at":"2026-05-31T10:04:15.943Z","repository":{"id":353866420,"uuid":"1220227649","full_name":"SoapyRED/n8n-nodes-freightutils","owner":"SoapyRED","description":"n8n community node for FreightUtils — free freight tools API (CBM, LDM, ADR dangerous goods, HS codes, and more)","archived":false,"fork":false,"pushed_at":"2026-04-25T18:27:24.000Z","size":114,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-04-26T01:14:10.112Z","etag":null,"topics":["customs","dangerous-goods","freight","logistics","n8n","n8n-community-node-package","shipping"],"latest_commit_sha":null,"homepage":"https://www.freightutils.com","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/SoapyRED.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE.md","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-04-24T17:22:16.000Z","updated_at":"2026-04-25T18:27:28.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/SoapyRED/n8n-nodes-freightutils","commit_stats":null,"previous_names":["soapyred/n8n-nodes-freightutils"],"tags_count":3,"template":false,"template_full_name":null,"purl":"pkg:github/SoapyRED/n8n-nodes-freightutils","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SoapyRED%2Fn8n-nodes-freightutils","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SoapyRED%2Fn8n-nodes-freightutils/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SoapyRED%2Fn8n-nodes-freightutils/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SoapyRED%2Fn8n-nodes-freightutils/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/SoapyRED","download_url":"https://codeload.github.com/SoapyRED/n8n-nodes-freightutils/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SoapyRED%2Fn8n-nodes-freightutils/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33726741,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-05-31T02:00:06.040Z","response_time":95,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["customs","dangerous-goods","freight","logistics","n8n","n8n-community-node-package","shipping"],"created_at":"2026-05-31T10:04:15.219Z","updated_at":"2026-05-31T10:04:15.937Z","avatar_url":"https://github.com/SoapyRED.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# n8n-nodes-freightutils\n\n[![npm version](https://img.shields.io/npm/v/n8n-nodes-freightutils)](https://www.npmjs.com/package/n8n-nodes-freightutils)\n[![npm downloads (total)](https://img.shields.io/npm/dt/n8n-nodes-freightutils)](https://www.npmjs.com/package/n8n-nodes-freightutils)\n[![npm downloads (month)](https://img.shields.io/npm/dm/n8n-nodes-freightutils)](https://www.npmjs.com/package/n8n-nodes-freightutils)\n[![License: MIT](https://img.shields.io/npm/l/n8n-nodes-freightutils)](https://opensource.org/licenses/MIT)\n\nn8n community node for [FreightUtils](https://www.freightutils.com) — free freight calculators, ADR 2025 dangerous-goods lookup, HS 2022 codes, UK import duty, UN/LOCODE, and more. One node, 19 operations, four resources.\n\n## Install\n\nInside n8n:\n\n1. Open **Settings → Community Nodes**\n2. Click **Install**\n3. Enter `n8n-nodes-freightutils`\n4. Confirm\n\nManual install (self-hosted, if the UI is disabled):\n\n```bash\ncd ~/.n8n/nodes\nnpm install n8n-nodes-freightutils\n```\n\nRestart n8n. The node appears as **FreightUtils** under the **Transform** group.\n\n## Releasing (maintainers only)\n\nThis package uses `release-it` (driven by `n8n-node release`) for the publish flow. **Do NOT use `npm publish` directly** — there is intentionally no `prepublishOnly` hook to short-circuit the registry publish, but `release-it` is the path that handles the version bump, git tag, GitHub release, and `npm publish` together in the right order.\n\n```bash\nnpm run release        # interactive: pick patch / minor / major\nnpm run release minor  # non-interactive\n```\n\nWhy no `prepublishOnly`: an earlier scripted `prepublishOnly` ran `n8n-node prerelease` which itself shells into `release-it`; chaining release-it through `npm publish` failed deterministically when a same-version git tag already existed (a common state after a manual / aborted publish), with EPERM-flavoured noise on Windows + OneDrive trees that had nothing to do with the actual problem. Removing the hook means `npm publish` works as a standard fallback if the release script ever needs an end-run.\n\n## Credentials\n\n1. Generate a free API key at \u003chttps://www.freightutils.com/api-docs\u003e (you get **100 requests/day** on the free tier).\n2. In n8n → **Credentials → Create New**, pick **FreightUtils API**.\n3. Paste the key. Leave **Base URL** as `https://www.freightutils.com/api` unless you're pointing at a preview deployment.\n4. Save. n8n tests the credential by hitting `/api/health` — you should see a green tick.\n\n## Rate limits\n\n| Tier | Limit | Pricing |\n|------|-------|---------|\n| Anonymous (no key) | 25/day per IP | Free |\n| Free key | 100/day | Free |\n| Pro key | 50,000/month | £19/month |\n\nSee \u003chttps://www.freightutils.com/pricing\u003e for Pro access. Every response includes `X-RateLimit-Limit` / `X-RateLimit-Remaining` / `X-RateLimit-Reset` headers.\n\n## Operations\n\n**Freight Ops** — CBM · LDM · Chargeable Weight · Pallet Fitting · Unit Converter · Consignment\n\n**Dangerous Goods** — ADR Lookup · ADR LQ/EQ Check · ADR Exemption Calculator · ADR Exemption Calculator (Consignment)\n\n**Customs \u0026 Trade** — HS Code Lookup · Incoterms Lookup · UK Duty Calculator\n\n**Reference Data** — Airline · UN/LOCODE · ULD · Container · Vehicle · Health Ping · List Tools\n\n### Consignment-shape operations: literal or dynamic items\n\n`Consignment`, `ADR LQ/EQ Check`, and `ADR Exemption Calculator (Consignment)` all take a list of items. You can provide them either way:\n\n- **Literal**: leave **Items Source** at the default `Add Items in List`, then click `Add Item` in the node UI for each item and fill the fields directly. Best for small fixed lists.\n- **Dynamic**: switch **Items Source** to `JSON Expression`, then paste an array (or expression) into the **Items (JSON)** field — e.g. `={{ JSON.stringify($json.items) }}` from a Code or Set node that produces `[{un_number, quantity, unit}, ...]`. Best when the consignment shape comes from a webhook, database query, or another workflow.\n\nBoth shapes hit the same API endpoint with the same wire format. (v0.3.0 had a regression where the literal-mode fixedCollection silently mishandled expressions; fixed in v0.3.1 by adding the JSON Expression source — see [CHANGELOG](./CHANGELOG.md).)\n\n## Known limitations\n\n- **n8n core: literal-mode `multipleValues` fixedCollection silently corrupts expression input.** If you set the literal-mode `Items` fixedCollection (or the `Dangerous Goods Items` collection) directly to an expression like `={{ $json.items }}` instead of switching to JSON Expression mode, n8n's `NodeHelpers.getNodeParameters` iterates the expression *string's characters* and feeds the API one default-filled item per character. Always use JSON Expression mode for dynamic input. Linked to upstream n8n issue: https://github.com/n8n-io/n8n/issues/29619\n\n## Example A — Chargeable weight on an incoming air-freight booking\n\nTrigger: a webhook fires when a booking is created in your TMS.\n\n1. **Webhook** → receives `{ length, width, height, grossWeight }` (cm, kg).\n2. **FreightUtils** node → Resource `Freight Ops`, Operation `Calculate Chargeable Weight`.\n3. Map webhook fields into `Length (cm)`, `Width (cm)`, `Height (cm)`, `Gross Weight (kg)`.\n4. Downstream: write `chargeable_weight_kg` back to the booking record.\n\nExample response:\n\n```json\n{\n  \"length_cm\": 120,\n  \"width_cm\": 80,\n  \"height_cm\": 100,\n  \"gross_weight_kg\": 500,\n  \"volumetric_weight_kg\": 160,\n  \"chargeable_weight_kg\": 500,\n  \"billing_basis\": \"actual\"\n}\n```\n\n## Example B — HS code + UK duty lookup from a SKU\n\nTrigger: row added to a \"SKU Imports\" spreadsheet.\n\n1. **Google Sheets trigger** → new row with `sku_description`, `country_of_origin`, `unit_value_gbp`.\n2. **FreightUtils** node 1 → Resource `Customs \u0026 Trade`, Operation `HS Code Lookup`, `Query = {{ $json.sku_description }}`.\n3. **Set** node → pick the top match's `commodity_code`.\n4. **FreightUtils** node 2 → Resource `Customs \u0026 Trade`, Operation `UK Duty Calculator`, map `Commodity Code`, `Origin Country`, `Customs Value (GBP)`.\n5. Write `duty_rate_percent` and `total_duty_gbp` back to the spreadsheet.\n\n## Other ways to use FreightUtils\n\nFreightUtils ships across multiple distribution surfaces. Pick the one that fits how you work:\n\n- **Website** — interactive tools at [freightutils.com](https://www.freightutils.com)\n- **REST API** — 19 endpoints, free tier (100/day) and Pro tier (50K/month, £19/mo). [API docs](https://www.freightutils.com/api-docs)\n- **MCP server** — for LLM agents and AI tooling. [npm: freightutils-mcp](https://www.npmjs.com/package/freightutils-mcp) · [MCP Registry](https://registry.modelcontextprotocol.io/v0/servers?search=freightutils)\n- **n8n custom node** — for workflow automation. [npm: n8n-nodes-freightutils](https://www.npmjs.com/package/n8n-nodes-freightutils)\n\nSame data, same compliance reference set (ADR 2025, HS 2022, IATA-regulated airline prefixes), every surface kept in sync.\n\n## Licence\n\nMIT — see [LICENSE.md](LICENSE.md).\n\nBuilt by [Marius Cristoiu](https://www.linkedin.com/in/marius-cristoiu-a853812a2/), ADR-certified freight transport planner.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsoapyred%2Fn8n-nodes-freightutils","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsoapyred%2Fn8n-nodes-freightutils","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsoapyred%2Fn8n-nodes-freightutils/lists"}