The data layer behind Australian software.
65M+ records across company, property, geospatial, banking, and sanctions registers, normalised behind one API. Power autocomplete, validation, checks, and analysis. One integration, instead of 52 pipelines.
Software needs more than one register. Australia ships it fragmented.
Autocomplete needs company and business names. Onboarding needs identifiers, licences, and a sanctions screen. Finance needs banking data. Property and lending need addresses and sales history. Each lives behind a different authority, a different format, a different licence, and a different refresh cycle.
A fix was planned. It never shipped.
The Modernising Business Registers programme was meant to bring ASIC and ABR registers onto one platform. It was abandoned in 2023 after projected costs rose from roughly $480 million to about $2.7 billion. ASIC and ABR remain operationally separate, and no federal API joins them.
Free data is not ready data.
Most of this data is free to obtain, and that is the part teams price correctly. What gets underestimated is that every source is a separate, permanent pipeline — a bulk XML file here, a delimited export there, a spreadsheet that changes shape without notice. Free to obtain, expensive to maintain.
The fragmentation is structural, not temporary.
One API. The maintenance already done.
One key, one route shape, and every register below it already collected, normalised, and kept current on its source’s own schedule.
Records
Indexed and searchable right now, across every register in the catalogue.
Registers
Australian authorities, sanctions lists, and NZ charity and address data on one search and lookup pattern.
Validations
Format and checksum routes for the identifiers your workflows already collect.
What the data powers
Six capabilities, one API. Whatever your product needs to do with Australian data — autocomplete a name, validate an identifier, verify a record, enrich a customer, analyse a market, or screen a counterparty — it is the same integration underneath.
Browse the catalogueType-ahead on company, business-name, address, and product records across registers.
Format and checksum routes for the identifiers your forms already collect.
Match a name to a live register record, with the source and refresh time attached.
Attach status, classification, and geo context to a record you already hold.
Property sales, ANZSIC and OSCA classifications, and CDR banking products for models.
12 sanctions and debarment lists through one shape; every match is a signal to review.
Why teams build on a source-aware layer
Every record carries the authority it came from and when it was refreshed. What DataMill does not prove is stated plainly, so a compliance review is not guessing.
One request shape
Every register uses the same search and lookup pattern. Adding your tenth dataset costs what the first one did.
Source attribution built in
Every record carries the authority it came from and when it was last refreshed, so your audit trail comes with the data.
Identifier validation alongside
Sixteen format and checksum routes — ABN, ACN, TFN, BSB, IBAN and more — sitting next to the registers that confirm them.
Honest boundaries
A passing checksum is not proof an entity exists. A no-match is not a clearance. We state what the data does and does not prove.
Quotas you can plan against
Published request quotas, sustained rates, and burst limits, with live usage in the Customer Portal.
Status you can check
Each register publishes its refresh schedule and current status, so freshness is something you can verify.
Built for teams that depend on data
Whether you are verifying a supplier, screening a counterparty, or enriching an address, it is the same two calls against a different register.
Search and lookup on every register
Search by name to find candidates, then look up the full record by id. The same two calls, on all 52.
One shape across every source
Business, financial, charity, sanctions, geospatial, property, and IP registers answer to the same route pattern.
Generated OpenAPI
Point your codegen at a published contract document and keep typed clients in step with the API.
Know when data moved
Every register publishes its refresh schedule and current status, so staleness is something you can check.
Keys, plans, and quotas
Create scoped API keys, pick a plan, and watch usage against your quota from the Customer Portal.
Usage you can see
Track accepted searches, lookups, error classes, and which registers your product actually leans on.
"name": "ACME HOLDINGS PTY LTD""acn": "000 000 019""status": "Registered""source": "ASIC""refreshedAt": "2026-08-19"
Predictable payloads
Documented fields per register, with the source authority and refresh time attached to every record.
Identifier validation
Sixteen format and checksum routes for Australian, New Zealand, and international identifiers, beside the registers.
Validation and data,
working together
Check the identifier is well-formed, find the record it points at, then pull the detail. Neither half answers the question alone — a number that passes its checksum still has to match something real.
Validate the record
Confirm the identifier against one of 16 checks
Find the record
Search for a company, person, or address
Answer
Retrieve the details
Pull the full record and enrich what you already hold
From question to answer
in two calls
Search, then look upSearch a register by name to get candidates, then look up the full record by id. Learn it once and it works on all 52.
1# search a register by name2curl -H "x-api-key: $KEY" \3 api.datamill.com.au/v1/asic/companies/search?q=Acme5{ "results": [{6 "id": "01J8F3K2M4",7 "name": "ACME HOLDINGS PTY LTD",8 "acn": "000 000 019",9 "status": "Registered"10 }], "source": "ASIC"11}
Catch the bad input
before it costs you
One call, no follow-upRegisters take two calls. Validation takes one: send the number, get a verdict. 16 routes covering the identifiers your forms already collect.
1# one call, no lookup id to follow2curl -H "x-api-key: $KEY" \3 "api.datamill.com.au/v1/validate/business-number4 ?number=51824753556"6{ "valid": true,7 "identifier": "ABN",8 "normalised": "51 824 753 556",9 "checks": ["format", "checksum"] }
Stop maintaining 52 pipelines.
Start with the register your workflow already needs, and add the rest for the same price as the first.