Skip to content

How to Export Data from Kustomer: Methods, API Limits & Data Portability

Complete guide to exporting data from Kustomer. Covers native UI limits, saved search caps, API pagination, rate limits, archive search, and what data you can't export.

Nachi Nachi · · 23 min read
How to Export Data from Kustomer: Methods, API Limits & Data Portability
TALK TO AN ENGINEER

Planning a migration?

Get a free 30-min call with our engineers. We'll review your setup and map out a custom migration plan — no obligation.

Schedule a free call
  • 1,500+ migrations completed
  • Zero downtime guaranteed
  • Transparent, fixed pricing
  • Project success responsibility
  • Post-migration support included

What Data Can You Export from Kustomer?

Kustomer's data model centers on Customers, Companies, Conversations, Messages, Notes, Events, and Custom Objects (KObjects). Operational metadata lives in Users, Teams, Tags, Snippets, Shortcuts, and Knowledge Base Articles. The exportability of each object depends heavily on the method you use. (help.kustomer.com)

Object Native Reporting Export Saved Search Export Export Buddy API Export Format Key Limitations
Customers Yes (30-day window, 25 attrs) Yes (50K rows) No Yes (GET /v1/customers) CSV / JSON UI limited to 25 attributes; search excludes records not updated in 2 years
Companies No Yes (50K rows) No Yes (/v1/companies) CSV / JSON No reporting export; search caps apply (help.kustomer.com)
Conversations Yes (30-day window) Yes (50K rows) No Yes (POST /v1/customers/search with queryContext: conversation) CSV / JSON CSV gives conversation fields and previews, not full message bodies; search excludes data updated >2 years ago
Messages Yes (preview and subject only) Partial No Yes (GET /v1/conversations/{id}/messages) CSV / JSON Reporting export exposes preview and subject, not full body; must be fetched per-conversation via API (help.kustomer.com)
Notes Yes (includes body) Partial No Yes (GET /v1/conversations/{id}/notes) CSV / JSON No native bulk search-export path for notes (help.kustomer.com)
Events / Audit Logs No No No Partial (GET /v1/audit-logs) JSON Retention-bound: some events 90 days, others 12 months (help.kustomer.com)
KObjects (Custom Objects) No Partial (50K rows) No Yes (GET /v1/kobjects/{klassName}) JSON Saved search excludes data updated >2 years; complex nested arrays truncated in CSV; Klass schema definitions not exportable (help.kustomer.com)
Users No No Yes Yes (GET /v1/users) CSV / JSON Export Buddy includes deletedAt and lastLoginDate; use API if you need deactivation timestamps reliably (help.kustomer.com)
Teams No No Yes Yes (GET /v1/teams) CSV / JSON Export Buddy gives team metadata, not conversation history
Tags No No Yes Yes CSV / JSON Tag usage history lives in events/audit logs, not Export Buddy
Snippets No No Yes Yes CSV / JSON Export Buddy includes soft-deleted snippets; filter deletedAt via API for active only (help.kustomer.com)
Shortcuts No No Yes Yes CSV / JSON Destination systems usually need manual remapping of shortcut behavior
KB Articles No No Yes (ZIP) Yes (GET /v1/articles) ZIP / JSON Export Buddy downloads as ZIP with htmlBody; API content is HTML in attributes.body (help.kustomer.com)
Attachments No No No Yes (per-conversation) Binary Must be downloaded individually; no bulk export endpoint
Business Rules / Workflows No No No No Not exportable through any method (help.kustomer.com)
Routing Queue Settings No No No No Not exportable
Conversational Assistants No No No No Not exportable
Saved Search Definitions No No No No Results exportable; definitions are not
Custom Klass Schema Definitions No No No No Must be manually rebuilt (help.kustomer.com)

Summary: Fully exportable with API — customers, conversations, messages, notes, users, teams, KB articles, and most KObjects. Partially exportable — companies, events/audit data, attachments. Not exportable through any supported method — business rules, workflows, saved search definitions, custom Klass schema definitions, conversational assistant configurations, and routing queue settings. (help.kustomer.com)

Warning

Native CSVs are not transcript exports. Conversation CSVs export conversation-level fields and message previews, not full message bodies. The reporting export for Messages exposes preview and subject — not the complete transcript. Notes export does include body, and KB export surfaces htmlBody. If you need destination-ready conversation history, use the API and preserve IDs and relationships. (help.kustomer.com)

Export Methods: Every Way to Get Data Out of Kustomer

There are five practical paths to extract data from Kustomer. Your choice depends on data volume, the age of your records, your Kustomer plan tier, and available engineering resources. Only one of them — the API — is suitable for a full historical export without the UI caps. (help.kustomer.com)

Method Data Coverage Volume Limit Speed Complexity Plan Requirement Best For
Native Reporting Export Conversations, Customers, Messages, Notes (25 attrs max) 30-day window Minutes Low All plans Quick operational reporting
Export Buddy Users, Teams, Snippets, Shortcuts, Tags, KB Articles Full (for supported objects) Seconds to minutes Low All plans (admin role required) Pre-migration config backup
Saved Search Export Any searchable object 50,000 rows; no data >2 years old Minutes Low Enterprise or Ultimate only Segmented data pulls, small recent datasets
REST API All record-level objects including KObjects and attachments Unlimited (with pagination workarounds) Hours to days High All plans (rate limits vary by tier) Full migrations, backups, compliance
Managed Export Service All objects with relationship preservation Unlimited Days Low (for you) N/A Enterprise migration, zero internal engineering

A sixth option exists for analytics and warehousing: third-party ETL connectors such as Fivetran's Kustomer connector, which incrementally syncs conversations, customers, KObjects, messages, notes, and work sessions into a warehouse. These connectors sync metadata like MESSAGE_ATTACHMENT details but do not export the binary attachment files themselves and are not suited for platform-to-platform migration. (fivetran.com)

Method 1: Native Reporting Data Export (Best for Recent Data)

Kustomer's Reporting Data Export is the simplest self-serve option — and the most constrained. It exports Conversation, Conversation Views (Handle Time), Customer, Message, and Note objects to CSV. (help.kustomer.com)

How to run a reporting export:

  1. Navigate to Reporting > Data Exports in the Kustomer sidebar and click Add Export. Kustomer sends the final CSV as an emailed download link. (help.kustomer.com)
  2. Select the object type: Conversation, Conversation Views, Customer, Message, or Note. Companies, Events, and KObjects are not available through this method.
  3. Set the date range. The UI supports preset windows — Current Day, Past 30 Minutes, Past 60 Minutes, Past 24 Hours, Past 7 Days, and Past 30 Days — depending on whether the export is one-time or scheduled. The date window applies to createdAt, and the default timezone is EST (configurable). (help.kustomer.com)
  4. Select up to 25 attributes per export. Kustomer uses API/system field names for many export fields, so attribute selection takes longer than expected the first time.
  5. Choose Export Now or schedule it Daily, Weekly, or Monthly. You can add up to 50 recipients and maintain up to 50 scheduled exports. (help.kustomer.com)
Warning

The 25-attribute cap is a hard limit. If your Customer object has 40 custom fields, you need two separate exports stitched together by Kustomer ID. This makes the reporting export impractical for any object with a rich custom schema and entirely unsuitable for migration.

This method requires zero engineering resources. Any admin can run it. But it is designed for operational reporting — not data portability. Kustomer's own documentation recommends starting with narrow ranges if export creation fails and switching to the API for larger exports. (help.kustomer.com)

Method 2: Export Buddy (Best for Metadata & KB Articles)

Export Buddy is a first-party Kustomer app for exporting operational metadata — not customer or conversation data. Think of it as a config export, not a data export.

What it exports: Users, Teams, Snippets (canned responses), Shortcuts, Conversation Tags, and Knowledge Base Articles.

How to use it:

  1. Go to AppsExplore Directory, search for Export Buddy, and install it. Only admins can install. (help.kustomer.com)
  2. Open Apps > Export Buddy from the sidebar.
  3. Select the data type you want to export and click Export. For KB articles, do not close the active tab while it processes. (help.kustomer.com)
  4. Download the file. Users, teams, snippets, shortcuts, and tags download as CSV. Knowledge Base articles download as a compressed ZIP containing a CSV with fields like htmlBody, slug, status, and publishedAt.

Watch for soft-deleted data. Export Buddy includes deleted snippets in its CSV output. The docs explicitly state you should filter records with deletedAt via the API if you only want active snippets. User exports also include deletedAt and accountStatus markers — decide what should be migrated versus left behind. (help.kustomer.com)

Export Buddy is the fastest way to back up team structure, canned responses, and knowledge base content. It does not touch customers, conversations, messages, or any transactional data.

Method 3: Saved Search Export (The 50,000-Row Limit)

Any saved search in Kustomer can be exported to CSV. This is the most flexible native option for segmented data pulls, but it has hard constraints that make it unsuitable for full-scale extraction. This feature is only available on Enterprise or Ultimate plans.

How to export a saved search:

  1. Open the Searches panel and select or create a saved search. (help.kustomer.com)
  2. Click Export Search and choose the export properties. For conversation searches, you can include fields like preview columns, but to export individual messages you should export the Message object instead.
  3. Enter recipient email addresses and click Run Export. Kustomer emails a CSV download link. (help.kustomer.com)

Hard limits:

  • 50,000 rows per export.
  • Data updated more than 2 years ago is silently excluded from search results. There is no warning in the UI.
  • Only one export can run at a time and exports cannot be scheduled.
  • Only available on Enterprise or Ultimate plans. (help.kustomer.com)
Danger

The 2-year cutoff is the single biggest data-loss risk for teams using native exports for migration. If your dataset spans 4 years of history, the oldest 2 years of untouched records simply will not appear in search results. There is no warning. If you rely on saved searches to extract your data, you will permanently lose all history older than 24 months that hasn't been updated.

Conversation search exports do not include all messages within the export. Kustomer's documentation states you must use the API endpoint GET /v1/conversations/{id}/messages to retrieve all messages within specific conversations. If you rely solely on the saved search export, you will silently lose message-level detail.

Method 4: REST API Export (For Engineering Teams)

The Kustomer REST API is the only method that gives you access to your complete dataset — records older than 2 years, full message bodies, attachments, KObjects, and relational data. It is also the only path that cleanly bypasses the 30-day reporting cap and the 50K saved search cap. (help.kustomer.com)

Authentication and Permissions

All API requests authenticate via a Bearer token in the Authorization header:

Authorization: Bearer kustomer_api_key_here

API keys are managed in Settings → Security → API Keys. Assign an API role with read permissions for the objects you need. Kustomer documents common read permissions as org.user.customer.read, org.user.conversation.read, org.user.message.read, org.user.search.read, org.user.team.read, and org.user.kobject.read. (help.kustomer.com)

The base URL is https://{orgname}.api.kustomerapp.com for US-hosted instances. For EU-hosted instances, use the api.prod2 domain extension. Rate limits, Archive Search behavior, and retention windows follow the same documented specifications regardless of hosting region.

Key API Endpoints

Object Endpoint Method
Customers /v1/customers GET
Search Customers /v1/customers/search POST
Archive Search (records >2 years) /v1/customers/archive/search POST
Companies /v1/companies GET
Conversations by Customer /v1/customers/{id}/conversations GET
Messages by Conversation /v1/conversations/{id}/messages GET
Notes by Conversation /v1/conversations/{id}/notes GET
Attachments by Conversation /v1/conversations/{id}/attachments GET
Events by Conversation /v1/conversations/{id}/events GET
KObjects by Klass /v1/kobjects/{klassName} GET
KObjects by Customer /v1/customers/{customerId}/klasses/{klassName} GET
KB Articles /v1/articles GET
Users /v1/users GET
Teams /v1/teams GET
Roles /v1/roles GET
Audit Logs /v1/audit-logs GET
Info

There is no standalone /v1/conversations/search endpoint. To search conversations, use POST /v1/customers/search with queryContext set to conversation, and prefix conversation fields with conversation_. Use POST /v1/customers/archive/search for data older than two years. Also use GET /v1/customers/search/fields?queryContext=conversation when building filters — Kustomer's searchable field list is not obvious from the UI alone. (help.kustomer.com)

Sample API Response: Customer Object

A truncated response from GET /v1/customers/{id} illustrates the JSON structure you will work with:

{
  "data": {
    "type": "customer",
    "id": "5abc123def456789ghijk012",
    "attributes": {
      "name": "Jane Doe",
      "email": "jane@example.com",
      "phones": [{"type": "home", "phone": "+15551234567"}],
      "custom": {
        "accountTierStr": "enterprise",
        "lifetimeValueNum": 42500
      },
      "createdAt": "2021-03-15T14:22:31.000Z",
      "updatedAt": "2024-06-01T09:11:02.000Z"
    },
    "relationships": {
      "org": {"data": {"type": "org", "id": "org_id_here"}},
      "conversations": {
        "links": {"self": "/v1/customers/5abc123def456789ghijk012/conversations"}
      }
    }
  }
}

Message objects follow a similar pattern, with attributes.body containing the full HTML message content, attributes.preview containing a truncated plain-text summary, and attributes.direction indicating in (customer) or out (agent).

Rate Limits

Kustomer enforces rate limits at multiple levels. The org-wide limit varies by plan:

Limit Type Rate Notes
Org-wide (Professional) 300 RPM Legacy plan
Org-wide (Business) 500 RPM Legacy plan
Org-wide (Enterprise) 1,000 RPM Shared across all API keys in the org
Org-wide (Ultimate) 2,000 RPM Shared across all API keys in the org
Machine users (API keys) 100 RPM Per key, unless your contract specifies otherwise
Search API 100 RPM Default for search endpoints

(help.kustomer.com, help.kustomer.com)

When you exceed the limit, the API returns HTTP 429 Too Many Requests. Kustomer documents x-ratelimit-limit and x-ratelimit-remaining in response headers. Their API FAQ recommends exponential backoff. The docs do not promise a universal Retry-After contract, so honor it if present and fall back to your own backoff if not.

Other error codes to handle during bulk extraction:

  • HTTP 403 Forbidden — API key lacks the required permission scope. Verify the key's role includes the relevant org.user.*.read permission.
  • HTTP 404 Not Found — The record ID is invalid or the object has been hard-deleted. Log and skip; do not retry.
  • HTTP 500 / 502 / 503 — Transient server errors. Retry with exponential backoff, capped at 3–5 retries per request.

(help.kustomer.com)

The 100-Page Pagination Limit

Both the Search API and Archive Search endpoints have a hard limit of 100 pages per query. Page sizes, defaults, and maximums vary by endpoint — Kustomer's pagination guide says the API reference for each route is the source of truth. (help.kustomer.com)

The workaround: Use updated_at cursor-based pagination. After processing 100 pages, note the updatedAt timestamp from the final record. Submit a new query with an updated_at filter starting after that value. Repeat until no more records are returned. (help.kustomer.com)

The standard Search API (POST /v1/customers/search) only returns records updated within the past 2 years. To retrieve older records, switch to the Archive Search endpoint: POST /v1/customers/archive/search.

This endpoint returns all matching records regardless of when they were last updated — it is not restricted to only old data. It is subject to the same 100-page limit and requires the same updated_at cursor workaround for datasets exceeding the page ceiling. (help.kustomer.com)

import time
import requests
 
ORG = "yourorg"
API_KEY = "your_api_key"
BASE = f"https://{ORG}.api.kustomerapp.com"
HEADERS = {
    "Authorization": f"Bearer {API_KEY}",
    "Content-Type": "application/json"
}
 
def fetch_page(body, page):
    params = {"page": page}
    return requests.post(
        f"{BASE}/v1/customers/archive/search",
        params=params,
        json=body,
        headers=HEADERS,
        timeout=60,
    )
 
cursor = "2018-01-01T00:00:00.000Z"
 
while True:
    last_seen = None
    saw_rows = False
 
    body = {
        "queryContext": "conversation",
        "sort": [{"conversation_updated_at": "asc"}],
        "and": [
            {"conversation_updated_at": {"gte": cursor}}
        ]
    }
 
    for page in range(1, 101):  # 100-page max
        resp = fetch_page(body, page)
 
        if resp.status_code == 429:
            wait = int(resp.headers.get("Retry-After", "5"))
            time.sleep(wait)
            resp = fetch_page(body, page)
 
        if resp.status_code in (500, 502, 503):
            time.sleep(10)
            resp = fetch_page(body, page)
 
        resp.raise_for_status()
        rows = resp.json().get("data", [])
        if not rows:
            break
 
        saw_rows = True
        for row in rows:
            process_record(row)  # your export logic here
            last_seen = row["attributes"]["updatedAt"]
 
    if not saw_rows or not last_seen:
        break
 
    cursor = last_seen  # restart from last record's timestamp

This script uses the Archive Search endpoint to retrieve conversations regardless of age, implements cursor-based pagination to bypass the 100-page limit, handles HTTP 429 rate-limit responses, and retries on transient server errors. Add your own persistence layer to write records to disk or a database as they arrive instead of holding everything in memory.

Handling KObject Nested Structures

KObjects frequently contain nested arrays and complex custom fields. When fetching via GET /v1/kobjects/{klassName}, the response includes the full nested structure in JSON — unlike CSV exports, which truncate arrays.

Practical approach for nested KObjects:

  1. Inspect the Klass schema by reviewing KObject instances. While Kustomer lists Klass schema definitions as non-exportable, you can infer the schema by fetching a sample set of KObjects for each Klass and cataloging all attributes.custom.* field paths, their types, and nesting depth.
  2. Flatten selectively. For migration, decide which nested arrays to flatten into separate rows (e.g., line items on an order KObject) versus which to keep as serialized JSON in a single column. A common pattern: store the top-level KObject fields as columns and serialize nested arrays as JSON strings in a _nested_data column.
  3. Preserve the customer relationship. KObjects link to customers via /v1/customers/{customerId}/klasses/{klassName}. Always extract and store the customerId foreign key to maintain the association in the destination system.

Throughput Planning Math

At a conservative 80 RPM against the 100 RPM Search API cap with 100 records per page, you can extract roughly 480,000 records per hour for flat object listing (customers, conversations).

For message extraction — which requires per-conversation API calls — throughput drops significantly: 100 API calls/min × 1 conversation per call = roughly 6,000 conversations with full message history per hour, assuming one page of messages per conversation.

Large instances with 500K+ conversations and millions of messages should budget 8–24 hours of continuous API extraction time. These are planning estimates, not vendor SLAs. Actual throughput depends on payload sizes, network latency, and retry frequency. (help.kustomer.com)

Webhook Event Stream (Incremental Sync)

Kustomer supports webhook-based event streaming for near-real-time data export. Webhooks can be configured in Settings → Webhooks to fire on events such as customer.create, customer.update, conversation.create, conversation.update, message.create, and kobject.create. Each webhook POST delivers a JSON payload containing the full object state at the time of the event.

This is useful for incremental backup architectures — pipe events to a queue (SQS, Pub/Sub) and process into a warehouse or backup store. It is not a substitute for bulk historical extraction via the API, since webhooks only capture events going forward from the moment of configuration. Kustomer's reporting export documentation references this pattern for continuous export to external systems like Redshift. (help.kustomer.com)

Does Kustomer Export Include Attachments?

No. Kustomer does not include attachments in any native CSV, search export, or Export Buddy download. Kustomer's native export documentation does not describe a binary attachment export workflow — attachments are treated as separate resources. (help.kustomer.com)

The practical extraction pattern:

  1. Export conversations and messages first via the API.
  2. Enumerate attachment metadata using GET /v1/conversations/{id}/attachments, which returns a paginated list including download URLs.
  3. Download each file individually via its direct URL. Kustomer hosts these files securely and the URLs may expire, so your script must download the binary immediately upon receiving the URL.
  4. Handle inline images embedded in HTML or Markdown message bodies. These are stored as separate attachment references and must be fetched via the API. Parse src URLs from message HTML, download the images, and rewrite message body references if migrating to a new platform. If a shortcut includes an inline image in a channel that does not support inline images, Kustomer sends the image as a URL instead — this matters during post-migration validation. (help.kustomer.com)
  5. Re-associate each file by message ID, conversation ID, and customer ID in the target system.

There is no bulk attachment download endpoint. For a Kustomer instance with 100,000 conversations, you may need 100,000+ API calls just to enumerate attachments, plus additional calls to download each file. At 100 RPM, downloading attachments from a large instance can take 12–48 hours depending on volume.

Agent-side attachment limits are worth knowing for validation: individual files capped at 5 MB, total attachment size per message at 9.5 MB, and inline images at 5 MB each. Supported file types include .pdf, .doc, .docx, .xls, .xlsx, .zip, .txt, .mov, .mp4, .png, .jpg, and .gif. (help.kustomer.com)

Fivetran's Kustomer connector syncs a MESSAGE_ATTACHMENT table with attachment details (file name, content type, size), which is useful for warehouse analytics but is not the same thing as exporting the binary files themselves. (fivetran.com)

What Data Cannot Be Exported from Kustomer?

Some data types cannot be exported through any supported method — native UI, Export Buddy, or API. Kustomer explicitly lists these in its export documentation. (help.kustomer.com)

Data Type Exportable? Workaround
Business Rules / Automations No Manually document conditions and actions. Audit logs show change history but not packaged config. (help.kustomer.com)
Workflows No Manually document and rebuild. Audit logs capture some changes but not reusable definitions.
Conversational Assistant Configs No Document before canceling.
Routing Queue Settings No Document manually.
Saved Search Definitions No Export the results if needed; recreate filters, sorts, badges, and columns manually. (help.kustomer.com)
Custom Klass Schema Definitions No Rebuild manually. Engineers can infer schemas by inspecting KObject instances via the API, but Kustomer lists schema definitions as non-exportable. (help.kustomer.com)
Custom Timeline Layouts No None.
SLA Policies Partial (API read) API returns SLA objects but not full rule logic. Timers and breach conditions must be manually recreated.
Audit Logs Partial (API only) GET /v1/audit-logs with filters. Short-term events stored up to 90 days; long-term events up to 12 months. Query before the retention window expires. (help.kustomer.com)
Deleted Records No Not recoverable once deleted. No "recycle bin" endpoint.
Integration Configurations No Document manually.
User Permissions / Role Assignments Partial (API) Roles readable via GET /v1/roles, but full permission matrices require manual mapping.

The non-exportable items are operational configuration, not customer data. But for teams migrating to a new platform, losing workflow logic and routing rules means significant manual rebuild effort. Budget 2–5 days of PM time to document these before canceling your Kustomer subscription.

Danger

Export before your contract ends. Kustomer provides no read-only access period after the subscription end date. Kustomer's documentation does not specify a post-termination data retention window or a mechanism for requesting data exports after contract expiration. If you wait until after cutoff, your export project becomes an account-recovery problem instead of a data-portability project. Begin extraction at least 30 days before your contract end date. (help.kustomer.com)

Data Format, Encoding, and Post-Export Cleanup

Kustomer exports produce CSV files (native UI and Export Buddy) and JSON responses (API). KB articles export as compressed ZIP files. Even with a clean extraction, expect post-export cleanup before importing into a destination platform.

Common issues to handle:

  • HTML in text fields. Message bodies often contain raw HTML. Strip or convert tags if the destination expects plain text or Markdown. Export Buddy KB exports carry article content in htmlBody; API article reads return HTML in attributes.body. Decide whether the target wants HTML, Markdown, or plain text before import.
  • UTF-8 encoding. Kustomer exports use UTF-8, but special characters (emoji, accented characters) can corrupt when opened in Excel without specifying the encoding. Import CSVs with explicit encoding='utf-8' in your tooling.
  • Timezone drift. API timestamps are in UTC (ISO 8601). Native CSV reporting exports default to EST but are configurable. Normalize all timestamps to UTC before import to avoid SLA and reporting history drift. (help.kustomer.com)
  • Preview vs. full content. Message reporting exports expose preview and subject — not full message bodies. Use the Messages API (GET /v1/conversations/{id}/messages) when you need complete transcript content. (help.kustomer.com)
  • Orphaned references. Conversations reference Customer IDs and User IDs. If you export conversations but skip customers, you'll have broken foreign keys.
  • Flattened relationships. CSV exports flatten hierarchical data. A Customer → Conversation → Message → Attachment chain becomes separate flat files with no join keys unless you extract via the API. Kustomer export fields frequently expose relationship data in dot-notation columns.
  • Silently dropped custom fields. If a custom attribute on a KObject is blank for the first batch of records in a saved search, the reporting engine may silently drop that column from the CSV entirely.
  • Soft-deleted metadata. Export Buddy includes deleted snippets and user deactivation markers. Decide what should be migrated and what should stay behind. (help.kustomer.com)

Post-export validation checklist:

  1. ✅ Record counts match source (Customers, Conversations, Messages)
  2. ✅ Date ranges cover full history (check for 2-year cutoff gaps)
  3. ✅ Custom fields are present and populated (not silently dropped)
  4. ✅ Message bodies contain full content (not truncated previews)
  5. ✅ Attachments are downloadable (URLs haven't expired)
  6. ✅ KObject relationships map correctly to parent Customer records
  7. ✅ No duplicate records from overlapping export windows
  8. ✅ Thread integrity: every Message maps to a valid Conversation ID
  9. ✅ Active vs. soft-deleted metadata separated correctly

For a detailed look at the trade-offs of using CSVs for migration, see Using CSVs for SaaS Data Migrations.

Export for Migration vs. Backup vs. Compliance

The scope and format of your Kustomer export depend entirely on why you're exporting. The method that works for reporting does not automatically work for migration, backup, or compliance.

Use Case What You Need Best Kustomer Path Biggest Gap
Migration Full transcripts, IDs, relationships, tags, notes, KObjects, attachments, user/team metadata API + Export Buddy + separate attachment extraction Native CSVs are too flat; config objects need manual rebuild
Backup / Archive Repeatable full-fidelity snapshot with retention API on a recurring schedule + webhook event stream for incremental capture; store raw JSON in S3 or equivalent UI exports not deep enough; audit data ages out; no native backup feature
Compliance / DSAR Person-linked data, timestamps, chain of custody, auditability API + audit logs + documented handling Audit retention is finite (90 days / 12 months); no one-button full account package

For migration: You need full-fidelity relational data extracted via the API. Extract Users first, then Customers, then Conversations, then Messages — maintaining an ID mapping table so that when records get new IDs in the destination platform, associated Messages and Notes are attached correctly. Flat CSVs break Customer → Conversation → Message relationships and are not suitable for migration. See the Help Desk Data Migration Playbook for a complete architectural breakdown. If you're moving to Zendesk, see Kustomer to Zendesk Migration. For Help Scout, see Kustomer to Help Scout Migration.

For backup: Use the API to query records where updatedAt is greater than your last sync timestamp. Supplement with webhook event streaming (customer.update, conversation.create, message.create, etc.) to capture changes in near-real-time between full API sweeps. Store raw JSON payloads alongside downloaded attachments in a versioned archive. Kustomer does not offer a native backup feature. (help.kustomer.com)

For compliance (GDPR / DSAR): Kustomer's API lets you extract all personal data associated with a specific customer in JSON — a structured, machine-readable format as required by GDPR Article 20. Kustomer states their platform provides functionality to respond to data subject rights requests including access, correction, deletion, and portability. Audit retention is limited by event type (90 days for short-term, 12 months for long-term), so compliance-grade exports should be planned before the data ages out. (help.kustomer.com) For broader compliance requirements during migration, see the GDPR Compliant Data Migration guide.

Vendor Lock-In and Data Portability Assessment

Kustomer's data portability rating: Partially Locked.

The underlying customer data is not held hostage — the API provides access to virtually all historical records. The lock-in shows up in three specific places:

  1. Native export limits are too small for real exits. 30-day reporting windows and 50K saved search caps are reporting features, not migration features. (help.kustomer.com)
  2. History is split across search tiers. Conversation, message, and KObject data older than 2 years requires Archive Search logic — a different API endpoint and additional scripting. (help.kustomer.com)
  3. Configuration is not portable. Business rules, workflows, saved searches, and custom Klass schema definitions are not part of supported exports. (help.kustomer.com)

Breaking it down:

  • ~70% exportable cleanly: Customer records, conversation metadata, message bodies, notes, KObjects, users, teams, tags, snippets, and KB articles — all accessible via the API in structured JSON with relationships preserved.
  • ~20% requires significant engineering: The 2-year search cutoff, 100-page pagination limit, and per-conversation message/attachment extraction all require custom scripting with error handling, retry logic, and cursor management. This is not a simple export — it is a data engineering project.
  • ~10% is lost: Workflow automations, business rules, routing configurations, conversational assistant setups, and custom timeline layouts cannot be programmatically extracted and must be manually documented and rebuilt.

How Kustomer compares to other help desk platforms: Zendesk offers a bulk XML export (Enterprise plans) and incremental API endpoints with cursor-based pagination and no hard page limit. Intercom provides a GDPR-oriented data export and REST API but has similar per-conversation message retrieval requirements. Freshdesk offers a straightforward API with higher default rate limits (per minute per app) and native data export to CSV for tickets. Kustomer's 2-year search cutoff and 100-page hard pagination limit are more restrictive than Zendesk's incremental export pattern, but Kustomer's API coverage of custom objects (KObjects) is more flexible than Freshdesk's custom object support.

The real switching cost is not data access — it is the engineering time required to work around the API constraints. A team with 200,000 conversations and custom KObjects should budget 40–80 hours of developer time for a complete extraction, plus PM time for validation and configuration documentation.

Info

Only Admins and Organization Owners can export data from Kustomer. There is no free plan or trial. Once you cancel your subscription, you lose access. Export everything before canceling.

Timeline and Resourcing for a Full Data Export

Realistic extraction timelines based on dataset size:

Dataset Size Typical Timeline Minimum Team
Small (<10K records) 1–2 days 1 admin for UI exports; 1 developer for API
Medium (10K–100K records) 3–7 days 1 developer + 1 PM/analyst
Large (100K+ records) 1–3 weeks 1–2 developers + 1 PM + QA/data analyst

Typical phase breakdown:

  • Scoping (0.5–2 days): Confirm objects, date ranges, KObject schemas, attachment requirements, and compliance scope.
  • Access setup (hours to 1 day): API keys, permission scopes, sandbox testing, plan-limit checks. Verify your plan's org-wide rate limit (300–2,000 RPM) and confirm the per-key 100 RPM machine-user cap.
  • Extraction (minutes to days): Minutes for UI exports. Hours to days for API exports once you account for Archive Search, per-conversation messages, attachments, and rate-limit retries.
  • Validation (0.5–3 days): Compare record counts, spot-check transcripts, confirm tag and team mappings, verify old-history coverage past the 2-year boundary.
  • Cleanup and transformation (variable): Flat CSV work is faster. Relationship-preserving imports into a destination platform take significantly longer.

The biggest schedule multipliers are attachments (per-conversation API calls bottlenecked by rate limits), archived data (Archive Search endpoint adds scripting complexity), and custom KObjects (complex nested structures that require schema understanding). These are where Kustomer data portability stops being a reporting task and becomes a data engineering project.

Tip

If your engineering team is busy shipping product, don't force them to build one-off pagination and archive-search scripts. A managed export service eliminates the internal resource drain and guarantees data integrity — especially for large datasets with KObjects, attachments, and data spanning the 2-year archive boundary.

The Practical Decision

If your goal is a quick CSV for recent reporting, the UI is fine. If your goal is a migration-grade export with older conversations, full transcripts, attachments, and KObjects intact, start with the API design on day one and treat native exports as supporting tools, not the main plan. (help.kustomer.com)

Frequently Asked Questions

Can I export all my data from Kustomer?
You can export most customer and conversation data using the REST API, but no single native tool covers everything. The native UI is limited to 30-day windows and 25 attributes. Business rules, workflows, saved search definitions, and custom Klass schema definitions are explicitly listed by Kustomer as non-exportable through any method.
Does Kustomer export include attachments?
No. Native CSV exports, saved search exports, and Export Buddy do not include attachments. You must use the API endpoint GET /v1/conversations/{id}/attachments to retrieve attachment metadata and then download each file individually via its URL. There is no bulk attachment download endpoint.
How long does it take to export data from Kustomer?
For small datasets under 10,000 records, native UI exports complete in minutes. For API-based full exports of 100,000+ records including messages and attachments, expect 1–3 weeks including scripting, extraction, and validation. The per-conversation message and attachment retrieval is bottlenecked by the 100 RPM rate limit.
What data cannot be exported from Kustomer?
Business rules, workflow automations, conversational assistant configurations, custom timeline layouts, routing queue settings, saved search definitions, and custom Klass schema definitions cannot be exported through any method — native UI, Export Buddy, or API. These must be manually documented before canceling your account.
What format does Kustomer export data in?
Native reporting and saved search exports produce CSV files. Export Buddy outputs CSV for most data types and compressed ZIP for Knowledge Base articles. The REST API returns JSON. KB article content is HTML in both Export Buddy (htmlBody field) and API responses (attributes.body field).

More from our Blog

Help Desk Data Migration Playbook: What Data to Move and What to Leave Behind
Help Desk

Help Desk Data Migration Playbook: What Data to Move and What to Leave Behind

This definitive playbook answers the single most critical question: "What data do we actually need to move?". This strategic guide helps you declutter and decide what's precious and what's junk. We provide a clear breakdown of the non-negotiable Tier 1 data, like tickets , knowledge bases , and user profiles, versus the Tier 2 data that provides rich context, like automations and organizations. Use this as your strategic checklist to avoid common mistakes and ensure a flawless, functional new help desk.

Raaj Raaj · · 7 min read