> ## Documentation Index
> Fetch the complete documentation index at: https://docs.stackone.com/llms.txt
> Use this file to discover all available pages before exploring further.

# HubSpot OAuth 2.0 connector profile – StackOne setup guide

> Set up the OAuth 2.0 connector profile for HubSpot in StackOne. One-time admin setup required before your users can link HubSpot accounts via Hub.

<Warning>Ensure you have Admin privileges for your HubSpot account to create and configure OAuth applications.</Warning>

<Panel>
  <div className="not-prose guides-scope-selector" data-guides-scope-selector data-guide-actions-json="[{&#x22;id&#x22;:&#x22;hubspot_list_associations&#x22;,&#x22;label&#x22;:&#x22;List Associations&#x22;,&#x22;scopes&#x22;:[&#x22;crm.objects.contacts.read&#x22;]},{&#x22;id&#x22;:&#x22;hubspot_create_association&#x22;,&#x22;label&#x22;:&#x22;Create Association&#x22;,&#x22;scopes&#x22;:[&#x22;crm.objects.contacts.write&#x22;]},{&#x22;id&#x22;:&#x22;hubspot_delete_association&#x22;,&#x22;label&#x22;:&#x22;Delete Association&#x22;,&#x22;scopes&#x22;:[&#x22;crm.objects.contacts.write&#x22;]},{&#x22;id&#x22;:&#x22;hubspot_batch_read_associations&#x22;,&#x22;label&#x22;:&#x22;Batch Read Associations&#x22;,&#x22;scopes&#x22;:[&#x22;crm.objects.contacts.read&#x22;]},{&#x22;id&#x22;:&#x22;hubspot_batch_create_associations&#x22;,&#x22;label&#x22;:&#x22;Batch Create Associations&#x22;,&#x22;scopes&#x22;:[&#x22;crm.objects.contacts.write&#x22;]},{&#x22;id&#x22;:&#x22;hubspot_list_contacts&#x22;,&#x22;label&#x22;:&#x22;List Contacts&#x22;,&#x22;scopes&#x22;:[&#x22;crm.objects.contacts.read&#x22;]},{&#x22;id&#x22;:&#x22;hubspot_get_contact&#x22;,&#x22;label&#x22;:&#x22;Get Contact&#x22;,&#x22;scopes&#x22;:[&#x22;crm.objects.contacts.read&#x22;]},{&#x22;id&#x22;:&#x22;hubspot_create_contact&#x22;,&#x22;label&#x22;:&#x22;Create Contact&#x22;,&#x22;scopes&#x22;:[&#x22;crm.objects.contacts.write&#x22;]},{&#x22;id&#x22;:&#x22;hubspot_update_contact&#x22;,&#x22;label&#x22;:&#x22;Update Contact&#x22;,&#x22;scopes&#x22;:[&#x22;crm.objects.contacts.write&#x22;]},{&#x22;id&#x22;:&#x22;hubspot_delete_contact&#x22;,&#x22;label&#x22;:&#x22;Delete Contact&#x22;,&#x22;scopes&#x22;:[&#x22;crm.objects.contacts.write&#x22;]},{&#x22;id&#x22;:&#x22;hubspot_search_contacts&#x22;,&#x22;label&#x22;:&#x22;Search Contacts&#x22;,&#x22;scopes&#x22;:[&#x22;crm.objects.contacts.read&#x22;]},{&#x22;id&#x22;:&#x22;hubspot_batch_create_contacts&#x22;,&#x22;label&#x22;:&#x22;Batch Create Contacts&#x22;,&#x22;scopes&#x22;:[&#x22;crm.objects.contacts.write&#x22;]},{&#x22;id&#x22;:&#x22;hubspot_batch_update_contacts&#x22;,&#x22;label&#x22;:&#x22;Batch Update Contacts&#x22;,&#x22;scopes&#x22;:[&#x22;crm.objects.contacts.write&#x22;]},{&#x22;id&#x22;:&#x22;hubspot_list_companies&#x22;,&#x22;label&#x22;:&#x22;List Companies&#x22;,&#x22;scopes&#x22;:[&#x22;crm.objects.companies.read&#x22;]},{&#x22;id&#x22;:&#x22;hubspot_get_company&#x22;,&#x22;label&#x22;:&#x22;Get Company&#x22;,&#x22;scopes&#x22;:[&#x22;crm.objects.companies.read&#x22;]},{&#x22;id&#x22;:&#x22;hubspot_create_company&#x22;,&#x22;label&#x22;:&#x22;Create Company&#x22;,&#x22;scopes&#x22;:[&#x22;crm.objects.companies.write&#x22;]},{&#x22;id&#x22;:&#x22;hubspot_update_company&#x22;,&#x22;label&#x22;:&#x22;Update Company&#x22;,&#x22;scopes&#x22;:[&#x22;crm.objects.companies.write&#x22;]},{&#x22;id&#x22;:&#x22;hubspot_delete_company&#x22;,&#x22;label&#x22;:&#x22;Delete Company&#x22;,&#x22;scopes&#x22;:[&#x22;crm.objects.companies.write&#x22;]},{&#x22;id&#x22;:&#x22;hubspot_search_companies&#x22;,&#x22;label&#x22;:&#x22;Search Companies&#x22;,&#x22;scopes&#x22;:[&#x22;crm.objects.companies.read&#x22;]},{&#x22;id&#x22;:&#x22;hubspot_batch_create_companies&#x22;,&#x22;label&#x22;:&#x22;Batch Create Companies&#x22;,&#x22;scopes&#x22;:[&#x22;crm.objects.companies.write&#x22;]},{&#x22;id&#x22;:&#x22;hubspot_batch_update_companies&#x22;,&#x22;label&#x22;:&#x22;Batch Update Companies&#x22;,&#x22;scopes&#x22;:[&#x22;crm.objects.companies.write&#x22;]},{&#x22;id&#x22;:&#x22;hubspot_list_deals&#x22;,&#x22;label&#x22;:&#x22;List Deals&#x22;,&#x22;scopes&#x22;:[&#x22;crm.objects.deals.read&#x22;]},{&#x22;id&#x22;:&#x22;hubspot_get_deal&#x22;,&#x22;label&#x22;:&#x22;Get Deal&#x22;,&#x22;scopes&#x22;:[&#x22;crm.objects.deals.read&#x22;]},{&#x22;id&#x22;:&#x22;hubspot_create_deal&#x22;,&#x22;label&#x22;:&#x22;Create Deal&#x22;,&#x22;scopes&#x22;:[&#x22;crm.objects.deals.write&#x22;]},{&#x22;id&#x22;:&#x22;hubspot_update_deal&#x22;,&#x22;label&#x22;:&#x22;Update Deal&#x22;,&#x22;scopes&#x22;:[&#x22;crm.objects.deals.write&#x22;]},{&#x22;id&#x22;:&#x22;hubspot_delete_deal&#x22;,&#x22;label&#x22;:&#x22;Delete Deal&#x22;,&#x22;scopes&#x22;:[&#x22;crm.objects.deals.write&#x22;]},{&#x22;id&#x22;:&#x22;hubspot_search_deals&#x22;,&#x22;label&#x22;:&#x22;Search Deals&#x22;,&#x22;scopes&#x22;:[&#x22;crm.objects.deals.read&#x22;]},{&#x22;id&#x22;:&#x22;hubspot_batch_create_deals&#x22;,&#x22;label&#x22;:&#x22;Batch Create Deals&#x22;,&#x22;scopes&#x22;:[&#x22;crm.objects.deals.write&#x22;]},{&#x22;id&#x22;:&#x22;hubspot_batch_update_deals&#x22;,&#x22;label&#x22;:&#x22;Batch Update Deals&#x22;,&#x22;scopes&#x22;:[&#x22;crm.objects.deals.write&#x22;]},{&#x22;id&#x22;:&#x22;hubspot_list_deal_pipelines&#x22;,&#x22;label&#x22;:&#x22;List Deal Pipelines&#x22;,&#x22;scopes&#x22;:[&#x22;crm.objects.deals.read&#x22;]},{&#x22;id&#x22;:&#x22;hubspot_get_deal_pipeline&#x22;,&#x22;label&#x22;:&#x22;Get Deal Pipeline&#x22;,&#x22;scopes&#x22;:[&#x22;crm.objects.deals.read&#x22;]},{&#x22;id&#x22;:&#x22;hubspot_create_deal_pipeline&#x22;,&#x22;label&#x22;:&#x22;Create Deal Pipeline&#x22;,&#x22;scopes&#x22;:[&#x22;crm.objects.deals.write&#x22;]},{&#x22;id&#x22;:&#x22;hubspot_update_deal_pipeline&#x22;,&#x22;label&#x22;:&#x22;Update Deal Pipeline&#x22;,&#x22;scopes&#x22;:[&#x22;crm.objects.deals.write&#x22;]},{&#x22;id&#x22;:&#x22;hubspot_list_deal_pipeline_stages&#x22;,&#x22;label&#x22;:&#x22;List Deal Pipeline Stages&#x22;,&#x22;scopes&#x22;:[&#x22;crm.objects.deals.read&#x22;]},{&#x22;id&#x22;:&#x22;hubspot_get_deal_pipeline_stage&#x22;,&#x22;label&#x22;:&#x22;Get Deal Pipeline Stage&#x22;,&#x22;scopes&#x22;:[&#x22;crm.objects.deals.read&#x22;]},{&#x22;id&#x22;:&#x22;hubspot_create_deal_pipeline_stage&#x22;,&#x22;label&#x22;:&#x22;Create Deal Pipeline Stage&#x22;,&#x22;scopes&#x22;:[&#x22;crm.objects.deals.write&#x22;]},{&#x22;id&#x22;:&#x22;hubspot_update_deal_pipeline_stage&#x22;,&#x22;label&#x22;:&#x22;Update Deal Pipeline Stage&#x22;,&#x22;scopes&#x22;:[&#x22;crm.objects.deals.write&#x22;]},{&#x22;id&#x22;:&#x22;hubspot_list_owners&#x22;,&#x22;label&#x22;:&#x22;List Owners&#x22;,&#x22;scopes&#x22;:[&#x22;crm.objects.owners.read&#x22;]},{&#x22;id&#x22;:&#x22;hubspot_get_owner&#x22;,&#x22;label&#x22;:&#x22;Get Owner&#x22;,&#x22;scopes&#x22;:[&#x22;crm.objects.owners.read&#x22;]},{&#x22;id&#x22;:&#x22;hubspot_list_crm_objects&#x22;,&#x22;label&#x22;:&#x22;List CRM Objects&#x22;,&#x22;scopes&#x22;:[&#x22;crm.objects.contacts.read&#x22;,&#x22;crm.objects.companies.read&#x22;,&#x22;crm.objects.deals.read&#x22;,&#x22;crm.objects.custom.read&#x22;,&#x22;tickets&#x22;]},{&#x22;id&#x22;:&#x22;hubspot_get_crm_object&#x22;,&#x22;label&#x22;:&#x22;Get CRM Object&#x22;,&#x22;scopes&#x22;:[&#x22;crm.objects.contacts.read&#x22;,&#x22;crm.objects.companies.read&#x22;,&#x22;crm.objects.deals.read&#x22;,&#x22;crm.objects.custom.read&#x22;,&#x22;tickets&#x22;]},{&#x22;id&#x22;:&#x22;hubspot_create_crm_object&#x22;,&#x22;label&#x22;:&#x22;Create CRM Object&#x22;,&#x22;scopes&#x22;:[&#x22;crm.objects.contacts.write&#x22;,&#x22;crm.objects.companies.write&#x22;,&#x22;crm.objects.deals.write&#x22;,&#x22;crm.objects.custom.write&#x22;,&#x22;tickets&#x22;]},{&#x22;id&#x22;:&#x22;hubspot_update_crm_object&#x22;,&#x22;label&#x22;:&#x22;Update CRM Object&#x22;,&#x22;scopes&#x22;:[&#x22;crm.objects.contacts.write&#x22;,&#x22;crm.objects.companies.write&#x22;,&#x22;crm.objects.deals.write&#x22;,&#x22;crm.objects.custom.write&#x22;,&#x22;tickets&#x22;]},{&#x22;id&#x22;:&#x22;hubspot_delete_crm_object&#x22;,&#x22;label&#x22;:&#x22;Delete CRM Object&#x22;,&#x22;scopes&#x22;:[&#x22;crm.objects.contacts.write&#x22;,&#x22;crm.objects.companies.write&#x22;,&#x22;crm.objects.deals.write&#x22;,&#x22;crm.objects.custom.write&#x22;,&#x22;tickets&#x22;]},{&#x22;id&#x22;:&#x22;hubspot_get_object_properties&#x22;,&#x22;label&#x22;:&#x22;Get Object Properties&#x22;,&#x22;scopes&#x22;:[&#x22;crm.schemas.custom.read&#x22;,&#x22;crm.objects.contacts.read&#x22;]},{&#x22;id&#x22;:&#x22;hubspot_list_custom_object_schemas&#x22;,&#x22;label&#x22;:&#x22;List Custom Object Schemas&#x22;,&#x22;scopes&#x22;:[&#x22;crm.schemas.custom.read&#x22;]},{&#x22;id&#x22;:&#x22;hubspot_get_custom_object_schema&#x22;,&#x22;label&#x22;:&#x22;Get Custom Object Schema&#x22;,&#x22;scopes&#x22;:[&#x22;crm.schemas.custom.read&#x22;]},{&#x22;id&#x22;:&#x22;hubspot_create_custom_object_schema&#x22;,&#x22;label&#x22;:&#x22;Create Custom Object Schema&#x22;,&#x22;scopes&#x22;:[&#x22;crm.objects.custom.write&#x22;]},{&#x22;id&#x22;:&#x22;hubspot_create_custom_object_association&#x22;,&#x22;label&#x22;:&#x22;Create Custom Object Association&#x22;,&#x22;scopes&#x22;:[&#x22;crm.objects.custom.write&#x22;]},{&#x22;id&#x22;:&#x22;hubspot_update_custom_object_schema&#x22;,&#x22;label&#x22;:&#x22;Update Custom Object Schema&#x22;,&#x22;scopes&#x22;:[&#x22;crm.objects.custom.write&#x22;]},{&#x22;id&#x22;:&#x22;hubspot_delete_custom_object_schema&#x22;,&#x22;label&#x22;:&#x22;Delete Custom Object Schema&#x22;,&#x22;scopes&#x22;:[&#x22;crm.objects.custom.write&#x22;]},{&#x22;id&#x22;:&#x22;hubspot_delete_custom_object_association&#x22;,&#x22;label&#x22;:&#x22;Delete Custom Object Association&#x22;,&#x22;scopes&#x22;:[&#x22;crm.objects.custom.write&#x22;]},{&#x22;id&#x22;:&#x22;hubspot_unified_list_groups&#x22;,&#x22;label&#x22;:&#x22;List Unified Groups&#x22;,&#x22;scopes&#x22;:[&#x22;settings.users.teams.read&#x22;]},{&#x22;id&#x22;:&#x22;hubspot_unified_get_group&#x22;,&#x22;label&#x22;:&#x22;Get Unified Group&#x22;,&#x22;scopes&#x22;:[&#x22;settings.users.teams.read&#x22;]},{&#x22;id&#x22;:&#x22;hubspot_unified_list_roles&#x22;,&#x22;label&#x22;:&#x22;List Unified Roles&#x22;,&#x22;scopes&#x22;:[&#x22;settings.users.read&#x22;]},{&#x22;id&#x22;:&#x22;hubspot_unified_get_role&#x22;,&#x22;label&#x22;:&#x22;Get Unified Role&#x22;,&#x22;scopes&#x22;:[&#x22;settings.users.read&#x22;]},{&#x22;id&#x22;:&#x22;hubspot_unified_list_users&#x22;,&#x22;label&#x22;:&#x22;List Unified Users&#x22;,&#x22;scopes&#x22;:[&#x22;settings.users.read&#x22;]},{&#x22;id&#x22;:&#x22;hubspot_unified_get_user&#x22;,&#x22;label&#x22;:&#x22;Get Unified User&#x22;,&#x22;scopes&#x22;:[&#x22;settings.users.read&#x22;]},{&#x22;id&#x22;:&#x22;hubspot_list_campaigns&#x22;,&#x22;label&#x22;:&#x22;List Campaigns&#x22;,&#x22;scopes&#x22;:[&#x22;marketing.campaigns.read&#x22;]},{&#x22;id&#x22;:&#x22;hubspot_get_campaign&#x22;,&#x22;label&#x22;:&#x22;Get Campaign&#x22;,&#x22;scopes&#x22;:[&#x22;marketing.campaigns.read&#x22;]},{&#x22;id&#x22;:&#x22;hubspot_create_campaign&#x22;,&#x22;label&#x22;:&#x22;Create Campaign&#x22;,&#x22;scopes&#x22;:[&#x22;marketing.campaigns.write&#x22;]},{&#x22;id&#x22;:&#x22;hubspot_update_campaign&#x22;,&#x22;label&#x22;:&#x22;Update Campaign&#x22;,&#x22;scopes&#x22;:[&#x22;marketing.campaigns.write&#x22;]},{&#x22;id&#x22;:&#x22;hubspot_delete_campaign&#x22;,&#x22;label&#x22;:&#x22;Delete Campaign&#x22;,&#x22;scopes&#x22;:[&#x22;marketing.campaigns.write&#x22;]},{&#x22;id&#x22;:&#x22;hubspot_list_campaign_assets&#x22;,&#x22;label&#x22;:&#x22;List Campaign Assets&#x22;,&#x22;scopes&#x22;:[&#x22;marketing.campaigns.read&#x22;]},{&#x22;id&#x22;:&#x22;hubspot_add_campaign_asset&#x22;,&#x22;label&#x22;:&#x22;Add Asset To Campaign&#x22;,&#x22;scopes&#x22;:[&#x22;marketing.campaigns.write&#x22;]},{&#x22;id&#x22;:&#x22;hubspot_remove_campaign_asset&#x22;,&#x22;label&#x22;:&#x22;Remove Asset From Campaign&#x22;,&#x22;scopes&#x22;:[&#x22;marketing.campaigns.write&#x22;]},{&#x22;id&#x22;:&#x22;hubspot_list_marketing_emails&#x22;,&#x22;label&#x22;:&#x22;List Marketing Emails&#x22;,&#x22;scopes&#x22;:[&#x22;content&#x22;]},{&#x22;id&#x22;:&#x22;hubspot_get_marketing_email&#x22;,&#x22;label&#x22;:&#x22;Get Marketing Email&#x22;,&#x22;scopes&#x22;:[&#x22;content&#x22;]},{&#x22;id&#x22;:&#x22;hubspot_create_marketing_email&#x22;,&#x22;label&#x22;:&#x22;Create Marketing Email&#x22;,&#x22;scopes&#x22;:[&#x22;content&#x22;]},{&#x22;id&#x22;:&#x22;hubspot_update_marketing_email&#x22;,&#x22;label&#x22;:&#x22;Update Marketing Email&#x22;,&#x22;scopes&#x22;:[&#x22;content&#x22;]},{&#x22;id&#x22;:&#x22;hubspot_delete_marketing_email&#x22;,&#x22;label&#x22;:&#x22;Delete Marketing Email&#x22;,&#x22;scopes&#x22;:[&#x22;content&#x22;]},{&#x22;id&#x22;:&#x22;hubspot_clone_marketing_email&#x22;,&#x22;label&#x22;:&#x22;Clone Marketing Email&#x22;,&#x22;scopes&#x22;:[&#x22;content&#x22;]},{&#x22;id&#x22;:&#x22;hubspot_publish_marketing_email&#x22;,&#x22;label&#x22;:&#x22;Publish Marketing Email&#x22;,&#x22;scopes&#x22;:[&#x22;content&#x22;]},{&#x22;id&#x22;:&#x22;hubspot_list_forms&#x22;,&#x22;label&#x22;:&#x22;List Forms&#x22;,&#x22;scopes&#x22;:[&#x22;forms&#x22;]},{&#x22;id&#x22;:&#x22;hubspot_get_form&#x22;,&#x22;label&#x22;:&#x22;Get Form&#x22;,&#x22;scopes&#x22;:[&#x22;forms&#x22;]},{&#x22;id&#x22;:&#x22;hubspot_list_form_submissions&#x22;,&#x22;label&#x22;:&#x22;List Form Submissions&#x22;,&#x22;scopes&#x22;:[&#x22;forms&#x22;]},{&#x22;id&#x22;:&#x22;hubspot_list_tickets&#x22;,&#x22;label&#x22;:&#x22;List Tickets&#x22;,&#x22;scopes&#x22;:[&#x22;tickets&#x22;]},{&#x22;id&#x22;:&#x22;hubspot_get_ticket&#x22;,&#x22;label&#x22;:&#x22;Get Ticket&#x22;,&#x22;scopes&#x22;:[&#x22;tickets&#x22;]},{&#x22;id&#x22;:&#x22;hubspot_create_ticket&#x22;,&#x22;label&#x22;:&#x22;Create Ticket&#x22;,&#x22;scopes&#x22;:[&#x22;tickets&#x22;]},{&#x22;id&#x22;:&#x22;hubspot_update_ticket&#x22;,&#x22;label&#x22;:&#x22;Update Ticket&#x22;,&#x22;scopes&#x22;:[&#x22;tickets&#x22;]},{&#x22;id&#x22;:&#x22;hubspot_delete_ticket&#x22;,&#x22;label&#x22;:&#x22;Delete Ticket&#x22;,&#x22;scopes&#x22;:[&#x22;tickets&#x22;]},{&#x22;id&#x22;:&#x22;hubspot_search_tickets&#x22;,&#x22;label&#x22;:&#x22;Search Tickets&#x22;,&#x22;scopes&#x22;:[&#x22;tickets&#x22;]},{&#x22;id&#x22;:&#x22;hubspot_list_ticket_pipelines&#x22;,&#x22;label&#x22;:&#x22;List Ticket Pipelines&#x22;,&#x22;scopes&#x22;:[&#x22;tickets&#x22;]},{&#x22;id&#x22;:&#x22;hubspot_get_ticket_pipeline&#x22;,&#x22;label&#x22;:&#x22;Get Ticket Pipeline&#x22;,&#x22;scopes&#x22;:[&#x22;tickets&#x22;]},{&#x22;id&#x22;:&#x22;hubspot_list_ticket_pipeline_stages&#x22;,&#x22;label&#x22;:&#x22;List Ticket Pipeline Stages&#x22;,&#x22;scopes&#x22;:[&#x22;tickets&#x22;]},{&#x22;id&#x22;:&#x22;hubspot_get_ticket_pipeline_stage&#x22;,&#x22;label&#x22;:&#x22;Get Ticket Pipeline Stage&#x22;,&#x22;scopes&#x22;:[&#x22;tickets&#x22;]}]" style={{ borderRadius: '8px', padding: '16px', marginBottom: '24px' }}>
    <div className="guides-scope-selector__title" style={{ fontSize: '16px', fontWeight: '600', marginBottom: '12px' }}>Select Actions to adjust the guide</div>
    <div className="guides-scope-selector__muted" style={{ fontSize: '13px', marginBottom: '12px' }}>Some actions may require additional configuration in the provider to be accessible. Choose the actions you need and the guide will be updated.</div>

    <div style={{ display: 'flex', gap: '8px', marginBottom: '12px', flexWrap: 'wrap' }}>
      <input type="text" placeholder="Search actions..." className="guides-scope-selector__input" data-guide-action-search style={{ padding: '8px 12px', borderRadius: '6px', fontSize: '13px', flex: 1, minWidth: '160px' }} />

      <button type="button" className="guides-scope-selector__quick-btn" data-guide-select-all style={{ padding: '6px 10px', borderRadius: '6px', fontSize: '12px', cursor: 'pointer' }}>Select all</button>
      <button type="button" className="guides-scope-selector__quick-btn" data-guide-clear style={{ padding: '6px 10px', borderRadius: '6px', fontSize: '12px', cursor: 'pointer' }}>Clear</button>
    </div>

    <div className="guides-scope-selector__list" style={{ maxHeight: '240px', overflowY: 'auto', borderRadius: '6px', marginBottom: '12px' }}>
      <div className="guides-scope-selector__list-header" style={{ display: 'flex', alignItems: 'center', gap: '10px', padding: '8px 12px', fontSize: '12px', fontWeight: '600', position: 'sticky', top: 0, zIndex: 1 }}>
        <div style={{ width: '16px', flexShrink: 0 }} />

        <div style={{ flex: 1, textAlign: 'left' }}>Action</div>
        <div style={{ minWidth: '120px', marginLeft: 'auto', textAlign: 'right' }}>Scope(s)</div>
      </div>

      <div className="guides-scope-selector__muted" data-guide-loading style={{ padding: '16px', textAlign: 'center', fontSize: '13px' }}>Loading actions...</div>
      <div className="guides-scope-selector__muted" data-guide-no-results hidden style={{ padding: '16px', textAlign: 'center', fontSize: '13px' }}>No actions match your search.</div>
    </div>

    <div className="guides-scope-selector__url-section" style={{ marginTop: '12px', paddingTop: '12px' }}>
      <div className="guides-scope-selector__muted" style={{ fontSize: '12px', fontWeight: '500', marginBottom: '6px' }}>Dynamic Guide URL</div>

      <div style={{ display: 'flex', alignItems: 'center', gap: '8px', flexWrap: 'wrap' }}>
        <input type="text" readOnly className="guides-scope-selector__input" data-guide-url style={{ flex: 1, minWidth: '200px', padding: '8px 10px', borderRadius: '6px', fontSize: '12px', fontFamily: 'monospace' }} />

        <button type="button" className="guides-scope-selector__copy-btn" data-guide-copy-url style={{ width: '120px', padding: '8px 14px', borderRadius: '6px', fontSize: '13px', fontWeight: '500', cursor: 'pointer', whiteSpace: 'nowrap', marginLeft: 'auto' }}>Copy URL</button>
      </div>

      <div style={{ marginTop: '12px' }}>
        <div className="guides-scope-selector__muted" style={{ fontSize: '12px', fontWeight: '500', marginBottom: '6px' }}>Scopes Selected</div>

        <div style={{ display: 'flex', alignItems: 'stretch', gap: '8px', flexWrap: 'wrap' }}>
          <pre className="guides-scope-selector__input" role="textbox" aria-readonly="true" tabIndex={0} data-guide-scopes-output style={{ flex: 1, minWidth: '200px', minHeight: '88px', maxHeight: '120px', overflowY: 'auto', margin: 0, padding: '8px 10px', borderRadius: '6px', fontSize: '12px', fontFamily: 'monospace', whiteSpace: 'pre-wrap' }} />

          <div className="guides-scope-selector__muted" style={{ display: 'flex', flexDirection: 'column', gap: '8px', fontSize: '12px', fontWeight: '500', flexShrink: 0, alignItems: 'flex-start' }}>
            <div style={{ whiteSpace: 'nowrap' }}>Separator</div>

            <select className="guides-scope-selector__input" data-guide-scope-delimiter style={{ width: '100%', padding: '6px 10px', borderRadius: '6px', fontSize: '12px' }}>
              <option value="space">Space</option>
              <option value="comma">Comma</option>
              <option value="semicolon">Semicolon</option>
              <option value="pipe">Pipe</option>
              <option value="newline">Newline</option>
            </select>

            <button type="button" className="guides-scope-selector__copy-btn" data-guide-copy-scopes style={{ width: '120px', padding: '8px 14px', borderRadius: '6px', fontSize: '13px', fontWeight: '500', cursor: 'pointer', whiteSpace: 'nowrap' }}>Copy scopes</button>
          </div>
        </div>
      </div>
    </div>
  </div>
</Panel>

<section data-guide-section data-guide-scopes="">
  <h2>Create a HubSpot OAuth application</h2>

  <p>Create a public app in the HubSpot developer portal to enable OAuth authentication.</p>

  <Steps>
    <Step title="Sign in to HubSpot">
      <div data-guide-step data-guide-scopes="" data-guide-display-scopes-list="">
        <p>Sign in to your <a href="https://app.hubspot.com/" target="_blank" rel="noopener noreferrer">HubSpot account</a>.</p>

        <ul>
          <li>Click on the account menu in the top right and select <strong>Development</strong>.</li>
          <li>Click <strong>Legacy Apps</strong> in the left sidebar.</li>
        </ul>
      </div>
    </Step>

    <Step title="Create a new app">
      <div data-guide-step data-guide-scopes="" data-guide-display-scopes-list="">
        <p>Click <strong>Create app</strong> in the upper right corner and select <strong>Public app</strong>.</p>

        <ul>
          <li>Enter an application name (e.g., "StackOne Integration")</li>
          <li>Click <strong>Create app</strong>.</li>
        </ul>
      </div>
    </Step>

    <Step title="Set the redirect URI">
      <div data-guide-step data-guide-scopes="" data-guide-display-scopes-list="">
        <p>Navigate to the <strong>Auth</strong> tab in your application settings.</p>

        <ul>
          <li>In the Redirect URL field, enter: `https://api.stackone.com/connect/oauth2/hubspot/callback`</li>
          <li>Click <strong>Save</strong>.</li>
        </ul>
      </div>
    </Step>

    <Step title="Copy credentials">
      <div data-guide-step data-guide-scopes="" data-guide-display-scopes-list="">
        <p>Copy your Client ID and Client Secret from the Auth tab.</p>

        <ul>
          <li>Copy the <strong>Client ID</strong> value.</li>
          <li>Click <strong>Show</strong> next to <strong>Client Secret</strong> to reveal it, then copy.</li>
          <li>Store both securely for use later.</li>
        </ul>
      </div>
    </Step>

    <Step title="Configure scopes">
      <div data-guide-step data-guide-scopes="" data-guide-display-scopes-list="">
        <p>In the <strong>Auth</strong> tab, scroll to the <strong>Scopes</strong> section. HubSpot supports required and optional scopes — at runtime, optional scopes are automatically dropped if the connecting user's account lacks access. Importantly, every scope listed in the install URL must first be registered on this Scopes page; HubSpot will reject the install (and the account connection will fail) if the URL references a scope you have not added here. See <a href="https://developers.hubspot.com/docs/api/scopes" target="_blank" rel="noopener noreferrer">HubSpot scopes documentation</a> for details.</p>

        <ul>
          <li>Mark only `oauth` as <strong>Required</strong> (minimum required scope).</li>
          <li>Mark all the following scopes as <strong>Optional</strong> to support different user permission levels.</li>
          <li><strong>Required</strong> to connect successfully — every scope you intend to request must be added here as either Required or Optional. Omitting a scope from this page while still requesting it during connection will cause the OAuth install to fail.</li>
        </ul>
      </div>
    </Step>

    <Step title="List of optional scopes">
      <div data-guide-step data-guide-scopes="crm.objects.contacts.read,crm.objects.contacts.write,crm.objects.companies.read,crm.objects.companies.write,crm.objects.deals.read,crm.objects.deals.write,crm.objects.owners.read,crm.objects.custom.read,crm.objects.custom.write,crm.schemas.custom.read,forms,marketing.campaigns.read,marketing.campaigns.write,content,tickets,settings.users.read,settings.users.teams.read" data-guide-display-scopes-list="crm.objects.contacts.read,crm.objects.contacts.write,crm.objects.companies.read,crm.objects.companies.write,crm.objects.deals.read,crm.objects.deals.write,crm.objects.owners.read,crm.objects.custom.read,crm.objects.custom.write,crm.schemas.custom.read,forms,marketing.campaigns.read,marketing.campaigns.write,content,tickets,settings.users.read,settings.users.teams.read">
        <div className="connector-guide-actions-badge" data-guide-actions-badge data-guide-actions-badge-scopes="crm.objects.contacts.read,crm.objects.contacts.write,crm.objects.companies.read,crm.objects.companies.write,crm.objects.deals.read,crm.objects.deals.write,crm.objects.owners.read,crm.objects.custom.read,crm.objects.custom.write,crm.schemas.custom.read,forms,marketing.campaigns.read,marketing.campaigns.write,content,tickets,settings.users.read,settings.users.teams.read" style={{ display: 'block', width: 'fit-content', maxWidth: '100%', padding: '2px 8px', borderRadius: '8px', fontSize: '12px', marginBottom: '8px', marginTop: '-10px', whiteSpace: 'nowrap', overflowX: 'auto', overflowY: 'hidden', msOverflowStyle: 'none', scrollbarWidth: 'none' }}>
          <span>Enables actions: </span><span data-guide-actions-badge-labels>Add Asset To Campaign, Batch Create Associations, Batch Create Companies, Batch Create Contacts, Batch Create Deals, Batch Read Associations, Batch Update Companies, Batch Update Contacts, Batch Update Deals, Clone Marketing Email, Create Association, Create CRM Object, Create Campaign, Create Company, Create Contact, Create Custom Object Association, Create Custom Object Schema, Create Deal, Create Deal Pipeline, Create Deal Pipeline Stage, Create Marketing Email, Create Ticket, Delete Association, Delete CRM Object, Delete Campaign, Delete Company, Delete Contact, Delete Custom Object Association, Delete Custom Object Schema, Delete Deal, Delete Marketing Email, Delete Ticket, Get CRM Object, Get Campaign, Get Company, Get Contact, Get Custom Object Schema, Get Deal, Get Deal Pipeline, Get Deal Pipeline Stage, Get Form, Get Marketing Email, Get Object Properties, Get Owner, Get Ticket, Get Ticket Pipeline, Get Ticket Pipeline Stage, Get Unified Group, Get Unified Role, Get Unified User, List Associations, List CRM Objects, List Campaign Assets, List Campaigns, List Companies, List Contacts, List Custom Object Schemas, List Deal Pipeline Stages, List Deal Pipelines, List Deals, List Form Submissions, List Forms, List Marketing Emails, List Owners, List Ticket Pipeline Stages, List Ticket Pipelines, List Tickets, List Unified Groups, List Unified Roles, List Unified Users, Publish Marketing Email, Remove Asset From Campaign, Search Companies, Search Contacts, Search Deals, Search Tickets, Update CRM Object, Update Campaign, Update Company, Update Contact, Update Custom Object Schema, Update Deal, Update Deal Pipeline, Update Deal Pipeline Stage, Update Marketing Email, Update Ticket</span>
        </div>

        <p>Add <strong>every</strong> scope below as <strong>Optional</strong> in your HubSpot app. If you register only a subset, you must list the same subset in the StackOne Auth Config's <strong>Optional Scopes</strong> field (Step "Create the StackOne Auth Config" below) — otherwise the connection will fail because the install URL will reference scopes that aren't registered in the app.</p>

        <div style={{ marginTop: '8px' }} data-guide-display-scopes>
          <div className="connector-guide-scopes-container connector-guide-scopes-container--scrollable">
            <ul className="not-prose" style={{ listStyleType: "'- '", paddingLeft: '1em', margin: 0 }}>
              <li style={{ overflowWrap: 'anywhere', wordBreak: 'break-word' }} data-guide-display-scope="crm.objects.contacts.read">
                <button type="button" className="connector-guide-scope-copy" aria-label="Copy crm.objects.contacts.read" title="Copy scope" data-copy="crm.objects.contacts.read">
                  <span className="connector-guide-scope-copy__label">crm.objects.contacts.read</span>
                  <span className="connector-guide-scope-copy__icon" aria-hidden="true">⧉</span>
                </button>
              </li>

              <li style={{ overflowWrap: 'anywhere', wordBreak: 'break-word' }} data-guide-display-scope="crm.objects.contacts.write">
                <button type="button" className="connector-guide-scope-copy" aria-label="Copy crm.objects.contacts.write" title="Copy scope" data-copy="crm.objects.contacts.write">
                  <span className="connector-guide-scope-copy__label">crm.objects.contacts.write</span>
                  <span className="connector-guide-scope-copy__icon" aria-hidden="true">⧉</span>
                </button>
              </li>

              <li style={{ overflowWrap: 'anywhere', wordBreak: 'break-word' }} data-guide-display-scope="crm.objects.companies.read">
                <button type="button" className="connector-guide-scope-copy" aria-label="Copy crm.objects.companies.read" title="Copy scope" data-copy="crm.objects.companies.read">
                  <span className="connector-guide-scope-copy__label">crm.objects.companies.read</span>
                  <span className="connector-guide-scope-copy__icon" aria-hidden="true">⧉</span>
                </button>
              </li>

              <li style={{ overflowWrap: 'anywhere', wordBreak: 'break-word' }} data-guide-display-scope="crm.objects.companies.write">
                <button type="button" className="connector-guide-scope-copy" aria-label="Copy crm.objects.companies.write" title="Copy scope" data-copy="crm.objects.companies.write">
                  <span className="connector-guide-scope-copy__label">crm.objects.companies.write</span>
                  <span className="connector-guide-scope-copy__icon" aria-hidden="true">⧉</span>
                </button>
              </li>

              <li style={{ overflowWrap: 'anywhere', wordBreak: 'break-word' }} data-guide-display-scope="crm.objects.deals.read">
                <button type="button" className="connector-guide-scope-copy" aria-label="Copy crm.objects.deals.read" title="Copy scope" data-copy="crm.objects.deals.read">
                  <span className="connector-guide-scope-copy__label">crm.objects.deals.read</span>
                  <span className="connector-guide-scope-copy__icon" aria-hidden="true">⧉</span>
                </button>
              </li>

              <li style={{ overflowWrap: 'anywhere', wordBreak: 'break-word' }} data-guide-display-scope="crm.objects.deals.write">
                <button type="button" className="connector-guide-scope-copy" aria-label="Copy crm.objects.deals.write" title="Copy scope" data-copy="crm.objects.deals.write">
                  <span className="connector-guide-scope-copy__label">crm.objects.deals.write</span>
                  <span className="connector-guide-scope-copy__icon" aria-hidden="true">⧉</span>
                </button>
              </li>

              <li style={{ overflowWrap: 'anywhere', wordBreak: 'break-word' }} data-guide-display-scope="crm.objects.owners.read">
                <button type="button" className="connector-guide-scope-copy" aria-label="Copy crm.objects.owners.read" title="Copy scope" data-copy="crm.objects.owners.read">
                  <span className="connector-guide-scope-copy__label">crm.objects.owners.read</span>
                  <span className="connector-guide-scope-copy__icon" aria-hidden="true">⧉</span>
                </button>
              </li>

              <li style={{ overflowWrap: 'anywhere', wordBreak: 'break-word' }} data-guide-display-scope="crm.objects.custom.read">
                <button type="button" className="connector-guide-scope-copy" aria-label="Copy crm.objects.custom.read" title="Copy scope" data-copy="crm.objects.custom.read">
                  <span className="connector-guide-scope-copy__label">crm.objects.custom.read</span>
                  <span className="connector-guide-scope-copy__icon" aria-hidden="true">⧉</span>
                </button>
              </li>

              <li style={{ overflowWrap: 'anywhere', wordBreak: 'break-word' }} data-guide-display-scope="crm.objects.custom.write">
                <button type="button" className="connector-guide-scope-copy" aria-label="Copy crm.objects.custom.write" title="Copy scope" data-copy="crm.objects.custom.write">
                  <span className="connector-guide-scope-copy__label">crm.objects.custom.write</span>
                  <span className="connector-guide-scope-copy__icon" aria-hidden="true">⧉</span>
                </button>
              </li>

              <li style={{ overflowWrap: 'anywhere', wordBreak: 'break-word' }} data-guide-display-scope="crm.schemas.custom.read">
                <button type="button" className="connector-guide-scope-copy" aria-label="Copy crm.schemas.custom.read" title="Copy scope" data-copy="crm.schemas.custom.read">
                  <span className="connector-guide-scope-copy__label">crm.schemas.custom.read</span>
                  <span className="connector-guide-scope-copy__icon" aria-hidden="true">⧉</span>
                </button>
              </li>

              <li style={{ overflowWrap: 'anywhere', wordBreak: 'break-word' }} data-guide-display-scope="forms">
                <button type="button" className="connector-guide-scope-copy" aria-label="Copy forms" title="Copy scope" data-copy="forms">
                  <span className="connector-guide-scope-copy__label">forms</span>
                  <span className="connector-guide-scope-copy__icon" aria-hidden="true">⧉</span>
                </button>
              </li>

              <li style={{ overflowWrap: 'anywhere', wordBreak: 'break-word' }} data-guide-display-scope="marketing.campaigns.read">
                <button type="button" className="connector-guide-scope-copy" aria-label="Copy marketing.campaigns.read" title="Copy scope" data-copy="marketing.campaigns.read">
                  <span className="connector-guide-scope-copy__label">marketing.campaigns.read</span>
                  <span className="connector-guide-scope-copy__icon" aria-hidden="true">⧉</span>
                </button>
              </li>

              <li style={{ overflowWrap: 'anywhere', wordBreak: 'break-word' }} data-guide-display-scope="marketing.campaigns.write">
                <button type="button" className="connector-guide-scope-copy" aria-label="Copy marketing.campaigns.write" title="Copy scope" data-copy="marketing.campaigns.write">
                  <span className="connector-guide-scope-copy__label">marketing.campaigns.write</span>
                  <span className="connector-guide-scope-copy__icon" aria-hidden="true">⧉</span>
                </button>
              </li>

              <li style={{ overflowWrap: 'anywhere', wordBreak: 'break-word' }} data-guide-display-scope="content">
                <button type="button" className="connector-guide-scope-copy" aria-label="Copy content" title="Copy scope" data-copy="content">
                  <span className="connector-guide-scope-copy__label">content</span>
                  <span className="connector-guide-scope-copy__icon" aria-hidden="true">⧉</span>
                </button>
              </li>

              <li style={{ overflowWrap: 'anywhere', wordBreak: 'break-word' }} data-guide-display-scope="tickets">
                <button type="button" className="connector-guide-scope-copy" aria-label="Copy tickets" title="Copy scope" data-copy="tickets">
                  <span className="connector-guide-scope-copy__label">tickets</span>
                  <span className="connector-guide-scope-copy__icon" aria-hidden="true">⧉</span>
                </button>
              </li>

              <li style={{ overflowWrap: 'anywhere', wordBreak: 'break-word' }} data-guide-display-scope="settings.users.read">
                <button type="button" className="connector-guide-scope-copy" aria-label="Copy settings.users.read" title="Copy scope" data-copy="settings.users.read">
                  <span className="connector-guide-scope-copy__label">settings.users.read</span>
                  <span className="connector-guide-scope-copy__icon" aria-hidden="true">⧉</span>
                </button>
              </li>

              <li style={{ overflowWrap: 'anywhere', wordBreak: 'break-word' }} data-guide-display-scope="settings.users.teams.read">
                <button type="button" className="connector-guide-scope-copy" aria-label="Copy settings.users.teams.read" title="Copy scope" data-copy="settings.users.teams.read">
                  <span className="connector-guide-scope-copy__label">settings.users.teams.read</span>
                  <span className="connector-guide-scope-copy__icon" aria-hidden="true">⧉</span>
                </button>
              </li>
            </ul>
          </div>
        </div>
      </div>
    </Step>

    <Step title="Save your configuration">
      <div data-guide-step data-guide-scopes="" data-guide-display-scopes-list="">
        <p>Click <strong>Update</strong> after configuring all scopes to save your changes. Without this save step, the scopes are not persisted on the app and any connection attempt will fail with an OAuth scope error.</p>
      </div>
    </Step>
  </Steps>
</section>

## Creating the StackOne Connector Profile

To create the Connector Profile in StackOne for <strong>HubSpot</strong>:

<Steps>
  <Step title="Navigate to Connector Profiles">
    Login to StackOne and navigate to [Connector Profiles](https://app.stackone.com/connector_profiles)
  </Step>

  <Step title="Create New Connector Profile">
    <ul>
      <li>Click <strong>+ Connector Profile</strong></li>
      <li>Search for and select <strong>HubSpot</strong></li>
      <li>Select <strong>Type</strong> as <strong>OAuth 2.0</strong></li>

      <li>
        Fill out the fields using details retrieved from your provider:

        <ul style={{ marginLeft: '20px' }}>
          <li><strong>Client ID</strong></li>
          <li><strong>Client Secret</strong></li>
          <li><strong>Required Scopes</strong> (Optional)</li>
          <li><strong>Optional Scopes</strong> (Optional)</li>
        </ul>
      </li>

      <li>(Optional) Select <strong>Actions</strong> to be enabled for this Connector Profile</li>
      <li>Click <strong>Create profile</strong></li>
    </ul>
  </Step>
</Steps>

Congratulations! The new Connector Profile will now show up in your project ready to be used. You can now continue to <a href="/guides/accounts-section#linking-accounts">Link Accounts</a> for <strong>HubSpot</strong>.
