ERPNext perpetual inventory accounting

How ERPNext keeps stock value and the stock ledger in sync through perpetual inventory, warehouse accounts and stock received not billed, and what a move from periodic inventory involves.

On this page

When ERPNext perpetual inventory accounting matters for your books

If your balance sheet carries inventory, the stock value reported in your books has to match the stock ledger at every period end. ERPNext perpetual inventory accounting is the setting that makes this happen: each stock movement posts to the general ledger at the moment it occurs, so the inventory asset moves in step with the physical goods. Distributors, retailers and manufacturers with meaningful stock holdings usually need this, because cost of goods sold and inventory value are then correct on any date, not only after a month-end count and adjustment.

Perpetual inventory is controlled per company. In ERPNext, each company has default accounts for stock in hand and for stock received but not billed, and each warehouse can be linked to its own asset account, so a branch or a consignment location can report separately. Receipts debit the warehouse's stock account and credit the stock received but not billed account until the supplier invoice arrives. Deliveries credit the stock asset and debit cost of goods sold. Before go-live, confirm with your accountant which accounts each warehouse maps to, whether your chart of accounts supports one stock account per location, and how your auditors expect the stock received but not billed balance to be cleared. ERPNext's migration guide sets out the steps for moving an existing periodic setup.

Periodic inventory is the alternative: stock value is calculated and booked at intervals, usually at period end, rather than with each movement. It can suit a business with few stock transactions, simple goods and a low inventory balance, where the cost of posting every movement to the ledger outweighs the benefit. Choose perpetual inventory if you need current gross margin by product, stock valuation for lenders or auditors at any date, or accurate cost of sales for pricing. Test the decision against your own volumes, and confirm with your finance lead whether a switch will require a cutover date and a reconciled opening balance.

How the stock ledger, warehouse accounts and GL entries connect

Perpetual inventory in ERPNext works because four records are posted from the same stock movements: stock ledger entries, stock value, warehouse-linked accounts and the general ledger. When one of them drifts from the others, the balance sheet and the stock report stop agreeing. The cards below describe each part and what to check before go-live.

Stock ledger entries

Every receipt, delivery, transfer and manufacturing movement writes a stock ledger entry with quantity, rate and warehouse. This ledger is the source for stock balances and valuation, so it is the first place to look when a stock value does not match the report. Before go-live, confirm that opening balances were posted through a stock reconciliation rather than typed into the item master, and that each warehouse has a single owner for corrections.

Stock value per warehouse

The stock value of an item is the quantity on hand multiplied by its valuation rate, and it is tracked per warehouse. A company can hold the same item in several warehouses with different rates, so the valuation view must be read per warehouse as well as in total. Check that the valuation method is set for each item before stock moves, because changing it later affects how existing stock is valued.

Warehouse-linked accounts

With perpetual inventory enabled, each warehouse is linked to a stock asset account in the chart of accounts. Postings from stock movements debit or credit that account, so the balance of the account should equal the stock value of the warehouse. Confirm the account mapping for every warehouse, including transit and rejected-stock warehouses, before any transaction posts against them.

Stock received but not billed

When goods are received on a purchase receipt before the supplier invoice arrives, ERPNext posts the value to a stock received but not billed account as a liability clearing balance. The invoice later clears this balance and posts any price difference. Review this account at each period close, because goods that are received but never billed will leave it with a balance that needs a decision.

Purchase and sales invoices

Purchase invoices and sales invoices post to the general ledger in addition to the stock movements that accompany them. Whether an invoice updates stock depends on settings such as the update stock option and whether it follows a receipt or delivery note. Check that invoices are not used to move stock twice, since a double posting is a common cause of stock value that differs from the ledger.

General ledger entries

Each stock movement and invoice creates general ledger entries against the accounts described above, and the stock ledger and general ledger must reconcile for each company. Use the stock and account balance reports to compare the two at period end. Agree with your finance team who signs off this reconciliation and what happens when a difference is found after a period is closed.

Perpetual versus periodic inventory: which fits which business

This table compares perpetual inventory per company with the periodic inventory alternative that ERPNext documents. Read each row as a question you need to answer for your own stock and books, then use the effort row to weigh ongoing workload against control. The main takeaway is that perpetual inventory keeps stock value current between periods, while periodic inventory trades that visibility for simpler day-to-day posting.

FactorPerpetual inventoryPeriodic inventory
When it fitsBusinesses that hold significant stock, sell across several warehouses, or need current stock value for margin, pricing and month-end decisionsBusinesses with few stock movements or low inventory value, where a periodic count at period end is enough for reporting
Stock ledger and balancesStock ledger and warehouse account balances update with each receipt, delivery and transferStock ledger is updated for physical movements, but the inventory account is adjusted only at the stock count or closing step
What the books show between periodsCurrent stock value per warehouse and per item, with stock received but not billed visible until the supplier invoice arrivesInventory value on the balance sheet reflects the last count, so interim gross margin may be overstated or understated
Warehouse accountsEach warehouse is linked to an inventory account, so stock value posts to the ledger in real timeWarehouse accounts are not used for ongoing postings in the same way, and the value is booked at the period close
Setup per companyEnabled per company as the basis for stock accounting, with warehouse accounts configured before live transactionsSet up as the alternative documented by ERPNext, with the switch and period close steps confirmed before go-live
Effort to maintainHigher daily discipline on receipts, invoices and returns, plus reconciliation of stock received but not billedLower posting effort, but a period-end count, valuation and journal work that must be completed on time
Migration from the other methodRequires an opening stock position and a documented procedure, so confirm the steps in ERPNext's migration guide before cutoverMoving away from periodic later requires the same opening position and reconciliation of existing stock value to the ledger
Questions to confirmWhich companies and warehouses need their own accounts, and who owns stock received but not billed reconciliationHow often counts occur, whether auditors accept period-end valuation, and how interim reporting will be handled

How to set up perpetual inventory in ERPNext

This sequence turns on perpetual inventory for the company, maps each warehouse to its stock account, and sets the stock received but not billed account. Each test transaction and reconciliation step confirms that stock movements and the general ledger agree before live trading starts.

  1. Enable perpetual inventory on the company

    Open the company record for the entity that holds the stock and turn on the perpetual inventory setting. This makes each stock movement post to the general ledger when it happens, instead of waiting for a period-end stock valuation. Do this before any stock transactions are posted, because the setting controls how entries are created. You know the step is done when a test purchase receipt for a stock item produces general ledger entries. If you are moving from periodic inventory, follow the migration procedure in the ERPNext documentation before you post live transactions.

  2. Assign stock accounts to each warehouse

    Give every stock warehouse its own stock asset account in the chart of accounts, then set that account on the warehouse record so receipts and deliveries reach the correct balance sheet line. Agree the structure with finance first, since changing it later means moving balances between accounts. The controller and an ERPNext administrator should own this work. Check it by opening the stock balance per warehouse and confirming that each warehouse shows the account you intended, with no warehouse left unmapped. Exact menu paths are in the ERPNext documentation.

  3. Set the stock received but not billed account

    Set the stock received but not billed account in the company defaults. This liability holds the value of goods you have received but not yet invoiced, and it clears when the supplier invoice is matched to the receipt. Choose an account that finance reviews at each period close, so unmatched receipts stay visible. Check the setting by confirming that the account appears in the company defaults and that a later test receipt credits it. If finance cannot find this balance on the trial balance, the account mapping needs review before go-live.

  4. Post a test purchase receipt

    Create and submit a purchase receipt for one stock item using a test supplier, either in a staging company or in a controlled sample on the live site that will be reversed. Open the stock ledger and general ledger entries for that voucher. The expected result is that the warehouse stock in hand account increases by the receipt value, and the stock received but not billed account is credited by the same amount. Confirm that the stock balance report shows the quantity in the correct warehouse. If the amounts differ, stop and check the item valuation rate and the warehouse account mapping before posting anything else.

  5. Match the test receipt with a purchase invoice

    Create a purchase invoice from the test purchase receipt, keep the item rate the same as the receipt, and submit it. Rate differences post to a price variance account, so a clean match depends on the rates agreeing. The expected result is that the stock received but not billed balance for that receipt is debited and falls to zero, while the supplier payable carries the invoice amount. Review the general ledger for the invoice and confirm the unbilled balance is cleared for that receipt. Then cancel or reverse the test documents so they do not affect reported balances.

  6. Reconcile stock value to the general ledger

    Run the stock balance and stock value reports for the period and compare the total with the balances of the stock asset accounts in the trial balance, one company at a time. Investigate any gap before reporting. Typical causes to check are backdated entries that were not reposted, warehouses mapped to the wrong account, and unbilled receipts left open from earlier periods. Repeat this comparison at each period close. The setup is complete when stock value and the ledger agree for every warehouse account, or when each remaining difference has a documented explanation and a named owner.

How to migrate from periodic inventory without breaking stock value

The first decision is timing: a switch from periodic to perpetual inventory is safest at a clean accounting boundary, such as the start of a fiscal year or the close of a period that finance has already reconciled. ERPNext documents a migration procedure for moving to perpetual inventory and also describes a periodic inventory alternative, so read both before deciding which setup fits the company. Before any stock entries are created, freeze transactions for the affected company so that no receipts, deliveries or invoices land while the opening position is being built. Confirm with finance which period is the cut-off, who approves the opening stock value, and whether the stock valuation accounts in the chart of accounts already carry balances that must be matched. Then work through the documented steps in order: set the perpetual inventory flag for the company, assign warehouse accounts for stock in hand and the stock received but not billed account, and record opening stock so the stock ledger value agrees with the balance on the balance sheet.

A mid-year switch carries the most risk. Stock movements recorded before the switch are valued under the periodic method, so the stock ledger has no history to explain the value that the general ledger already reports. Any difference between the opening stock value and the balance in the stock in hand account will show up later as a reconciliation gap, often in the first month-end close. Other risks include invoices posted against receipts that were booked under the old method, goods received but not yet billed that were never accrued, and warehouses mapped to the wrong account. Use the stock and accounts reports to compare the opening value with the chart of accounts, and do a trial run on a copy of the site before the live switch. Ask finance to confirm three things before go-live: the cut-off date, the owner of each warehouse account mapping, and the sign-off criteria for the opening balance. The exact procedure and any settings should be checked against the version your team runs, since the steps are documented per release.

Questions buyers ask before setting up perpetual inventory

What drives the cost of setting up perpetual inventory in ERPNext?

The cost depends mainly on how many warehouses, companies and item types you have, how clean your opening stock data is, and how many historical transactions must be reconciled. Each of these changes the number of accounts to map, the number of reconciliation checks to run and the amount of testing before go-live. A partner quote should separate the one-time work (account mapping, opening balance load, testing, training) from any recurring work such as support or upgrades. Ask for the cost of each component so you can see which part your own team could take on. DeployOpen does not publish prices. A quote follows from a written scope.

How long does a perpetual inventory switch take?

The duration depends on the size of the stock ledger, the number of warehouses and companies, and how quickly your finance and stock teams can confirm balances. The longest steps are usually data cleanup and the reconciliation of stock value against the general ledger, not the configuration itself. No fixed duration is set here because it varies widely by environment. Ask any partner for a timeline tied to a written scope, and confirm with your own finance team which period-end you want to switch on, since that date shapes the work plan.

What does the work need from our finance and stock teams?

Finance needs to confirm the chart of accounts, the stock-in-hand and stock received but not billed accounts for each company, and the cut-off date for opening balances. Stock teams need to confirm physical counts, the warehouse list, and which items are serialized or batch tracked. Both teams should agree who signs off each reconciliation and who answers questions about backdated receipts or invoices. Without named owners on both sides, the reconciliation step tends to stall, so assign these roles before the build starts.

Can our own team set up perpetual inventory without a partner?

A capable ERPNext administrator with finance and stock support can configure perpetual inventory for a simple, single-company setup, especially if the team has already tested in a non-production site. The risk rises with multiple companies, several warehouses, serial or batch items, or a migration from periodic inventory where opening values must tie to the ledger. Check whether your team has run ERPNext in a staging environment, has a tested restore path, and can reconcile stock values to the general ledger. If any of these is missing, a fixed-scope engagement can cover those gaps.

How should we handle backdated stock entries after switching on perpetual inventory?

Backdated receipts, deliveries and invoices change the valuation of stock after the entries that depend on them, so they need a documented process before go-live. Decide who may post backdated entries, set a clear cut-off for changes to closed periods, and agree how corrections are reviewed. Stock reposting is the mechanism ERPNext uses to recalculate valuation after such entries, so test it on a copy of your data first. Check the reposting settings and the effect on reports with your own environment before you allow users to post backdated documents in production.

Which ERPNext version should we use for perpetual inventory?

Choose a version that is still supported for the life of your project. According to Frappe's supported versions page, version 14 reached end of life on January 31, 2026, version 15 is planned to be supported until the end of 2027, and version 16 until the end of 2029. Starting a new implementation on an unsupported version creates upgrade work before you go live. Confirm the current support dates on the supported versions page, and plan for the minor releases both supported versions receive regularly.

What should we test before enabling perpetual inventory in production?

Test on a copy of production data with the same companies, warehouses, items and valuation methods you will use live. Run a receipt, an invoice, a delivery and a stock transfer for each warehouse, then confirm that the stock ledger, stock balance and general ledger agree. Repeat the test with a backdated entry and a landed cost voucher, if you use them. Record the results and the names of the people who signed them off. A written test script makes the go-live decision traceable for auditors and internal reviewers.

Does the ERPNext license or hosting choice change the cost of perpetual inventory?

ERPNext is licensed under GPL-3.0, and according to the ERPNext pricing page, self-hosting is free. Your recurring costs will therefore sit in infrastructure, backups, support and any retainer you choose, not in the software license. If you use Frappe Cloud, the pricing page lists shared site hosting from 5 US dollars per month and servers from 20 US dollars per month for shared instances. Confirm current hosting prices on the pricing page, since they can change, and ask any partner to separate hosting, support and implementation in the quote.

Controls that protect stock value and audit trails

Stock value in ERPNext moves through many documents, and any user who can post a receipt, change a warehouse or edit a valuation account can change the books. The cards below cover the controls that decide who can do that, how users sign in, and how changes can be traced afterward. Each one should be tested in your own environment before go-live.

Role permissions on stock documents

Purchase receipts, stock entries, delivery notes and stock reconciliations each post to the stock ledger and the general ledger. Map which ERPNext roles can create, submit, cancel and amend each of these documents, and separate the people who record movements from the people who approve valuation changes. Check that cancellation rights are narrower than creation rights, because a cancelled receipt reverses its postings. Test the matrix with a user from each role before go-live.

Who may change warehouse accounts

Each warehouse can be linked to a stock asset account, and that link decides where stock value is booked. Changing it on a live warehouse can split the stock value between accounts and make the stock ledger and the balance sheet disagree. Limit edit rights on Warehouse and on company default accounts to a small finance group, and ask the implementation partner to document who approved each account mapping at setup. Review the list at every chart of accounts change.

Restricting valuation and accounting changes

Valuation method and default inventory accounts affect cost of goods sold for every item in the company. Keep these settings with the finance administrator role, and require a written change record before anyone alters them. Confirm which users can post journal entries against stock asset or stock received but not billed accounts, since a manual entry there bypasses the stock ledger. Treat any such entry as an exception that needs a documented reason.

Sign-in through LDAP

ERPNext can authenticate users against Active Directory or OpenLDAP through LDAP Settings, with SSL/TLS options and automatic mapping of LDAP groups to ERPNext roles at each login. This means a directory group change can grant or remove stock and accounting roles without a manual ERPNext update. Confirm the group-to-role mapping with your identity team, and confirm that leavers are disabled in the directory, since their ERPNext access follows the directory state.

Sign-in through social login

Frappe's Social Login Key lets ERPNext users sign in through providers such as Google, Microsoft, GitHub or Facebook, or through custom OAuth or OpenID Connect endpoints. Social login authenticates the person, but it does not by itself assign the ERPNext roles that control stock and accounts. Decide which identity provider is allowed for finance users, and confirm that role assignment stays in ERPNext or in a controlled group mapping.

Audit trail of document and value changes

Confirm which changes ERPNext records for stock and accounting documents, including who submitted, cancelled or amended a document and when. Document versioning and the stock ledger show movements, but an edit to a master record such as a warehouse or an account may need a separate review. Test an amend and a cancel on a sample receipt, then export the resulting entries to confirm that a reviewer can reconstruct the sequence. Ask your partner which audit fields are retained and for how long, since no retention period is supplied here.

How DeployOpen scopes and delivers perpetual inventory work

Perpetual inventory work starts with a written scope, not with configuration. Before any build, DeployOpen and the client agree in writing which companies are in scope, which warehouses hold stock that must be valued, and how opening stock will be counted and loaded. The scope also names the reconciliation evidence the client expects at the end: a stock ledger that ties to the stock-in-hand balances in the general ledger, a list of warehouse accounts mapped to the right company, and a record of the opening valuation by item. Deliverables and timelines follow from that document, so the client can see what is included before the work begins. Ask for the scope to list each company and warehouse by name, because a missing warehouse is the most common reason a reconciliation fails late.

The build then follows the agreed scope in sequence. DeployOpen sets the perpetual inventory option per company, configures the warehouse accounts and the stock received but not billed account, and loads opening stock through a controlled stock reconciliation. Test transactions cover a purchase receipt, a purchase invoice billed later, a delivery note, a sales invoice and a stock transfer between warehouses, each checked against the stock ledger and the general ledger. Where the client has existing periodic inventory data, the migration steps described in ERPNext's own documentation are followed and each step is logged. The handover includes the reconciliation workbook, the test transaction record and a short run book for the finance and stock teams.

DeployOpen prepares the books, controls and evidence for the client's own auditors, but it does not issue audit reports, attestations or certifications. Those remain the decision of the client's external auditor, who will set their own sampling and testing. Confirm with your auditor before work starts which balances, periods and reports they will want to inspect, so the reconciliation evidence matches what they need. Also confirm who in your organization approves the opening valuation and who signs off the first closed period, since those sign-offs are the controls auditors most often ask to see.

How DeployOpen works on ERPNext inventory accounting

DeployOpen plans, implements, customizes, documents and supports ERPNext inside your own infrastructure, including the perpetual inventory setup per company, warehouse accounts and stock received not billed. Each engagement starts from a written scope that defines which companies, warehouses and item groups are covered, so finance and stock sign off on the same rules before go-live.

How we scope

  • Map each company, warehouse and item group that needs its own stock and valuation accounts
  • Agree in writing which periodic inventory items, if any, remain outside perpetual tracking
  • Confirm the ERPNext version and hosting model before any accounting configuration starts

How we build

  • Configure company defaults, warehouse accounts and stock received but not billed accounts together
  • Test receipts, invoices, returns and stock transfers against expected ledger and balance results
  • Prepare the cutover from periodic to perpetual inventory with reconciled opening stock values

How we hand over

  • Document the account mapping, posting sequence and reconciliation steps for your finance team
  • Provide a runbook for clearing stock received but not billed and checking stock to ledger balances
  • Walk your accounting and stock owners through the controls before the written handover is signed

How we support

  • Engagements are fixed-scope, with scope, deliverables and timelines agreed in writing before work starts
  • Ongoing support, upgrades and continuous testing are available as a retainer after handover
  • Ask any quote to separate one-time configuration work from recurring retainer support

Talk to our team.

Tell us what you're working on, whether it's a deployment, an audit, a security test or a cyber range. You'll speak with an engineer who can help you scope it.

  • 30-minute call: free, with no obligation.
  • NDA on request: we can sign before you share details.
  • Clear next steps: a scope and plan after the call.