Hi Everyone,

NOTE: this review was created in 2009. iDempiere has changed significantly since that time. Many of the below issues have been resolved in iDempiere.

It is not very often that you get an integrator giving an honest and open opinion about their ERP. I hope this post is a metaphorical “breath of fresh air” to those searching for the right ERP for their organization. This ADempiere, open source ERP, review is based on my twelve years with ERP as a Director of IT and my ten years with ADempiere. Most of the below information can be applied to OpenBravo and Compiere since they came from the same code base. This review is written for someone in wholesale and web distribution; however, since most manufacturing organizations also distribute their goods, you can use this article as a starting point. A manufacturing review will come later.

Interesting open source ERP article: Is Open Source ERP worth look at? Is this a crazy question?


ADempiere is a nicely featured ERP to help someone manage a wholesale and web distribution business. It has the standard features you would expect to support wholesale distribution. Like any software tool, it has “the good, the bad, and the ugly”. The purpose of this article is to help expose you to ADempiere’s strengths and weaknesses. As a result, this article will help you determine if the ADempiere platform is worth investing your time to improve your wholesale distribution business. I do not think a resource like this document exists on the Internet. If you find value in this information, please let me and others know.

Look for the underlined words good and bad. If a feature is good, I will explain what it is and why it is good. If a feature is lacking or bad, I will explain why and how to best compensate.

Here is an introduction video – ADempiere 101 – An Open Source ERP introduction

The Cost

The cost of ADempiere is definitely good. ADempiere is free to download, play with, and place into production for an unlimited number of users. It is released under the GPL v2 open source license. When you download the application, you own it. You own the code, the application and all the changes you make. So long as you do not distribute your changes outside of your company, your changes are proprietary to you.

Here is an ADempiere, open source ERP, ROI discussion.

The Basics

ADempiere has over 400 menu items. Almost every one of those items support two basic concepts: (1) Business Partners and (2) Products. You use business partners to buy, store, assemble and ship products and services.

Here is a tutorial showing you the basics including business partners, products and general navigation.

Business Partner
Business Partners are your Customers, Vendors and Employees. The structure of Business Partners is very good. A single business partner manages multiple locations and multiple contacts. You also can create a good hierarchy of business partners.

ADempiere takes an Oracle style approach of creating a single pool of business partners. This is because business partners often play multiple roles. Any one person or company can be a Customer, a Vendor, and an Employee. Creating a single pool of Business Partners is much more good than bad. Managing Accounts Payable and Account Receivable becomes much easier. Managing data also becomes easier. The bad comes during go-live. Consolidating your previous system’s vendors and customers can be time consuming.

Products in ADempiere support multiple concepts. They are your raw goods, finished goods, services and your resources. In terms of wholesale and web distribution, the product architecture works well (good). A product can exist on multiple price lists. The system simultaneously maintains multiple costing types (Standard, Average PO, Average Invoice, Last PO, etc..). You can manage cost at the product or lot level. Lot management plays a big role in how well ADempiere performs for your organization. See the Lot Management discussion below for more details.

The Product also supports automatic or manual assembly (good) through BOM or Bills of Materials. Assembly can be performed manually, make-to-order or make-to-kit at the time of shipment (good). ADempiere’s manufacturing ability far exceeds any requirement for wholesale distribution.


ADempiere scales to 100 concurrent users easily (good). ADempiere’s scales to 300 concurrent users using common IT tools like state-aware load balancers and database clusters (good). Moving beyond 500 concurrent users will require a more in depth investigation.

Technology Stack

ADempiere is written in Java. The local client is Java Swing-based. The web (WebUI) client is Java zk-based. The application can run on one of two databases: (1) PostgreSQL or (2) Oracle. JBoss is the application server.

Here is a presentation I did introducing Open Source ERP to Java Developers.

By the way, I am a pretty big fan of PostgreSQL. I say this after spending 6 years with Oracle DB and 4 years with MS SQL Server.


ADempiere can be deployed locally in a LAN setting or via the cloud in a global setting (good). SaaS ERP is getting a lot of publicity today; however, few people realize how expensive SaaS ERP can be for a growing organization. ADempiere gives you the benefits of Cloud ERP with the high license costs (good). I am a big fan of deploying ADempiere via Amazon’s AWS service to support users in multiple continents.

See the scalability section for more details about deployment tools.

Here is an article discussing the true cost of SaaS ERP – Is it worth it?


The application is well architected (good) in my humble opinion. The code is highly decoupled with a few exceptions. The user interface uses a Model Driven Architecture; therefore, you are not required to know or modify code to extend the application. Creating new windows and extending existing windows is one of ADempiere’s greatest strengths (good).

ADempiere’s code is about 12 years old, and the application has an active international community (good). It is my experience that ADempiere is young enough to be modern and old enough to be feature rich and stable (good).

Here is an article discussion the most popular Open Source ERP systems.

User Interface

ADempiere is ugly, and that is a good and a bad thing. It is good because you can create and modify windows without touching a single line of code. It is bad because the curb appeal is somewhat lacking.

The changes you make to windows automatically extend to both the Java Swing client and the zk WebUI. Almost all user interface changes occur in configuration. This fact means that non-technical business members can help improve the product’s usability. This comment cannot be stated strongly enough (good)!

Here is a video highlighting the user interface.

How to Extend

ADempiere’s ability to extend is amazing (good). Common modifications range from adding new fields to a window, to automating the propagation of these new fields, to creating entirely new concepts that did not exist in ADempiere before.

ADempiere has the good ability to package and propagate changes between environments. For larger organizations, you can move and test changes through multiple environments to ensure production changes are high quality and stable.


I love ADempiere’s accounting abilities (good). The core ADempiere accounting engine is robust, and it contains the tier 1 architectural features that you would expect. ADempiere has a concept of an Organization. Each Organization refers to a business unit. You will create an organization for every entity you want to create financial reports. You can access multiple organizations simultaneously. This is good. You can create a hierarchy between organizations to allow for easy consolidation reporting. This is good as well.

This video gives a good overview of the general ledger (GL) accounts used to buy, store and sell goods.

The system manages intercompany transactions between organizations. This is good. The system handles arms-length-transaction revenue recognition in a semi-automated fashion This feature is known as ‘counter docs’. This is a good feature.

The system posts to an accounting table called Fact_Acct. Every posting record points back to its document and line if applicable. This point is important for two reasons:

  1. You can treat the Fact_Acct table like a reporting cube inside any business intelligence or financial reporting tool (good).
  2. You can easily link the business document (a vendor invoice for example) to its related posting. This is especially important for defending balance sheet accounts in a multi-currency environment (good).

Accounting Reporting

The financial reporting in ADempiere is both good and bad. I would argue it is more bad than good due to a lack of canned reports. All the underpinnings are there for an incredible accounting system; however, the lack of existing canned reports leave you or your integrator to create some reports from scratch. Financial reports fall into two categories: (1) financial statement reports, and (2) account defense reports.

  1. Financial statement reports include your Income Statement, Balance Sheet, Cash Flow, etc… These documents communicate audited financial results. Just the basic reports exist. Microsoft Dynamics, for example, offers better canned report options.
  2. Account defense reports include Aging, Accrued Purchases or Not Invoiced Receipts (NIR) or Goods not Invoiced (GNI), Bank in Transit, Accounts Receivable, Accounts Payable, UnReconciled Payments, etc… These documents help audit and defend your financial results. Some of the above reports exist; however not all (bad). Most do not exist for multi-currency defense reporting. I install my own versions (good). More on this topic below.

The financial report ‘engine’ is great (good) with one critical flaw (bad). The most powerful feature of the reporting engine is your ability to nest (create hierarchies) accounts. You can report on the individual accounts or the nested hierarchies. This feature allows for fast and accurate report generation. The one critical flaw is the lack of the ability to specify a date range when running an income statement. Your choices are year to date and period to date. You can still determine account balances for a specific date range; however, you just cannot do it in your Income Statement.

Dynamic Account Combination

ADempiere uses dynamic general ledger posting. This means that a given document uses its fields to derive the accounting segments. Therefore, ADempiere can include segments like Business Partner, Product, Project, Sales Campaigns, Activities, Sales Regions, etc… in the general ledger. Accountants love this feature (good) because you can create Income Statements based on business activities. Sales Campaigns represent a good example. ADempiere will automatically record Revenue by Sales Campaign. Accounting can post expenses to specific Campaigns. As a result, Accounting can produce accurate ROI measures based on real revenue and expenses.

Accounts Payable and Accounts Receivable (AP and AR)

I am a big fan of how ADempiere manages Accounts Payable (AP) and Accounts Receivable (AR) (good). There are two facts that make receivable and payables in ADempiere strong:

  1. Single list of business partners (customers, vendors and employees in one list).
  2. Same architecture for both AP and AR

Because of these two facts, you can manage a high degree of scenarios without ‘working around’ the system. This power is best described with an example: You can apply an open AR Invoice to an open AP Invoice and every ties nicely (good). Anyone who has ever faced this battle will smile from ear to ear.

The aging reports for invoices are good. They just work. The only downside (bad) is the fact that it only expresses the open balances in terms of the document’s currency. This fact causes issues when you go to defend your general ledger AP or AR balances. There is more discussion about this topic below.

It is important to note that ADempiere manages invoices and payments using separate accounts. Open AP Invoice balances are held in AP general ledger accounts. Open AP Payments balances are held in Payment Selection general ledger accounts. This fact is both good and bad. If you are a larger company managing multiple currencies, this is a great (good) feature because it allows you to have incredible insight into what documents are contributing to what balances. If you are a smaller single-currency company, this is a hindering feature (bad) because it adds complexity as compared to simple accounting systems.

By default, there is no consolidated aging report (invoices and payments in the same report) (bad). I use a report from Adaxa, an Australian ADempiere integrator, to solve this issue. It is also worth mentioning that Adaxa is a major contributor to the ADempiere project – thanks!!

Multiple Currencies

The ability to manage multiple currencies is both good and bad. The architecture of how ADempiere record rates and GL postings is as good as any tier 1 ERP (good). The canned reports to help ensure your individual and consolidated financial statements are accurate practically do not exist (bad). As a result, I have created my own reports to support the balances of the critical balance sheet accounts.

It is worth mentioning that ADempiere posts to the general ledger in both the source and document currencies (good). Being able to run a trial balance or reporting on the general ledger in both currencies helps ensure the system is balanced and accurate. In my experience, my most diverse customer is spread between 6 organizations and 10 countries. We exercise general ledger reporting extensively. This feature is also what helps provide the balance sheet defense reports (good).

It is also worth mentioning that Adaxa created an Account Reconciliation tool that helps match offsetting general ledger entries (good). This tool helps reconcile any account where one or more actions put money into a general ledger account and one or more actions remove money from the same account. By creating a common link code for all symmetrical general ledger entries, you can see what ‘open’ postings represent that account’s open balance. This tool is valuable in two ways:

  1. If you are out of balance, and you need to see all offsetting general ledger entries, this tool will help you make quick work of millions of GL postings.
  2. If you have low volume accounts where you need to ensure that every dollar put in eventually goes out, this tool provides a very nice and easy interface. Accruals fit this description.

The Adaxa Account Reconciliation will be released in ADempiere version 3.8. I am specifically calling this tool out because of its ability to manage high volumes of postings and its simplicity of use (good).

I mention the Adaxa Reconciliation tool as part of the multiple currency section because defending open balances across documents with multiple currencies is very challenging in high volumes. This tool provides amazing insight (good).

I do not recommend using this tool for high volume accounts like AP, AR, Bank, Bank-in-Transit, Not Invoiced Receipts (Accrued Purchases), and some of the clearing accounts. The reason is that you already are going through the process of matching, allocating, and reconciling these accounts as part of your normal everyday business. There is no reason to perform the same process twice. Instead, you should create sub-ledger-based reports that derive your open balances for these high-volume accounts. Let me know if you need more information…

Multiple Organizations

ADempiere allows you to manage multiple sets of books inside the same login (very good). This feature is probably my most favorite within ADempiere. When accountants witness this feature, they both smile and cringe at the same time. They smile because the system allows you to:

Create individual and consolidated financial reports from one system.
Stay logged into the same system for all organizations.
Obtain insight across all organizations within the same report. Topics include inventory, open sales and purchase orders, financial reports, etc…
The cringing comes because much of new ADempiere Controller’s work goes toward proving the system is stable and accurate across all organizations. ADempiere has proven stable every time (good).

Order Management

ADempiere’s ability to manage orders is good. The document management and approval process is excellent. Here is an article that elaborates on the order and document workflow process.

You can attach any document to any record in ADempiere (very good). This is particularly useful when vendors send you specification sheets, certification of conformance, order confirmations, etc… This is also useful when customers send you purchase orders. Being able to zoom to any order from anywhere in the system and view the original documents helps with quality certifications like ISO:9000:xxxx.

ADempiere has a strong change log or audit trail (good). Any change by anyone to any field in any record is logged. There are few questions as to why or how a situation occurred.


ADempiere role and security management is good. The roles are flexible. You can nest roles. You have control over window access, field access, and even record access. The ability to isolate roles from specific organizations is good. The programming interfaces used to manage security are intuitive and easy to work with.

The biggest weakness in security architecture has to do with usability. You can log in with only one role. Changing roles requires you to logout then log back in (bad). For most situations this is a non-issue; however, there is always that one person who can and does do everything. In this situation, you either create a Super User role, or you force them to switch between the existing roles.


Returns in ADempiere are bad. While it would not take much to greatly improve the returns process, the default system is not desirable. The below sections explain your options.

Customer and Vendor RMAs
The Customer and Vendor RMA depends on previous shipments and receipts. This is bad. When going live, you do not have previous shipments and receipts. The actuals Returns Receipt and Shipment windows are defaulted from the original shipments and receipts. This is bad. There is no way for the person who is creating the RMA to specify what warehouse or what lot number to use as part of the return process.

The returns process unwinds the original general ledger postings exactly. This is bad. Typically, you want a AR Return Memo to touch a Returns general ledger account and not Revenue.

Negative Order for RMAs
It is worth mentioning that you can use negative Purchase Orders, Sales Orders, Material Receipts, and Shipments to process RMAs. While this concept provides much freedom and flexibility, it also is not intuitive (bad). The negative Purchase and Sales Orders play with reservations and replenishment (bad).

Lot Material Management (WMS)

Lot requirements play a big role in how well ADempiere performs for your organization. Lot management typically falls into three categories:

  1. No lot management – ADempiere performs very well (good) in this situation. It just works!!
  2. Strict lot management – ADempiere performs OK in this situation. I elaborate more below.
  3. Hybrid lot management – ADempiere performs well (good) in this situation.

No Lot Management

ADempiere performs well (good) when managing inventory where lot management is not needed. It just works!!! Behind the scenes, ADempiere will track your lots for your. Your biggest task is to update the storage reports to remove visibility into lot details.

Strict Lot Management
Regarding strict lot management, ADempiere has the ability to capture lot tracking on all material management windows. This is good. Where ADempiere tends to struggle with strict lot management is with fulfillment. A business will typically fulfill using one of two methods: (a) system picks the lot or (b) user picks the lot.

Strict Lot Management – System Picks

In the ‘system picks’ lot scenario, ADempiere will need to be modified to write each lot ID to each shipment line. While his change is low in scope, it is a change. Because it is a change, it gets flagged as both good and bad. How can this be both good and bad? It is bad that you need to modify the default behavior. It is good that you can change the behavior to do exactly what you want with just a little effort.

Strict Lot Management – User Picks

In the ‘user picks’ lot scenario, ADempiere will need to be modified to allow the user to specify what lots were picked for each shipment line. This change is bad. The scope is larger than the system picks scenario change. It is not an architectural change (that is good); however, it will require a change in how the user interacts with the system. I have made this change before. Let me know if you need more details…

Hybrid Lot Management

With hybrid lot management, you do not use ADempiere’s lot number as your lot number. Instead, you create a license plate label when you receive or create product. You dictate what the lot number looks like. This implementation gives you the most freedom and flexibility. The scope of the change depends on the complexity of your needs. The simple implementation is to scan the lot numbers at your company’s borders to track what products went to what places. Quality requirements (example: ISO 9000) are most easily satisfied by this implementation.

Open Source ERP

Because ADemipere is open source, you get all the source code with the application. This is good because ERP is the one applicaiton that everyone modifies. In wholesale distribution, almost everyone helps support the process of buying, storing, and shipping product; and almost every company is unique in some special way. Because ADempiere is open source, every company can tweak the minor issues in the system that do not perform exactly like you wish.

Here is an article that better illustrates this point: Who Needs a Manual When You Have Source Code – Open Source ERP Guide


I have been very fortunate to lead some great ADempiere ERP projects. Our successes are still being realized today. It is my opinion that your biggest goal and challenge is to determine if ADempiere is a good fit for your organization. If the answer is truely yes, you will create a strategic operational advantage known by few other companies. If yes, your ability to innovate and exceed customer expectations will drive increased profitability well beyond today’s norm.

Here is a discussion regarding “Is ADempiere a good fit

The alternative, if ADempiere is not a good fit, will leave you frustrated and struggling to keep up with you competition. My whole reason for writing this review is to help you begin to make an educated decision. I believe an honest, expert resource is the fastest way to help ensure the correct decision and your business success. I would be honored and privileged for the opportunity to work with your team. Enjoy and good luck!

Please be quick to let me know if I can improve this review in any way. If you found this post helpful, please let me and others know.

Request a Call

About Chuck Boecking

I am an ERP and BI integrator and educator. I believe that open source ERP and BI have achieved mainstream capabilities, and as a result, more companies can create greater efficiency across their organization.

I started using the ADempiere code base in 2003. Back then, it was called Compiere. In 2006, I started my first multi-million dollar installation. Since then, ADempiere has helped me create great success with distribution and manufacturing companies all over the US and Canada.

My vision of success is to find companies that can best use open source ERP and BI to deliver a single, global instance that drives a discontinuous increase in profitability.

I believe that organizations win when they own their technology.

Leave a Reply

Your email address will not be published. Required fields are marked *