# Bank statements

> Bank statements: what the collector reads, how to connect it, its permissions, its certification by Atlantic Agentic Labs and its security posture.

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.

## At a glance

| Collector                   | Bank statements, version `1.0.0`                                                                                                                                                                  |
| --------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Reads                       | Any bank or custodian: camt.053, camt.052, MT940, MT950 and MT535 statement files (ISO 20022 and SWIFT MT) ([the vendor's documentation](https://www.iso20022.org/iso-20022-message-definitions)) |
| Family                      | Finance                                                                                                                                                                                           |
| Kind                        | Bank                                                                                                                                                                                              |
| Ways to connect             | Key pair, Service account                                                                                                                                                                         |
| Scopes                      | - Read: `s3:ListBucket`, `s3:GetObject`, `sftp:list`, `sftp:read`                                                                                                                                 |
| Read only                   | Yes                                                                                                                                                                                               |
| Vendor's API can move money | No                                                                                                                                                                                                |
| Personal data               | Financial, Contact                                                                                                                                                                                |
| Hosts it may contact        | Only the hosts on your deployment's allow-list (`*`: the host is the one you give it)                                                                                                             |
| Vendor API versions         | ISO 20022 camt.052.001 and camt.053.001, SWIFT MT940, MT950, MT535 (SR2022)                                                                                                                       |
| Lowest engine version       | `0.46.0`                                                                                                                                                                                          |

## What it reads

- **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.

## How to connect

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.

## Permissions

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`).

## Limits

- 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).

## Data handling

- 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.

## Troubleshooting

| 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`                                         |

## Certification

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](/collectors/certification/).

| Date             | Collector | Engine   | Vendor API                                                          | Method                              | Expires        |
| ---------------- | --------- | -------- | ------------------------------------------------------------------- | ----------------------------------- | -------------- |
| 10 November 2026 | `1.0.0`   | `0.46.0` | ISO 20022 camt.052 and camt.053; SWIFT MT940, MT950, MT535 (SR2022) | Fixtures only: built, not certified | Not applicable |

## Security posture

From the collector’s last scan on the default branch. What each line means, and what blocks a release: [Security posture](/collectors/security/).

| Last scanned               | 10 November 2026                                                                                                                                                                                                      |
| -------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Critical findings          | 0                                                                                                                                                                                                                     |
| High findings              | 0                                                                                                                                                                                                                     |
| Medium findings            | 0                                                                                                                                                                                                                     |
| Low findings               | 0                                                                                                                                                                                                                     |
| Info findings              | 0                                                                                                                                                                                                                     |
| Release blocked            | No                                                                                                                                                                                                                    |
| Network allow-list check   | Pass                                                                                                                                                                                                                  |
| Read-only behavioural test | Pass                                                                                                                                                                                                                  |
| SBOM (CycloneDX)           | Produced                                                                                                                                                                                                              |
| Dependency licences        | Pass                                                                                                                                                                                                                  |
| Scanners                   | bandit 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 |

Source: https://docs.atlanticagenticlabs.com/collectors/catalogue/bank-statements/
