Campaigns (bulk DM)
Send a one-time DM to a filtered set of contacts at once — the manual counterpart to your automated flows.
A campaign sends one DM to a filtered set of contacts in a single batch — now, or at a time you schedule. It's the one-time counterpart to automations: a flow reacts to each buyer automatically, while a campaign is a deliberate, one-off message you send to many contacts yourself.
Use it to re-engage warm conversations — announce a restock, a flash sale, or a new drop to people who already messaged you.
You'll find Campaigns in the left sidebar, between Automations and Posts.
A campaign is not a broadcast to all your followers, and it can't cold-message anyone. TikTok only lets you DM a contact who already has an open messaging window with your account — someone who messaged you (or whom you comment-replied to) recently enough. See Who you can actually reach.
Campaigns are a Pro feature. On the Free plan the section is visible but locked — upgrade to send. See Plans and pricing.
Who you can actually reach
A campaign reaches contacts on the currently selected TikTok account who have an open 48-hour messaging window — the same messaging limits that apply everywhere else in Tuku. In practice that means people who:
- DM'd your account recently, or
- came in through a comment-to-DM flow, a
tiktok.melink, or a DM ad,
and whose window hasn't closed yet. A contact who only follows you but never messaged can't be reached — TikTok forbids cold outreach.
Because windows open and close on their own, the audience is always a moving target. The number you see while building a campaign is an estimate, not a guarantee — see Estimate vs. reality.
Creating a campaign
- Open Campaigns and click New campaign.
- Confirm the TikTok account — a campaign is scoped to the account selected in your workspace switcher.
- Give it an optional name (just for your own reference).
- Write the message (plain text, up to 6,000 characters).
- Build the audience with filters (below). The estimate updates as you change them.
- Choose Send now or Schedule for later.
- Click Send campaign / Schedule campaign.
Audience filters
| Filter | Options | What it does |
|---|---|---|
| Followers | Everyone · Followers only · Non-followers only | Narrow by whether the contact follows your account. |
| Source | Any source · From comments · From DMs | Where the contact first came from. |
| Tags | Comma-separated list | Matches a contact who has any of the tags you list (e.g. vip, quiz_completed). |
Filters stack — a contact must match all of them to be included. Leave a filter on its default to ignore it.
Only contacts who already have a conversation on the account are ever counted — that's the reachable pool the filters narrow down.
The message
A campaign sends one text message. Write it for the whole audience — there are no per-contact variables. Keep it short and natural; a re-engagement DM that reads like a personal note lands better than a broadcast blast.
Scheduling
- Send now starts the campaign as soon as you confirm.
- Schedule lets you pick a start time and a timezone. Times are shown and entered in the timezone you choose, so what you set is what your audience experiences.
Available timezones cover the markets Tuku serves — Asia/Bangkok (default), Jakarta, Ho Chi Minh, Manila, Singapore, Kuala Lumpur, and UTC.
If you pick a late-night hour (roughly 10 PM – 7 AM), Tuku shows a gentle warning — it won't block you, but a daytime send usually gets more replies.
When a scheduled campaign comes due, Tuku works through the recipients in paced batches. There's nothing to keep open — close the tab and the send continues.
Estimate vs. reality
The audience number shown while you build the campaign — ≈ N estimated — is computed from your own contacts. It is not a delivery guarantee. Between the estimate and the actual send:
- a contact's messaging window can close, and
- TikTok can still reject an individual send.
The truth is the per-contact result after the run, which you see on the campaign's page.
Reading the results
Open any campaign to watch it run. While it's sending, a progress bar fills and the counters tick live. Each contact ends in exactly one outcome:
| Outcome | What it means |
|---|---|
| Sent | TikTok accepted the message. |
| Unconfirmed | TikTok's response was ambiguous — the message likely went out and is confirmed later. |
| Skipped (window/quota) | No open messaging window, or sending would exceed your plan's contact limit. No message was sent. |
| Blocked | TikTok rejected the send (window or policy). |
| Errored | A genuine failure (e.g. a token or system problem). |
"Skipped" is normal and expected — it's the campaign protecting your account by not attempting a send that TikTok would refuse.
Read rate
Once a campaign has left draft/scheduled and at least one message reached someone, the progress card also shows a Read rate — how many of the delivered messages have been read, as {read} of {sent} delivered ({pct}%) (e.g. 42 of 150 delivered (28%)). The denominator is the delivered set (Sent + Unconfirmed); the numerator is the recipients who have since read up to at least this message.
Read rate is approximate, not a per-message receipt. TikTok only tells Tuku when a contact marks a whole conversation as read, giving a single "last read" timestamp — not which individual messages they saw. Tuku counts a recipient as having read your campaign message when their conversation's last-read time is at or after the moment your message was sent.
A few things follow from that:
- It keeps rising after the run finishes. Tuku recalculates the rate fresh on every page load, so a contact who opens the conversation hours or days later starts counting then — check back rather than treating the first number as final.
- A contact who opens the thread to read any recent message counts as having read your campaign message too, since it sits earlier in the same conversation.
- The denominator includes Unconfirmed recipients, whose delivery TikTok never confirmed — so the rate is a directional signal, not an exact measurement.
Canceling
You can cancel a campaign while it's still scheduled (or a draft) — open it and click Cancel. Once a campaign is running, it can't be canceled; let it finish and read the breakdown.
Billing
Each contact you actually message counts toward your Monthly Active Contacts (MAC) the same way an inbound DM or an automation does — at most once per billing period. Most campaign recipients were already counted this period (they had to message you recently to be reachable), so a campaign usually adds little or no new MAC. If sending to a contact would push you over your plan's limit, that contact is skipped (quota) rather than failing the whole campaign.
Campaigns vs. automations
| Campaign | Automation (flow) | |
|---|---|---|
| Trigger | You send it, once | Fires automatically per buyer |
| Audience | A filtered batch you choose | Whoever matches the trigger |
| Timing | Now or scheduled | The moment the trigger fires |
| Best for | Restocks, sales, announcements | Always-on comment/DM replies, lead capture |
Reach for a campaign when you have something to say now to people you've already talked to. Reach for an automation when you want Tuku to handle every new buyer for you, hands-off.