Automatically Log Zendrop Shipping Weights to Google Sheets for Cost Analysis
Pull product shipping weight data from Zendrop via API and store it in a Google Sheet so e-commerce managers can analyze shipping costs and optimize product margins. This workflow runs on a schedule and keeps your sheet up to date without any manual exports.
- 1
Set up a daily Schedule Trigger
Add a
Schedule Triggernode. SetTrigger IntervaltoDaysandDays Between Triggersto1. Choose a time like 6:00 AM so data is ready before your team starts the day. This node starts the workflow automatically every morning. - 2
Fetch products from Zendrop API
Add an
HTTP Requestnode connected to the Schedule Trigger. SetMethodtoGETandURLtohttps://api.zendrop.com/v1/products. UnderAuthenticationchooseHeader Authand add your Zendrop API key as theAuthorizationheader value (format:Bearer YOUR_API_KEY). Store the key safely in n8n Credentials. EnableReturn Allif pagination is needed, or set alimitquery parameter inQuery Parameters. - 3
Extract and reshape the weight fields
Add a
Setnode after the HTTP Request. Create three fields: setproductNameto the expression{{ $json.name }},skuto{{ $json.sku }}, andshippingWeightto{{ $json.shipping_weight }}. This strips away unnecessary API response fields and keeps your Sheet clean. Confirm the field names match Zendrop's actual API response keys by checking their API docs. - 4
Check if weight data exists before writing
Add an
IFnode to filter out products with no shipping weight. SetConditiontoStringwithValue 1as{{ $json.shippingWeight }}and operationis not empty. Connect thetruebranch to the next node. Products missing weight data will stop here and not pollute your Sheet with blank rows. - 5
Append rows to Google Sheets
Add a
Google Sheetsnode on thetruebranch of the IF node. SetOperationtoAppend. Connect your Google account underCredential. SetSpreadsheet IDto your target sheet's ID (found in the sheet URL) andSheet Nameto something likeShipping Weights. Map columns:Product Nameto{{ $json.productName }},SKUto{{ $json.sku }},Shipping Weight (g)to{{ $json.shippingWeight }}. Add aTimestampcolumn mapped to{{ $now }}so you can track when each row was logged.
Frequently asked questions
What if Zendrop returns many pages of products and I only get the first page?
Zendrop's API typically supports a `page` or `cursor` query parameter for pagination. For a simple setup, increase the `limit` parameter in the HTTP Request node to its maximum allowed value (often 100 or 250). If you still have more products, you would need to add a loop using a Code node, but for most stores a high limit covers all products in a single call.
Will this create duplicate rows in my Google Sheet every day?
Yes, the Append operation adds new rows each run. To avoid duplicates, either clear the sheet before each run by adding a second Google Sheets node set to Operation: Clear before the Append node, or use a date-stamped tab per week so historical data is preserved while the current tab stays clean.
My Zendrop API response uses different field names than name, sku, and shipping_weight. What do I do?
Open the HTTP Request node, run a test fetch, and inspect the raw JSON output in the n8n output panel. Find the exact keys Zendrop uses in their response and update the expressions in the Set node to match. For example, if weight is stored as weight_grams, change the shippingWeight expression to {{ $json.weight_grams }}.