Bulk Import


Upload a CSV, create WhatsApp chats in bulk for thousands of contacts at once, and — in the same flow — schedule a first outbound message to every one of them.

TL;DR

  • What it is — a full-page wizard that takes a CSV and creates chats (up to 5,000 per pass) → auto-selects them for a scheduled bulk message (up to 100,000 target chats per schedule). Different from the Contacts-module bulk dialog, which creates contact records without scheduling.
  • Who it's for — admins onboarding a new customer list and wanting a first outbound touch in the same pass.
  • Top outcome — new lists land in the CRM and get their welcome (or first) message queued — without switching to Campaigns.

At a glance

Plan tierAll paid tiers.
Who can use itAccount Owners, Admins, and Users. Practically an admin / manager workflow.
ChannelsWhatsApp (Official or Unofficial) for chat creation; the schedule step supports text plus one media attachment (image, video, or PDF).
IntegrationsShares the underlying chat-create and message-schedule engines used by Campaigns and the inbox's scheduled messages.
Top limits10 MB CSV · 5,000 rows per chat-create request · 100,000 target chats per schedule request · 1 – 10 retry attempts (default 3) · schedule must be at least 5 minutes in the future.
APIYes — partner API for bulk chat creation and bulk message scheduling.

How to find it

Sidebar → Bulk Import.

Direct URL: https://app.lodgestory.com/crm/bulk-import

Related surfaces, deliberately separate:

  • Contacts → Bulk import dialog — contact-only, no chat creation, no scheduling.
  • Campaigns → Create wizard — bulk messaging against an already-created audience (chats, contacts, or CSV) with full variable mapping.
  • Bulk Schedule in Home — schedule a bulk message against existing chats you select from a filtered list.

Bulk Import sits in the middle: it creates chats from a CSV and schedules against them in the same flow.

What is Bulk Import?

The problem it solves

Onboarding a fresh customer list from another tool usually means two tools and three mistakes. Tool 1 to import contacts; tool 2 to create a conversation thread per contact so the inbox isn't empty; then a manual nudge ("send a welcome") per contact. Names get lost, country codes get mangled, the CSV doesn't come back with what actually imported.

Bulk Import collapses all three into one wizard:

  1. Upload the CSV (10 MB, up to 5,000 rows).
  2. Preview with row-level validation — valid vs invalid rows separated.
  3. Pick the WhatsApp channel; hit import; the system creates chats in seconds.
  4. Optionally compose a first outbound (text + media) and queue it against every just-created chat.

What you get

  • Four-step wizard with a visible progress indicator. Upload → Preview → Import → Schedule (or skip the schedule step).
  • Sample CSV pre-populated with 20 rows across country codes so you don't have to reverse-engineer the columns. Required columns: name, phone. Optional: firstname, lastname, countrycode (defaults to 91).
  • Row-level validation. Phone must parse to 10 – 15 digits after stripping non-digit characters.
  • Bulk chat creation with deduplication — contacts already on the channel are returned as updated rather than created, and their IDs come back separately.
  • Auto-selected for scheduling. Step 4 opens with every successfully-created and -updated chat ID preselected. Deselect individuals before firing.
  • Schedule a text or a media message. One file per schedule (image, video, or PDF). The message flows through the same engine as campaign sends — so the same per-channel throttling applies (around 600 per minute for WhatsApp Official, around 6 per minute for Unofficial by default). See Campaigns → rate limits.

How it's different

  • Creates chats, not contact records. The Contacts bulk dialog creates contact records with custom fields. Bulk Import creates chats in the inbox with an initial system message. Both are valid; do contacts first if you need rich custom fields on the contacts, chats here if you want new inbox threads ready to message.
  • Scheduling in the same pass. After import, you can compose a first outbound and schedule it to every just-created chat — without switching to Campaigns.
  • Fast. 5,000 chats land in under a second of server work.

Customer scenarios

  • New property going live. Operations uploads 800 past-guest phone numbers with names. 800 chats appear in the inbox (empty threads, available for agents to start). The same wizard queues "We've just launched our direct-booking channel — reply YES for a preview of winter rates" as a message at 4 PM the next day.
  • Lead list bought and imported for outbound. Sales uploads 3,000 leads. Schedules the first outbound nudge in the same flow. The schedule rate automatically throttles by channel type.

How it fits with the rest of Lodgestory

Upstream: a CSV from any source that has name and phone. The channel picker consumes Connections. Downstream: the just-created chats appear in Home, and replies enter the normal inbox path (or a Bot Journey if assigned). The scheduled message is managed the same as a campaign — track it in Campaigns if needed.

Core concepts

TermWhat it means
Wizard stepOne of Upload, Preview, Import, Schedule.
Chat rowOne CSV row turned into a pending chat create: name, phone, country code, channel.
Created vs updatedCreated chats are brand-new; updated means a chat on this channel with the same WhatsApp ID already existed and was refreshed. Both are preselected for scheduling.
Scheduled messageOne queued outbound per chat in the recipient list. Same engine as Campaigns.

Quick Start — import plus schedule in one pass (about 6 minutes)

Step 1 — Upload

Sidebar → Bulk Import. Click Download Sample CSV if you don't have one; otherwise drag-drop your file (10 MB max).

Step 2 — Preview and pick the channel

The parser runs client-side. Valid and invalid rows are shown in separate tabs. Fix any invalids in your source file and re-upload. Pick the WhatsApp channel from the dropdown — only connected channels appear.

Step 3 — Import chats

Click Import. The system creates the chats and returns a summary: how many were created, how many were updated, and any errors. All of them are preselected for step 4.

Step 4 (optional) — Schedule a first message

Switch to the Compose message tab:

  • Campaign name (required).
  • Text body (required unless you attach media).
  • Attach one file if you want (image, video, or PDF).
  • Schedule time — must be at least 5 minutes in the future.
  • Retry attempts — 1 to 10 (default 3).

Switch to the Recipients tab to deselect any chats. Click Schedule.

If you don't want to send anything right now, click Finish — the chats stay; you can schedule later from Campaigns or the Bulk Schedule in Home.

How it works

When you import a CSV, Lodgestory:

  1. Parses and validates the file client-side (phone, country code, required name).
  2. On Import, creates chats for valid rows in batches, de-duplicating against the channel's existing WhatsApp IDs.
  3. Returns lists of created and updated chat IDs, plus any validation errors.

When you schedule a bulk message, Lodgestory:

  1. Writes one queued message per recipient in the schedule table.
  2. At the scheduled time, the same engine that powers campaigns releases messages at the channel's rate cap.

Replies to the sent messages arrive in Home like any other inbound message.

Features in depth

Step 1 — Upload

  • Drag-drop or picker. 10 MB cap.
  • Sample CSV pre-filled with 20 realistic rows across country codes.
  • Required columns: name, phone. Case-insensitive header matching. Optional: firstname, lastname, countrycode (defaults to 91).

Step 2 — Preview

  • Row-level validation:
    • Phone must be 10 – 15 digits after stripping non-digits.
    • Invalid rows go to the Invalid tab with a reason.
  • Channel picker populated from your organisation's connected WhatsApp channels.
  • Searchable table — filter visible rows by name or phone.
  • No column mapping step; header names must match the supported set.

Step 3 — Bulk create chats

  • Sends every valid row to the bulk chat-creation endpoint.
  • Response summary: counts of created and updated, a list of validation errors, and a duplicates-skipped count.
  • Auto-selects both created and updated chats for scheduling — either way, this chat is "fresh enough" to receive the intended first outbound.

Step 4 — Schedule

  • Two tabs: Compose message and Recipients.
  • Compose:
    • Campaign name (required).
    • Text (required unless media attached).
    • One file — image, video, or PDF — with automatic type detection.
    • Schedule time must be at least 5 minutes in the future.
    • Retry attempts 1 – 10; default 3.
  • Recipients:
    • Preselected with every created and updated ID.
    • Deselect individuals if needed.
  • Schedule queues the messages; the send engine takes it from there.

Success screen

Buttons: Start new import (reset the wizard) and Open Chat Manager (go to Home). The scheduled message starts firing at the send time; track progress in Campaigns or in the chat's Scheduled messages list in the Home guest-details panel.

Roles and permissions

ActionAccount OwnerAdminUser
Open Bulk Import
Bulk-create chats
Schedule a bulk message

In practice this is an admin workflow — gated by UI exposure and typical operating procedure.

Cross-module workflows

New property → seeded inbox → welcome message

Operations uploads 800 past guests → chats appear in the inbox → the same wizard schedules a welcome message for 4 PM the next day → replies arrive in the inbox over the following hours → assigned agents pick up the interested responses → any complex ones are escalated to tickets.

Modules involved: Bulk Import → Home → Bot Journeys (if assigned) → Tickets.

Lead list → outbound drip

Sales uploads 3,000 leads → schedules a first outbound via the wizard → the send engine paces the broadcast over several hours (on Unofficial, several days) → replies route to a bot journey that classifies intent → sales works the interested queue.

Modules involved: Bulk Import → Home → Bot Journeys → Tickets / Campaigns.

Limits a user will run into

LimitValue
CSV max size10 MB
Max rows per chat-create5,000
Max chats per schedule request100,000
Retry attempts on scheduled messages1 – 10 (default 3)
Minimum schedule timeNow + 5 minutes
Phone digits10 – 15
Country code1 – 4 digits; defaults to 91

Errors & FAQ

Error reference

WhereMessageCauseFix
Step 1CSV file is emptyNo rowsAdd rows
Step 1Missing required columnsRequired headers missingUse the sample CSV as a template; rename columns
Step 1Failed to parse CSVMalformed CSV (encoding, quoting)Re-export as UTF-8 with standard quoting
Step 1Failed to read fileBrowser read errorRetry
Step 2Please select a channel to import chats intoNo channel pickedPick a connected channel
Step 2No valid chats to importAll rows failed validationFix the Invalid tab's rows and re-upload
Step 3Failed to import chatsServer rejected the batchKeep under 5,000 rows; ensure phones are 10 – 15 digits
Step 4Please select at least one chatNo recipientsSelect recipients
Step 4Please enter a campaign nameMissing nameFill the name
Step 4Please enter message text or attach mediaEmpty payloadAdd text or a file
Step 4Please select a schedule date and timeEmpty schedulePick a datetime
Step 4Schedule time must be in the futurePast or too soonPick a later time (at least +5 minutes)
Step 4Failed to schedule messageServer validationRead the error message; fix and retry

Frequently asked

Why don't my contacts appear in the Contacts list after the import?
Bulk Import creates chats, not contact records. Use the Contacts bulk-import dialog if you want to hydrate the contact database. You can do both — contacts first, then chats — if you need rich custom fields on the contacts.

What's the difference between created and updated?
A chat whose WhatsApp ID (country code + phone) already exists on the selected channel is updated — its existing record is refreshed. Created chats are brand-new. Both are preselected for the schedule step.

Can I import more than 5,000 chats at once?
Split the CSV and run the wizard multiple times. Each pass hits the cap independently.

Can I use WhatsApp templates in the schedule step?
The wizard supports text and media only. For templates, use the Campaigns creation wizard with the same audience.

What happens to the scheduled message if an imported chat has no contact record linked?
The message still goes out. Chats are addressable by their WhatsApp ID without requiring a contact link. Replies will lazily create the contact linkage during the normal inbound ingest.

Related modules & next steps