OPL-1 license · Community & Enterprise · Bring your own AI key · Multi-company
Dashboard Forge -- the Odoo Dashboard Builder
18 KPI tile and chart types (now with a bullet chart) on any model or spreadsheet, formula measures, 12 ready-made sector templates, instant-edit and click-to-drill-down, live push-refresh, drag-and-drop layout, targets and thresholds, 18 date-window presets, five export formats and bring-your-own-key AI -- all with your data staying on your own server
Dashboard Forge is a general purpose business intelligence dashboard builder for Odoo. Point it at any model -- or upload an Excel/CSV file -- pick a measure and an aggregation, optionally group by a field, and it turns that into a KPI tile or a chart series ready to render on a live, drag-and-drop canvas. No code, no external BI tool, no data leaving your server, and no subscription fee bolted onto the AI features.
Built Different: Your Data Never Leaves Your Server
Most "AI dashboard" add-ons route your records through a vendor's cloud and bill you per generation. Dashboard Forge does neither.
No middle-man cloud service
Charts, aggregations and exports run entirely inside your own Odoo server and database. There is no external dashboarding service to sign up for, no data warehouse to sync, and nothing to point at a third-party URL.
Bring your own AI key
Connect Anthropic, an OpenAI-compatible endpoint, or Google Gemini with your own API key. Every AI call goes straight from your server to your chosen provider -- the app vendor never sees a token of it, and you never pay a per-generation markup.
Offline geo maps
The choropleth map item renders from a topojson file vendored inside the module -- no external map tile service is ever contacted, so a country-by-country map works exactly the same on an internet-restricted server.
Data-minimized AI requests
Generating a dashboard with AI sends only a model's schema (field names and types) to your provider -- never record data. Explaining a chart sends only the already-aggregated totals, never raw rows.
One Dashboard, Every Kind of Number
A complete "Company Overview" dashboard built entirely on res.partner/res.users demo data: four KPI tiles (one with a target and traffic-light achievement bar), bar, pie, horizontal bar, doughnut, radar, line and area charts, a record list and a checklist, all on one drag-and-drop canvas. The gold star in the header is a bookmark toggle; the toolbar on the right offers AI, Excel, PDF and JSON export for the whole dashboard.
18 KPI & Chart Item Types
Every item comes from the same aggregation engine -- a KPI tile is just the single-value, no-group-by case; a scatter with two measure fields is the point-per-record case
Chart Gallery
Every chart below is the SAME live demo data (105+ contacts across 12 months and 8+ countries), rendered as a different item type from the same no-code configuration form
Bar Chart -- categorical comparisons, one bar per group.
Line Chart -- trends over a date group-by (day/week/month/quarter/year).
Area Chart -- the same trend, filled for visual weight/cumulative feel.
Pie Chart -- share-of-total across a group-by axis.
Doughnut Chart -- pie's ringed sibling, same share-of-total read.
Polar Area Chart -- each slice's radius also encodes magnitude, not just its angle.
Flower (Nightingale Rose) Chart -- polar area's more decorative alias, same data path.
Radar Chart -- compare several categories on one multi-axis web.
Funnel Chart -- descending stages with a real conversion % of the top stage on every bar.
Scatter Chart -- a real point per record when two numeric measure fields are set (X and Y), optionally colour-split by a group-by field.
Radial Gauge -- a half-doughnut gauge driven by the same target/threshold engine as a KPI tile.
Stacked Bar Chart -- multiple measure lines (Additional Series) plotted as one stacked bar per group.
Bullet Chart (new in v1.1) -- a horizontal bar per group with a dashed target-marker line running through every bar, so each group's progress against the same target reads at a glance.
Map (Choropleth) -- group by a Country field and get a shaded world map, darker where the aggregate is higher. Rendered entirely from a topojson file bundled inside the module: no Google Maps key, no external tile server, no data leaving your network.
KPI Tile with a Target -- set a target value and Dashboard Forge computes the achievement %, a traffic-light warning/critical colour band and a vs-previous-period trend arrow automatically. Record List and Checklist items (visible in the hero dashboard above) round out the 18 item types with a plain data table and a done/not-done view.
Drag, Resize, Save
Every tile and chart carries its own grid position and size (pos_x/pos_y/pos_w/ pos_h), so the canvas is a true drag-and-drop grid -- drag a tile to a new spot, grab the resize handle in its bottom-right corner to make it bigger or smaller, and the new layout is saved for next time you open the dashboard.
No-Code Configuration, Real Options
Everything below is a plain Odoo form -- no XML, no code, just fields
Data Source: Odoo Model -- pick any non-transient model, an aggregation (count/sum/average/max/min) and an optional Filter Domain.
Data Source: Excel/CSV File -- upload a spreadsheet and Dashboard Forge sniffs every column's type (text/integer/number/date/date & time/yes-no) automatically, ready to pick as a measure or group-by column.
Measures & Aggregation -- add more than one measure line to plot several datasets (a multi-series stacked bar, for example), each with its own field, aggregation and colour.
Group By Axis -- any many2one, selection, boolean, date or datetime field; a date/datetime axis adds a Date Granularity of day/week/month/ quarter/year.
18 Date-Window Presets (plus a "No Date Filter" option) -- today, yesterday, last 7/30/90/365 days, this/last week, this/last month, this/last quarter, this/last year, month/quarter/year to date, or a custom range.
KPI Target & Thresholds -- a target value, warning/critical percentage bands and a higher-is-better flag, plus the captured History table a scheduled action fills in over time.
Bring-Your-Own-Key AI, Not a Subscription
Connect your own Anthropic, OpenAI (or any OpenAI-compatible endpoint: Azure OpenAI, DeepSeek, Mistral, self-hosted Ollama) or Google Gemini API key under Dashboard Forge > Configuration > AI Providers, add as many model rows per provider as you like, mark one Default, and every dashboard's AI menu uses it.
- Your data stays with you -- only the target model's schema (field names and types) is sent when generating a dashboard, never record data. Explaining a chart sends only its already-aggregated labels/totals.
- No per-use AI fees to the app vendor -- you pay your AI provider directly at their own rates, or use a free-tier / self-hosted model (Ollama needs no API key at all).
- Validated before anything is created -- every AI-suggested model and field is checked against your database before a single dashboard item is created.
- The API key never comes back to the browser -- it is stored on the provider record (visible only to the Manager tier) and used only server-side to call the provider directly.
Generate a Dashboard from a Model -- pick any model and a connected provider; the AI proposes a handful of tiles/charts, every one validated against your real fields before creation.
Explain Any Chart -- a short, plain-text insight on what a chart's already-aggregated data shows, from the same BYOK connection.
Multiple Providers, Side by Side -- keep an Anthropic and an OpenAI-compatible provider (or more) configured at once and pick per-dashboard.
User-Managed Models -- add, remove or rename the model id rows for a provider yourself; there is no hardcoded dropdown to wait on an update for.
Export Everything, Import Anywhere
Five export formats per item or per dashboard, plus a portable JSON round-trip between two Dashboard Forge instances
Per-Item Export -- Excel, CSV, a one-click PNG snapshot of the rendered chart, or an AI explanation, from the three-dot menu on any tile.
Whole-Dashboard Export -- one Excel workbook (one sheet per item), a real visual PDF (charts embedded as images, not just tables), or a portable JSON export from the dashboard header.
Cross-Instance Import -- upload a dashboard export produced by "Export JSON" on another Dashboard Forge instance. Every model/field reference is re-validated against your own database on import; the file is rejected if it points at something that does not exist here.
Personalization, Themes & Security
%UID / %MYCOMPANY tokens
Put '%UID' or
'%MYCOMPANY' in a Filter Domain (e.g.
[('user_id','=','%UID')]) and one shared item becomes a
per-user or per-company view -- no duplicated dashboards.
Four themes
Default, Dark, Ocean and Sunset -- set per dashboard from the Presentation group on its form, right next to Auto-refresh.
Bookmarks
Star a dashboard from its list, form or the canvas header, and find it again instantly from "My Bookmarks".
Auto-refresh
Set an interval in seconds and the open canvas polls fresh data and re-renders on its own -- perfect for a wall-mounted "live" dashboard. 0 (the default) disables it.
Three permission tiers
Viewer (see shared dashboards), Editor (build items and dashboards) and Manager (also configure AI providers and see API keys) -- plus per-dashboard sharing by group or ownership.
Multi-company
Every dashboard and AI provider carries a Company field, so a multi-company database keeps its dashboards and AI connections properly scoped.
The dashboard form's Presentation group: Theme, Sequence, Active and Auto-refresh (seconds), right above the ownership/sharing group and the full Items list -- every item's type, source model, aggregation, group-by and date filter at a glance.
Six New Ways to Build and Read a Dashboard
A bullet chart with a target marker, formula measures, 12 ready-made sector templates, instant-edit, per-item discussion and click-to-drill-down, plus a live push-refresh that updates every open viewer -- all additive, nothing already shipped changes.
12 Sector Dashboard Templates -- "New from Template"
A running start for a whole industry, not a blank canvas: Retail, Manufacturing, Healthcare, Finance & Accounting, Education, Real Estate, Logistics, Hospitality, IT/SaaS, NGO/Non-profit, Media & Entertainment and Legal
Dashboard Forge > New from Template opens a kanban gallery of 12 sector starter dashboards, each with roughly half a dozen tiles/charts already configured. "Use this Template" clones it into your own, fully editable dashboard -- nothing here is read-only catalog data once instantiated.
A template ships for every install regardless of which apps this particular database has: an item whose source model isn't installed here (e.g. a Logistics template's stock-move tile on a database without Inventory) is simply skipped, not a hard failure -- the new dashboard is still created with every item that does resolve, and a note listing what was skipped is posted on its own chatter so nothing silently vanishes unexplained.
Formula Measures
A safe, whitelisted arithmetic expression over an item's own other measure lines -- a real ratio/ margin series, not just raw aggregates
Add two ordinary measure lines under "Additional Series / Formula Measures"
(e.g. Bounces = sum of a field, Contacts = record
count), tick "Formula-based" on a third line and type an expression that
refers to the other lines by their Series Label, e.g.
Bounces / Contacts. Division by zero evaluates to 0 -- it never
breaks the chart.
A formula is never handed to a raw Python eval() on untrusted
text: it is parsed into a syntax tree first, then walked by a strict
whitelist that only allows numeric literals, the other measures' names,
+ - * / and parentheses -- anything else (a function call, an
attribute, an import) is rejected before evaluation ever runs. A formula
cannot reference another formula (no chained formulas), and every reference
is validated against this item's own real measure labels when you save.
Instant-Edit, Right on the Dashboard
Retune a chart's type, measure, group-by, date filter, sort/limit, unit or target without ever leaving the canvas for a backend form
The three-dot menu on any tile now has a "Quick Edit" entry (Editor/Manager only): a dialog pre-filled with that item's current settings. Hit Apply and only that one tile re-fetches and re-renders in place -- the rest of the dashboard, and the drill/breadcrumb state of every other tile, is untouched.
Discuss Any Chart, Not Just the Dashboard
A real Odoo chatter -- messages, log notes and activities -- attached to one individual tile
"Discuss" on any tile's three-dot menu slides Odoo's own chatter component in over that one chart: leave a comment on why a number looks the way it does, log an internal note, or schedule a follow-up activity -- all scoped to that single item, with its own message thread and followers, not the whole dashboard.
Click-to-Drill-Down
Click a bar, slice or point to filter deeper -- a date series steps down year → quarter → month → week → day, a categorical series filters to that one group
Clicking the "Jul 2026" point on a month-granularity line re-fetches the same chart filtered to that month and re-grouped by week -- the breadcrumb (a home icon, then every step drilled so far) and an "Up" link appear right on the tile so you can climb back out one level, or jump straight back to the top. Nothing is written back to the item's own configuration: the drill path lives only in that open dashboard session.
Live Push-Refresh
One person's Refresh updates every OTHER open viewer of that same dashboard too
The toolbar's "Refresh" button still recomputes and re-renders the tab you clicked it in -- but it now also broadcasts a lightweight, data-free ping over Odoo's own real-time bus to every other browser tab that has this same dashboard open, which quietly re-fetches on its own. A scheduled action does the same for every dashboard with Auto-refresh (seconds) set, so a slow or backgrounded wall-mounted tab still gets nudged close to on time. No raw data ever travels over the bus -- only "refresh now", the same get_dashboard_data() call every tab already knows how to make for itself.
KPI Watchdog: Your Dashboard Emails You When a Number Goes Wrong
New in v3 -- turn a passive tile into an active monitor
Set a threshold and a comparison -- >, <, ≥, ≤, ==, != -- on any KPI tile or radial gauge. When the captured value crosses that bound, Dashboard Forge alerts you the way you choose:
- A scheduled Odoo Activity assigned to the people you pick, so the breach lands in their To-Do list.
- A Discuss message posted right on that one tile's own chatter (not the whole dashboard) -- the conversation stays with the number.
- An email to chosen recipients through Odoo's own mail layer.
A built-in spam guard fires the alarm only when the value first crosses into breach -- never on every check while it stays over the line -- and re-arms automatically once the value recovers. Every firing is recorded in a per-item alert log you can review any time. A scheduled action evaluates every enabled tile on its own cadence, so an alert reaches you whether or not anyone has the dashboard open.
Set it up on any tile or gauge -- enable the alert, pick the comparison and threshold, choose the channel (Activity, Discuss message or email) and the recipients. The Status panel shows the live state (here Breached, last fired timestamp) and the per-item alert log is right there on the same form.
A clean audit trail -- every distinct breach across all dashboards lands in one list, showing the captured value, the operator, the threshold it crossed and the channel it fired on. The spam guard keeps it to one row per breach, not per check.
Group and slice the history -- group the alert log by item, dashboard or channel to see which KPIs breach most often, straight from the standard Odoo search.
How It Works
Pick a source
Any Odoo model -- CRM, Sales, Helpdesk, custom modules -- or upload an Excel/CSV file.
Choose a chart type
KPI tile, radial gauge, 13 chart types (bullet included), a map, a list or a checklist -- with an optional group-by axis, date filter and target.
Drag it onto the canvas
Place and resize it on the live grid, right next to your other KPIs and charts. The layout saves itself.
Share, export or ask AI
Share it with a group, export it in five formats, bookmark it, or let your own AI provider suggest the next dashboard.
Why Teams Choose Dashboard Forge
- Two data sources, one engine -- the same group-by/aggregate/date-filter machinery works identically on a live Odoo model or an uploaded Excel/CSV file, so a quick spreadsheet-driven KPI sits right next to a live sales chart.
- Not a single-chart-type toy -- 18 item types cover comparisons (bar/hbar/stacked bar), trends (line/area), share-of-total (pie/doughnut/polar/flower), multi-axis comparisons (radar), staged processes (funnel with real conversion %), progress-vs-target-per-group (bullet chart), correlation (real x/y scatter), geography (offline choropleth map), progress-to-target (tile/radial gauge), raw data (list) and task tracking (checklist).
- Real targets, not just numbers -- a target value, two threshold percentages and a higher-is-better flag drive an achievement %, a traffic-light status and a trend arrow automatically, with a scheduled action that snapshots the value over time for real history.
- Formula measures -- a safe, whitelisted arithmetic expression over an item's own other measures (e.g. a bounce rate or a margin %), never a raw eval() on untrusted text.
- Click-to-drill and instant-edit -- filter a date series down to the day or a categorical series down to one group with a click, and retune any chart's type/measure/group-by from a Quick Edit dialog right on the canvas, no backend form required.
- Genuinely portable -- every model/field reference in an exported dashboard is a technical name, never a database id, so "Export JSON" on one instance and "Import Dashboard" on another actually works.
- AI that respects your wallet and your data -- bring your own key to any of five provider families, pay your provider directly, and never send more than a schema or an aggregate to get a suggestion or an explanation.
Frequently Asked Questions
Does Dashboard Forge work on Odoo Community?
Yes. It only depends on base, web and mail, so it installs cleanly on Community and Enterprise alike.
Which models can I build a dashboard on?
Any non-transient model you have access to -- CRM opportunities, sales orders, helpdesk tickets, project tasks, or your own custom models. There is no hardcoded list.
Can I build a chart from an Excel or CSV file instead of a model?
Yes. Set Data Source to "Excel/CSV File", upload the file and Dashboard Forge parses the first sheet/row as headers, sniffs every column's type, and lets you group by, measure and date-filter it exactly like a model-backed item.
Is my data sent to an AI provider?
Only the schema (field names and types) of the model you pick is sent when generating a dashboard with AI -- never actual record data. Explaining a chart sends the already-aggregated chart data (labels and totals), never raw records.
Which AI providers are supported?
Anthropic, any OpenAI-compatible endpoint (OpenAI, Azure OpenAI, DeepSeek, Mistral, Ollama and more) and Google Gemini -- all bring-your-own-key, configured under Dashboard Forge > Configuration > AI Providers.
Do I need to pay for AI usage separately?
You pay your chosen AI provider directly, at their own rates (or use a free tier / self-hosted Ollama model with no key at all). Dashboard Forge never charges a per-generation fee and never proxies the call through its own servers.
Does the map item need an internet connection or a Google Maps key?
No. The world map is a topojson file vendored inside the module and rendered entirely client-side; no external tile server or mapping API key is ever contacted.
What field does the map item need to group by?
A many2one field to res.country (e.g. a partner's Country field). Dashboard Forge matches each group's ISO country code to the vendored world map.
Can a KPI tile show a trend arrow, not just a number?
Yes, when a relative date filter (last 7/30/90/365 days) is set, Dashboard Forge also computes the same-length previous period and shows the percentage change with an up/down/flat arrow.
How many measures can one chart plot?
As many as you add under "Additional Series" -- each with its own field, aggregation, label and colour -- useful for a multi-line trend or a multi-series stacked bar.
Can two users see different data on the same shared dashboard?
Yes, with the '%UID' or '%MYCOMPANY' tokens in an item's Filter Domain -- one shared item resolves to "my records" or "my company's records" per viewer, without duplicating it.
Can I export a dashboard?
Yes -- Excel (one sheet per item, or per-item), CSV, a PNG snapshot of any chart, a real visual PDF of the whole dashboard, and a portable JSON export for moving a dashboard to another instance.
Can I move a dashboard from a staging instance to production?
Yes -- "Export JSON" on the source instance, then "Import Dashboard" on the target. Every model/field reference is stored by technical name and re-validated on import; the import is rejected (with a clear message) if it references something that does not exist on the target database.
Does it support multi-company?
Yes, with full multi-company support plus three permission tiers (Viewer, Editor, Manager) and per-dashboard sharing by group or ownership.
Can a dashboard auto-refresh on its own, for a TV or wall display?
Yes -- set Auto-refresh (seconds) on the dashboard's Presentation group; while the canvas is open it polls fresh data and re-renders every N seconds. 0 disables it.
If I click Refresh, does everyone else viewing the dashboard see the update too?
Yes -- clicking Refresh (or an item's own auto-refresh interval ticking over) also broadcasts a lightweight, data-free ping over Odoo's real-time bus to every other open viewer of that same dashboard, which quietly re-fetches on its own. No raw data is ever sent over the bus, only "refresh now".
What is a Formula measure, and is it safe?
A Formula measure line
computes a ratio/percentage/difference from an item's own other measures, e.g.
Bounces / Contacts. It is never run through a raw Python eval() on
untrusted text: the expression is parsed and walked by a strict whitelist
(numeric literals, the other measures' names, +, -, *, / and parentheses only)
before it is ever evaluated, and it can only reference this same item's own
sibling measures -- never another item, another dashboard, or a function call.
What happens if I use a sector template but don't have the app it references installed?
That one item is skipped, not the whole template -- "Use this Template" still creates the dashboard with every item whose model and fields ARE installed here, and posts a note on the new dashboard's chatter listing what was skipped.
Can I edit a chart's configuration without opening its backend form?
Yes -- "Quick Edit" on any tile's three-dot menu (Editor/Manager only) opens a dialog for its chart type, measure, group-by, date filter, sort/limit, unit/prefix and target; Apply re-fetches and re-renders just that one tile in place.
Can I drill into a chart to see more detail, then get back out?
Yes -- click a bar, slice or point on a drillable chart to filter into it; a date-grouped chart also steps down one granularity level (year → quarter → month → week → day). A breadcrumb and an "Up" link appear on the tile to climb back out, or jump straight to the home icon to reset. The drill path lives only in that open browser session -- it never changes the item's own saved configuration.
Can I comment on one specific chart, not just the whole dashboard?
Yes -- "Discuss" on any tile's three-dot menu opens Odoo's own chatter (send a message, log a note, schedule an activity) bound to that one item's own message thread.
Specifications
- Compatible: Odoo 19.0
- License: OPL-1
- Author: Pokutsoft
- Dependencies: base, web, mail
- Item types: 18 (tile, radial gauge, line, bar, horizontal bar, stacked bar, area, pie, doughnut, polar area, flower, radar, funnel, bullet, scatter, map, list, checklist)
- Sector dashboard templates: 12 ("New from Template")
- Formula measures: safe, whitelisted arithmetic over an item's own other measures (+, -, *, /)
- Instant-edit: retune any chart's config from the canvas (no backend form)
- Click-to-drill-down/up: categorical and date (year/quarter/month/week/day)
- Live push-refresh: real-time bus, every open viewer of a dashboard
- Per-item discussion: a real Odoo chatter thread on each individual tile
- Data sources: Odoo model, or Excel/CSV file upload
- Date-window presets: 19
- Export formats: Excel, CSV, PNG, PDF, JSON
- AI provider families: Anthropic, OpenAI-compatible (OpenAI, Azure OpenAI, DeepSeek, Mistral, Ollama, ...), Google Gemini -- all bring-your-own-key
- Support: support@pokutsoft.com
- Live demo: demo.pokutsoft.com
Update date: 2026-07-10
| Availability |
Odoo Online
Odoo.sh
On Premise
|
| Odoo Apps Dependencies |
Discuss (mail)
|
| Lines of code | 11764 |
| Technical Name |
dashboard_forge |
| License | OPL-1 |
| Website | https://pokutsoft.com/ |
Odoo Proprietary License v1.0 This software and associated files (the "Software") may only be used (executed, modified, executed after modifications) if you have purchased a valid license from the authors, typically via Odoo Apps, or if you have received a written agreement from the authors of the Software (see the COPYRIGHT file). You may develop Odoo modules that use the Software as a library (typically by depending on it, importing it and using its resources), but without copying any source code or material from the Software. You may distribute those modules under the license of your choice, provided that this license is compatible with the terms of the Odoo Proprietary License (For example: LGPL, MIT, or proprietary licenses similar to this one). It is forbidden to publish, distribute, sublicense, or sell copies of the Software or modified copies of the Software. The above copyright notice and this permission notice must be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
Please log in to comment on this module