E-commerce · n8n

Auto-Fulfill Monthly Subscription Renewals from WooCommerce to Zendrop

When a WooCommerce subscription renews each month, this workflow automatically places a fulfillment order in Zendrop so your customers receive their box without any manual work. Save hours each billing cycle and eliminate missed shipments.

difficulty Intermediatesetup 45 minresult Every time a WooCommerce subscription renews, a matching fulfillment order is instantly created in Zendrop with the correct product and shipping details.
  1. 1

    Set up the WooCommerce Webhook Trigger

    Add the Webhook node and set the HTTP method to POST. Copy the generated webhook URL. In your WooCommerce admin go to Settings > Advanced > Webhooks and create a new webhook with Topic set to Order Updated and the Delivery URL set to your copied URL. This fires every time an order status changes, including subscription renewals.

  2. 2

    Filter for Subscription Renewal Orders Only

    Add an IF node connected to the Webhook. Set the condition to check that {{$json["body"]["status"]}} equals completed AND that {{$json["body"]["created_via"]}} equals subscription. This ensures only paid renewal orders pass through and one-time orders are ignored.

  3. 3

    Extract and Map Order Data

    Add a Set node on the TRUE branch of the IF node. Create fields: customer_name mapped to {{$json["body"]["billing"]["first_name"]}} {{$json["body"]["billing"]["last_name"]}}, address mapped to {{$json["body"]["shipping"]["address_1"]}}, city mapped to {{$json["body"]["shipping"]["city"]}}, zip mapped to {{$json["body"]["shipping"]["postcode"]}}, country mapped to {{$json["body"]["shipping"]["country"]}}, and product_id mapped to {{$json["body"]["line_items"][0]["sku"]}}. This cleans the data before sending to Zendrop.

  4. 4

    Send Fulfillment Order to Zendrop

    Add an HTTP Request node connected to the Set node. Set the Method to POST and the URL to https://app.zendrop.com/api/v1/orders. In the Headers section add Authorization with value Bearer YOUR_ZENDROP_API_KEY. In the Body (JSON) paste the payload using the mapped fields from the previous step including product_id, customer_name, and shipping address fields. Store your API key in n8n Credentials as a Header Auth credential for security.

  5. 5

    Log the Result to Google Sheets (Optional Audit Trail)

    Add a Google Sheets node connected after the HTTP Request node. Set it to Append Row in your chosen spreadsheet. Map columns: Order ID from {{$json["body"]["id"]}}, Customer from the Set node customer_name, Status from the Zendrop response {{$json["order_id"]}}, and a Timestamp using {{$now.toISO()}}. This gives you a monthly record of every fulfilled subscription renewal.

Frequently asked questions

What happens if Zendrop returns an error for an order?

The HTTP Request node will show the error in the n8n execution log. You can add an Error Trigger node to send yourself an email alert when this happens. Check that your Zendrop product SKU in WooCommerce exactly matches the product ID in your Zendrop catalog.

Does this work with variable subscription boxes where the product changes each month?

Yes. As long as your WooCommerce renewal order line items contain the correct SKU for that month's box, the Set node will pick it up and send the right product ID to Zendrop. Make sure you update the subscription product SKU in WooCommerce before each billing cycle runs.

Can I test this without waiting for a real renewal?

Yes. In WooCommerce you can manually change a subscription order status to Completed or use the WooCommerce Subscriptions built-in Renew Now button on a test subscription. This fires the webhook immediately so you can run a test execution in n8n and verify all fields map correctly before going live.

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.