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 leave one out instead, if it is something you do not want on every profile.
| Column | What it means |
|---|---|
| The email address. Required. | |
| First Name | Their first name, used to greet them. |
| Last Name | Their last name. |
| Phone | Their phone number. We store it; we do not text anyone from an import. |
| Consent Status | subscribed or unsubscribed. Leave it empty if you do not know. |
| Consent Timestamp | When they agreed, with the time zone. |
| Consent Source | Where they agreed — your checkout, a form, an event. |
| Consent Method | How they agreed — a checkbox they ticked, a form they sent. |
| Can Receive Email Marketing | true or false. |
| Unsubscribe Reason | Why they stopped, if you know. |
| Address Check Result | If you had these addresses checked elsewhere. |
| Address Check Reason | What they said about the address, in their own words. We read it, and it decides. |
| Address Check Source | Who checked them. |
| Address Checked At | When they were checked. |
| External Profile ID | Their id in the system you are leaving. |
| External Form ID | The 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 batch 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 Integrations 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:
- Customer ID becomes their id in the system you are leaving, so you can match a profile here against a record there later. It is a reference you can look up, nothing more.
- Tags are kept as a note on the profile, under the name
Tags, the same way any column we did not name is kept. They do not become your store's tags. A segment that asks about tags reads the tags on your store, and those arrive when your store is connected — never from a file, because a file cannot be kept up to date and your store can. - Phone is kept as their phone number. We never text anyone from an import.
- Accepts SMS Marketing is kept as a note on the profile and does nothing else. It gives us no permission to text anybody: that permission is theirs to give, on your store, and a column in a file cannot give it on their behalf.
- Accepts Email Marketing is read the way every consent column is read. A
nocan move somebody from subscribed to unsubscribed. Ayescannot make anybody subscribed — it says the old system would have mailed them, which is a setting rather than something the person did. - Your own metafield columns — the ones with the field's address in brackets after the label — are kept under that field's name, so
Loyalty Tier (customer.metafields.loyalty.tier)becomesloyalty.tier.
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 a leave out beside it. If you do not want it on your profiles, leave it out 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 leave out 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 three things and type a word to proceed:
- these people gave you permission to email them;
- you did not buy, rent, or scrape the list;
- you will honor it when someone asks to stop.
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 happens to each row
When it finishes you get a count for each outcome, with the time the counts were taken.
Imported and ready to email. We have their permission and something tells us their address still works.
Imported, not ready to email yet. They are on your list and on their profile; we are just not emailing them until we know more. There are four different reasons for it, and the screen names which one applies to how many. Two of them are about permission — their row said they unsubscribed, or it did not say whether they agreed at all — and one is the row that agreed without saying when or where. The fourth is the address: nothing yet tells us it still works. See below.
Some of the people in this count were already here before you imported, and nothing about them changed. A check on their address came back unhappy, which is what puts them in a waiting count — but your email still reaches them, and the card says how many in those words: N of these were already here, and your email still reaches them. They are counted here rather than in a group of their own, because a familiar name in a waiting count is worth explaining, not worth filing somewhere else.
And a second line does the same job for a different set of people: N of these are already settled by your own record — verified, agreed, and not paused. A row waits on evidence from your file; the person on it can already be settled by what your store knows. The number above counts rows, so it does not go down; this line is what makes the sentence beside it true.
It is a statement about those people's records, not a promise that mail is going out today — whether your store is sending at all is its own question, answered on your Settings page.
Needs your attention. Something in the file contradicted itself, or contradicted what we already knew. Nothing was changed for these people. The usual cases: two rows for one address that disagree about whether the person subscribed, or a row saying somebody subscribed when they had already asked you to stop.
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 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 single fastest way to get a store's email blocked — not throttled, blocked — and once that happens it takes weeks to undo and it affects your receipts too, not only your marketing.
Holding an address costs you nothing and protects the reputation your store sends on. 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 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 the most any one address can ever 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.
A checking service tells us which addresses work, at $0.008 each — 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: we pass on what that service charges and add nothing.
One press, one cost, and you never press it twice. The button carries the count and the price — Check 509 addresses · 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 Look for new results on the summary screen. 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:
- The address passed, and you told us when. Those people come off hold. You paid for that answer once and there is no sense in paying for it twice.
- The address passed, and nobody said when. Those people stay on hold, and the summary counts them separately so you can see that one fact is all that is missing. The date is asked for on the way in, so if you have already imported the file there is no field here to fill: an order from one of those people, a recent delivery, or your next campaign's test batch each still brings an address off hold — and importing the same file again with an Address Checked At column gives every one of them their date at once.
- Inconclusive, catch-all, greylisted, a full mailbox, a role address like
info@. These are not failures and we do not treat them as such — they are the checking service saying we could not tell. Those people stay on hold and stay in both of the free doors below: your next campaign's test batch can still carry them, and — because a result you imported settled nothing — a paid check can still be spent on them. This is the commonest result on a real list by a wide margin, so if most of your people land here, nothing has gone wrong. - The address does not exist, has no mail server, is malformed, or is a throwaway. Set aside. They stay on your list and you can see them, but we will not spend your store's reputation or your money on an address their own service already called dead. Once that result is a year old it counts for nothing, like any other, and those addresses go back in with everybody else with both free doors open to them again.
- Their note says the address is on your own do-not-mail list. Same: set aside, and it is worth saying plainly that this changes nothing about what the person agreed to. It is not an unsubscribe and we do not record one. If you want those people marked as unsubscribed, that is the do-not-email file, which is a separate upload and the only thing that ever writes consent.
Test n of these addresses with your next campaign. This door names its number too: n is the most your store's recent sending can safely absorb. Your next campaign also goes to a batch of addresses on hold. Any address that accepts the campaign comes off hold. Any address that bounces stays on hold. Only addresses you may email are in a batch — anyone who unsubscribed or asked you to stop is never in one. The batch is as large as your store's recent sending can safely absorb — about 2% of the email your store delivered over the last month, small enough that a dead address cannot hurt your reputation. We watch that batch for three days, and then you can test the next one. If a batch goes badly we stop and tell you the rate that stopped us. If you have not sent anything from here yet there is no batch to size — send some ordinary email first, and the door opens. You can cancel a batch 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:
- came back inconclusive from your earlier check — not a failure; the test batch is the free way to find out.
- were greylisted, catch-all or full mailboxes — temporary answers, not failures.
- failed your earlier check and are set aside.
- were marked do-not-mail by the check you had done.
- passed a check whose date we do not know, so the result cannot count. A check is trusted for one year from the day it ran. Without the date we cannot tell a fresh result from an old one, so these addresses stay on hold. An order, a recent delivery, or the test batch still brings an address off hold.
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 the Profiles screen, 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.