AI agents for GTM and RevOps · Part 6 of 13
Connecting HubSpot, Clay and your sending tool
What the AI SDR reads and writes in each system, why it reads HubSpot again just before it sends, and how an unsubscribe reaches every tool before the next step goes out.
The short version
Give each system one job: Clay finds and enriches contacts, HubSpot holds the record, and the sending tool sends and hears back. The AI SDR reads HubSpot just before each send, because the record moves after the list is built. Unsubscribes cross both ways before the contact’s next message, and each job gets its own key, with only the scopes it uses. Four steps:
Step 1Map what each system reads and writes
Take Example Software, an invented company that sells software to finance teams. It runs on three systems: Clay for finding and enriching contacts, HubSpot as the CRM that knows who unsubscribed, and a sending tool for the email itself. Draw what flows between them, and which system owns each fact.
Clay
Finds and enriches. Its HubSpot actions: Look up object, Find owner, Create object, Update object.
- Writes to HubSpot
- new contacts, found fields
- Reads from HubSpot
- contacts, owners
HubSpot: the record
Lifecycle stage, contact owner, open deals, Unsubscribed from all email.
The AI SDR reads it just before each send.
Sending tool
Sends, then hears replies and unsubscribes, and keeps its own unsubscribe list.
- Writes to HubSpot
- replies, unsubscribes
- Reads from HubSpot
- contacts, unsubscribes
Have Clay look up whether a person is already a contact, and who owns them, before it creates one. Map only the fields Clay found, and leave lifecycle stage, owner and subscription status to HubSpot. Keep Clay’s “Ignore blank values” on, as it is by default, “so blank values coming from Clay are left alone in HubSpot”. Which found fields to trust is part 4.
Step 2Read HubSpot when it sends
A list is a snapshot, and so is a sending tool’s copy of HubSpot: after the list is built, a contact may unsubscribe, a rep may open a deal, the company may sign. So just before each message, the AI SDR reads the four facts from part 4 in HubSpot itself, by the contact’s record ID: lifecycle stage, contact owner, open deals and subscription status.
One contact: a finance director at a 300-person logistics firm
Day 1
Clay builds the list: no owner, no open deal. Step 1 goes out.
Day 3
A rep opens a deal with the firm and becomes the contact’s owner.
Day 4, 09:00: step 2 is due
- The list, from day 1
- no owner, no open deal
- The sending tool’s copy
- no deal until its next sync brings in day 3’s change
- HubSpot, read at the send
- an open deal, with the rep as the contact’s owner
A copy is only as fresh as its last sync. Apollo’s HubSpot settings page, updated on 15 October 2026: “Apollo automatically checks HubSpot for new or updated contacts and accounts. The interval between checks can vary.” And: “HubSpot owner refreshes are scheduled hourly, but may be deferred.”
Apollo, “Configure HubSpot Sync Settings”A sending tool that sends follow-ups on its own schedule reads only its copy. So either the AI SDR sends each step itself, after its read, or HubSpot’s changes reach the tool as they happen, as step 3 sets up for unsubscribes. Which facts rule out a message is part 8’s subject.
Step 3Carry unsubscribes both ways
An unsubscribe lands in the tool where the contact clicked. Smartlead marks a lead who clicks its unsubscribe link as unsubscribed across all future campaigns; HubSpot, and the reps’ sequences that read it, hear nothing until something carries it there. An opt-out made in HubSpot misses the sending tool the same way. Carry each across by an event, before the contact’s next message from anyone.
16:40: the contact unsubscribes. 08:00 the next day: the next step goes out.
From the sending tool to HubSpot
- By an event
- as it happens
- By a daily sync
- 09:00 the next day, after the next step
From HubSpot to the sending tool
- By a HubSpot trigger
- as it happens, if it fires
- By a scheduled check
- on an interval that can vary
Into HubSpot: its “Unsubscribed from all email” property “is automatically set by HubSpot”, so write an unsubscribe through its subscriptions API, which can “unsubscribe a contact from all email communication”.
In Instantly, build two Automations: the trigger Lead Unsubscribed, then an HTTP Request step that calls that API; and a HubSpot contact trigger, then the action Add blocklist entry. Instantly’s help page doesn’t say whether a subscription change alone fires that trigger, so opt out a test contact in HubSpot and watch the Automation’s Live Feed.
In Smartlead, send the LEAD_UNSUBSCRIBED webhook to the same API call: its ready-made HubSpot templates sync replies, once a day. When you upload a list, leave out previously unsubscribed leads, which it lets you include. Whatever the route, the read at the send catches an opt-out still on its way.
Date what you read about these syncs. In 2025, answers to a HubSpot Community question said Instantly’s native connection only imported leads from HubSpot; its help centre, read on 21 October 2026, lists HubSpot triggers and actions in its Automations.
Step 4Give each job its own key
Each job gets its own key, with only the scopes it uses; support part 6 covers why. In HubSpot, that’s a private app per job, under Development, then Legacy apps: each gets its own access token, and you can “click Delete next to that scope to remove it”.
Clay, its connection
Its deal scopes are requested by default: switched off.
AI SDR: reads, before each send
Read only.
AI SDR: writes part 9’s fields
The fields it may change are listed in its tool.
Unsubscribes into HubSpot
Its only scope.
HubSpot’s scope for writing contacts lets a key “create, delete, and make changes to contacts”. So the fields the AI SDR may change (part 9) are listed in its tool, and its writes use a key you can switch off alone. When you connect Clay, its write scopes “are requested by default but can be disabled”: switch off the ones it doesn’t use. The figure uses the subscription scopes’ names in HubSpot’s scope list, communication_preferences.read and .write; its 2026-09 subscriptions API names them subscriptions-status-read and subscriptions-status-write, so use the names your API version asks for.
Next in this series
Part 7: letting the AI SDR send: messages, follow-ups and replies. See all 13 parts.
Sources
- Clay Docs, “HubSpot integration”, read on 21 October 2026.
- Apollo, “Configure HubSpot Sync Settings”, read on 21 October 2026.
- Smartlead, “How Does Unsubscribing Work in Smartlead?”, read on 21 October 2026.
- HubSpot, “HubSpot’s default contact properties”, read on 21 October 2026.
- HubSpot developer docs, “Communication preferences API guide”, read on 21 October 2026.
- Instantly, “HubSpot Integration in Automations”, read on 21 October 2026.
- Smartlead API docs, “Webhook Integration Guide”, read on 21 October 2026.
- Smartlead, “Smartlead x HubSpot Integration Guide (SmartAgents)”, read on 21 October 2026.
- HubSpot Community, “How to sync Instantly.ai activity to HubSpot in real time?”, asked on 19 March 2025, with answers to 6 October 2025, read on 21 October 2026.
- HubSpot developer docs, “Legacy private apps”, read on 21 October 2026.
- HubSpot developer docs, “Scopes”, read on 21 October 2026.
