Reports & analytics
Once your Odoo is connected and synced, the dashboard is organized into a few sections you can reach from the top navigation: the Overview first for an owner or admin, then the order a rep works — Customers, Sales, Quotes — and the reports underneath them.
Customers
Where a member or viewer lands. Search any account and open its profile to see its history, what businesses like it buy that it does not, what it has quietly stopped reordering, and its notes from Odoo. Exportable like every other report.
Notes get their own panel below the numbers, with a version history. Odoo’s notes field loses lines — reps noticed before anyone else did — so Readout keeps its own copy of every version and shows each one as a line diff against the one before it. A line that vanishes over there is still readable here, and can be put back.
Sales
Two tabs. Sales calendar is a rep’s planned week of calls and visits — book an account and it feeds the call sheet that arrives by email at six each morning, carrying what that customer buys, what they have stopped buying, and what is on promotion for them. Marketing is where marketing sets one up; every rep can then pull the list of exactly which of their own customers to ring about it.
Quotes
One screen. Name the customer — an existing account, or just a name if they are still a prospect — then type or paste model numbers, and you have a customer-ready quote sheet priced from your own Odoo pricelists, as .xlsx or PDF. When they say yes, push it back to Odoo as a draft quotation; nothing is committed until you do.
The price book follows the customer. Pick an account and Readout looks up which of your divisions last sold to them, then prefills that division’s default pricelist — so a rep quoting for one division’s account is on that division’s book without choosing it. Set which book is the default for each division under Settings → Quote price books. A workspace with only one book has nothing to pick.
Some customers cannot be placed with a division — nobody has invoiced them yet, or the division that did has no book configured. Those fall back to the book you marked as the default for customers of no division, and the screen says which book it landed on. Mark one: without it the fallback reaches for another division’s default, or for whichever book happens to be listed first, and which one you get is not something you can predict from the screen you are on.
One quote is one pricelist, because that is how Odoo writes the order. Change the book and every line already entered is repriced against it; a product with no rule in the new book falls back to catalogue list price and is marked with a *. A model number Odoo cannot price at all holds the download until you fix or remove that line, rather than letting a sheet reach a customer with a blank where a price should be.
What arrives by email
Four things send on a schedule, and none of them is a job you manage. The times below are Pacific time (PST or PDT, whichever is in effect). Each waits for a running sync to finish first, so one can arrive a little after its hour.
- The call sheet, 06:00 daily — the day a rep planned on the calendar: who they are seeing, what those accounts buy, what they have stopped buying, and what is on promotion for them. If nothing is booked, it says so and names accounts worth a call instead.
- The wellness check-in, 07:00 daily — the work nobody planned. Five of that rep’s own accounts that have not ordered in three months, picked at random rather than ranked, so the long tail comes up instead of the same five big names every morning. An account that has been sent is held back for a month. A rep who does not want it turns it off for themselves under Settings → Members.
- The sales summary, 17:00 daily — what sold and what was invoiced today, per division, to owners and admins. A division earns a row by having sold something, so nothing has to be maintained as a list.
- The POS summary, 08:00 on the 1st — last month at the point of sale, to owners and admins. Revenue, tax, cost of goods and margin per division. Cost of goods is Odoo’s cost on each sale; where some sales have no cost in Odoo, the email says what share of sales that was, since those sales push the margin up.
The two rep-facing emails go only to a member linked to their Odoo salesperson — that link is what decides whose accounts are whose. A member with no link is silently not a recipient rather than a recipient of everybody’s customers, so if a rep is getting no mail, that is the first thing to check under Settings → Members. Nothing sends a page of zeroes: a day with nothing to report is a day with no email.
Who they come from. By default, Readout’s own address. If your company uses Microsoft 365 you can have them come from one of your own mailboxes instead — reports@ on your domain, say — under Settings → Mailboxes → Reports sent from; a copy of each lands in that mailbox’s Sent Items. See Connect your mailboxes for the permission Microsoft needs. If Microsoft refuses a send, that report does not go out and the card says why; it does not quietly come from Readout instead.
Saved reports
Under Reports, view your revenue grouped by a dimension — brand, trade, region, or channel — ranked, with returns and unit counts. When a classification map is incomplete, a coverage warning tells you how much revenue is still unclassified.
Ask Readout, the assistant
Requires the AI add-on. Open Ask Readout in the bottom corner of any page and ask the way you would ask a colleague: “top 10 items sold last month”, “what did Ganahl Lumber buy this year”, “sales of HJ19-050E”, “where do I set up a promotion” or “how do I connect Odoo”. Answers link straight to the page they mention, and a sales answer shows the report it ran — what it read your question as, and the ranked table — under the reply.
Every answer has a 👍 and a 👎. Answers your workspace marks helpful become worked examples the assistant follows for similar questions later, so it gets better the more your team uses it; answers marked unhelpful are listed for an owner or admin on the Activity page. Examples come only from members and above in your own workspace, and a rep limited to their own customers is only shown their own. Questions, answers and the report settings each answer used are kept in your workspace for this.
Your conversation, the rows of any report it runs for you (up to 50, which can name customers and items with their sales), and a few questions your teammates marked helpful go to Anthropic’s Claude to write the answer. It never queries your data directly: it asks for a report through a fixed set of options, and every figure is computed the same way the Reports tab computes it.
Overview
Your at-a-glance sales picture over a rolling window (adjustable up to 24 months): invoiced revenue and returns, month-to-date and year-to-date with a year-over-year comparison, a monthly revenue trend, and top customers, products and divisions. A “Data as of…” line shows how fresh the numbers are, and Refresh enqueues an on-demand sync when you can’t wait for the next scheduled one.
Owners and admins only. It is the read of the whole business rather than of a rep’s day, so it is the first entry in the nav and where /dashboard lands for an owner or admin. Members and viewers do not see it, and land on Customers instead.
Product mapping
Mapping is setup rather than a report, so it lives in the workspace menu in the top right rather than beside the reports. Map products and customers into brands, trades and regions; set an override once and every report reflects it immediately — mapping is applied when a report is read, so there is no re-sync to wait for. This is what powers the grouped saved reports above.
Exports
Every report has an Excel (.xlsx) export so you can drop the numbers into a spreadsheet, a board deck, or a downstream system.
How syncing works
Readout reads your Odoo once a day, at 03:00 UTC; you don’t manage jobs. Reports read from the warehouse it fills, so they’re fast and consistent for everyone on your team. Sync now — on the Overview, and on Settings → Odoo connection — asks for that same job sooner. If one is already running it’s a no-op.
A sync only reads what has changed since the last one, which is what makes it cheap enough to run nightly. Two figures on the connection panel report on it, and they answer different questions:
- Last synced — when the job last ran.
- Data as of — the newest invoice line Readout has. On a quiet week this sits further back than the last sync, and that is not a fault: the job ran and found nothing newer to read.
Re-reading everything
Because a normal sync asks “what changed since last time?”, it cannot see a change that the source does not report as one. Two cases do that: you point the workspace at a different Odoo database, or history is corrected upstream in a way Odoo does not mark as modified. No number of syncs will fix either.
Re-read everything, under the ⋯ menu on Settings → Odoo connection, discards the record of what has been loaded and reads your whole history again. It is owner/admin only and it asks you to confirm, because it runs for hours on a large database — and while it runs your warehouse holds a mix of old and new, so reports keep working but should not be trusted until it finishes.
Questions? See the FAQ →