If you send nested e-commerce or billing webhooks (Shopify orders/create, Stripe invoice.paid, WooCommerce orders) from Make.com into Google Sheets, the classic pattern is:
-
Custom Webhook trigger (
1op) -
Iterator module over
line_items[](1op) -
Google Sheets: Add a Row inside the loop (
Nops — one per item)
For an order with 10 line items, that burns 12 Make operations per webhook and risks hitting Google Sheets' 60 writes/min/user rate limit during bursts (leaving half-written orders).
The Fix: Decouple Ingestion From Flattening
Instead of iterating inside Make, push the raw JSON payload string into one cell and un-nest it inside Google Sheets:
[Custom Webhook (1 op)] ──▶ [Google Sheets: Add a Row (1 op total)]
│
▼
Column A stores raw JSON string ({{1.body}})
│
▼
Column B expands dynamically via sheet formula
Your Make scenario drops to 1–2 operations total, regardless of whether an order has 2 line items or 50.
Turning Raw JSON in Column A Into Clean Rows
Suppose cell A2 holds a raw Shopify webhook payload:
{
"order_id": "#10492",
"customer": { "email": "alex@example.com" },
"line_items": [
{ "id": "item_1", "name": "Wireless Keyboard", "quantity": 1, "price": "129.00", "sku": "KB-PRO-BLK" },
{ "id": "item_2", "name": "USB-C Braided Cable", "quantity": 2, "price": "14.50", "sku": "ACC-CBL-02" }
]
}
You have two clean ways to unroll A2:A in Google Sheets without brittle REGEXEXTRACT chains:
Option A: Custom Apps Script Function
If you want full DIY control in Extensions → Apps Script, write a recursive flattener that walks objects/arrays with dot notation and pads missing columns across rows so headers stay aligned when new keys appear.
Option B: Zero-Maintenance Formula (=FLATTEN_JSON_ROWS())
With PayloadFlatten for Google Sheets (client-side Apps Script add-on — data never leaves your Google Sheet):
- 1 row per webhook payload:
=FLATTEN_JSON(A2:A)
- 1 row per line item (repeating parent order fields cleanly):
=FLATTEN_JSON_ROWS(A2:A, "line_items")
Parent fields (order_id, customer.email) repeat on every row alongside item_number and each line item's fields (line_items.id, line_items.name, line_items.quantity, line_items.price, line_items.sku), so =SUM() and pivot tables keep working even when payloads evolve.
Quick Comparison
| Metric | Make Iterator Loop (15 items) | Single-Write + In-Sheet Flatten |
|---|---|---|
| Make operations per order | ~17 ops | 1–2 ops |
| Partial rows on Sheets 429 error | Possible mid-loop | Atomic single write |
| Schema change maintenance | Re-map Make modules | Auto-expands new keys |
If you want to test the interactive flattener on your own webhook payload before installing anything, there is a free browser sandbox on the Make Webhook JSON to Google Sheets guide.
Top comments (0)