Finance & Ops · n8n

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.

difficulty Intermediatesetup 45 minresult A live Google Sheet populated with Zendrop product names, SKUs, and shipping weights that refreshes daily so your team can spot heavy products driving up shipping costs.
  1. 1

    Set up a daily Schedule Trigger

    Add a Schedule Trigger node. Set Trigger Interval to Days and Days Between Triggers to 1. 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. 2

    Fetch products from Zendrop API

    Add an HTTP Request node connected to the Schedule Trigger. Set Method to GET and URL to https://api.zendrop.com/v1/products. Under Authentication choose Header Auth and add your Zendrop API key as the Authorization header value (format: Bearer YOUR_API_KEY). Store the key safely in n8n Credentials. Enable Return All if pagination is needed, or set a limit query parameter in Query Parameters.

  3. 3

    Extract and reshape the weight fields

    Add a Set node after the HTTP Request. Create three fields: set productName to the expression {{ $json.name }}, sku to {{ $json.sku }}, and shippingWeight to {{ $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. 4

    Check if weight data exists before writing

    Add an IF node to filter out products with no shipping weight. Set Condition to String with Value 1 as {{ $json.shippingWeight }} and operation is not empty. Connect the true branch to the next node. Products missing weight data will stop here and not pollute your Sheet with blank rows.

  5. 5

    Append rows to Google Sheets

    Add a Google Sheets node on the true branch of the IF node. Set Operation to Append. Connect your Google account under Credential. Set Spreadsheet ID to your target sheet's ID (found in the sheet URL) and Sheet Name to something like Shipping Weights. Map columns: Product Name to {{ $json.productName }}, SKU to {{ $json.sku }}, Shipping Weight (g) to {{ $json.shippingWeight }}. Add a Timestamp column 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 }}.

About this recipe. Recipes on FlowRecipesHub are written for business owners, not developers, and are tested before publishing — how recipes get made. Some ingredient links are affiliate links that cost you nothing — full disclosure.