> For the complete documentation index, see [llms.txt](https://support.sayprimer.com/primer/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://support.sayprimer.com/primer/primer-support-review/section-connections/datasets/importing-a-csv.md).

# Importing a CSV

The columns Primer recognizes in a people or companies CSV.

You can bring people and companies into Primer as a CSV. The file is a plain CSV with a **header row**, and Primer maps your columns to its canonical fields. Header names are matched flexibly, so Title Case, snake\_case and camelCase all work (for example `Company Domain`, `company_domain` and `companyDomain` all map to the same field).

When you upload in the app, you pick whether the file is a **People** or a **Companies** list, and a direct upload is capped at **25 MB** — for anything larger, load it via [S3](/primer/primer-support-review/section-connections/datasets/uploading-via-s3.md). There's no cap on how many rows a valid file can contain, only the file size.

After you upload, the mapping step shows one collapsible group per set of fields — **expand each group** to check its columns are mapped, and watch the valid-row count as you go:

## People columns

A People import needs **`firstName` and `lastName`**, plus **at least one** of `email`, `companyDomain` or `linkedinUrl` so the person can be matched. The rest are optional.

* `firstName` *(required)*
* `lastName` *(required)*
* `email`
* `linkedinUrl`
* `companyDomain`
* `companyName`
* `country`
* `state`
* `city`

## Company columns

A Companies import needs **`companyName`**, plus **at least one** of `companyDomain` or `linkedinUrl`. Domain-only company lists are fine — no person data is required.

* `companyName` *(required)*
* `companyDomain`
* `linkedinUrl`
* `country`
* `state`
* `city`

## Managing your imports

Your uploads live under **Connections → CSV Imports**. Each import shows a status:

* **Processing** — Primer is validating and loading the rows.
* **Completed** — loaded, with a count of how many rows were **valid** vs **invalid** (rows missing the required columns above are counted invalid and skipped).
* **Failed** — the file couldn't be processed; fix the file and re-upload.

You can **delete** an import you uploaded in the app while you're still setting it up — before you confirm and load it. Once it's completed it stays as the dataset's snapshot, so to change it you re-upload a new file to replace it. Imports that arrived over [S3](/primer/primer-support-review/section-connections/datasets/uploading-via-s3.md) or the [API](/primer/primer-support-review/section-connections/datasets/pushing-via-api.md) are managed from that source, not deleted here.

## Loading the file

For a one-time or occasional load, drop the CSV to your Primer S3 location — see [Uploading via S3](/primer/primer-support-review/section-connections/datasets/uploading-via-s3.md). To send records continuously from your own systems, use the [API](/primer/primer-support-review/section-connections/datasets/pushing-via-api.md) instead.

Each upload is a **complete snapshot** of that dataset: records missing from a new file are dropped, not merged with the previous one.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://support.sayprimer.com/primer/primer-support-review/section-connections/datasets/importing-a-csv.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
