Get account (yekar.hubspot.get-account) | Read | The HubSpot account this connection points at - portal (hub) id, account type, time zone, currency and UI domain. Call this to verify the connection works and to learn the portal id and time zone that date-valued properties are interpreted in. Needs the private app's oauth scope. |
List object types (yekar.hubspot.list-object-types) | Read | Every CRM object type this portal has: HubSpot's standard ones (contacts, companies, deals, tickets, …) plus the portal's custom objects with their objectTypeId, labels, primary display property and required properties. Start here when you don't know what the portal calls something - every type listed works with the generic record tools. |
List properties (yekar.hubspot.list-properties) | Read | The properties an object type actually has in THIS portal - internal name, label, type, field type, allowed option values, and whether it is calculated (read-only). HubSpot portals customise their schema heavily, so call this before creating or updating a record rather than guessing property names. Filter with search when a portal has hundreds. |
List owners (yekar.hubspot.list-owners) | Read | The portal's owners (HubSpot users records can be assigned to) - owner id, email and name. The hubspot_owner_id property on any record takes one of these ids, never an email or a user id, so resolve the person here before assigning a record, note or task. |
List pipelines (yekar.hubspot.list-pipelines) | Read | An object type's pipelines and their stages, in display order - for deals and tickets. Deal and ticket stage properties store opaque stage IDS, so resolve the stage you mean here before creating or moving a record; guessing a label will fail validation. |
List records (yekar.hubspot.list-records) | Read | A page of records of any CRM object type, oldest id first, with cursor paging. Works for contacts, companies, deals, tickets, line items, products, notes, tasks and any custom object. Ask for the properties you need - HubSpot returns only a small default set otherwise. This endpoint reports no total; use Search records to count or to filter. |
Get record (yekar.hubspot.get-record) | Read | One record of any CRM object type, by HubSpot id or by a unique property (idProperty: "email" for a contact, "domain" for a company) - so you can look someone up without knowing their internal id. Ask for the properties you need and optionally the ids of associated records. |
Search records (yekar.hubspot.search-records) | Read | Search any CRM object type by free text and/or property filters, returning HubSpot's own total match count. Filter groups are ORed and the filters inside each are ANDed. This is the tool to use whenever you need a COUNT or a filtered set - List records neither filters nor counts. Note that search is eventually consistent and stops paging at 10,000 results. |
Batch read records (yekar.hubspot.batch-read-records) | Read | Read up to 100 records of one object type in a single call, by id or by a unique property such as email. Far cheaper against HubSpot's rate limit than looping Get record. Ids that do not resolve come back in missing rather than failing the whole call. |
Create record (yekar.hubspot.create-record) | Write | Create a record of any CRM object type - contact, company, deal, ticket, line item, product or custom object - from a property map. Call List properties first: property names are portal-specific, and deal/ticket stages take stage IDS from List pipelines. Creating a contact whose email already exists is a conflict that reports the existing id. To link the new record to others, call Associate records afterwards. |
Update record (yekar.hubspot.update-record) | Write | Set properties on an existing record of any CRM object type. Only the properties you pass are touched - an empty string clears one. Moving a deal or ticket between stages is an update to dealstage / hs_pipeline_stage with a stage id from List pipelines; completing a task is an update to hs_task_status. |
Upsert records (yekar.hubspot.upsert-records) | Write | Create-or-update up to 100 records in one call, matched on a unique property such as email or domain. This is the converging write: running it twice with the same input leaves the same records, so prefer it over Create record whenever the data has a natural key. Also the right answer to a 'contact already exists' conflict. |
Delete record (yekar.hubspot.delete-record) | Write | Archive a record of any CRM object type. This is HubSpot's delete: the record goes to the recycling bin (restorable in the UI for roughly 90 days, still readable with archived: true) rather than being erased. It disappears from lists, reports and active automations straight away. |
List associations (yekar.hubspot.list-associations) | Read | The records of one object type associated with a given record - a contact's companies and deals, a deal's line items, a company's tickets. Returns the associated ids plus any association labels the portal has defined (unlabelled default associations have none). Use Batch read records to turn the ids into full records. |
Associate records (yekar.hubspot.associate-records) | Write | Link two records with HubSpot's default association for their types - put a contact on a company, a deal on a contact, a note on a ticket. The association is bidirectional and the default type is resolved by HubSpot, so no association type id is needed. Re-running is harmless. |
Disassociate records (yekar.hubspot.disassociate-records) | Write | Remove the link between two records. This removes every association type between them, labelled ones included, and deletes neither record. Re-running on an already-unlinked pair is harmless. |
Create note (yekar.hubspot.create-note) | Write | Write a note onto one or more records' timelines - the standard way for an agent to record what it found or did. The body is rendered as HTML. At least one association is required, because an unassociated note is invisible in the HubSpot UI. |
Create task (yekar.hubspot.create-task) | Write | Create a task in HubSpot with a subject, due date, priority and assignee, optionally attached to records. Assign it to an owner (see List owners) or it lands in no queue. To complete or reassign an existing task, use Update record on the tasks object type - there is no separate tool for that. |
Log activity (yekar.hubspot.log-activity) | Write | Log a call, meeting or email that already happened onto one or more records' timelines. One observable effect - the type only selects which HubSpot object and property names are used. This records history; it does not place a call, book a meeting or send an email. |
List record activity (yekar.hubspot.list-record-activity) | Read | A record's timeline - its notes, calls, meetings, emails and tasks merged into one list, newest first. Answers 'what has happened with this account lately' in a single call instead of five association lookups. The response reports the true total per activity kind, so you can tell when you are seeing only the most recent slice. |
Search lists (yekar.hubspot.search-lists) | Read | Find the portal's lists (segments) by name and processing type, with HubSpot's own total. The processing type matters before you try to change membership: DYNAMIC lists compute their members from filters and reject membership writes, while MANUAL and SNAPSHOT lists accept them. |
Get list (yekar.hubspot.get-list) | Read | One list (segment) by id, or by exact name plus object type - its size, processing type and status. Check processingType before attempting a membership change: DYNAMIC lists are filter-driven and cannot be edited by adding or removing records. |
List list memberships (yekar.hubspot.list-memberships) | Read | The record ids in a list, with HubSpot's own total membership count and cursor paging. Returns ids only; pair it with Batch read records to get the underlying contacts or companies. |
Update list memberships (yekar.hubspot.update-list-memberships) | Write | Add records to and/or remove records from a MANUAL or SNAPSHOT list in a single operation. DYNAMIC lists are rejected: their membership is computed from the list's filters, so change the filters or the records' properties instead. The response reports which additions HubSpot actually applied - a record already in the list is not re-added. |
List forms (yekar.hubspot.list-forms) | Read | The portal's marketing forms with their field definitions - id, name, type and each field's internal name and whether it is required. Find the form you want here, then use Submit form to push a submission through it. |
Get form (yekar.hubspot.get-form) | Read | One form's full definition - every field's internal name, label, type, target object and whether it is required. Read this before Submit form: the submission is keyed by the fields' INTERNAL names, and omitting a required one is rejected. |
Submit form (yekar.hubspot.submit-form) | Write | Submit values to a HubSpot form as if a visitor had filled it in - creating or updating the contact through the form's own pipeline, which also triggers the automations and notifications the form is wired to. Field keys are the form's internal field names (see Get form). This is the only tool that talks to api.hsforms.com. |
List marketing emails (yekar.hubspot.list-marketing-emails) | Read | The portal's marketing emails - name, subject line, state (draft, scheduled, published), sender and publish date. Read-only: this integration does not create, edit or send marketing emails. Requires the private app's marketing-email scope and a Marketing Hub plan that includes the email API. |
Get marketing email (yekar.hubspot.get-marketing-email) | Read | One marketing email with its performance counters - sends, deliveries, opens, clicks, bounces and unsubscribes, plus HubSpot's own computed ratios. The counters come straight from HubSpot's statistics endpoint and are not recomputed here. Read-only. |
List campaigns (yekar.hubspot.list-campaigns) | Read | The portal's marketing campaigns with whichever campaign properties you ask for - names, goals, budgets and the attribution metrics HubSpot computes. Read-only, and useful for answering 'which campaign drove this' questions alongside the CRM records. Requires a Marketing Hub plan that includes campaigns. |