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, matching your columns, saved column mappings, what gets skipped, and how to handle the common gotchas.
CSV import is available on a paid plan. On the free trial you add contacts one at a time, and the import page tells you so. To import during your trial, add a card and click Start your paid plan now on the Account page.
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 how many more contacts will fit before you hit the per-account cap, a Download template button, and a file upload form.
The file
Any CSV with a header row works. The first row names the columns, and each row below it is one contact. The columns can be called anything and come in any order, because you choose where each one goes after you upload. An export from another CRM or booking system is fine as it is.
If you're building a list from scratch, click Download template for a small CSV with a column for every field and a couple of example rows. Add your contacts under the examples, delete the examples, and save the file.
Upload, match columns, import
- Choose your file and click Upload and match columns. Nothing is imported yet.
- On the next screen, each column of your file is listed with a few example values from it, and a dropdown that says where it goes. 1pm fills these in for you from the column names: "Surname", "Cell phone" and "E-mail address" all land where you'd expect. Check them and change any that are wrong.
- Choose what happens when a row matches a contact you already have (see below).
- Underneath is a preview of the import. It counts how many contacts will be created, updated, skipped or rejected, and lists every row with its outcome, so you can see a problem before anything is saved. The preview updates each time you change a column.
- Click Import. The button says how many contacts it will create and update.
Each column can go to one of these:
- A contact field. First name, last name, business, email, mobile, website, Instagram, Facebook, X, LinkedIn, notes, rating or tags. First name is the only one every contact needs, and Import stays switched off until a column is matched to it.
- One of your custom contact fields. Text, date, number, time and choice fields can be filled from a column. Upload fields can't, because they hold files.
- Add to notes. The column is added to the contact's notes as "Column name: value", one line each. Use it for anything that matters but has no field of its own, like a lead source or an old reference number.
- Don't import. The column is left out.
Each field takes one column. If you choose the same field for two columns, the preview says so and only the first one is used.
What each field accepts
- First name. Required. Up to 100 characters.
- Last name. Up to 100 characters.
- Business. The company the contact belongs to, such as "Sue's Catering" or "Aurora Lights". Leave it blank for an individual. Up to 200 characters. (In the template this column is called ContactName.)
- Email. Up to 256 characters, and it has to be an address 1pm can send to or the row is reported as an error. That is the same check every email 1pm sends goes through, so an address with a stray full stop on the end, such as
[email protected]., is an error rather than a contact with an address that never works. - Mobile. 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. A bare domain is fine; 1pm adds https:// for you. Up to 500 characters, counting that https://. Anything that still doesn't read as a web address is rejected.
- Instagram, Facebook, X, LinkedIn. Up to 500 characters each. A handle or a full profile URL, stored exactly as it is in the file.
- Notes. Up to 3,000 characters, including anything added from other columns. Notes that only you see.
- Rating. A number from 0 to 5. 0 means no rating, 1 through 5 are stars.
- Tags. Separated by semicolons within the cell, for example Caterer;Preferred;VIP. The 20-tags-per-contact cap applies here as it does everywhere, and duplicates within the cell are dropped for you.
- Custom date fields. Day first (15/05/2027) or year first (2027-05-15). A month-first date like 05/15/2027 is an error rather than a guess, so nobody's date lands in the wrong month.
- Custom number and time fields. A number uses a dot for decimals (1.5). A time can be 14:30 or 2:30 PM.
- Custom choice fields. The cell has to match one of the field's options, in any capitals. For a field that allows several choices, separate them with semicolons.
Saving your column choices
If you'll import from the same place again (a monthly export from another system, say), give your column choices a name in Save these column choices before you click Import. The next time you upload a file with the same columns, in any order, 1pm picks that mapping for you and says so at the top of the screen. You can also choose a saved mapping from the dropdown at the top of the matching screen.
Saving under a name you've used before updates that mapping. Your saved mappings are listed on the import page, where you can delete any you no longer need. Deleting a mapping doesn't change any contacts you imported with it.
When a row matches a contact you already have
Before you import, 1pm checks every row against your contacts. A row matches a contact when it has:
- the same email address (in any capitals), or
- the same mobile number, compared on its last nine digits so "+61 412 345 678" and "0412 345 678" are the same number, or
- the same first name, last name and business.
A mobile or name match doesn't count when the two disagree on something that tells people apart: both have an email and the emails differ, (for a mobile match) the first names can't be the same person, or (for a name match) both have a mobile and the numbers differ. "Alex" and "Alexander" on the same number match; "Bob" and "Alice" don't. Two people who share an office phone or a common name stay two contacts. Sample contacts are never matched.
Under the column choices, pick what a matching row does:
- Fill in blank fields only (the default). The file fills in details the contact doesn't have yet, such as a missing mobile or website. Anything the contact already has stays as it is.
- Replace with the file's values. Every detail the file has replaces the contact's. A blank cell in the file never clears anything.
- Skip the row. The contact isn't changed.
Either way, tags in the file are added to the contact's tags (nothing is removed), and notes from the file are added under the contact's own notes rather than replacing them. A business name is left alone when the contact is linked to a company record.
The preview lists every row that matches, with the contact it matched, how it matched, and which fields will change. Each of those rows has its own dropdown, so you can choose differently for one row: fill it, replace it, skip it, or Add as a new contact when the match is a different person who happens to share a name. Use the Matches existing button above the preview to list only those rows.
The file is checked against itself too. A second row with the same email as an earlier new row, or a second row that matches the same existing contact, is skipped, and the preview says which line it repeats. When a matching row would give a contact an email that an earlier new row already has, the contact's email stays blank, so two contacts never end up sharing it.
It's safe to import an updated copy of the same list. Rows already in your contacts match and fill in anything new, and new rows are added.
One thing import deliberately can't do: it never grants kitchen BEO access. That's an opt-in you make on the individual contact, never in bulk from a spreadsheet, so imported contacts always arrive without it.
Undoing an import
An import can be undone for 7 days. Undo it from the results card straight after importing, or from Recent imports on the import page.
- New contacts the import added are deleted, unless something has happened to them since: they've been added to a booking, a lead, a portal, an invoice, an ingredient or anything else, emailed, given a photo, or edited. Those are kept, and the message after the undo says how many.
- Contacts the import changed get their earlier details back. A detail that has been edited again since the import is left as it is, and tags the import added are removed. A custom field value that came from a request answer goes back as that answer.
An import can be undone once.
Per-account cap
A standard 1pm account has a cap of 3,000 contacts. The import page shows you how many more will fit before you hit the cap.
If your import would push you past the cap, the rows that fit are imported and the rest are reported in the results. The preview shows which rows those are before you import. You can delete some contacts you don't need anymore and import the rest afterwards. Rows that update a contact you already have don't count toward the cap, so a file can still fill in your existing contacts when your account is full.
For most venues, 3,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 import, you'll see a results card with a few counts:
- How many new contacts were imported.
- How many existing contacts were updated, and how many matched with nothing new to add.
- How many rows were skipped, because you chose to skip a match or because they repeat an earlier row.
- 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 a row with no first name, an email address that isn't valid, a rating outside 0 to 5, a field that's too long, or a custom field value that isn't one of its options.
The list shows the first 200 rows with errors. When there are more, its last line says how many more rows had problems. The same mistake is usually on every row, so fix what is listed and upload the file again to see what is left.
The line numbers match the rows in your spreadsheet, so you can fix the original file and import it again: the rows that went in the first time match the contacts they created, so nobody is added twice.
Refreshing the results page doesn't import the file a second time. An uploaded file that you never import is deleted after 2 days, and a file is deleted as soon as it has been imported.
Common gotchas
- The first row must be headers. If your file starts with data instead of column names, the first contact becomes the column names and every column is matched wrongly.
- Columns are separated by commas. Some spreadsheet settings save a CSV with semicolons or tabs between columns instead. That file is refused with a message saying which one it uses. Save it as comma-separated (CSV) and upload it again.
- Tags use semicolons, not commas. Commas separate columns in the CSV; semicolons separate tags within the Tags cell.
- A file can have up to 100 columns. Delete the columns you don't need from a very wide export before uploading.
- Blank rows are skipped. They don't count as errors.
- 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.
Importing straight onto an event
When the list is the crew for one event, import it from the event instead. On the event, under the crew list, click the Import crew from CSV button beside Add another crew member (it uses your own word for crew). An onboarding portal has the same button under its people list, and works the same way. The cap and the field rules are the same as above, but there is no column-matching step: the file has to use the template's column names (FirstName, LastName, ContactName, Email, Mobile and so on), so start from the template that page offers. If you have already imported the list on the Contacts page, the results there offer Add them to for each open event or portal: upload the same file on that page and it matches the contacts you just imported by email, so nobody is added twice.
Everyone in the file ends up on the event with their own crew link:
- New people are created as contacts and added.
- A row whose email already belongs to one of your contacts adds that contact. Their details aren't changed by the file.
- A row with no email adds an existing contact when their first name, last name, company and mobile all match and that contact has no email either. Otherwise it creates a new contact.
- Anyone already on the event keeps the link they have.
- Anyone you removed from this event isn't put back. Add them again from the crew list if you meant to.
- The booking's client isn't added as crew, even if their email is in the file. Their link is their event portal, which you open from the booking when you're ready to share it.
Each person added counts as someone being added to the event, so any automation you have for that runs for them, the same as adding them one at a time.
Nothing is emailed by the import. The results card has an Email their invites button, which opens the usual batched invite window with the people you just added ticked. If you have an automation that sends the invite when someone is added, the card says so instead and there's no button, so nobody gets their invite twice. Rows with no email address are counted, so you know whose link to copy and send another way.
If something goes wrong while people are being added to the event, the results card says how many could not be added. Their contacts are saved, so upload the same file again: every row matches the contact it already made, and people already on the event are left as they are.
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 moving an existing list from another tool, CSV import is the quickest path: export from there, upload the file, match the columns once and save the mapping for next time.
Anything event-specific (a role on one booking, request responses) belongs on the individual event after import.