Understanding cost of goods sold (COGS)

Cost of goods sold (or cost of sales) is the total direct cost of every unit of stock which has sold within a period of time. For example, this cost could be comprised of the cost of buying or manufacturing the unit, or duties or customs charges levied on the unit.

On the income statement (profit and loss report), this value is taken away from the revenue recorded to give a figure for gross profit.

Brightpearl uses a method of inventory accounting called perpetual inventory accounting. This differs from the traditional method of inventory accounting, periodic inventory accounting.

Periodic inventory

In traditional (“periodic”) inventory systems, the value of the stock is counted at the beginning of a period, then again at the end of the period (which is carried forward as the “opening stock” of the next period).

The cost of goods sold is then calculated as:

Opening stock value + purchases made - closing stock value

Where the “purchases” value is determined by the net value of purchase invoices relating to goods posted in the period.

In terms of the actual entries posted to the accounts, this method means entries relating to stock are only posted when transferring the stock value from the balance sheet to the income statement and vice versa, and purchase invoices are posted directly to the income statement.

This has several drawbacks, chiefly that it is not possible to get an accurate profit figure in the middle of a period (as closing inventory is only counted at the end of the period).

Perpetual inventory

In Brightpearl, every time a stock movement occurs (i.e. inventory received on purchases or credits, sold on sales, or manually adjusted) an entry to a stock (asset) code is made.

When stock is sold on a sale or manually adjusted, the other side of the entry posts to the product's ‘purchases’ code (as set on the product record). In Brightpearl, the 'purchases' code is really a 'cost of goods sold' code.


One of the main benefits of using Brightpearl is its perpetual inventory accounting. There is no need to factor in opening stock and closing stock because the perpetual inventory system already accounts for it with every cost of goods entry.

The end result is exactly the same, but the perpetual inventory method allows you to view real-time gross profit, involves less manual work and is less prone to error.


To illustrate, say it's Month 1. You buy 100 units of Product A, valued at £1 each. Over the course of Month 1 you sell 10 units.

With the periodic inventory method, if you look at the income statement at the end of Month 1 you will see:

Opening stock 0
Purchases 100
Closing stock (90)
Cost of goods sold 10*

* opening stock + purchases - closing stock = 0 + 100 - 90 = 10

With the perpetual inventory method, you will just see:

Cost of goods sold 10*

* made up of 10 entries of 1

How to enable perpetual inventory accounting in Brightpearl

All accounts use perpetual inventory accounting by default, but there is a setting that can be toggled on or off. The setting is called 'Use "Cost of Sales" accounting' and can be toggled under Settings > Company > Accounting: Options.


If set to “Yes”, Brightpearl will operate using the perpetual inventory system. It will:

  • Post accounting for every inventory movement
  • Use the “stock received not invoiced” code for purchase orders containing stock-tracked items

If set to “No”, Brightpearl will operate using the periodic inventory system. It will:

  • No longer post accounting for every inventory movement
  • Ensure purchases containing stock-tracked items post directly to the income statement

Deferred cost of goods sold

In accounting, there is a principle called the ‘matching principle’ (or the ‘accruals principle’). It states that expenses must be entered into the accounts at the same time as the revenues they are related to. These expenses include the cost of goods sold.

What this means is that the cost of a sale should always be posted to the same period as the invoice.

Because cost is recorded on shipping the goods and revenue is recorded on invoicing the sale, if you ship the goods in one month and invoice the sale in another month, the cost and revenue will be recorded separately.

To mitigate this there are a couple of settings under Settings > Company > Accounting: Options.

Use invoice date as posting date for cost of goods sold

This setting means that if an order is invoiced before being shipped, the shipping journal will be posted with the invoice date instead of the actual date it was shipped.


Defer cost of sales for orders shipped not invoiced (for orders shipped before invoiced)

This setting means that if an order is shipped before being invoiced, the shipping journal will post to a deferred COGS code (typically a liability code, 2060 or 2260 by default) instead of directly to COGS.

Then when the order is invoiced, another journal entry will post to move the value from deferred COGS into actual COGS.


The journals that are posted are as follows:

On shipping:

Tax date Tax code Type Account code Debit Credit
Shipping date T9 / - GO Stock/Inventory   X
Shipping date T9 / - GO Deferred Cost of Goods Sold X  

On invoicing:

Tax date Tax code Type Account code Debit Credit
Invoice date T9 / - GO Deferred Cost of Goods Sold   X
Invoice date T9 / - GO Cost of Goods Sold X  

It is recommended to have both settings enabled.

Have more questions? Submit a request