Skip to content

Bank statements

Built, not certified Built and tested against recorded and synthetic responses (version 1.0.0, 10 November 2026). Not yet run against the vendor's sandbox or a client environment.

Reads bank and custody statement files from a bucket or an SFTP drop that your banks and custodians already deliver to: camt.053 and camt.052 (ISO 20022), MT940 and MT950, and MT535 statements of holdings, from any bank or custodian (State Street included). It uses no bank’s API and no credential that could move money. It reads in place, in your deployment; only ids, hashes and counts reach LightHouse.

CollectorBank statements, version 1.0.0
ReadsAny bank or custodian: camt.053, camt.052, MT940, MT950 and MT535 statement files (ISO 20022 and SWIFT MT) (the vendor's documentation)
FamilyFinance
KindBank
Ways to connectKey pair, Service account
Scopes
  • Read: s3:ListBucket, s3:GetObject, sftp:list, sftp:read
Read onlyYes
Vendor's API can move moneyNo
Personal dataFinancial, Contact
Hosts it may contactOnly the hosts on your deployment's allow-list (*: the host is the one you give it)
Vendor API versionsISO 20022 camt.052.001 and camt.053.001, SWIFT MT940, MT950, MT535 (SR2022)
Lowest engine version0.46.0
  • Bank statements (camt.053, camt.052, MT940, MT950): one record per statement, with its balances and every entry: booked and value dates, signed amount and currency, references, end-to-end id, counterparty and details (a reversal marked), exact to the digit.
  • Statements of holdings (MT535): one record per statement, with the safekeeping account, each ISIN with description, quantity (as face amount or units), available sub-balance and holding value, and the page total. A page of updates only is marked.
  • Files with the extensions .xml, .camt, .053, .052, .sta, .mt940, .940, .950, .535, .txt and .fin, up to max_mb (default 50). Anything else, or a file that is not a statement, is skipped and counted.
  • A file is read again only when it changes (by its ETag or size and time); a file that disappears takes its statements with it.

Choose where your banks deliver:

  • A bucket you own, as s3://bucket/prefix, gs://bucket/prefix, azblob://account/container/prefix or file:/path. It is read by your deployment’s own identity, or for AWS by a role it assumes (role_arn, external_id), set up by your engineer.
  • An SFTP drop, as sftp://user@host:22/path. In LightHouse, open Setup and admin, Connectors, choose Bank statements, and paste the server’s host key fingerprint (SHA256:..., from ssh-keygen -lf), then the PEM of the drop account’s private key. Your browser seals it to your deployment; LightHouse never sees it. The SFTP route needs the bank-statements extra (paramiko).

The SFTP credential is JSON in the variable the source names: private_key, host_key, and user if it is not in the address.

None to check: a statement file cannot move money, trade, instruct or approve. The collector only lists and reads files.

  • Read-only, by construction and by test. This collector does not speak HTTP itself, so its read-only tests drive it through stubbed clients that record every call and refuse any other: an SFTP client of which only listdir_attr and open (always opened rb) are ever called, and an S3 client of which only list_objects_v2 and get_object are. Any write, delete, rename or upload would fail those tests. The object-store adapters expose list and get only.
  • Minimum access to give: for a bucket, list and read (s3:ListBucket and s3:GetObject, or the equivalent on Cloud Storage or Blob Storage); for SFTP, a drop account that can list and read the directory.
  • SFTP host key pinned: a server that does not present the pinned key is refused before the key signs anything (the SFTP server's host key is not the pinned one).
  • Files only: no bank API, no balances that are not in a file you receive.
  • The SFTP host must be a DNS name; subdirectories and hidden files are skipped.
  • A statement’s entry details are cut at 300 characters in the record.
  • MT536, MT564 and ISO 20022 semt.002 are not read yet.
  • A file over max_mb, or with an unknown extension, is skipped and counted (files skipped in the run’s log).
  • Statements hold financial and personal data: account numbers, balances, counterparties’ names and remittance text. Documents carry the label you give the source (default confidential).
  • Content is read in place, in your deployment. LightHouse receives ids, hashes and counts, never the statements, and never opens the credential.
  • Each record carries the SHA-256 of the file it came from, so any figure can be traced to the exact bytes your bank delivered.
  • The data is audit-ready for your own agents; nothing here certifies anyone against any regulation.
What you see What it means What to do
the SFTP server's host key is not the pinned one The server presented another key Check the fingerprint with your bank; never accept a changed one without asking
host_key is the server's key fingerprint, SHA256:<base64> The pinned fingerprint is missing or malformed Paste the SHA256:... fingerprint
the SFTP host is a DNS name The address uses an IP address or odd characters Use the host name
private_key is an Ed25519, RSA or ECDSA key The PEM is not one of those key kinds Paste the drop account’s private key
an object store is s3://bucket/prefix, gs://bucket/prefix, azblob://account/container/prefix or file:/path The location is not one of these Correct the location
Run succeeded, few records written Files were skipped (unknown extension, too large, not a statement) Check the run’s log for files skipped

Each entry is a run by Atlantic Agentic Labs, newest first. Only a run against the vendor’s sandbox or a client environment certifies a collector; a certification lasts six months, or less if the vendor publishes an API version the collector does not list. See How collectors are certified.

DateCollectorEngineVendor APIMethodExpires
10 November 20261.0.00.46.0ISO 20022 camt.052 and camt.053; SWIFT MT940, MT950, MT535 (SR2022)Fixtures only: built, not certifiedNot applicable

From the collector’s last scan on the default branch. What each line means, and what blocks a release: Security posture.

Last scanned10 November 2026
Critical findings0
High findings0
Medium findings0
Low findings0
Info findings0
Release blockedNo
Network allow-list checkPass
Read-only behavioural testPass
SBOM (CycloneDX)Produced
Dependency licencesPass
Scannersbandit 1.9.4, semgrep 1.181.1, pip-audit 2.10.1, osv-scanner 2.7.0, cyclonedx-py 7.5.0, pip-licenses 5.5.5, gitleaks repository job aal-secrets, hosts_check tools/hosts_check.py, read-only test pytest -m read_only