← All Articles

How to Convert JSON to Excel in Zapier (No Native Action Exists)

July 28, 2026

Search "Zapier JSON to Excel" and you'll find plenty of people asking how to do it, and no official answer, because there isn't one. Zapier has a Formatter step for text, dates, and numbers. It has a Code step for arbitrary JavaScript or Python. It does not have a "convert to Excel" action, or even a "convert JSON to CSV" action, built into the app itself. If your Zap needs to end with a real spreadsheet, you're on your own.

This is a real gap, not a minor inconvenience. A huge share of Zaps exist specifically to move structured data (orders, form submissions, CRM records, survey responses) somewhere a human can read it, and "somewhere a human can read it" usually means Excel. Below are the two ways people actually solve this, including the one we built specifically because the workaround was so painful.

Why can't Zapier do this natively?

Excel's .xlsx format isn't text you can template together with a Formatter step. It's a zipped bundle of XML files describing sheets, styles, shared strings, and cell relationships. Generating a valid one requires an actual spreadsheet library, not a string transform, which is a different category of tool than what Zapier's built-in steps are designed for.

That leaves Zapier's Code step as the only native path, and it comes with real limits:

Option 1: The Code step workaround

If you just need something that works today and you're comfortable writing JavaScript, add a Code by Zapier action, set it to run custom JavaScript, and build a CSV string from the trigger data:

const rows = inputData.records; // an array of objects from an earlier step
const headers = Object.keys(rows[0]);

const escape = (value) => {
  const str = String(value ?? '');
  return /[",\n]/.test(str) ? '"' + str.replace(/"/g, '""') + '"' : str;
};

const csv = [
  headers.join(','),
  ...rows.map(row => headers.map(h => escape(row[h])).join(',')),
].join('\n');

output = { csv };

Pass that csv value into a step that emails it or writes it to a file, and rename the file with a .csv extension so Excel opens it directly. It's a real solution, and for a one-off internal report it's often enough.

Pro Tip: Whatever you do, don't skip the escaping step above. An unescaped comma inside a single field will silently shift every column after it, and you usually don't notice until someone's order total lands in the shipping-address column.

Option 2: A zero-code webhook that emails back a real .xlsx

The other option skips writing conversion code entirely. JSON Support's inbound webhook gives Pro accounts a unique URL: point Zapier's built-in Webhooks by Zapier: POST action at it, and every time the Zap fires, a properly formatted .xlsx file (styled header row, correct column types, nested fields flattened automatically) lands in whatever inbox you configured, with zero JavaScript involved.

Setup is three steps:

  1. Create a webhook. Sign in to your JSON Support account and create a webhook, setting the destination email that should receive each converted file.
  2. Add the action to your Zap. Use Zapier's own Webhooks by Zapier: POST action (no custom app, no OAuth), method POST, URL set to the webhook URL you were given.
  3. Map the payload. Set the request body to {"data": [...]}, an array of objects built from whatever the trigger step handed you.

Turn the Zap on, and every run produces a real spreadsheet automatically. No Code step, no library to hunt down, no CSV escaping to get wrong.

Which one should you actually use?

Code step + CSV JSON Support webhook
Coding required Yes None
Real .xlsx formatting No (plain text CSV) Yes (styled header row, correct types)
Handles nested JSON Manual flattening Automatic
Setup time Write and debug a script Paste a URL into an existing Zapier action
Cost Free (your own time) Free to convert manually; the webhook is a Pro feature

If you need this once, or you're already comfortable in a Code step, the CSV approach costs nothing but a few minutes. If this is a recurring automation, say a daily orders report or a form-submission log, the time saved by not maintaining hand-rolled CSV-escaping code adds up fast.

Not using Zapier? The free converter still works

None of this requires an automation platform. If you just have a JSON export sitting in front of you right now, paste it into JSON Support's free converter: no account, no upload limit worth worrying about, nothing stored after conversion. And if you're building this into your own product or script rather than a Zap, the same conversion is available as a rate-limited developer API, with a free tier to start.

Key Takeaways

Point Details
No native action Zapier has no built-in JSON-to-Excel or JSON-to-CSV step; you need a Code step or an external service.
Code step ceiling is CSV A hand-written script can produce CSV text, not a real formatted .xlsx file, and needs manual comma/quote escaping.
Zero-code alternative JSON Support's inbound webhook plugs into Zapier's own "Webhooks by Zapier: POST" action, no custom code required.
Works outside Zapier too The same conversion is available as a free web tool and as a developer API for other integrations.