Skip to content

Limits & Polling

Enforced server-side. Exceeding a limit fails the call with a descriptive error.

Tool / surfaceLimit
Uploaded import file25 MiB per file (get_upload_url rejects larger)
suggest_column_mapping200 source columns, 5 sample rows
get_external_ids500 per page (default 100)
list_imports100 per page (default 25)

A single uploaded file can be up to 25 MiB — comfortably tens of thousands of rows. If your dataset is larger, split it into multiple files of up to 25 MiB each and run the get_upload_urlstart_csv_import flow once per file. Use the same source value for every file so Adva groups them as one logical import:

file 1: customers-part-1.csv (source="airtable")
file 2: customers-part-2.csv (source="airtable")

Each file produces its own import_job_id; poll each independently. Thanks to (source, external_id) idempotency, re-running any single file is safe.

Auth modeLimit
API key10,000 requests/hour per key (default)
OAuthNo separate per-user rate limit

API-key rate limits are configurable per-key; contact Adva if your workload needs a higher ceiling.

Imports are processed asynchronously. After start_csv_import returns an import_job_id, poll get_import_status until the job reaches a terminal state.

Job sizeInitial pollBack off to
< 100 rowsEvery 2 secondsEvery 5 seconds after 30s
100 - 1000 rowsEvery 5 secondsEvery 15 seconds after 1m
Multiple chunksPoll each job every 10 secondsEvery 30 seconds after 2m
pending --> validating --> importing --> completed
\-> failed
  • pending — queued, not yet started
  • validating — records are being checked against the schema
  • importing — valid records are being inserted/updated
  • completed — done. Check error_rows and errors[] for per-row problems even when the job itself succeeded.
  • failed — the whole job aborted. errors[] explains why.
  • < 100 rows: a few seconds
  • 1000 rows: usually under a minute
  • Multiple chunked jobs of 1000 each: run in parallel; total time depends on backend concurrency, typically a few minutes for 10K rows

If a job sits in pending for more than 60 seconds or importing for more than 5 minutes, something is likely wrong — check list_imports for any failed jobs that might be blocking progress.