Live demo · no signup needed

Your spreadsheet,
actually explained.

Connect QuickBooks directly, or upload a CSV from Square, your bank, or anywhere else. Get charts in seconds and an AI summary that reads your numbers like a financial analyst.

revenue.csv
date,amount,category
2026-03-12,4820.00,Revenue
2026-03-12,1247.50,Payroll
2026-03-13,890.00,Supplies
… 247 more rows
AI analysis

Revenue grew 18% in March driven by a surge in catering orders on weekends. Payroll held steady, so margin expanded to 34%. If you're planning April hires, the weekend volume is your signal.

Every insight links back to the exact numbers it came from.

1

Connect or upload

Connect QuickBooks and it syncs automatically, or export a CSV from Square, Wave, or any tool. For CSVs we need date, amount, and category columns, that's it. Bad rows get flagged, not silently dropped.

2

See your charts

Revenue trend, expense breakdown, profit margin, year-over-year comparison. Filter by date or category. Charts are free forever.

3

Read what it means

AI reads your trends, spots anomalies, and writes a summary your business partner would understand. Free tier gets a preview; Pro gets the full analysis.

Your raw numbers never reach the AI.

Whether your data comes from a CSV upload or a QuickBooks sync, Tellsight computes the stats (totals, trends, anomalies, year-over-year) and sends only those summaries to Claude. Claude never sees your individual transactions.

The function that builds the AI prompt has a signature that won't accept raw rows. Try to pass them and TypeScript refuses to compile. The privacy boundary is enforced by the type system, not by code-review discipline.

For engineers, how it's enforced

The prompt-assembly function in apps/api/src/services/curation/assembly.ts takes ScoredInsight[], not DataRow[]. Trying to pass raw transactions is a TypeScript compile error.

The pipeline is three layers: compute statistics, score them, assemble the prompt. Only the third layer talks to Claude, and its input type is structurally unable to carry raw user data.

Side benefit of the same boundary: the cost ceiling in apps/api/src/lib/cost.ts catches anomalously expensive AI calls before they pollute the rolling-median baseline.