> 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/learn-more/upload-people-and-companies-to-primer-via-s3-beta.md).

# Upload People and Companies to Primer via S3 (Beta)

Upload people or company CSV files to a secure, Primer-provided Amazon S3 location.

Primer’s S3 ingestion beta is designed for scheduled exports, data warehouse unloads, and large recurring data deliveries. Each uploaded CSV becomes an imported dataset that you can use when building audiences in Primer.

> **Beta availability**
>
> S3 ingestion is currently available as a beta feature. Contact your Primer representative or <support@sayprimer.com> to request access and receive your upload credentials.

### Choose between S3 and API ingestion

Primer supports two beta options for programmatically importing data:

| Choose            | Best for                                                        | Update behavior                                                       |
| ----------------- | --------------------------------------------------------------- | --------------------------------------------------------------------- |
| **S3 ingestion**  | Scheduled exports, warehouse unloads, and large recurring files | Each file replaces the complete dataset associated with its filename. |
| **API ingestion** | Keeping individual records synchronized as they change          | Each request updates only the records included in that request.       |

Use S3 when your source system regularly generates a complete snapshot. For incremental record updates, see [Push People and Companies to Primer via API](https://support.sayprimer.com/primer/learn-more/push-people-and-companies-to-primer-via-api-beta).

### How S3 ingestion works

You upload files containing either people or companies to a dedicated S3 path provided by Primer. You can set this up easily from your data warehouse or ETL tool

{% content-ref url="/pages/92azhXGFl1FY1TeSOPS9" %}
[Export Data from Snowflake to Primer via S3](/primer/learn-more/upload-people-and-companies-to-primer-via-s3-beta/export-data-from-snowflake-to-primer-via-s3.md)
{% endcontent-ref %}

{% content-ref url="/pages/sDp8ol1b3EEuyhvkttgy" %}
[Export Data from Fivetran to Primer via S3](/primer/learn-more/upload-people-and-companies-to-primer-via-s3-beta/export-data-from-fivetran-to-primer-via-s3.md)
{% endcontent-ref %}

{% content-ref url="/pages/qoZQOanJOZYUHrpbNE9h" %}
[Export Data from Hightouch to Primer via S3](/primer/learn-more/upload-people-and-companies-to-primer-via-s3-beta/export-data-from-hightouch-to-primer-via-s3.md)
{% endcontent-ref %}

Primer processes each file as a snapshot:

* The filename becomes the dataset name in Primer.
* Uploading the same filename again replaces that dataset.
* Rows missing from the new file are removed from the dataset.
* Uploading a new filename creates a separate dataset.

After processing, the dataset appears under **CSV Imports** in Primer and can be used when building audiences.

> **Important:** An S3 upload is a complete replacement, not an incremental update. Every upload should contain all rows you want the dataset to retain.

### Before you begin

Primer will provide:

* An AWS role ARN to assume when uploading files
* A dedicated S3 access point and upload path
* Separate folder paths for people and company CSVs
* Credentials limited to writing to your organization’s assigned path

Uploads must use the S3 access point provided by Primer. Do not upload directly to the underlying bucket.

Keep your access credentials private. Do not place them in public repositories, client-side applications, or shared documentation.

### Folder layout

Primer will give you a dedicated prefix with two supported folders:

```
<prefix>/datasets/people/
<prefix>/datasets/companies/
```

Upload:

* Person CSVs to `<prefix>/datasets/people/`
* Company CSVs to `<prefix>/datasets/companies/`

Do not place files outside these folders.

### CSV requirements

Every file must:

* Use CSV format
* Include a header row
* Contain either people or company records—not both
* Be uploaded to the corresponding folder
* Use Primer’s supported column names or column names agreed upon with your Primer representative

Extra columns, such as job title or phone number, are ignored and do not cause the import to fail.

### Choose a filename strategy

The filename determines the dataset name in Primer.

#### Maintain one recurring dataset

Use the same filename for every upload:

```
contacts.csv
```

Each new `contacts.csv` replaces the existing `contacts.csv` dataset. Rows that were present in the previous file but are missing from the new file are removed.

This is the recommended approach when maintaining a current snapshot of a source system.

#### Create a new dataset for every upload

Use a different filename each time:

```
contacts_2026-08-28.csv
contacts_2026-08-29.csv
```

Each filename creates a separate dataset that remains in Primer. Previous datasets are not automatically replaced or removed.

> **Plan your filename strategy before the first upload.** Renaming a file later creates a new dataset instead of updating the dataset associated with the original filename.

### Supported people fields

Upload people files to `<prefix>/datasets/people/`.

| Field            | Recommended header    | Also accepted                           |
| ---------------- | --------------------- | --------------------------------------- |
| First name       | `First Name`          | `first_name`, `firstName`, `Given Name` |
| Last name        | `Last Name`           | `last_name`, `lastName`, `Surname`      |
| Email            | `Email`               | `Work Email`, `work_email`, `workEmail` |
| LinkedIn profile | `Person Linkedin Url` | `LinkedIn URL`, `linkedin_url`          |
| Company name     | `Company Name`        | `company_name`, `Account Name`          |
| Company domain   | `Company Domain`      | `company_domain`, `Website`, `Domain`   |
| Country          | `Country`             | `country`                               |
| State or region  | `State`               | `state`, `Province`, `Region`           |
| City             | `City`                | `city`, `Town`                          |

For the best matching results, include an email address and LinkedIn profile URL whenever available.

### Supported company fields

Upload company files to `<prefix>/datasets/companies/`.

| Field                 | Recommended header | Also accepted                         |
| --------------------- | ------------------ | ------------------------------------- |
| Company name          | `Company Name`     | `company_name`, `Account Name`        |
| Company domain        | `Company Domain`   | `company_domain`, `Website`, `Domain` |
| LinkedIn company page | `LinkedIn URL`     | `linkedin_url`, `Linkedin`            |
| Country               | `Country`          | `country`                             |
| State or region       | `State`            | `state`, `Province`, `Region`         |
| City                  | `City`             | `city`, `Town`                        |

For the best matching results, include a company domain, LinkedIn company page, or both. Companies with neither value may not match successfully.

### Example people file

```
First Name,Last Name,Email,Person Linkedin Url,Company Name,Company Domain,Country,State,City
Ada,Lovelace,ada@example.com,https://linkedin.com/in/ada,Example Inc,example.com,United States,California,San Francisco
Bob,Smith,bob@example.com,https://linkedin.com/in/bob,Acme Corp,acme.com,United States,New York,New York
```

### Example company file

```
Company Name,Company Domain,LinkedIn URL,Country,State,City
Acme Corp,acme.com,https://linkedin.com/company/acme,United States,
```


---

# 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 dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://support.sayprimer.com/primer/learn-more/upload-people-and-companies-to-primer-via-s3-beta.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

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.
