Lint ISO 20022 pacs.008, pacs.009 and pain.001 XML for postal addresses CBPR+ will not accept: unstructured blocks, missing Ctry or TwnNm, and values duplicated between a structured field and AdrLine. Runs entirely in your browser — nothing is uploaded.
Get the full version - export the dated CBPR+ address audit - $29
$29 once · one licence key per person or CI seat · A correspondent bank charges $15 to $40 to repair one payment by hand; this reads the message before you send it.
Same engine as the VS Code extension, byte for byte.
Free for the file open in your editor - no key, no limit. The workspace sweep and the report ask for a key.
VS Code MarketplaceOpen VSX (Cursor, VSCodium)npmMCP server (npx)Docker Hubext install ReadyStack.cbpr-address-lint npx @readystack/cbpr-address-lint <file> npx @readystack/cbpr-address-lint --mcp
Team? One key for every ReadyStack linter, 5 seats, $149 once
Exports a dated CBPR+ address audit file, CSV and Markdown, covering every ISO 20022 message in the workspace, with the rule citation per finding, so the evidence leaves the editor as a file you can hand to your correspondent bank, your migration programme or your auditor. $29 once, one licence key
One payment, one licence key for this tool. The key is shown right after payment.
A correspondent bank charges $15 to $40 to repair one cross-border payment by hand; the average fee for a rejected or repaired payment is reported at about $12.
Buy the full version — $29Need more than this one? ReadyStack Pass opens all 462 files and 471 full versions — $29/month or $199/year. See the Pass →
· ReadyStack
Real numbers from this tool, line by line.

Six of the nine CBPR+ postal-address rules are the ones that get a cross-border payment repaired by hand, and a single sample pacs.008 in this repository breaks all six - 13 findings, 9 of them errors, across all 4 party address blocks in one message. If you are a payments-integration developer at a bank, a PSP or a treasury software vendor, that file is the one your mapping code generates.
Here is the shape that does it:
<PstlAdr> <AdrLine>Unit 7, Canary Wharf Business Park</AdrLine> <AdrLine>London E14 5AB, United Kingdom</AdrLine> </PstlAdr>
That is a legal ISO 20022 postal address and it validates against the schema. It is also the one address shape CBPR+ is removing, and every agent on the route has to take it apart by hand.
On 2025-11-22 the hybrid postal address option went live in CBPR+. Town and country go in dedicated elements, at most two AdrLine occurrences remain, and - this is the part that surprises people - a component that owns a structured element must not also be echoed in an address line. Removal of fully unstructured addresses was set for 2026-11-14. Then, on 2026-08-27, Swift deferred the payments-related Standards Release 2026 changes, including that removal, and said a revised timetable would be announced by December 2026.
So the cliff moved and the hybrid rules did not. A model trained before August 2026 tells you the November 2026 date is firm; a model trained after it tells you the whole thing is postponed. Both answers get you a repaired payment, because a malformed hybrid is rejected today.
<StrtNm>Via Roma</StrtNm> <BldgNb>12</BldgNb> <PstCd>20121</PstCd> <TwnNm>Milano</TwnNm> <AdrLine>Via Roma 12, 20121 Milano</AdrLine> <Ctry>ITA</Ctry>
Run the linter over that block and it returns 5 errors: four dup_in_adrline, one for each of street, building number, postcode and town repeated inside the address line, plus one ctry_code because ITA is three letters and CountryCode is ISO 3166-1 alpha-2. Nothing here is a typo - somebody kept the legacy free-text address alongside the new structured one.
A third block - a Swiss agent address with no Ctry, an ampersand in Dept and the house number left inside StrtNm - returns 4 findings. Same tool, three different party blocks, three different answers: 1, 5 and 4.
Six errors: unstructured_only, no_country, no_town, dup_in_adrline, adrline_max2, ctry_code. Three warnings: adrline_70 past Max70Text, charset for a character outside the permitted SWIFT set, and bldgnb_in_strtnm for a house number with no dedicated element.
A correspondent bank charges $15 to $40 to repair one cross-border payment by hand, and the average fee for a rejected or repaired payment is reported at about $12. That is per payment. A bad address template does not produce one bad payment, it produces every payment it generates until somebody notices.
Free, with no key: open any pacs.008, pacs.009 or pain.001 and get every failing address block named, on the line where it fails, with the rule behind it. That is the whole job for one file and it finishes there.
The paid layer sits on a different axis - ownership. It exports a dated CBPR+ address audit, CSV and Markdown, for every message in the workspace, with the rule citation per finding, so the evidence leaves the editor as a file you can hand to your bank or your auditor. The same engine runs free in the browser, with nothing uploaded.
It reads the PstlAdr blocks in your ISO 20022 XML - pacs.008, pacs.009, pain.001 - and flags each one that breaks a CBPR+ postal-address rule, on the line where it breaks, with the rule behind it. 9 rules, 6 of them errors. It runs on the file in your editor and, with a key, across the whole workspace into a dated audit file.
Payments-integration developers and ISO 20022 migration engineers at banks, PSPs and treasury software vendors - the people who write the mapping code or review what a code assistant generated. If you own a pacs.008 template, an ERP payment export, or the address mapping from a customer master file, this is your file.
Because a malformed hybrid address is schema-valid. XSD checks types and lengths, so a block that repeats Milano in both TwnNm and an AdrLine passes. The CBPR+ usage guidelines sit above the schema: hybrid rules live since 2025-11-22, and the unstructured cutover deferred 2026-08-27. A general chatbot gets those two dates wrong in both directions.
Free, with no key: lint the file open in your editor against all 9 rules and see every failing address block with its line number. That finishes the job for one file. The paid layer is ownership - a dated CSV and Markdown audit of every message in the workspace, written to disk as evidence you can hand over. $29 once.
A correspondent bank charges $15 to $40 to repair one cross-border payment by hand, and the average fee for a rejected or repaired payment is reported at about $12. Those are per payment, and a bad address template repeats on every payment it generates. The extension is $29 once, and the file check is free.
A general AI chat answers from training data with a cutoff date, cannot read your repository and names no rule version. CBPR+ Structured Address Lint checks the file you open against 9 rules, each naming its legal or official basis, from a rule set dated 2026-09-20, and points at the exact line. For a filing, an audit or a client you need that dated result on your own files.
One question, answered by the person who built it. Your email only if you want the answer sent.
Paste this code into your page. It runs in your visitor’s browser and stays up to date. Nothing your visitors type is stored.
For businesses: your name and logo instead of ours, and each visitor’s result + e-mail in your inbox (only when they tick consent) — Pro from $19/month. See Pro →