Docs
ai-chat
Uploading data

Uploading data

The fastest way to feed thola is to drop in a file. The chat understands four formats out of the box:

The three-step upload flow
FormatWhat for
CSVSales, leads, expenses, employees, inventory, attendance
XLSXSame as CSV, with multi-sheet support
PDFInvoices, bills, ledgers (we OCR them)
PNG / JPGHandwritten cash books, receipts, photos of stock counts

Upload up to 10 MB per file. Larger files should be split — thola will tell you exactly where to split if you hit the limit.

The preview-then-confirm pattern

Every upload follows the same three-step flow. No upload writes to your workspace until you confirm.

  1. Upload — drag the file into the chat or click the paperclip.
  2. Preview — thola parses the file and shows you:
    • The shape it identified (sales? expenses? employees?)
    • The columns it mapped (what column became what field)
    • The row count, plus any suspect rows flagged
    • The duplicate-detection result if you've uploaded similar before
  3. Resolve & confirm — for each suspect row, decide skip / include / fix. For each duplicate, decide skip / replace / merge. Click Confirm to commit.

This pattern exists because silent imports break trust. We will not import a file you didn't see first.

How column mapping works

When you upload a CSV, thola tries to identify each column from its header and content. For sales data, that means matching to:

thola fieldWhat it maps from
customer_nameHeaders like "name", "customer", "client", "buyer"
bill_dateDate columns, parsed flexibly (DD-MM-YYYY, YYYY/MM/DD, etc.)
bill_amountNumeric column with the largest range
bill_idHeaders like "invoice", "bill", "ref"
currencyInferred from your workspace; rarely needed in the file

If thola can't map a column confidently, it shows the column in the preview labelled "Unmapped — choose field". You pick from a dropdown. The next time you upload the same shape, thola remembers your mapping.

Suspect rows

Rows that look wrong get flagged before confirmation. The common categories:

  • 🟡 Blank row — empty or all-null. Usually safe to skip.
  • 🟡 Header repeated — common in concatenated exports. Skipped by default.
  • 🟡 Summary row — totals or subtotals at the bottom. Skipped.
  • 🟠 Date out of range — much older or newer than the rest. Worth checking.
  • 🟠 Amount sign inconsistent — most rows positive, this one negative (or vice versa).
  • 🔴 Currency mismatch — row currency differs from workspace.

Every suspect row shows the actual content side by side with thola's guess.

Duplicate detection

If you've previously uploaded data, thola checks every new row against existing records. Duplicates are caught on:

  • Exact bill_id match → almost certainly the same record
  • customer + date + amount match → likely the same record
  • customer + date match with amount differing — flagged for review

For each duplicate, you choose:

  • Skip — keep the existing record, ignore the new one
  • Replace — overwrite the existing record with the new data
  • Merge — combine non-conflicting fields (e.g. add notes from the new row)

PDF & image OCR

For invoices and bills, drop the PDF (or photo) into chat. thola OCRs it and presents you a structured preview:

  • Vendor / customer name
  • Date
  • Line items (description, qty, unit price, amount)
  • Subtotal, tax, total
  • Payment terms

You confirm the structured version, not the OCR'd image. The original file is kept attached to the record for audit, and you can download it at any time.

OCR works well for typed invoices, less well for handwriting. For handwritten cash books, OCR is best-effort — review the preview carefully.

What happens to your file

When you confirm an upload:

  • The structured data is written to your workspace's modules.
  • The raw file is stored in the workspace document store, accessible from Import history (per module).
  • The Planner adds a system note to the chat: "Imported 142 sales records from June_sales.csv. Sales score updated from 64 to 68."

You can delete the raw file at any time — the structured data stays.

Bulk uploads

For very large datasets — say, two years of sales — the upload is the same shape, but the preview/confirm step is more involved. You'll see:

  • Pagination through the preview
  • A summary panel: total rows, suspect rows, duplicates, estimated processing time
  • A "Process in background" option — confirm once, and thola continues the import while you do other things. You get a notification when it's done.

A 50 MB file split into five 10 MB chunks will work fine. The five chunks will appear as five separate import jobs in Import history, each independently undoable.

Undoing an import

Every import is fully reversible for 30 days. From Import history:

  • Click the import job
  • Hit Undo import
  • The records added by that job are removed; module scores recalculate

This is safe because every row is tagged with the import job that brought it in.

Common questions

Can I automate uploads? Yes — every workspace gets a unique email-to-import address. Forward your bank statement, accounting export, or CRM export there; thola treats it as an upload. The preview-then-confirm flow still runs — you get a chat ping asking to confirm.

My file has a weird format. Use the Custom mapping option in the preview. Define mappings once, save as a template, reuse. Templates are visible to your whole workspace.

Will thola ever auto-confirm an import? No. Even on workspaces with agent-first posture, imports always require human confirmation. This is a hard rule.


→ Next: Presentation mode