Learn/Practical Guides

JSON & NoCode — Zapier, n8n, Make & Webhook Payloads

You don't need to be a programmer to work with JSON. If you use Zapier, n8n, Make (Integromat), or any webhook-based automation, you are already working with JSON every day. This guide explains JSON in the context of automation tools — no coding background required.

How JSON Flows Through Automations

Webhook → Automation → Action

Understanding Webhook JSON

When a service like Stripe, Shopify, or GitHub triggers a webhook, it sends a JSON payload to your URL:

Stripe payment webhook payload (simplified)json
1{
2 "id": "evt_1abc123",
3 "type": "payment_intent.succeeded",
4 "data": {
5 "object": {
6 "id": "pi_xyz789",
7 "amount": 2999,
8 "currency": "usd",
9 "customer": "cus_abc",
10 "metadata": {
11 "order_id": "ORD-1234"
12 },
13 "receipt_email": "[email protected]"
14 }
15 }
16}

Tip

The payment amount 2999 means $29.99 — Stripe stores amounts in the smallest currency unit (cents). This is a common pattern in payment and e-commerce APIs. Always check the API docs for how numbers are formatted.

Key Concepts for Non-Developers

JSON ConceptWhat It MeansExample
Object { }A group of labeled values{"name": "Alice", "email": "[email protected]"}
Array [ ]A list of items["email", "sms", "push"]
Nested objectAn object inside another object{"customer": {"name": "Alice"}}
KeyThe label/name (always in quotes)"email" in {"email": "[email protected]"}
ValueThe data (text, number, true/false, null)"[email protected]" or 2999 or true
nullIntentionally empty / no value"bio": null means bio is not set

Zapier — Working with JSON

Incoming Webhooks

Zapier's “Webhooks by Zapier” trigger automatically parses JSON and shows each field as a selectable value in subsequent steps:

  1. Create a new Zap with trigger Webhooks by Zapier → Catch Hook
  2. Copy the webhook URL Zapier gives you
  3. Send a test JSON payload to that URL (from your service or manually)
  4. Click Test trigger — Zapier shows all parsed fields
  5. Use those fields in your action step (e.g., “Send Email” with the customer email)

Handling Nested Data in Zapier

Accessing nested valuestext
1Given this webhook JSON:
2{
3 "customer": {
4 "name": "Alice",
5 "addresses": [
6 { "city": "New York", "zip": "10001" }
7 ]
8 }
9}
10
11In Zapier field mapping:
12 customer__name → "Alice"
13 customer__addresses → (shows as array — use Formatter to extract)
14
15In Code by Zapier (JavaScript):
16 const data = JSON.parse(inputData.rawBody);
17 return { city: data.customer.addresses[0].city }; // "New York"

n8n — Full JSON Control

n8n expression examplesjson
1// Access a simple field
2{{ $json.customer.email }}
3
4// Access array item
5{{ $json.data.items[0].name }}
6
7// Conditional value
8{{ $json.status === 'paid' ? 'Complete' : 'Pending' }}
9
10// Format a price (cents to dollars)
11{{ ($json.amount / 100).toFixed(2) }}

Tip

n8n shows you the raw JSON at every step. Click any node's output to see the exact JSON structure. Use this to build your expressions — you can see exactly which keys exist and what their values are.

Make (Integromat) — Mapping JSON

Make uses a visual mapper to connect JSON fields between modules:

  • 1.Add a Webhooks → Custom webhook trigger
  • 2.Send a test payload — Make auto-detects the JSON structure
  • 3.Click the data structure button to see all available fields
  • 4.Use the Set Variable module for transformations
  • 5.For arrays, use an Iterator module to loop through items

Real-World Webhook Examples

Shopify Order Webhook

Shopify order created (simplified)json
1{
2 "id": 5678,
3 "email": "[email protected]",
4 "total_price": "49.99",
5 "currency": "USD",
6 "line_items": [
7 { "title": "Blue T-Shirt", "quantity": 2, "price": "19.99" },
8 { "title": "Cap", "quantity": 1, "price": "9.99" }
9 ],
10 "shipping_address": {
11 "city": "New York",
12 "zip": "10001",
13 "country": "US"
14 }
15}

GitHub Push Webhook

GitHub push event (simplified)json
1{
2 "ref": "refs/heads/main",
3 "repository": {
4 "name": "my-project",
5 "full_name": "alice/my-project"
6 },
7 "commits": [
8 {
9 "message": "Fix login bug",
10 "author": { "name": "Alice", "email": "[email protected]" },
11 "timestamp": "2026-04-02T14:30:00Z"
12 }
13 ]
14}

Debugging Failed Webhooks

SymptomLikely CauseFix
Webhook not receivedWrong URL or firewall blockingCheck URL, test with a simple POST tool
"Invalid JSON" errorMalformed payload or wrong Content-TypeEnsure Content-Type: application/json
Fields showing as emptyJSON structure changed (fields renamed)Re-test webhook trigger to update field mapping
Array data missingTool does not auto-expand arraysUse Iterator (Make) or Code step (Zapier)
Numbers wrongAmount in cents, not dollarsDivide by 100 in a Formatter/Code step

Try It — Validate a Webhook Payload

Try It Yourself

A typical webhook JSON payload — validate before using in your automation

Frequently Asked Questions

What is a webhook payload?
A webhook payload is the JSON data that a service (like Stripe, Shopify, or GitHub) sends to your URL when an event happens. For example, when a customer completes a purchase, Shopify sends a JSON object containing the order details, customer info, and line items to your webhook URL.
How do I use JSON in Zapier?
Zapier automatically parses incoming webhook JSON into individual fields you can map. For nested data, use dot notation in the Formatter step (e.g., "customer.email"). For complex transformations, use the Code by Zapier step with JavaScript to reshape the JSON before passing it to the next step.
What is the difference between n8n and Zapier for JSON?
n8n gives you full access to the raw JSON and lets you transform it with JavaScript expressions, JSON Path, or built-in nodes like Set, Merge, and Split. Zapier abstracts JSON away and shows you field names instead. n8n is more powerful for complex JSON transformations; Zapier is easier for simple field mapping.
Why is my webhook not working?
Common causes: (1) The webhook URL is wrong or unreachable, (2) The receiving tool expects a different Content-Type header, (3) The JSON structure does not match what your automation expects (a field was renamed or nested differently), (4) Authentication headers are missing. Check the webhook delivery logs in the sending service first.
How do I extract a value from nested JSON in Zapier?
For simple nesting, Zapier flattens the JSON automatically and you can select "customer email" from the dropdown. For deeper nesting (arrays, nested arrays), use the Code by Zapier step: inputData.body = JSON.parse(inputData.rawBody); return { email: inputData.body.customer.addresses[0].email };