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

# Push a lead to your CRM manually

> Send one lead to a connected CRM from the lead page, and read the Synced to CRM state it leaves behind.

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

By the end of this page you've sent one lead to a connected CRM, Slack channel or webhook straight from its own page, without waiting for auto-push or a workflow to reach it.

<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">Leads<span className="pl-path__sep">→</span>Prospects</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 Prospects <code>read-leads</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-leads</code> to add one, <code>update-leads</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 CRM, Slack channel or webhook connected on <UiPath>Integrations → Integrations → Apps & CRM</UiPath>. Connectors belong to the workspace, not to a lead, so connecting one covers every lead in it.
* The `update-leads` permission. Without it the control is never drawn: it goes missing from the lead's action toolbar rather than showing greyed out.
* An email address on the lead, if you're pushing to HubSpot, Salesforce, Odoo, Kommo or HeyReach. These create a contact record and need one to create it from. Slack and a webhook don't: they deliver a notification instead of a record, so a name, a phone number or a LinkedIn link is enough.

## Steps

<Steps>
  <Step title="Open the lead">
    Everything in this guide lives on [the lead's own page](/en/leads/lead-details-page), in the action toolbar across the top, just before the assignee picker.
  </Step>

  <Step title="Click Push to CRM">
    The button reads **Push to CRM** on a lead with no record yet, or **Synced to CRM** once one exists. Either way, clicking it opens a dropdown.

    If nothing is connected yet, the dropdown opens straight on **No CRM Connected** with **Connect a CRM to start pushing leads** underneath, and a footer link, **Add CRM Integration**, that takes you to the Apps & CRM page.

    <Screenshot id="integrations/push-to-crm-manually--no-crm" url="/leads/prospects/187" workspace="acme-outbound" alt="The Push to CRM dropdown open with no connectors, showing No CRM Connected and a footer link labeled Add CRM Integration" caption="This is what every lead's dropdown shows until the first connector exists, however many leads you have." />
  </Step>

  <Step title="Pick a connector">
    The dropdown is headed **Select CRM to push**, or **Push to another CRM** on a lead that already carries a record. Under it sit only the connectors that can receive a lead: HubSpot, Salesforce, Odoo, Kommo, HeyReach, Slack and a webhook. Calendar and booking connectors are not listed.

    Each row is headed by the service, HubSpot or Slack, with the name of your connection to it underneath. A webhook is the exception, because it has no brand of its own: it is headed by the name you gave it when you connected it, or, if you left that blank, by the host of its endpoint, which is what it was saved under. Its icon is the favicon of the service behind that endpoint. A connector that already holds this lead shows a green tick, and its second line becomes the date it last synced.

    <Screenshot id="integrations/push-to-crm-manually--picker" url="/leads/prospects/241" alt="The Push to CRM dropdown open on an unsynced lead, listing HubSpot, Slack and a webhook connector, with an Add CRM Integration link at the bottom" caption="Every connector that can receive a lead shows up here, Slack and a webhook included, whether or not you've pushed to it before." />

    Pick any row, including one already showing a green tick, to push again.
  </Step>
</Steps>

## What happens next

<Check>
  A snackbar confirms it and names the connector you picked: "Lead successfully pushed to HubSpot", or "Lead re-synced to HubSpot" if you picked the connector already shown as synced. The lead's page then reloads itself, so the header comes back carrying whatever the push changed.
</Check>

The button reads **Synced to CRM** once the lead carries a record ID, and hovering it opens a tooltip naming the connector that left the record, the date, and the ID itself. HubSpot, Salesforce, Odoo, Kommo and HeyReach always leave one. A webhook leaves one only when your endpoint answers with an id we can recognise, which [webhook testing and delivery rules](/en/integrations/webhook-testing-and-delivery-rules) covers in full. Slack leaves nothing at all: it posts a message and the button stays **Push to CRM**.

<Screenshot id="integrations/push-to-crm-manually--synced" url="/leads/prospects/90411" alt="The Synced to CRM button with its tooltip open, reading Pushed to HubSpot, a date, and a monospace record ID" caption="The tooltip is the only place the record ID shows. Nothing else on the lead's page repeats it." />

That record ID is also the claim on the lead. [Auto-push](/en/integrations/auto-push-and-stage-filters) and the workflow's **Send to CRM** block both read it before handing a lead to a connector on their own, so a manual push to HubSpot, Salesforce, Odoo, Kommo or HeyReach stops either of them sending that lead to a second record-creating connector later. A webhook's ID is deliberately not read as a claim, and Slack leaves none, so pushing to either still leaves a real CRM free to take the lead afterwards.

The manual push itself checks none of that. It stops at whether the lead has an email address; whether a record already exists on the other side never comes up. The dropdown says as much: even on an already-synced lead its header still reads **Push to another CRM**, and picking the same connector again sends the identical request a second time. What that becomes on the other side depends on the CRM. Kommo is the one exception: its create endpoint applies its own duplicate control when it creates the lead, contact and company. For HubSpot, Salesforce, Odoo and HeyReach, whether a second push becomes a second contact is between you and that CRM's own rules, not something this button checks first.

## Troubleshooting

<AccordionGroup>
  <Accordion title="Failed to push lead to CRM">
    A catch-all failure: an expired authorization, a field the CRM rejected, or one it required and didn't get. See [Failed to push lead to CRM](/en/troubleshooting/leads-not-reaching-my-crm) for the full list of causes, including the ones auto-push shares.
  </Accordion>

  <Accordion title="No CRM Connected">
    Nothing that can receive a lead is connected to this workspace yet. Click **Add CRM Integration** in the dropdown, or open [the Apps & CRM overview](/en/integrations/overview) to connect one.
  </Accordion>

  <Accordion title="Cannot push lead to CRM without an email address">
    Only HubSpot, Salesforce, Odoo, Kommo and HeyReach need one, because each creates a contact record from it. Use **+ Add Email** on the lead's Contact Information card, or push to Slack or a webhook instead, since neither needs one.
  </Accordion>
</AccordionGroup>

## Related

<CardGroup cols={2}>
  <Card title="Auto-push analyzed leads and stage filters" icon="send" href="/en/integrations/auto-push-and-stage-filters">
    What pushes a lead on its own, and how that differs from pushing it by hand.
  </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="The lead details page" icon="id-card" href="/en/leads/lead-details-page">
    Every other card and header action on a lead's own page.
  </Card>
</CardGroup>
