Have you ever been:
- Tired of waiting for a developer every time you need a new report?
- Need client-ready PDFs that actually look like your brand?
- Want to replace wkhtmltopdf headaches with reliable Python output?
- Banded Repoet Writer is the answer
Every Odoo team eventually runs into the same problem: the standard reports are close, but not quite right—and tailoring them usually means hiring a developer, learning QWeb, or settling for “good enough”. Wilson Works built Banded Report Writer to remove that trade‑off.
Built by Odoo functional consultants who’ve lived the pain first‑hand, Banded Report Writer brings true banded reporting (think Crystal Reports) into Odoo. Reports are defined in clean, validated JSON, rendered in pure Python, and delivered as professional PDFs—with no QWeb, no wkhtmltopdf, and no custom code. Functional consultants, business analysts, and end users can design, deploy, and iterate entirely from the Odoo UI.
Banded Report Writer is available in three editions for both the community and enterprise Odoo editions: a fully featured Free core engine, a Community Library for sharing and discovering reports across the Odoo community, and Pro, which adds images, watermarks, runtime parameters, SQL data sources, snippet libraries, and scheduled email delivery. The Free and Community Library editions are available for direct download below. Pro is published on the Odoo Apps Store.
A brief introduction
This is a quick video presenting some of main features of the Banded report Writer for Odoo
Background
The Banded Report Writer was created for Odoo business analysts, implementers, and users — anyone who has ever needed a custom report but found themselves at the mercy of a developer. As experienced Odoo functional experts ourselves, we know the frustration firsthand: standard Odoo reporting relies on QWeb, a developer-centric templating system that — even with Odoo’s move away from wkhtmltopdf toward newer rendering engines — still sits on the same complex underlying architecture, keeping report writing firmly out of reach for most functional users. Other attempts have been made, e.g. Pentaho Reporter which was Java-based, but none have been native to Odoo. That’s why we built this module. Banded Report Writer is a pure-Python Odoo report writer designed to put the power of beautiful, professional reports back in the hands of the people who understand the business — not just the developers. This app is for you: whether you’re creating your first report or building complex grouped summaries with dynamic images and scheduled delivery, everything you need is here. We hope you’ll not only use it to solve your own reporting challenges, but also share your reports in our growing community library so that everyone benefits.
Who Is This For?
|
👔
Functional ConsultantsNo developer required. Design, deploy, and iterate on reports entirely from the Odoo UI. |
📊
Business AnalystsRapidly prototype and deliver client-ready PDFs with grouping, totals, and formatting. |
🖨
End UsersPrint directly from any Odoo record or list view. One-click professional PDF output. |
🤝
Odoo PartnersDeliver polished client reports faster. Share reusable definitions across projects. |
Key Features
🚀 No Code Required
Design professional PDF reports using simple JSON definitions. No QWeb, no Python, no developers needed.
Report Design
🧙 Automated Report BuilderGet up and running in minutes with the guided wizard. Select your data model, choose fields, and generate a complete report automatically. |
📐 Banded Report LayoutsMulti-section reports with headers, detail bands, group headers/footers, and footers. Professional banding like Crystal Reports. |
📝 JSON EditorFull JSON editor with validation and helpful error messages. Define every aspect of your report in clean, readable JSON. |
📏 Column PositioningUse constants for setting important column positions — changes only need to be updated in one place. |
🎨 Colour PaletteDefine and reuse your company’s colour theme with the “palette” directive. |
🛠 Report Builder WizardGet started fast using the report builder wizard that produces ready-to-go reports that can be modified. |
❓ Built-in HelpComprehensive contextual help and documentation built directly into Odoo. Learn as you build. |
Data & Grouping
🔀 Multi-Level GroupingGroup data by multiple fields with automatic subtotals and aggregates. Nested groups with hierarchical summaries. |
➕ Aggregate FunctionsSUM, COUNT, AVG, MIN, MAX for automatic calculations. Grand totals in the report footer. |
💱 Field FormattingCurrency, number, and date formatting with conditional styling and precision control. |
📽 Automatic SortingSort by group fields automatically. Define sort order in your JSON report definition. |
Output & Performance
📄 Professional PDF OutputGenerate clean, professional PDFs using ReportLab. No WKHTMLTOPDF or external dependencies. |
⚡ Performance TestedHandles 10,000+ records and 800+ pages in under 1 second. Fully tested with 500+ quality tests. |
📑 PaginationAutomatic page breaks with proper handling of group headers and footers across pages, including continuation messages. |
🖨 Print from Forms or SelectionsAutomatically link reports to server actions that can be linked to forms or record selections. |
📚 Tutorial Reports11 tutorial reports included to demonstrate all features. Ready to run and learn from. |
Connected & Intelligent
🌍 Shared Community LibraryUsers can share their standout reports with the community. The library is pre-populated with useful reports and is available in both free and pro versions. |
🤖 AI Friendly Report GeneratorProfessional and full-featured AI prompt for report generation. |
💬 AI Friendly Support AgentProfessional and full-featured AI prompt for instant support. |
🙋 Human SupportHuman support always available. |
Who Is This For?
|
👔
Functional ConsultantsNo developer required. Design, deploy, and iterate on reports entirely from the Odoo UI. |
📊
Business AnalystsRapidly prototype and deliver client-ready PDFs with grouping, totals, and formatting. |
🖨
End UsersPrint directly from any Odoo record or list view. One-click professional PDF output. |
🤝
Odoo PartnersDeliver polished client reports faster. Share reusable definitions across projects. |
Key Features
🚀 No Code Required
Design professional PDF reports using simple JSON definitions. No QWeb, no Python, no developers needed.
Report Design
🧙 Automated Report BuilderGet up and running in minutes with the guided wizard. Select your data model, choose fields, and generate a complete report automatically. |
📐 Banded Report LayoutsMulti-section reports with headers, detail bands, group headers/footers, and footers. Professional banding like Crystal Reports. |
📝 JSON EditorFull JSON editor with validation and helpful error messages. Define every aspect of your report in clean, readable JSON. |
📏 Column PositioningUse constants for setting important column positions — changes only need to be updated in one place. |
🎨 Colour PaletteDefine and reuse your company’s colour theme with the “palette” directive. |
🛠 Report Builder WizardGet started fast using the report builder wizard that produces ready-to-go reports that can be modified. |
❓ Built-in HelpComprehensive contextual help and documentation built directly into Odoo. Learn as you build. |
Data & Grouping
🔀 Multi-Level GroupingGroup data by multiple fields with automatic subtotals and aggregates. Nested groups with hierarchical summaries. |
➕ Aggregate FunctionsSUM, COUNT, AVG, MIN, MAX for automatic calculations. Grand totals in the report footer. |
💱 Field FormattingCurrency, number, and date formatting with conditional styling and precision control. |
📽 Automatic SortingSort by group fields automatically. Define sort order in your JSON report definition. |
Output & Performance
📄 Professional PDF OutputGenerate clean, professional PDFs using ReportLab. No WKHTMLTOPDF or external dependencies. |
⚡ Performance TestedHandles 10,000+ records and 800+ pages in under 1 second. Fully tested with 500+ quality tests. |
📑 PaginationAutomatic page breaks with proper handling of group headers and footers across pages, including continuation messages. |
🖨 Print from Forms or SelectionsAutomatically link reports to server actions that can be linked to forms or record selections. |
📚 Tutorial Reports11 tutorial reports included to demonstrate all features. Ready to run and learn from. |
Connected & Intelligent
🌍 Shared Community LibraryUsers can share their standout reports with the community. The library is pre-populated with useful reports and is available in both free and pro versions. |
🤖 AI Friendly Report GeneratorProfessional and full-featured AI prompt for report generation. |
💬 AI Friendly Support AgentProfessional and full-featured AI prompt for instant support. |
🙋 Human SupportHuman support always available. |
Free Version

Screenshots
Banded Report Writer can make difficult features easy to implement - note below overdue invoices are highlighted

An automated report builder makes sit exceptionally easy to create impressive reports that can be re-created, edited, used for leariing, or form the basis for a custom report. 
Report Builder - JSON report definition generated

Report Builder - The resultant professional PDF report
Tutorial Reports - Tutorial reports make it quicker to get started - use as is of modify to suit

Tutorial Reports - Tutorial reports make it quicker to get started - use as is of modify to suit 
Report Builder - Some of the designer features

Built in help and user guide
Community Library - Share standout reports with the community. Pre-populated and available in both free and pro.

AI Report Builder - A fully curated AI prompt to automate report building
AI Support Agent - A fully curated AI prompt ready to be a support agent

Pro Version
Key Features
🛡 Extended Power for Professional Reports
Pro extends the free Banded Report Writer with the advanced features power users and demanding reporting scenarios need — without breaking anything that already works.
Visual Enhancements
📷 Images in ReportsCompany logos in headers, product images in detail lines, signatures in footers. Field references, external URLs, and three sizing modes (fit, stretch, original). |
👁 WatermarksSemi-transparent text or image watermarks on every page. Customise opacity, rotation, font, and colour. Renders on top of all content. |
📚 Snippet LibrariesReusable band definitions — create once, include everywhere. Update once, reflect everywhere. Perfect for consistent corporate headers, footers, and branding. |
Advanced Functionality
❓ Report Parameters and Prompting at RuntimePrompt users for input when a report runs. Supports date ranges (25+ presets), dropdowns, text, numbers, and booleans — with values flowing directly into report domains. Makes action-launched reports more flexible by letting users choose things like summary vs. detail at run time. |
📊 SQL Data SourcesDirect SQL queries for complex data retrieval beyond Odoo’s ORM. Cross-table JOINs, aggregations, and safe parameter binding with %(name)s. |
📧 Print & SendBind to Odoo’s Print button. Preview, generate, and email reports directly from the action menu — or replace built-in reports entirely. |
⏱Server-side generation & email APIProgrammatic PDF generation and email delivery via generate_pdf_attachment() and generate_and_email() . Parameter defaults resolve automatically, making reports fully callable from Odoo cron jobs or custom automation — ideal for unattended execution and scheduled delivery |
📝 Enhanced JSON EditingExpand or collapse all fields, or just a single band, for clearer editing on large reports. Switch between compact and verbose views in one click. |
🔗 Run Reports MenuOpt-in quick-access menu surfaces parameterized and non-parameterized reports for end users without needing form-level actions. |
Learning & Support
📚 7 Pro Tutorial ReportsPro tutorials demonstrating every Pro feature — images, watermarks, snippets, parameters, SQL, and scheduling. Ready to run, examine, and adapt. |
📄 Pro User Guide & SchemaDedicated Pro User Guide and a Pro Schema reference covering every advanced JSON key. Both are accessible from inside Odoo. |
❓ Built-in Help (Pro)All free contextual help, plus Pro-specific guidance for image fields, watermark configuration, snippet authoring, and parameter design. |
Connected & Intelligent
🌍 Shared Community LibraryShare Pro reports with the community. Pro-only features (images, watermarks, SQL, parameters, snippets) are automatically labelled so importers know what they need. |
🤖 AI Friendly Report GeneratorPro-aware AI prompt that knows every Pro key and feature — generates working JSON for parameterized, image-rich, snippet-based reports on the first try. |
💬 AI Friendly Support AgentPro-aware AI prompt for instant support across the whole feature surface, including watermark, parameter, and Print & Send troubleshooting. |
🙋 Human SupportPriority human support for Pro license holders. Email brw_support@wilsonworks.com.au. |
🔗 All Pro Features Work Together
Combine images with watermarks, use snippets with parameters, schedule SQL-based reports with automatic email delivery. Pro is one coherent reporting solution for enterprise needs.
Key Features
🛡 Extended Power for Professional Reports
Pro extends the free Banded Report Writer with the advanced features power users and demanding reporting scenarios need — without breaking anything that already works.
Visual Enhancements
📷 Images in ReportsCompany logos in headers, product images in detail lines, signatures in footers. Field references, external URLs, and three sizing modes (fit, stretch, original). |
👁 WatermarksSemi-transparent text or image watermarks on every page. Customise opacity, rotation, font, and colour. Renders on top of all content. |
📚 Snippet LibrariesReusable band definitions — create once, include everywhere. Update once, reflect everywhere. Perfect for consistent corporate headers, footers, and branding. |
Advanced Functionality
❓ Report Parameters and Prompting at RuntimePrompt users for input when a report runs. Supports date ranges (25+ presets), dropdowns, text, numbers, and booleans — with values flowing directly into report domains. Makes action-launched reports more flexible by letting users choose things like summary vs. detail at run time. |
📊 SQL Data SourcesDirect SQL queries for complex data retrieval beyond Odoo’s ORM. Cross-table JOINs, aggregations, and safe parameter binding with %(name)s. |
📧 Print & SendBind to Odoo’s Print button. Preview, generate, and email reports directly from the action menu — or replace built-in reports entirely. |
⏱Server-side generation & email APIProgrammatic PDF generation and email delivery via generate_pdf_attachment() and generate_and_email() . Parameter defaults resolve automatically, making reports fully callable from Odoo cron jobs or custom automation — ideal for unattended execution and scheduled delivery |
📝 Enhanced JSON EditingExpand or collapse all fields, or just a single band, for clearer editing on large reports. Switch between compact and verbose views in one click. |
🔗 Run Reports MenuOpt-in quick-access menu surfaces parameterized and non-parameterized reports for end users without needing form-level actions. |
Learning & Support
📚 7 Pro Tutorial ReportsPro tutorials demonstrating every Pro feature — images, watermarks, snippets, parameters, SQL, and scheduling. Ready to run, examine, and adapt. |
📄 Pro User Guide & SchemaDedicated Pro User Guide and a Pro Schema reference covering every advanced JSON key. Both are accessible from inside Odoo. |
❓ Built-in Help (Pro)All free contextual help, plus Pro-specific guidance for image fields, watermark configuration, snippet authoring, and parameter design. |
Connected & Intelligent
🌍 Shared Community LibraryShare Pro reports with the community. Pro-only features (images, watermarks, SQL, parameters, snippets) are automatically labelled so importers know what they need. |
🤖 AI Friendly Report GeneratorPro-aware AI prompt that knows every Pro key and feature — generates working JSON for parameterized, image-rich, snippet-based reports on the first try. |
💬 AI Friendly Support AgentPro-aware AI prompt for instant support across the whole feature surface, including watermark, parameter, and Print & Send troubleshooting. |
🙋 Human SupportPriority human support for Pro license holders. Email brw_support@wilsonworks.com.au. |
🔗 All Pro Features Work Together
Combine images with watermarks, use snippets with parameters, schedule SQL-based reports with automatic email delivery. Pro is one coherent reporting solution for enterprise needs.

Screenshots
Images - Add images like logos, product images and watermarks

Images - Add high resolution images as watermarks
Images - High resolution and test combined as watermarks

Dynamic Prompted reports - Design reports that prompt for report parameters. Designed for end-users to make it easy for them to product reports. Prompted reports can also be used when reports are assigned to model actions.
Snippets - for corporate branding and consistency

Snippets - are useful for SQL query readability
Integrated Print & Send — email reports directly from Odoo

JSON Editor Useability - Ability to collapse and expand sections of the JSON report definitions for easier editing
End-user reporting - #2

Include PDF documents - Conditionally, prepend and append PDF documents to reports. e.g. Terms of Service document appended to a Sales Order
Automated report writer for SQL reports

More information
How It Works
The Banded Reporting Model
Banded Report Writer brings the classic “banded” reporting paradigm — familiar from tools like Crystal Reports — directly into Odoo. A report is built from discrete horizontal bands that fire at predictable moments: a report header on the first page, page headers on every page, detail bands repeated for each data record, group headers and footers when data changes, and page/report footers for summaries and page numbers. Each band contains fields positioned by X and Y coordinates, giving you pixel-precise control over layout without touching QWeb or WKHTMLTOPDF.
One Foundational Idea: Flat In, Banded Out
Every Banded Report Writer report consumes a flat list of rows, where each row already carries every value the report could ever need — including values that “belong” to a group header or footer. We deliberately repeat group-level data on every row instead of nesting it.
This single design choice is the reason BRW is so flexible and predictable. Grouping, sorting, subtotals, page breaks, and conditional bands all become simple, regular operations on a uniform input. The hard work of joining tables and shaping data lives where it belongs — in your data source — not buried inside the report template.
The result: there is never any mystery about where a value comes from, every report behaves the same way, and reports are easy to reason about, modify, and migrate. It is a deliberate decision rooted in decades of classic banded-reporting practice — one that has paid off in every report we have built.
Structured JSON, Validated End-to-End
Everything about a report — bands, fields, data sources, grouping rules, formatting, colours, and constants — is declared in a single, clean JSON document. This is not loose markup: every key is validated against a strict schema, every field type is checked, every layout reference is resolved, and every colour token is verified before a single PDF byte is produced. The rendering engine is pure Python (ReportLab), with zero Odoo dependencies in its core, so the same definition runs consistently whether you are designing in Odoo 19 today or porting tomorrow.
Schema Rigor Enables AI and Guaranteed Quality
Because the format is tightly structured, we can do things ad-hoc template systems cannot. The built-in validator catches typos instantly — “Unknown key ‘fond_size’ — did you mean ‘font_size’?” — and the complete JSON schema is published as a machine-readable reference. That same schema powers our curated AI prompts: the AI Report Builder knows every valid key, every band type, and every formatting rule, so it generates working JSON on the first try rather than guessing. The result is a system where human authors, automated validators, and AI assistants all speak the same precise language.
Steps to Get Started
1 Install the Module
Install Banded Report Writer from the Odoo Apps Store. The free module includes everything you need to create professional reports.
2 Create Your First Report
Use the Automated Report Builder to generate a report in minutes. Select your data model, choose fields, and the system creates a complete banded report definition.
3 Customize as Needed
Edit the JSON directly for advanced customization. Add grouping, aggregates, formatting, and more. The built-in help guides you through each option.
4 Attach to Any Model
Link your report definition to any Odoo model. Print directly from the action menu on any record.
5 Print & Share
Generate professional PDFs instantly. Share with customers, partners, or internal teams.
📚 Ready Out of the Box
11 tutorial reports are included to help you learn. Run them, examine them, modify them. Everything you need is included.
📚 Don't forget to install the shared community reports module
Share your beautiful reports with the community and benefit from other's others contributions. We envisage the library becoming a valuable repository of quality reports for both the free and pro versions.
Frequently Asked Questions
Do I need to know Python or QWeb to use this?
No. Banded Report Writer is designed specifically for non-developers. You define reports entirely in JSON through the built-in editor — no Python coding, no QWeb templates, no XML. The only skill you need is understanding your data model (which Odoo already shows you in the UI).
Will this work with my custom Odoo modules?
Yes. Banded Report Writer can bind to any Odoo model — built-in or custom. As long as you can see the model in Odoo’s UI, you can create a report for it using the Automated Report Builder or by writing a JSON definition manually.
Is the Pro module required to create reports?
No. The free version is fully functional and includes all core banded reporting features: band layouts, grouping, aggregates, formatting, pagination, and PDF output. Pro adds advanced features like SQL data sources, images, watermarks, parameters, scheduling, and snippet libraries — but you can create complete professional reports without it.
Can I migrate reports between databases?
Yes. Report definitions are stored as pure JSON, which is completely portable. You can export a report definition, copy it to another database, and it will run identically — no dependencies on custom code or external assets.
How does this compare to Odoo’s built-in QWeb reports?
Odoo’s native QWeb reports require HTML/CSS knowledge and developer access. They are powerful but inaccessible to functional users. Banded Report Writer gives you the same professional PDF output through a simple JSON interface — think of it as “Crystal Reports for Odoo” but without the code. It is not a replacement for complex bespoke QWeb reports, but it covers 90% of business reporting needs without touching a single line of code.
What about support and updates?
We are committed to continuous improvement. The free module receives bug fixes and compatibility updates for new Odoo versions. Human support is always available. We also provide curated AI prompts that act as a support agent and a report builder — both included free.
Free vs Pro Feature Comparison
The Banded Report Writer is a comprehensive, free report engine for Odoo. The optional Pro module extends it with advanced features for professional report design, automation, and integration.
Note: Installing Pro automatically extends the free module — all existing reports continue to work unchanged.
Upgrade to Pro
The free version is fully functional for creating professional banded reports. Upgrade to Pro when you need images, watermarks, snippets, parameters, or advanced data sources.
Core Report Engine
| Feature | Free | Pro |
|---|---|---|
| Band-based layout (report header, page header, detail, page footer, report footer) | ✅ | ✅ |
| Multi-page reports with automatic page breaks | ✅ | ✅ |
| Page sizes — A4, Letter, Legal | ✅ | ✅ |
| Portrait and landscape orientation | ✅ | ✅ |
| Configurable margins (top, bottom, left, right) | ✅ | ✅ |
| Developer PDF Preview (in-browser, no download) | ✅ | ✅ |
| JSON schema validation with typo detection and suggestions | ✅ | ✅ |
| Report Builder wizard (guided report creation) | ✅ | ✅ |
| Debug layout mode (visualise band boundaries) | ✅ | ✅ |
| Generate PDF button (download) | ✅ | ✅ |
Data Sources & Queries
| Feature | Free | Pro |
|---|---|---|
| ORM data sources with Odoo domain filters | ✅ | ✅ |
| Parent-child (master-detail) data sources via One2many fields | ✅ | ✅ |
| Dot-notation for related fields | ✅ | ✅ |
| Dynamic domain variables ({company_ids}, {today}, {active_ids}) | ✅ | ✅ |
| SQL data sources — direct SQL queries | — | ✅ |
| Cross-table JOINs for complex multi-table reporting | — | ✅ |
| Parameterized SQL queries with safe %(name)s binding | — | ✅ |
Field Types & Formatting
| Feature | Free | Pro |
|---|---|---|
| Static text labels | ✅ | ✅ |
| Dynamic field values with {field_name} placeholders | ✅ | ✅ |
| Currency formatting — locale-aware with per-record symbol | ✅ | ✅ |
| Number formatting — locale-aware with thousands separator | ✅ | ✅ |
| HTML to plain text conversion | ✅ | ✅ |
| Image fields — render images in any band | — | ✅ |
| Image size modes — fit, stretch, original | — | ✅ |
| Conditional image rendering with render_if | — | ✅ |
Layout & Styling
| Feature | Free | Pro |
|---|---|---|
| Text alignment — left, right, center | ✅ | ✅ |
| Vertical alignment — top, middle, bottom | ✅ | ✅ |
| Bold and italic text (band and field level) | ✅ | ✅ |
| Font families — Helvetica, Times, Courier | ✅ | ✅ |
| Text color — hex #RRGGBB or named colors | ✅ | ✅ |
| Band backgrounds — solid or alternating row colors | ✅ | ✅ |
| Band borders and underlines | ✅ | ✅ |
| Named panels — positioned rectangles with backgrounds | ✅ | ✅ |
| Rounded corners (curved) | ✅ | ✅ |
| Watermarks — text or image on every page | — | ✅ |
| Watermark customization — opacity, rotation, font, color | — | ✅ |
Grouping, Totals & Summaries
| Feature | Free | Pro |
|---|---|---|
| Multi-level grouping by any field | ✅ | ✅ |
| Group header and footer bands (per level) | ✅ | ✅ |
| Aggregate functions — SUM, COUNT, AVG, MIN, MAX | ✅ | ✅ |
| Subtotals at each group level | ✅ | ✅ |
| Report footer with grand totals | ✅ | ✅ |
| Nested/hierarchical grouping (multiple levels) | ✅ | ✅ |
| Automatic page breaks per group | ✅ | ✅ |
| Continuation text for multi-page groups | ✅ | ✅ |
Report Parameters & Prompts
| Feature | Free | Pro |
|---|---|---|
| Runtime parameter prompts — dynamic wizard | — | ✅ |
| Date range parameters — 25+ built-in presets | — | ✅ |
| Selection/dropdown parameters | — | ✅ |
| Text, number, and boolean parameters | — | ✅ |
| Parameter values in domains | — | ✅ |
| Run Reports menu — opt-in quick-access for prompted & non-prompted reports | — | ✅ |
| Cron-ready defaults — unattended execution | — | ✅ |
Publishing, Print, Email & Scheduling
| Feature | Free | Pro |
|---|---|---|
| Publish to Action Menu wizard | ✅ | ✅ |
| Cross-model report actions | ✅ | ✅ |
| Print & Send — bind to Odoo’s Print button | — | ✅ |
| Default Report mode — replace built-in reports | — | ✅ |
| Scheduled reports via cron | — | ✅ |
| generate_pdf_attachment() — server-side PDF | — | ✅ |
| generate_and_email() — generate and send via email | — | ✅ |
JSON Editing & Productivity
| Feature | Free | Pro |
|---|---|---|
| JSON editor with syntax highlighting | ✅ | ✅ |
| JSON schema validation on save | ✅ | ✅ |
| Typo detection with suggestions | ✅ | ✅ |
| Report Builder wizard | ✅ | ✅ |
| JSON Compact All Fields | — | ✅ |
| JSON Expand All Fields | — | ✅ |
| JSON Expand Band | — | ✅ |
Reusable Components
| Feature | Free | Pro |
|---|---|---|
| Constants — report-level layout variables | ✅ | ✅ |
| Constants — band-level, scoped to a specific band | ✅ | ✅ |
| Palette definition for style consistency | ✅ | ✅ |
| Layout references — {name.x}, {name.width} | ✅ | ✅ |
| Named panels — store x, y, width, height | ✅ | ✅ |
| Snippet Libraries — reusable JSON fragments | — | ✅ |
| Band snippets — standard headers, footers | — | ✅ |
| include_snippet at any JSON level | — | ✅ |
Learning Resources
| Feature | Free | Pro |
|---|---|---|
| 11 progressive tutorials (Tutorial 01–11) | ✅ | ✅ |
| 7 Pro tutorials (Tutorial Pro 01–07) | — | ✅ |
| In-app User Guide | ✅ | ✅ |
| In-app Quick Reference | ✅ | ✅ |
| Pro User Guide | — | ✅ |
| Pro Schema reference | — | ✅ |
Summary
| Free | Pro | |
|---|---|---|
| Total features | 100+ | 140+ |
| Data source types | ORM | ORM + SQL |
| Report actions | Action Menu | Action Menu + Print & Send |
| Automation | Manual | + Cron, email |
| Media | Text only | + Images + Watermarks |
| Parameters | — | 5 types, 25+ presets |
| Tutorials | 11 | 11 + 7 Pro |
Changelog
| Version | Type | Changes |
|---|---|---|
| 1.0.0 | Initial | Core banded report engine with JSON editor, grouping, aggregates, PDF output, and 11 tutorial reports |
🔄 Active Development
This module is continuously maintained. All bug fixes and Odoo version compatibility updates are provided free of charge. Upgrade to Pro to unlock advanced features as your reporting needs grow.
How It Works
The Banded Reporting Model
Banded Report Writer brings the classic “banded” reporting paradigm — familiar from tools like Crystal Reports — directly into Odoo. A report is built from discrete horizontal bands that fire at predictable moments: a report header on the first page, page headers on every page, detail bands repeated for each data record, group headers and footers when data changes, and page/report footers for summaries and page numbers. Each band contains fields positioned by X and Y coordinates, giving you pixel-precise control over layout without touching QWeb or WKHTMLTOPDF.
One Foundational Idea: Flat In, Banded Out
Every Banded Report Writer report consumes a flat list of rows, where each row already carries every value the report could ever need — including values that “belong” to a group header or footer. We deliberately repeat group-level data on every row instead of nesting it.
This single design choice is the reason BRW is so flexible and predictable. Grouping, sorting, subtotals, page breaks, and conditional bands all become simple, regular operations on a uniform input. The hard work of joining tables and shaping data lives where it belongs — in your data source — not buried inside the report template.
The result: there is never any mystery about where a value comes from, every report behaves the same way, and reports are easy to reason about, modify, and migrate. It is a deliberate decision rooted in decades of classic banded-reporting practice — one that has paid off in every report we have built.
Structured JSON, Validated End-to-End
Everything about a report — bands, fields, data sources, grouping rules, formatting, colours, and constants — is declared in a single, clean JSON document. This is not loose markup: every key is validated against a strict schema, every field type is checked, every layout reference is resolved, and every colour token is verified before a single PDF byte is produced. The rendering engine is pure Python (ReportLab), with zero Odoo dependencies in its core, so the same definition runs consistently whether you are designing in Odoo 19 today or porting tomorrow.
Schema Rigor Enables AI and Guaranteed Quality
Because the format is tightly structured, we can do things ad-hoc template systems cannot. The built-in validator catches typos instantly — “Unknown key ‘fond_size’ — did you mean ‘font_size’?” — and the complete JSON schema is published as a machine-readable reference. That same schema powers our curated AI prompts: the AI Report Builder knows every valid key, every band type, and every formatting rule, so it generates working JSON on the first try rather than guessing. The result is a system where human authors, automated validators, and AI assistants all speak the same precise language.
Steps to Get Started
1 Install the Module
Install Banded Report Writer from the Odoo Apps Store. The free module includes everything you need to create professional reports.
2 Create Your First Report
Use the Automated Report Builder to generate a report in minutes. Select your data model, choose fields, and the system creates a complete banded report definition.
3 Customize as Needed
Edit the JSON directly for advanced customization. Add grouping, aggregates, formatting, and more. The built-in help guides you through each option.
4 Attach to Any Model
Link your report definition to any Odoo model. Print directly from the action menu on any record.
5 Print & Share
Generate professional PDFs instantly. Share with customers, partners, or internal teams.
📚 Ready Out of the Box
11 tutorial reports are included to help you learn. Run them, examine them, modify them. Everything you need is included.
📚 Don't forget to install the shared community reports module
Share your beautiful reports with the community and benefit from other's others contributions. We envisage the library becoming a valuable repository of quality reports for both the free and pro versions.
Frequently Asked Questions
Do I need to know Python or QWeb to use this?
No. Banded Report Writer is designed specifically for non-developers. You define reports entirely in JSON through the built-in editor — no Python coding, no QWeb templates, no XML. The only skill you need is understanding your data model (which Odoo already shows you in the UI).
Will this work with my custom Odoo modules?
Yes. Banded Report Writer can bind to any Odoo model — built-in or custom. As long as you can see the model in Odoo’s UI, you can create a report for it using the Automated Report Builder or by writing a JSON definition manually.
Is the Pro module required to create reports?
No. The free version is fully functional and includes all core banded reporting features: band layouts, grouping, aggregates, formatting, pagination, and PDF output. Pro adds advanced features like SQL data sources, images, watermarks, parameters, scheduling, and snippet libraries — but you can create complete professional reports without it.
Can I migrate reports between databases?
Yes. Report definitions are stored as pure JSON, which is completely portable. You can export a report definition, copy it to another database, and it will run identically — no dependencies on custom code or external assets.
How does this compare to Odoo’s built-in QWeb reports?
Odoo’s native QWeb reports require HTML/CSS knowledge and developer access. They are powerful but inaccessible to functional users. Banded Report Writer gives you the same professional PDF output through a simple JSON interface — think of it as “Crystal Reports for Odoo” but without the code. It is not a replacement for complex bespoke QWeb reports, but it covers 90% of business reporting needs without touching a single line of code.
What about support and updates?
We are committed to continuous improvement. The free module receives bug fixes and compatibility updates for new Odoo versions. Human support is always available. We also provide curated AI prompts that act as a support agent and a report builder — both included free.
Free vs Pro Feature Comparison
The Banded Report Writer is a comprehensive, free report engine for Odoo. The optional Pro module extends it with advanced features for professional report design, automation, and integration.
Note: Installing Pro automatically extends the free module — all existing reports continue to work unchanged.
Upgrade to Pro
The free version is fully functional for creating professional banded reports. Upgrade to Pro when you need images, watermarks, snippets, parameters, or advanced data sources.
Core Report Engine
| Feature | Free | Pro |
|---|---|---|
| Band-based layout (report header, page header, detail, page footer, report footer) | ✅ | ✅ |
| Multi-page reports with automatic page breaks | ✅ | ✅ |
| Page sizes — A4, Letter, Legal | ✅ | ✅ |
| Portrait and landscape orientation | ✅ | ✅ |
| Configurable margins (top, bottom, left, right) | ✅ | ✅ |
| Developer PDF Preview (in-browser, no download) | ✅ | ✅ |
| JSON schema validation with typo detection and suggestions | ✅ | ✅ |
| Report Builder wizard (guided report creation) | ✅ | ✅ |
| Debug layout mode (visualise band boundaries) | ✅ | ✅ |
| Generate PDF button (download) | ✅ | ✅ |
Data Sources & Queries
| Feature | Free | Pro |
|---|---|---|
| ORM data sources with Odoo domain filters | ✅ | ✅ |
| Parent-child (master-detail) data sources via One2many fields | ✅ | ✅ |
| Dot-notation for related fields | ✅ | ✅ |
| Dynamic domain variables ({company_ids}, {today}, {active_ids}) | ✅ | ✅ |
| SQL data sources — direct SQL queries | — | ✅ |
| Cross-table JOINs for complex multi-table reporting | — | ✅ |
| Parameterized SQL queries with safe %(name)s binding | — | ✅ |
Field Types & Formatting
| Feature | Free | Pro |
|---|---|---|
| Static text labels | ✅ | ✅ |
| Dynamic field values with {field_name} placeholders | ✅ | ✅ |
| Currency formatting — locale-aware with per-record symbol | ✅ | ✅ |
| Number formatting — locale-aware with thousands separator | ✅ | ✅ |
| HTML to plain text conversion | ✅ | ✅ |
| Image fields — render images in any band | — | ✅ |
| Image size modes — fit, stretch, original | — | ✅ |
| Conditional image rendering with render_if | — | ✅ |
Layout & Styling
| Feature | Free | Pro |
|---|---|---|
| Text alignment — left, right, center | ✅ | ✅ |
| Vertical alignment — top, middle, bottom | ✅ | ✅ |
| Bold and italic text (band and field level) | ✅ | ✅ |
| Font families — Helvetica, Times, Courier | ✅ | ✅ |
| Text color — hex #RRGGBB or named colors | ✅ | ✅ |
| Band backgrounds — solid or alternating row colors | ✅ | ✅ |
| Band borders and underlines | ✅ | ✅ |
| Named panels — positioned rectangles with backgrounds | ✅ | ✅ |
| Rounded corners (curved) | ✅ | ✅ |
| Watermarks — text or image on every page | — | ✅ |
| Watermark customization — opacity, rotation, font, color | — | ✅ |
Grouping, Totals & Summaries
| Feature | Free | Pro |
|---|---|---|
| Multi-level grouping by any field | ✅ | ✅ |
| Group header and footer bands (per level) | ✅ | ✅ |
| Aggregate functions — SUM, COUNT, AVG, MIN, MAX | ✅ | ✅ |
| Subtotals at each group level | ✅ | ✅ |
| Report footer with grand totals | ✅ | ✅ |
| Nested/hierarchical grouping (multiple levels) | ✅ | ✅ |
| Automatic page breaks per group | ✅ | ✅ |
| Continuation text for multi-page groups | ✅ | ✅ |
Report Parameters & Prompts
| Feature | Free | Pro |
|---|---|---|
| Runtime parameter prompts — dynamic wizard | — | ✅ |
| Date range parameters — 25+ built-in presets | — | ✅ |
| Selection/dropdown parameters | — | ✅ |
| Text, number, and boolean parameters | — | ✅ |
| Parameter values in domains | — | ✅ |
| Run Reports menu — opt-in quick-access for prompted & non-prompted reports | — | ✅ |
| Cron-ready defaults — unattended execution | — | ✅ |
Publishing, Print, Email & Scheduling
| Feature | Free | Pro |
|---|---|---|
| Publish to Action Menu wizard | ✅ | ✅ |
| Cross-model report actions | ✅ | ✅ |
| Print & Send — bind to Odoo’s Print button | — | ✅ |
| Default Report mode — replace built-in reports | — | ✅ |
| Scheduled reports via cron | — | ✅ |
| generate_pdf_attachment() — server-side PDF | — | ✅ |
| generate_and_email() — generate and send via email | — | ✅ |
JSON Editing & Productivity
| Feature | Free | Pro |
|---|---|---|
| JSON editor with syntax highlighting | ✅ | ✅ |
| JSON schema validation on save | ✅ | ✅ |
| Typo detection with suggestions | ✅ | ✅ |
| Report Builder wizard | ✅ | ✅ |
| JSON Compact All Fields | — | ✅ |
| JSON Expand All Fields | — | ✅ |
| JSON Expand Band | — | ✅ |
Reusable Components
| Feature | Free | Pro |
|---|---|---|
| Constants — report-level layout variables | ✅ | ✅ |
| Constants — band-level, scoped to a specific band | ✅ | ✅ |
| Palette definition for style consistency | ✅ | ✅ |
| Layout references — {name.x}, {name.width} | ✅ | ✅ |
| Named panels — store x, y, width, height | ✅ | ✅ |
| Snippet Libraries — reusable JSON fragments | — | ✅ |
| Band snippets — standard headers, footers | — | ✅ |
| include_snippet at any JSON level | — | ✅ |
Learning Resources
| Feature | Free | Pro |
|---|---|---|
| 11 progressive tutorials (Tutorial 01–11) | ✅ | ✅ |
| 7 Pro tutorials (Tutorial Pro 01–07) | — | ✅ |
| In-app User Guide | ✅ | ✅ |
| In-app Quick Reference | ✅ | ✅ |
| Pro User Guide | — | ✅ |
| Pro Schema reference | — | ✅ |
Summary
| Free | Pro | |
|---|---|---|
| Total features | 100+ | 140+ |
| Data source types | ORM | ORM + SQL |
| Report actions | Action Menu | Action Menu + Print & Send |
| Automation | Manual | + Cron, email |
| Media | Text only | + Images + Watermarks |
| Parameters | — | 5 types, 25+ presets |
| Tutorials | 11 | 11 + 7 Pro |
Changelog
| Version | Type | Changes |
|---|---|---|
| 1.0.0 | Initial | Core banded report engine with JSON editor, grouping, aggregates, PDF output, and 11 tutorial reports |
🔄 Active Development
This module is continuously maintained. All bug fixes and Odoo version compatibility updates are provided free of charge. Upgrade to Pro to unlock advanced features as your reporting needs grow.


