Skip to content
Sendora Cloud
Create account
Operate

Import & Export

R2-backed export (events, profiles, audiences, workflows) + CSV / JSON import. Async jobs with progress + sign-URL retrieval.

Features

  • **CSV import** of 3 entity types: `profiles`, `events`, `contacts`. Column-mapping per field, `skipDuplicates` option, `dryRun` preview before apply.
  • **On-demand export** of 4 entity types: `profiles`, `events`, `analytics`, `survey_responses`. Output format: CSV or JSON. Optional filters + date range.
  • **Background runner + R2 storage** — fire the job, poll status, download via 15-min presigned URL when complete. No backend-streaming bottleneck on multi-GB exports.
  • **ADMIN-gated + audit-logged** — every import + export records actor + payload size + filters in the audit log.
  • **Migration-friendly** — combined with auth-service's bcrypt / scrypt / argon2 hash-import endpoint (separate module), this covers the "users + their events + their profiles" leg of moving onto Sendora from a legacy stack.

Common use cases

  • Migrate a customer list from Mailchimp / HubSpot / Salesforce — CSV import with `dryRun` to preview before commit.
  • Periodic export of survey responses + events for warehouse load (you trigger + load yourself; no cron, no destination push).
  • Ad-hoc data pulls for analyst requests — export 30d of profiles + survey_responses to CSV, share via the presigned URL.

Import / export

Kick off an export

GROWTH+

Async background job. Streams to R2; the response carries a `jobId` you poll until status flips to `completed`, then download via the signed URL.

curl -X POST https://api.sendoracloud.com/api/v1/orgs/<ORG_ID>/data-io/export \
  -H "x-api-key: pk_prod_…" \
  -d '{
    "resource": "events",
    "format": "csv",
    "filters": { "from": "2026-04-01", "to": "2026-04-30" }
  }'

Poll a job

GROWTH+

Returns `{ status, progress, downloadUrl? }`. `downloadUrl` is a 30-minute signed R2 URL — re-issue via `/jobs/:id/download` when expired.

curl "https://api.sendoracloud.com/api/v1/orgs/<ORG_ID>/data-io/jobs/{{JOB_ID}}" \
  -H "x-api-key: pk_prod_…"

Bulk import

GROWTH+

Accepts CSV / JSONL via signed-URL upload. Use for one-time migrations from another platform or for nightly sync from your warehouse.

curl -X POST https://api.sendoracloud.com/api/v1/orgs/<ORG_ID>/data-io/import \
  -H "x-api-key: pk_prod_…" \
  -d '{
    "resource": "profiles",
    "format": "csv",
    "sourceUrl": "https://your-cdn.example/profiles-2026-04.csv"
  }'

Related