What moves, and what you rebuild
Move your WhatsApp number
Coming from another provider
Wati, AiSensy, Interakt, 360dialog, Twilio, Respond.io and the rest are all WhatsApp providers; Meta calls them Solution Providers or Tech Providers. Your number is registered for Cloud API through one of them today, and only one provider can hold it at a time. Moving it is a Meta action; DMLY picks it up at the end. Two things decide how much work is left over:- Who owns the WhatsApp Business Account. If the account is yours, in your own Business Manager, it comes across with everything on it, including your approved templates. If your old provider owns it and the number ends up on a different account, the templates stay behind and you re-submit them. Check this before you do anything else; it is the difference between a same-day switch and a week of template reviews.
- Two-step verification. It has to be off on the number before you start. DMLY says so on the connect screen.
Get your house in order at Meta
Note what you are about to lose sight of
Connect the number in DMLY
Register the number
Check what came with it
Coming from the WhatsApp Business phone app
This is the case where you may not have to give anything up. By default, connecting a number to the Cloud API takes it over exclusively and the WhatsApp Business phone app stops working on it. Co-existence mode is the alternative: the phone app and DMLY share the same number. On the connect screen, below the main button, there is a separate section (Already using the WhatsApp Business app?) with its own Connect in co-existence mode button. Use that one instead of the main button. The rest of Meta’s signup is the same. What co-existence actually gives you:- You keep chatting from the phone. The app stays working on the number.
- Messages you send from the phone app appear in the DMLY inbox too, on the same contact, so the thread stays in one place. They are recorded as sent by you, and they are never routed to your bot; a human is clearly already handling that conversation.
- A contact record is created for anyone you message from the phone, so your list fills in as you work rather than all at once.
- Automation still runs on the number. If you would rather the bot stayed quiet on any conversation you have personally answered from the phone, turn on Pause the bot when I reply from the phone app; it pauses the bot for that one contact, and it is off by default.
- Up to 180 days of one-to-one chats arrive. Group chats never do.
- Media from the last 14 days arrives as files. Older media shows as a placeholder.
- The app’s saved contacts go into an address book and are used to name your contacts. They never create a contact on their own.
- Imported history does not start flows or automations, raise unread badges or open the 24-hour window. Contacts it creates start closed.
Coming from no WhatsApp at all
Moving off a CRM, a booking system or a spreadsheet with no WhatsApp Business number in the picture? Then there is nothing to migrate on the channel side. Connect a fresh number and read the 24-hour window before you import anyone, because it changes what you can say to an imported list on day one.Bring your contacts
The contacts CSV importer is the main road out of another CRM or a spreadsheet. Read Import contacts from CSV for the full behaviour; this is what matters when you are migrating. Connect your WhatsApp number first. The importer attaches every contact to the channel that is selected when you run it, and it refuses to run at all with no channel active (“Select a channel before importing.”). Importing before your number is live means importing onto the wrong channel.The columns
Take Download sample on the import page and match it. The header row is what the importer reads: order follows your header, capitalisation and stray spaces are ignored, and any column not in this list is thrown away.- A CSV of email-only contacts imports nobody. Every row needs a phone number. If your old tool was email-first, expect to lose the rows that have no mobile number.
- Put the country code somewhere, once. If your export already has full international numbers
in
phone, leavecountry_codeempty; otherwise you get the country code twice and the numbers are unreachable. - Quote anything containing a comma. An unquoted comma inside a note shifts every later value one column right and pushes the last column off the end of the row.
It won’t duplicate people, but it isn’t read-only
Before creating anything, the importer looks for an existing contact anywhere in the workspace with the same phone or the same email. On a match it adds the identity and fills blanks rather than making a second person. That makes a second pass safe, but not harmless:name,email,phoneandstageare only filled in where they are empty.- Tags are replaced, not added to. A file with an empty
tagscolumn strips every tag from everyone it matches. - Custom fields are overwritten on the keys your file sets.
- The
notesvalue is added again, on every run.
Importing does not start your automations
A contacts CSV import deliberately starts no contact automations. New contact, Tag applied, Tag removed and Field changed do not fire for imported rows, so you don’t need to pause anything first. The result message ends by saying so: “Automations that watch for new contacts were not run.” The flip side: a welcome flow will not run for anyone you import. If you want imported people to get a message, send them a broadcast instead. Webhooks still fire. A connected tool listening forcontact.created or contact.tagged hears
about every imported row. See Triggers.
One more thing that stops a migration dead
Your plan caps how many contacts a workspace can hold, and the whole file is checked before a single row is written, so an import that would take you over the cap imports nothing at all. The check is deliberately cautious: rows that would only have matched someone you already have still count toward the estimate. See Plans.Carry your opt-outs across
If someone told your old tool to stop messaging them, that instruction does not travel with a CSV. This is the one part of a migration with legal weight, so here is the plain truth. So decide deliberately, before you build the file:Export your suppression list from the old tool first
Leave opted-out people out of the CSV
If you must keep them, tag them and exclude the tag everywhere
tags column (Do not contact does the job) and add it
to Exclude contacts with tags on every segment and
broadcast audience you build.Use your own tag rather than the built-in Unsubscribe one. DMLY manages that tag itself:
it attaches it when someone opts out and removes it when they opt back in, so a marker you
applied by hand can vanish without you touching it.Understand what this is and isn’t: the tag is a filter you are applying by hand, not the
opt-out flag. Importing the Unsubscribe tag does not opt anyone out. Sequences,
automations and any audience where you forgot the exclusion will still send to them.For the ones that really must never be messaged, block them
Bring your catalogue
If you sell services or products, both have their own CSV importer and both only ever add. Services: columnsname, type, category, duration_min, price, currency,
capacity, description, active. name is the only required one; type is appointment,
class or add_on and anything else imports as appointment. A row whose name matches an
existing service is skipped rather than overwritten, so a re-run never damages what you have.
Products: columns name, sku, price, cost_price, currency, tax_rate,
tax_inclusive, track_stock, stock_quantity, low_stock_threshold, category, active,
description. Every row with a name becomes a new product; nothing is matched against what
you already have, so uploading the same file twice gives you two of every product. Import once,
check, and make later changes in the app. Full detail: Products.
Rebuild what can’t move
Message templates
Templates belong to your WhatsApp Business Account at Meta, not to DMLY and not to your old provider’s software. That single fact decides your timeline:- The account comes with you → your approved templates come with it. Open Templates, select Refresh templates, and they appear in DMLY with their current status pulled from Meta. Nothing to re-submit.
- The number lands on a different account → the templates do not follow. Every one you rely on has to be recreated and submitted to Meta for review again.
dmly_ templates for review the
moment a live number connects. Those cover appointment confirmations and reminders, invoices,
receipts, review requests and more. Until Meta approves them, the notifications that depend
on them are not sent at all to anyone whose 24-hour window is shut.
See Message templates.
Automations and chatbots
There is no importer for flows, and no format DMLY reads from another tool. Rebuild them in the flow builder, and treat it as a chance to drop the branches nobody used. Start from a ready-made template rather than a blank canvas where one fits.Conversation history
Nothing imports past messages, from any source, with one exception: a number connected in co-existence brings up to 180 days of Business app chats with it (see above). Otherwise the inbox starts on the day you connect. Export transcripts from your old tool and keep the file somewhere you can search it. That is the whole answer today.Invoices, orders and past money
There is no CSV import for finance records. What exists is the REST API, which can create invoices, orders and contacts programmatically, so a large or complicated move can be scripted rather than typed. Two things to know if you go that way:POST /invoicescreates a draft. Nothing reaches the customer until you make the separatePOST /invoices/{invoice}/sendcall, so a backfill never emails or messages anyone an invoice from years ago.POST /appointmentsis different: booking through it sends the customer a confirmation and seeds their reminders, exactly as a real booking does. Do not use it to replay a back catalogue of past appointments.
A cutover plan that keeps you trading
The order matters because template review is the only step that waits on someone else.Two weeks out: set up DMLY alongside your old tool
Then: export everything from the old tool
Then: import your catalogue and set availability
Turn off two-step verification on the number
Move the number and connect it
Immediately: get templates moving
Send yourself a test message
Import contacts
Rebuild your automations, then broadcast
When something goes wrong
The migration failed and the error mentions verification or 2FA
The migration failed and the error mentions verification or 2FA
Signup finished but DMLY says no WhatsApp Business Account was granted
Signup finished but DMLY says no WhatsApp Business Account was granted
The number connected but nothing arrives in the Inbox
The number connected but nothing arrives in the Inbox
Your templates aren't in DMLY after the move
Your templates aren't in DMLY after the move
Broadcasts have nothing to send
Broadcasts have nothing to send
Fewer contacts imported than rows in your file
Fewer contacts imported than rows in your file
name, country_code and phone
spelled the way the importer expects. Take the sample file and copy its header exactly.The whole import was blocked
The whole import was blocked
Contacts arrived but you can't message them
Contacts arrived but you can't message them
Your old tool still shows the number as connected
Your old tool still shows the number as connected

