---
title: Send data to HubSpot
description: Map model rows to HubSpot companies or contacts with exact scopes, matching, and safe creates.
species: guide
---
# Send data to HubSpot

Supernova can update or create HubSpot `companies` and `contacts`. New sends default to matching on `hs_object_id`, the stable id already present on rows synced from HubSpot.

## Required access

| Object | Write scope | Default match property |
|---|---|---|
| Companies | `crm.objects.companies.write` | `hs_object_id` |
| Contacts | `crm.objects.contacts.write` | `hs_object_id` |

Reconnect HubSpot if the source credential lacks the chosen object's write scope. Read access alone can sync a table but cannot authorize a send.

## Build the model

Keep the match id and every outbound value explicit:

```sql
select
  property_hs_object_id as hs_object_id,
  customer_tier,
  renewal_date
from titan.analytics.customer_health
where property_hs_object_id is not null
```

Choose the matching property first, then map `customer_tier` and `renewal_date` to writable HubSpot properties. Calculated and destination-managed properties are excluded from mapping.

Enumeration mappings send the option's internal value, not its display label. Dates, numbers, and booleans are converted to HubSpot's wire format before the request.

## Preview and confirm

The preview separates updates, creates, ambiguous matches, and invalid rows. Leave creates off when every model row should already represent a synced HubSpot record.

After a successful write, Supernova re-reads the affected inbound table so the lake absorbs the destination values. The send remains pinned to the HubSpot account where it was created.
