Skip to content

HubSpot Platform Guide

HubSpot is JetStack AI’s primary supported platform. This guide covers everything you need to know about how JetStack AI interacts with HubSpot, including supported asset types, required permissions, API constraints, portal tier differences, and platform-specific behaviors that affect implementations and audits.

JetStack AI supports importing and deploying 25+ HubSpot asset types across three plan tiers. Each asset type is fully parsed during import, stored in your Asset Library with all configuration intact, and recreated with proper ID remapping during deployment.

Asset TypeDescriptionKey Capabilities
WorkflowsContact, company, deal, ticket, and custom object workflowsFull action tree, branching logic, enrollment triggers, goal criteria, re-enrollment settings
ListsStatic and dynamic (active) listsAll filter types including TIME_RANGED, property-based, event-based, form submission, page view, and list membership filters
FormsAll form types including embedded, standalone, and pop-upField configuration, progressive profiling, dependent fields, validation rules, submission actions, redirect URLs
EmailsRegular, A/B test, automated, RSS, and blog subscription emailsFull HTML/template content, smart content rules, A/B variants, subscription types, reply-to settings
PipelinesDeal pipelines, ticket pipelines, and custom object pipelinesStage configuration, stage order, probability values, pipeline-level settings
PropertiesContact, company, deal, ticket, and custom object propertiesField type, group assignment, option values, calculated property formulas, display order
Association LabelsCustom association labels between object typesLabel text, association category, inverse labels
Custom ObjectsCustom object schema definitionsObject properties, required properties, searchable properties, association definitions
Asset TypeDescriptionKey Capabilities
Site PagesWebsite pages built on HubSpot CMSTemplate assignment, module content, meta descriptions, featured images, slug configuration
Landing PagesStandalone landing pagesSame as site pages plus conversion-specific settings
TemplatesPage templates, email templates, blog templates, partial templates, global templates, and drag-and-drop (DND) area templatesFull template source code, module references, generated_layouts path resolution
Template ModulesCustom modules used within templatesModule fields, module HTML/CSS/JS, default values, field groups
Blog PostsIndividual blog articlesPost content, author, tags, featured image, meta description, publish date
BlogsBlog configuration (the blog itself, not individual posts)Blog settings, subscription settings, template assignment, listing page configuration
HubDB TablesStructured data tablesColumn definitions, row data, foreign ID columns, published state, CDN caching settings
Email TemplatesCoded email templates (separate from drag-and-drop emails)Template source, smart rules, module references
Asset TypeDescriptionKey Capabilities
DashboardsCustom reporting dashboardsDashboard layout, report placement, filter configuration
ReportsCustom reports and analyticsReport type, data sources, filters, visualization settings
SnippetsReusable text blocks for sales and serviceSnippet content, shortcut text
Goal TemplatesSales and service goal configurationsGoal type, target metrics, tracking periods
Lead ScoresLead scoring rules and configurationsScoring criteria, positive/negative attributes, score thresholds
CRM CardsCustom CRM card definitionsCard properties, data fetch URLs, display configuration
Preview ViewsCustom preview configurationsView settings, display rules
PlaybooksSales/service playbook definitionsPlaybook steps, question types, required fields, outcome tracking
Permission SetsCustom user permission configurationsPermission categories, access levels

When you connect a HubSpot portal to JetStack AI, the OAuth flow requests specific scopes depending on how you intend to use the portal. JetStack AI uses two connection types: Implementation (for importing and deploying assets) and Audit (for running portal audits). You can also connect a portal for both.

ScopeWhat It Enables
contentRead/write access to CMS pages, templates, blog posts, HubDB tables
automationRead/write access to workflows
formsRead/write access to forms
e-commerceRead/write access to products and line items (used by some pipeline features)
crm.objects.contacts.readRead contact records for workflow enrollment context
crm.objects.contacts.writeWrite contact properties during deployment
crm.objects.companies.readRead company records
crm.objects.companies.writeWrite company properties during deployment
crm.objects.deals.readRead deal records and pipeline data
crm.objects.deals.writeWrite deal properties and pipeline stages
crm.objects.custom.readRead custom object schemas and records
crm.objects.custom.writeCreate custom object schemas during deployment
crm.schemas.contacts.readRead contact property definitions
crm.schemas.contacts.writeCreate/update contact properties
crm.schemas.companies.readRead company property definitions
crm.schemas.companies.writeCreate/update company properties
crm.schemas.deals.readRead deal property definitions
crm.schemas.deals.writeCreate/update deal properties
crm.schemas.custom.readRead custom object property definitions
ticketsRead/write access to tickets and ticket pipelines
filesRead/write access to the file manager (for image upload during deployment)

Audit connections request read-only scopes across the same categories. No write scopes are requested for audit-only connections.

HubSpot enforces a rate limit of 100 requests per 10 seconds for OAuth-authenticated apps. This applies globally across all API calls made by the app for a given portal.

  • Exponential backoff — When JetStack AI receives a 429 Too Many Requests response, it waits and retries with exponentially increasing delays
  • Rate limit header parsing — JetStack AI reads the X-HubSpot-RateLimit-Interval-Milliseconds and X-HubSpot-RateLimit-Remaining headers to proactively throttle before hitting limits
  • Per-operation retry — Each individual API call within an import or deployment retries independently, so a rate limit on one call does not fail the entire operation
  • Maximum retries — After a configurable number of retries (default: 3 per call), the operation is marked as failed with a clear error message
OperationTypical API CallsApproximate Duration
Single asset import5-15 calls2-5 seconds
Full workflow import with dependencies50-200 calls30-120 seconds
Full portal audit (Quick Mode)200-500 calls2-5 minutes
Full portal audit (Full Mode)500-2000 calls5-15 minutes
Single asset deployment10-30 calls5-15 seconds
Module deployment (20 assets)200-500 calls2-8 minutes

HubSpot offers four portal tiers, and available features vary significantly between them. JetStack AI adapts to the tier of each connected portal.

FeatureFreeStarterProfessionalEnterprise
WorkflowsNot availableLimitedFullFull
Custom reportsNot availableNot availableFullFull
Calculated propertiesNot availableNot availableFullFull
Custom objectsNot availableNot availableNot availableFull
Lead scoringNot availableNot availableProfessionalAdvanced
Content partitioningNot availableNot availableNot availableFull
Adaptive testing (A/B)Not availableNot availableFullFull
BlogNot availableStarter levelFullFull
HubDBNot availableNot availableFullFull
PlaybooksNot availableNot availableProfessionalFull

When deploying assets to a destination portal, JetStack AI checks whether the target portal’s tier supports each asset type. If you attempt to deploy a workflow to a Free portal or a custom object to a Professional portal, the deployment will fail with a clear tier mismatch error.

Recommendation: Always verify that your destination portal tier supports the asset types you intend to deploy before starting a deployment.

Working with the HubSpot API involves several platform-specific behaviors that JetStack AI handles automatically. Understanding these can help you diagnose issues when they arise.

HubSpot maintains two major API versions, and not all features are available on both:

  • Forms: The v3 Forms API does not expose all field-level configuration. JetStack AI uses the v2 Forms API to capture dependent fields, progressive profiling rules, and certain validation settings that v3 omits.
  • Emails: Marketing email creation uses the v3 API, but certain properties (like campaign group IDs) require v1 endpoints.
  • Templates: Template retrieval and creation use a mix of v2 and v3 calls depending on the template type.

HubSpot templates reference layout modules through a generated_layouts path in the file system. During import, JetStack AI resolves these paths to capture the full template structure. During deployment, the paths are recreated in the destination portal’s file system. If a template references a custom module, that module must be imported and deployed first.

HubSpot associates emails and other marketing assets with campaign groups using internal IDs. These IDs are portal-specific and cannot be transferred between portals. During deployment, JetStack AI creates new campaign groups in the destination portal or maps to existing ones by name.

Some HubSpot features expose data only through internal (non-public) APIs that require CSRF token authentication. The JetStack AI browser extension handles CSRF token acquisition automatically when capturing data that requires these internal endpoints. This primarily affects audit data capture for features like content partitioning settings, internal analytics, and certain pipeline configurations.

HubSpot lists that use TIME_RANGED filter operations have known timezone handling quirks:

  • The API returns an upperBoundEndpointBehavior field (not upperBoundEndpoint — the field name is inconsistent with HubSpot’s own documentation)
  • IANA timezone identifiers (e.g., America/New_York) are rejected on POST; only legacy timezone strings (e.g., US/Eastern) are accepted
  • indexReference.referenceType values of MONTH are rejected — only TODAY and NOW are valid on the creation endpoint

JetStack AI handles all three of these quirks automatically during deployment by remapping field names, converting IANA timezones to their legacy equivalents, and transforming unsupported reference types.

HubSpot has 131+ system properties that are read-only and cannot be created or modified through the API. These include properties like createdate, hs_object_id, hs_pipeline, and many others prefixed with hs_. During deployment, JetStack AI skips these properties automatically rather than failing. If a workflow or list filter references a system property, JetStack AI maps to the existing property in the destination portal rather than attempting to create it.

When deploying properties, if a property with the same internal name already exists in the destination portal but has a different type (e.g., the source has a number field and the destination has a string field), HubSpot rejects the update. JetStack AI handles this by applying a suffix strategy — creating the property with a modified name and logging the discrepancy for manual review.