OFX LEDGERBAL and AVAILBAL differ: compare their timestamps

Updated · 3 min read

If an OFX file’s LEDGERBAL and AVAILBAL differ, inspect each balance’s own timestamp, the account/currency and the cutoff you need before choosing a number. Their names do not establish which balance matches an issued statement, and subtracting the two does not identify a particular pending payment or fee.

The desktop apps export date, description, and amount as CSV. Open CSV in Excel to save an XLSX workbook. Statement support varies: verify the result against your own PDF.

Read the balance aggregates with their dates

The official OFX Banking 2.3 specification, printed pages 208–209, gives the ledger and available balance aggregates their own BALAMT and DTASOF. The specification’s printed date is October 16, 2020; the current hosting path does not make it a newly written 2026 standard.

  1. Preserve the original bank download and identify its account and default currency. Do not compare balances from unrelated accounts or statement responses merely because they share tag names.
  2. Locate each balance aggregate and record its amount and actual DTASOF, including any supplied timezone information. A date displayed by a spreadsheet is not a substitute for the original timestamp.
  3. Record the issued statement’s desired cutoff and the issuer’s explanation of its balances. If those are missing, leave the balance-selection question open rather than using the file-download time as a proxy.
  4. Inspect posted and pending populations separately before associating any movement with the difference. Keep the native file intact; a working extraction does not change the source’s meaning.

Within one statement response, the specification does not provide different currencies for the directly contained ledger and available amounts. That is not permission to combine amounts from separate responses or currency accounts.

Compare a constructed timestamp example

The following fictional fragments, not a complete OFX document or a bank export, stipulate a USD account and two different observation times:

<LEDGERBAL>
  <BALAMT>1000.00</BALAMT>
  <DTASOF>20261016000000.000[0:GMT]</DTASOF>
</LEDGERBAL>
<AVAILBAL>
  <BALAMT>950.00</BALAMT>
  <DTASOF>20261016120000.000[0:GMT]</DTASOF>
</AVAILBAL>
Constructed fieldAmount in USDTime given by the fragment
Ledger balance1,000.00October 16 at 00:00 GMT
Available balance950.00October 16 at 12:00 GMT

If the task requires the midnight cutoff, the noon observation does not establish that cutoff. The fragment alone also cannot prove that the ledger amount equals a particular issued statement’s closing balance: that requires the issuer’s statement and scope. The difference of 50 does not tell you which pending event, hold or other condition explains it. If a timestamp is absent or malformed, record that missing input instead of inventing one.

Keep the pending snapshot distinct from posted history

Section 11.4.1 describes posted transactions and a separate pending snapshot. Pending rows can change or disappear; they are not a stable extra ledger to add to the posted list. BANKTRANLISTP has its own DTASOF describing when that pending set was generated. Inspect that time as well as the balance timestamps, especially when comparing downloads taken at different times.

This pending-transaction feature applies to banking and credit-card downloads under the specification, not investment or loan statements. Its definition does not establish that a particular issuer includes every pending event or implements the optional feature. An absent pending list does not supply a complete explanation of the balance difference.

Record the unresolved issuer question

Keep account/currency, both amounts and timestamps, posted-list interval, pending-snapshot time and the required statement cutoff together. Ask the issuer to clarify any unsupported balance meaning or missing cutoff; do not choose the amount that makes a reconciliation difference disappear. The reconciliation guide covers matching supported statement movements to book entries after source scope is established.

For an issued statement available only as PDF, LocalExtract prepares a local CSV, one PDF at a time, with date,description,amount. Verify it against the source. It does not export OFX or infer the issuer’s ledger/available balance semantics from those three fields.

The constructed balance data and finite fragment checks preserve the example’s premises. We parsed the wrapped teaching fragments and compared their explicit GMT times and decimal amounts; this is not OFX schema validation, an issuer-cutoff decision or a native import test.

Official specification checked October 17, 2026. The constructed fragments illustrate field inspection; they do not certify a native importer or any bank’s OFX implementation.

LocalExtract Team

We build LocalExtract, a desktop bank statement converter. Questions or corrections? Contact · Editorial policy

Continue with a related guide