CSV Import Guide
Prepare your file, map columns to fields, and understand exactly which rows were skipped and why.
Preparing your file
- Save as .csv (Excel: File → Save As → CSV; Sheets: File → Download → CSV).
- Include a header row. Those names become your mapping options.
- Maximum 5MB. Split larger exports into several files.
- One column must contain email addresses.
Email Address,First Name,Last Name,Company ada@example.com,Ada,Lovelace,Analytical Engines grace@example.com,Grace,Hopper,US Navy
Mapping your columns
After upload, Vecta shows each column with a sample value and a best guess at the field it should become. Headers like "Email Address" or "First Name" are recognised automatically.
- Exactly one column must map to Email.
- Standard fields:
first_name,last_name,company,title,phone. - Choose Custom field for anything else: the name you give becomes the variable, e.g.
plan→{{plan}}. - Choose Ignore for columns you don't need.
Field names become template variables
Map a column to company and you can immediately write {{company}} in a template.
Choosing a destination
| Option | Use when |
|---|---|
| New saved list | You'll send to this group more than once |
| One-off list | A single blast; keeps your saved lists uncluttered |
| Merge into existing | Adding people to a list you already have |
How duplicates are handled
Contacts are unique per workspace by email address. If an address already exists, Vecta links the existing contact to the list rather than creating a second copy.
Example
Import a 6-row file and you might see: 3 new contacts, 0 already existed, 3 rows skipped. Re-import the same file into a different list and you'll see 0 new, 3 already existed: the same three people, now on both lists, still one contact each.
Updating people who are already in Vecta
By default an import never changes someone who already exists: their stored fields stay as they were, and only list membership is added. To change their details from a file, tick Update existing contacts in step 3 before you import.
| In your file | What happens to an existing contact |
|---|---|
| A filled cell | Replaces the stored value for that field |
| A blank cell | Keeps the stored value. A blank never erases anything |
| A column that isn't in the file, or is set to Ignore | Stays exactly as it was |
| A brand-new address | Is added as a new contact, as usual |
Example
You imported 168 people with a custom field intro, then rewrote the text. Make a file with just two columns, Email and intro, map them the same way, tick Update existing contacts and merge into the same list. The result shows 168 already existed, 168 updated, and everything else about those people (name, company, tags, history) is unchanged.
Emails already waiting use the new values
Vecta fills in {{fields}} when each email is sent, not when it is queued. Updating a field changes every email still waiting to go out to that person, including later follow-ups. Pause the campaign first if you're not sure the file is right.
- "Updated" is lower than "Already existed". People whose values in the file match what's stored are counted as existing but not updated: there was nothing to change.
- Nothing changed. The box wasn't ticked, or the column was mapped to a different field name than the one stored (for example
Introinstead ofintro). Map it to the exact name your template uses. - To empty a field, edit the person by hand: a blank cell in a file is ignored on purpose.
Rows that get skipped
Bad rows never fail the whole import, each is reported with its line number and reason:
| Reason | Meaning |
|---|---|
| missing email | The mapped email column was empty |
| invalid email "…" | Not a valid address |
| duplicate in file "…" | The same address appeared earlier in this file; the first wins |
Did this help?
Related articles
Template Variables
How {{variables}} work, where they come from, and the one variable every template must contain.
Understanding Suppression Lists
How Vecta guarantees you never email someone who asked you to stop, and why it's workspace-wide.
Bounces that arrive later
How Vecta reads the "address not found" emails that land in your inbox after sending, and which ones put someone on the do-not-email list.