Back to app

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

OptionUse when
New saved listYou'll send to this group more than once
One-off listA single blast; keeps your saved lists uncluttered
Merge into existingAdding 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 fileWhat happens to an existing contact
A filled cellReplaces the stored value for that field
A blank cellKeeps the stored value. A blank never erases anything
A column that isn't in the file, or is set to IgnoreStays exactly as it was
A brand-new addressIs 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 Intro instead of intro). 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:

ReasonMeaning
missing emailThe 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