PlainFunnels

Home / Categories / Contacts

What is the safest way to import an old list?

Short answer

Clean the file first, bring it in as a UTF-8 CSV with tags applied during the import, then leave it 24 to 48 hours before sending a big campaign to it.

What the importer will take

  • CSV only. systeme.io states it accepts CSV file formats and nothing else. An Excel file has to be saved out as CSV first.
  • UTF-8 encoding, or accented characters arrive corrupted.
  • A delimiter you declare. The import screen has a Select CSV delimiter box offering comma, semicolon or pipe. It has to match the file.
  • Clearly labelled columns, such as First Name, Last Name, Email, Tags and Registration Date.
  • An email column. Required, because it is the primary identifier for each contact.

What to do to the file first

This is the part that decides whether the import causes damage, and all of it happens before systeme.io is opened.

  • Export from the old tool as CSV, then look at what came with it: names, status, registration date, tags, interaction history.
  • Take out duplicates, invalid addresses and repeated emails, so one person does not become several entries.
  • Take out generic or suspicious addresses. systeme.io names test@test.com and admin@domain.com as examples.
  • Leave unsubscribed and inactive people unsubscribed. systeme.io is explicit that their status is not to be reactivated.
  • Keep the opt-in proof. Only addresses that gave explicit consent belong in the file, and systeme.io states that as a requirement of the import rather than a suggestion.
  • Keep a copy of the original list before anything is uploaded.

Unsubscribed contacts can still be brought across, as long as they carry the Unsubscribed status. Select them after the import, open More actions, and choose Unsubscribe from marketing emails. They stay in the account and receive nothing.

The import itself

  1. Go to Contacts under the CRM tab and click Import contacts.
  2. Set the Select CSV delimiter box to comma, semicolon or pipe, matching the file.
  3. Click the box reading Click to select the CSV file that contains your contacts and upload it.
  4. Pick a tag to assign to everyone in this file, then click Next.
  5. In the popup that follows, set the data type of every column, so each one lands in the right field.
  6. Click Import.

Getting the file into CSV in the first place is an Excel job, not a systeme.io one. systeme.io's route is File, then Save as, then choosing the separator, then Save. The separator picked there is the one that goes in the delimiter box a minute later.

The Import contacts screen in systeme.io, with the CSV delimiter dropdown, the file box and the Select tags row highlighted.
The delimiter defaults to Comma, and the Campaign dropdown sits below these three. Nothing was uploaded to take this picture.

Two things are worth setting while that screen is open, because doing them afterwards is far more work.

  • A source tag. Something like migration_2026, so the imported people can be told apart later.
  • Custom fields. Any column that belongs in a custom field has to be pointed at it during the mapping step.

Subscribing the list to a campaign as it imports

The import screen has a Campaign (optional) dropdown that subscribes everyone in the file to a campaign. Using it adds two more columns to map, and both are mandatory when it is used.

  • Select last sent email number column: which step of the old sequence each person had reached.
  • Select last sent email date column: when they received it.

Read the report

systeme.io produces a summary of the contacts imported successfully and any errors, and asks for it to be analysed carefully, because a mismapped column means lost data.

A report showing fewer contacts than the file's row count is not necessarily a sign anything went wrong. Whether a duplicate reaching the importer produces one contact or two is not stated in systeme.io's import guidance, and a row matching an email already in the account may update that existing record rather than add a second one next to it. Either way, the count can come out lower without an error having happened.

Before assuming a problem, search the contact list for a few of the specific addresses that seem to be missing. If they are already there, the file's row count was never going to match the number of genuinely new contacts.

The rule that catches people out

Do not send a big campaign to the list the moment the import finishes. systeme.io asks for 24 to 48 hours for its servers to process new contacts, and says to avoid a massive campaign immediately after an import.

For thousands of contacts it also asks for the import to be split into batches rather than done in one go. Its own table of migration errors gives the same fix against a spam risk: migrate in batches and test first.

Students are their own case

Adding a student to a course sends an automatic email with the link to the member area. Importing a batch of old students therefore triggers those emails. systeme.io asks for a gradual import when those people have not heard from the business in a while, to avoid mass bounces.

How I checked this answer

Nothing on this site is written from memory. These are the sources I checked to write this answer, and the date I checked them.

Checked on

From my own use

Before importing an old list, I ran it through ZeroBounce, a list-cleaning service, to strip out the junk and dead addresses first.

Did this answer your question?

Keep reading