Campaigns is SalesThumb's one-shot bulk messaging tool: pick a customer segment, write an SMS or email, and send it right now to everyone who matches. You won't find it as a top-level item in the shop sidebar — it lives as a card inside the Growth & Marketing hub (/app/growth), labeled "Campaigns" with the description "Bulk SMS & email to customer segments." That hub also has a similarly-named "Bulk blast" card (/app/blasts, "One-shot SMS/email to a segment with preview + dry-run") and a "Drip campaigns" card (/app/drips) for multi-step sequences — Drips is explicitly flagged on its card as an add-on that uses your message allowance, while the Campaigns card carries no such add-on label. If you're trying to figure out which marketing tool you're actually in, Campaigns is the single-blast, no-dry-run, no-multi-step version.
Picking a segment
The page shows four segment cards: All customers, VIPs (tagged VIP), Recent (active in the last 30 days), and Inactive (no activity in 90+ days). Here's the gotcha worth knowing before you rely on this: as the underlying query logic is written today, only "All customers" and "VIPs" actually apply a different filter — in the recipient count, the sample preview, and the send itself. Recent and Inactive don't yet have the activity-date join wired up. The campaign router does spell this out in a comment ("other segments would need activity joins; for now we'll just return total"), though that comment sits on a sibling procedure that isn't the one this page actually calls — the gap is real either way, verified directly in the code path this page uses. In practice, picking "Inactive" pulls the same opted-in list as "All customers," not a dormant-only slice. If your goal is a true win-back list, don't assume Inactive is doing that filtering for you yet. Regardless of segment, every send — SMS or email — is restricted to customers with marketing opt-in turned on; that's not optional and isn't shown as a toggle because it's always enforced.
Writing the message
Toggle between SMS and Email at the top of the message card; Email adds a Subject field that SMS doesn't have. The helper text tells you to use {{first_name}} to personalize — that placeholder does get swapped for the recipient's real first name, and so does {{last_name}}, even though the on-screen hint only mentions the first one. For SMS, a small counter under the textarea shows character count and how many 160-character segments your message will consume, which is useful for guessing per-message cost. There's also an amber compliance reminder reiterating that only opted-in customers receive the blast and that SMS messages should include "Reply STOP to opt out" for TCPA — but that's advisory copy only. Nothing in the composer inserts the STOP language automatically or blocks you from sending without it.
Sending, permissions, and the result banner
The Send button is disabled until you've typed a message and the segment preview shows at least one recipient. Actually sending is gated behind a specific permission (manage automations) — previewing recipients and viewing history are open to any signed-in team member, but the send action itself requires that permission at the API level. The page doesn't hide or grey out the Send button for users who lack it, and there's no error message wired up in the UI for a rejected send, so a front-desk or technician account without permission could fill out the whole form, click Send, and see nothing visibly happen. Behind the scenes there's also a per-shop send lock to stop accidental double-sends (double-click, a retry, two open tabs), so a second concurrent attempt gets rejected rather than going out twice. Once a send completes, a green banner reports "Campaign sent · X/Y delivered" with sent/failed/skipped counts and disappears automatically after about 10 seconds. One thing to know: the banner's skipped note always reads "skipped (provider not configured)," but the backend can skip a recipient for other reasons too — the shop's monthly messaging spend cap being reached, or a matched customer missing the phone/email the channel needs — so don't take that specific wording as proof your SMS or email provider isn't set up.
Recipient preview and campaign history
Above the message card, a "Preview list" toggle expands a sample of who's about to receive the blast — useful for catching a customer who shouldn't be on the list before you send. That sample is capped at 20 names and ordered by most-recently-added customer, so on a large customer base you're seeing your newest customers, not a random cross-section. For SMS specifically, a separate amber banner shows how many otherwise-matching customers are being excluded because they've texted STOP — that opt-out check doesn't apply to email, which relies on its own unsubscribe mechanism instead. Below the composer, "Recent campaigns" lists past sends grouped by batch, showing channel, recipient count, and sent/failed/skipped breakdowns — but a send only shows up here if it produced more than one logged message, so a "campaign" that only matched a single recipient won't appear in this list. Its caption also says "Click to view the full thread in Messages," and rows do highlight on hover, but there's no click handler actually wired to them right now — clicking a history row doesn't currently take you anywhere.