> ## 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.

# Pardot OAuth 2.0 connector profile – StackOne setup guide

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

<Warning>Requires Salesforce admin access to create a Connected App with API and Pardot enabled.</Warning>

<Panel>
  <div className="not-prose guides-scope-selector" data-guides-scope-selector data-guide-actions-json="[{&#x22;id&#x22;:&#x22;pardot_get_account&#x22;,&#x22;label&#x22;:&#x22;Get Account&#x22;,&#x22;scopes&#x22;:[&#x22;pardot_api&#x22;]},{&#x22;id&#x22;:&#x22;pardot_list_campaigns&#x22;,&#x22;label&#x22;:&#x22;List Campaigns&#x22;,&#x22;scopes&#x22;:[&#x22;pardot_api&#x22;]},{&#x22;id&#x22;:&#x22;pardot_get_campaign&#x22;,&#x22;label&#x22;:&#x22;Get Campaign&#x22;,&#x22;scopes&#x22;:[&#x22;pardot_api&#x22;]},{&#x22;id&#x22;:&#x22;pardot_connect_salesforce_campaign&#x22;,&#x22;label&#x22;:&#x22;Connect Salesforce Campaign&#x22;,&#x22;scopes&#x22;:[&#x22;pardot_api&#x22;]},{&#x22;id&#x22;:&#x22;pardot_add_campaign_tag&#x22;,&#x22;label&#x22;:&#x22;Add Tag To Campaign&#x22;,&#x22;scopes&#x22;:[&#x22;pardot_api&#x22;]},{&#x22;id&#x22;:&#x22;pardot_remove_campaign_tag&#x22;,&#x22;label&#x22;:&#x22;Remove Tag From Campaign&#x22;,&#x22;scopes&#x22;:[&#x22;pardot_api&#x22;]},{&#x22;id&#x22;:&#x22;pardot_list_custom_fields&#x22;,&#x22;label&#x22;:&#x22;List Custom Fields&#x22;,&#x22;scopes&#x22;:[&#x22;pardot_api&#x22;]},{&#x22;id&#x22;:&#x22;pardot_get_custom_field&#x22;,&#x22;label&#x22;:&#x22;Get Custom Field&#x22;,&#x22;scopes&#x22;:[&#x22;pardot_api&#x22;]},{&#x22;id&#x22;:&#x22;pardot_create_custom_field&#x22;,&#x22;label&#x22;:&#x22;Create Custom Field&#x22;,&#x22;scopes&#x22;:[&#x22;pardot_api&#x22;]},{&#x22;id&#x22;:&#x22;pardot_update_custom_field&#x22;,&#x22;label&#x22;:&#x22;Update Custom Field&#x22;,&#x22;scopes&#x22;:[&#x22;pardot_api&#x22;]},{&#x22;id&#x22;:&#x22;pardot_delete_custom_field&#x22;,&#x22;label&#x22;:&#x22;Delete Custom Field&#x22;,&#x22;scopes&#x22;:[&#x22;pardot_api&#x22;]},{&#x22;id&#x22;:&#x22;pardot_list_custom_redirects&#x22;,&#x22;label&#x22;:&#x22;List Custom Redirects&#x22;,&#x22;scopes&#x22;:[&#x22;pardot_api&#x22;]},{&#x22;id&#x22;:&#x22;pardot_get_custom_redirect&#x22;,&#x22;label&#x22;:&#x22;Get Custom Redirect&#x22;,&#x22;scopes&#x22;:[&#x22;pardot_api&#x22;]},{&#x22;id&#x22;:&#x22;pardot_create_custom_redirect&#x22;,&#x22;label&#x22;:&#x22;Create Custom Redirect&#x22;,&#x22;scopes&#x22;:[&#x22;pardot_api&#x22;]},{&#x22;id&#x22;:&#x22;pardot_update_custom_redirect&#x22;,&#x22;label&#x22;:&#x22;Update Custom Redirect&#x22;,&#x22;scopes&#x22;:[&#x22;pardot_api&#x22;]},{&#x22;id&#x22;:&#x22;pardot_delete_custom_redirect&#x22;,&#x22;label&#x22;:&#x22;Delete Custom Redirect&#x22;,&#x22;scopes&#x22;:[&#x22;pardot_api&#x22;]},{&#x22;id&#x22;:&#x22;pardot_list_dynamic_contents&#x22;,&#x22;label&#x22;:&#x22;List Dynamic Content&#x22;,&#x22;scopes&#x22;:[&#x22;pardot_api&#x22;]},{&#x22;id&#x22;:&#x22;pardot_get_dynamic_content&#x22;,&#x22;label&#x22;:&#x22;Get Dynamic Content&#x22;,&#x22;scopes&#x22;:[&#x22;pardot_api&#x22;]},{&#x22;id&#x22;:&#x22;pardot_create_dynamic_content&#x22;,&#x22;label&#x22;:&#x22;Create Dynamic Content&#x22;,&#x22;scopes&#x22;:[&#x22;pardot_api&#x22;]},{&#x22;id&#x22;:&#x22;pardot_add_dynamic_content_tag&#x22;,&#x22;label&#x22;:&#x22;Add Tag To Dynamic Content&#x22;,&#x22;scopes&#x22;:[&#x22;pardot_api&#x22;]},{&#x22;id&#x22;:&#x22;pardot_remove_dynamic_content_tag&#x22;,&#x22;label&#x22;:&#x22;Remove Tag From Dynamic Content&#x22;,&#x22;scopes&#x22;:[&#x22;pardot_api&#x22;]},{&#x22;id&#x22;:&#x22;pardot_list_emails&#x22;,&#x22;label&#x22;:&#x22;List One-to-One Emails&#x22;,&#x22;scopes&#x22;:[&#x22;pardot_api&#x22;]},{&#x22;id&#x22;:&#x22;pardot_get_email&#x22;,&#x22;label&#x22;:&#x22;Get One-to-One Email&#x22;,&#x22;scopes&#x22;:[&#x22;pardot_api&#x22;]},{&#x22;id&#x22;:&#x22;pardot_send_one_to_one_email&#x22;,&#x22;label&#x22;:&#x22;Send One-to-One Email&#x22;,&#x22;scopes&#x22;:[&#x22;pardot_api&#x22;]},{&#x22;id&#x22;:&#x22;pardot_list_list_emails&#x22;,&#x22;label&#x22;:&#x22;List List Emails&#x22;,&#x22;scopes&#x22;:[&#x22;pardot_api&#x22;]},{&#x22;id&#x22;:&#x22;pardot_get_list_email&#x22;,&#x22;label&#x22;:&#x22;Get List Email&#x22;,&#x22;scopes&#x22;:[&#x22;pardot_api&#x22;]},{&#x22;id&#x22;:&#x22;pardot_send_list_email&#x22;,&#x22;label&#x22;:&#x22;Send List Email&#x22;,&#x22;scopes&#x22;:[&#x22;pardot_api&#x22;]},{&#x22;id&#x22;:&#x22;pardot_get_list_email_stats&#x22;,&#x22;label&#x22;:&#x22;Get List Email Stats&#x22;,&#x22;scopes&#x22;:[&#x22;pardot_api&#x22;]},{&#x22;id&#x22;:&#x22;pardot_list_email_templates&#x22;,&#x22;label&#x22;:&#x22;List Email Templates&#x22;,&#x22;scopes&#x22;:[&#x22;pardot_api&#x22;]},{&#x22;id&#x22;:&#x22;pardot_get_email_template&#x22;,&#x22;label&#x22;:&#x22;Get Email Template&#x22;,&#x22;scopes&#x22;:[&#x22;pardot_api&#x22;]},{&#x22;id&#x22;:&#x22;pardot_list_engagement_studio_programs&#x22;,&#x22;label&#x22;:&#x22;List Engagement Programs&#x22;,&#x22;scopes&#x22;:[&#x22;pardot_api&#x22;]},{&#x22;id&#x22;:&#x22;pardot_get_engagement_studio_program&#x22;,&#x22;label&#x22;:&#x22;Get Engagement Program&#x22;,&#x22;scopes&#x22;:[&#x22;pardot_api&#x22;]},{&#x22;id&#x22;:&#x22;pardot_download_engagement_program_structure&#x22;,&#x22;label&#x22;:&#x22;Download Engagement Program Structure&#x22;,&#x22;scopes&#x22;:[&#x22;pardot_api&#x22;]},{&#x22;id&#x22;:&#x22;pardot_list_files&#x22;,&#x22;label&#x22;:&#x22;List Files&#x22;,&#x22;scopes&#x22;:[&#x22;pardot_api&#x22;]},{&#x22;id&#x22;:&#x22;pardot_get_file&#x22;,&#x22;label&#x22;:&#x22;Get File&#x22;,&#x22;scopes&#x22;:[&#x22;pardot_api&#x22;]},{&#x22;id&#x22;:&#x22;pardot_create_file&#x22;,&#x22;label&#x22;:&#x22;Upload File&#x22;,&#x22;scopes&#x22;:[&#x22;pardot_api&#x22;]},{&#x22;id&#x22;:&#x22;pardot_update_file&#x22;,&#x22;label&#x22;:&#x22;Update File&#x22;,&#x22;scopes&#x22;:[&#x22;pardot_api&#x22;]},{&#x22;id&#x22;:&#x22;pardot_delete_file&#x22;,&#x22;label&#x22;:&#x22;Delete File&#x22;,&#x22;scopes&#x22;:[&#x22;pardot_api&#x22;]},{&#x22;id&#x22;:&#x22;pardot_add_file_tag&#x22;,&#x22;label&#x22;:&#x22;Add Tag To File&#x22;,&#x22;scopes&#x22;:[&#x22;pardot_api&#x22;]},{&#x22;id&#x22;:&#x22;pardot_remove_file_tag&#x22;,&#x22;label&#x22;:&#x22;Remove Tag From File&#x22;,&#x22;scopes&#x22;:[&#x22;pardot_api&#x22;]},{&#x22;id&#x22;:&#x22;pardot_list_folders&#x22;,&#x22;label&#x22;:&#x22;List Folders&#x22;,&#x22;scopes&#x22;:[&#x22;pardot_api&#x22;]},{&#x22;id&#x22;:&#x22;pardot_get_folder&#x22;,&#x22;label&#x22;:&#x22;Get Folder&#x22;,&#x22;scopes&#x22;:[&#x22;pardot_api&#x22;]},{&#x22;id&#x22;:&#x22;pardot_list_folder_contents&#x22;,&#x22;label&#x22;:&#x22;List Folder Contents&#x22;,&#x22;scopes&#x22;:[&#x22;pardot_api&#x22;]},{&#x22;id&#x22;:&#x22;pardot_get_folder_contents&#x22;,&#x22;label&#x22;:&#x22;Get Folder Contents Record&#x22;,&#x22;scopes&#x22;:[&#x22;pardot_api&#x22;]},{&#x22;id&#x22;:&#x22;pardot_list_forms&#x22;,&#x22;label&#x22;:&#x22;List Forms&#x22;,&#x22;scopes&#x22;:[&#x22;pardot_api&#x22;]},{&#x22;id&#x22;:&#x22;pardot_get_form&#x22;,&#x22;label&#x22;:&#x22;Get Form&#x22;,&#x22;scopes&#x22;:[&#x22;pardot_api&#x22;]},{&#x22;id&#x22;:&#x22;pardot_create_form&#x22;,&#x22;label&#x22;:&#x22;Create Form&#x22;,&#x22;scopes&#x22;:[&#x22;pardot_api&#x22;]},{&#x22;id&#x22;:&#x22;pardot_delete_form&#x22;,&#x22;label&#x22;:&#x22;Delete Form&#x22;,&#x22;scopes&#x22;:[&#x22;pardot_api&#x22;]},{&#x22;id&#x22;:&#x22;pardot_list_landing_pages&#x22;,&#x22;label&#x22;:&#x22;List Landing Pages&#x22;,&#x22;scopes&#x22;:[&#x22;pardot_api&#x22;]},{&#x22;id&#x22;:&#x22;pardot_get_landing_page&#x22;,&#x22;label&#x22;:&#x22;Get Landing Page&#x22;,&#x22;scopes&#x22;:[&#x22;pardot_api&#x22;]},{&#x22;id&#x22;:&#x22;pardot_create_landing_page&#x22;,&#x22;label&#x22;:&#x22;Create Landing Page&#x22;,&#x22;scopes&#x22;:[&#x22;pardot_api&#x22;]},{&#x22;id&#x22;:&#x22;pardot_add_landing_page_tag&#x22;,&#x22;label&#x22;:&#x22;Add Tag To Landing Page&#x22;,&#x22;scopes&#x22;:[&#x22;pardot_api&#x22;]},{&#x22;id&#x22;:&#x22;pardot_remove_landing_page_tag&#x22;,&#x22;label&#x22;:&#x22;Remove Tag From Landing Page&#x22;,&#x22;scopes&#x22;:[&#x22;pardot_api&#x22;]},{&#x22;id&#x22;:&#x22;pardot_list_list_memberships&#x22;,&#x22;label&#x22;:&#x22;List List Memberships&#x22;,&#x22;scopes&#x22;:[&#x22;pardot_api&#x22;]},{&#x22;id&#x22;:&#x22;pardot_get_list_membership&#x22;,&#x22;label&#x22;:&#x22;Get List Membership&#x22;,&#x22;scopes&#x22;:[&#x22;pardot_api&#x22;]},{&#x22;id&#x22;:&#x22;pardot_create_list_membership&#x22;,&#x22;label&#x22;:&#x22;Add Prospect To List&#x22;,&#x22;scopes&#x22;:[&#x22;pardot_api&#x22;]},{&#x22;id&#x22;:&#x22;pardot_update_list_membership&#x22;,&#x22;label&#x22;:&#x22;Update List Membership&#x22;,&#x22;scopes&#x22;:[&#x22;pardot_api&#x22;]},{&#x22;id&#x22;:&#x22;pardot_delete_list_membership&#x22;,&#x22;label&#x22;:&#x22;Remove Prospect From List&#x22;,&#x22;scopes&#x22;:[&#x22;pardot_api&#x22;]},{&#x22;id&#x22;:&#x22;pardot_list_lists&#x22;,&#x22;label&#x22;:&#x22;List Lists&#x22;,&#x22;scopes&#x22;:[&#x22;pardot_api&#x22;]},{&#x22;id&#x22;:&#x22;pardot_get_list&#x22;,&#x22;label&#x22;:&#x22;Get List&#x22;,&#x22;scopes&#x22;:[&#x22;pardot_api&#x22;]},{&#x22;id&#x22;:&#x22;pardot_create_list&#x22;,&#x22;label&#x22;:&#x22;Create List&#x22;,&#x22;scopes&#x22;:[&#x22;pardot_api&#x22;]},{&#x22;id&#x22;:&#x22;pardot_update_list&#x22;,&#x22;label&#x22;:&#x22;Update List&#x22;,&#x22;scopes&#x22;:[&#x22;pardot_api&#x22;]},{&#x22;id&#x22;:&#x22;pardot_delete_list&#x22;,&#x22;label&#x22;:&#x22;Delete List&#x22;,&#x22;scopes&#x22;:[&#x22;pardot_api&#x22;]},{&#x22;id&#x22;:&#x22;pardot_list_opportunities&#x22;,&#x22;label&#x22;:&#x22;List Opportunities&#x22;,&#x22;scopes&#x22;:[&#x22;pardot_api&#x22;]},{&#x22;id&#x22;:&#x22;pardot_get_opportunity&#x22;,&#x22;label&#x22;:&#x22;Get Opportunity&#x22;,&#x22;scopes&#x22;:[&#x22;pardot_api&#x22;]},{&#x22;id&#x22;:&#x22;pardot_list_prospects&#x22;,&#x22;label&#x22;:&#x22;List Prospects&#x22;,&#x22;scopes&#x22;:[&#x22;pardot_api&#x22;]},{&#x22;id&#x22;:&#x22;pardot_get_prospect&#x22;,&#x22;label&#x22;:&#x22;Get Prospect&#x22;,&#x22;scopes&#x22;:[&#x22;pardot_api&#x22;]},{&#x22;id&#x22;:&#x22;pardot_create_prospect&#x22;,&#x22;label&#x22;:&#x22;Create Prospect&#x22;,&#x22;scopes&#x22;:[&#x22;pardot_api&#x22;]},{&#x22;id&#x22;:&#x22;pardot_update_prospect&#x22;,&#x22;label&#x22;:&#x22;Update Prospect&#x22;,&#x22;scopes&#x22;:[&#x22;pardot_api&#x22;]},{&#x22;id&#x22;:&#x22;pardot_delete_prospect&#x22;,&#x22;label&#x22;:&#x22;Delete Prospect&#x22;,&#x22;scopes&#x22;:[&#x22;pardot_api&#x22;]},{&#x22;id&#x22;:&#x22;pardot_upsert_prospect_by_email&#x22;,&#x22;label&#x22;:&#x22;Upsert Prospect By Email&#x22;,&#x22;scopes&#x22;:[&#x22;pardot_api&#x22;]},{&#x22;id&#x22;:&#x22;pardot_undelete_prospect&#x22;,&#x22;label&#x22;:&#x22;Undelete Prospect&#x22;,&#x22;scopes&#x22;:[&#x22;pardot_api&#x22;]},{&#x22;id&#x22;:&#x22;pardot_add_prospect_tag&#x22;,&#x22;label&#x22;:&#x22;Add Tag To Prospect&#x22;,&#x22;scopes&#x22;:[&#x22;pardot_api&#x22;]},{&#x22;id&#x22;:&#x22;pardot_remove_prospect_tag&#x22;,&#x22;label&#x22;:&#x22;Remove Tag From Prospect&#x22;,&#x22;scopes&#x22;:[&#x22;pardot_api&#x22;]},{&#x22;id&#x22;:&#x22;pardot_list_tags&#x22;,&#x22;label&#x22;:&#x22;List Tags&#x22;,&#x22;scopes&#x22;:[&#x22;pardot_api&#x22;]},{&#x22;id&#x22;:&#x22;pardot_get_tag&#x22;,&#x22;label&#x22;:&#x22;Get Tag&#x22;,&#x22;scopes&#x22;:[&#x22;pardot_api&#x22;]},{&#x22;id&#x22;:&#x22;pardot_create_tag&#x22;,&#x22;label&#x22;:&#x22;Create Tag&#x22;,&#x22;scopes&#x22;:[&#x22;pardot_api&#x22;]},{&#x22;id&#x22;:&#x22;pardot_update_tag&#x22;,&#x22;label&#x22;:&#x22;Update Tag&#x22;,&#x22;scopes&#x22;:[&#x22;pardot_api&#x22;]},{&#x22;id&#x22;:&#x22;pardot_delete_tag&#x22;,&#x22;label&#x22;:&#x22;Delete Tag&#x22;,&#x22;scopes&#x22;:[&#x22;pardot_api&#x22;]},{&#x22;id&#x22;:&#x22;pardot_merge_tags&#x22;,&#x22;label&#x22;:&#x22;Merge Tags&#x22;,&#x22;scopes&#x22;:[&#x22;pardot_api&#x22;]},{&#x22;id&#x22;:&#x22;pardot_list_tagged_objects&#x22;,&#x22;label&#x22;:&#x22;List Tagged Objects&#x22;,&#x22;scopes&#x22;:[&#x22;pardot_api&#x22;]},{&#x22;id&#x22;:&#x22;pardot_get_tagged_object&#x22;,&#x22;label&#x22;:&#x22;Get Tagged Object&#x22;,&#x22;scopes&#x22;:[&#x22;pardot_api&#x22;]},{&#x22;id&#x22;:&#x22;pardot_list_users&#x22;,&#x22;label&#x22;:&#x22;List Users&#x22;,&#x22;scopes&#x22;:[&#x22;pardot_api&#x22;]},{&#x22;id&#x22;:&#x22;pardot_get_user&#x22;,&#x22;label&#x22;:&#x22;Get User&#x22;,&#x22;scopes&#x22;:[&#x22;pardot_api&#x22;]},{&#x22;id&#x22;:&#x22;pardot_add_user_tag&#x22;,&#x22;label&#x22;:&#x22;Add Tag To User&#x22;,&#x22;scopes&#x22;:[&#x22;pardot_api&#x22;]},{&#x22;id&#x22;:&#x22;pardot_remove_user_tag&#x22;,&#x22;label&#x22;:&#x22;Remove Tag From User&#x22;,&#x22;scopes&#x22;:[&#x22;pardot_api&#x22;]},{&#x22;id&#x22;:&#x22;pardot_list_visitor_activities&#x22;,&#x22;label&#x22;:&#x22;List Visitor Activities&#x22;,&#x22;scopes&#x22;:[&#x22;pardot_api&#x22;]},{&#x22;id&#x22;:&#x22;pardot_get_visitor_activity&#x22;,&#x22;label&#x22;:&#x22;Get Visitor Activity&#x22;,&#x22;scopes&#x22;:[&#x22;pardot_api&#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>Sign in to Salesforce</h2>

  <p>Sign in to the Salesforce org that owns your Pardot business unit. Use [`login.salesforce.com`](https://login.salesforce.com) for Production and Developer orgs, or [`test.salesforce.com`](https://test.salesforce.com) for a Salesforce Sandbox.</p>

  <ul>
    <li>Navigate to <strong>Setup</strong> > <strong>Apps</strong> > <strong>App Manager</strong>.</li>
  </ul>
</section>

<section data-guide-section data-guide-scopes="">
  <h2>Create a Connected App</h2>

  <p>Register a new Salesforce Connected App that StackOne will use to authenticate with Pardot.</p>

  <Steps>
    <Step title="Open the new Connected App form">
      <div data-guide-step data-guide-scopes="" data-guide-display-scopes-list="">
        <p>Click <strong>New Connected App</strong> in the top-right corner of the <strong>App Manager</strong> page.</p>
      </div>
    </Step>

    <Step title="Fill in basic information">
      <div data-guide-step data-guide-scopes="" data-guide-display-scopes-list="">
        <p>Complete the <strong>Basic Information</strong> section of the new Connected App.</p>

        <ul>
          <li>Connected App Name: `StackOne Pardot Integration`</li>
          <li>API Name: auto-filled from the Connected App Name</li>
          <li>Contact Email: your email address</li>
        </ul>
      </div>
    </Step>

    <Step title="Enable OAuth settings">
      <div data-guide-step data-guide-scopes="" data-guide-display-scopes-list="">
        <p>In the <strong>API (Enable OAuth Settings)</strong> section, enable OAuth and configure the callback URL.</p>

        <ul>
          <li>Check <strong>Enable OAuth Settings</strong>.</li>
          <li>Callback URL: `https://api.stackone.com/connect/oauth2/pardot/callback`</li>
        </ul>
      </div>
    </Step>

    <Step title="Select OAuth scopes">
      <div data-guide-step data-guide-scopes="pardot_api,refresh_token,offline_access" data-guide-display-scopes-list="pardot_api,refresh_token,offline_access">
        <div className="connector-guide-actions-badge" data-guide-actions-badge data-guide-actions-badge-scopes="pardot_api,refresh_token,offline_access" 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 Prospect To List, Add Tag To Campaign, Add Tag To Dynamic Content, Add Tag To File, Add Tag To Landing Page, Add Tag To Prospect, Add Tag To User, Connect Salesforce Campaign, Create Custom Field, Create Custom Redirect, Create Dynamic Content, Create Form, Create Landing Page, Create List, Create Prospect, Create Tag, Delete Custom Field, Delete Custom Redirect, Delete File, Delete Form, Delete List, Delete Prospect, Delete Tag, Download Engagement Program Structure, Get Account, Get Campaign, Get Custom Field, Get Custom Redirect, Get Dynamic Content, Get Email Template, Get Engagement Program, Get File, Get Folder, Get Folder Contents Record, Get Form, Get Landing Page, Get List, Get List Email, Get List Email Stats, Get List Membership, Get One-to-One Email, Get Opportunity, Get Prospect, Get Tag, Get Tagged Object, Get User, Get Visitor Activity, List Campaigns, List Custom Fields, List Custom Redirects, List Dynamic Content, List Email Templates, List Engagement Programs, List Files, List Folder Contents, List Folders, List Forms, List Landing Pages, List List Emails, List List Memberships, List Lists, List One-to-One Emails, List Opportunities, List Prospects, List Tagged Objects, List Tags, List Users, List Visitor Activities, Merge Tags, Remove Prospect From List, Remove Tag From Campaign, Remove Tag From Dynamic Content, Remove Tag From File, Remove Tag From Landing Page, Remove Tag From Prospect, Remove Tag From User, Send List Email, Send One-to-One Email, Undelete Prospect, Update Custom Field, Update Custom Redirect, Update File, Update List, Update List Membership, Update Prospect, Update Tag, Upload File, Upsert Prospect By Email</span>
        </div>

        <p>Move the scopes required for your use case from <strong>Available OAuth Scopes</strong> to <strong>Selected OAuth Scopes</strong>.</p>

        <div style={{ marginTop: '8px' }} data-guide-display-scopes>
          <div className="connector-guide-scopes-container">
            <ul className="not-prose" style={{ listStyleType: "'- '", paddingLeft: '1em', margin: 0 }}>
              <li style={{ overflowWrap: 'anywhere', wordBreak: 'break-word' }} data-guide-display-scope="pardot_api">
                <button type="button" className="connector-guide-scope-copy" aria-label="Copy pardot_api" title="Copy scope" data-copy="pardot_api">
                  <span className="connector-guide-scope-copy__label">pardot\_api</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="refresh_token">
                <button type="button" className="connector-guide-scope-copy" aria-label="Copy refresh_token" title="Copy scope" data-copy="refresh_token">
                  <span className="connector-guide-scope-copy__label">refresh\_token</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="offline_access">
                <button type="button" className="connector-guide-scope-copy" aria-label="Copy offline_access" title="Copy scope" data-copy="offline_access">
                  <span className="connector-guide-scope-copy__label">offline\_access</span>
                  <span className="connector-guide-scope-copy__icon" aria-hidden="true">⧉</span>
                </button>
              </li>
            </ul>
          </div>
        </div>
      </div>
    </Step>

    <Step title="Save the Connected App">
      <div data-guide-step data-guide-scopes="" data-guide-display-scopes-list="">
        <p>Click <strong>Save</strong> to create the Connected App. It can take 2-10 minutes for the OAuth settings to propagate.</p>
      </div>
    </Step>
  </Steps>
</section>

<section data-guide-section data-guide-scopes="">
  <h2>Configure the Refresh Token Policy</h2>

  <p>Open the Connected App's policies and set how long refresh tokens remain valid. Without this, refresh tokens may expire and break the connection.</p>

  <Steps>
    <Step title="Open Manage Policies">
      <div data-guide-step data-guide-scopes="" data-guide-display-scopes-list="">
        <p>From <strong>App Manager</strong>, find your Connected App, click the dropdown arrow, and select <strong>Manage</strong>. Then click <strong>Edit Policies</strong>.</p>
      </div>
    </Step>

    <Step title="Choose a Refresh Token Policy">
      <div data-guide-step data-guide-scopes="" data-guide-display-scopes-list="">
        <p>In the <strong>App Authorization</strong> section, pick one of the following under <strong>Refresh Token Policy</strong>:</p>

        <ul>
          <li><strong>Refresh token is valid until revoked</strong> — recommended. The refresh token stays valid until a Salesforce admin revokes it, keeping the StackOne connection live indefinitely.</li>
          <li><strong>Expire refresh token after specific time</strong> — set <strong>Refresh Token Validity Period</strong> (maximum `720`) and <strong>Refresh Token Validity Unit</strong> (`Day(s)`, `Hour(s)`, `Minute(s)`). Choose the longest period your use case can tolerate — once it elapses, the end user must re-authenticate.</li>
        </ul>
      </div>
    </Step>

    <Step title="Save the policy">
      <div data-guide-step data-guide-scopes="" data-guide-display-scopes-list="">
        <p>Click <strong>Save</strong>. Policy changes apply to new authorizations; existing sessions keep their original token lifetime until revoked or refreshed.</p>
      </div>
    </Step>
  </Steps>
</section>

<section data-guide-section data-guide-scopes="">
  <h2>Retrieve the Client ID and Client Secret</h2>

  <p>Locate the Consumer Key and Consumer Secret for the Connected App you just created.</p>

  <ul>
    <li>From <strong>App Manager</strong>, find your Connected App, click the dropdown arrow, and select <strong>View</strong>.</li>
    <li>In the <strong>API (Enable OAuth Settings)</strong> section, click <strong>Manage Consumer Details</strong>.</li>
    <li>Copy the <strong>Consumer Key</strong> (Client ID) and <strong>Consumer Secret</strong> (Client Secret), and store securely for use later.</li>
  </ul>
</section>

## Creating the StackOne Connector Profile

To create the Connector Profile in StackOne for <strong>Pardot</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>Pardot</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 (Consumer Key)</strong></li>
          <li><strong>Client Secret (Consumer Secret)</strong></li>
          <li><strong>OAuth 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>Pardot</strong>.
