WhatsApp opt-in register your team checks before every send

See who has really said yes to WhatsApp, build a segment from only those people, and push it to your broadcast tool with a record of who got what.

App
HeyyHubSpotGoogle SheetsMarketingOperationsData SyncLead Enrichment
PromptCreate

Build me a WhatsApp opt-in register and audience builder that my marketing ops person opens before every broadcast, so we stop keeping consent in a spreadsheet nobody trusts. This app never drafts message copy, because our Heyy templates are already approved. Its job is to govern who is eligible to be messaged and to record the evidence.

The main view is the register. Pull contacts with HubSpot "Search Contacts", filtered to people who have a phone number, and show one row per person with their name, phone, the opt-in source, the opt-in date, the lawful basis, whether they have ever opted out and when, and when we last messaged them. Across the top show live counts for eligible, missing evidence and blocked, recalculated as filters change. The register also reads our send history from the Google Sheet with "Get Values" and joins it onto each row, so every person shows which campaigns and templates they have already been sent. Give me search and filters over source, date range, lawful basis, opt-out status and last-messaged date.

A second view lists our connected numbers from Heyy "List Channels" beside the approved templates from Heyy "List Message Templates", showing each template's name, language and status. Saving a segment means picking a channel and a template here, so every saved segment is tied to the template it is allowed to use, and a segment whose template is no longer approved is shown as unusable.

Building a segment is just filtering the register and saving that filter with a name, the chosen channel, the chosen template, and any personalisation fields to carry over. Saved segments persist in the app so the same audience can be reused and re-run for the next campaign.

A "Push to Heyy" action turns a saved segment into a campaign. It first creates the campaign label with Heyy "Create Label", then adds only the eligible people with Heyy "Create Contact", passing phone, name, the campaign label and the personalisation values as custom fields. Those custom fields are set up once, on first run, with Heyy "Create Contact Attribute", and the app should reuse existing attribute identifiers where they already exist rather than creating duplicates. Creating the labelled contact is what fires the Heyy template automation, so the app itself never sends a message. The same action then stamps the campaign name and push date onto each person with HubSpot "Update Contact", and writes the full push manifest to the Google Sheet with "Append Values": contact id, name, phone, campaign, channel, template, timestamp and who ran the push. Deduplicate by phone number so nobody is pushed twice in one campaign, and skip anyone already recorded in the manifest for that campaign so a re-run never double-sends.

Add an "Audit consent evidence" button that starts a background agent. It walks the register, reads each contact's properties with HubSpot "Get Contact", and judges each person's opt-in evidence as clear, missing, stale or ambiguous. Missing means no source or no date. Stale means the opt-in is older than the retention window set in the app, twelve months by default. Ambiguous means the source does not name a real consent capture point, or the lawful basis contradicts the opt-out flag. The agent writes the verdict and a short reason back with HubSpot "Update Contact" and files the full findings list to the Google Sheet with "Append Values", so the cleanup queue is ready before the next send. Show the agent's progress in the app while it runs, and show the findings in the register once it finishes.

Rules to bake in. Anyone marked opted out is hard blocked: they stay visible in the register with the reason shown, but they cannot be selected and cannot be pushed even by an admin. People without evidence are visible but unselectable until an audit clears them, with a hint saying what is missing. Marketers can filter, save and propose a segment, but only an admin can run the push, so show the push button disabled with an explanation for non-admins rather than hiding it. Every push and every audit run should be recorded with the person who ran it, since the whole point is being able to prove later exactly who received what and why we were allowed to message them.

What does this prompt do?

  • Shows every contact who could receive a WhatsApp broadcast in one register: their number, where and when they said yes, the reason you are allowed to message them, whether they ever opted out, and when you last messaged them.
  • Keeps live counts at the top so you know before you start how many people are eligible, how many are missing proof, and how many are blocked outright.
  • Lists your connected WhatsApp numbers next to your approved message templates, so every saved audience is tied to the template it is allowed to use.
  • Pushes only the eligible people to Heyy in one click, stamps the campaign back onto each CRM record, and writes the full send list to a Google Sheet so you can prove later exactly who received what.
  • Runs an assistant in the background that reads every contact's record, flags anyone whose proof is missing, out of date or unclear, and files the cleanup list to the sheet.

What do I need to use this?

  • A Heyy workspace with at least one connected WhatsApp number and your approved message templates
  • A HubSpot account where contact records hold the opt-in details: where the person signed up, the date, the reason you are allowed to message them, and whether they have opted out
  • A Google Sheet to hold the send history and the audit findings
  • The names of the people who should be allowed to run a push, since everyone else can only propose an audience

How can I customize it?

  • Change what counts as out of date proof, for example anything older than twelve months
  • Point the register at whichever CRM fields your team already uses to record consent
  • Choose who is an admin allowed to run a push and who can only build and propose audiences
  • Add the personalisation details you want carried into the template, such as first name, city or plan

FAQs

Does this app send the WhatsApp messages itself?
No. It decides who is allowed to be messaged and hands that audience to Heyy with the right campaign label. Your existing Heyy automation sends the approved template, so nobody is writing message copy in this app.
What happens to someone who has opted out?
They are hard blocked. They still appear in the register so you can see why, but they cannot be selected or pushed, and an admin cannot override it.
Can anyone on the marketing team run a broadcast push?
No. Marketers can filter the register, save an audience and propose it, but only an admin can run the push that creates the contacts in Heyy.
What if our consent details are incomplete today?
That is the point of the audit button. It starts a background assistant that reads every contact, flags the people whose proof is missing, out of date or unclear, and writes the cleanup list to your sheet. Until someone is cleared, they show in the register but cannot be selected.
Where is the proof of what we sent kept?
Every push appends a full manifest to your Google Sheet: who was included, which number and template was used, the campaign name and the date. The register reads that history back, so each person's row shows what they have already been sent.
Will this work if we use a different CRM?
This version reads and writes HubSpot contacts. The same register works against another CRM as long as it can store the opt-in source, date, reason and opt-out flag on each contact record.

Related templates

Review desk for portal forms your team still fills in by hand

Stage a batch of filings overnight, then approve each completed form from a screenshot before anything is ever submitted.

Kernel
Google Sheets
Slack Bot
App
Client-by-client cold email pipeline review for agencies

Pick a client and a date range to see sent, replies, meetings booked and the real deal value your cold email produced, campaign by campaign.

Instantly
HubSpot
Slack Bot
App
Partner tier review board for quarterly promotion calls

Work every partner tier decision from one board, with the revenue and commission numbers, clear promotion thresholds, and AI review briefs.

Introw
HubSpot
Slack
App
Reconcile partner commissions between HubSpot and Introw

Open one board at month end to find every closed deal missing a commission, every commission with no deal behind it, and every amount that does not add up.

Introw
HubSpot
Slack
App
Audit what Intercom's Fin AI actually resolved before you pay

Review every conversation Fin closed as resolved, judge which ones actually stuck, and see what the gap is worth against your bill.

Intercom
Google Sheets
Slack Bot
App
Returns and warranty claim desk that follows your policy

Work every return, damage and warranty claim in one queue, with the order, the delivery date and a policy-backed recommendation already on screen.

Kustomer
Shopify
Google Sheets
App

Stop keeping WhatsApp consent in a spreadsheet nobody trusts.

Build the register once and every broadcast starts from a list you can actually defend.