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

# Connect Kommo

> Authorize Kommo through our app, or with your own private integration, and get a lead plus its contact and company.

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>;
};

Authorize Kommo, either through our own Kommo app or through a private integration you create yourself, and push a lead over with its contact and its company embedded in one request.

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

## Before you begin

* A Kommo account you can sign in to and authorize.
* Permission inside that Kommo account to create a private integration, but only if you are going to connect with your own credentials. The dialog tells you whether that is a choice or the only way in.

## Steps

<Steps>
  <Step title="Open the Kommo connect dialog">
    Go to <UiPath>Integrations → Apps & CRM</UiPath>, choose **Add integration**, then choose **Kommo** from the list. A dialog opens describing what gets pushed, above a panel titled **How the connection works**: you'll be redirected to Kommo to sign in and choose the account to connect, and no password is stored, only a revocable access token.

    <Screenshot id="integrations/connect-kommo--optional-mode" frame="bare" alt="The Connect Kommo dialog: a description of what gets pushed, a How the connection works panel, and a collapsed Use your own private integration (optional) section underneath it" caption="Every string in this dialog, and in the guide inside it, is translated into Spanish. The HubSpot, Salesforce, Odoo and HeyReach dialogs carry no Spanish strings of their own." />

    <Note>
      The shared Kommo app is not published in Kommo's own integration marketplace, so you will not find it by browsing Kommo's app directory. That changes nothing about how you connect from this side.
    </Note>
  </Step>

  <Step title="Check whether you need your own private integration">
    Underneath the panel sits **Use your own private integration (optional)**, collapsed. That is the normal state: the shared app handles the connection, and you can skip straight to connecting.

    Where the server has no shared Kommo credentials, the collapsible section is replaced by a warning-bordered one titled **Connect with your own private integration**, and you cannot skip it. Its explainer reads "This workspace has no shared Kommo credentials configured, so you need to create a private integration in your Kommo account and paste its keys here to connect." **Connect Kommo** starts disabled there and turns on as soon as you type into either credentials field. It does not check that you filled both in: leaving one empty gets you an error when you try to connect, not a disabled button.

    <Screenshot id="integrations/connect-kommo--required-mode" frame="bare" alt="The same dialog on a deployment with no shared Kommo app: a warning-bordered section titled Connect with your own private integration replaces the collapsible one, with empty Integration ID and Secret key fields and Connect Kommo disabled underneath" caption="Which of the two layouts you get is decided by the server's own Kommo credentials, not by anything you can change in the workspace." />
  </Step>

  <Step title="Create a private integration in Kommo, if you're using one">
    Whether the section is optional or required, choose **Show me how to create my own private integration**. In the optional layout, expand the section first. A three-stage walkthrough opens on top of the dialog, with a screenshot of Kommo's own screens at each stage.

    <Screenshot id="integrations/connect-kommo--guide" frame="bare" alt="The Create your private Kommo integration walkthrough: a three-stage stepper, six numbered instructions for the first stage covering Kommo's Settings and Integration marketplace screens, and a dark card showing the redirect URL to paste in with a copy button" caption="The badges painted into the Kommo screenshots are numbered 1 to 10 and match the steps in the panel, even though the stepper above them only has three stages." />

    In short: in Kommo, open Settings, then Integration marketplace, then create an integration. Paste in the redirect URL the guide shows you (a copy button sits next to it), name the integration anything you'll recognize, and save it. Open its Keys and scopes tab, copy the Integration ID as your Client ID, generate a secret key, and copy that too. Kommo shows the secret only once.

    Paste both values into the **Integration ID (Client ID)** and **Secret key (Client Secret)** fields back in the dialog. Nothing checks them here. Kommo offers no way to validate client credentials without an authorization code, so a wrong pair only surfaces after the round trip.
  </Step>

  <Step title="Connect and authorize in Kommo">
    Choose **Connect Kommo**. If you entered your own credentials we save them first, then your browser leaves the app for Kommo's own sign-in screen. Sign in, pick the account to connect, and approve access. Kommo then sends you back.

    <Note>
      If this workspace already has a Kommo connection and you type in your own credentials, a warning appears before you continue: "This company already has a Kommo connection. Connecting with these credentials re-authorizes it under your private integration." Signing in to the same Kommo account does exactly that. Signing in to a different Kommo account leaves the first connection alone and adds a second one. Either way, a connection records the app whose credentials issued its tokens, because Kommo refuses a token refresh presented by a different app.
    </Note>
  </Step>
</Steps>

## What happens next

<Check>
  You land back on <UiPath>Settings → Integrations</UiPath> (the settings tab, even though you started on the sidebar) with a toast confirming Kommo connected. The Kommo card there is the same one on <UiPath>Integrations → Apps & CRM</UiPath>, showing a **Connected** chip, plus a **Private app** chip if you connected with your own credentials.
</Check>

Connecting doesn't push anything by itself. Nothing moves until you turn on **Auto-push analyzed leads** on the card, choose **Push to CRM** on a lead's own page, or add a **Send to CRM** step to a workflow. See [Auto-push analyzed leads and stage filters](/en/integrations/auto-push-and-stage-filters) and [Push a lead to your CRM manually](/en/integrations/push-to-crm-manually).

Only one CRM ever owns a lead. If HubSpot, Salesforce, Odoo or HeyReach already created a record for it, the automatic push skips Kommo without telling you, and a **Send to CRM** step takes its Sent branch while creating nothing there.

Once a lead is pushed, Kommo receives a single request that creates the lead with an embedded contact, plus an embedded company whenever the lead's company has a name, all with Kommo's own duplicate control. Notes and email history follow in a second call. We never set a pipeline or a stage on the lead, so it drops into your account's default pipeline and first stage. [Field mapping reference per CRM](/en/integrations/what-gets-pushed-per-crm) has the field-by-field detail, including what the note history looks like.

## Troubleshooting

<AccordionGroup>
  <Accordion title="'Enter both the Integration ID and the Secret key, or leave both empty.'">
    You typed one of the private-integration fields but not the other, and the dialog stopped you on the way out rather than greying the button out. Paste both values from Kommo's Keys and scopes tab, or clear both to fall back to the shared app where there is one.
  </Accordion>

  <Accordion title="'Failed to connect Kommo. Please try again.'">
    Kommo has no way to check a private integration's credentials ahead of time, so a wrong Integration ID or Secret key only surfaces here, after you're sent to Kommo and back. Reopen the guide, copy the Integration ID and secret key fresh from Kommo's own Keys and scopes tab, and try again.

    The pair you entered is held for the next attempt, so reopening the dialog shows the private-integration section already expanded, with a note saying the credentials are ready and a **Remove** button beside it. Type new values over them, or choose **Remove** to go back to the shared app.

    If you were using the shared app and this still happens, check whether the dialog is showing you the required layout from step 2. On a server with no shared Kommo credentials the attempt is turned away before it ever reaches Kommo.
  </Accordion>

  <Accordion title="'This company already has a Kommo connection...'">
    This appears only when a Kommo connection already exists for this workspace and you've typed in your own credentials. Continue and sign in to the same Kommo account, and that connection is re-authorized under the new credentials. Sign in to a different Kommo account and you get a second connection alongside the first. Only one of them can own a given lead.
  </Accordion>
</AccordionGroup>

## Related

<CardGroup cols={2}>
  <Card title="Field mapping reference per CRM" icon="table" href="/en/integrations/what-gets-pushed-per-crm">
    What object each connector creates, which lead fields land where, and what happens to your email history.
  </Card>

  <Card title="Auto-push analyzed leads and stage filters" icon="send" href="/en/integrations/auto-push-and-stage-filters">
    What triggers an automatic push, which stages it fires on, and every reason a lead is silently skipped.
  </Card>

  <Card title="Whitelabel: sell the platform as your own" icon="palette" href="/en/settings-team/whitelabel-overview">
    What can carry your brand, including the name this dialog uses and the tag added to every lead Kommo receives.
  </Card>
</CardGroup>
