← All help articles

Importing contacts from a CSV

contacts
Importing contacts from a CSV

If you've already got a list of your contacts somewhere (a spreadsheet, an old CRM export, a Google Sheet you keep on the desktop), you can import the whole lot into 1pm in one go instead of typing them in one by one. This article covers the CSV import flow, the file format, what gets skipped, and how to handle the common gotchas.

Where to find it

In 1pm, go to the Contacts page (the top navigation link). At the top right of the list, next to the New contact button, there's an Import CSV button that takes you to the import page at /Contacts/Import.

The page shows three things: how many more contacts will fit before you hit the per-account cap, a Download template button, and a file upload form.

Get the template first

Click Download template. You'll get a small CSV file with the column headers 1pm expects, plus a couple of example rows. Open it in Excel, Numbers, Google Sheets, or any plain text editor.

Working from the template is the easiest way to get the format right. Add your contacts under the example rows, delete the examples, and save the file.

You can also build the CSV from scratch if you'd rather. The first row must be a header row with the column names below, and column order doesn't matter. Names are case-insensitive, so FirstName, firstname, and FIRSTNAME all work.

The columns

There are thirteen, and only the first is required.

  • FirstName. Required. The contact's first name. Up to 100 characters. This is the only required column.
  • LastName. Optional. Up to 100 characters.
  • ContactName. Optional. Company name. "Sue's Catering", "Aurora Lights", or leave blank for an individual with no company affiliation. Up to 200 characters. (The column is still called ContactName for backwards compatibility with templates exported before the field was renamed in the UI.)
  • Email. Optional. Up to 256 characters, and it has to look like a real address (exactly one @ sign, with a dot in the domain) or the row is rejected. If a row's email matches one that already exists in your Contacts list, the row is skipped (more on this below).
  • Mobile. Optional. Up to 50 characters, and fussier than it looks: digits, plus, hyphen, brackets, full stop and spaces are the only characters allowed. A cell reading "0412 345 678 (mob)" or "02 9876 5432 ext 12" fails the whole row, so strip the words out before importing.
  • Website. Optional. Up to 500 characters. A bare domain is fine; 1pm prepends https:// for you. Anything that still doesn't parse as a web address is rejected.
  • Instagram, Facebook, X, LinkedIn. Optional. Up to 500 characters each. A handle or a full profile URL, stored exactly as you type it with no validation either way.
  • InternalNotes. Optional. Up to 3,000 characters. Notes that only you see. Useful for "Always books late", "Preferred for ballroom events", "Backup contact: Pat at 0412...".
  • Rating. Optional. A number from 0 to 5. 0 means no rating, 1 through 5 are stars. Lets you flag your A-tier suppliers.
  • Tags. Optional. Semicolon-separated within the cell. Example value: Caterer;Preferred;VIP. Tags are how you organize contacts on the Contacts page (filter by tag, find all the caterers, find everyone tagged Preferred). The 20-tags-per-contact cap applies here as it does everywhere, and duplicates within the cell are dropped for you.

Uploading

Once your CSV is ready, click Choose File on the import page, pick the file, then click Import contacts.

The maximum file size is 1 MB. That's roughly several thousand rows of contact data, which is far more than the account cap, so the file size limit is almost never the thing that bites first.

What happens with duplicates

If you import a CSV and one of the rows has an email that already matches a contact you've added, that row is skipped silently. The import doesn't overwrite the existing record, doesn't ask you what to do, doesn't error: it just leaves the existing contact untouched and moves on.

The same check runs within the file, not just against what's already in 1pm, so a spreadsheet that lists the same address twice creates one contact rather than two.

This means it's safe to re-import the same CSV. Old rows are skipped, new ones (with new emails or no email at all) are added.

The skip-by-email behaviour also means rows without an email address won't be deduplicated. If you import the same contact twice and neither row has an email, you'll get two records. Add emails to your CSV before importing if you care about uniqueness.

One thing import deliberately can't do: it never grants kitchen BEO access. That's an opt-in you make on the individual crew form, never in bulk from a spreadsheet, so imported contacts always arrive without it.

Per-account cap

A standard 1pm account has a cap of 1,000 contacts. The import page shows you how many more will fit before you hit the cap, and the Import button disables when you've hit it.

If your import would push you past the cap, the rows that fit are imported and the rest are reported in the results. You can delete some contacts you don't need anymore and re-import the rejected rows if you want them.

For most venues, 1,000 contacts is more than enough. If you actually need more, the limit lift is a contact-us conversation and we'll sort it out.

The import results

After the file uploads, you'll see a results card with a few counts:

  • How many contacts were imported.
  • How many were skipped because their email already exists.
  • How many were skipped because of the per-account cap.
  • How many rows had errors and weren't imported.

If any rows had errors, you can expand the View errors section to see the specific line numbers and what went wrong. Typical errors are things like a row with a missing FirstName, a Rating value outside 0 to 5, or a field that's too long.

The error report tells you the line number in the file so you can fix the original CSV and either re-import the whole thing (duplicates will be skipped) or just fix the broken rows and re-import that subset.

Common gotchas

  • The first row must be headers. If your file starts with data instead of column names, every row will be misinterpreted.
  • FirstName must be filled in. Rows with an empty FirstName cell are reported as errors. If you're importing an older template where the only filled-in name column is ContactName, you'll need to add a FirstName column too. Splitting "Sue's Catering" into ContactName=Sue's Catering and FirstName=Sue is a typical fix.
  • Tags use semicolons, not commas. Commas separate columns in the CSV; semicolons separate tags within the Tags cell.
  • A repeated column name isn't an error. If your header row has FirstName twice, the first one wins and the second is ignored silently. Blank rows are skipped the same way.
  • Accented names come through either way. Excel's "CSV UTF-8" and its standard "CSV (Comma delimited)" save both import with letters like é and ü intact. If accented letters still look wrong after an import, save the file as "CSV UTF-8" and import it again.
  • If you export from Excel and a column with leading zeros (like a phone number) drops the zero, format the column as text before saving.

When CSV import isn't the right tool

If you're adding one or two contacts, the New contact button on the Contacts page is faster than building a CSV. If you're migrating an existing list from another tool, CSV import is the path of least resistance: export from there, tidy the columns to match the names above, and one upload later you're done.

The fields covered by import are the standard contact set. Anything more specific (custom roles, event-specific notes, request responses) belongs on the individual event or on the contact's profile after import.

Still stuck after reading this? Open a help ticket and we'll answer your specific question.