pipeline_review, receivables_health and project_dashboard each stand in for a handful of queries plus the joining you would otherwise do afterwards — project_dashboard replaces around twelve separate calls on its own. The verdicts are rule-based and their thresholds are arguments, so calibrating what counts as stalled or overdue in your business is a parameter rather than a fork. Writes are deliberately hard to reach: read-only is the default, the model has to be on an allow-list, deletes need a further switch, and every write returns a preview until confirm=true — the risky path is one you walk into on purpose. If there is no Odoo to point at yet, the repository ships a seeded demo instance to run business_pulse against.
An analytics layer over an Odoo ERP, reached through Odoo's standard XML-RPC external API with nothing to install inside Odoo. Where a CRUD bridge hands back rows, these tools compose a whole management question into one structured report with a verdict attached. It works on Odoo Online, Odoo.sh and on-premise, and the report tools want Odoo 18+, while the generic query tools still run on older instances.
- business_pulse is the morning briefing in a single call: yesterday's confirmed revenue and new leads, overdue customer invoices, tasks past their deadline and who is off today, with each section skipping itself when the app is not installed
- pipeline_review composes open opportunities into totals, probability-weighted revenue, stalled deals, close-date buckets, per-stage and per-salesperson breakdowns and a recent win rate; sales_snapshot compares this period with the last for revenue and order deltas, top customers, top products and stale quotations
- receivables_health buckets open invoices and vendor bills as not_due, 1-30, 31-60, 61-90 and 90+, with the share of receivables overdue and the top overdue customers
- inventory_risk separates shortages — storable products with negative forecast — from dead stock valued at standard price; procurement_watch covers late receipts, stale RFQs and open spend per vendor; production_health finds manufacturing orders that should have started and ones running longer than expected
- Project delivery: project_status_report grades each project off_track, at_risk or on_track from its milestones, team_workload shows who is over- and under-loaded with overdue, due-soon and no-deadline tallies, and standup_digest returns a plain-text digest bucketed OVERDUE, TODAY, UPCOMING and NO DEADLINE
- project_profitability joins timesheet hours to analytic cost, revenue and budget burn; project_budget compares planned against actual line by line; project_dashboard returns everything a project detail page needs in one call, and portfolio_health one row per project joined server-side
- absence_overview composes approved leave, pending approvals and per-department headcount into coverage-risk flags for the days ahead
- The generic layer is there when a report does not fit: odoo_version, list_models, get_model_fields, search_read, search_count, read_records, aggregate_records for server-side grouping, and read_attachment
- Writes exist and are gated: create_record, update_records and delete_records, plus create_lead, create_contact, create_task and confirm_sale_order, each returning a dry-run preview unless confirm=true
- Every money-reporting tool takes an optional company filter and flags mixed-currency totals instead of silently summing them, and the verdict cut-offs — stalled, overdue and growth percentages — are parameters you can calibrate
Runs over stdio as uvx odoo-pulse and needs ODOO_URL, ODOO_DB, ODOO_USERNAME and ODOO_API_KEY; generate the key in Odoo under Settings → Users → Account Security → New API Key. ODOO_READ_ONLY defaults to true, and a write needs four independent things to line up: ODOO_READ_ONLY=false, the model listed in ODOO_WRITABLE_MODELS, ODOO_ALLOW_DELETE=true additionally for deletes, and confirm=true on the call. System models are never writable. Every report tool takes timezone_offset, default 7, because Odoo stores datetimes in UTC. Further model-aware query tools across CRM, Sales, Inventory, Accounting, HR, Project, Manufacturing and PoS are opt-in through ODOO_TOOL_GROUPS. MIT.
One command plus a key — uvx odoo-pulse, then supply credentials
