CSV Message Generator – Personalised WhatsApp & SMS Campaigns
Pricing
Pay per usage
CSV Message Generator – Personalised 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.
Pricing
Pay per usage
Rating
0.0
(0)
Developer
Gavin Campbell
Maintained by CommunityActor stats
0
Bookmarked
9
Total users
0
Monthly active users
13 days ago
Last modified
Categories
Share
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
- Upload a CSV file with your contacts (phone numbers required).
- Optionally, upload a second CSV (e.g. invoices, bookings).
- Select a matching field (e.g.
name,email, orcustomer_id) to merge both files. - 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
📸 Screenshots (recommended)
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
- Upload your CSV(s)
- Choose your matching field (if merging two files)
- Write your message with placeholders
- Get instant, personalized WhatsApp/SMS links
- 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.
| Field | Type | Description |
|---|---|---|
id | string | Stable unique ID for this result (UUID or hash). |
channel | string | Either whatsapp or sms. |
phone_e164 | string | Normalized phone number in E.164 format, e.g. +353873685787. |
phone_display | string | Original/raw phone from the CSV. |
country_dial | string | Dialing code used (e.g. 353). |
merge_key | string | Field used to join CSVs (e.g. name, customer_id). |
merge_matched | boolean | true if a secondary row was matched and merged. |
row_index_primary | integer | Index of the row in the primary CSV. |
row_index_secondary | integer/null | Index of the row in the secondary CSV (if any). |
data | object | Merged row data used for template rendering (safe fields only). |
placeholders_used | array | List of placeholders replaced, e.g. ["name","amount"]. |
message_template | string | Template text before rendering, with {{placeholders}}. |
message_rendered | string | Final personalized message text. |
message_preview | string | Shortened preview (first ~120 chars). |
link_url | string | Ready-to-click WhatsApp or SMS link. |
link_length | integer | Length of the generated link (bytes). |
result_status | string | One of ready, skipped_invalid_phone, skipped_missing_data, error. |
error_message | string/null | Details if result_status = error. |
sent_status | string | pending or sent. |
sent_at | datetime/null | Timestamp when the message was clicked/sent. |
utm | object | Optional UTM tracking fields (source, medium, campaign). |
audit | object | Metadata: 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"}}