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

# Leads

> Upload, filter, edit and assign your contacts

**CRM → Leads** lists every contact, one row each, with a column for every attribute marked **Show on dashboard**.

## Upload leads from a CSV

<Steps>
  <Step title="Download the template">
    Click **Upload Leads**, then **Download template**. It has a `phone_number` column plus one column per attribute you have defined.
  </Step>

  <Step title="Fill it in">
    One contact per row. Phone numbers need the country code, e.g. `919876543210`. Column headers must match attribute **keys** exactly.
  </Step>

  <Step title="Upload">
    Drag the file in. It is checked before anything is saved:

    * No `phone_number` column: the file cannot be uploaded.
    * A column that matches no attribute is dropped. The upload button tells you before it happens.
    * A **Required** attribute with no column is flagged, because every row would get its default instead of a real value.
    * A value outside an enum's allowed values is flagged so you can fix it first.
  </Step>
</Steps>

Uploading a phone number that already exists **updates** that contact rather than creating a second one. Values someone edited by hand in the CRM are kept, so re-uploading an old file cannot undo a correction.

## Find contacts

* **Search leads** to find a contact.
* **Filters** narrow the table by created date and by attribute values. Filters also decide which contacts an **Assign** applies to.

## Row actions

| Action | What it does |
| - | - |
| **View lead** | Shows every attribute with where it came from and when it was last updated. |
| **Go to chat** | Opens this person's conversation on the **Contacts** page. |
| **Update lead** | Edit attribute values by hand. Clearing a field and saving removes the value. |
| **Assign** | Send this one contact to a voice agent or a workflow. |
| **Delete lead** | Removes the contact. |

<Note>
  A value saved through **Update lead** is marked as manual. Calls, workflows and CSV uploads will not overwrite it, but a chat agent can. See [Keeping contacts up to date](/crm/keeping-contacts-updated).
</Note>

## Assign contacts to an agent or a workflow

**Assign** sends contacts somewhere to be worked. Use it on one row, or from the toolbar to assign **everything matching the current filters**, not just the page you can see.

| Assign to | What happens |
| - | - |
| **Voice Agent** | Each contact is called by the agent you choose. You set the language, an optional start time, the calling window, retries and the gap between them, carry over, and priority. |
| **Workflow** | Each contact enters the workflow you choose. For a [Normal Workflow](/workflows/introduction), the workflow itself decides what happens and when, so you only choose when to start (now, or **Schedule Later**). |

A contact that is already partway through the same workflow is skipped, so assigning the same filter twice does not start anyone over.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.