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

# HubSpot

> Connect HubSpot to Actionist and let agents maintain contacts, deals, companies, and tickets — so your pipeline stays clean without the manual work.

<div className="mxp-hero xc-border">
  <div className="exp-eyebrow mxp-rise">CRM AUTOMATION</div>

  <h2 className="mxp-hero-title mxp-rise" style={{animationDelay:'0.06s'}}>
    Your CRM, <span style={{background:'linear-gradient(90deg,#486EFF,#9000FF,#E3008E)',WebkitBackgroundClip:'text',backgroundClip:'text',color:'transparent'}}>on autopilot.</span>
  </h2>

  <p className="mxp-hero-dek mxp-rise" style={{animationDelay:'0.13s'}}>
    HubSpot holds your pipeline, your contact graph, and your support queue — but keeping it clean still takes someone's time. Connect once and hand that work to an agent: contacts logged, deals created, stale records flagged, pipeline summaries written — while you focus on closing.
  </p>
</div>

<div className="w-full py-10">
  <div className="actionist-tight flex flex-col gap-2 mb-6">
    <span className="actionist-section-eyebrow">The signature moment</span>
    <h2 className="text-2xl md:text-3xl font-semibold tracking-tight text-gray-900 dark:text-gray-50">Watch a call become a clean CRM record.</h2>

    <p className="text-base text-gray-600 dark:text-gray-400 max-w-3xl">
      A call ends. Without any manual entry, the agent logs the outcome, updates the contact, and advances the deal stage. Pick a step to see what the agent does at each point.
    </p>
  </div>

  <div className="xahs-tabs exp-tool-shell xc-try">
    <div className="mxp-srch-chips">
      <label htmlFor="xahs-tab-call"><input className="mxp-r" type="radio" name="xahs-step" id="xahs-tab-call" defaultChecked />1 — Call logged</label>
      <label htmlFor="xahs-tab-contact"><input className="mxp-r" type="radio" name="xahs-step" id="xahs-tab-contact" />2 — Contact updated</label>
      <label htmlFor="xahs-tab-deal"><input className="mxp-r" type="radio" name="xahs-step" id="xahs-tab-deal" />3 — Deal stage moved</label>
    </div>

    <div className="xahs-panel xahs-panel-call">
      <div className="mxp-window">
        <div className="mxp-window-bar">
          <span className="mxp-window-dot" />

          <span className="mxp-window-dot" />

          <span className="mxp-window-dot" />

          <span className="mxp-window-title">agent · crm-manager · workflow run</span>
        </div>

        <div className="mxp-window-body" style={{minHeight:'auto',padding:'16px 20px'}}>
          <div className="mxp-stream-line mxp-s1">
            <span className="mxp-stream-time">trigger</span>
            <span className="mxp-stream-text">Call ended with <em>Acme Corp</em> — 24 min, outcome: demo completed.</span>
          </div>

          <div className="mxp-s2" style={{margin:'8px 0'}}>
            <span className="mxp-stream-event">tool · contacts:get · id: 4821</span>
          </div>

          <div className="mxp-stream-line mxp-s3">
            <span className="mxp-stream-time">agent</span>
            <span className="mxp-stream-text">Contact found: <em>Dana Voss</em>, lifecyclestage: <em>lead</em>, no prior notes.</span>
          </div>

          <div className="mxp-s4" style={{margin:'8px 0'}}>
            <span className="mxp-stream-event">tool · contacts:get · confirmed</span>
          </div>

          <div className="mxp-stream-line mxp-s5">
            <span className="mxp-stream-time">agent</span>
            <span className="mxp-stream-text">Logged note: "Demo completed 2026-06-11. Interested in Pro plan. Follow up in 3 days."<span className="mxp-caret" /></span>
          </div>
        </div>
      </div>

      <div className="mxs-match" style={{marginTop:12}}>
        Step 1: the agent reads the contact record first — confirming the person exists and pulling current state — before writing anything. <strong>contacts:get</strong> returns <code>firstname</code>, <code>lastname</code>, <code>email</code>, <code>lifecyclestage</code>.
      </div>
    </div>

    <div className="xahs-panel xahs-panel-contact">
      <div className="mxp-window">
        <div className="mxp-window-bar">
          <span className="mxp-window-dot" />

          <span className="mxp-window-dot" />

          <span className="mxp-window-dot" />

          <span className="mxp-window-title">agent · crm-manager · workflow run</span>
        </div>

        <div className="mxp-window-body" style={{minHeight:'auto',padding:'16px 20px'}}>
          <div className="mxp-stream-line mxp-s1">
            <span className="mxp-stream-time">agent</span>
            <span className="mxp-stream-text">Updating <em>Dana Voss</em> — setting lifecyclestage to <em>opportunity</em>.</span>
          </div>

          <div className="mxp-s2" style={{margin:'8px 0'}}>
            <span className="mxp-stream-event">tool · contacts:update · id: 4821</span>
          </div>

          <div className="mxp-stream-line mxp-s3">
            <span className="mxp-stream-time">result</span>

            <span className="mxp-stream-text">
              lifecyclestage: <em>opportunity</em> 
              <span className="xahs-status green">updated</span>
            </span>
          </div>

          <div className="mxp-stream-line mxp-s4">
            <span className="mxp-stream-time">agent</span>
            <span className="mxp-stream-text">Contact record reflects the new stage. Proceeding to deal.<span className="mxp-caret" /></span>
          </div>
        </div>
      </div>

      <div className="mxs-match" style={{marginTop:12}}>
        Step 2: the lifecyclestage advances from <strong>lead</strong> to <strong>opportunity</strong> — no form, no manual update. The contact record in HubSpot reflects the real state of the relationship.
      </div>
    </div>

    <div className="xahs-panel xahs-panel-deal">
      <div className="mxp-window">
        <div className="mxp-window-bar">
          <span className="mxp-window-dot" />

          <span className="mxp-window-dot" />

          <span className="mxp-window-dot" />

          <span className="mxp-window-title">agent · crm-manager · workflow run</span>
        </div>

        <div className="mxp-window-body" style={{minHeight:'auto',padding:'16px 20px'}}>
          <div className="mxp-stream-line mxp-s1">
            <span className="mxp-stream-time">agent</span>
            <span className="mxp-stream-text">Checking for an existing deal on Acme Corp…</span>
          </div>

          <div className="mxp-s2" style={{margin:'8px 0'}}>
            <span className="mxp-stream-event">tool · deals:list · filter: company 4821</span>
          </div>

          <div className="mxp-stream-line mxp-s3">
            <span className="mxp-stream-time">result</span>
            <span className="mxp-stream-text">Deal found: <em>Acme Corp Pro Trial</em>, stage: <em>appointmentscheduled</em>.</span>
          </div>

          <div className="mxp-s4" style={{margin:'8px 0'}}>
            <span className="mxp-stream-event">tool · deals:update · id: 9034 · stage: presentationscheduled</span>
          </div>

          <div className="mxp-stream-line mxp-s5">
            <span className="mxp-stream-time">result</span>

            <span className="mxp-stream-text">
              dealstage: <em>presentationscheduled</em> 
              <span className="xahs-status purple">stage moved</span>
            </span>
          </div>

          <div className="mxp-stream-line mxp-s6">
            <span className="mxp-stream-time">agent</span>
            <span className="mxp-stream-text">Pipeline updated. Notification posted to <em>#sales</em> in Slack.<span className="mxp-caret" /></span>
          </div>
        </div>
      </div>

      <div className="mxs-match" style={{marginTop:12}}>
        Step 3: the deal stage advances in one tool call. Stage IDs are account-specific strings — verify the correct values in your HubSpot pipeline settings before encoding them in agent instructions.
      </div>
    </div>
  </div>
</div>

<div className="w-full py-10 xc-rise">
  <div className="actionist-tight flex flex-col gap-2 mb-6">
    <span className="actionist-section-eyebrow">Real workflows</span>
    <h2 className="text-2xl md:text-3xl font-semibold tracking-tight text-gray-900 dark:text-gray-50">Three recipes Dario runs every week.</h2>

    <p className="text-base text-gray-600 dark:text-gray-400 max-w-3xl">
      Each card is a complete agent workflow — trigger, tools called, output. Copy the pattern and tune the instructions to your pipeline.
    </p>
  </div>

  <div className="xc-recipes">
    <div className="xc-recipe">
      <div className="xc-recipe-who">
        <i style={{background:'linear-gradient(135deg,#24A4FF,#6C37FF)'}} />

        Dario · Sales
      </div>

      <div className="xc-recipe-flow">
        Call ends with a prospect. Agent reads the <em>contacts:get</em> record, writes the outcome note, then creates a follow-on deal via <em>deals:create</em> with the updated stage — all before the next call starts.
      </div>

      <span className="xc-recipe-save">saves \~6 min per call</span>
    </div>

    <div className="xc-recipe">
      <div className="xc-recipe-who">
        <i style={{background:'linear-gradient(135deg,#24A4FF,#6C37FF)'}} />

        Dario · Sales
      </div>

      <div className="xc-recipe-flow">
        Every Monday at 09:00, agent pulls open deals via <em>deals:list</em> and flags any where <em>closedate</em> has passed or <em>dealstage</em> has not moved in 14 days. Posts a nudge list to <em>#sales</em> in Slack — typically <em>8 to 12 deals</em> surface each week.
      </div>

      <span className="xc-recipe-save">live in 10 min</span>
    </div>

    <div className="xc-recipe">
      <div className="xc-recipe-who">
        <i style={{background:'linear-gradient(135deg,#24A4FF,#6C37FF)'}} />

        Dario · Sales
      </div>

      <div className="xc-recipe-flow">
        Friday at 17:00, agent calls <em>deals:list</em> for all open deals, groups by stage, counts deals and total pipeline value per stage, and drafts a plain-text weekly pipeline summary — sent to Dario by email and posted to the sales channel in under <em>90 seconds</em>.
      </div>

      <span className="xc-recipe-save">saves \~3 hrs/wk</span>
    </div>
  </div>
</div>

<hr className="xc-divider" />

<div className="w-full py-10 xc-rise">
  <div className="actionist-tight flex flex-col gap-2 mb-6">
    <span className="actionist-section-eyebrow">9 tools, 4 CRM objects</span>
    <h2 className="text-2xl md:text-3xl font-semibold tracking-tight text-gray-900 dark:text-gray-50">What agents can do.</h2>

    <p className="text-base text-gray-600 dark:text-gray-400 max-w-3xl">
      Each object group is scoped individually — grant read-only to reporting agents and read + write only to agents that need to make changes.
    </p>
  </div>

  <div className="mxs-tiers" style={{gridTemplateColumns:'repeat(auto-fit,minmax(175px,1fr))'}}>
    <div className="mxs-tier contacts">
      <span className="xahs-count">2</span>
      <strong>Contacts</strong>
      <span className="tag">Read only</span>
      <p>List up to 100 contacts per call, or fetch a single contact by ID. Default fields include <code>firstname</code>, <code>lastname</code>, <code>email</code>, <code>phone</code>, <code>company</code>, and <code>lifecyclestage</code>.</p>
    </div>

    <div className="mxs-tier deals">
      <span className="xahs-count">2</span>
      <strong>Deals</strong>
      <span className="tag">Read + write</span>
      <p>List open deals with stage and close date, or create a deal with a name, amount, and pipeline stage. Default stage on create: <code>appointmentscheduled</code>.</p>
    </div>

    <div className="mxs-tier companies">
      <span className="xahs-count">3</span>
      <strong>Companies</strong>
      <span className="tag">Read + write</span>
      <p>List companies, fetch a record by ID with domain and location data, or create a new company with name, domain, and industry.</p>
    </div>

    <div className="mxs-tier tickets">
      <span className="xahs-count">2</span>
      <strong>Tickets</strong>
      <span className="tag">Read + write</span>
      <p>List open tickets, fetch details including pipeline stage and priority, or create a ticket with subject, content, stage, and priority (<code>LOW</code>, <code>MEDIUM</code>, <code>HIGH</code>). Default stage <code>"1"</code> maps to New in HubSpot's built-in Support Pipeline.</p>
    </div>
  </div>
</div>

<div className="w-full py-10 xc-rise">
  <div className="actionist-tight flex flex-col gap-2 mb-6">
    <span className="actionist-section-eyebrow">Setup</span>
    <h2 className="text-2xl md:text-3xl font-semibold tracking-tight text-gray-900 dark:text-gray-50">Connect HubSpot.</h2>

    <p className="text-base text-gray-600 dark:text-gray-400 max-w-3xl">
      HubSpot connects via OAuth 2.0. You choose which service groups to enable before the OAuth handshake, so the granted scopes match exactly what your agents need.
    </p>
  </div>

  <Steps>
    <Step title="Open Integrations">
      In Actionist, go to **Settings → Integrations**. Find HubSpot in the **CRM** category — the card shows the description "Contacts, deals, companies & tickets."
    </Step>

    <Step title="Choose your services">
      Click the HubSpot card to open the detail panel. The services grid shows 7 toggleable permission groups across the 4 object types: Contacts (read), Deals (read, write), Companies (read, write), Tickets (read, write). Each toggle displays how many tools it unlocks. Enable the groups your agents will use.
    </Step>

    <Step title="Authorize via OAuth">
      Click **Connect HubSpot**. The OAuth flow opens at `app.hubspot.com`. Sign in and grant the requested `crm.objects.*` scopes for the services you selected.
    </Step>

    <Step title="Confirm access">
      The panel updates each enabled service with a **Read granted** or **Write granted** badge. Those tools are now available to every agent in your workspace.
    </Step>
  </Steps>

  {/* TODO(image): hubspot-connect-services — IMAGE SPEC: Actionist Integrations page, HubSpot provider detail panel. Services grid shows all 7 permission toggles across 4 groups (Contacts read, Deals read+write, Companies read+write, Tickets read+write) with tool-count chips ('2 tools', '1 tool', etc.). The 'Connect HubSpot' button is visible at the bottom, before OAuth. Dark background. — replace this CSS mock with the real screenshot */}

  <div className="mxp-window" style={{margin:'24px 0 8px'}}>
    <div className="mxp-window-bar">
      <span className="mxp-window-dot" />

      <span className="mxp-window-dot" />

      <span className="mxp-window-dot" />

      <span className="mxp-window-title">Settings · Integrations · HubSpot</span>
    </div>

    <div className="xahs-mock-panel-body">
      <div className="xahs-mock-provider-head">
        <span className="xahs-mock-provider-icon">HS</span>

        <div>
          <div className="xahs-mock-provider-name">HubSpot</div>
          <div className="xahs-mock-provider-sub">Contacts, deals, companies & tickets</div>
        </div>

        <span className="xahs-mock-badge-crm">CRM</span>
      </div>

      <div className="xahs-mock-services-label">Services</div>

      <div className="xahs-mock-services-grid">
        <div className="xahs-mock-row-service">
          <div className="xahs-mock-svc-left">
            <span className="xahs-mock-svc-name">Contacts</span>
            <span className="xahs-mock-svc-chip">2 tools</span>
          </div>

          <div className="xahs-mock-svc-right">
            <span className="xahs-mock-svc-scope">Read</span>

            <span className="xahs-mock-toggle on" />
          </div>
        </div>

        <div className="xahs-mock-row-service">
          <div className="xahs-mock-svc-left">
            <span className="xahs-mock-svc-name">Deals</span>
            <span className="xahs-mock-svc-chip">1 tool</span>
          </div>

          <div className="xahs-mock-svc-right">
            <span className="xahs-mock-svc-scope">Read</span>

            <span className="xahs-mock-toggle on" />
          </div>
        </div>

        <div className="xahs-mock-row-service">
          <div className="xahs-mock-svc-left">
            <span className="xahs-mock-svc-name">Deals</span>
            <span className="xahs-mock-svc-chip">1 tool</span>
          </div>

          <div className="xahs-mock-svc-right">
            <span className="xahs-mock-svc-scope">Write</span>

            <span className="xahs-mock-toggle on" />
          </div>
        </div>

        <div className="xahs-mock-row-service">
          <div className="xahs-mock-svc-left">
            <span className="xahs-mock-svc-name">Companies</span>
            <span className="xahs-mock-svc-chip">2 tools</span>
          </div>

          <div className="xahs-mock-svc-right">
            <span className="xahs-mock-svc-scope">Read</span>

            <span className="xahs-mock-toggle on" />
          </div>
        </div>

        <div className="xahs-mock-row-service">
          <div className="xahs-mock-svc-left">
            <span className="xahs-mock-svc-name">Companies</span>
            <span className="xahs-mock-svc-chip">1 tool</span>
          </div>

          <div className="xahs-mock-svc-right">
            <span className="xahs-mock-svc-scope">Write</span>

            <span className="xahs-mock-toggle on" />
          </div>
        </div>

        <div className="xahs-mock-row-service">
          <div className="xahs-mock-svc-left">
            <span className="xahs-mock-svc-name">Tickets</span>
            <span className="xahs-mock-svc-chip">2 tools</span>
          </div>

          <div className="xahs-mock-svc-right">
            <span className="xahs-mock-svc-scope">Read</span>

            <span className="xahs-mock-toggle off" />
          </div>
        </div>

        <div className="xahs-mock-row-service">
          <div className="xahs-mock-svc-left">
            <span className="xahs-mock-svc-name">Tickets</span>
            <span className="xahs-mock-svc-chip">1 tool</span>
          </div>

          <div className="xahs-mock-svc-right">
            <span className="xahs-mock-svc-scope">Write</span>

            <span className="xahs-mock-toggle off" />
          </div>
        </div>
      </div>

      <div className="xahs-mock-connect-row">
        <button className="xahs-mock-connect-btn" tabIndex={-1} aria-hidden="true">Connect HubSpot</button>
      </div>
    </div>
  </div>

  <Warning>
    Disconnecting HubSpot removes Actionist's access tokens both locally and from your HubSpot account. Any agent using HubSpot tools loses access immediately. You can reconnect at any time.
  </Warning>
</div>

<div className="w-full py-10 xc-rise">
  <div className="actionist-tight flex flex-col gap-2 mb-6">
    <span className="actionist-section-eyebrow">Tool reference</span>
    <h2 className="text-2xl md:text-3xl font-semibold tracking-tight text-gray-900 dark:text-gray-50">Tools by object group.</h2>

    <p className="text-base text-gray-600 dark:text-gray-400 max-w-3xl">
      Each accordion covers the tools in that group, the default properties returned, and a concrete example of what an agent can do with them.
    </p>
  </div>

  <AccordionGroup>
    <Accordion title="Contacts (2 tools — read only)" icon="book-user" defaultOpen={true}>
      <strong>`contacts:list`</strong> — returns up to 100 contacts per call (default 25). Default fields: `firstname`, `lastname`, `email`, `phone`. Use this to pull today's new leads or build a pre-meeting briefing.

      <strong>`contacts:get`</strong> — fetch a single contact by ID. Default fields expand to include `company` and `lifecyclestage`. Use this when an agent needs the full picture on one person before drafting an outreach message.

      **Example:** "List the 10 most recently added contacts" — agent calls `contacts:list` with `limit: 10` and formats the results as a Slack digest.
    </Accordion>

    <Accordion title="Deals (2 tools — read + write)" icon="handshake">
      <strong>`deals:list`</strong> — list deals with default fields `dealname`, `amount`, `dealstage`, `closedate`. Cap at 100 per call. Good for pipeline reviews and stale-deal detection.

      <strong>`deals:create`</strong> — create a deal with a required `dealname`, optional `amount`, and `dealstage` (default `appointmentscheduled`). Deal stage IDs are account-specific — verify the correct strings in your HubSpot pipeline settings before using custom stages.

      **Example:** "Create a deal called Q3 Expansion for \$15,000" — agent calls `deals:create` with `dealname: "Q3 Expansion"`, `amount: 15000`.
    </Accordion>

    <Accordion title="Companies (3 tools — read + write)" icon="building">
      <strong>`companies:list`</strong> — list companies with `name`, `domain`, `industry`, `numberofemployees`. Useful for account mapping or enrichment runs.

      <strong>`companies:get`</strong> — fetch a single company by ID; adds `phone`, `city`, and `country` to the default field set. Use before a call to pull the full account profile.

      <strong>`companies:create`</strong> — create a company record with a required `name`, optional `domain` and `industry`. Check whether the account already exists first — HubSpot's CRM v3 API does not deduplicate automatically.

      **Example:** "Look up Acme Corp by company ID and return their industry and headcount" — agent calls `companies:get`.
    </Accordion>

    <Accordion title="Tickets (3 tools — read + write)" icon="ticket">
      <strong>`tickets:list`</strong> — list tickets with default fields `subject`, `content`, `hs_pipeline_stage`, `hs_ticket_priority`, `createdate`. Good for daily support queue reviews.

      <strong>`tickets:get`</strong> — fetch a ticket by ID; also returns `hs_pipeline`, `hs_lastmodifieddate`. Useful when an agent needs to cross-reference a ticket with a contact or deal.

      <strong>`tickets:create`</strong> — create a ticket with a required `subject`, optional `content`, `stage` (default `"1"` = New in the built-in Support Pipeline), and `priority` (`LOW`, `MEDIUM`, or `HIGH`). Custom pipelines use different numeric IDs — confirm in HubSpot before assigning.

      **Example:** "Create a support ticket: login broken, high priority" — agent calls `tickets:create` with `subject: "Login broken"`, `priority: "HIGH"`.
    </Accordion>
  </AccordionGroup>
</div>

<div className="w-full py-10 xc-rise">
  <div className="actionist-tight flex flex-col gap-2 mb-6">
    <span className="actionist-section-eyebrow">Best practices</span>
    <h2 className="text-2xl md:text-3xl font-semibold tracking-tight text-gray-900 dark:text-gray-50">Tips before you go live.</h2>
  </div>

  <AccordionGroup>
    <Accordion title="Grant only the scopes agents actually need" icon="lock" defaultOpen={true}>
      A reporting agent that summarises pipeline never needs `deals:write` or `tickets:write`. Use the service toggles before connecting to grant only the permissions each agent's tasks require. Narrower grants mean a smaller blast radius if something goes wrong, and they signal intent clearly when you audit access later.
    </Accordion>

    <Accordion title="Override the properties parameter for richer data" icon="sliders-horizontal">
      All list and get tools return a small default field set. If your agent needs `hs_lead_status`, `notes_last_contacted`, or a custom property, pass those names as a comma-separated string in the `properties` parameter in the agent's tool configuration. You only pay for what you fetch.
    </Accordion>

    <Accordion title="Deal stage IDs are account-specific strings" icon="git-branch">
      The default stage on `deals:create` is `appointmentscheduled` — a built-in HubSpot pipeline stage. If your team uses custom pipelines, retrieve the exact stage ID strings from your HubSpot pipeline settings before writing them into agent instructions. A wrong stage ID causes the create call to fail.
    </Accordion>

    <Accordion title="Ticket stage '1' means New — custom pipelines differ" icon="tag">
      HubSpot's built-in Support Pipeline uses the numeric string `"1"` for the New stage. Custom pipelines use different numeric IDs. Before creating tickets in a custom pipeline, confirm the correct stage IDs in HubSpot → Settings → Support → Pipelines.
    </Accordion>

    <Accordion title="Try the CRM Manager template" icon="layout-template">
      Actionist ships a built-in <strong>CRM Manager</strong> agent template — "The organised keeper of your relationships. I make sure every contact, deal, and note is in the right place — so nothing slips." Pairing this template with your HubSpot connection is the fastest path to automated pipeline hygiene, stale-deal nudging, and weekly summaries.
    </Accordion>

    <Accordion title="No bundled MCP for HubSpot" icon="plug">
      HubSpot has no bundled MCP server in Actionist. The native OAuth integration is the primary connection path. If you need capabilities beyond the 9 live tools, you can add a third-party HubSpot MCP via <strong>Apps → MCPs</strong> — but for most CRM workflows the built-in tools are sufficient.
    </Accordion>
  </AccordionGroup>
</div>

<div className="w-full py-10 xc-rise">
  <div className="actionist-cta-panel xc-border">
    <div className="relative z-10 flex flex-col items-center gap-5 max-w-2xl mx-auto">
      <span className="actionist-eyebrow">Ready to connect</span>

      <h2 className="text-2xl md:text-3xl font-semibold tracking-tight text-white leading-tight">
        Automate your pipeline in minutes.
      </h2>

      <p className="text-base md:text-lg text-white/85">
        Connect HubSpot via OAuth, enable the CRM Manager template, and watch contacts, deals, and tickets stay current — without any manual entry.
      </p>

      <div className="flex flex-wrap items-center justify-center gap-3 pt-2">
        <a className="actionist-cta-btn-primary" href="https://app.actionist.ai" target="_blank" rel="noreferrer">
          Open the Dashboard

          <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2.2" strokeLinecap="round" strokeLinejoin="round">
            <path d="M5 12h14" />

            <path d="m12 5 7 7-7 7" />
          </svg>
        </a>

        <a className="actionist-cta-btn-secondary" href="mailto:support@actionist.ai">
          Email the team
        </a>
      </div>
    </div>
  </div>
</div>

<div className="w-full pt-2 pb-6">
  <p className="actionist-trust-line">
    OAuth 2.0 — scoped exactly to what your agents need.<br />
    9 tools across 4 CRM objects · Granular permission toggles · No bundled MCP required.
  </p>
</div>

<div className="w-full pb-16">
  <div className="actionist-tight flex flex-col gap-2 mb-6">
    <span className="actionist-section-eyebrow">Keep going</span>
    <h2 className="text-2xl md:text-3xl font-semibold tracking-tight text-gray-900 dark:text-gray-50">Related topics.</h2>
  </div>

  <Columns cols={4}>
    <Card title="All apps" icon="grid-2x2" href="/apps">
      Browse every app in the Actionist catalog — CRM, finance, communication, and more.
    </Card>

    <Card title="Agents" icon="bot" href="/Folders/agents">
      Build the CRM Manager agent and pair it with HubSpot to automate pipeline hygiene end to end.
    </Card>

    <Card title="Schedules" icon="calendar-clock" href="/Folders/schedules">
      Run weekly pipeline summaries and stale-deal nudges on a fixed schedule without manual triggers.
    </Card>

    <Card title="Slack" icon="https://cdn.simpleicons.org/slack" href="/apps/slack">
      Chain HubSpot and Slack in one workflow — create a deal, then post a notification to your sales channel in the same run.
    </Card>
  </Columns>
</div>
