HubSpot
Use HubSpot for CRM facts: deal status, amount, stage, owner, forecast,
associated account context, contacts, companies, and tickets.
Analytics' HubSpot actions use its native provider credential or granted
workspace connection. A missing optional HubSpot MCP server does not mean
HubSpot is disconnected. Never send the user to HubSpot MCP setup to answer an
Analytics data question. If availability is unclear, call data-source-status
with key: "hubspot"; when it reports HubSpot configured, run the native
HubSpot action directly.
hubspot-deals is a legacy-named deal analytics shortcut, not the boundary of
the HubSpot integration. If the user asks for any HubSpot object, endpoint,
association, property, filter, batch read/write, or API version that the typed
actions do not expose, inspect the provider catalog/docs and call
provider-api-request with provider: "hubspot".
Actions
account-deep-dive — first choice for named account/deal deep dives. It
searches matching HubSpot deals, loads associated companies, contacts,
tickets, notes, and emails, then pairs that CRM context with Gong evidence.
hubspot-deals — deals with normalized stage, pipeline, owner, forecast, and
NBM fields. For a named customer/deal/account, pass query; do not fetch all
deals first. For a deal cohort, use structured filters such as product,
pipeline, closedStatus, closedDateFrom, and closedDateTo.
hubspot-records — generic HubSpot search/list for contacts, companies,
deals, and tickets. Use this to enrich a deep dive with company, contact, or
ticket records.
hubspot-pipelines / hubspot-metrics — pipeline definitions and aggregate
sales metrics.
- For HubSpot property metadata (available fields before requesting custom
ones) there is no first-class action — call
provider-api-request (provider
hubspot, e.g. /crm/v3/properties/deals) via provider-api-docs.
provider-api-request with provider: "hubspot" — arbitrary HubSpot HTTP
API calls when first-class actions are too narrow.
Pipeline Stage Timing — Use Stage-Entry Date Fields
Always use hs_v2_date_entered_{stageId} for deterministic pipeline-stage
timing, not keyword or amount heuristics:
- Each pipeline stage has a unique numeric ID (visible in pipeline definitions).
- The property
hs_v2_date_entered_{stageId} records the exact timestamp when
the deal first entered that stage. Use this to filter deals that reached a
specific stage within a date window.
- Why this matters: heuristic filters (e.g.,
amount > $30K, keyword
searches) have been found to diverge from stage-date filters by ~48% — nearly
half the deals are different. Stage-entry date fields provide verifiable,
auditable results.
To discover stage IDs, call hubspot-pipelines first and read the stageId
fields in the returned pipeline structure.
Example use: to count deals that reached "Qualified Opportunity" stage in Q1:
provider-api-request(
provider: "hubspot",
path: "/crm/v3/objects/deals/search",
method: "POST",
body: {
"filterGroups": [{
"filters": [{
"propertyName": "hs_v2_date_entered_<stageId>",
"operator": "BETWEEN",
"value": "2026-01-01",
"highValue": "2026-03-31"
}]
}],
"properties": ["dealname", "amount", "hs_v2_date_entered_<stageId>"]
}
)
Multi-Dimensional Closed-Lost Analysis
Deals are rarely lost for a single reason. When analyzing closed-lost deals:
- Use a multi-factor matrix with notation: primary factor (★★), contributing
factor (★), possible factor (~).
- Track 8-10 common loss factors per deal: Budget, Product Fit, Implementation
Friction, Competitive Loss, Security/Compliance, Wrong Persona/Champion,
Timeline Mismatch, Support/Success Gaps, etc.
- Identify combination patterns — e.g., "Product Fit + Implementation Friction"
may affect multiple deals simultaneously.
- Do not force a single root cause categorization. Real losses are
multi-dimensional, and flattening to one reason distorts win/loss patterns.
- Report both the count of deals per single factor AND the top multi-factor
combinations.
Patterns
For account or deal deep dives:
- Call
data-source-status if you are not sure HubSpot is connected.
- Call
account-deep-dive with query set to the company, domain, deal, or
opportunity name. Use its associated companies, contacts, tickets, notes, and
emails as the CRM backbone of the answer.
- If a specific CRM gap remains, call
hubspot-deals or hubspot-records
with bounded filters for that missing object only.
- Cite which records you inspected and keep unsupported associations as caveats.
Example:
account-deep-dive(query: "The Knot", days: 180, gongLimit: 10, transcriptLimit: 5)
hubspot-deals(query: "The Knot", limit: 10)
hubspot-records(objectType: "companies", query: "theknot.com", limit: 5)
hubspot-records(objectType: "contacts", query: "theknot.com", limit: 25)
Do not use warehouse copies of HubSpot as a substitute unless the user asks for
the warehouse data or the live HubSpot action is unavailable and the user chooses
that fallback.
For deal cohorts:
- Translate the cohort definition into structured
hubspot-deals filters.
Example: "new business deals where products field is Publish, closed won in
the last 12 months" means product: "Publish", pipeline: "New Business",
closedStatus: "won", and explicit close-date bounds.
- Do not use
query for property-specific filters. query: "Publish" is a
broad HubSpot search across deal text and can include unrelated deals.
- Report the cohort count, filters, and date window before synthesizing. If the
count looks too low, inspect deal property metadata
(
/crm/v3/properties/deals) or use stage-entry date fields via
provider-api-request.
- When pairing a cohort with Gong, use returned deal/company/contact evidence
to run bounded Gong follow-ups and state Gong coverage separately from the
HubSpot cohort size.
If hubspot-deals still cannot express the needed HubSpot query, do not stop
or approximate. Call provider-api-catalog(provider: "hubspot"), fetch the
HubSpot docs/spec with provider-api-docs if needed, then call
provider-api-request(provider: "hubspot", ...) with the exact CRM endpoint,
filters, properties, associations, and pagination body.
1---2name: hubspot3description: Query HubSpot CRM for deals, companies, contacts, tickets, owners, and account/deal context. Use when the user asks for HubSpot data or connection status.4---56# HubSpot78Use HubSpot for CRM facts: deal status, amount, stage, owner, forecast,9associated account context, contacts, companies, and tickets.1011Analytics' HubSpot actions use its native provider credential or granted12workspace connection. A missing optional HubSpot MCP server does not mean13HubSpot is disconnected. Never send the user to HubSpot MCP setup to answer an14Analytics data question. If availability is unclear, call `data-source-status`15with `key: "hubspot"`; when it reports HubSpot configured, run the native16HubSpot action directly.1718`hubspot-deals` is a legacy-named deal analytics shortcut, not the boundary of19the HubSpot integration. If the user asks for any HubSpot object, endpoint,20association, property, filter, batch read/write, or API version that the typed21actions do not expose, inspect the provider catalog/docs and call22`provider-api-request` with `provider: "hubspot"`.2324## Actions2526- `account-deep-dive` — first choice for named account/deal deep dives. It27 searches matching HubSpot deals, loads associated companies, contacts,28 tickets, notes, and emails, then pairs that CRM context with Gong evidence.29- `hubspot-deals` — deals with normalized stage, pipeline, owner, forecast, and30 NBM fields. For a named customer/deal/account, pass `query`; do not fetch all31 deals first. For a deal cohort, use structured filters such as `product`,32 `pipeline`, `closedStatus`, `closedDateFrom`, and `closedDateTo`.33- `hubspot-records` — generic HubSpot search/list for contacts, companies,34 deals, and tickets. Use this to enrich a deep dive with company, contact, or35 ticket records.36- `hubspot-pipelines` / `hubspot-metrics` — pipeline definitions and aggregate37 sales metrics.38- For HubSpot **property metadata** (available fields before requesting custom39 ones) there is no first-class action — call `provider-api-request` (provider40 `hubspot`, e.g. `/crm/v3/properties/deals`) via `provider-api-docs`.41- `provider-api-request` with `provider: "hubspot"` — arbitrary HubSpot HTTP42 API calls when first-class actions are too narrow.4344## Pipeline Stage Timing — Use Stage-Entry Date Fields4546**Always use `hs_v2_date_entered_{stageId}` for deterministic pipeline-stage47timing**, not keyword or amount heuristics:4849- Each pipeline stage has a unique numeric ID (visible in pipeline definitions).50- The property `hs_v2_date_entered_{stageId}` records the exact timestamp when51 the deal first entered that stage. Use this to filter deals that reached a52 specific stage within a date window.53- **Why this matters**: heuristic filters (e.g., `amount > $30K`, keyword54 searches) have been found to diverge from stage-date filters by ~48% — nearly55 half the deals are different. Stage-entry date fields provide verifiable,56 auditable results.5758To discover stage IDs, call `hubspot-pipelines` first and read the `stageId`59fields in the returned pipeline structure.6061Example use: to count deals that reached "Qualified Opportunity" stage in Q1:6263```64provider-api-request(65 provider: "hubspot",66 path: "/crm/v3/objects/deals/search",67 method: "POST",68 body: {69 "filterGroups": [{70 "filters": [{71 "propertyName": "hs_v2_date_entered_<stageId>",72 "operator": "BETWEEN",73 "value": "2026-01-01",74 "highValue": "2026-03-31"75 }]76 }],77 "properties": ["dealname", "amount", "hs_v2_date_entered_<stageId>"]78 }79)80```8182## Multi-Dimensional Closed-Lost Analysis8384**Deals are rarely lost for a single reason.** When analyzing closed-lost deals:8586- Use a multi-factor matrix with notation: primary factor (★★), contributing87 factor (★), possible factor (~).88- Track 8-10 common loss factors per deal: Budget, Product Fit, Implementation89 Friction, Competitive Loss, Security/Compliance, Wrong Persona/Champion,90 Timeline Mismatch, Support/Success Gaps, etc.91- Identify combination patterns — e.g., "Product Fit + Implementation Friction"92 may affect multiple deals simultaneously.93- Do not force a single root cause categorization. Real losses are94 multi-dimensional, and flattening to one reason distorts win/loss patterns.95- Report both the count of deals per single factor AND the top multi-factor96 combinations.9798## Patterns99100For account or deal deep dives:1011021. Call `data-source-status` if you are not sure HubSpot is connected.1032. Call `account-deep-dive` with `query` set to the company, domain, deal, or104 opportunity name. Use its associated companies, contacts, tickets, notes, and105 emails as the CRM backbone of the answer.1063. If a specific CRM gap remains, call `hubspot-deals` or `hubspot-records`107 with bounded filters for that missing object only.1084. Cite which records you inspected and keep unsupported associations as caveats.109110Example:111112```txt113account-deep-dive(query: "The Knot", days: 180, gongLimit: 10, transcriptLimit: 5)114hubspot-deals(query: "The Knot", limit: 10)115hubspot-records(objectType: "companies", query: "theknot.com", limit: 5)116hubspot-records(objectType: "contacts", query: "theknot.com", limit: 25)117```118119Do not use warehouse copies of HubSpot as a substitute unless the user asks for120the warehouse data or the live HubSpot action is unavailable and the user chooses121that fallback.122123For deal cohorts:1241251. Translate the cohort definition into structured `hubspot-deals` filters.126 Example: "new business deals where products field is Publish, closed won in127 the last 12 months" means `product: "Publish"`, `pipeline: "New Business"`,128 `closedStatus: "won"`, and explicit close-date bounds.1292. Do not use `query` for property-specific filters. `query: "Publish"` is a130 broad HubSpot search across deal text and can include unrelated deals.1313. Report the cohort count, filters, and date window before synthesizing. If the132 count looks too low, inspect deal property metadata133 (`/crm/v3/properties/deals`) or use stage-entry date fields via134 `provider-api-request`.1354. When pairing a cohort with Gong, use returned deal/company/contact evidence136 to run bounded Gong follow-ups and state Gong coverage separately from the137 HubSpot cohort size.138139If `hubspot-deals` still cannot express the needed HubSpot query, do not stop140or approximate. Call `provider-api-catalog(provider: "hubspot")`, fetch the141HubSpot docs/spec with `provider-api-docs` if needed, then call142`provider-api-request(provider: "hubspot", ...)` with the exact CRM endpoint,143filters, properties, associations, and pagination body.