Your project builds up contacts on its own as people message your bot. But if you already have a customer list — in a spreadsheet, in your CRM, in an old system — you can bring it straight in and broadcast to those people without waiting for them to message first.
You’ll find the Contacts card in Settings → Project. Click Import.
It’s in Settings rather than the Broadcasts tab, which is the first place most people look.
Two ways in
Upload CSV takes a file. Paste takes numbers typed or pasted in, one per line:
Either a bare number, or a name and number separated by a comma.
Whichever you use, click Validate first. Nothing is imported until you’ve seen what Paige made of your list.
A header row with any of these columns, in any order:
A file with nothing but a column of numbers works too — no header needed.
If you’re putting several tags in one CSV cell, separate them with semicolons rather than commas — a comma inside an unquoted cell splits the column and your import comes out wrong.
Numbers without a country code
This is where imports usually go wrong.
Paige needs to know which country a number belongs to. If your list has full international numbers (+27 82 123 4567), you’re fine. If it has local ones (082 123 4567), you must type your country’s two-letter code into Default country — ZA for South Africa, GB for the UK, US for the States.
Default country is empty by default. Import a list of local-format numbers without filling it in and every single row is rejected as invalid. Nothing is imported and it isn’t obvious why. If your validation summary says everything is invalid, this is almost always the reason.
What validation tells you
Three numbers:
- ready — will be imported.
- duplicate — already in your project. Skipped.
- invalid — couldn’t be read as a phone number. Skipped. You’ll see the first few so you can spot the pattern.
Then Import does it, and tells you what happened: Imported 47 contacts, skipped 3 duplicates, 2 invalid.
Duplicates are skipped, never updated. Re-importing someone with a corrected name or new tags does nothing — they’re already there, so the row is ignored. To change an existing contact, edit them in the database. This also means you can’t undo an opt-out by re-importing.
You can import up to 50,000 rows at a time.
After importing
Imported contacts are immediately available to segments and broadcasts — segments resolve live, so counts update with no refresh.
One thing to expect: Paige doesn’t yet know whether these numbers are on WhatsApp, because nobody has tried to message them. Your first broadcast is what finds out. Expect some Not on WhatsApp failures on that first send — it’s normal for an old list, and those numbers are excluded from every audience afterwards, so it only happens once.