Migration Playbook

LiveChat Tidio

LiveChat to Tidio: The Complete Migration Playbook

A 35-step runbook across six phases — track your progress, and open the right tool at every step.

0 / 35 steps complete 0%
TL;DR

LiveChat data exports via Agent Chat API v3.5; Tidio ingests contacts in batches of 100 and tickets one-at-a-time. Operators, departments, and canned responses must be rebuilt manually.

Migrating from LiveChat to Tidio requires a fully custom ETL pipeline — there is no native migration tool or direct integration path between the two platforms. The fundamental data model difference is significant: LiveChat structures conversations as an event-driven hierarchy of chats containing threads containing typed events, while Tidio centers on a Contact object with a merged inbox/ticketing interface where all imported historical data lands in the Help Desk module, not the live chat inbox. Custom transformation work is required for every major data entity, including flattening LiveChat's rich event types (rich messages, form fills, file attachments) into Tidio-compatible ticket reply payloads. Several data categories — including agents, departments, canned responses, automation rules, chat ratings, and analytics history — cannot be migrated programmatically and require manual reconstruction in Tidio's admin interface.

Read this first

Pair-specific gotchas that catch teams out. Each one has cost somebody a weekend.

API version note

This guide targets LiveChat Agent Chat API v3.5 and the Tidio OpenAPI (version 1). Verified against both APIs as of July 2025. Both APIs evolve — verify endpoints against current documentation before running any migration scripts.

Store the original LiveChat customer_id as a custom property in Tidio (e.g., livechat_customer_id)

This gives you a lookup key during ticket import and a permanent cross-reference for post-migration audits. Also maintain an in-memory or SQLite mapping table of livechat_customer_id → tidio_contact_id to avoid re-querying Tidio on every ticket.

Timestamp loss is permanent

Every imported ticket will show the import date, not the original conversation date. If preserving original timestamps is a hard requirement for SLA reporting, compliance, or legal hold purposes, evaluate whether Tidio is the right target platform before committing to the migration.

Run a pilot migration of 50–100 chats first

Review the output in Tidio's UI with your support team before committing to the full run. This catches formatting issues, missing fields, encoding problems, and workflow gaps early — and gives you a clean rollback test before scale.

The runbook

Work top to bottom. Tick steps as you go — your progress is saved in this browser.

01 Discovery Establish why you are moving, what "done" means, and who signs off. 0/5

Objective A written scope with agreed success criteria, a named owner per workstream, and a budget approved by finance.

  1. Pull the real numbers out of LiveChat

    Support ops 1 day

    Export counts for tickets (open and closed separately), contacts, organisations, attachments, macros, triggers, automations, views and SLA policies. Note the oldest ticket date — history depth drives the whole timeline. Estimating from memory is the single most common cause of a blown migration window.

    Data Profiler Get real record counts instead of estimating from memory
  2. Decide what history actually moves

    Support lead 2 days

    Agree a cut-off with the support lead: all history, last 24 months, or open tickets plus a read-only archive. Every extra year of closed tickets adds API time and cost without adding much agent value. Get this in writing — it is the decision people relitigate mid-cutover.

    A "move everything" default is what turns a two-week migration into a two-month one.

    COI & ROI Calculator Build the 36-month business case you will need for sign-off
  3. Confirm Tidio can hold your support model

    Solution architect 2-3 days

    Walk your current workflow through Tidio: multi-brand, business hours, SLA targets, CSAT, side conversations, public vs internal notes, and any channel you depend on (voice, chat, WhatsApp, social). List anything with no native equivalent — those are project risks, not configuration details.

  4. Build the business case

    Project sponsor 1-2 days

    Model licence delta, migration effort, agent retraining, and the cost of staying put (Cost of Inaction). Executives approve a number, not a plan, and you will be asked for it again at the go/no-go.

    Helpdesk Migration Planner Turn ticket volume into a dated LiveChat → Tidio timeline
  5. Name owners and set the go/no-go date

    Project manager 1 day

    One named owner each for data, configuration, integrations, and agent enablement, plus a decision-maker who can call a rollback. Put the go/no-go meeting in calendars now, 48 hours before the freeze.

Don't move on until

  • Record counts confirmed for tickets, contacts, organisations and macros
  • Success criteria signed off by the support lead
  • Freeze window provisionally booked with the business
02 Data Audit Find out what is actually in the data before you try to move it. 0/6

Objective A profiled, cleaned export with every quality defect either fixed at source or explicitly accepted.

  1. Take a full LiveChat export and profile it

    Data engineer 1-2 days

    Export to CSV or JSON and profile every file: row counts, null rates per column, distinct values, and type consistency. Compare row counts against the API totals from Discovery — a gap here means your export is silently truncated, usually by pagination.

    Data Profiler Profile the LiveChat export for nulls, outliers and type drift
  2. Validate file structure before anyone writes a transform

    Data engineer 1 day

    Check delimiters, quoting, encoding (expect UTF-8, watch for BOMs and Latin-1), duplicate headers, and embedded newlines in ticket bodies. Ticket descriptions with raw newlines and commas break naive CSV parsers and silently shift columns.

    A single unescaped quote in one ticket body can shift every subsequent column without any error.

    CSV Validator Catch broken headers and ragged rows in the raw export
  3. Inventory PII and set retention

    Compliance / DPO 2 days

    Scan for emails, phone numbers, payment card fragments, national IDs and anything else regulated in ticket bodies and custom fields — support tickets are where customers paste things they should not. Decide what gets migrated, masked, or dropped, and record the legal basis.

    Ticket bodies and attachments routinely contain card and ID data that never appears in a structured field.

    PII & Compliance Scanner Find regulated fields before they land in a new system
  4. Quantify duplicates, orphans and dead references

    Support ops 1-2 days

    Count duplicate contacts (same email, different casing), tickets whose requester no longer exists, organisations with no members, and attachments whose parent ticket is gone. Fix these in LiveChat where you can — migrating them just moves the mess.

    Data Cleaner Strip empty rows, stray whitespace and dead columns
  5. Clean and normalise the export

    Data engineer 2 days

    Trim whitespace, drop empty rows and columns, normalise casing on emails and tags, and standardise every timestamp to UTC ISO 8601. Timezone drift is invisible at load time and shows up weeks later as SLA reports nobody can reconcile.

  6. Produce a masked copy for sandbox work

    Data engineer 0.5 day

    Generate a realistic but fake version of the export for testing and for any vendor who needs sample data. Loading real customer PII into a sandbox is a breach in most jurisdictions, and sandboxes are rarely covered by your DPA.

    PII Masker Generate a safe copy for sandbox and vendor testing

LiveChat → Tidio specifics

Pagination
Results use cursor-based pagination via page_id. Each response includes next_page_id — pass it in subsequent requests.
Sort order
Use asc (oldest first) for chronological import consistency.
Data returned
Each chat includes users (customer + agents), threads containing events (messages, filled forms, system messages), properties, tags, and access (group IDs).
Canned responses
No export endpoint exists. Plan to manually recreate them in Tidio.
Automation rules
No export format. Rebuild in Tidio's workflow editor.

Don't move on until

  • Export parses cleanly with no ragged rows or encoding errors
  • PII inventory complete and retention decisions recorded
  • Duplicate and orphan records quantified and triaged
03 Field Mapping Turn two schemas into one signed-off mapping spec. 0/6

Objective A reviewed field-level mapping covering every object, with an explicit decision for every field that has no target.

  1. Generate the first-pass LiveChat → Tidio field map

    Solution architect 2 days

    Start from an automated match on both schemas, then review every row by hand. Automated matching gets the obvious 70% right and is confidently wrong on the rest — especially anything named "type", "status" or "custom_field_1".

    Schema Mapper Opens pre-loaded with the LiveChat → Tidio field pair
  2. Map status, priority and channel values, not just field names

    Support lead 1-2 days

    Enumerate every value in each picklist on both sides and map them explicitly. Value-level mismatches are the defect class that survives all the way to production because the field itself mapped fine — a ticket that should be "Pending" arriving as "Open" reopens SLA clocks.

    Statuses with no target equivalent (on-hold, pending-customer) need a policy decision, not a best guess.

  3. Decide how custom fields land

    Solution architect 2 days

    Create the target custom fields first, matching type exactly (a dropdown mapped to free text can never be mapped back). Where Tidio has no equivalent, decide between a new custom field, a tag, or a note appended to the ticket body — and record which.

  4. Resolve identity and threading

    Data engineer 1 day

    Decide how source IDs are preserved — most platforms will not let you set the primary key, so keep the original ID in a custom field. Without it, reconciliation becomes fuzzy matching and every future support question about an old ticket is unanswerable.

    Losing the original ticket ID makes reconciliation and rollback effectively impossible.

  5. Plan attachments, inline images and threading order

    Data engineer 1-2 days

    Confirm size limits, allowed MIME types, and whether inline images survive as attachments or need rehosting. Decide the comment ordering and author attribution rules: comments loaded out of order, or all attributed to the API user, destroy the conversation history agents rely on.

  6. Freeze and sign off the mapping spec

    Project manager 1 day

    Version the spec, walk the support lead through it row by row, and get explicit sign-off. Any change after this point goes through change control — mid-flight mapping edits are how partial loads happen.

LiveChat → Tidio specifics

All-or-nothing
If one contact in the batch is invalid, the entire batch fails. Validate every record before sending — don't mix clean and suspect records in the same batch.
No deduplication on create
The POST /contacts endpoint always creates a new contact. It will not merge or overwrite even if the email already exists. The get_existing_contact check above is your guard.
Required fields
At least one of email, first_name, last_name, or phone must be present.

Don't move on until

  • Every source field is mapped, deliberately dropped, or parked in a custom field
  • Status, priority and channel value maps agreed with the support lead
  • Mapping spec version-controlled and signed off
04 Test Migration Prove the pipeline on a small, representative slice. 0/6

Objective A pilot load into a Tidio sandbox that reconciles cleanly and has been reviewed by real agents.

  1. Stand up a Tidio sandbox that matches production config

    Solution architect 2-3 days

    Create the custom fields, groups, brands, business hours and SLA policies first. A pilot into a default sandbox tests nothing, because the failures you care about are all configuration mismatches.

  2. Pick a deliberately nasty pilot sample

    Data engineer 0.5 day

    Take 500-1000 records chosen for difficulty, not convenience: the longest ticket threads, tickets with the most attachments, non-Latin character sets, merged and split tickets, deleted requesters, and every status value. A clean random sample proves only that easy records are easy.

  3. Run the load with masked data and instrument everything

    Data engineer 1-2 days

    Log every API request and response with its source record ID. When 40 records fail out of 10,000 you need to know exactly which ones and why, without re-running the whole batch.

    PII Masker Never load real customer PII into a sandbox
  4. Measure real throughput against the rate limit

    Data engineer 1 day

    Record achieved records-per-hour under Tidio's actual rate limits, including retries and backoff. Extrapolate to the full volume: if the maths says the full load exceeds your freeze window, you fix that now, not on cutover night.

    Published rate limits are ceilings, not throughput. Assume real-world rates are meaningfully lower once retries and backoff are counted.

  5. Reconcile the pilot and triage every failure

    Data engineer 1-2 days

    Diff source against target on record counts and field-level values. Every discrepancy gets a root cause and a fix — "probably fine" at pilot scale becomes thousands of broken records at full scale.

    Migration Validation Tool Diff the pilot batch against source before scaling up
  6. Put real agents in front of the pilot data

    Support lead 2 days

    Have two or three agents work sample tickets end to end in the sandbox. They find the things reconciliation cannot see: unreadable threading, missing context, macros that no longer make sense. Fix the mapping, then re-run.

LiveChat → Tidio specifics

Dry-run mode
validate payloads against Tidio's schema before sending by logging the payload structure without making the API call.

Don't move on until

  • Pilot batch reconciles to 100% on record counts
  • Agents have reviewed sample tickets and confirmed they are workable
  • Measured throughput extrapolates to a viable full-load window
05 Cutover Execute the switch inside a controlled, reversible window. 0/6

Objective All in-scope data live in Tidio, agents working in the new system, and a rollback path that stayed available throughout.

  1. Pre-load history before the freeze

    Data engineer 3-10 days

    Load closed tickets and contacts days or weeks ahead while LiveChat stays live. Only open tickets and the final delta need to move inside the freeze — this is the single biggest lever on window length.

    Helpdesk Migration Planner Size the freeze window from Tidio's real API limits
  2. Publish the runbook with times, owners and abort criteria

    Project manager 1 day

    A timed sequence: freeze start, final export, delta load, channel switch, smoke test, go/no-go, agent switch. Name who does each step and the explicit condition that triggers a rollback. Decide the abort criteria before the night, when nobody wants to be the one to call it.

  3. Freeze LiveChat and take the final delta

    Support ops 2-4 hours

    Stop new ticket creation, let agents finish in-flight replies, then export everything changed since the pre-load. Announce the freeze to the whole business, not just support — someone always tries to raise a ticket during it.

    Tickets created during an unenforced freeze land in the old system and are the most common source of permanently lost data.

  4. Load the delta and open tickets

    Data engineer 2-6 hours

    Run the delta load, then reconcile counts before touching any channel. Do not repoint email until the delta has verified — an inbound ticket arriving mid-load is far harder to untangle than a few extra minutes of freeze.

    Migration Validation Tool Confirm the final delta landed before you reopen
  5. Repoint channels and verify with live traffic

    IT / integrations 2-4 hours

    Switch email forwarding and MX or connector settings, update chat widgets and web forms, and re-authorise integrations. Then send real test tickets through every channel and confirm each lands, routes and triggers the right automation.

    Email forwarding changes can take up to a full DNS TTL to propagate — check the TTL days in advance and lower it if needed.

    Cron Expression Builder Schedule the delta syncs that run through the freeze
  6. Run the go/no-go and switch the agents

    Project sponsor 1-2 hours

    Walk the exit criteria with the decision-maker, call it explicitly, then move agents over with a named person on hand for the first few hours. Keep LiveChat read-only rather than cancelled — cancelling the old contract on day one removes your only fallback.

Don't move on until

  • Full historical load complete and counts matched
  • Inbound channels repointed and verified with live test tickets
  • Rollback decision point passed explicitly, not by default
06 Validation Prove the migration is complete, then close it out. 0/6

Objective Documented evidence that data, workflow and reporting all survived, and a signed acceptance.

  1. Run the full reconciliation

    Data engineer 1-2 days

    Compare source and target on every object: total counts, counts by status, counts by group, attachment counts, and field-level spot checks on a random sample. Produce one report you can hand to an auditor.

    Migration Validation Tool Reconcile LiveChat and Tidio record-for-record
  2. Verify field completeness, not just record counts

    Data engineer 1 day

    Re-profile the loaded data and compare null rates per field against the source profile. Matching record counts with a field that silently arrived empty is the failure mode counts alone will never catch.

    Data Profiler Prove field completeness held up through the load
  3. Rebuild reporting and compare against baselines

    Support ops 2-3 days

    Recreate your core dashboards — volume, first response time, resolution time, CSAT — and compare to pre-migration figures for the same period. Explain every variance; a changed SLA calculation is a real finding, not a rounding error.

    SLA and first-response metrics are usually recalculated from the loaded timestamps, so they will differ if any timestamp mapping was approximate.

  4. Test the workflow layer end to end

    Support ops 2 days

    Fire every trigger, automation, SLA escalation, macro and notification with a live ticket. Workflow does not migrate — it gets rebuilt — so it is untested until someone has actually watched it run.

  5. Confirm compliance and produce the audit trail

    Compliance / DPO 1 day

    Re-scan the loaded data for regulated fields, confirm retention and deletion policies are configured in Tidio, and file the evidence with your PII decisions from the audit phase.

    PII & Compliance Scanner Produce the compliance evidence your auditor will ask for
  6. Sign off, then decommission on a schedule

    Project sponsor 1 day

    Get written acceptance against the Discovery success criteria. Keep LiveChat read-only for an agreed period (30-90 days is typical), take a final archive export, and only then cancel. Diarise the decommission date so it does not quietly renew.

LiveChat → Tidio specifics

Custom property validation
Fetch a sample of contacts via GET /contacts/{contactId} and verify properties populated correctly. Any silent drops will show as missing fields here.

Don't move on until

  • Full reconciliation report attached to the project record
  • Reporting baselines match pre-migration figures within agreed tolerance
  • Formal acceptance signed and archive retention scheduled

Field mapping reference

The field-by-field mapping for each object. Use this as the starting point for your mapping spec.

LiveChat Tidio 18 fields
LiveChat fieldTidio fieldNotes
Customers Contacts Match on email; batch max 100; all-or-nothing
Agents Operators Create in Tidio admin panel; no create API
Groups Departments Create before ticket import
Chat Archives Tickets (Help Desk) One ticket per archived chat; no bulk endpoint
Chat Events — message type Ticket Replies Sequenced by original timestamp; no author_id support
Chat Events — file type Re-hosted URLs in replies LiveChat download URLs expire
Chat Events — rich_message type Plaintext degradation in replies Buttons, images, carousels not renderable
Chat Events — form type Contact Properties or reply text Define schema in Tidio first
Chat Events — system_message type Omit or include as bracketed note e.g., "Agent joined", "Chat transferred"
Tags Tags Create in Tidio first; attach via tag_ids
Pre/Post-Chat Form Data Contact Custom Properties Silently dropped if property not pre-defined
Attachments Hosted Links Download from LiveChat, upload to S3/GCS
Canned Responses Canned Responses No export API on LiveChat side
Knowledge Base Knowledge Base No bulk import API on Tidio side
Chat Ratings — No target field in Tidio tickets
Chat Properties (custom) — Per-integration scoping in LiveChat
Automation rules/triggers — Platform-specific logic; no export format
Reporting/analytics history — No import mechanism

Risk matrix

Per-object risk for this pair. Plan extra validation around anything marked high.

ObjectRiskNotes
Chat Archives (Tickets) high Each archived chat requires an individual API call to create a Help Desk ticket with no bulk endpoint, and the event hierarchy must be fully transformed per record, making this the highest-volume, highest-complexity migration task.
Contacts (Customers) medium Contacts can be batch-imported up to 100 records at a time via an all-or-nothing endpoint, and customer data must be deduplicated by email from chat archives since no standalone customer list endpoint exists in the LiveChat Agent Chat API.
File Attachments high LiveChat file download URLs expire, requiring a time-sensitive download-and-re-host workflow to external storage before migration, with no fallback if URLs have already lapsed.
Custom Properties and Form Data high Tidio silently discards any custom property values for properties not pre-defined in the schema, creating an invisible data loss risk if the target schema is not fully configured before import.
Rich Message Events medium Rich messages (cards, carousels, buttons) must be permanently degraded to plaintext, resulting in loss of interactive content fidelity with no mechanism to restore the original format.
Agents and Operators medium Agents must be manually recreated in Tidio before import and email addresses must exactly match LiveChat records, as any mismatch will break attribution on imported ticket replies.
Tags low Tags must be manually pre-created in Tidio and their UUIDs retrieved before import, but the attachment mechanism via tag_ids is straightforward once the prerequisite setup is complete.
Canned Responses medium LiveChat provides no export API for canned responses, requiring full manual inventory and recreation in Tidio with no automated path and a high risk of omissions at scale.
Automation Rules and Triggers high Automation logic is platform-specific with no export format on either side, requiring complete manual reconstruction in Tidio's workflow editor and carrying significant risk of behavioral gaps post-migration.
Chat Ratings and Analytics History high Chat satisfaction ratings and historical reporting data have no target fields or import mechanism in Tidio and are permanently lost in the migration with no workaround available.

The hard parts

What makes this specific migration difficult, beyond the mechanics.

Event Model Structural Mismatch

LiveChat's hierarchical chat → thread → event model must be flattened and transformed into Tidio's ticket reply structure, requiring custom serialization logic for every distinct event type.

Rich Event Type Degradation

LiveChat's rich_message events (buttons, carousels, images) and interactive form events have no equivalent in Tidio and must be degraded to plaintext representations, resulting in permanent loss of interactive fidelity.

Expiring File Attachment URLs

LiveChat file event download URLs are time-limited and will expire, requiring all attachments to be downloaded, re-hosted to external storage (e.g., S3 or GCS), and injected as plaintext URLs before the migration window closes.

Silent Custom Property Data Loss

Tidio silently drops any custom property data passed via the API that does not correspond to a pre-defined property in the schema, meaning all Contact Properties and ticket custom fields must be manually created in Tidio before any data import begins.

No Programmatic Agent or Department Creation

Tidio provides no API endpoint for creating operator accounts or departments, requiring all agents and groups to be manually recreated in the Tidio admin panel before ticket import — and email address matching is critical for attribution accuracy.

Rate Limit Contention and No Bulk Ticket Endpoint

Tidio's OpenAPI enforces plan-tier rate limits (60–120 req/min) and offers no bulk ticket creation endpoint, meaning each archived chat must be imported as a separate API call, making large-volume migrations slow and vulnerable to throttling.

Tools used in this playbook

All free, all run entirely in your browser — nothing is uploaded.

FAQ

Can I migrate LiveChat conversations to Tidio with original timestamps?

No. Tidio's API does not accept custom created_at timestamps. All imported tickets and replies will show the import date. You can preserve original dates by embedding them in the ticket subject line, message prefixes, or a custom field as a workaround.

Does Tidio have a bulk ticket import API?

No. Tidio's ticket creation endpoint (POST /tickets/as-contact) handles one ticket per request. There is no batch endpoint, so large migrations are throttled by the 60 req/min (Plus) or 120 req/min (Premium) rate limits.

How do I handle LiveChat attachments during the migration?

LiveChat attachment URLs expire or require authentication. Download the files via the LiveChat API, host them in a secure external storage bucket (like AWS S3 or GCS), and include the new URLs as plaintext links in your Tidio ticket replies or contact notes.

What Tidio plan do I need to use the API for migration?

You need at least the Tidio Plus plan for full OpenAPI access. Free through Growth tiers only get the Products endpoint. Plus offers 60 requests/min; Premium offers 120 requests/min.

Can I export canned responses from LiveChat?

There is no API endpoint or in-app method to export canned responses from LiveChat. You'll need to manually recreate them in Tidio's Canned Responses settings.

Or skip all of this and let us handle it

Book a 30-minute call and we'll scope your migration in a single session.