Read and write HubSpot contacts, companies, deals, tickets and custom objects from any Windmill script, flow or app. Search and batch records, link them, log notes, tasks and meetings, manage lists, forms, marketing emails, blog posts, pages and workflows, and answer conversations.
Set up in 4 steps
Create a service key
In HubSpot, open Development, then Keys, then Service keys. Create a key, tick the scopes your scripts need, and copy it. On older accounts the same thing lives under Settings, then Integrations, then Private apps.
Add the resource in Windmill
Open Resources, add a resource of type hubspot, and paste the key in the token field.
Or connect with OAuth
If your Windmill admin has set up a HubSpot OAuth app, pick hubspot from the OAuth APIs list and click Connect, then choose the account and approve the scopes. Windmill refreshes the 30-minute access token for you. The scopes you get are the ones your admin declared on the HubSpot app: its required scopes always, and its optional ones (tickets, lists, forms, content, conversations, automation and so on) when you tick them on HubSpot's consent screen.
Run your first script
Fork List CRM Objects, pick contacts in the object type dropdown, and run it before writing anything.
Scripts
Building blocks, if none of the projects above fit. Fork one, run it, or call it as a step inside your own flow.
Update Thread
Update Page
Update Form
Update CRM Object
Update Blog Post Draft
Update Blog Post
Unarchive Thread
Send Message
Search Lists
Search CRM Objects
Schedule Blog Post
Push Blog Post Draft Live
List Workflows
List Workflow Emails
List Threads
List Templates
List Properties
List Pipelines and Stages
List Pages
List Owners
List Messages
List Meeting Links
List Marketing Events
List Marketing Emails
List Inboxes
List Forms
List Form Submissions
List Custom Object Schemas
List CRM Objects
List Channels
Trigger flows from HubSpot
HubSpot is not only a destination. These inbound paths are supported today.
HubSpot webhooks on an HTTP route
HubSpot pushes events (contact.creation, deal.propertyChange, ticket.creation and the like) to one target URL per app. Create a Windmill HTTP route, set it as the target URL in your HubSpot app's webhooks settings, and subscribe to the events you want. Each delivery is a JSON array of events, so loop over it in your flow.
Check the signature
Every delivery carries X-HubSpot-Signature-v3 and X-HubSpot-Request-Timestamp. In the route's script, compute the base64 HMAC-SHA256 of method + full URL + raw body + timestamp with your app's client secret, compare it to the header, and drop requests whose timestamp is older than 5 minutes.
Workflows can call a route too
On Professional and Enterprise accounts, a workflow's Send a webhook action can POST the enrolled record to a Windmill HTTP route, with no app needed.
Resource type
The shape of the credential every script on this page expects.
hubspot
View raw schema →| Field | Type | Required | What it is |
|---|---|---|---|
| token | string | Yes | Service key or private app access token (pat-...). In HubSpot: Development > Keys > Service keys, or Settings > Integrations > Private apps on accounts that still have them. Filled automatically when you connect with OAuth. |
Questions
A call fails on a missing scope
HubSpot answers 403 and names the scopes it would accept. Edit the service key or private app to add one (the key itself does not change), or for OAuth ask your admin to add it to the HubSpot app, then reconnect and tick it on HubSpot's consent screen. Some scopes, like automation and sequences, also need a paid HubSpot tier.
Service key, private app or OAuth?
A service key (or a private app token on older accounts) is the quickest for your own account. Use OAuth for the features that act as a user, such as meeting links and sequence enrollment, which a service key cannot reach.
How do I work with tickets, line items or custom objects?
The CRM scripts take the object type from a dropdown that lists the standard objects and your custom ones, and the properties list follows the object you pick.
Does it work with EU-hosted accounts?
Yes. HubSpot serves every account from api.hubapi.com, wherever its data is hosted.
Is my key stored on the hub?
Never. It lives only in your own Windmill workspace, encrypted at rest.