QR Code vCard to CSV Converter
Convert QR code vCard capture CSV exports into clean, flat CSV files ready for Mailchimp import. Parses vCard 2.1/3.0/4.0 fields instantly in-browser.
Drop CSV files here or click to browse
Accepts .csv files with embedded vCard data
Processing...
About
Conference lead capture systems typically export QR code scans as CSV files where the contact data is embedded as raw vCard (VCF) text inside a single column. This nested format is unusable for CRM imports. Mailchimp, HubSpot, and Salesforce expect flat CSV with one column per field: Name, Email, Organization, Title, Phone, Address. Manually extracting these fields from hundreds of vCard blocks is error-prone and slow. A single malformed quote or embedded newline breaks naive parsers.
This tool performs RFC 4180-compliant CSV parsing to correctly handle quoted fields containing newlines, then extracts vCard properties per RFC 6350 (vCard 3.0/4.0) and RFC 2426 (vCard 2.1). It handles folded lines, TYPE parameters, structured semicolon-delimited values in N and ADR fields, and deduplicates contacts by email. The output is a clean, flat CSV with consistent column headers. Note: vCard data from QR scanners varies wildly in quality. Fields that the scanner did not capture will appear as empty columns. This tool does not validate email syntax or phone number formats. It preserves the data exactly as captured.
Formulas
The conversion pipeline has three stages. Stage 1 is RFC 4180 CSV parsing. Stage 2 is vCard property extraction. Stage 3 is flat CSV generation.
The CSV parser implements a finite state machine with three states: S0 (field start), S1 (inside quoted field), S2 (inside unquoted field). Transitions occur on characters: double-quote (0x22), comma (0x2C), newline (0x0A).
S1 + "" → S1 (escaped quote)
S1 + " → S0 (field end)
S0 + , → next field
S0 + \n → next row
vCard structured address field (ADR) contains 7 components separated by semicolons: PO Box; Extended Address; Street; City; Region; Postal Code; Country. The parser joins non-empty components with comma-space for human-readable output.
Where value is the raw ADR property value after the colon separator. The N field follows a similar structure: Last;First;Middle;Prefix;Suffix. First and Last names are extracted at indices 1 and 0 respectively.
Reference Data
| vCard Property | Output CSV Column | vCard Format | Example Value | Notes |
|---|---|---|---|---|
| FN | Full Name | FN:John Doe | John Doe | Formatted full name; preferred over N |
| N | First Name, Last Name | N:Doe;John;;; | John / Doe | Structured: Last;First;Middle;Prefix;Suffix |
| ORG | Organization | ORG:Acme Corp | Acme Corp | May contain semicolons for sub-units |
| TITLE | Job Title | TITLE:Engineer | Senior Engineer | Professional title or role |
EMAIL:[email protected] | [email protected] | May have TYPE param; first instance used | ||
| TEL | Phone | TEL;TYPE=WORK:+1234 | +1 234 567 890 | TYPE ignored; raw value preserved |
| ADR | Address | ADR;TYPE=WORK:;;Street;City;State;ZIP;Country | 123 Main St, London, UK | 7 semicolon-separated components |
| URL | Website | URL:https://example.com | https://example.com | Personal or company URL |
| NOTE | Notes | NOTE:Met at QCon | Contact from QCon London 2014 | Free-text annotation from scanner |
| BDAY | Birthday | BDAY:19900115 | 1990-01-15 | ISO 8601 or free text |
| ROLE | Role | ROLE:Developer | Developer | Functional role within org |
| PHOTO | (Skipped) | PHOTO;VALUE=URI:... | - | Binary/URI data; not included in CSV |
| VERSION | (Metadata) | VERSION:3.0 | 3.0 | Determines parsing rules; 2.1, 3.0, 4.0 |
| REV | Scan Date | REV:20140305T120000Z | 2014-03-05 | Timestamp of last revision/scan |
| CSV Column 1 | Source Name | First CSV column | vCard Contact | Preserved from original export |
| CSV Column 3 | Capture Date | Third CSV column | 05/03/2014 | Date from scanner export; preserved as-is |