Neatbo.

Contact columns do not capture the whole vCard

A phone column is editable text; a contact record also has repeated properties, types and component lists.

The original failure was about quoting

The source author posted a semicolon-delimited German contact CSV and a JSON column-map command. Their own answer says shell quotation prevented valid JSON from reaching the script. A contact converter addresses the migration job, not that programming-environment error; the posted customer number and empty trailing column also need explicit retention.

Repeated telephone fields are separate properties

A single cell joined with a delimiter does not preserve whether two numbers have different TYPE values or groups. This export gives TEL_1/TEL_2 columns for review, with exact parameters in the record files. N and ADR preserve ordered components and component-level multiple values. Never split a surname on punctuation or guess an address.

Select the handoff that matches the receiving application

contacts.csv is an editable text-column export. Repeated fields get numbered columns. Component multivalues are joined for editing; exact component arrays, all parameters and groups remain in contacts.json and roundtrip.csv. Use records mapping on roundtrip.csv for faithful reimport; ordinary CSV client templates still need their own column mapping.

Unmapped CSV columns and unsupported vCard properties go to the complete report by default; select reject to refuse instead. NICKNAME, BDAY, ROLE, X-properties and PHOTO remain in this sidecar and original, not in the core migrated payload. No photo or URL is fetched.

Test an import copy before replacing an address book. No claim is made about every client’s private CSV template or acceptance of unknown vCard properties.

Choose a handoff by what the receiving application can use
DeliveryWhat it preservesWhat to do before handoff
contacts.csvEditable text columns; repeated fields are numbered and component multivalues are joined. Parameters and groups remain in the record files.Match the receiving CSV template and review the separate parameters before import.
roundtrip.csvExact arrays, parameters and groups for the supported core properties.Reimport with records mapping; it is not an ordinary client’s CSV template.
contacts.vcfIn CSV-to-vCard mode, the supported vCard 3.0 properties and allowed parameters. Unknown properties remain outside the core payload.Test an import copy in the receiving client before replacing an address book.
migration-report.json + source-originalThe unmapped/unsupported sidecar and the exact effective input bytes.Keep these with the migrated files; plan separately for data the client cannot import.
  • Use TEL_1/TEL_2 as separate number columns, then check TYPE and group in contacts.json before assigning each number in the receiving client.
  • Keep N/ADR component order when editing columns; use records mapping to retain a component’s multiple values.
  • Decide how the receiving application will retain customer numbers and unsupported fields; keeping them in a sidecar does not automatically import them.

A folded UTF-8 line must preserve complete characters

CRLF inside mapped text normalizes to LF. vCard output uses CRLF and folds at 75 UTF-8 bytes without splitting a character. TEL containing backslashes or newlines and URL containing whitespace or backslashes reject. Empty scalar CSV cells omit that property; explicit records can preserve empty values.

The preview shows 4,000 Unicode codepoints. Copy and downloads keep complete output. A whole-run 10-second deadline starts before engine loading and covers worker readiness, file reading and processing. Cancellation destroys the worker; rerun with the same retained File and parameters. Inputs stay in this browser.

References