Troubleshooting

What the connection and sync errors mean, and why a figure might not match what you see in Odoo. If none of this covers it, support@salesreadout.com — include the workspace name and we’ll look at it with you.

Connection problems

“We couldn’t reach your Odoo”

Nothing answered at the address. The credentials were never tested, so they are not the problem. Check that the Odoo URL is the full address including https:// and no trailing path — https://acme.odoo.com, not acme.odoo.com/web.

If the address is right, the usual cause is that the instance is not reachable from outside your network. Readout connects over the public internet from our servers; an Odoo behind a VPN or an IP allowlist has to permit that.

“Odoo rejected our credentials”

The server answered and refused the login. One of database, username or API key is wrong, and Odoo does not say which.

The most common cause by some distance is an API key that has been revoked or regenerated — keys do not expire on their own, but they disappear when the user is deactivated or someone rotates them. The second is the database name: on an Odoo Online instance it is usually the subdomain, and it is not always what the login screen shows. Re-enter the key rather than guessing; Readout only stores it once and cannot show it back to you.

“Our Odoo user can’t read everything the reports need”

The login worked, so every value on the form is correct — the fix is in Odoo. The reporting user needs read access to Accounting (Invoicing), which is where every figure comes from, and to Sales so the sync can pull orders as well.

Readout dispatches only read methods and refuses anything else before it reaches the network, so read access is genuinely all it needs. See Security.

Sync problems

The first sync has been running for hours

That is normal on a large Odoo. The first sync pulls your entire invoice history, which on a book of a few million lines takes hours rather than minutes. You can close the tab — it keeps going, and it resumes from where it stopped if it is interrupted.

The dashboard says the last sync failed

Your reports are still readable and still accurate as of the last successful sync — they have stopped updating, not become wrong. The banner names the cause and links to the connection; the sections above cover each one. Readout keeps retrying on the normal schedule.

Nothing has failed, but the data looks old

Readout syncs once a day at 03:00 UTC rather than live, so a figure entered in Odoo this morning appears after the next run. Sync now queues one immediately.

Before assuming a sync is stuck, compare the two figures on Settings → Odoo connection. Last synced is when the job last ran; Data as of is the newest record it found. If the job ran an hour ago and the data is a week old, the sync is working and nothing in Odoo has been written since — which is an answer, not a fault.

The numbers are from a different Odoo database

If you have repointed this workspace at another database, syncing will not clear the old figures: a sync only reads what changed since last time, and a swapped source reports no change. Use Re-read everything from the ⋯ menu on Settings → Odoo connection. It discards what has been loaded and reads the new source in full, which takes hours on a large database — and while it runs your reports hold a mix of both, so treat them as unsettled until it finishes.

Numbers that look wrong

Almost every “this doesn’t match Odoo” turns out to be one of these five. They are deliberate choices, not bugs, and they are worth knowing before you reconcile.

Readout counts invoices, not orders

Every figure is invoiced revenue — posted customer invoices and credit notes. A sales order that has not been invoiced yet is not in any report. If your Odoo totals are consistently higher, this is usually why.

Returns are shown separately, never netted

Credit notes have their own column and are not subtracted from revenue. An account that buys a lot and sends much of it back is a materially different account from one that buys the same net amount cleanly, and netting hides exactly that. To compare against a net figure in Odoo, subtract the returns column yourself.

The window is clamped to your data floor

If your workspace has a data floor set (Settings → Reporting), reports will not read before it — that is usually the month your Odoo went live, and everything earlier is migration artefacts: backfilled opening balances, test invoices, partial history. A 24-month window on a workspace with a 14-month floor returns 14 months, and the page says so.

You are looking at one selling company

On a multi-company Odoo, the Overview’s company selector scopes every figure on the page. “All companies” is the default, but a link someone shared may not be.

A ranked report is showing the top rows only

Long tables are capped, and the table says how many rows it is showing out of how many exist. The Total row is always the whole set, not the visible rows — so the shares will not add up to the total you see, and that is correct.

Reports that look empty

Everything is filed under “Unclassified”

Trades, brands and channels come from your Product mapping, not from Odoo — no ERP has them. Until a category is mapped, its revenue lands in Unclassified. The mapping screen shows coverage and lets you sort by unclassified revenue, so the biggest gaps are the first thing you see. See Reports & analytics.

A customer has no peer group, so no “should buy” list

The gap analysis needs comparable dealers to compare against: at least three other customers whose main trade is the same and for whom that trade is a real part of a real book. A workspace with few customers in a trade, or with most revenue still unclassified, will not produce a peer group — and Readout says that rather than inventing one.

The lapsed list is empty

An item counts as lapsed when the customer has not bought it for six months or more, measured against the newest month in your data rather than against their own last order. A workspace with under a year of history will show few or none.

Access and billing

“Only a workspace owner can do this”

Roles decide what you can change: owners manage billing and the connection, admins manage data and mappings, viewers read reports. The message names who to ask.

I paid and the workspace is still locked

Confirmation from Stripe usually lands a second or two after checkout, and the page updates itself when it does. If it is still locked after a minute, reload once — and if it persists, mail us, because at that point something is genuinely wrong and we would like to know.

Still stuck

support@salesreadout.com. Tell us the workspace name and roughly when it happened; if the dashboard showed a Technical detail panel, paste what was in it — that is the part that tells us where to look.