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

# Sales Tax Liability Report

> Per-jurisdiction, per-period sales tax summary suitable for direct entry into a state's online filing portal. Mirrors NetSuite, QuickBooks Online, and Acumatica.

<Note>
  The Sales Tax Liability report reads posted journal entries against the
  Sales Tax Payable GL account. Draft or pending entries do not appear until
  they are posted.
</Note>

## Open the Sales Tax Liability report

Open **Accounting**, then **Financial Reports**, then click the
**Sales Tax Liability** tab. Pick a preset (This Quarter, Last Month, Year
to Date) or set a custom From and To date, choose how to group the rows
(Jurisdiction, State, or Filing Period), then click **Generate Report**.

The report can be printed or exported to CSV after it generates. Use the
CSV export when entering totals into a state filing portal.

## Group by

* **Jurisdiction** (default) -- one row per tax jurisdiction per filing
  period (calendar month). Best when AvaTax is wired and the report carries
  city / county / state detail.
* **State** -- collapses every county and city inside a state to one row.
  Best for monthly state-level filings.
* **Filing Period (Month)** -- one row per month across every jurisdiction.
  Best for spotting trend changes month over month.

## Columns

* **Jurisdiction** -- the AvaTax jurisdiction name (state, county, city,
  or special district). Falls back to the shipping state when AvaTax is not
  wired, or "(unknown jurisdiction)" when neither is available.
* **Filing Period** -- the calendar month of the journal entry's entry
  date (`YYYY-MM`).
* **Taxable Sales** -- the taxable subtotal that produced the tax. Only
  rows that have an `order_tax_lines` row contribute to this column.
* **Tax Collected** -- the credit posted to Sales Tax Payable when the
  order was fulfilled. This is what you collected from customers.
* **Tax Refunded** -- the debit posted back to Sales Tax Payable when a
  return was processed or a payment refunded. This reduces what you owe.
* **Tax Owed** -- Tax Collected minus Tax Refunded. This is the net
  liability for the period that you owe the jurisdiction.
* **Orders** -- count of distinct orders that contributed to the row.
* **AvaTax Codes** -- the AvaTax committed document codes for the orders
  in the row. Use these to drill back into AvaTax for audit support.

## Drill into AvaTax committed transactions

When AvaTax is the active tax connector, the **AvaTax Codes** column lists
the document codes for every committed sales-tax transaction included in
the row. Copy the code into the AvaTax admin to inspect the source
document, line items, and jurisdiction detail behind the dollar amount.

If the column is empty for every row, the entity does not have AvaTax
wired, the orders pre-date AvaTax wiring, or the orders were never
committed (typically because they were voided before fulfillment).

## Export to a state filing portal

1. Set the date range to match the filing period your state expects
   (monthly, quarterly, or annual).
2. Set **Group by** to **Jurisdiction** so the export carries the full
   city / county / state breakdown the portal asks for.
3. Click **Generate Report**, then click **CSV**.
4. Open the CSV. Each row is one jurisdiction in one filing period; the
   Tax Owed column is what you owe that jurisdiction.

<Note>
  The Sales Tax Liability report does **not** automatically file your
  returns. State portal integration (Avalara Returns, TaxJar) is on the
  roadmap; until then, use the CSV export and your state's online filing
  portal.
</Note>

## Reconcile against the Trial Balance

The total at the bottom of the Sales Tax Liability report should equal
the **Sales Tax Payable** account balance on the Trial Balance for the
same as-of date. If the two disagree:

1. Run the Trial Balance for the same end date.
2. Open the **Account Ledger** for the Sales Tax Payable account for the
   same date range.
3. Look for journal entries with `source_type` other than `TAX` or
   `REFUND` posting to the Sales Tax Payable account. These are the
   entries that the Sales Tax Liability report intentionally excludes
   (e.g. manual journal entries adjusting prior-period liability).

## Limitations

* **Entities without AvaTax** -- per-jurisdiction breakdown rolls up to
  the shipping state when no `order_tax_lines` row is present. Add manual
  tax rates per jurisdiction (Settings -> Tax -> Tax Rates) to enable a
  richer breakdown without AvaTax.
* **Use Tax** -- consumer-side use tax accrual is not implemented in
  Arcus today. This report covers sales tax collected from customers
  only.
* **Period close** -- the report respects period close (a closed period
  is read-only; you cannot post new tax journal entries into it). It
  does not block report generation against a closed period -- a state
  audit can require historical filing detail.

## Where the numbers come from

The report reads `accounting.journal_entry_lines` where the account is
the entity's `sales_tax_payable` GL account (canonical `system_account_key`
lookup, falls back to the first liability account whose name contains
"Sales Tax" for entities pre-dating the system-key migration). For each
posting:

* `source_type = 'TAX'` (the fulfillment tax post) credits the
  liability and appears under **Tax Collected**.
* `source_type = 'REFUND'` (the return-refund tax reversal) debits the
  liability and appears under **Tax Refunded**.

Per-jurisdiction breakdown comes from the `order_tax_lines` table written
by the AvaTax connector at order fulfillment time. The AvaTax committed
document code is read from `orders.avatax_transaction_code`.

## Related

* [Financial Reports](/support/accounting/reports) -- Trial Balance,
  Balance Sheet, Income Statement, Cash Flow
* [Account Ledger](/support/accounting/account-ledger) -- drill into
  Sales Tax Payable entries one row at a time
* [General Ledger Fundamentals](/guides/general-ledger-fundamentals) --
  how double-entry posting works in Arcus
