Home/Help Center/Audience and segments

Broadcasts

Build a Broadcast Audience from Segments, Tags and CSV

Target a broadcast with all contacts, a tag, a saved segment or a CSV upload, exclude the right people, and understand exactly why the recipient count is what it is.

By Chirag Darji · Updated 27 Aug 2026 · 8 min read

On this page
  1. Before you start
  2. Steps
  3. What you will see
  4. Why does the count never disagree between the audience step, the estimate and the actual send?
  5. Settings and options
  6. Why does an audience built from a segment sometimes look different a day later?
  7. Troubleshooting
  8. Related reading
WhatsApp broadcast campaign report in VGraple CRM with delivered, read and replied stats per contact

The Audience step of a broadcast lets you target all contacts, a tag, or a saved segment, then narrow that selection with exclusions, all while a live count shows exactly how many people will actually receive the campaign. This article covers how each audience source works, why the count you see is the real number, and how to exclude people correctly instead of guessing.

Audience and segments: first 5 of 6 steps

  1. 1Open the Audience step of a new
  2. 2Choose an audience source
  3. 3Read the live recipient count
  4. 4Add exclusions to avoid over-messaging
  5. 5Bring in a CSV audience if you
The steps on this page, in order.

Before you start

  • You need contacts already in VGraple CRM. See importing contacts from CSV if you have not brought your list in yet.
  • If you plan to target by tag, tag your contacts first, either manually or during a CSV import.
  • If you plan to target by saved segment, build the segment under Contacts first; a segment is a saved filter (by custom field, tag, activity, or a combination) that a broadcast can reuse.
  • You need the "Create broadcasts" permission to open the composer and see audience counts.

Steps

  1. Open the Audience step of a new broadcast. From Broadcasts, click New Broadcast; the composer opens directly on this step.

New broadcast composer in VGraple CRM: audience selection with segment, tag and CSV options and a live recipient count

  1. Choose an audience source. Click All contacts to target everyone eligible, By tag to pick one or more tags, or Saved segment to pick one or more segments you built under Contacts. Selecting multiple tags or segments targets anyone matching any of them.

  2. Read the live recipient count. Under the picker, VGraple CRM shows "N contacts will receive this," recalculated every time you change the selection. This is the same resolver used for the cost estimate and the actual send, so the number on this screen, the estimate on the review step, and the count the campaign actually queues never disagree.

  3. Add exclusions to avoid over-messaging. Under Leave people out, you can exclude by:

    • Tags: anyone carrying one of the chosen tags is removed from the audience, whatever the base selection was.
    • Recipients of: pick from your recent broadcasts; anyone who received that campaign is removed from this one.
    • Messaged in: choose no limit, the last 24 hours, 3 days, 7 days, or 30 days; anyone your organization sent a template to inside that window is removed.
  4. Bring in a CSV audience if you need one. The composer does not accept a raw file upload directly. Go to Contacts, import your CSV there, and tag the imported rows during that import (or afterwards). Come back to the broadcast and choose that tag as your audience. Every broadcast audience going through the same tag-or-segment path means every send, whatever its original source, passes through the identical safety checks.

  5. Confirm the final count before you send. The Review & Send step recomputes the audience one more time, applying the same guards and exclusions again, since time may have passed since you built it. This is the number that is actually billed and queued.

What you will see

The recipient count updates within a second or two of any change to the audience selection, showing either "Choose an audience to see the count," "Counting...," or the final "N contacts will receive this." If your selection would exclude a large share of contacts (opted out, blocked, or on a channel other than WhatsApp), that reduction happens silently in the count itself rather than as a separate warning at this step; the review step's exclusions note is where a size breakdown becomes visible.

Why does the count never disagree between the audience step, the estimate and the actual send?

Every place a recipient count is shown, the live count while building the audience, the per-country cost estimate, and the number of rows the send actually queues, goes through one resolver rather than three separate implementations of "who matches." Earlier versions of this kind of feature commonly compute the audience differently in each place: one screen omits the channel guard, another spreads a segment filter on top of the safety checks instead of intersecting it, and a picker that sums per-segment counts double-counts anyone who belongs to two selected segments at once. When those three numbers disagree, a business loses trust in all of them, not just the wrong one. VGraple CRM resolves the audience once, in broadcast-audience.ts, and every screen calls that same function, so the number you see while building the audience is the number that gets billed.

A saved segment's own filter can combine multiple conditions (a tag, a custom field, an activity date, or several of these together) into one reusable rule, built once under Contacts and reused across broadcasts, sequences and exports. Whatever that filter matches is still intersected with the base safety guards before it becomes a broadcast audience, so a segment built to find "everyone tagged VIP" never accidentally includes a VIP contact who has since opted out.

Settings and options

OptionWhat it doesDefault
All contactsEvery WhatsApp contact that passes the safety guardsNot selected until you choose
By tagAnyone carrying any of the selected tags, ANDed with safety guardsNo tags selected
Saved segmentAnyone matching any of the selected segments' filters, ANDed with safety guardsNo segments selected
Exclude by tagRemoves anyone carrying the selected tag(s) from the audience aboveNo exclusions
Exclude "recipients of"Removes anyone who received the selected past campaign(s)No exclusions
Exclude "messaged in"Removes anyone messaged by any broadcast in the chosen windowNo limit

Why does an audience built from a segment sometimes look different a day later?

A saved segment is a live filter, not a frozen snapshot. If a segment matches "tagged VIP and last active in the past 30 days," a contact who was active 31 days ago at the time you built a campaign but falls further out of the window by the time it actually fires is correctly excluded when the audience is materialized, and a contact who was just tagged VIP yesterday is correctly included. This is deliberate: a broadcast audience should reflect who genuinely matches the segment right now, at send time, not whoever matched it when you happened to open the composer.

This matters most for scheduled and recurring campaigns, where real time passes between building the audience and the campaign actually firing. See scheduling and recurring campaigns for how fire-time audience resolution works for those cases specifically.

Troubleshooting

SymptomLikely causeFix
Recipient count shows 0 with tags selectedThe tag has no contacts, or every tagged contact is opted out, blocked, or on a non-WhatsApp channelCheck the tag under Contacts; confirm contacts are opted in with source_channel: whatsapp
A saved segment's broadcast count is much lower than its Contacts-page countThe segment's own filter includes contacts who are opted out or blocked, which the broadcast audience always excludesExpected behavior; the safety guards apply on top of every segment
Excluding "recipients of" a campaign did not remove anyoneThe chosen campaign has not actually sent yet, or has zero completed sendsOnly campaigns with recipients already attempted can be excluded meaningfully; check the campaign's own recipient count first
A contact I expect to see is missing from every audience optionThe contact's source channel is not WhatsApp (for example, an Instagram or Messenger-only contact), or the contact is blocked or opted outBroadcasts only ever target source_channel: whatsapp contacts; check the contact's own profile for opt-in and blocked status
CSV-imported contacts do not appear in the audience right awayThe import tagged them, but the tag was not selected, or the import is still processingConfirm the import finished under Contacts, then select the correct tag on the Audience step

Once your audience is built correctly, move on to mapping template variables and fallbacks, or read about retry failed vs retarget for how to build a follow-up audience from a completed campaign's results.

Frequently asked questions

Can a saved segment ever include contacts who opted out?
No. Every audience selection, whether all contacts, a tag or a saved segment, is combined with the platform's safety guards using AND, not OR, so a segment can only narrow the audience, never widen it past opted-in, not-blocked and a real WhatsApp number.
Why is my saved segment's count different in a broadcast than on the Contacts page?
The Contacts page shows how many contacts match the segment's own filter. The broadcast audience count applies that filter and then intersects it with the safety guards, so a segment that includes opted-out or blocked contacts shows a smaller number inside a broadcast than it does on its own.
Can I upload a CSV directly into a broadcast?
Not directly into the composer. Import the CSV under Contacts, tag the imported contacts during that import, then pick that tag as the broadcast's audience. This keeps every broadcast audience going through the same safety checks instead of a raw file bypassing them.
What does "messaged in the last N days" exclude, exactly?
Contacts who received a template from any broadcast in your organization within the chosen window (24 hours, 3, 7 or 30 days). It looks at actual sent broadcast messages, not opens or clicks, so it protects against re-messaging regardless of whether the earlier campaign was read.
Can I combine more than one tag or segment in a single audience?
Yes, select multiple tags or multiple saved segments and the audience becomes everyone matching any of them, an OR across your selections, still ANDed with the safety guards.
Does excluding "recipients of" a past campaign look at who was sent to, or who replied?
It looks at everyone that campaign actually sent to (or attempted to), not just people who engaged. It is meant for spacing out campaigns to the same list, not for targeting engagement, which is what retargeting cohorts are for.

Run your WhatsApp on VGraple CRM

Free forever plan, official Meta WhatsApp Business API, set up in 15 minutes. No card needed.