Paste a JSON array of objects (a single object also works — it becomes one row) and this produces a CSV whose header row is the union of every key found in every record, in first-seen order. Rows missing a key get an empty cell rather than a shifted column, which is the failure mode hand-rolled converters usually get wrong.
The flattening rules, precisely
Nested objects recurse into dot-joined column names to any depth — address.geo.lat is a single column. Arrays do not recurse: an array of primitives is stringified into one cell, so ["admin","ops"] becomes the single quoted value admin,ops (readable, but no longer machine-splittable once other commas exist). An array of objects degrades to [object Object], which is your signal that the data is relational, not tabular — flatten orders into their own array and convert it as a second CSV instead.
null, undefined, and absent keys all land as empty cells, so you cannot distinguish an explicit null from a missing field after conversion. Every cell is quoted unconditionally, and booleans and numbers arrive as their string forms — Excel and Google Sheets will re-infer the types on import.
Run unfamiliar payloads through the JSON formatter first — this converter reports only that input is invalid, while the formatter's strict validation helps you narrow down where. The Excel editor opens the resulting CSV directly in your browser for quick edits.