CSV Message Generator – Personalised WhatsApp & SMS Campaigns avatar
CSV Message Generator – Personalised WhatsApp & SMS Campaigns

Pricing

$9.00/month + usage

Go to Apify Store
CSV Message Generator – Personalised WhatsApp & SMS Campaigns

CSV Message Generator – Personalised WhatsApp & SMS Campaigns

Developed by

Gavin Campbell

Gavin Campbell

Maintained by Community

Upload a CSV and instantly create ready-to-send personalized WhatsApp and SMS messages. Perfect for invoice reminders, promotions, and client updates. No APIs or WhatsApp Business required.

0.0 (0)

Pricing

$9.00/month + usage

0

2

2

Last modified

8 days ago

CSV Message Generator – Personalized WhatsApp & SMS Campaigns

Upload a CSV and instantly create ready-to-send personalized WhatsApp and SMS messages.
Perfect for invoice reminders, promotions, and client updates. No APIs or WhatsApp Business required.


🚀 Features

  • Works with WhatsApp or SMS
  • Merge two CSVs (e.g. Contacts + Invoices) on a shared field
  • Use placeholders like {{name}} or {{amount}} directly in your messages
  • Generate a shareable results dashboard with clickable buttons
  • Track message status as you or your team send them
  • No coding or APIs needed – just CSV input and a few clicks

💡 Example Use Cases

  • Invoice reminders: “Hi {{name}}, your invoice for €{{amount}} is due.”
  • Appointment confirmations: “Hi {{name}}, your appointment is booked for {{date}} at {{time}}.”
  • Promotions: “Hi {{name}}, enjoy 10% off this week at our store.”
  • Customer updates: “Hi {{name}}, your order {{order_id}} has been shipped.”

📂 Input

  1. Upload a CSV file with your contacts (phone numbers required).
  2. Optionally, upload a second CSV (e.g. invoices, bookings).
  3. Select a matching field (e.g. name, email, or customer_id) to merge both files.
  4. Write your message template with placeholders like {{name}} or {{amount}}.

📊 Output

  • Interactive results page: clickable WhatsApp/SMS links for each row
  • Status column: track which messages have been sent
  • Downloadable CSV: for archiving or sharing

💰 Pricing

  • Free tier: up to 25 messages per run
  • Paid tier: unlimited messages + full dashboard access
  • Model: Monthly rental pricing

🌍 Why Use This Tool?

  • No WhatsApp Business or API setup required
  • Works worldwide (just include the correct country dialing codes)
  • Uses simple CSV input — compatible with Sage, Xero, QuickBooks, HubSpot, Excel, Google Sheets, and more
  • Provides a friendly dashboard, not just raw data

Add screenshots here to show users what they’ll get:

  • CSV upload screen
  • Template builder with placeholders
  • Final dashboard with “Click to Send” buttons + status updates

⚙️ How It Works

  1. Upload your CSV(s)
  2. Choose your matching field (if merging two files)
  3. Write your message with placeholders
  4. Get instant, personalized WhatsApp/SMS links
  5. Share the results dashboard with your team

🔒 Notes

  • Phone numbers must be in international format (e.g. 353871234567)
  • Works with personal WhatsApp accounts (not WhatsApp Business API)
  • SMS deep links depend on the user’s phone carrier and messaging app

📑 Dataset Schema

Each generated message is stored as a dataset item.
You can download the dataset as JSON, CSV, or Excel from the Actor run.

FieldTypeDescription
idstringStable unique ID for this result (UUID or hash).
channelstringEither whatsapp or sms.
phone_e164stringNormalized phone number in E.164 format, e.g. +353873685787.
phone_displaystringOriginal/raw phone from the CSV.
country_dialstringDialing code used (e.g. 353).
merge_keystringField used to join CSVs (e.g. name, customer_id).
merge_matchedbooleantrue if a secondary row was matched and merged.
row_index_primaryintegerIndex of the row in the primary CSV.
row_index_secondaryinteger/nullIndex of the row in the secondary CSV (if any).
dataobjectMerged row data used for template rendering (safe fields only).
placeholders_usedarrayList of placeholders replaced, e.g. ["name","amount"].
message_templatestringTemplate text before rendering, with {{placeholders}}.
message_renderedstringFinal personalized message text.
message_previewstringShortened preview (first ~120 chars).
link_urlstringReady-to-click WhatsApp or SMS link.
link_lengthintegerLength of the generated link (bytes).
result_statusstringOne of ready, skipped_invalid_phone, skipped_missing_data, error.
error_messagestring/nullDetails if result_status = error.
sent_statusstringpending or sent.
sent_atdatetime/nullTimestamp when the message was clicked/sent.
utmobjectOptional UTM tracking fields (source, medium, campaign).
auditobjectMetadata: generated_at (ISO datetime), actor_run_id, version.

Example Item

{
"id": "c1b2c3d4-9a7e-4f0b-98a1-2fbc21a5b9aa",
"channel": "whatsapp",
"phone_e164": "+353873685787",
"phone_display": "0873685787",
"country_dial": "353",
"merge_key": "name",
"merge_matched": true,
"row_index_primary": 12,
"row_index_secondary": 12,
"data": {
"name": "Mary Smith",
"invoice_number": "INV-1042",
"amount": "€70.00",
"due_date": "2025-09-30"
},
"placeholders_used": ["name","invoice_number","amount","due_date"],
"message_template": "Hi {{name}}, your invoice {{invoice_number}} for {{amount}} is due {{due_date}}.",
"message_rendered": "Hi Mary Smith, your invoice INV-1042 for €70.00 is due 2025-09-30.",
"message_preview": "Hi Mary Smith, your invoice INV-1042 for €70.00…",
"link_url": "https://wa.me/353873685787?text=Hi%20Mary%20Smith%2C%20your%20invoice...",
"link_length": 164,
"result_status": "ready",
"error_message": null,
"sent_status": "pending",
"sent_at": null,
"utm": {
"source": "admindone",
"medium": "whatsapp",
"campaign": "invoice-reminder"
},
"audit": {
"generated_at": "2025-09-16T18:10:45Z",
"actor_run_id": "qwer1234",
"version": "1.0.0"
}
}