Install
openclaw skills install australian-business-verificationVerifies whether an Australian business is currently registered and active on the Australian Business Register (ABR), using its ABN (Australian Business Number), ACN (Australian Company Number / ASIC number), or business or entity name. Use this skill whenever a user asks to verify, check, confirm, validate, or look up an ABN, ACN, business registration status, "is this ABN active", "is this business registered / legit / real / a scam", GST registration status, entity type, or trading name for any Australian company, sole trader, partnership, trust, or government entity. Also use for KYC, vendor or supplier onboarding, accounts payable invoice checks, BAS/GST compliance, tax invoice validation, and due-diligence tasks involving any Australian business. Queries the official Australian Government ABR JSON API directly (no scraping, no third party) and returns entity name, ABN status (active/cancelled), entity type, GST registration status and date, state/postcode, and registered business and trading names.
openclaw skills install australian-business-verificationThis skill checks whether an Australian Business Number (ABN) belongs to a real, currently-registered entity by querying the Australian Business Register (ABR) JSON API directly — the same free government register operated by the Australian Taxation Office (ATO) that underpins ABN Lookup (abr.business.gov.au). It can verify by ABN, by ACN (Australian Company Number, issued by ASIC), or by business/entity name.
Given a valid ABN, the skill returns:
This is a live, read-only lookup against a public government data source. It does not modify, register, or update any ABN — the ABR web services are read-only by design.
Trigger this skill for requests such as:
The ABR JSON API requires a free authentication GUID (Globally Unique Identifier). This is not a paid API key — there is no cost and no usage charge from the Australian Government.
ABR_GUID (do not hardcode it anywhere, do not print it back to the user,
and do not log it)If ABR_GUID is not set, scripts/abn_lookup.py will return a clear setup error
instead of failing silently — surface that message to the user with the link above.
No other credentials, scopes, or accounts are required. The only network access
needed is outbound HTTPS to abr.business.gov.au.
Ask the user for an ABN if they have one — this gives the most complete result in a single call. If they don't have an ABN, ask whether they have:
Don't ask for all three at once — ask which identifier they have, then proceed with whichever is available. If the user gives a name and several businesses could match, that's expected — Step 6 covers resolving ambiguous name searches.
Before making any network call, validate the ABN or ACN checksum locally:
python3 scripts/abn_lookup.py --validate "51 824 753 556"
This runs the official ATO modulus-89 (ABN) or ASIC modulus-10 (ACN) checksum with
no API call. If valid_checksum is false, the number is malformed or mistyped
— tell the user immediately and ask them to double-check it rather than burning an
API call that will just come back with "Search text is not a valid ABN or ACN".
If this is the first lookup in the session, run any lookup command and check for the
ABR_GUID environment variable is not set error. If it appears, stop and walk the
user through the Setup / Prerequisites section above — do not attempt to guess,
fabricate, or ask the user to paste a GUID directly into chat.
Run the helper script with the appropriate flag. It calls the official endpoint,
strips the JSONP callback(...) wrapper the ABR API returns, and prints clean JSON.
# Look up by ABN (preferred — returns full entity detail)
python3 scripts/abn_lookup.py --abn 51824753556
# Look up by ACN (returns the same shape as an ABN lookup)
python3 scripts/abn_lookup.py --acn 102417032
# Search by business / entity name (returns a ranked list of candidates)
python3 scripts/abn_lookup.py --name "Acme Consulting" --max-results 10
The script also adds a small "summary" block on top of the raw ABR response with
a ready-to-use verdict, gstRegistered, and canChargeGst field so you don't have
to re-derive these from the raw fields. The full raw ABR fields are documented in
reference/api-reference.md — read that file if you need to interpret a field that
isn't covered by summary.
Check the top-level "message" field first (mapped from the ABR Message field):
reference/api-reference.md for the full error table and how to respond to each
one — do not present these raw strings to the user without contextFor a successful ABN/ACN lookup, the key fields to read are:
| Field | Meaning |
|---|---|
summary.verdict | "active", "cancelled", "not_found", or "error" |
entityName | Registered legal name |
entityTypeName / entityTypeCode | e.g. "Australian Private Company" / PRV |
abnStatus | "Active" or "Cancelled" |
summary.gstRegistered | true/false |
gst | Date GST registration took effect (if registered) |
addressState / addressPostcode | Main business location |
businessName | Array of registered business/trading names (may be empty) |
A "Cancelled" ABN means the entity was registered but is not currently
active — never describe a cancelled ABN as "verified" or "active". Report it
plainly as cancelled and let the user decide how to proceed.
A name search (--name) returns a "names" array of candidates, each with a
score (0–100 relevance) and an abn. The ABR JSON name-search endpoint does
not return full entity detail (no entity type, no GST status) — only name,
ABN, status, state, postcode, and score.
score, highest first--abn lookup on that entity's ABN to get the full detail (entity type, GST
status, etc.) for the final verification result| Situation | How to respond |
|---|---|
ABR_GUID not set | Explain the free GUID registration process (Setup section); don't retry without it |
Local checksum fails (--validate) | Tell the user the ABN/ACN appears mistyped before calling the API |
message = "No records found" | The ABN/ACN doesn't exist on the ABR. State this plainly — it does not necessarily mean fraud, but the number as given is not a registered ABN/ACN |
message mentions "GUID...not recognised" or "registration...has been cancelled" | This is a setup/credential problem, not a problem with the business being checked. Direct the user to re-check their GUID or re-register; do not present this as information about the business |
abnStatus = "Cancelled" | Registered historically, not currently active. Report clearly as Cancelled, not "inactive business doesn't exist" |
gst is empty/null | Entity is not currently registered for GST — note this plainly, especially for invoicing/BAS questions |
| Name search returns 0 results | Try a shorter or differently-spelled name, or ask the user for an ABN/ACN instead |
| Name search returns many similar-scoring results | List the top few and ask the user to disambiguate — never pick one arbitrarily |
| Network/timeout error | Retry once. If it fails again, tell the user the ABR service couldn't be reached and suggest checking https://abr.business.gov.au directly |
| Checking many ABNs in a loop | Space out calls (the ABR does not publish a hard rate limit, but a ~150–200ms pause between calls is good practice for fair use) |
Present results to the user as a short, plain-language summary — not a raw JSON dump. A good structure:
Entity: <entityName>
ABN: <abn> (<abnStatus> since <effective date if available>)
Entity type: <entityTypeName>
GST registered: <Yes, since <date> | No>
Location: <addressState> <addressPostcode>
Business/trading names: <comma-separated list, or "none registered">
Result: <one-line plain-English verdict — e.g. "This ABN is currently active and
the entity is GST-registered, so it can legitimately charge GST on invoices." or
"This ABN exists but its status is Cancelled — it is not currently an active
registration.">
Source: Australian Business Register (abr.business.gov.au), live lookup.
For a "No records found" result, say plainly that no entity matches the given ABN/ACN on the ABR, and suggest the user double-check the number with the business.
reference/api-reference.md — full ABR JSON API endpoint reference: request
parameters, every response field, the JSONP format, and the complete error
message table. Read this if you hit an error message not covered above, or need
a field not listed in Step 5.reference/entity-types.md — common ABR entity type codes (PRV, IND, TRT,
etc.) and what they mean. The API also returns the full English description
(entityTypeName), so this is rarely needed, but useful for codes you don't
recognise.examples/sample-responses.md — illustrative example responses (active entity,
cancelled ABN, GST-registered vs not, name search, and each error case) showing
exactly what scripts/abn_lookup.py returns for each.scripts/abn_lookup.py — the helper script used in Steps 2 and 4. Pure Python 3
standard library, no extra dependencies required.