Skip to content

Reach everyone,
without the copy-paste.

BulkReach connects your Slack workspace and WhatsApp number, then sends bulk or scheduled messages to exactly the right people — with per-recipient consent, rate limits handled for you, and a delivery log for every single send.

  • Free plan, no card
  • Set up in minutes
  • Your data stays isolated

Sends through the channels your people already use

Slack WhatsApp

Built on Next.js, Supabase and Postgres Row Level Security

The problem

Announcements should not cost you an afternoon

Slack has no bulk DM. WhatsApp has no real broadcast for a list you actually own. So it becomes a person, a spreadsheet and two hours of pasting — and nobody can tell you afterwards who actually got it.

Without BulkReach · static
  • Paste the same message into 200 DMs, one at a time
  • Lose your place, double-message some people, miss others
  • No record of who received what, or when
  • Personalisation means editing every message by hand
  • Nothing to schedule against — you send when you are free, not when it lands best
  • Consent lives in someone’s memory, not in a system
With BulkReach · clean signal
  • Pick an audience and send to all of them at once
  • Every recipient queued separately — no duplicates, no gaps
  • A delivery log showing sent, failed and skipped, per person
  • Variables resolve per recipient, previewed before you send
  • Schedule for the moment it should land, in your timezone
  • Consent recorded per person and checked again at send time
Features

Everything a real send needs

Not a bigger textbox. The queue, the pacing, the consent checks and the audit trail that turn one message into two hundred delivered ones.

Connect in a click

Add to Slack with standard OAuth, or pair a WhatsApp number by scanning a QR code. Both connections survive restarts — no daily re-authentication.

Write once, personalise per person

Templates resolve {{first_name}}, {{name}}, {{email}} and {{phone}} at send time, previewed against a real recipient before anything leaves.

Schedule anything

Pick a time, and the send waits in the queue until it is due. Edit or cancel right up to the moment it starts.

Rate limits handled for you

Slack is paced to its one-per-second budget; WhatsApp gets a randomised three-to-eight-second gap. You never think about it.

A log for every recipient

Sent, failed, skipped, and why — down to the individual person and the exact text they received.

Segment with tags

Tag recipients once and reuse them as saved audiences. Filter by source, tag or search across every channel at once.

CSV import that checks consent

Common header names are recognised automatically, numbers are normalised, duplicates merged — and nothing is opted in without you saying so.

Know what you sent

Monthly usage per channel, so the volume question is answered before someone asks it.

How it works

Four steps, then it runs itself

From an empty workspace to a scheduled, personalised, fully logged send.

  1. Input · 01

    Connect a channel

    Install the Slack app, or scan a QR code to pair a WhatsApp number. Tokens and session credentials are encrypted before they are stored.

  2. Source · 02

    Bring in recipients

    Sync your Slack directory in one click, pull WhatsApp contacts, or import a CSV. Tag them into audiences as you go.

  3. Mix · 03

    Compose and preview

    Pick your channels and audience, write with variables, and check the preview as a real recipient would see it.

  4. Output · 04

    Send or schedule

    Queue it now or pick a time. The dispatcher handles pacing, retries and the delivery log while you get on with something else.

Channels

Two very different channels, one screen

Slack and WhatsApp behave nothing alike. BulkReach handles the difference so you do not have to.

Slack

1 / s

Install once with the standard “Add to Slack” flow. BulkReach syncs your member directory — skipping bots and deactivated accounts — and sends direct messages paced to Slack’s one-per-second budget, retrying automatically if Slack pushes back.

  • OAuth v2 install, four bot scopes, nothing more
  • Member directory synced on demand
  • DMs opened implicitly — no channel clutter
  • Leavers marked inactive, never silently deleted

WhatsApp

3–8 s

Pair a number by scanning a QR code, the same way you link WhatsApp Web. The session runs on a dedicated always-on service and survives restarts, so you scan once rather than every morning.

  • QR pairing, credentials encrypted at rest
  • Session resumes automatically after a restart
  • Randomised 3–8 second gap between messages
  • Consent required per recipient, checked at send time

WhatsApp automation is unofficial and against WhatsApp’s terms of service. We say so plainly, build the safeguards in, and leave the decision with you.

Consent by default

Built so a careless send is hard to make

Bulk messaging goes wrong in predictable ways. Each of these exists because of one of them.

Engaged

Opt-in is enforced twice

Once when the audience is chosen, and again at the moment of delivery — so someone who opts out after a send is queued still never receives it.

Engaged

Deliberately unhurried

A randomised three-to-eight-second gap between WhatsApp messages, on top of a hard floor in the sending service. Nothing bursts.

Engaged

Imports start opted-out

A CSV lands with consent unset unless you explicitly confirm the list agreed to be contacted. Having a number is not permission to use it.

Engaged

Resumable, never duplicated

Each recipient is a separate queued row. An interrupted send picks up where it stopped instead of starting over and messaging people twice.

Security

Isolation you can verify, not just trust

Multi-tenancy is enforced by the database, not by remembering to add a WHERE clause.

Isolated at the database

Every table is scoped by workspace and guarded by Postgres Row Level Security. One customer’s query cannot return another’s rows, even if the app has a bug.

Secrets encrypted at rest

Slack bot tokens and WhatsApp session credentials are AES-256-GCM encrypted before storage, with a key the database never sees.

Least privilege by default

The Slack token column is revoked from client roles entirely. Server-side jobs that must bypass row security scope every query by workspace explicitly.

Auditable, not assumed

An isolation audit script ships with the schema and flags any table left unprotected. Passing it is part of deploying, not an afterthought.

Comparison

How it stacks up

Against the two things most teams do instead: send by hand, or use a generic blast tool.

Feature comparison between BulkReach, sending manually, and generic blast tools
CapabilityBulkReachSending by handGeneric blast tool
Send to a whole Slack directoryYesNoYes
Slack and WhatsApp from one screenYesNoNo
Per-recipient personalisationYesManualYes
Consent recorded per personYesNoNo
Automatic rate limitingYesYou waitNo
Scheduled sendsYesNoYes
Per-recipient delivery logYesNoAggregate only
Resumes after interruptionYesNoNo
Data isolated per workspaceYesn/aVaries
Pricing

Start free, pay when it earns its keep

Every plan includes the delivery log, scheduling and message variables. You are paying for volume, not for the features that make a send safe.

Starter

For trying it properly

$0forever

Everything you need to connect Slack, import recipients and send your first campaigns.

Start free
▸500 messages / month
▸1,000 recipients
▸No WhatsApp number
▸1 Slack workspace
▸1 seat
  • Slack workspace connection
  • Member directory sync
  • Message templates with variables
  • Scheduled sends
  • Per-recipient delivery log
  • Light and dark themes

Growth

Most popular

For teams sending weekly

$29per month

Adds WhatsApp, CSV imports and the consent tooling you need to message outside Slack.

Start free trial
▸10,000 messages / month
▸25,000 recipients
▸1 WhatsApp number
▸1 Slack workspace
▸5 seats
  • Everything in Starter
  • WhatsApp number pairing
  • CSV import with opt-in confirmation
  • Per-recipient consent tracking
  • Tag-based audience segments
  • Randomised send pacing
  • Timezone-aware scheduling
  • Monthly usage reporting

Scale

For higher volume

$99per month

More headroom, more numbers and more seats, on the same isolated per-workspace database.

Start free trial
▸100,000 messages / month
▸Unlimited recipients
▸5 WhatsApp numbers
▸3 Slack workspaces
▸Unlimited seats
  • Everything in Growth
  • Multiple WhatsApp numbers
  • Multiple Slack workspaces
  • Priority send queue
  • Extended delivery history
  • Priority support
Questions

Answers before you ask

Transmission log10 entries

BulkReach is a multi-tenant web app for sending bulk and scheduled messages to Slack workspaces and WhatsApp numbers from one place. You connect a channel, import or sync recipients, compose a message with per-recipient variables, and send now or schedule for later. Every send produces a per-recipient delivery log.

Through Slack OAuth v2 — the standard "Add to Slack" flow. BulkReach requests four bot scopes: team:read, users:read, users:read.email and chat:write. The bot token is encrypted with AES-256-GCM before it is stored, and the column holding it is revoked from client roles at the database level, so it is only ever readable by the server.

You pair a WhatsApp number by scanning a QR code, exactly as you would to link WhatsApp Web. The session runs on a dedicated always-on service, and the session credentials are encrypted before being stored so the connection survives restarts without a re-scan. WhatsApp automation is unofficial and against WhatsApp's terms of service, so BulkReach requires per-recipient opt-in and paces sends deliberately.

Any unofficial WhatsApp automation carries ban risk, and a banned number cannot be recovered. BulkReach reduces that risk rather than eliminating it: imported contacts start opted-out until you confirm consent, the sender re-checks consent at delivery time, and messages are spaced three to eight seconds apart at random on top of a hard floor in the sending service. Messaging people who never asked to hear from you is what gets numbers banned, and BulkReach is built to make that inconvenient.

Slack allows roughly one chat.postMessage per second per workspace, so BulkReach paces Slack sends at that rate — about 1,000 messages in 17 minutes. WhatsApp sends are spaced three to eight seconds apart at random to reduce ban risk, so they are intentionally slower. Sends run through a queue, so closing the browser does not interrupt them.

Yes. Every table is scoped by tenant and protected by Postgres Row Level Security, so one workspace's queries cannot return another workspace's rows even if the application had a bug. The three server-side paths that bypass RLS — the send dispatcher, the Slack OAuth callback and the WhatsApp service — scope every query by tenant explicitly, and the repository ships an audit script that fails if any table is left unprotected.

Yes. Pick a date and time when composing, and the send is queued but held until it is due. A scheduler checks every minute and dispatches anything that has come due. Scheduled sends can be edited or cancelled up until they start, and times are shown in your workspace timezone.

Nothing is lost. Each recipient is a separate queued row, so a send that is interrupted resumes from where it stopped rather than restarting and double-messaging people. Failures are recorded per recipient with the provider error, visible in the delivery log for that send.

Yes. Templates support {{name}}, {{first_name}}, {{email}} and {{phone}}, resolved per recipient at send time. The compose screen previews the message as a selected recipient would receive it, and warns about placeholders that do not match a known variable rather than silently sending a blank.

Yes. CSV import accepts a phone column and an optional name column, and recognises common header variations. Numbers are normalised to international format and duplicates are merged. Imported numbers arrive opted-out unless you explicitly confirm that the people on the list agreed to be contacted.

Stand by · cue in 3 · 2 · 1

Your next announcement could take five minutes

Create a workspace, connect Slack, and send something real today. The free plan does not expire and does not ask for a card.