Ive been forecasting inventory for my ecommerce brand for over 12 years now using exports from Shopify & Amazon. This has been cumbersome, but more importantly the information has been in a silo. With the use of n8n, I would like to automate this using the following integrations:
ShipHero: Real Time Inventory levels
Shopify: Real Time Sales Numbers
Amazon: Real Time Sales and Inventory Numbers
Google Sheets: Reference Tables (SKU vs ASIN vs Product Attributes, etc)
Gemini or ChatGPT: Analytics
The workflow should be able to support a large number of SKUs (over 2000)
Hey @Parintele_Damaskin - thank you! Currently I’m trying to connect to ShipHero instead of Shopify for more accurate inventory levels, but not having success in pulling the data. Trying to execute the following query based on ShipHero’s provided documentation: https://developer.shiphero.com/examples/#warehouseproducts
I’m using this Shiphero documentation for Authentication:https://developer.shiphero.com/getting-started/#authentication
However I keep getting the following error:
{
“errorMessage”: “Bad request - please check your parameters”,
“errorDescription”: “HTTP status 400”,
“errorDetails”: {
“rawErrorMessage”: [
“HTTP status 400”
],
“httpCode”: “400”
},
“n8nDetails”: {
“nodeName”: “HTTP Request”,
“nodeType”: “n8n-nodes-base.httpRequest”,
“nodeVersion”: 4.3,
“itemIndex”: 0,
“time”: “1/3/2026, 11:43:49 AM”,
“n8nVersion”: “2.1.5 (Cloud)”,
“binaryDataMode”: “filesystem”,
“stackTrace”: [
“NodeApiError: Bad request - please check your parameters”,
" at ExecuteContext.execute (/usr/local/lib/node_modules/n8n/node_modules/.pnpm/n8n-nodes-base@file+packages+nodes-base_@[email protected]_asn1.js@5_8da18263ca0574b0db58d4fefd8173ce/node_modules/n8n-nodes-base/nodes/HttpRequest/V3/HttpRequestV3.node.ts:859:16)“,
" at processTicksAndRejections (node:internal/process/task_queues:105:5)”,
" at WorkflowExecute.executeNode (/usr/local/lib/node_modules/n8n/node_modules/.pnpm/n8n-core@file+packages+core_@[email protected]_@[email protected]_ec37920eb95917b28efaa783206b20f3/node_modules/n8n-core/src/execution-engine/workflow-execute.ts:1045:8)“,
" at WorkflowExecute.runNode (/usr/local/lib/node_modules/n8n/node_modules/.pnpm/n8n-core@file+packages+core_@[email protected]_@[email protected]_ec37920eb95917b28efaa783206b20f3/node_modules/n8n-core/src/execution-engine/workflow-execute.ts:1226:11)”,
" at /usr/local/lib/node_modules/n8n/node_modules/.pnpm/n8n-core@file+packages+core_@[email protected]_@[email protected]_ec37920eb95917b28efaa783206b20f3/node_modules/n8n-core/src/execution-engine/workflow-execute.ts:1662:27",
" at /usr/local/lib/node_modules/n8n/node_modules/.pnpm/n8n-core@file+packages+core_@[email protected]_@[email protected]_ec37920eb95917b28efaa783206b20f3/node_modules/n8n-core/src/execution-engine/workflow-execute.ts:2274:11"
]
}
}
Basically yyou can use in 2 ways.
With Credentials or use directly the acces_token in the header as Bearer.
Here are all 3 http nodes that supposed to deal with, login(only once to get the get the access-token and maybe save when expires the refresh for further operairon), then the actual fetch of products, then the node that will refresh when epired.
@Parintele_Damaskin - you are a rockstar! This worked right away. The only part that needs to be adjusted is the JSON in the Fetch request. The code you provided pulls the first 10 orders, but I am looking data at the warehouse level seen here:
query {
warehouse_products(warehouse_id: "V2FyZWhvdXNlOjgwNzU=") {
request_id
complexity
data(first: 2) {
edges {
node {
id
account_id
on_hand
inventory_bin
reserve_inventory
reorder_amount
reorder_level
custom
warehouse {
id
dynamic_slotting
profile
}
product {
id
name
sku
}
}
cursor
}
}
}
}
The warehouse ID is “125107”. Thank you so much!!