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

# Add leads manually or import a CSV

> The Add Lead form, pasting a list of addresses, and mapping the columns of a lead CSV.

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 have leads in Prospects: added one at a time, pasted in from a list, or imported from a CSV.

<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

* Leads and their tags belong to the workspace you're viewing. Switch first if the leads you want to add belong somewhere else.
* Running an import needs `create-imports` on top of the permissions above. Without it the **Import** shortcut is not drawn at all, and the CSV wizard's **Start Import** is inert with a tooltip in place of a working button.
* Pasting a list and importing a CSV both need a tag before they will start, so the workspace needs at least one tag. Adding a lead by hand does not.

## Steps

<Steps>
  <Step title="Open the Add menu">
    Go to <UiPath>Leads → Prospects</UiPath> and choose **Add**. The menu that opens offers four ways to put
    leads straight into the list: **Add manually**, **Paste email addresses**, **Import a CSV** and
    **Search new leads**. This page covers the first three: the manual form, the paste flow, and the CSV
    wizard, including its column mapping.

    A fifth card sits below a divider: **Lead generation**, which hands off to the automated-search flow.
    From Prospects that hand-off goes nowhere. Set a lead source up from the agent instead.

    There is also a shortcut next to **Add**: the **Import** icon opens the same CSV wizard directly, at
    step 4 below, skipping this menu.
  </Step>

  <Step title="Add a lead by hand">
    Pick **Add manually**. **Name** is the only field this form requires. **Tags**, **Company**,
    **Job Title**, **Email** and **Phone Number** are all optional. Email and Phone Number each hold
    exactly one entry here; a CSV can carry up to three of each if a lead needs more than one address or
    number. **Company** links the lead to a company already in your workspace, or opens a form to create
    one without leaving this screen. Choose **Add** to save.

    <Screenshot id="leads/add-leads-and-import-csv--add-lead-form" url="/leads/prospects" alt="The Add a lead manually form with Tags, Company, Name, Job Title, Email and Phone Number fields, a tag and a company already picked" caption="Name is the only field this form insists on." />
  </Step>

  <Step title="Paste a list of addresses instead">
    Pick **Paste email addresses** to add several leads at once. Separate them however you like: commas,
    spaces, tabs, semicolons and new lines all split the list, and repeats are dropped. The count of valid
    addresses updates as you type, anything unreadable is counted separately as skipped, and the valid ones
    are listed as removable chips. Pick a tag, leave **AI Company Recognition** on or switch it off, then
    submit. The button names how many leads it is about to add.

    The leads are created in the background. A toast confirms the import has started and the overlay closes
    straight away, before any of those leads exist.

    Each pasted address becomes a lead named from whatever comes before the @. There's nowhere on this
    screen to give a proper name.

    <Screenshot id="leads/add-leads-and-import-csv--paste-emails" url="/leads/prospects" alt="The Paste email addresses screen with three addresses parsed into chips, a 3 valid counter, and a tag selected" caption="Nothing here waits on a network round trip until you submit. The count updates as you type." />
  </Step>

  <Step title="Import a CSV instead">
    Pick **Import a CSV**, then drop a file on the dropzone or click it to browse for one. No file to hand?
    The same screen offers a template carrying every column PipeLime understands, the required ones marked
    with an asterisk.

    PipeLime reads the header row and matches your columns to its own fields: a built-in multilingual match,
    plus a short AI pass for whatever the built-in match does not recognise. If that AI pass is slow or
    unavailable, the built-in match stands on its own. When both required fields (Name and Primary Email)
    came out matched, the wizard skips the mapping step and lands on Review; otherwise you map the columns
    yourself.
  </Step>

  <Step title="Map the columns, if PipeLime asks you to">
    Every column in your file gets a dropdown of every field PipeLime understands. Only two are required,
    and they are marked with an asterisk: Name and Primary Email. The rest are optional: a description, job
    title, two further email columns, three phone columns, location, social links, and a matching set of
    fields for the lead's company. A column PipeLime already matched shows highlighted; a field can only be
    claimed once, so a field another column already holds is greyed out in the list. Leave a column on
    **Don't import** to drop it. **Continue** stays off until both required fields are mapped.

    There is no field for a company's name. The company columns cover its website, description, contact
    details and social links instead.

    <Screenshot id="leads/add-leads-and-import-csv--column-mapping" url="/leads/prospects" alt="The column mapping table with a CSV column already matched to Job Title and another to Country, highlighted, and the remaining columns still unmapped" caption="A matched column shows highlighted; anything still blank needs a field picked by hand." />
  </Step>

  <Step title="Review, tag it, and start the import">
    The review screen previews the first five rows and counts every row in the file, next to one more
    decision: **AI Company Recognition**, on by default, identifies a company from each lead's email domain
    and builds a profile for it (description, logo, contact info, social links), skipping generic providers
    like Gmail, Yahoo and Outlook. Pick a tag, which is required here too, then choose **Start Import**.

    A progress screen narrates each stage while the import runs. A large file can take a few minutes; keep
    the window open, and the wizard closes itself once the import reports that it finished.
  </Step>
</Steps>

## What happens next

<Check>
  The form, wizard or overlay closes and the Prospects list reloads by itself.
</Check>

How much is already in that list depends on the route you took.

* A lead added by hand exists the moment you save it, and a toast says so.
* A pasted list is queued, so the reload that follows the toast usually shows nothing new yet.
* A CSV started from **Import a CSV** holds its progress screen until the import reports that it finished,
  so those leads are there when it closes. Started from the **Import** shortcut instead, the same wizard
  also raises a "Leads imported successfully" toast.

Nothing watches for a queued import afterwards. Choose **Refresh** a minute later; when a reload finds more
leads than the list held before, a toast counts them for you.

<Screenshot id="leads/add-leads-and-import-csv--import-result" url="/leads/prospects" alt="The Prospects list with a toast reading Importing 2 leads in the background" caption="A representative example: the upload behind this toast is simulated, because the demo stack this image is captured in has no file storage to accept it. The paste flow's only signal is this toast, and the leads are still being created behind it." />

## Troubleshooting

<AccordionGroup>
  <Accordion title="Continue or Start Import stays off">
    **Continue**, on the column mapping step, needs both required fields (Name and Primary Email) pointed
    at a column. **Start Import**, on the review step, needs a tag. If the tag picker offers no tags and no
    way to create one, your role cannot create tags; ask someone who can to make one for you. If
    **Start Import** is greyed out even with a tag chosen, hover it: a role without permission to run
    imports gets a tooltip there rather than a working button.
  </Accordion>

  <Accordion title="A CSV you drag in is rejected">
    The dropzone only takes a file the browser reports as `text/csv`, and refuses anything else with
    **Please upload a CSV file**. Clicking the dropzone to browse for the file skips that check, so use it
    when you know the file is a CSV. Either way PipeLime expects comma-separated values with a header row.
  </Accordion>

  <Accordion title="The import ends in an error instead of finishing">
    A CSV import that fails partway replaces the progress screen with the error and a **Back to review**
    button. It returns you to the review step with your file and mapping intact, so you can change them and
    start again without uploading anything.
  </Accordion>
</AccordionGroup>

## Related

<CardGroup cols={2}>
  <Card title="Import companies from a CSV" icon="building" href="/en/leads/import-companies-csv">
    A different five-step wizard, for company lists instead of people.
  </Card>

  <Card title="Tags: how agents, sources and leads connect" icon="tag" href="/en/leads/tags">
    Why every bulk add asks for one, and what a tag does for a lead afterwards.
  </Card>

  <Card title="Quickstart: send your first lead" icon="rocket" href="/en/developers/quickstart-send-a-lead">
    Add leads from your own code instead, through the public lead-intake API.
  </Card>

  <Card title="Working the Prospects list" icon="table" href="/en/leads/prospects-list">
    Where these leads land, and every action a row offers once they're there.
  </Card>
</CardGroup>
