The BAS Ready Check Build Standard
BAS due and not sure the GST codes are right? Before it is lodged, this standard reads the quarter from your ledger and hands your bookkeeper or BAS agent one list: the bill with no tax invoice attached, the supplier coded differently this time, GST on a bank fee, a laptop booked as an expense, the line nobody reconciled. Every flag names the transaction it came from. It changes nothing in your books and lodges nothing. Written so you can build it yourself.
Used by
- Bookkeeper
- BAS Agent
- Accounts Officer
- Practice Manager
- Office Manager
10 min read · Published by AI Pathway
Using Claude? This standard installs as a skill. Guides for ServiceM8, Xero and Simpro.
How to get this live in your business
Build it for mePick a time and we build the check beside your ledger, read only, every flag traced to its transaction.What this is
An open build standard for the check before the BAS goes in: one list of things that look wrong in the quarter, handed to whoever prepares or lodges it. The bill with no invoice attached, the supplier coded differently this time, the bank fee with GST on it, the laptop booked as an expense.
The core rule
Every flag names the transaction it came from (the ledger's own id, its date and its total) so your bookkeeper can open it in one click. A flag that cannot point at a transaction is not shown. What the check could not read is listed, not guessed.
What it does not do
It never changes a code, posts a journal or lodges anything, and it never tells anyone what to claim. It reads, and it hands a list to a person.
The hard part
Honestly, not much. The checks are arithmetic. What needs care is keeping a read-only connection to the ledger alive from one quarter to the next, and keeping enough history to know what each supplier is usually coded.
The quarter ends and somebody scrolls three months of transactions looking for what will cause trouble: the $330 bill with GST claimed and no invoice in the file, the plumbing supplier coded GST-free for the first time in a year, the bank fee somebody put GST on. It takes an afternoon, it happens in a hurry before the due date, and the one line that mattered is the one nobody scrolled past.
From the period's transactions to one list for a person
- Start when the BAS period ends, before anything is lodged.
- Read the period's transactions from the ledger the business runs, with their tax codes, through a read-only connection.
- Run each check on every line: tax invoice held, usual code, GST on accounts that carry none, capital coded capital, unreconciled and uncoded.
- Compare the period's totals with the comparable period, and the GST account's movement with the GST on the transactions.
- The gate: does each flag name the ledger transaction it came from, and does that transaction read back? If not, the flag is dropped and never shown.
- If it does, the flag carries what was found and why it was flagged, and no advice.
- Could the ledger be read for each check? If not, the check is listed as not checked with the reason. Then one list goes to the bookkeeper or BAS agent.
Take the spec to Claude, ChatGPT or Copilot. The sentence to paste is one click away.
1. What this standard covers
The day or two between the end of a BAS period and lodging it. The build reads the period’s transactions from the ledger the business already runs, with their tax codes, the history before them and the same period last year, and writes one list of exceptions for a person: each flag with the transaction it came from, what was found and why it was flagged. Every flag cites its transaction, the same rule the Cited Answer standard puts on every answer: no source, no line.
Who it is for, and who still lodges. The list is for the business doing its own BAS, or for its registered BAS agent or tax agent. Preparing or lodging a BAS for someone else for a fee is a regulated service in Australia (see the dated facts at the end of this page). This standard prepares a list for that person to work through; it does not replace them, it gives no tax advice, and it never lodges.
What is out of scope. Checking a supplier’s bill against the order before it is paid is the Invoice Check standard. Matching one deposit to many invoices is Remittance Split. Making two records agree is Two Records. Payroll, PAYG withholding, fuel tax credits and the other parts of an activity statement are not checked here: this is GST only.
What cannot meet it, and what can. The build connects straight to the ledger through the ledger’s own sign-in and API, read only. Xero, MYOB Business and QuickBooks Online each let a connected app read the period’s transactions with their tax codes, the tax code list and the accounts, so each can meet checks 1, 2, 4, 5, 6, 8 and 9. They differ on the rest, and check 10 exists for exactly that. From each vendor’s developer documentation as at the date below: Xero’s API reads whether a transaction has an attachment and whether a bank transaction is reconciled. MYOB Business documents attachment reads for spend money and bills, not for every transaction type, and we found no reconciled status in its API, so the reconciliation half of check 7 is listed as not checked there. For QuickBooks Online we found attachments readable but no documented reconciled flag and no Australian GST report through the API, so figures are worked out from the coded lines and the list says so. A desktop ledger with no API, or a spreadsheet, can only meet it by export: the Google Sheet below works from a pasted export, and the ids and dates have to come with it.
Is there a ready-made version? Not yet. No product runs this check, and none is needed for it: it is a read of your own ledger. A free Google Sheet version is ready to copy; the build is otherwise yours, or ours as a scoped build.
2. What goes on the list, and what each flag means
Eight kinds of flag, a closed list, and a section for what could not be checked. Each flag says what was found; none says what to do.
| Flag | What it means |
|---|---|
| tax_invoice | GST claimed on a purchase above the tax invoice threshold, with no document attached in the ledger. |
| usual_code | A GST code different from the one this supplier (or this account) carried on most of its lines before. The usual code and how often it was seen are shown. |
| no_gst_account | GST claimed in an account you or your BAS agent marked as carrying no GST, such as wages, super, bank fees or interest. |
| capital | If you report capital purchases separately: a purchase in a fixed asset account on a non-capital code, or the reverse. |
| uncoded | A bill, spend or receive line in the period with no tax code at all. |
| unreconciled | A bank transaction dated in the period that the ledger shows as not reconciled. |
| swing | Total sales, GST on sales or GST on purchases moved more than your band against the comparable period. Both figures shown. |
| control_account | The GST account moved by a different amount from the GST on the period's transactions. Any transaction posted straight to the GST account is named. |
Three things are never on the list, however helpful they would look. A corrected code (“should be GST”): the usual code is shown as evidence, and which one is right is the person’s call. Anything about what to claim or how to fix it. And a flag built on a guess: if the ledger cannot say whether a document is attached, the list says that, and does not flag every bill as missing its invoice.
3. The checks, in order
The order is the claim. The period comes first, because a flag about last quarter’s bill is noise. The source rule sits in front of every flag, because a flag nobody can open is a flag nobody can clear. The line checks run before the totals, because a swing is often explained by a line already on the list. What could not be checked is listed before the list goes, and the list goes once.
- The period's transactions come from the ledger, by its own ids and dates. The list covers exactly the BAS period the business set, read from the ledger the business runs: every transaction dated inside the period, by the ledger's own transaction id. A transaction dated outside the period is not flagged as if it were in it, and nothing is read from an export somebody edited.
- Every flag cites the transaction it came from, and that transaction reads back. Every flag on a line names the ledger's transaction id, and that id reads back from the ledger with the same date and total the flag states. A flag about the whole period (a swing, a control account difference) names the period and the figures it compared, read from the ledger. A flag that cannot point at its source is dropped, not shown.
- GST claimed above the tax invoice threshold with no tax invoice attached is flagged. A purchase above the threshold the business set (the ATO figure, dated on this page) with a GST credit claimed and no document attached in the ledger is flagged, citing the transaction. Below the threshold it is not flagged. Where the ledger cannot say whether a document is attached, the check is listed as not run, never assumed either way. An attachment is not proof of a valid tax invoice; the flag is for a person to look at.
- A GST code that differs from what that supplier or account usually carries is flagged, with the usual code shown. For each purchase line, the GST code is compared with the code the same supplier, or failing that the same account, carried on most of its lines in the history the business set. A line coded differently from a clear usual code is flagged with the usual code and how many lines it was seen on. Too little history means no flag, never a guess. The flag says the code is different; it never says which code is right.
- GST claimed on an account the business marked as carrying no GST is flagged. The business, or its BAS agent, lists the accounts that carry no GST in its own books: typically wages, super, bank fees and interest. A line in one of those accounts with a GST credit claimed is flagged, citing the transaction. The list is the business's setting; the build never decides on its own that an account carries no GST.
- A purchase in a capital account not coded capital, or the reverse, is flagged when the business reports G10 and G11. Where the business reports capital and non-capital purchases separately (full reporting), a purchase line in a fixed asset account carrying a non-capital GST code is flagged, and so is a line in an expense account carrying a capital code. Which account is capital is the business's own chart of accounts. Under simpler BAS, where those labels are not reported, the check is listed as not run.
- Transactions inside the period that are unreconciled or carry no tax code are flagged. Every bank transaction dated in the period that the ledger shows as unreconciled is flagged, and so is every bill, spend or receive line in the period with no tax code at all (a manual journal is left to check 9). Where the ledger cannot say whether a line is reconciled, that half of the check is listed as not run.
- Period totals that swing against the comparable period beyond the business's band are flagged, with both figures. Total sales, GST on sales and GST on purchases for the period are compared with the comparable period the business set (usually the same quarter last year), each read from the ledger the same way. A move larger than the band the business set is flagged with both figures, both periods and the change. A swing is a question for a person, not an error.
- The GST control account's movement for the period is compared with the GST the transactions report, and a difference is flagged. The movement in the GST account for the period is read from the ledger and compared with GST on sales less GST on purchases for the same period (from the ledger's GST report where it offers one, otherwise from the coded lines, and the list says which). A difference is flagged with both figures and, where they can be found, the transactions posted straight to the GST account.
- Whatever it could not check is listed, with the reason. A check the ledger cannot support (no way to read attachments, no reconciled flag, no GST report), a check the business's reporting makes irrelevant (capital under simpler BAS), and a check with too little history is listed under not checked with the reason. Nothing is silently skipped, and nothing is flagged on a guess about data that could not be read.
- Read only: one list to the named person, nothing written, nothing lodged, no advice. The list goes once per run to the bookkeeper or BAS agent the business named. Nothing is written to the ledger: no code changed, no journal posted, no attachment added, nothing lodged. A flag states what was found and why it was flagged; it never says what the code should be, what to claim or how to fix it. The person decides.
- It survives the builder. Someone other than the builder can explain what it does, and it runs on an account the business owns.
- The pass test passes. On the business's own ledger, for a real period: seed one known-bad line (a purchase above the tax invoice threshold with GST claimed and nothing attached). Run the check. Every line flag cites a real transaction id that reads back from the ledger with the same date and total, the seeded line is caught, and the ledger shows nothing was written by the run.
4. What your bookkeeper reads
One quarter for a small trade business on full reporting. Every line ends with the transaction it came from, so each one opens in the ledger.
BAS Ready Check, 1 July to 30 September 2026
For: Jo (bookkeeper). Ledger: read only, nothing changed.
TAX INVOICE Bunnings, $330.00, GST claimed, no document attached.
Above the $82.50 threshold set for this business.
[B2, 2026-07-22, $330.00]
USUAL CODE Reece, coded FRE on account 400.
Reece carried GST on 6 lines from January to June.
[B4, 2026-08-05, $440.00]
NO GST ACCT CBA, GST of $1.00 claimed in account 404 Bank fees.
This account is on your no-GST list. [S5, 2026-08-31, $11.00]
CAPITAL Sydney Tools, account 710 Plant and equipment on a
non-capital code. [B6, 2026-09-02, $4,400.00]
UNCODED Officeworks, a line with no tax code. [S7, 2026-09-10, $165.00]
UNRECONCILED Telstra, $99.00, not reconciled. [S8, 2026-09-12, $99.00]
SWING GST on purchases: $492.00 this quarter, $200.00 for
July to September 2025. Outside the 25 percent band.
GST ACCOUNT Moved $3,008.00; GST on sales less purchases is
$2,508.00. A $500.00 journal went straight to the GST
account. [J1, 2026-09-30]
NOT CHECKED none this quarter.Some of these will be fine. Reece may really have supplied something GST-free this time; the $500 journal may be a correction the BAS agent asked for. That is the point: the list shows them, with the evidence, and a person decides. A build that wrote “change B4 to GST” fails check 11.
5. The records it keeps, in the shape your developer needs
One list per period per run. Note what a line flag cannot exist without: a transaction id that reads back.
For your developer. Show the fields for your developer
exceptions_list # one per period per run
period: { from: date, to: date }
ledger: xero | myob | qbo
reviewer: string # the bookkeeper or BAS agent
flags:
- kind: tax_invoice | usual_code | no_gst_account | capital |
uncoded | unreconciled | swing | control_account
cites: # required on every line flag
- txn_id: string # the ledger's own id
date: date # as read back from the ledger
total: number # GST inclusive, as read back
period: { from, to } # on swing and control_account
evidence: string # what was read, as read
why: string # the rule that fired, never advice
usual: { code, count } # usual_code only
figures: { measure, now, then, change } # swing, control_account
not_checked:
- kind: tax_invoice | usual_code | capital |
reconciliation | gst_report
why: string # what could not be read
settings # set by the business or its agent
- period, comparable_period, history_window
- reporting: simpler | full
- tax_invoice_threshold: number # from the ATO figure, dated
- swing_band: percent
- no_gst_accounts: [account code]
- min_history: number
- reviewerA line flag without a transaction id is the defect this standard exists to make impossible. A flag that tells the reader what to do is the other.
6. One list, and nothing written back
The list goes once per run to the person named in the settings, by email, a shared folder or the practice’s own task list. Run it again after the bookkeeper has fixed a few things and the new list is shorter; that is how you know the fixes landed.
Nothing is written back. The build has no way to change a code, post a journal, attach a document or lodge, because the connection it is given can only read. If a flag is right, the fix is made in the ledger by a person, where the next run reads it.
7. What stays with a person
- Every flag: whether it is a problem, and what to do about it.
- Every change in the ledger: codes, journals, corrections.
- Lodging the BAS, by the business itself or its registered BAS agent or tax agent.
- The settings: the period, the comparable period, the swing band, the accounts that carry no GST, and who gets the list.
- Asking a supplier for a missing tax invoice.
8. Run it your way
The same checks and the same pass test hold whichever way you run it. Five ways, and what is ready today in each:
- Done for you. No product runs this today, and none is needed: the check is a read of your own ledger, connected directly through its own sign-in. We build it as a scoped build if you would rather not.
- Your own bot: Grok Bot or Claude. A good fit for a practice. Connect the bot to the ledger read only, paste the checks in as the rules and add: “Every flag names the transaction id. Never say what a code should be. List what you could not read.” One limit to know: a bot’s memory is not the ledger, so it reads the period fresh each time.
- Google Workspace, the default. A copyable Google Sheet is built: paste the period’s transaction export, your tax codes and accounts, and it writes the exceptions list with every flag ending in its transaction id. It calls nothing outside the spreadsheet and writes nothing to your ledger. Make your own copy
- Microsoft 365. The Microsoft 365 plan lays out five SharePoint lists, a flow that copies the period from the ledger read only and a flow that writes the exceptions list.
- Your own code. This page: the checks, the data model, a runnable stub and the pass test. Hand it to a coding agent with the button at the top.
How to run any standard each of these ways is in run a standard anywhere.
9. What your developer builds, and the step that needs care
No hosted step, and nothing written anywhere. The checks are the free part, and a coding agent builds them against the stub in an afternoon. What needs care is thin, and we say so: a read-only connection to the ledger that still works next quarter, and each client's history of usual codes.
For your developer. Show the setup for your developer
provider:
stub: local.mock_ledger_period
production: none # no hosted step; runs on your own systems
the stub # local.mock_ledger_period
- one quarter of coded lines, six months of history,
and the same quarter last year
- a bait line for every check, and a bill two days
after the quarter ends
- a ledger that can be set to not report attachments,
reconciliation or a GST report: it returns nothing,
never "no"
- no port that writes
the care
- connect read only, through the ledger's own sign-in;
ask for read scopes and nothing else
- keep the connection alive between quarters: a refresh
that lapses when unused means a dead check on the
day it matters
- keep each client's history window, so check 4 has a
usual code to compare against
- cite every flag from the ledger, and drop it if the
transaction does not read back
stays local # yours, and the standard
- the settings, the flags, the not-checked list, the
one list sent
cannot meet the standard in full
- MYOB Business: no reconciled status found in its API
- QuickBooks Online: no Australian GST report found in
its API (figures come from the coded lines)
- a desktop ledger or spreadsheet: by export onlyA vendor selling an AI BAS review is usually selling the reading. Ask them three things: which transaction each flag came from, what their tool can write to your ledger, and what it does when it cannot read something.
The pass test. In your own ledger. Pick a real period and seed one bill above the tax invoice threshold, with GST claimed and nothing attached. Run the check. The seeded bill must be on the list by its real transaction id, every id on the list must open the right transaction in your ledger with the same date and total, and the ledger’s own history must show the run changed nothing. A stub cannot fake this, because a stub agrees with whatever it was given and has no audit trail of its own. Each step takes a minute to stage.
10. A checklist to hold any build or supplier to
Hold a DIY build or a vendor to this. If a box is empty, it is not in production.
- 1. The period's transactions come from the ledger, by its own ids and dates. The list covers exactly the BAS period the business set, read from the ledger the business runs: every transaction dated inside the period, by the ledger's own transaction id. A transaction dated outside the period is not flagged as if it were in it, and nothing is read from an export somebody edited.
- 2. Every flag cites the transaction it came from, and that transaction reads back. Every flag on a line names the ledger's transaction id, and that id reads back from the ledger with the same date and total the flag states. A flag about the whole period (a swing, a control account difference) names the period and the figures it compared, read from the ledger. A flag that cannot point at its source is dropped, not shown.
- 3. GST claimed above the tax invoice threshold with no tax invoice attached is flagged. A purchase above the threshold the business set (the ATO figure, dated on this page) with a GST credit claimed and no document attached in the ledger is flagged, citing the transaction. Below the threshold it is not flagged. Where the ledger cannot say whether a document is attached, the check is listed as not run, never assumed either way. An attachment is not proof of a valid tax invoice; the flag is for a person to look at.
- 4. A GST code that differs from what that supplier or account usually carries is flagged, with the usual code shown. For each purchase line, the GST code is compared with the code the same supplier, or failing that the same account, carried on most of its lines in the history the business set. A line coded differently from a clear usual code is flagged with the usual code and how many lines it was seen on. Too little history means no flag, never a guess. The flag says the code is different; it never says which code is right.
- 5. GST claimed on an account the business marked as carrying no GST is flagged. The business, or its BAS agent, lists the accounts that carry no GST in its own books: typically wages, super, bank fees and interest. A line in one of those accounts with a GST credit claimed is flagged, citing the transaction. The list is the business's setting; the build never decides on its own that an account carries no GST.
- 6. A purchase in a capital account not coded capital, or the reverse, is flagged when the business reports G10 and G11. Where the business reports capital and non-capital purchases separately (full reporting), a purchase line in a fixed asset account carrying a non-capital GST code is flagged, and so is a line in an expense account carrying a capital code. Which account is capital is the business's own chart of accounts. Under simpler BAS, where those labels are not reported, the check is listed as not run.
- 7. Transactions inside the period that are unreconciled or carry no tax code are flagged. Every bank transaction dated in the period that the ledger shows as unreconciled is flagged, and so is every bill, spend or receive line in the period with no tax code at all (a manual journal is left to check 9). Where the ledger cannot say whether a line is reconciled, that half of the check is listed as not run.
- 8. Period totals that swing against the comparable period beyond the business's band are flagged, with both figures. Total sales, GST on sales and GST on purchases for the period are compared with the comparable period the business set (usually the same quarter last year), each read from the ledger the same way. A move larger than the band the business set is flagged with both figures, both periods and the change. A swing is a question for a person, not an error.
- 9. The GST control account's movement for the period is compared with the GST the transactions report, and a difference is flagged. The movement in the GST account for the period is read from the ledger and compared with GST on sales less GST on purchases for the same period (from the ledger's GST report where it offers one, otherwise from the coded lines, and the list says which). A difference is flagged with both figures and, where they can be found, the transactions posted straight to the GST account.
- 10. Whatever it could not check is listed, with the reason. A check the ledger cannot support (no way to read attachments, no reconciled flag, no GST report), a check the business's reporting makes irrelevant (capital under simpler BAS), and a check with too little history is listed under not checked with the reason. Nothing is silently skipped, and nothing is flagged on a guess about data that could not be read.
- 11. Read only: one list to the named person, nothing written, nothing lodged, no advice. The list goes once per run to the bookkeeper or BAS agent the business named. Nothing is written to the ledger: no code changed, no journal posted, no attachment added, nothing lodged. A flag states what was found and why it was flagged; it never says what the code should be, what to claim or how to fix it. The person decides.
- 12. It survives the builder. Someone other than the builder can explain what it does, and it runs on an account the business owns.
- 13. The pass test passes. On the business's own ledger, for a real period: seed one known-bad line (a purchase above the tax invoice threshold with GST claimed and nothing attached). Run the check. Every line flag cites a real transaction id that reads back from the ledger with the same date and total, the seeded line is caught, and the ledger shows nothing was written by the run.
- 1
Hold the build to the checklist
The checks in this standard are what a working build looks like. Implement it yourself, hand it to a developer, or hand the page to an AI with the button below.
- 2
Do not hand-roll
There is no product for this step. Highest option: none. Checklist plus a build.
- 3
If you are stuck
Exceptions, three systems, a team that will not maintain a Zap, or an owner who wants it done. We implement when it has to survive the business.
Building this on Microsoft 365: the lists, the copy flow and the check flow.
Facts that can change, and when we checked them
Checked as at 12 November 2026
Tax invoices (ATO). A tax invoice is needed to claim a GST credit on a purchase over $82.50 including GST; below that a receipt or similar record will do. The ATO says to wait until you hold the tax invoice before claiming the credit, even if that is a later period. The threshold is a setting in this standard so a change is a one-line edit. Sources: the ATO’s tax invoices and when you can claim a GST credit pages.
Simpler BAS and capital purchases (ATO). Simpler BAS is the default for businesses with GST turnover under $10 million and reports G1, 1A and 1B only. Full reporting adds G10 (capital purchases) and G11 (non-capital purchases), and a business that already separates capital from non-capital purchases in its records uses its own split. That is why check 6 runs only under full reporting and reads the business’s own chart of accounts. Sources: GST reporting methods and the ATO’s guide to completing the purchases labels on the BAS.
BAS services (Tax Practitioners Board). A person or business that provides BAS services for a fee or other reward must be registered with the Tax Practitioners Board as a BAS agent or tax agent. This standard prepares a list for a registered agent or for the business itself; it is not a BAS service and does not replace one. Source: TPB, BAS agent registration.
Ledger APIs. From each vendor’s developer documentation: Xero’s Accounting API returns line tax types, tax rates, whether a transaction has attachments and whether a bank transaction is reconciled. The MYOB Business API returns tax codes, bills and spend money with tax codes, attachments for spend money and bills, and a tax code summary report; we found no reconciled status. QuickBooks Online returns tax codes and attachments; we found no reconciled flag and no Australian GST report through its API. Ledger APIs and their plans change; check yours.
Check these against the primary instrument before you rely on them, and store the date you checked beside the value rather than hard-coding it. This standard tells you the shape and where to look. It is not legal advice and it does not tell you that anything complies.
Related reading
Want the whole thing by email?
This paper, plus the rest of the library. One click to stop them.