Nested objects are flattened to dot-notation columns, so {"contact": {"email": "…"}} becomes a contact.email column. Most converters stringify the nested object into a single cell instead, which produces a CSV that is useless in a spreadsheet. Arrays of primitives are joined with semicolons, because exploding them would change the row count.
What if my records have different keys?
Every key found anywhere in the data becomes a column, in first-seen order, and missing values are left empty. Using only the first record's keys — which is what many converters do — silently drops columns whenever the data is not uniform, and real API payloads rarely are.
Why would I need CRLF line endings?
RFC 4180 specifies CRLF, and some older Excel builds and Windows tools mis-parse a file that uses bare LF. Modern Excel, Numbers and Google Sheets all handle LF fine, so leave it off unless you hit a problem.