Skip links
Table of Contents
    blog_placeholder

    Custom Reports and Dashboards in ERPNext: Getting the Visibility Your Business Actually Needs

    ERPNext custom reports are reports built beyond what Report Builder’s drag-and-drop interface can produce — typically because the data you need spans multiple doctypes, requires calculated business logic, or needs to be filtered by user role rather than just by date or department. If your team is exporting to Excel to finish what ERPNext started, that’s usually the signal you’ve outgrown the standard toolset.

    That gap — between “what ERPNext ships with” and “what your business actually needs to see” — is where most of the frustration lives, and it’s rarely about ERPNext being weak at reporting. It’s about a mismatch between a generic tool and a specific workflow.

    What ERPNext Gives You Out of the Box

    ERPNext ships with three ways to build reports, plus configurable dashboards, and it’s worth knowing what each is actually for before deciding you need something custom.

    Report Builder is the no-code option. It works directly off a single doctype (Sales Invoice, Purchase Order, Stock Ledger, and so on), letting you add columns, group rows, apply filters, and export to Excel or PDF. It's genuinely good for straightforward, single-source questions — "show me all overdue invoices by customer" — and most day-to-day reporting needs never go beyond it.

    Query Report steps up to raw SQL. Anyone comfortable writing a SQL query can pull data across multiple tables, join doctypes, and return exactly the rows they want. It's more powerful than Report Builder but has a real cost: query reports are written against the current database schema, and an ERPNext version upgrade that changes a table structure can silently break them. We've inherited more than one client's reporting suite where half the saved Query Reports stopped working after an upgrade, with no error until someone noticed the numbers looked wrong.

    Script Report goes further still — a Python script generates the report data, which means you can apply business logic that no SQL query or drag-and-drop filter could express: multi-step calculations, conditional formatting based on custom rules, or data pulled from outside ERPNext entirely.

    Dashboards sit on top of all three. ERPNext's dashboard builder lets you assemble charts and number cards from existing reports into a single view — useful for a daily operational snapshot, less useful the moment you need a KPI that doesn't map cleanly to one report.

    Where Standard Reporting Hits a Wall

    The pattern we see most often with decision-makers who reach out about reporting isn’t “ERPNext’s reports are bad.” It’s one of these four situations:
    SituationWhy the built-in tools struggle
    A report needs to combine data from doctypes that don't share a natural join keyReport Builder can't do it at all; Query Report can, but only if someone maintains the SQL as the schema evolves
    Different roles need to see different slices of the same dashboardNative dashboards apply the same view to everyone with access; role-based filtering isn't built in
    A KPI is calculated, not storedThings like "days of inventory on hand" or "average time from quote to invoice" require logic across records, not a single stored field
    Data needs to come from outside ERPNextE-commerce platform metrics, a third-party logistics API, or a legacy system export won't show up in any native report until something connects them
    None of these mean ERPNext “can’t do reporting.” They mean the reporting need has moved from configuration into development — a Script Report, a custom Frappe app with its own doctypes, or an integration layer that feeds ERPNext data somewhere it can be visualized properly.

    Report Builder vs. Query Report vs. Script Report vs. Custom Dashboard

    ToolWho can build itCross-doctype logicCustom business rulesUpgrade risk
    Report BuilderAny user, no codeNoNoLow
    Query ReportSomeone who knows SQLYes, manuallyLimitedMedium–high
    Script ReportA developerYesYesMedium (contained in code, but still needs maintenance)
    Custom dashboard / appA Frappe developerYesYesLow if built to account for upgrades

    How to Decide: Configure, or Build Something Custom

    Before assuming you need custom development, it’s worth ruling out the cheaper option first. Ask these questions in order:
    If yes, Report Builder is probably enough — don't overbuild.
    If yes, a Query Report can work, with the understanding that it needs occasional upkeep.
    This almost always means custom development — role-based dashboards and external integrations aren't things you configure your way into.

    If you land on question 3 or 4, you’re not dealing with a reporting problem anymore — you’re dealing with a workflow that ERPNext’s standard configuration wasn’t designed to express, which is a different kind of project.

    If that’s where you’ve landed, it’s worth discussing your custom workflow with someone who builds on Frappe directly, rather than continuing to patch a Query Report that was never meant to carry this much weight.

    What a Custom Reporting Build Actually Involves

    When a reporting need genuinely requires custom development, the work usually isn’t just “write a better report” — it’s building the data structure underneath it. That might mean a custom doctype to store a calculated value instead of recomputing it every time, a scheduled job that pulls in external data on a regular cycle, or role-based permissions built into the dashboard itself so a plant manager and a finance controller see different views of the same underlying numbers without either seeing data they shouldn’t.

    This is closer to custom Frappe app development than report-writing, and it comes with real tradeoffs worth naming honestly: a custom dashboard built well will survive ERPNext upgrades because it’s designed with that in mind, but a custom dashboard built quickly — without accounting for permissions or performance on larger datasets — can become as fragile as the Query Report it replaced. The build quality matters more than the fact that it’s custom.

    Frequently Asked Questions

    Yes, for single-doctype reports — Report Builder handles filtering, grouping, and column selection with no code. Once you need data from multiple doctypes or calculated fields, you move into Query Report or Script Report territory, which require SQL or Python respectively.

    This usually happens with Query Reports written directly against the database schema. If an ERPNext update changes a table or field name that the query relied on, the report can fail silently or return wrong data until someone checks it. Script Reports and properly maintained custom apps are less exposed to this because the logic sits in a layer designed to be updated alongside ERPNext.

    A Query Report runs a SQL query directly and returns the result as a table. A Script Report runs a Python script, which can apply logic SQL alone can't easily express — multi-step calculations, conditional formatting, or pulling in data from outside the database. Script Reports take more effort to build but are more maintainable long-term.
    Not by default — native ERPNext dashboards show the same configured view to everyone with access to it. Role-based or user-scoped dashboard views require custom development, typically built as part of a broader custom Frappe app rather than a dashboard configuration setting.

    Ready to Fix the Reporting Gap?

    If your team is still exporting to Excel to answer questions ERPNext should be able to answer on its own, that’s a workflow problem, not a reporting one — and it’s exactly the kind of gap custom Frappe development is built to close. Discuss your custom workflow with Aavatto’s team to see whether the fix is a Script Report, a custom dashboard, or something built underneath both.

    Niraj Gohel
    Meet Niraj Gohel, the “Problem Solver”, and occasionally the problem creator at Aavatto. When he’s not traveling, watching a film, or having a cup of tea, he spends his days solving problems, debating ideas, and occasionally distracting the team with completely unrelated conversations. His philosophy is simple: technology is important, but being a good human is more important.
    gohel-niraj
    This can be a new journey !

    Related Posts

    Have a Project in Mind?

    This can be a new journey !

    leaf