Suite Utils
Back to Blog
NetSuite TipsAug 26, 2026 • 6 min read

How to Track Last Counted Bins in NetSuite

Learn How to Monitor Last-Counted Bins in NetSuite to Avoid Inventory Discrepancies.

Ethan James MarshalEthan James MarshalSenior SuiteScript Architect & Lead NetSuite Engineer
How to Track Last Counted Bins in NetSuite
On this page

Cycle counting by item leaves bins uncounted when inventory records don't match physical stock. If NetSuite shows zero on-hand in a bin but product is actually sitting there, that bin falls off your count worksheet entirely. The result is inventory discrepancies that compound through the year and surface as stockouts or write-offs during physical inventory.

The Problem with Item-Based Counts

When you create an inventory count in NetSuite, the system generates worksheet lines based on items and their recorded bin locations. If NetSuite believes an item has zero quantity in a bin, that bin won't appear on your count sheet. This is the core issue: NetSuite tracks last-counted dates by item, not by bin location.

Here's the scenario that exposes this gap:

  • Rack 1 physically contains 20 bins
  • Your count worksheet returns 18 bins on Rack 1
  • The other 7 bins in the results are located elsewhere
  • Two bins on Rack 1 have no worksheet lines because NetSuite shows zero on-hand

Those two bins get skipped. If product is physically there but NetSuite has no record of it, the discrepancy goes undetected. Your auditors will ask about this, and the spreadsheet workaround of manually tracking bin counts creates its own reconciliation burden.

What NetSuite's Inventory Count Feature Actually Does

NetSuite's native Inventory Count feature (Transactions > Inventory > Count Inventory) generates counts based on item records, bin assignments, and on-hand quantities. The system uses the last count date field on the item record to determine which items need recounting.

The limitation is structural: bins don't have a last-counted timestamp field in the native record. You can set up a bin-based count by filtering on location and bin, but the worksheet still generates from items with on-hand quantities in those bins. Empty bins, or bins with quantities NetSuite doesn't know about, won't generate lines.

How to Verify Every Bin Gets Counted

You need a two-step approach: run the item-based count, then cross-reference against your physical bin list to identify gaps.

Step 1: Create a Complete Bin List

Use a saved search to pull every bin in your warehouse:

  1. Go to Lists > Search > Saved Searches > New
  2. Choose Bin as the record type
  3. Add filters for Location (select your warehouse) and Bin Number (is not empty)
  4. Add results for Bin Number and Location
  5. Save and schedule this search to run before each count cycle

Export this list to compare against your count worksheet.

Step 2: Compare Count Worksheet Against Bin Master List

After generating your inventory count, export the worksheet lines and sort by bin. Match against your complete bin list. Any bin on the master list without a corresponding worksheet line needs manual verification.

This is where teams lose hours. A warehouse with 5,000 bins and 15,000 items produces a worksheet that takes significant effort to cross-check. The control here is a bin-by-bin physical walkthrough during your January count, not relying on NetSuite's item-based generation.

Using Smart Count SuiteApp for Bin-Level Control

The Smart Count SuiteApp (SuiteApp Marketplace) extends NetSuite's native counting capabilities with handheld scanning workflows. It does track which bins have been scanned during a count session. However, it does not retroactively generate lines for bins NetSuite excluded from the worksheet.

To ensure every bin gets counted with Smart Count:

  1. Build your count worksheet from your complete bin list, not just items with on-hand quantities
  2. Set up count groups by physical zone or rack to make the process manageable
  3. Use the bin-scanning mode to force a physical scan of each bin location, even if the worksheet shows zero expected quantity

The key control here is that Smart Count records the scan event per bin. You can review the count session report to see which bins were physically scanned versus which were skipped.

A SuiteScript Approach for Bin Count Verification

If you need to track last-counted bins systematically, a small SuiteScript can record bin count dates to a custom record. This gives you a permanent audit trail that native NetSuite doesn't provide.

/**
 * @NApiVersion 2.1
 * @NScriptType Suitelet
 */
define(['N/record', 'N/search', 'N/ui/serverWidget'], 
    (record, search, serverWidget) => {
        
        const onRequest = (context) => {
            const binSearch = search.create({
                type: search.Type.BIN,
                columns: ['binnumber', 'location', 'custrecord_last_count_date']
            });
            
            const results = [];
            binSearch.run().each((result) => {
                results.push({
                    binNumber: result.getValue('binnumber'),
                    location: result.getValue('location'),
                    lastCount: result.getValue('custrecord_last_count_date')
                });
                return true;
            });
            
            const form = serverWidget.createForm({
                title: 'Bin Count Status Report'
            });
            
            // Build HTML table from results
            let html = '<table border="1"><tr><th>Bin</th><th>Location</th><th>Last Counted</th></tr>';
            results.forEach((row) => {
                html += `<tr><td>${row.binNumber}</td><td>${row.location}</td><td>${row.lastCount || 'Never'}</td></tr>`;
            });
            html += '</table>';
            
            form.addField({
                id: 'custpage_results',
                type: serverWidget.FieldType.INLINEHTML,
                label: 'Count Results'
            }).defaultValue = html;
            
            context.response.writePage(form);
        };
        
        return { onRequest };
    }
);

This script requires a custom field (custrecord_last_count_date) on the bin record that you update after each count cycle. The script generates a suitelet report showing every bin and its last count date, so you can identify bins that haven't been counted within your required cycle.

Build the Count Schedule Around Bin Coverage

The practical fix for your January count is to structure the count by physical location rather than item value alone. Here's a schedule that ensures full coverage:

Count TypeFrequencyCoverage
Item-based cycle countMonthlyHigh-value or high-velocity items
Bin-based zone countQuarterlyEvery bin in a designated zone
Full physical inventoryAnnuallyEvery bin, every item

For the annual physical, create count worksheets grouped by zone. Walk each rack systematically and scan every bin, regardless of whether NetSuite shows quantity. Record zero-count bins as verified so you have evidence of the physical check.

What to Check Before January

Set up your bin master list saved search now. Run it against a test count worksheet to identify gaps in your current process. If you find bins that NetSuite consistently omits, those are the locations where unknown inventory is likely hiding.

The bottom-line impact is straightforward: if you can't prove every bin was counted, you can't trust your on-hand quantities. A bin-level tracking process gives you clean, reconciled, and audit-ready inventory data.

About the author

Put these ideas to work.

Suite Utils builds small NetSuite tools that fix the specific thing breaking your day. Each one runs as a native SuiteScript SuiteApp inside your account. No sales call, no onboarding.

Browse the Tools

Enjoyed this one?

Get NetSuite tips like this in your inbox. No spam. Practical guides only.

Keep reading