The Practical Way to Convert JSON to XLSX for a Client Handoff
Sep 17, 2026 · AI-assisted
The scenario: a developer handing data to a non-technical client
You built the integration. The client asked for "the data in Excel" so their ops person can sort it, add a column of notes, and mail it around. What you have is a JSON payload — probably nested, probably with an items array inside each order. What they want is a .xlsx file that opens cleanly in Excel or Google Sheets.
This is the part of a project where you either spend an hour writing a throwaway script, or you open a browser tab and finish before your coffee cools. This walkthrough is for that second path, using JSON ↔ CSV Converter on Toolkite.
Why the usual routes get annoying
A quick pandas.read_json() → to_excel() works, but only if pandas and an Excel writer are installed, the JSON shape is flat enough, and you remember the exact incantation. Node has xlsx or exceljs, which means a scratch project, a package.json, and a dependency you'll delete tomorrow.
And there's the data question. Client exports routinely contain order IDs, customer emails, invoice amounts. Piping that through a random web converter means uploading someone else's business data to a server you can't audit. Even if the tool is honest, you've now created a copy outside your machine, and depending on your contract that's a conversation you don't want to have.
The reason this matters: conversion is a mechanical transform. It doesn't need a server. PapaParse and SheetJS both run fine in a browser tab, which is exactly what Toolkite's converter does — parsing and writing happen locally, and the file never leaves your device.
Walking through it, start to finish
Say you have orders.json with 4,000 records. Each record looks roughly like this:
{
"order_id": "A-1042",
"customer": { "name": "R. Okafor", "email": "r@example.com" },
"items": [
{ "sku": "TS-01", "qty": 2, "price": 19.0 },
{ "sku": "MG-07", "qty": 1, "price": 45.0 }
],
"total": 83.0
}
- Paste or drop the file. Open the converter and either paste the JSON or drop the
.jsonfile onto the page. On the free tier you're good up to about 25MB, which covers a lot of API dumps. - Pick the direction. Choose JSON→Excel for a real
.xlsx, or JSON→CSV if the client's tooling prefers CSV. The CSV route is also handy when you want to eyeball the header row before committing to a spreadsheet. - Let it flatten. Nested objects become dotted or joined column names —
customer.name,customer.email— and arrays get expanded into columns or rows depending on the shape. Free covers flattening up to 10 levels deep, which handles most API responses. - Download or copy. Grab the
.xlsxand send it. Nothing was uploaded; the tab did the work.
If your payload is deeper than 10 levels or you're converting a batch of files at once, that's where the optional Pro tier comes in — 50MB files with a progress indicator, deeper flattening, batch conversion up to 10 files, and custom delimiters. It's a one-time $9.99, not a subscription, so it's a reasonable call if you do this weekly. Details live on the tool page.
What to check before you hit send
The flattening is the part that surprises people. An items array with three entries per order doesn't have one obvious correct representation. You either get one row per item (order data repeats) or one row per order with items.0.sku, items.1.sku, and so on. Both are legitimate; only one matches what the client expects.
Before sending, open the .xlsx and check three things:
- Header row. Are the column names readable to a human who didn't write the API? Rename
customer.emailtoCustomer Emailif the ops person will be filtering on it. - Nulls and empty strings. JSON has both
nulland"", and Excel treats them differently in formulas. Decide which one you want. - Dates. If timestamps are ISO strings, Excel may read them as text. That's usually fine, but if the client needs to sort by date, mention it in your handoff email.
One more thing worth doing: keep the original JSON alongside the spreadsheet. When the client asks "can we also see the shipping address?" you can regenerate in under a minute instead of re-exporting from the source system.
Other people who end up here
Developers handing off data is the loudest use case, but it's not the only one. Analysts who pull a JSON API response and need it in a pivot table use the same flow. Marketers exporting event logs from a webhook to build a campaign report do too. And anyone working with regulated or client-confidential data has a good reason to prefer a tool that runs in the browser over one that asks for an upload — the same reasoning behind our privacy page.
If you also need to generate sample rows to test the spreadsheet layout before the real data arrives, Mock Data Generator is a natural companion. And if your JSON is actually a schema block for a page rather than a dataset, Meta Generator is the better fit.
A short note on what this won't do
This is a converter, not a database tool. It won't connect to your Postgres instance, schedule exports, or sync changes back to a source. It also won't guess your preferred flattening strategy — you still have to look at the output and decide. That's the honest trade-off: a browser tool is fast and private, but it's a one-shot transform, not a pipeline. For anything recurring, keep a script; for the one-off client handoff, this is the shorter path.
FAQ
Does converting JSON to XLSX require uploading my file anywhere?
No. The conversion runs entirely in your browser tab using PapaParse and SheetJS, so the JSON never leaves your machine. That matters when the payload contains client emails, order IDs, or anything covered by a confidentiality clause.
How does the converter handle nested objects and arrays?
Nested objects are flattened into joined column names like customer.name, and arrays are expanded into columns or rows depending on their shape. Free use handles flattening up to 10 levels deep, which covers most API responses. Deeper nesting is available in the optional Pro tier.
What's the file size limit for JSON to Excel conversion?
Free use supports files up to about 25MB. The optional Pro tier raises that to 50MB and adds a progress indicator, which is useful when you're converting a large export and want to know it's still working.
Can I convert several JSON files at once?
Batch conversion of up to 10 files at a time is a Pro feature. On the free tier you convert one file per pass, which is usually fine for a single client handoff but slow if you're processing a folder of exports.
Should I send the client CSV or XLSX?
XLSX if they'll open it in Excel or Google Sheets and want formatting, multiple sheets, or typed columns. CSV if their tooling imports it directly or they need a plain-text format for a database load. The converter handles both directions, so you can produce either from the same JSON.
What happens to timestamps and null values in the spreadsheet?
ISO date strings often arrive in Excel as text rather than real dates, so sorting by date may need a quick reformat on their end. JSON null and empty strings also land differently in formulas, so check the output before sending if the client plans to run calculations.