Skip to main content

How sync works

Sync direction​

From Settings → Integrations → HubSpot, choose how contact data flows between the two systems:

  • Bidirectional (default) — changes on either side update the other.
  • HubSpot → SendSeven only — HubSpot is the source of truth; SendSeven never writes back.
  • SendSeven → HubSpot only — SendSeven is the source of truth; HubSpot changes aren't pulled in.
  • Off — contacts aren't synced at all (you can still connect the integration for messaging/campaigns only).
A couple of explicit writes bypass this setting

A list's opt-in/opt-out HubSpot field write, and the Flow Builder HubSpot – Set field node, always push to HubSpot when triggered — even on a HubSpot → SendSeven only connection. These are deliberate, single-property writes, not the regular bulk contact sync this setting controls. See Newsletter opt-in and opt-out field writes.

Choosing which contacts sync​

By default, every contact in your HubSpot portal is eligible to sync. If you only want a subset — a single business unit, contacts on a specific list, or anything matching certain criteria — narrow the scope from Settings → Integrations → HubSpot → Contact sync filter.

There are two ways to filter:

  • By properties — build one or more filter groups from your HubSpot contact properties, using conditions like is equal to, is not equal to, contains, does not contain, is any of, is none of, is greater/less than (or equal to), is between, is known, and is unknown. Conditions within a group are combined with AND; separate groups are combined with OR — so you can express something like "(Country is Germany AND Lifecycle stage is Customer) OR (Country is Austria)". The value you enter for a condition matches the property's own type automatically — a Yes/No select for a boolean property, a dropdown of the property's real options for an enumeration, a date picker for a date property, and so on — so you can't type a value HubSpot wouldn't accept.
  • By HubSpot list — sync only the contacts that belong to a specific HubSpot list.

Leave it on Import everything (the default) to keep syncing your whole portal.

[screenshot: Contact sync filter card with a properties-mode filter group and the live match-count preview]

Previewing how many contacts match​

While you're building a filter — before you save it — SendSeven shows a live count of how many HubSpot contacts currently match it, whether you're building a properties filter or picking a list. That makes it easy to see the impact on your sync size up front, especially for large portals, without committing to anything first.

What the filter applies to​

The filter gates whether a HubSpot contact gets imported into SendSeven in the first place — it applies to the initial backfill (Import now) just as much as ongoing sync, whether that update reaches SendSeven via webhook or the automatic background check. A HubSpot contact only imports if it currently matches your filter.

Editing the filter later​

Changing the filter — narrowing it, widening it, or switching between properties and list mode — only changes which contacts import going forward:

  • A contact that no longer matches simply stops being pulled in. It is not removed from SendSeven — nothing already synced gets deleted as a side effect of tightening a filter.
  • A contact that newly matches a widened filter isn't backfilled automatically. Click Import now afterward to bring in contacts that now qualify.
  • Removing contacts that were previously imported (because they no longer match) is a separate, explicit action you'd take yourself — SendSeven never silently deletes synced contacts.
Turning sync off (or changing the filter) takes effect promptly

Turning contact sync off, or saving a changed filter, applies right away — including to an import or sync run that's already in progress. You don't need to wait for a large backfill to finish before a change takes hold.

Matching contacts​

The first time a contact is seen on either side, SendSeven matches it to an existing contact on the other side by email (the default) or, if you prefer, phone number — configurable per connection in settings. Once matched, the two records are linked permanently, and future syncs update the linked pair rather than re-matching from scratch.

What triggers a sync​

  • A contact is created, deleted, or updated in HubSpot — for the standard fields below, plus any standard field or standard-category mapping (see Contact methods, Social profiles, and Birthday), SendSeven picks this up in real time via a HubSpot webhook. Latency is typically a few seconds.
  • A HubSpot property outside that standard set changes — including any custom property you've mapped — SendSeven still picks it up automatically, no action needed on your end, via a regular background check; typical latency is a few minutes rather than a few seconds. This is also what backstops the real-time webhook itself, so a missed or delayed event never leaves a contact permanently out of sync.
  • A contact is updated in SendSeven — pushed to HubSpot automatically (near real-time), if your sync direction includes SendSeven → HubSpot.
  • Clicking "Sync now" — on the Sync card, to force an immediate sync for just that one contact.
  • "Import now" — a manual full sync from the settings page, for backfilling existing HubSpot contacts into SendSeven (or SendSeven contacts into HubSpot).

Sync is designed to be safe to leave running continuously: each side stamps a fingerprint of what it just synced, so an update that HubSpot or SendSeven reports back as a result of syncing (rather than a genuine new edit) is recognized and skipped — this is what keeps the two systems from endlessly re-syncing the same change back and forth.

Mapping a brand-new custom property needs no setup on our side

Whichever property you map — a HubSpot property you created five minutes ago included — SendSeven reads your portal's current property list on every sync, so there's nothing to request or wait on us for. If you map a contact method or social profile to a property outside the real-time set (for example, a custom property you use to store a secondary phone number), that mapping starts working immediately; only its live latency is a few minutes instead of a few seconds, as described above. If near-instant latency matters for a specific property — especially if you're driving Flow Builder automation off it — email us at [email protected] to discuss options.

Default fields​

Out of the box, SendSeven maps and syncs:

  • Email
  • First name
  • Last name
  • Phone

SendSeven also reads HubSpot's Company and Mobile phone properties inbound: company is stored for reference, and a distinct mobile number is added as a separate mobile contact method (rather than overwriting your primary phone number).

Email and Phone are technically the defaults for the Contact methods mapping described below — out of the box, HubSpot's email property maps to a contact's primary email, and its phone property maps to their primary phone number. You don't need to configure anything to get this default behavior; it only becomes visible once you open Field Mapping and want to change it.

Contact methods mapping​

Beyond the default Email and Phone mapping, Settings → Integrations → HubSpot → Field Mapping → Contact methods lets you map a HubSpot property directly to one of a contact's messaging methods:

  • Email
  • WhatsApp
  • Phone

[screenshot: Contact methods mapping section with a HubSpot property picker per method]

A HubSpot property can be mapped to more than one contact method at once. For example, if you keep a single "Phone Number" property in HubSpot, you can map it to both Phone and WhatsApp independently — so that number updates both contact methods whenever it changes in HubSpot, without needing two separate HubSpot properties.

How it behaves:

  • Contact methods mapping is one-way, HubSpot → SendSeven only — SendSeven never writes these back to HubSpot, regardless of your overall sync direction setting.
  • When the mapped HubSpot property changes, SendSeven updates the primary value for that contact method. The previous primary value isn't deleted — it's kept as a secondary contact method on the contact.

Social profiles mapping​

The same Field Mapping page also has a Social profiles section, for mapping a HubSpot property to one of a contact's social or web profiles:

  • LinkedIn
  • Instagram
  • Facebook
  • Website
  • Other

[screenshot: Social profiles mapping section with a HubSpot property picker per profile type]

Social profiles mapping behaves the same way as contact methods: it's one-way (HubSpot → SendSeven), and updates the primary (or first) profile of that type when the mapped HubSpot property changes, without deleting anything that was there before.

Birthday​

You can map any HubSpot date property to a contact's Birthday field the same way you map First name or Last name — from the standard-field dropdown on the Field Mapping page, choose Birthday as the target for the HubSpot property you want to use. HubSpot's own standard property for this is Date of birth, but any date property you already use works.

Birthday isn't mapped by default — it's opt-in, so map it explicitly if you want it. Like contact methods and social profiles, it's one-way (HubSpot → SendSeven only): SendSeven reads a contact's birthday from HubSpot but never writes one back.

Custom field mapping​

Beyond the fields above, you can map any of your own SendSeven custom fields to a HubSpot contact property (or the reverse), so tenant-specific data — deal stage notes, loyalty tier, internal tags, or anything else you track as a custom field — flows between the two systems automatically.

To map a custom field:

  1. Go to Settings → Integrations → HubSpot → Field Mapping.
  2. For the HubSpot property you want to map, open its target dropdown. Alongside the standard targets (First name, Last name, Birthday), you'll see a Custom fields group listing your SendSeven custom fields.
  3. Choose the custom field you want that HubSpot property mapped to.
  4. Save.

[screenshot: Field Mapping table with a custom field selected as the target for a HubSpot property]

Only compatible targets are offered. A HubSpot property and a SendSeven field each have their own type (text, number, boolean, date, single-select, multi-select, and so on) — the target dropdown only enables SendSeven fields whose type is compatible with the HubSpot property on that row. Incompatible targets are still listed, but disabled, with a tooltip explaining the type mismatch. If you need to override that for a specific row, turn on Show incompatible fields.

HubSpot's Yes/No properties count as boolean

HubSpot models a "Yes/No" property as a dropdown internally, but SendSeven treats it as a boolean target (and vice versa), so it only matches your actual boolean fields rather than every select field. A genuine multi-option dropdown that isn't a Yes/No property still only matches select-type targets.

Don't have a matching field yet? Create one inline. If none of your existing SendSeven fields fit, choose + Create matching field from the target dropdown, type a name, and SendSeven creates a new custom field with the right type automatically — boolean for a HubSpot Yes/No property, a single-select field for a HubSpot dropdown, multi-select for a HubSpot checkbox property, and so on — carrying over HubSpot's option values and filling in the new field's description for you. This needs permission to edit settings, and only appears once you've picked the HubSpot property to match against.

How it behaves:

  • A custom field mapping follows the same sync direction you've set for the rest of contact sync — if you're bidirectional, a custom field mapping is bidirectional too; if you're HubSpot → SendSeven only, custom field values only flow that way.
  • If your SendSeven custom field allows multiple values (a multi-select field), the values are joined together when sent to HubSpot (as a single text property) and split back apart when read from HubSpot — so a multi-select field round-trips correctly.
  • The same echo-prevention that protects the default fields applies automatically to any custom field mapping — you don't need to do anything extra to avoid sync loops.
  • If a mapped custom field is later deleted in SendSeven, the mapping is shown so you can update or remove it — it won't silently break other fields' sync.

Conversation transcripts on HubSpot​

When a SendSeven conversation is closed, a transcript is generated and attached to the matching HubSpot contact as a Note on their timeline — so anyone looking at the contact in HubSpot has the full context of what was discussed, without needing to open SendSeven.

  • The note includes an AI-generated summary of the conversation (on plans with AI features enabled) and a link back to the full conversation in SendSeven, alongside the transcript file itself.
  • Matching to a HubSpot contact works the same way as regular sync — by the contact's email or phone — so this works even for contacts that haven't been explicitly synced or imported yet, as long as HubSpot has a matching record.
  • If a conversation is reopened and closed again, a new transcript note is added reflecting that most recent close.
  • You can turn this off from Settings → Integrations → HubSpot if you don't want transcript notes created automatically.

[screenshot: a SendSeven transcript note on a HubSpot contact's timeline]

Newsletter opt-in and opt-out field writes​

Beyond regular contact sync, a SendSeven list can be configured to write a specific HubSpot property whenever a contact opts in or out of it — for example, setting a Newsletter status property to Subscribed or Unsubscribed. Configure this from the list's own settings: one default mapping for all channels, plus optional per-channel overrides (so, say, a WhatsApp opt-out can write a different value than an email opt-out). The value for each is picked from a type-aware control matching the target property, the same as everywhere else a HubSpot property value is chosen.

When a contact opts in or out — on any channel, including a chat keyword on WhatsApp, Telegram, Messenger, or Instagram — SendSeven runs every action configured for that event in parallel: any confirmation message, any flow bound to the contact subscribed/unsubscribed trigger, and this HubSpot field write, if configured.

This write isn't gated by your sync direction

This field write, and the HubSpot – Set field node described below, are deliberate, single-property writes — they push to HubSpot even on a HubSpot → SendSeven only connection. HubSpot stays the source of truth for everything else on that connection; SendSeven's own reconciliation sync mirrors the new value back on its next pass. The write still requires the HubSpot connection to be active, and won't happen if your account is currently blocked for billing.

Automation: Flow Builder​

Contacts synced from HubSpot can drive SendSeven's own Flow Builder automations, and a flow can write back to a linked HubSpot record.

Contact-lifecycle triggers​

Three flow triggers react to a contact changing:

  • Contact updated — fires when a contact changes. Optionally narrow it to specific changed fields, tags added or removed, or subscription changes; leave everything unchecked to fire on any change.
  • Contact subscribed — fires when a contact subscribes to a list or channel.
  • Contact unsubscribed — fires when a contact unsubscribes from a list or channel.

A subscription-lifecycle flow gets these as trigger variables you can use in later steps (for example, in a Condition node) — the list's ID and name, and the channel's type, name, ID, and status. This makes it straightforward to branch a single flow differently depending on what happened, for example routing an email unsubscribe to one suppression process and a WhatsApp opt-out to another.

These triggers can be added either while building a flow on the canvas (for the full set of filters) or from the "New flow" trigger picker (which starts the flow as a catch-all, ready to be narrowed down on the canvas).

[screenshot: flow trigger picker showing "On contact updated / subscribed / unsubscribed"]

The "HubSpot – Set field" node​

Add a HubSpot – Set field node anywhere in a flow to write a value to the contact's linked HubSpot record:

  1. Pick (or create) the HubSpot property to write to.
  2. Set the value. By default this is a type-aware control matching the property — a Yes/No select, a dropdown of the property's real options, a date or number input, and so on. Turn on Dynamic (template) to switch to a free-text template built from flow, contact, or trigger variables instead (for example, something collected earlier in the same flow); HubSpot casts the resolved value to the property's type when the node runs.

Like the newsletter opt-in/opt-out field write above, this node's write always reaches HubSpot regardless of your sync direction setting — see Newsletter opt-in and opt-out field writes.

The node has three outcome branches to continue the flow on:

  • Success — the value was written to HubSpot.
  • No mapping — the SendSeven contact running through the flow isn't linked to a HubSpot record, so there was nothing to write to. Use this branch to skip the HubSpot write gracefully rather than failing the flow.
  • Error — the contact is linked, but the write failed (for example, a permissions or API error on HubSpot's side).

[screenshot: "HubSpot – Set field" node on the flow canvas with its three branches]