> ## Documentation Index
> Fetch the complete documentation index at: https://developers.pleo.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Account Limits and High-Volume Sync Guidance

> The active Account limit per company, how it interacts with Chart of Accounts Sync, and how to handle Accounting Systems with very large charts of accounts.

export const AccountsLimitsSyncDesignDiagram = () => {
  const [isDark, setIsDark] = useState(false);
  useEffect(() => {
    const check = () => setIsDark(document.documentElement.classList.contains("dark"));
    check();
    const observer = new MutationObserver(check);
    observer.observe(document.documentElement, {
      attributes: true,
      attributeFilter: ["class"]
    });
    return () => observer.disconnect();
  }, []);
  const nodeFill = isDark ? "#212222" : "#EEF4F4";
  const nodeStroke = isDark ? "#848989" : "#E1E6E6";
  const nodeTextStyle = isDark ? ",color:#EEF4F4" : ",color:#131414";
  const errorFill = isDark ? "#3A1E22" : "#FCE9EA";
  const errorStroke = isDark ? "#FF90A1" : "#F15A71";
  const errorTextStyle = isDark ? ",color:#FF90A1" : ",color:#7A1F2B";
  const linkStyle = isDark ? "" : "linkStyle default stroke:#848989,stroke-width:1px;";
  const diagram = `
%%{init: {"themeVariables": {"fontSize": "12px"}}}%%
flowchart TD
    A[Full AS chart of accounts] --> B[Filter to expense-relevant accounts]
    B --> C[Check filtered count<br>against the limit]
    C --> D{11,000 or fewer?}
    D -->|Yes| E[Sync to Pleo: archive Accounts<br>no longer in the AS list]
    E --> F[Sync to Pleo: create remaining Accounts<br>via batch endpoint, unarchive individually]
    D -->|No| H[Abort sync, log clear error<br>with company ID and counts]
    D -->|"No, create/unarchive<br>anyway (avoid this)"| I["BUG (avoid this): Pleo rejects<br>the request with HTTP 400"]

   style A white-space:normal,fill:${nodeFill},stroke:${nodeStroke}${nodeTextStyle}
   style B white-space:normal,fill:${nodeFill},stroke:${nodeStroke}${nodeTextStyle}
   style C white-space:normal,fill:${nodeFill},stroke:${nodeStroke}${nodeTextStyle}
   style D white-space:normal,fill:${nodeFill},stroke:${nodeStroke}${nodeTextStyle}
   style E white-space:normal,fill:${nodeFill},stroke:${nodeStroke}${nodeTextStyle}
   style F white-space:normal,fill:${nodeFill},stroke:${nodeStroke}${nodeTextStyle}
   style H white-space:normal,fill:${nodeFill},stroke:${nodeStroke}${nodeTextStyle}
   style I white-space:normal,fill:${errorFill},stroke:${errorStroke}${errorTextStyle}
${linkStyle}
`;
  return <Mermaid chart={diagram} />;
};

This article describes the active Account limit and how to design Chart of Accounts Sync to stay within it.

## Implementation

* [How to Handle a High-Volume Chart of Accounts](/docs/current/how-tos/accounting-integrations/imports/accounts/how-to-handle-high-volume-accounts): step-by-step instructions and pseudocode for filtering, counting, and sequencing a sync against this limit

## Active Account Limit

A company can have a maximum of **11,000 active Accounts** (Chart of Accounts entries) at any time. This is a per-company limit, scoped by `companyId`, and it applies no matter how an Account was created, in the Pleo UI, via a single API call, or via a sync. It is not a separate allowance per integration or per sync.

If a create or unarchive request would push the company's active Account count over this limit, it fails with an `HTTP 400` error (`BAD_REQUEST`: "Too many active accounts for company `{companyId}`").

Chart of Accounts Sync is a full reconciliation. After a sync, Pleo's active Accounts exactly match your filtered AS list. Any active Pleo Account that isn't in that list gets archived. So you can check your filtered AS list's size against the 11,000 limit directly, without fetching or adding Pleo's current active count.

This limit is separate from the batch creation size limit (max 1,000 Accounts per request), which is covered in [How to Create Multiple Accounts in a Single Request](/docs/current/how-tos/accounting-integrations/imports/accounts/how-to-batch-create-accounts).

## Designing Sync for a Large Chart of Accounts

<AccountsLimitsSyncDesignDiagram />

### 1. Filter to Expense-Relevant Accounts

Filter the Accounting System's chart of accounts to the accounts relevant for expense categorisation in Pleo. This is typically expense-type and P\&L (profit and loss) accounts. Asset, liability, equity, and bank accounts are generally not needed, so don't sync them as active Accounts.

### 2. Check the Filtered Count Against the Limit

Check the filtered set's size against the 11,000 limit before making any Pleo API calls. See [Active Account Limit](#active-account-limit) above for the logic. If the count is over the limit, abort the sync and log a clear error instead of discovering this from a rejected API request.

### 3. Archive Accounts No Longer in the Filtered Set First

Archive Accounts in this step. Account creation and unarchiving happen in the next step. Pleo never lets a company go over 11,000 active Accounts, and it checks the limit on both create and unarchive requests. If the company is close to the limit, a create or unarchive request sent before the archive step can be rejected with an `HTTP 400`, even though the sync's final state would be within the limit.

### 4. Create or Unarchive the Remaining Accounts

Once the archive step has run, create the Accounts in the filtered set that are missing in Pleo, and unarchive the ones that were already archived in Pleo but that the sync now needs active.

If you have many Accounts to create, use the batch endpoint instead of individual requests. See [How to Create Multiple Accounts in a Single Request](/docs/current/how-tos/accounting-integrations/imports/accounts/how-to-batch-create-accounts) (max 1,000 Accounts per request).

The batch endpoint only creates Accounts, it can't unarchive them. Unarchive each one individually. See [How to Create, Update, and Archive Accounts](/docs/current/how-tos/accounting-integrations/imports/accounts/how-to-create-update-archive-accounts) for that request.

### 5. Handle a Rejection from Pleo

If a request is sent without the step 2 pre-check and Pleo rejects it for exceeding the limit, don't return a generic "sync failed" message. Surface the API's actual response.

See [How to Handle a High-Volume Chart of Accounts](/docs/current/how-tos/accounting-integrations/imports/accounts/how-to-handle-high-volume-accounts) for the exact pre-check logic, operation ordering, and error-handling pseudocode for all five steps above.

***

## What Comes Next?

* [Chart of Accounts Sync Workflow Guide](/docs/current/guides/accounting-integrations/imports/accounts-sync-workflow-guide)

***

## Related Reading

* [Sync Accounts](/docs/current/integration-design/accounting-integrations/imports/accounts/integration-design-accounts-sync)
* [Chart of Accounts Sync Periodicity and Scheduling](/docs/current/integration-design/accounting-integrations/imports/accounts/integration-design-accounts-periodicity)
* [How to Handle a High-Volume Chart of Accounts](/docs/current/how-tos/accounting-integrations/imports/accounts/how-to-handle-high-volume-accounts)
* [How to Create Multiple Accounts in a Single Request](/docs/current/how-tos/accounting-integrations/imports/accounts/how-to-batch-create-accounts)
* [Platform Capabilities: Chart of Accounts Sync](/docs/current/platform/accounting-integrations/imports/accounts/accounts-sync-overview)

***
