contacts-import is a platform-mode command. Before running it:landbase-cli auth login— authenticate the session.landbase-cli account set— pick and persist the target account.- Have a
datasetIdfrom a prior search or agent run — the CLI does not produce datasets, so run a search/agent flow first.
No account id...; pass
--account=<id> per call as an escape hatch.contacts-import start
Start an import. Reads a JSON body —{ datasetId, tagName, importId? } — and
enqueues processing in one call. Pass - to read the body from stdin. Returns
{ importId, runRef }. With --watch, the command stays attached, polls until
the import is terminal, and writes the final status to stdout instead of the
start response.
Usage
Path to a JSON file with the import body, or
- to read it from stdin. Body
shape: { "datasetId": "<dataset-id>", "tagName": "Q2 outreach", "importId"?: 7 }.
datasetId and tagName (1–100 chars) are required; importId resumes an
existing draft.| Flag | Default | Description |
|---|---|---|
--watch | — | Block until the import is terminal, then print the final status to stdout |
--account=<id> | — | Override the active account for a single command |
--verbose | — | Print request/response details to stderr |
contacts-import status
Read one status snapshot. Designed for scripts that drive their own polling loop. UsageThe import id returned by
contacts-import start.{ importId, phase, percent, counts, error } —
where keys are present in every phase and null until known. See
output schemas.
contacts-import wait
Block until the import is terminal, then print the final status to stdout. Runs the same polling loop asstart --watch, streaming a progress line to stderr per
poll. Backoff schedule: 5s, 10s, then a 20s cap; overall timeout 30 minutes.
Usage
The import id to wait on.
wait (or start --watch) over an external polling loop unless you need
a custom cadence. Avoid sub-second polling — it won’t return results faster and
may trip rate limits.
Phases
phase is the value to branch on. The import is done once it reaches a terminal
phase.
| Phase | Kind | Meaning |
|---|---|---|
draft | in-flight | Row created but not yet enqueued (rare — start enqueues atomically) |
preparing | in-flight | Parsing/validating the dataset; percent is null |
in_progress | in-flight | Actively ingesting; percent is 0–100 |
completed | terminal | Done; counts carries the final totals |
partial | terminal | Some rows imported before a later failure; counts reflect what landed, error carries the reason |
failed | terminal | Failed; error carries the reason |
Errors
| Code | Meaning |
|---|---|
INVALID_INPUT | Missing/invalid --json, malformed datasetId/tagName, or a non-integer / zero importId. |
AUTH_REQUIRED | Run landbase-cli auth login first (browser-interactive). |
AUTH_FAILED | The platform session expired (7-day TTL) — re-login. |
NOT_FOUND | The importId is unknown or belongs to a different account. |
VALIDATION_ERROR | The back-end rejected the body (e.g. datasetId is unknown or not accessible to this account). |
CONFLICT | start was called again on an importId already enqueued. Don’t retry — poll status <importId>; the in-flight job keeps running. |
TIMEOUT | wait / start --watch exceeded 30 min still in a non-terminal phase. Resume with status <importId> (the id rides in the error’s meta.importId). |

