Skip to main content
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

talkvalue path import create \
  --file-key <key> \
  --source-id <channel-id> \
  --mode <UPDATE|SKIP> \
  --mapping <csvIndex:targetField> [--mapping ...]

Options

FlagTypeDescription
--file-key <key>string (required)The fileKey returned by import analyze.
--source-id <id>integer (required)Channel ID that receives the people. Find it with 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

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

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.

3. Treat duplicates as silent skips

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

{
  "data": {
    "importJobId": 4218,
    "status": "PENDING"
  }
}
status is the snapshot at submission. Real progress lives on the job record returned by import get.

See also