What shape the input needs to be
The conversion expects an array of objects, where each object becomes one row and each key becomes one column. That is the shape most list endpoints already return.
A single object rather than an array produces one row. Scalar entries in an array use a column named value, rather than an unnamed column. Review mixed arrays carefully: a scalar value column and an object property called value can share the same output column.
When the array you want is nested inside a wrapper object, as in a response shaped like an object containing a data array alongside pagination fields, extract that array first. Converting the wrapper produces one row describing the wrapper, which is rarely useful.
How nesting is flattened
A nested object becomes several columns whose names are joined with a dot: an address object containing a city key becomes a column named address.city. This makes the table readable, but the CSV-to-JSON converter treats that dotted name as a literal key rather than automatically rebuilding the original object.
The number of columns is determined by every key that appears anywhere in the input, not by the first record. A record missing a key gets an empty cell rather than a shifted row, which is the part that matters: a shifted row corrupts every column after it and is not obvious on inspection.
Deeply nested data produces a very wide table. Three levels of nesting across several branches can easily reach fifty columns, at which point CSV is arguably the wrong target and the conversion is telling you something about the data rather than failing.
Arrays are the lossy case
An array inside a record has no natural representation in a single cell. This converter writes the array as JSON text inside its cell, preserving a recognizable representation but not turning it into a relational set of rows or columns. The CSV-to-JSON converter reads that cell as text; it does not parse it back into an array automatically.
There is no joined-list or indexed-array mode in this converter. To produce one row per array element, transform the source into records first and decide how parent identifiers should be repeated. That is a schema decision, not an automatic formatting option.
The cell contains JSON text with CSV quoting around it when necessary. Use a CSV parser before interpreting that cell; counting commas by eye mixes array separators with CSV delimiters. Keep the original JSON when the complete typed structure matters.
Quoting and delimiters
A field containing a comma, a double quote or a line break must be quoted, and a double quote inside a quoted field is escaped by doubling it. This is handled automatically, and it is the single most common source of corrupted CSV when done by hand.
Semicolon-delimited files exist because of locale: in regions where the comma is the decimal separator, Excel writes and expects semicolons. If a colleague opens your file and sees everything in one column, the delimiter is the first thing to change.
Tab-separated output avoids the quoting question almost entirely, since tabs rarely appear inside values, and pastes directly into a spreadsheet. It is worth preferring when the destination is a paste rather than a file.
What happens to types
CSV has no types. Every value becomes text, and whatever reads the file guesses what that text meant. This is why a CSV round trip is not lossless even when no cell is empty: the number 007 comes back as 7, or as the string "007", depending entirely on the reader.
The values worth watching are leading zeros in identifiers and postcodes, values that look like dates, and booleans. Spreadsheets are aggressive about reinterpreting all three, and the change happens on open rather than in the file, which makes it easy to blame the wrong tool.
A null and an empty string both become an empty cell, and there is no way to tell them apart afterwards. If that distinction matters in your data, CSV cannot carry it.