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

# Apps & CRM overview

> Every connector you can add, the three shapes a connection takes, and what a card tells you once it is connected.

export const UiPath = ({children}) => {
  const parts = String(children).split(/\s*(?:→|>)\s*/).filter(Boolean);
  return <span className="pl-path">
      {parts.map((part, index) => <span key={`${index}-${part}`}>
          {index > 0 && <span className="pl-path__sep">→</span>}
          {part}
        </span>)}
    </span>;
};

export const Screenshot = ({id, alt, caption, frame = 'browser', url, marks = [], lang = 'en', workspace = 'northwind-outbound'}) => {
  const src = `/images/screenshots/${lang}/${id}.png`;
  const chrome = url ? `app.pipelime.ai/${workspace}${url}` : 'app.pipelime.ai';
  return <figure className={`pl-shot pl-shot--${frame} not-prose`}>
      <div className="pl-shot__frame">
        {frame !== 'bare' && <div className="pl-shot__bar">
            <span className="pl-shot__dots">
              <span className="pl-shot__dot" />
              <span className="pl-shot__dot" />
              <span className="pl-shot__dot" />
            </span>
            <span className="pl-shot__url">{chrome}</span>
          </div>}
        <div className="pl-shot__media">
          <img src={src} alt={alt} loading="lazy" />
          {marks.map(mark => <span key={mark.n} className="pl-shot__mark" style={{
    left: `${mark.x}%`,
    top: `${mark.y}%`
  }} aria-hidden="true">
              {mark.n}
            </span>)}
        </div>
      </div>
      {caption && <figcaption className="pl-shot__caption">{caption}</figcaption>}
    </figure>;
};

Apps & CRM is where you connect the outside services this workspace pushes leads to, reads meeting bookings from, and posts alerts into. The sidebar entry and <UiPath>Settings → Integrations</UiPath> open the same screen, and on both the card heading reads **Integrations**.

<div className="pl-availability">
  <div className="pl-availability__row">
    <div className="pl-availability__label">Where</div>
    <div className="pl-availability__value"><span className="pl-path">Integrations<span className="pl-path__sep">→</span>Integrations<span className="pl-path__sep">→</span>Apps & CRM</span></div>
  </div>

  <div className="pl-availability__row">
    <div className="pl-availability__label">Your role needs</div>
    <div className="pl-availability__value">Read access to Apps & CRM <code>read-integrations</code>. Admin, Member and Viewer have it by default.</div>
  </div>

  <div className="pl-availability__row">
    <div className="pl-availability__label">To create or change</div>
    <div className="pl-availability__value"><code>create-integrations</code> to add one, <code>update-integrations</code> to change one, on top of the permission above.</div>
  </div>

  <div className="pl-availability__note">If you cannot find this in your sidebar, your workspace may have a custom menu configuration. Contact support and we will check it for you.</div>
</div>

**Add integration** opens the whole catalog in one menu, in this order: **Calendly**, **Cal.com** and **Brevo**, which read meeting bookings back into your campaigns; **HubSpot**, **Salesforce**, **Odoo** and **Kommo**, which create a record in your CRM; **HeyReach**, which appends the lead to a LinkedIn-outreach list; **Slack**, which posts lead alerts into a channel; and **Webhook**, which sends the lead to any endpoint you name (an automation tool such as Zapier or Make, or your own API). The grid below the button is not limited to that list, though: it shows every connector this workspace has, so a **Google Calendar** connected from a meeting link appears here as a card too.

<Screenshot id="integrations/overview--add-menu" url="/integrations" alt="The Add integration menu open, listing Calendly, Cal.com, Brevo, HubSpot, HeyReach, Salesforce, Odoo, Kommo, Slack and Webhook, each with its own icon and a one-line description" caption="This menu is the only place to start a connector from this page. It is not the only way one lands here." />

Connecting takes one of three shapes, and which one you get decides where you finish. Most connectors open a dialog on top of the page: you paste an API key (Brevo, Cal.com, HubSpot, HeyReach), a set of instance credentials (Odoo) or a URL (Slack, Webhook), and the dialog reports success or failure in place without the page ever navigating. **Calendly** is the exception with no dialog at all: picking it sends your browser straight to Calendly to sign in. **Salesforce** and **Kommo** do both: a dialog first, then the same full-page redirect. Salesforce asks whether the org is **Production** or **Sandbox** before it sends you; Kommo offers **Use your own private integration (optional)**, where you supply a Kommo integration ID and secret key of your own instead of using the shared app. Where no shared Kommo app is configured for your deployment, that section is titled **Connect with your own private integration** and is the only way through.

Every one of those redirects comes back to <UiPath>Settings → Integrations</UiPath> (the settings tab, even if you started from the sidebar) with a toast saying whether the connection worked.

A connected card carries the connector's name, its logo, the account's email or the date it was connected, and a **Connected** pill (1). Kommo is the only connector that can carry a second pill, **Private app**, which appears when the connection was authorized with your own Kommo credentials rather than the shared app. A warning chip is wired for exactly three connectors, and all three are the meeting trackers: Calendly gets one when its webhook is missing or errored, and its tooltip shows Calendly's own error message where there is one, otherwise that tracking campaign meetings needs a Calendly Standard subscription; Cal.com gets one when its webhook did not subscribe; and Brevo's is the only chip you can click: **Finish setup** reopens the Brevo dialog at its webhook step. No CRM connector has a warning chip of any kind, so a CRM that has stopped accepting leads looks exactly like a healthy one here.

Below that, seven connectors (**HubSpot**, **HeyReach**, **Salesforce**, **Odoo**, **Kommo**, **Slack** and **Webhook**) carry an **Auto-push analyzed leads** block (2). It starts as one switch, off. Turn it on and five stage chips appear: **Untouched**, **Contacted**, **Opportunity**, **Meeting Scheduled** and **Converted**. Ticking chips limits the automatic push to leads in those stages; leaving all five unticked pushes at any stage. Nothing is stored until you press the **Save** button that appears as soon as you change something. Slack and Webhook sit in that list because they receive the same lead, but they only notify. They never claim it, so they can fire alongside a real CRM and again on a later stage change. The other five create a record, and only one of them ever owns a given lead: once one has pushed it, the rest skip it.

<Screenshot id="integrations/overview--connected-grid" url="/integrations" alt="Three connected cards: Ops webhook with its auto-push switch on, showing five stage chips and a Save button; a Slack card named Northwind workspace; and a Hubspot card named Northwind CRM, each with a Connected pill" caption="A card title comes from the connector's own type name, so a connected HubSpot card reads 'Hubspot'. A webhook is the exception, and shows the name you gave it." marks={[{ n: 1, x: 44, y: 7 }, { n: 2, x: 22, y: 40 }]} />

The trash icon on a card needs `delete-integrations`. The pencil needs `update-integrations` and only ever appears on a webhook card, because a webhook is the only connector whose configuration you wrote yourself; every other type has to be deleted and reconnected to change. `update-integrations` also governs the auto-push block: a role without it gets the card with no block at all, rather than a disabled one. Deleting is refused outright while a campaign still points at the connector: the tie an agent makes when it takes its meeting link from a connected Calendly account. That refusal never reaches the screen: the confirmation dialog stays open with no message, so if deleting appears to do nothing, check whether an agent is still using it.

With nothing connected, the grid is replaced by an icon, the heading **No integrations yet**, one line of explanation and a second **Add integration** button. The one in the card header stays where it is.

<Screenshot id="integrations/overview--empty" url="/integrations" alt="The Apps & CRM page with nothing connected: an icon, the heading No integrations yet, a line of explanation and an Add integration button, with a second Add integration button in the card header" caption="Nothing leaves the workspace for another service until you connect one." />

## Related

<CardGroup cols={2}>
  <Card title="Auto-push analyzed leads and stage filters" icon="funnel" href="/en/integrations/auto-push-and-stage-filters">
    What actually triggers an automatic push, and every reason a lead gets silently skipped.
  </Card>

  <Card title="Connect a webhook" icon="globe" href="/en/integrations/connect-a-webhook">
    Point any HTTP endpoint you choose, map the fields yourself, and test it before you save.
  </Card>

  <Card title="Field mapping reference per CRM" icon="table" href="/en/integrations/what-gets-pushed-per-crm">
    What object each connector creates, and which lead fields land where.
  </Card>

  <Card title="Zapier, Make and other tools" icon="puzzle" href="/en/integrations/zapier-make-and-other-tools">
    Connecting something not on this list: outbound with a webhook, inbound with the leads API.
  </Card>
</CardGroup>
