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. Export a snapshot as PNG or PDF, or share a link. 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, plus a weekly email digest so you don't have to remember to check.

Ask it directly, instead of hunting through charts.

"Why did payroll jump in March" gets a real answer, not a chatbot doing free association. The model has exactly two tools, both scoped to your own computed statistics, nothing else it can call. Every number in the answer carries a citation back to the row it came from, click it and the source data is right there.

Ask something outside that, general knowledge, write me a poem, and it says so plainly instead of trying.

Every figure opens up.

Claude writes the interpretation, it does not invent the numbers. Each statistic behind a claim carries the method that produced it, named rather than paraphrased: trend analysis, anomaly detection, year-over-year comparison, margin trend, seasonal projection, cash forecast.

From there you can read the rows the number came from, paginated, out of your own data. A figure that looks wrong is something you can check rather than something you have to take on faith.

It also watches for what you'd otherwise miss.

A nightly pass reads the same computed statistics and flags what changed: a cost that broke its normal range, a reconciliation gap, a trend that crossed a threshold. Findings get a severity tier, info up to critical.

Anything that would touch data or cross a dollar threshold waits for a person. Only an org owner can approve or reject it from an in-app drawer, and nothing sits there forever, unreviewed findings expire after 14 days instead of piling into an inbox nobody clears.

It arrives whether or not you log in.

Weekly, monthly, or off. The digest carries the same computed statistics as the dashboard plus what moved since the last one, so a number arrives meaning something relative to the last time you saw it instead of standing on its own.

A period with nothing computable is skipped rather than sent. An email that exists to say there was nothing to say is worse than no email, and it teaches people not to open the next one.

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.

The summaries themselves are graded, not just trusted. An offline eval harness runs three labeled fixtures (healthy growth, cash crunch, seasonal anomaly) through the real pipeline and scores faithfulness and completeness. Last measured run: 0.99 faithfulness, 1.00 completeness. It has caught a real slip, one sampled summary generated the literal banned phrase "you need to," which the legal-posture checker flagged.