> For the complete documentation index, see [llms.txt](https://docs.mediarithmics.io/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.mediarithmics.io/setup-and-monitor/collect-and-manage-your-data/import-data-in-batch/data-loader/load-profiles.md).

# Load profiles

Map CSV columns to profile properties, with optional transformations.

## Your goal

Create or update user profiles from the properties in a CSV file, mapping columns to schema properties in the interface.

## Expected outcome

Profiles created or updated for the users the file identifies, with only the columns you mapped affected.

## Prerequisites

* A `LIVE` schema with a **top-level field under `UserPoint` named `UserProfile`**. Without it, selecting the profile document type returns an error.
* A CSV file meeting the [file requirements](/setup-and-monitor/collect-and-manage-your-data/import-data-in-batch/data-loader.md#file-requirements).
* The compartment or registry the identifier belongs to.

## Configure the import

Two sections to fill in.

{% tabs %}
{% tab title="Identifier" %}
This is how each row is matched to a user.

* Select the **CSV property** to use as the identifier.
* Choose the **identifier type**: `USER_ACCOUNT`, `USER_EMAIL`, or `USER_DEVICE_TECHNICAL_ID` - and specify the related **compartment** for an account, or **registry** for a device technical ID.
* Optionally select a **hashing** method to apply to the input.

{% hint style="warning" %}
The identifier type decides whether the profile is identified or anonymous:

* **`USER_ACCOUNT`** - the `user_account_id` derived from the CSV property, together with the selected `compartment_id`, is used as the profile identifier.
* **`USER_EMAIL` or `USER_DEVICE_TECHNICAL_ID`** - the profile **remains anonymous**: no `user_account_id`, and the **default compartment** is used as the profile identifier.
  {% endhint %}

Only **one hashing method** per field is allowed, and hashing is the only transformation available on identifiers.
{% endtab %}

{% tab title="Profile" %}
For each **CSV property** you want to import, select the corresponding **profile property**. You do not need to configure every column in the file.

Optionally apply one or more **transformations** to the input.

{% hint style="info" %}
If a profile already exists for the user - an existing combination of account and compartment:

* Properties you mapped **override** existing values, or are created if they did not exist.
* Properties you did **not** map are left as they are.
  {% endhint %}
  {% endtab %}
  {% endtabs %}

## Data types in the CSV

The value has to parse as the type of the target property.

| Data type | What is expected                                             | Example                           |
| --------- | ------------------------------------------------------------ | --------------------------------- |
| Int       | An integer with no thousands separator                       | `54`                              |
| Float     | The dot `.` as decimal separator                             | `74.32`                           |
| Date      | ISO format with year, month, and day - `YYYY-MM-DD`          | `2025-01-04`                      |
| String    | Enclose in double quotes if the value contains the delimiter | `science` / `"science, politics"` |
| Boolean   | `true`, `false`, `yes`, `no`, `1`, or `0`                    | `true`                            |
| Timestamp | A timestamp in milliseconds                                  | `1742033780000`                   |

## Available transformations

Which transformations you can apply depends on the type of the target profile property - shown in brackets when you select it.

| Profile property type | Transformations                                                              |
| --------------------- | ---------------------------------------------------------------------------- |
| string                | `TO UPPER CASE`, `TO LOWER CASE`, `REMOVE SPACES`, `HASH SHA256`, `HASH MD5` |
| date                  | `REMOVE SPACES`, `AGE TO DATE`                                               |
| int                   | `REMOVE SPACES`, `DATE TO AGE`                                               |
| boolean               | `REMOVE SPACES`                                                              |
| float                 | `REMOVE SPACES`                                                              |
| timestamp             | `REMOVE SPACES`                                                              |

{% hint style="info" %}
`AGE TO DATE` and `DATE TO AGE` are the two transformations that change meaning rather than form - useful when your source stores an age and your schema stores a birth date, or the reverse.
{% endhint %}

## Example file

```csv
Email_sha256,first_name,last_name,age,gender,addr_country,zip_code,subscriber,best_category,LTV
ce5bfa8406dd062b059a4b841bf36de186977fe515dc5a704a58e973cab1a5d5,Salome,Cargon,32,Female,Russia,36987-1612,false,Outdoors,458.04
9980f7e8331dce3bfa2e3b3ab6b69dcb960658bcb400801cece7873afeb5a905,Gene,Pulham,45,Male,Tanzania,68788-9208,true,Jewelry,2894.53
```

## Verify

* The transformation report shows no errors before upload.
* The execution succeeds, and the success count matches the number of rows.
* A profile from the file shows the mapped properties, in the compartment you expected.
* Properties you did not map are unchanged on an existing profile.

## Related pages

<table data-view="cards" data-search="false"><thead><tr><th></th><th></th><th data-hidden data-card-target data-type="content-ref"></th></tr></thead><tbody><tr><td><strong>Data loader</strong></td><td>The upload flow and file requirements.</td><td><a href="/setup-and-monitor/collect-and-manage-your-data/import-data-in-batch/data-loader.md">Data loader</a></td></tr><tr><td><strong>Import profiles</strong></td><td>The same import through the API, with update strategies.</td><td><a href="/setup-and-monitor/collect-and-manage-your-data/import-data-in-batch/import-profiles.md">Import profiles</a></td></tr><tr><td><strong>Load identifiers</strong></td><td>Associating identifiers rather than loading properties.</td><td><a href="/setup-and-monitor/collect-and-manage-your-data/import-data-in-batch/data-loader/load-identifiers.md">Load identifiers</a></td></tr></tbody></table>


---

# 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://docs.mediarithmics.io/setup-and-monitor/collect-and-manage-your-data/import-data-in-batch/data-loader/load-profiles.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.
