Skip to content
BookkeepKit

Convert JSON to CSV

Turn JSON from an API, a webhook or an app export into a CSV you can open in Excel. Nested objects become dotted columns, lists are joined, and every record gets its own row.

Drop a JSON file

Or paste the content below.

Processed in your browser. Your files never leave your computer.

How it works

  1. 1

    Drop or paste JSON

    An array of objects, or an object that contains one.

  2. 2

    Check the result

    See the columns and the first rows.

  3. 3

    Download or copy the CSV

    UTF-8 with BOM, so Excel shows accents correctly.

Where bookkeepers meet JSON

  • Payment processor and marketplace exports (orders, payouts, fees).
  • API responses from invoicing, payroll or e-commerce apps.
  • Webhook logs to reconcile against bank deposits.

Once it's a CSV, you can merge it with other exports or open it as a clean spreadsheet with CSV to Excel.

Example

Two payout records like these:

[
  { "id": "po_1", "amount": 1520.4, "fees": { "card": 41.2 }, "tags": ["march", "us"] },
  { "id": "po_2", "amount": 980, "fees": { "card": 26.5 } }
]

become a CSV with the columns id, amount, fees.card and tags. The second record gets an empty tags cell, and the first has march; us.

Reconciling processor payouts

Payment processors deposit a net amount: sales minus fees and refunds. Their API exports or webhook logs show the detail. Convert them to CSV, total the gross and fee columns per payout, and compare the net with the deposits on your bank statement. Record the fees as an expense so the bank account reconciles to the cent.

If the conversion fails

  • Invalid JSON: a missing comma or quote stops the whole file. The error message shows where; logs copied from a terminal sometimes contain extra lines at the start or end.
  • One record per line (NDJSON) instead of an array: wrap the lines in [ ] and add commas between them.
  • Records nested deep inside an object: if the top level is an object, the tool uses its first list, such as data or items.

Frequently asked questions

How are nested objects handled?

They're flattened: {"address": {"city": "Austin"}} becomes a column named address.city.

And arrays?

Lists of simple values are joined with "; ". Lists of objects are kept as JSON text in one cell.

What if records have different fields?

Every field found in any record becomes a column; records without it get an empty cell.

Is my data uploaded?

No. The conversion runs in your browser, which matters for exports containing customer or payment data.

Can I open the result in Excel right away?

Yes. The CSV is saved as UTF-8 with a byte-order mark, which Excel needs to show accents correctly. For leading zeros, convert it with CSV to Excel.

How big a file can I convert?

Files of several megabytes convert in a moment. The limit is your device's memory, not an upload limit.