If a small business might move from a packaged chatbot to a custom setup later, the most useful thing a developer can do during the free trial is test the export. It takes an hour, and it decides whether "start packaged, move later" is a safe plan or a trap.

It is a practical way of choosing custom AI or a SaaS chatbot by data export.

What to export during the trial

Create a few test conversations that look like real ones: a question, a handoff to a human, a tag added by staff, a note, an attachment. Then export everything the admin panel allows: conversations, contacts, tags and custom fields.

A quick checker

import csv, json, sys from pathlib import Path REQUIRED_CONV = {"contact_id", "channel", "timestamp", "direction", "text"} REQUIRED_CONTACT = {"contact_id", "phone"} def columns(path): p = Path(path) if p.suffix == ".json": rows = json.loads(p.read_text()) return set(rows[0].keys()), rows with p.open(newline="") as f: rows = list(csv.DictReader(f)) return set(rows[0].keys()), rows conv_cols, convs = columns(sys.argv[1]) cont_cols, contacts = columns(sys.argv[2]) print("conversation columns missing:", REQUIRED_CONV - conv_cols or "none") print("contact columns missing:", REQUIRED_CONTACT - cont_cols or "none") print("has tags:", any("tag" in c.lower() for c in cont_cols)) print("has notes:", any("note" in c.lower() for c in conv_cols | cont_cols)) ids = {r["contact_id"] for r in contacts if r.get("contact_id")} orphans = [r for r in convs if r.get("contact_id") not in ids] print("conversations without a matching contact:", len(orphans)) 

Run it as python check_export.py conversations.csv contacts.csv.

What you are looking for

  • A stable contact ID you can join on. Without it, conversations and contacts cannot be matched, and the history is much less useful.
  • Direction and timestamps, so you can rebuild threads in order.
  • Staff notes and tags. These usually hold the business knowledge, such as "VIP", "custom order", "complained last time".
  • Handoff markers. Can you tell which messages the bot sent and which a human sent?
  • Attachments, or at least stable links to them.

Why it matters

If the export is clean, choosing a packaged platform is low risk: start packaged, learn what customers ask, move later with your history intact. If it is not clean, factor that in now. Either pick a different tool, or schedule a monthly export from day one so you are never more than a month behind.

Put the result in a short note for the owner: "export works", or "export is missing X, here is the workaround". It is a small task that saves a painful migration later.

Disclosure: I run NxFlowAI, an AI automation agency. Portability is one of the checks in our first audit, which takes 72 hours for one workflow.