Leo LogoHelloLeo
IntegrationsTemplatesPricingCommunity
Book a demoSign InGet Started
Leo LogoHelloLeo

The AI developer that builds the apps your ERP doesn't have — internal tools, portals and dashboards, running in production on top of NetSuite, Odoo, Salesforce and more.

Applications

  • HelloLeo for NetSuite
  • HelloLeo for Odoo
  • HR & Employees
  • Inventory
  • Accounting & Procurement

Integrations

  • Shopify integration
  • HubSpot integration
  • WhatsApp Business integration
  • Salesforce integration
  • Stripe integration
  • Google Sheets integration
  • Outlook integration
  • QuickBooks integration
  • All integrations

Product

  • Pricing
  • Templates
  • vs AI coding tools

Company

  • Contact

Resources

  • Documentation
  • Help Center
  • Community

Legal

  • Trust Center
  • Security
  • Status
  • Privacy Policy
  • Terms of Service
  • DPA
HubSpot logo
Integration

Connect HubSpot to your ERP

HubSpot's CRM platform contains the marketing, sales, service, operations, and website-building software you need to grow your business.

CRM
Browse all integrations

What Leo can do with HubSpot

108 actions Leo can use in the apps and agents it builds for you: 56 that read HubSpot data, 52 that create or update it.

reads data writes data deletes data

Read from HubSpot · 56

  • Retrieve Quotes

    Fetch one quote by ID or list quotes with CRM v3 pagination (after, limit). Complements Create CRM Object for quotes when you need read access outside Search CRM.

    Docs ↗
  • List Meeting Links

    List meeting scheduling pages for a HubSpot organizer. Returns a single page of results; use Limit to control the page size and check the (of N total) summary to see if more results exist beyond the page returned.

    Docs ↗
  • List Custom Objects

    List records of a custom object type with pagination and property selection. HubSpot does NOT support the /search endpoint for custom objects — use this list action to browse records, then use Get Custom Object to fetch full details by ID. Use List Custom Object Schemas first to obtain the correct objectType identifier (fullyQualifiedName or objectTypeId). Use List Custom Object Properties to discover which properties are available to request.

    Docs ↗
  • List Custom Object Schemas

    Discover all custom object types defined in the HubSpot account. Returns the objectTypeId, fullyQualifiedName, name, labels (singular/plural), primaryDisplayProperty, and a list of all property names for each schema. Call this first before any other custom object operation to obtain the correct objectType identifier. Standard object types (contacts, companies, deals, tickets) do NOT appear here.

    Docs ↗
  • List Custom Object Properties

    List all property definitions for a specific custom object type. Returns each property's name, label, type, fieldType, and enum options (for enumeration fields). Use List Custom Object Schemas first to obtain the correct objectType identifier (either fullyQualifiedName like p_pd_eval_movie or objectTypeId like 2-12345678). Standard object types (contacts, companies, deals, tickets) are not supported here — use Get Properties or Search Properties for those.

    Docs ↗
  • List CRM Associations

    List CRM v4 associations from a source record to a target object type. Returns associated record IDs and association types for each link. Direction matters: from is the record you are querying from; swap from/to to traverse the relationship the other way.

    Docs ↗
  • List CRM Associations

    List CRM v4 associations from a source record to a target object type. Returns associated record IDs and association types for each link. Direction matters: from is the record you are querying from; swap from/to to traverse the relationship the other way.

    Docs ↗
  • List Association Labels

    List association type definitions (labels and type IDs) between two object types in CRM v4. Use the returned typeId values when creating associations with Create Association or Create CRM Object (associations JSON). Order matters: from/to defines the direction of the relationship.

    Docs ↗
  • List Associated Engagements

    List engagements (notes, tasks, calls, meetings, emails, etc.) associated with a CRM record using HubSpot's legacy Engagements v1 paged API. This endpoint is documented for company, deal, and quote; other object types may return errors. Use Offset for pagination when hasMore is true. For newer CRM v3 engagement objects, prefer v4 List CRM Associations from the record to notes, tasks, calls, etc.

    Docs ↗
  • Get Thread

    Retrieves a single thread's metadata, including status, assignee, associations, and latest-message info.

    Docs ↗
  • Get Owner

    Get a single HubSpot owner (user) by ID. Provide an owner ID or use List Owners to fetch IDs.

    Docs ↗
  • Get Meeting Link Availability

    Fetch the upcoming availability windows (and busy times) for a meeting scheduling page. Use this when you only need the open slots; use Get Meeting Link Booking Info for the full booking configuration.

    Docs ↗
  • Get File Public URL

    Get a publicly available URL for a file that was uploaded using a Hubspot form.

    Docs ↗
  • Get Engagements

    Retrieves one or more engagements by their IDs. Use this action to fetch details about multiple engagements, such as their types, timestamps, and associated CRM objects. Requires engagement IDs, which you can obtain from the List CRM Objects action.

    Docs ↗
  • Get Custom Object

    Fetch one or more custom object records by ID in a single request. Use List Custom Objects first to browse records and find the IDs you need, then use this tool to retrieve full property details. Use List Custom Object Schemas to get the correct objectType identifier. Max 100 IDs per request.

    Docs ↗
  • Get Actor

    Resolves an actor ID (e.g. the value returned by a message's senders[].actorId field) to its name, email, and type.

    Docs ↗
  • Search Properties

    Search for property definitions (field names) on a CRM object type. Returns lightweight results: property names, labels, descriptions, and types — without enum options. Use this to discover what fields exist before creating or updating records. To get full details including valid enum values for a specific property, use Get Properties. To search for actual CRM data/records, use Search CRM Objects. For custom object properties, use List Custom Object Properties instead (custom object types are not in the standard type list).

    Docs ↗
  • Search CRM

    Search a CRM object type by a single property. Set Object Type, Search Property (internal name, e.g. email or dealname; use Get Properties / Search Properties to find valid names), and Search Value. With Exact Match off, partial (substring) matches are returned. Results are capped per call — if paging.next is present in the response, call again with Offset advanced to fetch the next page. Example: Object Type deal, Search Property dealname, Search Value InGen Annual Contract. Returns matching records plus paging. For lookups, keep results small with Limit and Fields (return only the properties you need).

    Docs ↗
  • Search CRM Objects

    Search HubSpot CRM records (contacts, companies, deals, tickets, etc.) using text queries or filters. Returns matching records with properties, pagination, and total count. Use the query parameter for simple text search across default searchable fields (contacts: firstname, lastname, email, phone, company; companies: name, website, domain, phone; deals: dealname, pipeline, dealstage, description). Use filterGroups for advanced filtering with operators like EQ, NEQ, LT, GT, CONTAINS_TOKEN, IN, HAS_PROPERTY, etc. You can combine up to 5 filter groups (OR logic) with up to 6 filters each (AND logic within a group). Supports standard object types only (contacts, companies, deals, tickets, etc.). For custom objects, use List Custom Object Schemas to discover available types, then List Custom Objects to list records.

    Docs ↗
  • List Pipelines and Stages

    List all pipelines and their stages for deals or tickets. Returns pipeline IDs, labels, and each pipeline's ordered stages with stage IDs and labels. Use this to discover valid pipeline and dealstage / hs_pipeline_stage values before creating or updating deals and tickets.

    Docs ↗
  • List Owners

    List owners (users) in the HubSpot account. Returns owner IDs, names, and emails. Use this to discover valid values for the hubspot_owner_id property when creating or updating any CRM object (contacts, companies, deals, tickets, etc.).

    Docs ↗
  • Get User Details

    Get details about the current authenticated HubSpot user, including their owner ID, email, hub ID, and account info. Use this to determine the user's identity — the ownerId is needed to filter CRM records owned by the current user (e.g. 'my deals' requires filtering by hubspot_owner_id). Also returns available CRM object types for the account.

    Docs ↗
  • Get Properties

    Get detailed property definitions for specific properties on a CRM object type. Returns full metadata including data types, enum options with valid values, referenced object types, and read-only status. Use this after Search Properties to get valid values for specific fields (e.g. enum options for dealstage or hs_pipeline). Property details can be large — fetch only the properties you need rather than all of them. For custom object properties, use List Custom Object Properties instead (custom object types are not in the standard type list).

    Docs ↗
  • Get Meeting

    Get a single meeting engagement from HubSpot by its id, with a default set of meeting properties. Add Additional properties to retrieve to include more. Example: Object ID 123. Returns the meeting record (title, body, start/end time).

    Docs ↗
  • Get Deal

    Get a single deal from HubSpot by its id, with a default set of deal properties. Add Additional properties to retrieve to include more (use Get Properties for deals). Example: Object ID 123, Additional properties ["amount", "dealstage"]. Returns the deal record.

    Docs ↗
  • Get CRM Objects

    Fetch one or more CRM objects by their IDs in a single request. Returns the requested properties for each object. Use Search CRM Objects first to find record IDs, then use this tool to fetch full details. Max 100 IDs per request. Supports standard object types only. For custom objects, use Get Custom Object instead.

    Docs ↗
  • Get Contact

    Get a single contact from HubSpot by its id, with a default set of contact properties. Add Additional properties to retrieve to include more (use Get Properties for contacts). Look up the id with Search CRM by email if you only have an address. Example: Object ID 123, Additional properties ["jobtitle"]. Returns the contact record.

    Docs ↗
  • Get Company

    Get a single company from HubSpot by its id, with a default set of company properties. Add Additional properties to retrieve (internal names; use Get Properties for companies) to include more. Example: Object ID 123, Additional properties ["industry", "numberofemployees"]. Returns the company record.

    Docs ↗
  • Get Associated Meetings

    List meetings associated with a contact, company, or deal in HubSpot. Set From Object Type and Object ID (for contacts you may pass an email instead of the numeric id). Optionally narrow with Timeframe (today, this_week, this_month, last_month, or custom with Start/End Date), or set Most Recent to return only the latest meeting. Returns up to 100 meetings with default meeting properties. Example: From Object Type contacts, Object ID [email protected], Timeframe this_month.

    Docs ↗
  • Retrieve Workflows

    Retrieve a list of all workflows.

    Docs ↗
  • Retrieve Workflow Emails

    Retrieve emails sent by a workflow by ID.

    Docs ↗
  • Retrieve Workflow Details

    Retrieve detailed information about a specific workflow.

    Docs ↗
  • List Pipeline Options

    Retrieves available options for the Pipeline field.

  • List Threads

    Retrieves a list of threads.

    Docs ↗
  • List Templates

    Retrieves a list of templates.

    Docs ↗
  • List Template Path Options

    Retrieves available options for the Template Path field.

  • List Pages

    Retrieves a list of site pages.

    Docs ↗
  • List Object Schema Options

    Retrieves available options for the Object Schema field.

  • List Messages

    Retrieves a list of messages in a thread.

    Docs ↗
  • List Marketing Events

    Retrieves a list of marketing events.

    Docs ↗
  • List Marketing Emails

    Retrieves a list of marketing emails.

    Docs ↗
  • List Inboxes

    Retrieves a list of inboxes.

    Docs ↗
  • List Forms

    Retrieves a list of forms.

    Docs ↗
  • List Form Options

    Retrieves available options for the Form field.

  • List File URL Options

    Retrieves available options for the File URL field.

  • List Pipeline Options

    Retrieves available options for the Pipeline field.

  • List Custom Object Type Options

    Retrieves available options for the Custom Object Type field.

  • List Channels

    Retrieves a list of channels.

    Docs ↗
  • List Campaigns

    Retrieves a list of campaigns.

    Docs ↗
  • List Blog Posts

    Retrieves a list of blog posts.

    Docs ↗
  • Get Subscription Preferences

    Retrieves the subscription preferences for a contact.

    Docs ↗
  • Get Sequence Enrollment

    Retrieve a contact's sequence enrollment status.

    Docs ↗
  • Get Inbox

    Retrieves a single inbox by its ID.

    Docs ↗
  • Get Channel

    Retrieves a single channel by its ID.

    Docs ↗
  • Get Blog Post Draft

    Retrieves the draft version of a blog post.

    Docs ↗
  • Get Associated Emails

    Retrieves emails associated with a specific object (contact, company, or deal).

    Docs ↗

Write to HubSpot · 52

  • Update Thread

    Updates an existing thread's status. To archive a thread, use the Archive Thread action; to restore an archived thread, use the Unarchive Thread action. HubSpot's PATCH endpoint does not support either operation via a status change.

    Docs ↗
  • Unarchive Thread

    Restores a previously-archived thread, returning it to the active inbox. Sends PATCH with body { archived: false }, the only restore path HubSpot's API supports. The Thread ID dropdown lists archived threads.

    Docs ↗
  • Enroll Contact Into Workflow

    Add a contact to a workflow. Note: The Workflows API currently only supports contact-based workflows and is only available for Marketing Hub Enterprise accounts.

    Docs ↗
  • Book Meeting on Meeting Link

    Book a meeting on a HubSpot meeting scheduling page. Creates a calendar event for the organizer and registers the booker as a contact.

    Docs ↗
  • Archive Thread

    Archives a thread (soft delete). The thread is hidden from active views but can be restored via the HubSpot UI or by listing archived threads.

    Docs ↗
  • Add Note to Contact

    MCP and AI agents: Prefer this action when the user wants to leave a note on a HubSpot contact using a contact ID and note text. Exposes only hubspot, contactId, and noteBody (no engagement-type step, no reloadProps, no dynamic HubSpot schema fields). Do not use Create Engagement for this workflow. For every writable note property or non-contact associations, use Create Note instead.

    Docs ↗
  • Update Lead

    Update a lead in HubSpot by id. Set Object ID and put the fields to change in Object Properties as HubSpot internal names. Look up the id with Search CRM if you only have a name. Example: Object ID 123, Object Properties { "hs_lead_name": "Site B Expansion - Priority" }. Returns the updated lead.

    Docs ↗
  • Update Deal

    Update a deal in HubSpot by id. Set Object ID and put the fields to change in Object Properties as HubSpot internal names. Look up the id with Search CRM if you only have a name. Example: Object ID 123, Object Properties { "dealstage": "closedwon", "amount": "90000" }. Returns the updated deal.

    Docs ↗
  • Update Custom Object

    Update a custom object record in HubSpot by id. Set Custom Object Type (the object's fullyQualifiedName, e.g. p_pets) and Object ID, and put the fields to change in Object Properties. Example: Custom Object Type p_pets, Object ID 123, Object Properties { "birthday": "1993-06-12" }. Returns the updated record.

    Docs ↗
  • Update CRM Object

    Update an existing CRM record by ID. Pass only the properties you want to change — unspecified properties are left unchanged. Use Search CRM Objects to find the record ID, Search Properties to discover available fields, and Get Properties to find valid enum values.

    Docs ↗
  • Update Contact

    Update a contact in HubSpot by id. Set Object ID and put the fields to change in Object Properties as HubSpot internal names (only the fields you pass are modified). If you don't have the id, look it up first with Search CRM (by email, or by name). Example: Object ID 123, Object Properties { "jobtitle": "Chief Paleontologist" }. Returns the updated contact.

    Docs ↗
  • Update Company

    Update a company in HubSpot by id. Set Object ID and put the fields to change in Object Properties as HubSpot internal names (only the fields you pass are modified). Look up the id with Search CRM if you only have a name. Example: Object ID 123, Object Properties { "phone": "555-0100", "industry": "BIOTECHNOLOGY" }. Returns the updated company.

    Docs ↗
  • Create Ticket

    Create a support ticket in HubSpot. Set Ticket Name, Pipeline, and Pipeline Stage (use List Pipelines and Stages for tickets to get valid ids), and put extra fields in Object Properties. Example: subject Login broken, hs_pipeline 0, hs_pipeline_stage 1, Object Properties { "hs_ticket_priority": "HIGH" }. Returns the created ticket with its id.

    Docs ↗
  • Create Task

    Create a task engagement in HubSpot. Put task fields in Object Properties as HubSpot internal names (hs_task_subject, hs_task_body, hs_task_status, hs_task_priority); hs_timestamp is defaulted for you. Optionally associate it with a record via Associated Object Type/ID + Association Type. Example: Object Properties { "hs_task_subject": "Call Art Vandelay", "hs_task_status": "NOT_STARTED", "hs_task_priority": "HIGH" }. Returns the created task with its id.

    Docs ↗
  • Create or Update Contact

    Create a contact in HubSpot, or update it when one with the same email already exists (enable Update If Exists). Put contact fields in Object Properties as HubSpot internal names. Example: Object Properties { "email": "[email protected]", "firstname": "Ada", "jobtitle": "CTO" }. Returns the created or updated contact with its id.

    Docs ↗
  • Create Note

    Create a HubSpot CRM note. Put the note text in Object Properties as hs_note_body (e.g. { "hs_note_body": "Reviewed the Q3 numbers" }). For only a contact ID + note body, Add Note to Contact is simpler. To associate the note with another record, supply toObjectType, toObjectId, and associationType together.

    Docs ↗
  • Create Meeting

    Create a meeting engagement in HubSpot. Put meeting fields in Object Properties (hs_meeting_title, hs_meeting_body, hs_meeting_start_time, hs_meeting_end_time as ISO-8601); hs_timestamp defaults to the start time. Set Associated Object Type and optionally link a record via Associated Object ID + Association Type. Example: Object Properties { "hs_meeting_title": "Kickoff", "hs_meeting_start_time": "2026-08-27T14:00:00Z", "hs_meeting_end_time": "2026-08-27T15:00:00Z" }. Returns the created meeting with its id.

    Docs ↗
  • Create Lead

    Create a lead in HubSpot associated with an existing contact. Set Contact ID (the contact to link) and put lead fields in Object Properties as HubSpot internal names. Example: Contact ID 12345, Object Properties { "hs_lead_name": "Isla Nublar Opportunity" }. Returns the created lead with its id.

    Docs ↗
  • Create Engagement

    Create a task, meeting, email, call, or note engagement with optional associations. If the request does not make the engagement type clear, ask which type (note, task, meeting, email, or call) before creating rather than guessing. Set Engagement Type and pass engagement fields in Object Properties (HubSpot property names, e.g. hs_note_body for notes). No reloadProps step and no CONFIGURE_COMPONENT requirement: association fields accept raw HubSpot IDs (use Search CRM or the Associations API to resolve associationType when needed). For only a note on a contact by ID, Add Note to Contact (hubspot-add-note-to-contact) is still simpler.

    Docs ↗
  • Create Deal

    Create a deal in HubSpot. Set Deal Name, Pipeline, and Stage, and put any extra fields in Object Properties as HubSpot internal names. Example: Deal Name InGen Annual Contract, Pipeline default, Stage appointmentscheduled, Object Properties { "amount": "250000", "closedate": "2026-09-23" }. Returns the created deal with its id.

    Docs ↗
  • Create Custom Object

    Create a custom object record in HubSpot. Set Custom Object Type to the object's fullyQualifiedName (e.g. p_pets; use List Custom Object Schemas to find it) and put fields in Object Properties. Example: Custom Object Type p_pets, Object Properties { "pet_name": "Rexy" }. Returns the created record with its id.

    Docs ↗
  • Create CRM Object

    Create a new CRM record (contact, company, deal, ticket, etc.). Pass property values as a JSON object in the properties parameter. Use Search Properties to discover available fields for the object type, Get Properties to find valid enum values (e.g. lifecyclestage, dealstage), and List Pipelines and Stages to find valid pipeline/stage IDs for deals and tickets. Use List Owners to find valid hubspot_owner_id values.

    Docs ↗
  • Create Company

    Create a company in HubSpot. Put the company fields in Object Properties as a JSON object of HubSpot internal property names (use Get Properties for companies to discover them). Example: { "name": "InGen", "domain": "ingen.com", "industry": "BIOTECHNOLOGY" }. Returns the created company with its id.

    Docs ↗
  • Create Communication

    Log a WhatsApp, LinkedIn, or SMS communication in HubSpot. Put the message fields in Object Properties (hs_communication_channel_type = SMS | WHATS_APP | LINKEDIN_MESSAGE, hs_communication_body); hs_communication_logged_from and hs_timestamp are set for you. Optionally associate it with a record via Associated Object Type/ID + Association Type. Example: Object Properties { "hs_communication_channel_type": "SMS", "hs_communication_body": "Reminder: call at 9am" }. Returns the created communication with its id.

    Docs ↗
  • Create Association

    Create an association (link) between two CRM records. For example, associate a contact with a company, a deal with a contact, or a ticket with a company. Common association type IDs: contact→company (1), company→contact (2), deal→contact (3), contact→deal (4), deal→company (5), company→deal (6), ticket→contact (15), contact→ticket (16), ticket→company (26), company→ticket (25).

    Docs ↗
  • Update Page

    Update a page in Hubspot.

    Docs ↗
  • Update Landing Page

    Update a landing page in HubSpot.

    Docs ↗
  • Update Fields on the Form

    Update some of the form definition components.

    Docs ↗
  • Update Blog Post

    Updates an existing blog post in HubSpot.

    Docs ↗
  • Update Blog Post Draft

    Updates the draft version of an existing blog post in HubSpot.

    Docs ↗
  • Send Message

    Sends a message to a thread.

    Docs ↗
  • Schedule Blog Post

    Schedules a blog post to be published at a specified time.

    Docs ↗
  • Retrieve Migrated Workflow Mappings

    Retrieve the IDs of v3 workflows that have been migrated to the v4 API.

    Docs ↗
  • Push Blog Post Draft Live

    Pushes a blog post draft live, making it the published version.

    Docs ↗
  • Enroll Contact in Sequence

    Enroll a contact into a HubSpot sequence.

    Docs ↗
  • Delete a Workflow

    Delete a workflow by ID.

    Docs ↗
  • Create a New Workflow

    Create a new workflow.

    Docs ↗
  • Create Page

    Create a page in HubSpot.

    Docs ↗
  • Create Landing Page

    Create a landing page in Hubspot.

    Docs ↗
  • Create Form

    Create a form in HubSpot.

    Docs ↗
  • Create Marketing Email

    Create a marketing email in Hubspot.

    Docs ↗
  • Create Contact Workflow

    Create a contact workflow in Hubspot.

    Docs ↗
  • Create Blog Post

    Creates a new blog post in HubSpot.

    Docs ↗
  • Create Associations

    Create associations between objects.

    Docs ↗
  • Clone Site Page

    Clone a site page in Hubspot.

    Docs ↗
  • Clone Marketing Email

    Clone a marketing email in HubSpot.

    Docs ↗
  • Batch Upsert Companies

    Upsert a batch of companies in Hubspot.

    Docs ↗
  • Batch Update Companies

    Update a batch of companies in Hubspot.

    Docs ↗
  • Batch Create or Update Contact

    Create or update a batch of contacts by its ID or email.

    Docs ↗
  • Batch Create Companies

    Create a batch of companies in Hubspot.

    Docs ↗
  • Add Contact to List

    Adds a contact to a specific static list.

    Docs ↗
  • Add Comment

    Adds a comment to a thread.

    Docs ↗

Pair HubSpot with your ERP

Leo connects HubSpot to the ERP your business already runs on: the records it reads in HubSpot land in your ERP, and what changes in the ERP flows back.

Odoo logo
HubSpot + Odoo
See Odoo →
NetSuite logo
HubSpot + NetSuite
See NetSuite →

How it works

  1. 01
    Connect HubSpot

    Authorize HubSpot once, in a couple of clicks. Leo only gets the permissions you grant.

  2. 02
    Describe what you need

    In plain language: the dashboard, portal or agent you want across HubSpot and your ERP. No code, no mapping spreadsheets.

  3. 03
    Run it

    Leo builds it, you review, it goes live. Agents run on a schedule or on events, under the guardrails you set.

HubSpot integration: questions

What can Leo do in HubSpot?
Leo has 108 HubSpot actions available: 56 read data and 52 create or update it. Any of them can be combined with your ERP data in an app or an agent.
Which ERPs does the HubSpot integration work with?
Odoo and NetSuite today, through connectors we build and maintain ourselves. HubSpot connects through our connector network, so the same app or agent can use both sides.
Is my data safe?
You authorize HubSpot yourself and choose the permissions. Leo acts within them, every action is logged, and you can revoke the connection at any time.

More crm integrations

  • Salesforce logoSalesforce
  • Zoho CRM logoZoho CRM
  • Pipedrive logoPipedrive