CarpeMessaging
Request early access

Help · Audience

Import people

You can import your people from wherever they are now. Upload a file, tell us where they came from, and we import them one row at a time so you get an honest answer about each one.

Most of your people will arrive ready to email. Some will wait. That is worth understanding before you start, because it is the part that surprises people, and the reason for it is the same reason this works at all.

What to upload

A CSV file. If it is a customer export from your Shopify store, upload it exactly as it came out — you do not need to rename a column, move one, or strip anything. We recognize it, read every column, and the column step tells you so instead of asking you to check twenty-one rows.

Anything else needs one person per row and a header row at the top. Export one from your current platform, or download our template on the first step — it has every column we understand and two example rows, and a file you export from us imports straight back with no setup.

The only column we cannot do without is the email address.

One file can carry up to 50,000 rows. If yours is longer, split it and import the parts one after another.

The columns

We match your headers to ours automatically, whatever case or spacing they use, and we understand the common names other platforms print in their own exports — a Shopify customer export we read whole, and a file from anywhere else column by column. You can export only some of your columns and upload that: we read whichever ones we recognize and leave the rest alone.

A column we do not recognize is not a problem. It is kept on each profile under the name your file uses, so you can build a segment on it later. On the column step you can Exclude one instead, if it is something you do not want on every profile.

ColumnWhat it means
EmailThe email address. Required.
First NameTheir first name, used to greet them.
Last NameTheir last name.
PhoneTheir phone number. We store it; we do not text anyone from an import.
BirthdayMonth and day. If a year is there, it is not kept, and a birthday the person already gave you is never replaced.
Consent Statussubscribed or unsubscribed. Leave it empty if you do not know.
Consent TimestampWhen they agreed, with the time zone.
Consent SourceWhere they agreed — your checkout, a form, an event.
Consent MethodHow they agreed — a checkbox they ticked, a form they sent.
Can Receive Email Marketingtrue or false.
Unsubscribe ReasonWhy they stopped, if you know.
Address Check ResultIf you had these addresses checked elsewhere.
Address Check ReasonWhat they said about the address, in their own words. We read it, and it decides.
Address Check SourceWho checked them.
Address Checked AtWhen they were checked.
External Profile IDTheir id in the system you are leaving.
External Form IDThe id of the form they used, if there was one.

If your file says whether but not when

Plenty of files carry a check result on every row and a date on none — the check was run once, for the whole file, and only the result was written down. When we see that, the step called The columns asks you one question: when was this check run? Give us the month and day as best you remember, and we use it for every row that does not carry a date of its own. A row that has its own date keeps it.

If you do not know when, say so. The import goes ahead exactly as it would have and nothing in that column is thrown away — we keep every result and show you how many people are waiting on a date, on the summary screen. What an undated result does not do is take anybody off hold.

That is deliberate, and here is the reasoning. A result with no date is a statement about a mailbox at an unknown moment. It could be from last month or from 2019, and the difference decides whether it means anything: mailboxes close, and a list that was clean four years ago is exactly the list that gets a store blocked. We would rather ask you one question than guess on your behalf and cost you your sending reputation.

If you find the date later, here is what to do with it. The question is asked on the way in, so there is no field to fill afterwards on a file you have already imported. Nothing is lost and nothing has to be paid for: an order from one of those people, a recent delivery, or your next campaign's test group each brings an address off hold on its own, and importing the same file again with an Address Checked At column gives every one of them their date at once. (If your people came from another tool rather than a file, the date lives on the connection and one field on the Imports screen answers for every import it has ever made.)

If your file says what the service found, in words, we read that too. Put their note in Address Check Reason — "The address does not exist", "The mailbox is full", "Greylisting is active on this server" — and it is what decides, because a note is more specific than a word. A service that says failed and then explains that the mailbox is full today has not found a dead address, and we are not going to treat that person as one.

A check older than a year does not count, whether the date came from the row or from you. Mailboxes close, and a result from three years ago describes an address that may no longer exist.

Anything we do not recognize is kept, not thrown away. A column called Favorite Color becomes a field called Favorite Color on each profile, spelled exactly the way your file spells it. You can build segments on it afterward. We never rename your columns — with one exception, further down this page: a Shopify metafield column, whose heading carries the field's own address in brackets, is kept under that address instead of under the whole heading.

A Shopify customer export

Shopify's customer export has a fixed set of columns and we understand all of them, so there is nothing to rename and nothing to move. Six are worth knowing about:

Street addresses are not kept. The two street lines, the ZIP, the company and the address's own phone number are read and dropped — from a Shopify export, and from any file that spells those columns the way Shopify spells them. The column step says so on each of those rows. There is nothing to tick: it is not a setting.

A column your own file spells some other way — Address 1, Street, a heading you typed yourself — is an ordinary column like any other: kept under its own name, with an Exclude box beside it. If you do not want it on your profiles, exclude it there.

The city, the province and the country are kept, because a region is how you send to your customers in one state, and they are ordinary columns with a Exclude box beside them like any other.

Everything else — what they have spent, how many orders they have placed, your note, whether they are tax exempt — is kept on their profile under the column's own name. The quote Shopify puts in front of a number so a spreadsheet does not mangle it is removed for you.

What we ask you to confirm

Before anything is imported you confirm that these people gave you permission to email them, that you did not buy, rent, or scrape the list, and that you will honor it when someone asks to stop. Then you type a word to proceed.

We ask because it decides who we can email, and because you are the only one who knows. We record who confirmed it and when, and that record outlives the import itself.

What happened to your people

When it finishes you get a count of everyone the file imported by where they stand today — whether your store can email them now — with the time the counts were taken. Each person is counted once, and the counts add up to everybody the file imported.

Can be emailed now. They agreed, their address is confirmed, and nothing stops your email reaching them — exactly what a send checks before it goes. That includes people already here before you imported whose own record settles them.

Agreed, waiting to be confirmed. They agreed, but nothing yet confirms the address, or their row did not say when and where they agreed. These are the people the addresses-on-hold card is about. See below.

Never agreed. There is no record that they agreed to hear from you.

Unsubscribed — will not be emailed. Blocked — bounced, marked as spam or do-not-mail. And, only when you have paused somebody, Paused by you.

A row with no email address makes no profile, so it is not imported: one quiet line says how many.

Every number is a link. It opens the Profiles screen showing exactly those people, with a chip at the top naming the group and, on each row, where that person stands. The list is always the length of the number you pressed; remove the chip with its × to see every profile again. Every count on the addresses-on-hold card, and every line of its breakdowns, opens its people the same way.

When your file disagrees with your store, your store wins. If a row says somebody subscribed when your store's record says they unsubscribed, were blocked, or asked to be erased, we keep your store's record and change nothing for them. There is nothing for you to decide. They are counted in the row their record puts them in (usually Unsubscribed or Blocked), and one quiet line under the rows says how many there were: 3 had a different record in your file. We kept your store's. The number opens them, like every other count.

Two rows in your file that disagree with each other about the same address make no profile at all. They are listed under What can stop a row, with the line numbers, so you can fix the file and import it again.

Every profile we create remembers that it came from a file. It carries a property called imported_from, with the value file, and you can build a segment on it the same way you would on any other property — "anyone who came over in a file". Somebody who was already here before you uploaded keeps whatever they had: the property says where a profile started, not where we last saw them, so we never write it onto a profile we did not create. You cannot set it from your file either; a column with that name is ignored and reported, so the answer is always ours and always honest.

Three things we will never do with your file

We never bring back someone who unsubscribed, we never quietly overwrite what your store already knows, and we never guess at an address.

We will never bring back someone who unsubscribed. Not even if your file has a newer date on it. Somebody's decision to stop hearing from you is not something a later export gets to overrule; the row is set aside and reported so you can see it happened.

We will never quietly overwrite what your store already knows. If a person already came from your store's own customer record, their name, phone and customer id stay as your store has them. Everything else in your file is still kept.

We will never guess at an address. If a row says gmail.con we flag it and import it exactly as written. We are not going to email somebody at an address they never gave you.

Why some addresses go on hold

Two separate things have to be true before we email anyone: the person agreed, and the address still works. A file can tell us the first. It cannot tell us the second — so we could not confirm these addresses work, and nobody at these addresses is emailed yet.

They agreed, but the file did not say when or where

This is the commonest one, and it surprises people, because the addresses themselves are usually fine. A row that says somebody is subscribed and nothing else is a claim with no record behind it — and a record is what you need the day somebody asks why they got an email from you.

Add Consent Timestamp and Consent Source to your file and import again and these people go straight through. If you no longer have that detail, Confirm where they came from on the summary screen: you state where they came from and when, in your own words, and we record it as your word for it rather than as a record. That is weaker, and we keep it labeled as the weaker thing it is.

Nothing tells us their address still works

Most files that come from another platform are a few years old in places. Mailboxes close. Emailing a batch of addresses that have gone stale is the quickest way to lose the good standing your store's email has with the inboxes, and winning it back takes weeks and touches your receipts too, not only your marketing. Emailing addresses that work keeps that standing growing instead.

Holding an address costs you nothing and protects your deliverability — the reputation your store sends on, which is an asset worth keeping. We hold an address only while nothing yet says the mailbox is alive, and every free route off hold is on this card — we would rather your addresses come off hold for nothing than have you pay to check them.

So the addresses go on hold, and we give you three ways through.

Check n addresses · about $x. One check names one number and one cost before anything is spent, and it covers every address on hold that a check can help — however many that is, so there is never a second round to ask for. The number is not the size of the held pool: anybody already unsubscribed, on your do-not-mail list, already given a definite answer, or already set aside by your own checking service is not in it, so the figure on that line is what the check would actually cover. It is also the most you can be charged. If some of those people come off hold for free before we get to them, you pay for the ones we actually checked and nothing more. When every address on hold has already been answered or may not be emailed, there is nothing here worth paying for.

Once an address comes back with a definite answer — it works, or it does not — we do not check it again for this import, so on this import you are never asked to pay twice for the same answer. An address the service could not tell us about is different: nothing was settled, so it stays in the number and a later check can ask about it once more. If the answer comes back we could not tell a second time, that address leaves the number for good, exactly as a definite answer does — so on one import the most any one address can cost you is two checks. When the number includes people we have asked about once already, it says so before you agree: includes N addresses checked before that could not be verified. Within one check every address is asked at most once, whatever comes back.

One address, one bill, across your imports. If a later import includes somebody another of your imports has already paid to check, or is checking right now, that address is not in the later import's number, so it is never billed twice — however long ago the first check was. Its one re-check stays with the import that checked it first. What keeps the address out is a one-way coded form of it, kept while your store has its account, so it holds after the import itself has been cleared away. An address a check found working, or found does not exist, is never offered for checking again at all.

What each answer does. When the check is over we email whoever pressed the button a list, one line for each kind of answer that came back, and the import screen shows the same lines under The last check:

Nobody who has verified identity, or who has received, opened or clicked one of your emails since the check, is ever blocked by it. The page What an address check does goes through every answer, what happens to the person here and in Shopify, and whether they can come back.

A checking service tells us which addresses work, from $0.008 each (less past the first 10,000 each billing period) — usually within minutes, and longer where there are a great many of them. No email is sent. Addresses already unsubscribed or on your do-not-mail list are never checked, so you are never billed for one. It is the fastest way through and the only one of these that costs money, charged at cost.

One press, one cost, and you never press it twice. The button carries the count and the price — Check 509 addresses for about $4.07 — and pressing it asks you to confirm those two numbers and nothing else. After that the check runs on its own until every address on hold has been asked about, however long that takes and however it is divided up underneath; there is no second press and no second bill. We email you when it is over, and addresses come off hold as the answers arrive. If the number has moved while you were reading it — somebody placed an order, somebody unsubscribed — we say so and ask you to agree to the new one rather than charging you for the old.

You will find the button in three places, and it is the same one: on the addresses-on-hold card at the end of an import, on the import screen of a service you connected, and on that migration's report.

Import your own check results. If you have had these addresses checked somewhere else, add the four Address Check columns to your file and import again, then press Re-check these addresses under Ways off hold on the summary screen. One press works through every address waiting for proof it works and says how many can now be emailed. When it has finished, the row says when it ran and what it found — Re-checked at 9:31 AM — nothing came off hold. — and the button stays off until something it looks at has changed: a new import, a check date you save, new check results, an order from one of these addresses, or 24 hours. We record it as their finding rather than ours, and a check older than a year no longer counts for anything — whichever way it went. If your results carry no date, we ask you for one on the way through — see If your file says whether but not when above.

Here is what each kind of result does, and why:

Send to a small test group with your next campaign. A small group of these people — they agreed to hear from you — comes off hold when you start it and goes out with your next campaign, but only those already in that campaign's audience; nobody is added to a campaign they were not in. A delivery shows the address works; an address that bounces is never emailed again, and if a group goes badly we stop and tell you the rate that stopped us. The group is kept small — 2% of the email your store delivered in the last 30 days — so even if every address bounced, your store's reputation is safe, and we watch each group for three days before the next one. When one can start, the row says how many — Ready: a test group can take up to n addresses — the most one group may carry, not a count of who is waiting. Only an address whose one problem is an unproven mailbox can go in a test group — anyone who unsubscribed or asked you to stop is never in one. Until your store has delivered at least 50 emails in the last 30 days there is no test group yet, because 2% of less than that is nobody. You can cancel a test group that is out; the addresses that already came off hold stay ready to email, and the allowance comes back.

What the summary screen tells you about your own check

The block under your import counts the addresses on hold by what is holding them, and when the answer came from a check you had run, it says what the check found:

Every one of those lines carries its own number, and a line with nobody behind it is not drawn at all.

Both doors, and what neither one does

Confirming where somebody came from settles the first question and leaves the second alone: an address nobody has checked is still an address nobody has checked. Most people who arrive with a consent gap need both doors, and that is not the doors failing — it is the two questions staying separate.

Taking an address off hold changes whether we believe the address works. It never changes what the person agreed to. Somebody who unsubscribed stays unsubscribed through every one of these.

How long we keep your file

We do not keep your spreadsheet. Its cells are erased the moment the import finishes — by then everything they said is on the profiles themselves, which is where you can see it and work with it.

What stays a while longer is the one-line record of what happened to each row, so you can come back and read your outcomes. Those go 30 days after the import finishes.

Addresses on hold — held back until we know the address works — stay until they come off hold or you cancel the import. If neither happens, they go 180 days after the import finished, because a batch nobody acted on and nobody canceled has stopped being an import and is just a list of addresses.

An upload that never finishes is not kept. If the page closes while your file is still going up, the import never starts — and the rows that did arrive are deleted 24 hours later. Nothing is waiting for you afterward; start again whenever you like.

If someone asks to be forgotten, we erase them by every address we know for them — including out of anything an import is still holding.

Importing into a list

You can start an import from Audience → Profiles, or from a list, in which case everyone in the file also lands on that list. It is the same import either way.

Being on a list is not the same as agreeing to hear from you, and we never treat it as if it were. A list is a container; consent is a separate fact about a person.

If something goes wrong

Keep this page open until the upload bar finishes. Your file goes up from your browser a piece at a time, and the import does not start until the last piece has arrived — so a page closed halfway through leaves an upload that never finished, and those are not kept (above).

Once the bar is done, the import runs on our side. You can close the page then and come back to it later.

If an import stops and says it needs attention, nothing further will happen to it until you look. Whatever it had already imported stays imported; the rest is untouched.