Why are my numeric IDs coming through as strings?
Two reasons: either the value contains a leading zero (which the parser preserves as a string so you don't lose the zero), or the value exceeds Number.MAX_SAFE_INTEGER (2^53 − 1). JavaScript numbers cannot hold a 16-digit integer without precision loss, so the converter keeps them as strings. Cast them to BigInt on the consumer side if you need integer math.
Can I build nested JSON objects from a flat CSV?
Not out of the box. The output is always a flat array of flat objects keyed by header. To nest, name your columns with dot notation (address.city, address.zip) and run a post-processing step like Lodash _.set after conversion, or use a CSV with a JSON column and parse that column manually.
What if my CSV has no header row?
You have two choices. Add a synthetic header row before pasting (it's the cleanest fix and only takes one line). Or paste as-is and the converter will produce objects keyed by the first data row's values, which is rarely what you want — generic col_1, col_2 keys are better added by hand.
Are duplicate header names allowed?
CSV allows them; JSON does not. When two columns share a header, the second value overwrites the first in the resulting object — so a CSV with two email columns will only carry the second one through to JSON. Rename duplicates in the source before converting.
Can I paste data directly from Excel or Google Sheets?
Yes. Copying cells from a spreadsheet puts tab-separated values on the clipboard. The auto-detection picks up the tab delimiter and parses the rows correctly. If your spreadsheet contains formula references, copy as values first (Cmd/Ctrl + Shift + V in Sheets) so the JSON gets the computed numbers instead of =SUM(...) strings.