Handling Contract Retainage in NetSuite

NetSuite is a powerful ERP system but above everything it is a business platform that can easily be adjusted to meet any business need. In this article, we will focus our attention on Contract Retainage, a concept common but not limited to Construction Industry. We will demonstrate how NetSuite can handle A/R retainage.


Learn more about our NetSuite Services

Learn More


What is Retainage?

A common occurrence in construction industry is the practice of retention of funds, where a percentage of a total value of the project is held back from payment until the customer is satisfied with the project completion. A common retention amount could equal to 5 – 10 percent of the contract value or the amount invoiced, but this could vary. The basic premise here is that the retention provides a customer with some security against any defects on the project.

How does it work?

In a normal scenario, when a contractor earns revenue under an accrual method like CCM (Completed Contract Method) or PCM (Percentage of Completion Method), they will issue an invoice and record this amount as an account receivable (A/R) until the payment is made and the funds are collected. Unfortunately, this method does not apply to retainage.

According to revenue standards, the contractor doesn’t have the right to the retainage portion of an invoice. Therefore, in most cases it cannot be treated as a receivable amount until the contract obligations are fulfilled. Thus, the contractors will keep this amount separately on their books (typically in a separate asset account). Note that some customers may retain these funds for over one year, consequently this may take a serious bite out of contractor’s already narrow profit margins. Therefore, it is important to keep tight control and tracking over the retained assets.

Handling in NetSuite

For practical purposes we will assume that the goal here is to separate regular A/R from Retainage A/R. Also, we will not issue the Retainage Invoice until the date when contractor’s obligations are met, and the customer is willing to release the retained funds.

When the Contractor is generating a Sales Order or an Invoice, it is helpful to stipulate the Retention fees that the customer will retain and not pay until the inspections are completed and the contract is finalized.


Learn Our NetSuite Services

Learn More


  • We create a non-posting discount item in NetSuite. We can set the % of retainage directly on the item record. Note, the non-posting discount will help us reduce the A/R by the retention percentage.
  • On the Invoice issued to the customer we will add the subtotal line and underneath we will apply the retention item.
  • As seen in the image above, the system will reduce the Invoice amount by the ‘Retention’ percentage on the retention line. The user will set the date when the retainage is to be Invoiced, by which time all contractual obligations should be met (Retainage Invoice Date is a custom line field).
  • This Retainage Invoice Date can be used to create a Saved Search that we can quickly turn into a reminder.
  • This helps the A/R team stay on top of any retained funds and generated Retainage Invoices when needed.
  • Note, we created a simple workflow that will show the [Invoice Retainage] button only if the retainage was not invoiced and the ‘Retainage Invoice Date’ is the past.
  • When you click on the button, a new Invoice transaction will pop-up.
  • Notice, all fields (highlighted fields) linking to the original customer and the original invoice are pre-populated. The only portion that must be populated by the user is the Items tab.
  • The user will add the ‘Contract Retainage’ item and the amount that equals to the funds retained on the original Invoice.
  • After saving the Retainage Invoice, the user will go to the original invoice and make sure that the retention line is flagged as ‘Retainage Invoiced’.
  • After this change on the original Invoice, the reminder will be updated automatically.
  • Note, the last two steps can be automated to avoid any potential errors.

Accounting Considerations

In the example that we walked you through above, we configured the ‘Contract Retainage’ item (which was added to the Retainage Invoice) to produce the following GL impact:

Depending on the company’s accounting policies we can do the following:

  1. Use a separate A/R account to track ‘Retainage’ aging.
  2. For each accounting period generate a reversing Journal Entry that will move our total retained funds into a special (other current asset) account. The reversal will ensure that whatever retainage was invoiced no longer appears in our special asset account. This practice is useful when company wants to show retained funds on their books especially if the contracts are executed over a prolonged period of time.

Note, a simple report (similar to the reminder shown above) can be created to show the amount that must be booked via a Journal Entry.

Final Thoughts

In conclusion, we demonstrated a semi-automated way of handling retainage in NetSuite. This process can be further enhanced and automated if your organization has other unique needs or large volume of transactions. In any case, we hope that we gave you some direction and ideas on how to deal with this common occurrence in the construction realm.

Also, don’t hesitate to reach out to us if you have any questions or suggestions on an alternative approach to retainage.

6 thoughts on “Handling Contract Retainage in NetSuite”

  1. Was the form linked to the original invoice, was it done via client script or was the invoice number pulled in via the workflow? How was it accomplished? Thanks in advance!

  2. How we can edit the custom column created as (Invoiced YES / NO) if the original invoice is in closed period?
    will this be possible using workflow as Edit Button will not be available in case the period closed?

  3. Hello Fahad,

    Unfortunately, you will not be able to edit the Invoice that is in the closed period.

Comments are closed.