WhatsScale
MessagingConnect AI agents to WhatsScale, a WhatsApp automation platform with a built in CRM. Agents send messages and media, run paced broadcasts to tagged audiences, manage CRM contacts and groups, and react to inbound messages so WhatsApp campaigns scale without manual sending.
What This Integration Enables
WhatsScale is a WhatsApp automation platform operated from the Netherlands, and the thing to understand before wiring it up is that it is not primarily a send API. It is a broadcast engine with its own address book. Its CRM is separate from the WhatsApp contacts synced to a session, and audiences are built from tags on that CRM rather than from lists you paste at send time. Create Broadcast will accept a CRM tag or an explicit recipient list, never both and never neither, and an empty selection is refused before the request is made rather than sent to a billed bulk path with no defined behavior. Access is unofficial: a WhatsApp account is connected by scanning a QR code in the WhatsScale dashboard rather than through Meta's Cloud API, and connected accounts remain subject to WhatsApp's terms.
The API key covers the whole account, so a single FlowRunner connection reaches every connected number on it and the session is a parameter on each action rather than a property of the connection. That matters for agencies and multi-brand teams, who get one set of credentials and per-flow control of which number speaks. Three triggers cover inbound: direct messages, group messages and channel posts, each a separate event because the payloads genuinely differ. WhatsScale is also unusually candid about its own limits. It publishes an observed inbound drop rate under burst load rather than claiming none. Its subscription plane is a list of addressable rows, so registering a FlowRunner callback cannot displace an endpoint configured for something else. And its circuit breaker will deactivate a failing subscription with no route to reactivate one, which is why the trigger re-reads and rebuilds its own subscriptions on a schedule. Agents run the campaign machinery. The audience stays a human decision.
Without FlowRunner
With FlowRunner
Use Case Scenarios
A paced campaign to a tag that is maintained by automation
Lifecycle events in the CRM keep WhatsScale tags current: a purchase adds a tag with Add Tag To CRM Contact, a refund removes one with Remove Tag From CRM Contact, and a nightly sync from HubSpot reconciles the rest. When a campaign is approved for the tag, the agent calls Estimate Broadcast, posts the resolved size and the membership delta since the last send, and waits. On approval it calls Create Broadcast, polls Get Broadcast Status, and writes progress back to the campaign record. Cancel Broadcast and Resume Broadcast stay available to the operator throughout, so a campaign that starts reaching the wrong cohort can be stopped without anyone opening a support ticket.
Inbound replies routed by identity, not by name
New Direct Message fires when someone answers. The agent correlates on the raw WhatsApp identifier carried in the event rather than on the display name, because the display name is set by the sender and the phone form is best-effort and may be empty depending on privacy settings. It looks the person up with Find CRM Contact By Phone, creates them with Create CRM Contact if they are new, and answers with Send Text Message. Replies that read as an opt-out are handled first in the CRM by removing the campaign tag, then acknowledged in WhatsApp, so the suppression exists before the confirmation goes out rather than after.
Moderating a customer group without watching it
New Group Message fires on every post in a monitored group. The event carries the sender's stable in-group identifier, which passes straight back into Remove Group Participants or Demote Group Admins, so a moderation loop closes without a lookup step in between. The agent flags posts matching a policy pattern, posts them to Slack with the group name and the participant identifier, and removes only on an explicit instruction. Deliveries are at least once and every event carries a stable identifier across retries, so the flow deduplicates on that identifier and a replayed event never produces a second removal.
Human-in-Loop Highlight
The gate here is the audience, and it is a real gate rather than a courtesy, because of one asymmetry in the CRM: Update CRM Contact replaces the tag list while Add Tag To CRM Contact appends to it. Any flow that keeps contact records in sync using the update action can therefore strip the very tag a campaign resolves from, or add people to it, without anything failing. The audience is not a list somebody wrote. It is the current state of a field that automation has been writing to since the last campaign, and Create Broadcast resolves it at run time.
So the agent does the arithmetic and stops. It calls Estimate Broadcast, reads the tag's current membership with List CRM Contacts, diffs it against the roster it recorded on the previous run, and posts to the campaign channel: "Audience winback-q3 resolves to 4,180 contacts. That is 640 more than the last send. 610 of those were added by the nightly CRM sync, 30 by the refund flow, and 92 contacts present last time are gone. Message preview attached. Send, or hold while the sync is reviewed?" A person approves the audience. This is the digital andon cord applied to marketing: the agent is fully capable of composing, pacing, estimating and dispatching the campaign, and the one thing it will not do alone is decide who a message goes to when the definition of "who" was last edited by another agent.
Agent Capabilities
42 actionsAccount
2- Test API Key Confirms the credential works. Used as a connection health check before a flow commits to a run.
- List Sessions Lists the connected WhatsApp sessions on the account. Because the key is account-wide, this is what tells a flow which number it is about to speak as. Session status is reported as the platform reports it, so a session that is not connected is never presented as if it were.
Contacts and Groups
3- List WhatsApp Contacts Lists the contacts synced to a session. Distinct from the WhatsScale CRM, which is its own address book.
- List WhatsApp Groups Lists the groups a session belongs to.
- Check WhatsApp Number Confirms a number has a WhatsApp account before a flow spends a send on it.
Messaging
8- Get Job Status Returns the state of an asynchronous send. Video, document and story sends return a job identifier rather than a message identifier, so this is what confirms they actually went out.
- Send Text Message Sends a text message from the selected session.
- Send Image Sends an image with an optional caption.
- Send Video Sends a video. Asynchronous, so pair it with Get Job Status.
- Send Document Sends a document such as an invoice or a ticket. Asynchronous.
- Send Audio Sends audio, including voice notes. A voice note cannot carry a caption and the combination is refused locally with a message naming the fix, rather than being sent and rejected.
- Send Location Sends a coordinate with an optional label.
- Send Poll Sends a poll. Options are validated for both count and duplication before the request leaves, because the platform's ceilings are known.
Stories
3- Post Text Story Posts a text story from the session's WhatsApp account. It reaches the account's contact list rather than an addressee, so treat it as publishing, not messaging.
- Post Image Story Posts an image story.
- Post Video Story Posts a video story. Asynchronous, so confirm it with Get Job Status.
CRM
9- Create CRM Contact Adds a contact to the WhatsScale address book, optionally tagged on creation.
- List CRM Contacts Lists CRM contacts, filterable by tag. The read that turns a tag into a roster a person can inspect.
- Get CRM Contact Returns one CRM contact.
- Find CRM Contact By Phone Resolves a phone number to a CRM contact. The lookup an inbound handler runs before deciding whether it is talking to a known customer.
- Update CRM Contact Updates a CRM contact. Note that it replaces the tag list rather than appending to it, so an update that omits a tag removes it.
- Delete CRM Contact Removes a CRM contact. The platform treats this as a soft delete.
- Add Tag To CRM Contact Appends a tag to a contact, leaving existing tags in place. The safe way for an automated flow to write membership.
- Remove Tag From CRM Contact Removes one tag from a contact.
- List CRM Tags Lists the tags in use. Tags are name-valued throughout the platform, with no separate identifier concept anywhere.
Broadcast
5- Create Broadcast Starts a paced broadcast to exactly one audience: a CRM tag or an explicit recipient list, never both and never neither. An empty selection is refused before anything is billed.
- Estimate Broadcast Resolves the audience and returns its size without dispatching anything. The evidence a person needs to approve a send.
- Get Broadcast Status Reports progress on a running broadcast.
- Cancel Broadcast Stops a broadcast in flight. Messages already delivered stay delivered, which is why the estimate matters more than the cancel.
- Resume Broadcast Restarts a paused broadcast from where it stopped.
Group Management
6- List Group Participants Lists a group's members. Participants are identified by their in-group identifier, which is what a group event carries and what the moderation actions accept.
- Add Group Participants Adds members, validated for count and identifier shape before the request leaves.
- Remove Group Participants Removes members, with the same local validation.
- Promote Group Admins Promotes members to admin.
- Demote Group Admins Demotes admins back to members.
- Leave Group Leaves a group from the session's account.
Webhook Administration
6- Subscribe Webhook Registers a webhook subscription for an endpoint outside FlowRunner. The signing secret is returned once by this action and by nothing else, so capture it in the same step or delete and re-subscribe.
- List Webhook Subscriptions Lists subscriptions on the account, with their state.
- Delete Webhook Subscription Removes one subscription. Deleting one that a running trigger created stops that trigger receiving events until its flow restarts.
- List Webhook Deliveries Lists recent deliveries. The payload preview on each row is truncated opaque text, routinely cut mid-value, and must not be parsed as JSON.
- List Webhook Failures Lists failed deliveries. Worth sweeping, because repeated failures are what deactivate a subscription.
- Retry Webhook Delivery Replays a delivery to its endpoint.
Triggers
3 triggersEvent Triggers
3- New Direct Message Fires when a message arrives in a one-to-one chat on the selected session. The event carries the sender's raw WhatsApp identifier, which is the reliable correlation key, alongside a best-effort phone number and the chat identifier. Deliveries are at least once, so deduplicate on the envelope's event identifier, which stays stable across retries and manual replays.
- New Group Message Fires when a message is posted in a group the selected session belongs to, optionally narrowed to one group. It carries the sender's stable in-group identifier, which passes straight back into Remove Group Participants or Demote Group Admins to close a moderation loop. The participant name is set by the sender and must never be used for identity decisions, and the participant phone may be empty depending on privacy settings.
- New Channel Message Fires when a message is posted to a WhatsApp channel the selected session follows, optionally narrowed to one channel. No route in the API enumerates channels, so a channel identifier has to be typed rather than picked from a list.
Frequently Asked Questions
What can FlowRunner do with WhatsScale?
FlowRunner agents can run Test API Key, List Sessions, and List WhatsApp Contacts in WhatsScale, plus 39 more actions.
Does connecting WhatsScale to FlowRunner require OAuth?
No. WhatsScale connects to FlowRunner with an API key, no OAuth flow required.
Can WhatsScale trigger a FlowRunner workflow automatically?
Yes. WhatsScale supports 3 triggers that can start a FlowRunner workflow automatically.
Start building with WhatsScale
$100 in credits. No card required. Connect in minutes.