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

# talkvalue path import create

> Start a bulk CSV import job from a fileKey, a channel as the source, an upsert mode, and a column mapping.

Start an import job from an analyzed CSV. The command takes the `fileKey` returned by `import analyze`, the channel ID that owns the new people, an upsert mode that decides what happens on email collisions, and one or more column mappings that pin CSV columns to TalkValue target fields. It returns immediately with the job ID. Use `import get` to poll until completion.

## Synopsis

```bash theme={null}
talkvalue path import create \
  --file-key <key> \
  --source-id <channel-id> \
  --mode <UPDATE|SKIP> \
  --mapping <csvIndex:targetField> [--mapping ...]
```

## Options

| Flag                               | Type                    | Description                                                                                                                                                                                           |
| ---------------------------------- | ----------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `--file-key <key>`                 | string (required)       | The `fileKey` returned by [`import analyze`](/cli/commands/path/import/analyze).                                                                                                                      |
| `--source-id <id>`                 | integer (required)      | Channel ID that receives the people. Find it with [`path channel list`](/cli/commands/path/channel/list).                                                                                             |
| `--mode <mode>`                    | enum (required)         | `UPDATE` overwrites existing fields on email match. `SKIP` leaves the existing record untouched and counts the row under `skipCount`.                                                                 |
| `--mapping <csvIndex:targetField>` | string (repeatable, ≥1) | Map a zero-indexed CSV column to a TalkValue field. Valid targets: `EMAIL`, `FIRST_NAME`, `LAST_NAME`, `NAME`, `PHONE`, `JOB_TITLE`, `COMPANY_NAME`, `ADDRESS`, `LINKEDIN_URL`, `X_URL`, `JOINED_AT`. |

## Examples

### 1. Import three columns into channel 7 in UPDATE mode

```bash theme={null}
talkvalue path import create \
  --file-key "u/2026/05/9f1a-registrants.csv" \
  --source-id 7 \
  --mode UPDATE \
  --mapping 0:EMAIL \
  --mapping 1:FIRST_NAME \
  --mapping 2:LAST_NAME
```

Returns the new job ID and an initial status of `PENDING` or `RUNNING`. The job continues in the background.

### 2. Capture the job ID for the rest of the script

```bash theme={null}
job_id=$(
  talkvalue path import create \
    --file-key "$FILE_KEY" \
    --source-id 7 \
    --mode SKIP \
    --mapping 0:EMAIL --mapping 1:NAME --mapping 2:COMPANY_NAME \
    --json | jq -r '.data.importJobId'
)
talkvalue path import get "$job_id"
```

The two-line pattern is the basis for the full [CSV import recipe](/cli/recipes/csv-import).

### 3. Treat duplicates as silent skips

```bash theme={null}
talkvalue path import create \
  --file-key "$FILE_KEY" \
  --source-id 12 \
  --mode SKIP \
  --mapping 0:EMAIL --mapping 1:FIRST_NAME --mapping 2:COMPANY_NAME
```

`SKIP` is the right mode when you receive a weekly registrant export and you want every new email but you do not want to overwrite manual edits made in the dashboard.

## Response

```jsonc theme={null}
{
  "data": {
    "importJobId": 4218,
    "status": "PENDING"
  }
}
```

`status` is the snapshot at submission. Real progress lives on the job record returned by [`import get`](/cli/commands/path/import/status).

## See also

* [`import analyze`](/cli/commands/path/import/analyze). The prerequisite step that produces the `fileKey`.
* [`import get`](/cli/commands/path/import/status). Poll the job until it reaches a terminal state.
* [`import failed-export`](/cli/commands/path/import/export-failures). Pull the rejected rows after a partial success.
* [Column mapping](/path/import/column-mapping). The full target-field reference.
