A HubSpot segment can be the recipient list for a WABA campaign. You choose the segment, TimelinesAI loads its contacts, fills your template’s variables from their HubSpot properties, and sends now or at a scheduled time. You can do all of it from inside HubSpot, or on the WABA campaigns page in TimelinesAI.
Why campaigns are sent from a WABA number
Campaigns to a HubSpot segment go out over the WhatsApp Business API (WABA) — the official channel Meta provides for messaging many people at once.
TimelinesAI can also send mass messages from a number connected by QR code, but those numbers aren't really intended for it, so there tends to be more risk involved.
Sending from a WABA number usually means:
A better chance with WhatsApp's spam controls. Reaching a whole segment is what this channel is meant for.
You can write first. A template approved by Meta is meant for reaching contacts who haven't messaged you recently.
Every message is tracked. Delivered, read and failed come back for each contact, and that is what the campaign report is built from.
Replies stay in one place. Answers arrive as normal chats in TimelinesAI and sync to HubSpot like any other WhatsApp conversation.
No WABA number yet? See WhatsApp Business Accounts (WABA) integration with TimelinesAI to connect one.
Prerequisites
✅ HubSpot connected to your TimelinesAI workspace → Check your HubSpot connection
✅ A WhatsApp Business (WABA) number available to you. Campaigns to a HubSpot segment are sent from a WABA number. → Check your WABA numbers
✅ A template approved by Meta. → Check your templates
✅ Any role except Collaborator. Agents, Teammates, Team supervisors, Admins and Owners can all create campaigns.
✅ Your HubSpot user matched to a TimelinesAI user in the connected workspace, by the same email.
How to send a WABA campaign to a HubSpot segment
Open the Create campaign interface.
In TimelinesAI — go to WABA campaigns.
In HubSpot — open the TimelinesAI app page and click Open campaigns. You can reach that page from the Connected Apps menu, from the Live WhatsApp Chat card on a contact or deal, or from Recently Visited Apps — see How to open campaigns in HubSpot.
Start a new campaign and choose the WABA number to send from and the template to send.
On the recipients step, open the HubSpot segment tab.
Find your segment and select it. Each option shows its name and how many contacts HubSpot reports in it, for example
Click Load contacts. TimelinesAI reads them from HubSpot and tells you what it took: N contacts from {segment name}.
Under Phone number column, choose the HubSpot property that holds the number to message — the numbers in that property are the ones the campaign is sent to. Then map your template’s variables to HubSpot properties or fixed values.
Open the preview to check a few rows, then send now or schedule for later.
You're all set. The campaign appears in your campaign list, where you can follow delivery and download the report.
Where to open campaigns in HubSpot
Inside HubSpot, the TimelinesAI app has its own page with an Open campaigns button. You can reach it from three places:
The Live WhatsApp Chat card on a contact or a deal — the WhatsApp Campaigns button, next to Chat with the contact.
The TimelinesAI app settings in HubSpot — the General tab, in the campaigns card below the connection block.
Open campaigns opens the campaigns screen over your HubSpot page, so you stay in HubSpot while you work.
How it works
Important: reading your segments needs one HubSpot permission the app didn’t ask for before this feature — View details about contact lists.
New connections get it automatically.
If your workspace connected HubSpot earlier, the recipients step shows Reconnect HubSpot to use segments until an admin reconnects once. Reconnecting keeps your existing settings and doesn’t interrupt syncing — nothing has to be uninstalled or reinstalled.
See Scopes and permissions for the full list.
Searching segments
When you open the HubSpot segment tab, TimelinesAI asks HubSpot for your existing segments straight away — you don’t have to search first. The picker shows 50 at a time, in the order HubSpot returns them: oldest first. Show more at the bottom loads the next 50, and disappears once everything is loaded.
To find a segment that isn’t in the first batch, type part of its name in the search box and press Search. The search runs in HubSpot and covers every segment in your portal, matching any word of the name. You’ll need it most for a segment you created recently, since the oldest come first. The ✕ in the field clears the term and brings the default list back.
If the search finds nothing, you’ll see No segments match that name — check the spelling, or try a different word from the name. If your portal has no segments at all, you’ll see No contact segments in HubSpot yet. Create segment first, with a link that opens HubSpot so you can create one.
Selecting a segment
Each option shows the segment’s name and how many contacts HubSpot reports in it, for example Newsletter subscribers – 420 contacts. Long names are shortened to fit.
A campaign takes one segment: selecting another replaces the first.
A segment with 0 contacts can’t be selected — you’ll see a warning instead, since there would be nobody to message.
Loading the segment
Load contacts reads the contacts from HubSpot and turns them into the campaign’s recipient list.
When it’s done you’ll see N contacts from {segment name}. Change segment takes you back to the picker and drops what was loaded.
Loading takes a snapshot. The contacts are copied into the campaign’s own recipient list at that moment, and the campaign keeps that list from then on. If the segment is a dynamic list in HubSpot — one that keeps updating itself — those updates don’t reach a campaign that has already loaded it: contacts added afterwards aren’t messaged, and contacts removed from the segment still are. To send to the current membership, load the segment again in a new campaign.
The count shown after loading is every contact taken from the segment, including those that can’t be messaged ( for example due to invalid phone number). Those are skipped at send and listed in the report with a reason, so the sent count is the one that tells you how many messages actually went out.
Switching between the Upload file and HubSpot segment tabs doesn’t lose what you selected, and neither does going back from the preview. Loading another segment, or uploading a file, replaces the current recipients.
Important: Up to 10,000 contacts can be loaded from one segment. A larger segment is refused with a message naming the limit.
Recipients and the phone number
Phone number column is where you tell us which HubSpot contact property holds the number to message. Whatever is in that property is the number we send to.
You can pick Phone number or Mobile phone number. We use only the one you pick — if a contact has nothing in it, they’re skipped, even if their number is in the other property. Pick the one your contacts actually use, and keep numbers in international (E.164) format.
Template variables
If your template has variables, each one needs a value for every contact. Map it to a HubSpot contact property, to a fixed (fallback) value, or to both.
Example: Fallback value is what we send when that property is empty for a contact. {{1}} variable mapped to First name with the fallback there results in in contact called Anna geting “Hi Anna”, while a contact with no first name getting “Hi there”.
If the property is empty and there’s no fallback, that contact is skipped rather than sent a message with a blank in it, and the report later gives the reason — missing value for body {{1}}. WhatsApp rejects templates with empty variables, which is why the message can’t go out as-is.
Properties are shown with their HubSpot labels, not their internal names. These come with a segment:
First name
Last name
Email
Phone number
Mobile phone number
Contact owner
Record ID
Campaign Reporting
Your campaigns and their reports are in the same place you created them: Open campaigns on the TimelinesAI app page in HubSpot, or the WABA campaigns page in TimelinesAI. Both show the same campaigns, however the campaign was made.
Every campaign is tracked the same way whether its recipients came from a segment or a file; the difference is that segment campaigns also carry where the list came from.
In the campaign list, each campaign shows its origin under its name — HubSpot segment or Uploaded file. The progress column accounts for everyone: sent, delivered, read, and how many were excluded.
The campaign summary opens from that list and names the segment the contacts came from and when the list was taken, instead of a file name. Progress reads, for example, 48 / 50 sent, 2 excluded — “excluded” being contacts that were in the list but couldn’t be messaged.
The downloaded report is a CSV with one row per contact: its status and, where no message went out, the reason. The file is named after the segment, and each row carries the contact’s HubSpot record id, so you can open the contact in HubSpot straight from the report. Contacts that couldn’t be messaged appear as skipped with the reason — for example phone is empty, invalid phone format, or missing value for body {{1}} when a variable had no value and no fallback. Once the campaign has finished, every contact loaded from the segment appears in the report with a status — sent, delivered, read, failed, or skipped with its reason — so nobody disappears without explanation.
Troubleshooting
Message | What it means | What to do |
Your HubSpot user is not connected to TimelinesAI yet | Your HubSpot user has no matching TimelinesAI user in the connected workspace — most often because the two accounts use different email addresses | Use the link under the message, or ask your admin to invite you with the same email as your HubSpot user |
HubSpot is not connected | The workspace has no HubSpot connection at all | A workspace owner or admin connects it from the HubSpot integration page in TimelinesAI |
Reconnect HubSpot to use segments | The connection was made before segments were supported, so it lacks the permission to read contact lists | An owner or admin clicks Reconnect on the HubSpot integration page. Nothing else about the connection changes |
No WhatsApp Business number is available to you | No WABA number is assigned to you | Ask your workspace admin for access to one |
You don't have access to mass messaging | Your TimelinesAI role doesn't include campaigns | Ask your workspace admin |
No approved template found | The WABA number has no template approved by Meta | Create a template and wait for approval before starting a campaign |
Mass messaging is unavailable on your current plan / Your TimelinesAI subscription has expired | The workspace plan doesn't cover campaigns, or the subscription lapsed | The workspace owner manages the subscription; the message links there for owners |
Couldn't load HubSpot segments / Couldn't load contacts of the HubSpot segment | HubSpot didn't answer | Use Retry |
HubSpot is busy | The portal hit its own request limits | Wait a minute and retry |
This HubSpot segment is too large | More than 10,000 contacts | Narrow the segment in HubSpot, or split it into smaller ones |
Important: your TimelinesAI user and your HubSpot user must have the same email address. If they differ, TimelinesAI can’t recognise you and you’ll be asked to connect or request access even though you’re already on the team. Contact our support team in live chat and we’ll update the email on your TimelinesAI user so the two match.
For other issues with the integration, see HubSpot Integration Troubleshooting.
FAQ
Will contacts added to the segment later receive a scheduled campaign?
No. The recipients are fixed when you load the contacts. To include contacts added since, create the campaign again closer to the time you want it sent.
What happens if I rename or delete the segment in HubSpot?
Nothing changes for campaigns already created. The segment's name is recorded with the campaign, so its summary and report keep showing the name it had when the list was taken.
Why is the sent count lower than the number of contacts loaded?
Because the count shown when you load the segment includes every contact taken from it, including those that can't be messaged — a contact with no number, an unreadable number, or a WhatsApp group synced into HubSpot as a contact. They appear in the report as skipped, with the reason.
A lot of contacts were skipped with “phone is empty”. Why?
Usually because of the phone property you chose. Only the property selected under Phone number column is used, so a contact whose number lives in the other one is skipped. Check which property your contacts actually fill in, and create the campaign again with that one.
The same person is in the segment twice. Will they get two messages?
Yes. Duplicate numbers aren't removed, so each row is messaged. Clean the segment in HubSpot first if that matters.
Can I use my own custom contact properties?
Not yet. Today a segment comes with the standard properties listed under Template variables.


















