JSON to Relational CSV Converter

Convert complex API JSON into clean, relational CSV tables — fully in-browser and privacy-first.

No uploads Vanilla JS Copy / Download Built for data teams

Convert API JSON to relational CSV tables

Perfect for exporting API responses to Excel, BigQuery, PostgreSQL, and BI tools — without sending data to a server.
Sponsored

What is “relational CSV”?

Most JSON-to-CSV tools flatten everything into a single sheet, which breaks joins and makes analytics painful. Relational CSV keeps one main table plus child tables for arrays. Each child table carries a foreign key (_parent_row_id) back to the main table so you can join in SQL or spreadsheets.

This preserves shape and intent: arrays of objects become rows; nested objects flatten into columns; irregular or mixed arrays are stringified instead of silently dropped.

How child tables work

Arrays of objects become their own tables. Every row gets _parent_row_id (the main row it belongs to) and _index to preserve order. Primitive arrays can optionally explode into a simple two-column table (_parent_row_id, value). This mirrors how you'd model one-to-many relations in SQL.

You can also prefix child table names or replace dots with underscores for warehouse-safe identifiers.

Import into Postgres, BigQuery, or Sheets

Download the main/child CSVs, plus SQL DDL that sets primary keys and foreign keys. In warehouses, load the CSVs, then run the generated schema.sql. In Sheets/Excel, use _row_id and _parent_row_id to join with VLOOKUP/XLOOKUP or pivot tables.

Sponsored

Examples

JSON → relational CSV
[{ "id": "ord-1", "items": [{ "sku": "A1", "qty": 2 }, { "sku": "B2", "qty": 1 }], "tags": ["vip","online"] }]
Produces main.csv with id, tags, and items.csv with _parent_row_id, _index, sku, qty. Tags can explode into a tag_values table if enabled.
CSV → JSON
id,team.0,team.1,metrics.total,metrics.daily.0 unflattens back to objects when you tick “Unflatten”. Mixed paths are coerced and flagged as warnings.

FAQ

Is my data uploaded?
No. Everything runs in-browser. Only Plausible (cookieless) and AdSense (ads cookies) load externally.
Do you support CSV → JSON?
Yes. Optional unflatten rebuilds nested objects from dot-path headers.
Can I use tabs or semicolons?
Yes—choose comma, semicolon, or tab. BOM is stripped automatically.
How big can I go?
Best under ~20MB for in-browser ZIP. For larger sets, process chunks or sample.
Can I change table names?
You can add a child table prefix and replace dots with underscores for safer identifiers.

Documentation & policies

Docs & schema
Features, how it works, schema notes, examples, and FAQ.
Open docs
Privacy & terms
Privacy policy (Plausible + AdSense) and Terms of Service.
Privacy policy Terms of Service
About & contact
Who built it, changelog, and how to reach out.
About & changelog Contact