Interactive Example IE-3

AR Open Invoice Import

A GAAP-compliant checklist for migrating open Accounts Receivable invoices to NetSuite without duplicating revenue. Includes GL flow visualization and auditor-ready documentation templates.

6 Phases
51 Checklist Items
ASC 606 Compliant
Understanding the Problem

The Double-Count Trap

Why importing AR invoices without a clearing account duplicates your revenue.

The Scenario

When migrating to NetSuite, you typically load data in two ways:

  1. Trial Balance (GL History) — Your aggregate financial position, including one AR number
  2. Open Invoices (Transactional Detail) — Individual customer invoices that make up that AR

The problem: Both hit the AR account. Without proper handling, you double your AR balance and potentially recognize revenue twice.

What Goes Wrong (Without Clearing Account)

flowchart LR
    subgraph Legacy["Legacy System"]
        AR1["AR Balance: $100,000"]
        REV1["Revenue: $500,000<br/>(lifetime)"]
    end

    subgraph NS["NetSuite (WRONG WAY)"]
        TB["Trial Balance Load<br/>DR AR $100,000"]
        INV["Invoice Import<br/>DR AR $100,000<br/>CR Revenue $100,000"]
        RESULT["Final AR: $200,000 X<br/>New Revenue: $100,000 X"]
    end

    AR1 --> TB
    AR1 --> INV
    TB --> RESULT
    INV --> RESULT

    style RESULT fill:#fee2e2,stroke:#ef4444,color:#991b1b
    style TB fill:#dbeafe,stroke:#3b82f6
    style INV fill:#fef3c7,stroke:#f59e0b
            

The Solution (With Clearing Account)

flowchart LR
    subgraph Legacy["Legacy System"]
        AR1["AR Balance: $100,000"]
    end

    subgraph NS["NetSuite (RIGHT WAY)"]
        TB["Step 1: Trial Balance<br/>DR AR $100,000<br/>CR Ret Earnings $100,000"]
        INV["Step 2: Invoice Import<br/>DR AR $100,000<br/>CR CLEARING $100,000"]
        REV["Step 3: Reversal<br/>DR CLEARING $100,000<br/>CR AR $100,000"]
        RESULT["Final AR: $100,000 OK<br/>Clearing: $0 OK<br/>New Revenue: $0 OK"]
    end

    AR1 --> TB
    TB --> INV
    INV --> REV
    REV --> RESULT

    style RESULT fill:#d1fae5,stroke:#10b981,color:#065f46
    style TB fill:#dbeafe,stroke:#3b82f6
    style INV fill:#fef3c7,stroke:#f59e0b
    style REV fill:#ede9fe,stroke:#8b5cf6
            
đŸŽ¯ GAAP Compliance Note
The clearing account approach is GAAP-compliant because it creates a temporary holding account that nets to zero after migration. No new revenue is recognized — only the receivable is recorded. This satisfies ASC 606 requirements since revenue was already recognized in the legacy system.
Interactive Walkthrough

GL Entry Flow Visualization

Step through the three journal entries to see how balances change at each stage.

1 Trial Balance Load

Load the opening AR balance from the legacy trial balance as of cutover date.

Journal Entry — Trial Balance Load
Debit Credit
$100,000
$100,000
Accounts Receivable (1200)
$100,000 DR
Clearing Account (9999)
$0
New Revenue Recognized
$0
â„šī¸ Trial Balance Loaded
AR matches legacy system. No customer detail yet — just the aggregate balance.
2 Invoice Import with Clearing

Import invoices using the clearing account instead of revenue accounts to create customer-level detail.

Invoice Import (Clearing Item on Lines)
Debit Credit
$100,000
$100,000
Accounts Receivable (1200)
$200,000 DR (doubled!)
Clearing Account (9999)
$100,000 CR
New Revenue Recognized
$0
âš ī¸ Temporary State — AR Doubled
AR is now doubled! This is expected. The clearing account holds $100K that we'll reverse in Step 3. Importantly: NO revenue was recognized.
3 Reversing Entry

Reverse the double-count by clearing out the suspense account. This removes the duplicate AR while keeping customer detail intact.

Reversing Journal Entry
Debit Credit
$100,000
$100,000
Accounts Receivable (1200)
$100,000 DR
Clearing Account (9999)
$0
New Revenue Recognized
$0
💡 Migration Complete!
AR is correct ($100K), clearing account is zeroed, and no duplicate revenue was recognized. Customer-level detail is now available for aging reports and payment application.

Account Relationships

flowchart TB
    subgraph Accounts["GL Accounts Involved"]
        AR["1200 Accounts Receivable<br/>(Real Asset Account)"]
        CLEAR["9999 OPEN AR CLEARING<br/>(Temporary Suspense)"]
        RE["3000 Retained Earnings<br/>(Equity)"]
        REV["4000 Revenue<br/>(NOT TOUCHED)"]
    end

    subgraph Purpose["Purpose"]
        AR --> |"Holds customer balances"| P1["Balance Sheet"]
        CLEAR --> |"Temporary parking lot"| P2["Nets to $0"]
        RE --> |"Historical profits"| P3["Opening Balance"]
        REV --> |"Already recognized"| P4["No Double-Count"]
    end

    style CLEAR fill:#fef3c7,stroke:#f59e0b
    style REV fill:#d1fae5,stroke:#10b981
    style AR fill:#dbeafe,stroke:#3b82f6
            
Phase 1

Pre-Migration Setup

Configure NetSuite accounts and records before importing any data.

Account & Record Configuration

Phase 2

Data Preparation

Clean and prepare your legacy AR data before import.

Clean the Legacy AR Aging

Data Export & Mapping

💡 Pro Tip: External IDs
Always map your legacy system's unique ID to NetSuite's External ID field. If you need to update records later, you can re-upload using External ID as the key instead of matching by name (which fails with typos).
Phase 3

Import Sequence

Load data in the correct order to maintain integrity.

Required Import Order

flowchart LR
    A["1. Trial Balance<br/>(GL History)"] --> B["2. Open Invoices<br/>(with clearing item)"]
    B --> C["3. Open Credit Memos<br/>(with clearing item)"]
    C --> D["4. Unapplied Payments<br/>(clearing bank)"]
    D --> E["5. Customer Deposits<br/>(manual/JE only)"]

    style A fill:#dbeafe,stroke:#3b82f6
    style B fill:#fef3c7,stroke:#f59e0b
    style C fill:#fef3c7,stroke:#f59e0b
    style D fill:#ede9fe,stroke:#8b5cf6
    style E fill:#fce7f3,stroke:#ec4899
            

Import Order (Sequence Matters!)

Critical Configuration Checks

âš ī¸ Cannot Import Deposits
NetSuite does not support CSV import of Customer Deposit transactions. You must either enter these manually or load as journal entries. Each deposit will need individual handling.
Phase 4

Post-Import Validation

Verify data integrity before proceeding to reversal.

Reconciliation Checks

Audit Trail Documentation

Phase 5

Clearing Account Reversal

Eliminate the double-count by reversing the clearing account.

Create Reversing Journal Entry

Final Balance Verification

Reversal Entry Flow

flowchart LR
    subgraph Before["Before Reversal"]
        AR1["AR: $200,000<br/>(doubled)"]
        CL1["Clearing: $100,000 CR"]
    end

    subgraph JE["Reversing JE"]
        DR["DR 9999 Clearing $100,000"]
        CR["CR 1200 AR $100,000"]
    end

    subgraph After["After Reversal"]
        AR2["AR: $100,000 OK"]
        CL2["Clearing: $0 OK"]
    end

    AR1 --> JE
    CL1 --> JE
    JE --> AR2
    JE --> CL2

    style Before fill:#fef3c7,stroke:#f59e0b
    style After fill:#d1fae5,stroke:#10b981
    style JE fill:#ede9fe,stroke:#8b5cf6
            
Phase 6

Cleanup & Controls

Deactivate temporary records and finalize compliance documentation.

Deactivate Temporary Records

Multi-Currency Considerations (if applicable)

ASC 606 Revenue Recognition Checkpoints

Reference

Auditor Comfort Package

Documents to prepare for your external auditors.

Document Purpose
Legacy AR Aging / NetSuite AR Aging Customer-level tie-out reconciliation
Legacy Trial Balance / NetSuite Trial Balance GL-level tie-out reconciliation
Account Mapping Document Legacy account codes to NetSuite account codes
Journal Entry Support Documentation for all migration entries
Clearing Account Activity Log Shows net-to-zero activity
Retained Earnings Continuity Opening balance validation schedule
đŸŽ¯ Paul Giese's Recommendation
"Provide clients with an audit documentation package. These tieouts are critical to making the auditors comfortable with the data migration process between the two systems." — Paul Giese, Optimal Data Consulting
Reference

Common Pitfalls

Issues to watch for during AR data migration.

Pitfall Symptom Prevention
Double-counted AR/Revenue AR balance 2x expected Use clearing account, NOT revenue accounts
"No Customer" on aging Orphan line on aging report Assign fictitious customer to AR journal entries
Aging does not equal Balance Sheet Reports don't reconcile Set "Report by Period" = "All Reports" in preferences
FX variances Small unexplained differences Document revaluation methodology; may need adjusting JE
Orphaned payments Unapplied amounts persist Clean up payments BEFORE migration
Deposit import fails CSV import error Deposits cannot be CSV imported — manual or JE only
Reference

Sources & Further Reading

Primary Sources

  • Optimal Data Consulting — How to Import Open AR Transactions into NetSuite
  • Paul Giese Interview — NetSuite Data Migration Expert (Prendio)
  • BDO — Revenue Recognition Under ASC 606
  • Encore Business Solutions — Auditing Requirements After ERP Implementation
  • Citrin Cooperman — Reconciling Aging Reports to the Balance Sheet

Related NCG Content