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

# Import contacts

> Upload CSV or XLSX contacts using the wizard template. Fix headers, invalid fields and duplicates before importing.

export const Availability = ({lang = 'es', plan, addon, permission, route, status}) => {
  const L = lang === 'en' ? {
    plan: 'Plan',
    addon: 'Add-on',
    permission: 'Permission',
    route: 'Where',
    status: 'Status',
    addonNote: 'enabled on request',
    allPlans: 'All plans',
    beta: 'Beta',
    nuevo: 'New',
    soon: 'Coming soon'
  } : {
    plan: 'Plan',
    addon: 'Add-on',
    permission: 'Permiso',
    route: 'Dónde',
    status: 'Estado',
    addonNote: 'se activa a pedido',
    allPlans: 'Todos los planes',
    beta: 'Beta',
    nuevo: 'Nuevo',
    soon: 'Próximamente'
  };
  const items = [];
  if (plan) items.push([L.plan, plan]);
  if (addon) items.push([L.addon, `${addon} · ${L.addonNote}`]);
  if (permission) items.push([L.permission, permission]);
  if (route) items.push([L.route, route]);
  if (status) items.push([L.status, L[status] || status]);
  return <div style={{
    display: 'flex',
    flexWrap: 'wrap',
    gap: '6px 22px',
    padding: '12px 16px',
    margin: '4px 0 24px',
    border: '1px solid rgba(2, 82, 255, 0.28)',
    borderLeft: '3px solid #0252ff',
    borderRadius: '8px',
    background: 'rgba(2, 82, 255, 0.05)',
    fontSize: '13.5px',
    lineHeight: '1.5'
  }}>
      {items.map(([k, v]) => <div key={k} style={{
    display: 'flex',
    gap: '6px',
    alignItems: 'baseline'
  }}>
          <span style={{
    fontSize: '10.5px',
    fontWeight: 600,
    letterSpacing: '0.07em',
    textTransform: 'uppercase',
    opacity: 0.65
  }}>{k}</span>
          <span style={{
    fontWeight: 500
  }}>{v}</span>
        </div>)}
    </div>;
};

<Availability lang="en" route="Contacts → Import" permission="contacts.create" />

Importing uses a template generated by the app. The wizard lets you select columns, download the file, upload it and review rows before adding contacts.

## Prepare and import

<Steps>
  <Step title="Configure columns">
    Open import from **Contacts** and choose template columns. Include information you will populate.
  </Step>

  <Step title="Download the template">
    Download the second-step file and fill it in. Preserve header names and order.
  </Step>

  <Step title="Upload the file">
    Use CSV or XLSX. The app compares its headers against the configured template.
  </Step>

  <Step title="Review and confirm">
    Check the preview and flagged rows. Correct the file or remove rows before confirming. Wait for the upload result.
  </Step>
</Steps>

## Data and format

| Data              | Check                                                      |
| ----------------- | ---------------------------------------------------------- |
| Headers           | Same names, count and order as the template                |
| Email             | Valid address; the current wizard uses it to validate rows |
| Phone and country | Consistent values so the app can format the number         |
| Selected columns  | Complete cells required by the template                    |
| Empty rows        | Omitted                                                    |

Keep phone numbers as text in your file to avoid scientific notation or lost digits. Do not invent email addresses to pass validation; ask about another import path if your list lacks them.

## Duplicates

Initial validation identifies repeated rows using the combination of name, email and phone. It flags them before import.

This does not guarantee merging with existing organization records. Review a small batch before uploading the entire database again.

## Common problems

| Message or symptom                                                | Cause and solution                                                  |
| ----------------------------------------------------------------- | ------------------------------------------------------------------- |
| Error: The format of the file does not match the expected format. | Headers differ. Download the configured template again.             |
| Duplicate row                                                     | Remove repeated name, email and phone combinations within the file. |
| Rows excluded from preview                                        | Check email, empty cells and the wizard's reported errors.          |
| Fewer uploaded contacts than file rows                            | Compare valid, empty, duplicate and rejected rows before retrying.  |

## Frequently asked questions

<AccordionGroup>
  <Accordion title="Can I upload my CSV unchanged?">
    Only if its columns match the selected template. Names and order must match, not just the kind of contact information.
  </Accordion>

  <Accordion title="Does importing replace existing contacts?">
    Do not assume automatic replacement or merging. Check a sample and its result before uploading the full database again.
  </Accordion>

  <Accordion title="Why is a list without email addresses rejected?">
    The current wizard validates row emails. Do not use invented addresses; ask [support](/en/get-started/support) for an appropriate path for your list.
  </Accordion>
</AccordionGroup>

## See also

* [Contacts and properties](/en/contacts/contacts-and-properties)
* [Boards and stages](/en/contacts/boards)
* [Call campaigns](/en/calls/campaigns)
