Skip to main content
Your chart of accounts defines every GL account available for posting in DualEntry. A well-structured chart keeps reporting clean, integrations predictable, and multi-entity consolidation straightforward.

Plan your numbering scheme

DualEntry assigns account numbers within a fixed range per account type, and new accounts auto-populate the next available number in that range. The default account-number length is four digits, but that isn’t a fixed limit. You can extend it up to 10 digits in Settings → Organization, and any existing ranges automatically scale to match, existing account numbers included. DualEntry proposes a rescaled number for each account and shows you the before-and-after for review before you confirm. Because that rewrites every existing account number, decide on a length during initial setup rather than after your organization is live. The table below shows both ends of that range: Any length from 4 to 10 digits scales the ranges the same way, not just the two extremes shown above: a 6-digit configuration yields 100000–199999 for assets, 200000–299999 for liabilities, and so on. Every account type gets one fixed range, and every account number is a plain integer inside it. A child account shares its parent’s account_type, so it also shares the parent’s range. For example, a child of an other income parent takes an 8-series number, matching its parent, even if you’d rather see it grouped under 4-series revenue on reports. Plan your parent/child grouping with the ranges in mind before you start creating accounts. Leave gaps between accounts within each range so you can insert new accounts without renumbering. If you operate multiple entities, use classifications to tag entries by entity rather than encoding the entity into the account number. DualEntry shares a single chart of accounts across companies. Before finalizing the scheme, map it against your reporting requirements: your financial statement groupings rely on the account’s account_type, so a consistent scheme within each range speeds up the setup of those groupings. If you’re migrating from QuickBooks, Xero, or another system, an imported account keeps its source number only if that number already falls inside the correct range for its account type. Otherwise, the import assigns it a new number in that range. See Migrating from QuickBooks or Xero.

Statistical accounts

Statistical accounts track non-financial quantities, such as headcount, square footage, or machine hours, alongside your chart of accounts. They record non-monetary values without posting to the General Ledger or appearing on financial statements. See How to Set Up Statistical Accounts for setup steps.

Create an account

To create an account, navigate to Configuration → Accounting Setup → Chart of Accounts or use the API. Each account requires the following fields: DualEntry also provides a system account, Retained Earnings (system), for posting direct adjustments to retained earnings. See Retained earnings and year-end close below. To create an account via the API, send a POST to /public/v2/accounts/ with these fields in the request body. The following example creates a top-level operating expense account:
The account form and the PATCH endpoint do not change an account number once transactions have posted to it. Use the Account Renumbers bulk import instead, which renumbers the account in place and keeps its history. See Change accounts after transactions have posted.

Structure accounts with parent-child hierarchy

DualEntry supports a nested hierarchy within the chart of accounts, up to five levels deep: parent accounts group related child accounts (also called sub-accounts) under a roll-up, and a child account can itself be the parent of further children. Use this when you want detail for day-to-day posting but a single line on financial statements.
  • Parent account. Parent accounts are postable, so a user can post a transaction directly to a parent account. That posting is the parent’s own independent balance; it does not merge with the children’s balances. A separate subtotal line then adds the parent together with its children. Parents must share the same account type and normal balance direction as their children (for example, an Expense parent can only have Expense children).
  • Child account. A postable account that reports its balance both on its own and as part of the subtotal with its parent.
If you don’t want users posting directly to a parent (or any) account, deactivate it. A deactivated account can no longer be selected when posting a new transaction, but it keeps its place in the hierarchy, and its children still roll up to it on reports. If you deactivate an account that already has posted transactions, reports continue to include it while the account stays unavailable for new transactions. For example, you might create a parent expense account 6000 - Marketing with children 6010 - Paid Advertising, 6020 - Events, and 6030 - Content. Your team codes invoices to the child accounts, and the P&L can display either the full detail or just the 6000 - Marketing roll-up depending on the report’s grouping level.

Create a child account

To make an account a child, set its Parent Account field to an existing account of the same type. From the UI, open Configuration → Accounting Setup → Chart of Accounts (or edit an existing account) and select the parent from the dropdown. Via the API, pass parent_account_id when calling POST /public/v2/accounts/:
Set parent_account_id to null for a top-level account. To convert a child back into a top-level account, PATCH the account with parent_account_id: null. Plan the grouping before creating the children. You cannot assign a parent to an account whose type differs from the parent’s, and you cannot change an account’s type once it has children or posted activity.

How deep the hierarchy can go

A chain of accounts can be up to five levels deep, counting the top-level parent and the deepest child. A child account can be selected as the parent of another account, so 6000 - Marketing can hold 6010 - Paid Advertising, which can in turn hold 6011 - Paid Search, and so on to the fifth level. DualEntry rejects any save that would push a branch past five levels with the message Max nesting of accounts is 5. The check runs against the whole branch rather than just the account you are editing. The limit applies to the branch, not to the account. Adding a parent above an existing five-level group counts the levels below it as well, so a re-parent that looks like a single change can fail because of depth further down the tree. Deep hierarchies also make reporting harder to read, because every level adds a subtotal row. Most organizations get what they need from two or three levels and use classifications for the remaining detail rather than nesting further.

Align accounts with items, banking, and 1099

Certain DualEntry features depend on specific account mappings. Setting these up correctly before you go live prevents misclassified transactions that require reclassification later.
  • Items. Each product or service item links to an income account and optionally a COGS account. When you create invoices or bills referencing items, DualEntry posts to these accounts automatically.
  • Bank connections. Each connected bank account maps to a GL asset account. See Bank Connections for setup.
  • 1099 tracking. Vendor payments that qualify for 1099 reporting post to expense accounts flagged as 1099-eligible. See 1099 Tracking to configure which accounts are included.
Review these mappings during initial setup and again when you add new bank connections, items, or vendor payment workflows. Catching misalignments before a close period saves time compared to running bulk reclassification after the fact. If you change an item’s income or COGS account, the change applies to future transactions only; existing posted entries retain their original account.

Manage accounts across multiple entities

In a multi-entity setup, DualEntry shares the chart of accounts across all companies by default. This means account 6100 - Office Supplies exists in every entity’s ledger, which simplifies consolidated reporting. If an account should only appear for a specific entity, restrict it using the account’s entity scope setting under Configuration → Accounting Setup → Chart of Accounts. Scoped accounts are hidden from journal entry dropdowns for entities they don’t belong to. When adding a new account in a multi-entity environment, decide whether it applies globally or to a subset of entities before saving. Changing scope after transactions have posted requires moving those transactions first. For consolidated financial statements, the shared chart of accounts structure ensures that accounts roll up consistently across entities. If you need entity-specific detail without separate accounts, use classifications to tag transactions by entity, department, or location and report on them through dimension-filtered views.

Merge two accounts

If you end up with duplicate or overlapping accounts (for example, two “Office Supplies” accounts created during a migration), you can merge them instead of manually re-coding every historical entry. Merging combines a source account into a target account: DualEntry re-points all posted activity, item mappings, bank and credit card references, budgets, allocation rules, fixed asset mappings, and reconciliation history to the target, then deletes the source account. To merge accounts, navigate to Configuration → Accounting Setup → Chart of Accounts, select the source account, and select Merge into another account. Select the target account and confirm. DualEntry runs the merge as a single audited transaction and records it in the audit log against the target account (event type ACCOUNT_MERGED), capturing both the source and target account numbers and names.

Requirements

Both accounts must satisfy every rule below before a merge is allowed:
  • Both accounts belong to the same organization.
  • Both accounts have the same account type (Asset, Liability, Equity, Revenue, or Expense).
  • Both accounts have the same 1099 category.
  • Neither account has a linked financial account (connected bank feed).
  • The source account is not a system account.
  • The source account has no child accounts.
  • The target account is not a child of the source account.
  • If both accounts have budget cells, no cells overlap for the same budget, year, and month.
  • No entry on the source account falls in a locked AR, AP, or GL period for the target account’s company.
Bank accounts and credit card accounts cannot be merged from the UI. If you need to consolidate them, contact support.

What happens during a merge

DualEntry processes the merge as a single transaction and blocks concurrent edits to either account until it completes. It updates every reference to the source account, including:
  • GL entries and every record line type (journal entries, bill lines, direct expense lines, customer and vendor payment lines, allocation lines, currency revaluation lines).
  • Item mappings (income, expense, deferral, asset, and discount accounts).
  • Fixed asset, amortizable asset, disposal, and revaluation account fields.
  • Bank and credit card account fields on payments, deposits, refunds, transfers, cash sales, and direct expenses.
  • Reconciliations, allocation schedules and templates, contracts, budgets, and integration records.
  • Parent-account pointers on any child accounts.
Once every reference is updated, DualEntry deletes the source account and releases the lock. Merges cannot be undone. Confirm that the target account’s number, name, account_type, and default classifications are correct before merging, because historical entries inherit them going forward. For very large accounts, the merge may exceed the request timeout; in that case, use bulk reclassification or bulk import to consolidate the data instead.

Change accounts after transactions have posted

Once an account carries posted entries, DualEntry allows some changes and blocks others. The table below summarizes each change and where you make it. The Account Renumbers import takes two columns, the current account number and the new account number, and changes the number in place. Existing entries stay attached to the account and reporting history follows the new number, so you do not create a replacement account or reclassify entries. The import rejects a row when the account does not exist, when the new number is not an integer, when the new number matches the current number, or when the new number is already in use by another account. Account type is constrained by hierarchy as well as by posted activity: every account in a parent-child group must share one type. To re-type a parent, re-type it and all of its children in the same operation, or DualEntry rejects the change. If you need to restructure more than the number, you have two options. Merge the account into an existing account of the same type, as described in Merge two accounts. Or create a new account and use bulk reclassification to move historical balances onto it.

Retained earnings and year-end close

At fiscal year end, DualEntry does not post a closing journal entry that moves net income into retained earnings. Instead, retained earnings on your balance sheet is a computed value. Balance-sheet reports sum prior-year income and expense activity and roll it into the retained earnings line automatically at report time, rather than maintaining it as a running account balance. Because the roll-forward is computed, your trial balance stays in balance across fiscal years without any manual closing entries. Period locking controls whether a closed period can accept further postings; it does not generate a P&L-to-retained-earnings transfer entry. If you migrated balances into DualEntry, post your historical cumulative earnings using the Retained Earnings (system) account as part of your opening trial balance. See Migrate from QuickBooks or Xero.
Retained Earnings (system)DualEntry provides a system account, Retained Earnings (system) (default number 3900, which can be renumbered like any other account), that posts directly into the system-calculated retained earnings balance shown on the Balance Sheet and Trial Balance. Use it when you need to make a direct adjustment to retained earnings.This account can only be posted to via a manual journal entry. It isn’t selectable on other transaction types, such as bills, invoices, or expenses.You can merge existing user-generated Retained Earnings accounts into this system-generated Retained Earnings (system) account. See Merge two accounts.

Retrieve and update accounts via the API

Use the following endpoints to manage accounts programmatically: The list endpoint supports filtering by account_types, number, and company_id. Use it to pull a specific subset (for example, all expense accounts for a single entity) when building reports or integration logic. The PATCH endpoint lets you update the account name, description, and classifications, but not the account number or account_type on accounts with posted activity. To renumber an account that already has activity, use the Account Renumbers bulk import described in Change accounts after transactions have posted. You can delete an account only if it has zero posted transactions. Archive inactive accounts instead: archiving hides them from dropdowns while preserving historical data. After completing these steps, your chart of accounts is structured, numbered, and aligned with items, bank connections, and 1099 tracking. Next, learn how to record transactions against these accounts in Journal Entries, or set up your close process to reconcile and review balances at period end.
Last modified on August 27, 2026