extrato.ai
Reads PDF or CSV bank statements, categorizes transactions with AI (Groq, Mistral or Claude) and shows a dashboard and forecast.
Knowing where the month’s money went usually takes an afternoon with the bank statement open and a spreadsheet next to it, sorting line by line. extrato.ai does that part: you upload the statement and get the transactions already categorized, with a dashboard, history and forecast.
What it does
- Imports PDF or CSV statements and categorizes each transaction with AI.
- Keeps separate profiles, each with its own dashboard: income, spending, balance, what went unspent and charts by category.
- Shows the 12 months of the year on a rail with each month’s balance, plus a history with a category ranking and spending goals.
- Forecasts 1, 3, 6 or 12 months ahead from fixed and recurring entries.
- Lets you edit categories and recategorize any transaction by hand.
Decisions that mattered
Three providers in a cascade. Categorization tries Groq first, then Mistral, then Claude. It only moves on after a rate-limit error: before giving up on a provider, the server waits and retries with a growing delay.
SQLite with nothing to compile. The database is sql.js, SQLite in pure JavaScript. That way the node:20-alpine Docker image needs no native build tools.
Importing again doesn’t duplicate. Each transaction gets a hash of account, date, description, amount and type. Uploading the same statement twice, or two overlapping ones, doesn’t create repeated entries.
Live progress. Upload processing is streamed with Server-Sent Events, so the screen shows progress instead of sitting still while the AI works.
Where it stands
It runs on my homelab. The AI provider keys can be set from the interface itself.