Your risk data rules are written. With Soda, they get executed before every report.

BCBS 239 is the Basel Committee’s standard for risk data aggregation and reporting. Soda runs your data quality rules and keeps every result.

Book a demo For global systemically important banks since January 2016

The deadline has passed. Most banks still fall short.

Still short, 10 years on
201314 principles published
2016Deadline for the largest banks
Still short, 10 years on2023: 2 of 31 banks fully compliant
No improvementin the average risk data score, 2024 to 2025
Where banks stood in 2025European Central Bank, Nov 2025 and Mar 2026
Accuracy, completeness, timelinessProblems still widely found
1 in 5new governance findings were about risk data
Penalty paymentspossible when remediation misses its deadline

Your evidence depends on who kept the spreadsheet.

  1. Your rules are scattered across spreadsheets and scripts.

  2. The history your supervisor needs is rebuilt from email.

  3. Your board’s data quality report is assembled by hand.

Turn your data quality rules into checks. Keep evidence from every run.

Soda tests four of the 14 principles

Soda tests four of the 14 principles; it does not make a bank compliant. The other ten cover governance, architecture, reporting and supervision.

Data contractAccuracy and integrity
Exposure total matches the ledger
risk.credit_exposure· v14
Feature: reconciliationcolumn exposure_eur
reconciliation:
  sources:
    - name: ledger
      dataset: finance/gl/balances
  checks:
    - aggregate_diff:
        source: ledger
        function: sum
        column: exposure_eur
        attributes:
          bcbs239: P3
Difference €0.00 · passedBefore the Sep 2026 report · 5 Oct, 17:42 · runner-prod
Data contractCompleteness
No missing counterparty IDs
risk.credit_exposure· v14
Feature: missing checkcolumn counterparty_lei
- missing:
    name: No missing counterparty IDs
    attributes:
      bcbs239: P4
- row_count:
    threshold:
      must_be_greater_than: 0
0 missing in 1,284,310 rows · passedBefore the Sep 2026 report · 5 Oct, 17:42 · runner-prod
Data contractTimeliness
Updated in the last 4 hours
risk.credit_exposure· v14
Feature: freshness checkcolumn as_of_date
- freshness:
    name: Updated in the last 4 hours
    column: as_of_date
    threshold:
      unit: hour
      must_be_less_than: 4
    attributes:
      bcbs239: P5
Updated 2 h ago · passedMetric monitoring also flags an unusual volume
Data contractReport accuracy
Report matches its source, row by row
risk.board_report_sep26· v14
Feature: reconciliationrow by row
reconciliation:
  sources:
    - name: exposure_source
      dataset: risk/credit_exposure
  checks:
    - rows_diff:
        source: exposure_source
        threshold: { must_be: 0 }
        attributes:
          bcbs239: P7
0 rows differ · passedThe report says what the source data says

Governance writes the rule.
Engineering approves it.
No ticket in between.

Review the same data contract in Git or the interface. Alerts go to Slack, Microsoft Teams or email.

One rule“Total exposure in the board report must match the general ledger.”

  1. Your risk data office proposes it

    Proposed, no code
  2. Engineering approves it

    In data contract version 15
  3. It runs before every report

    Passed · difference €0.00
  4. The result goes to Collibra

    Accuracy · passed

Results go to your catalog. Rule requests stay in Soda.

Self-host your checks. Keep risk data inside your bank.

When a row-level check fails, Diagnostics Warehouse keeps the failed rows in your warehouse, if enabled.

Your network
Your cloud · Your Kubernetes · Your warehouse
Your data
Your warehouse
risk.exposure
Snowflake
Every check runs here
Runner
Risk checks · active
In your Kubernetes
Failed rows stay here
Diagnostics Warehouse
Failed rowsCheck
lei nullmissing
rating ZZvalidity

Keep failed-row sampling off so no rows of risk data reach Soda Cloud.

Cloud
What reaches Soda Cloud
Metadata · monitoring metrics
  • The result of each check4 of 4
  • Data contract version and approvalv14
  • Date and time of each run5 Oct
  • Rows of risk data0

Shared contracts help teams work together.

“We went from detection to prevention. Most data quality tooling will tell you something broke after it broke. Our goal is to catch it before that reaches the dashboards and datasets in the first place.”
Sid Srivastava, Director of Data Governance
Sid Srivastava
  • Investing in data quality is key for cross-functional teams to make accurate, complete decisions.
    Mario Konschake

    Mario KonschakeDirector, Data Platform

  • Data contracts brought transparency and also bigger cooperation between different teams.
    Renata Hlavová
    make

    Renata HlavováData Engineer

  • We're catching issues we never would've noticed before.
    Zach Phillips
    Appfire

    Zach PhillipsSenior Product Analyst

  • Working with Soda has improved the productivity of my team. Previously we would do a lot of back-and-forth Q&A: “is this file up to date? working? are you sure”.
    Patrick Callinan
    CarTrawler

    Patrick CallinanDirector of Insights and Data Science

Also on Soda Fitch Group AvidXchange

Questions about BCBS 239.

Scope, the principles, and what Soda covers.

What is BCBS 239?

BCBS 239 is the Basel Committee on Banking Supervision's Principles for effective risk data aggregation and risk reporting, published in January 2013. It sets 14 principles: 11 for banks, on governance and infrastructure, aggregating risk data and reporting it, and 3 for supervisors. It was written after the financial crisis that began in 2007 showed that many banks could not aggregate their risk exposures fully, quickly and accurately.

Who does BCBS 239 apply to?

It is addressed first to systemically important banks. Banks named global systemically important banks (G-SIBs) in 2011 or 2012 had to meet the principles by January 2016, and banks named later have three years from their designation. The Basel Committee strongly suggests that national supervisors apply the principles to domestic systemically important banks three years after their designation, and supervisors may apply them to other banks in proportion to their size and complexity.

What are the 14 principles of BCBS 239?

Governance and infrastructure: 1 Governance, 2 Data architecture and IT infrastructure. Risk data aggregation: 3 Accuracy and integrity, 4 Completeness, 5 Timeliness, 6 Adaptability. Risk reporting: 7 Accuracy, 8 Comprehensiveness, 9 Clarity and usefulness, 10 Frequency, 11 Distribution. Supervisory review: 12 Review, 13 Remedial actions and supervisory measures, 14 Home/host cooperation.

How many banks comply with BCBS 239?

Few. In its November 2023 progress report, its latest, the Basel Committee found that of the 31 G-SIBs it assessed, only two were fully compliant with all the principles, and that no single principle had been fully implemented across all banks. In November 2025, the European Central Bank reported no improvement in the average risk data score of the banks it supervises, compared with the year before.

What does the European Central Bank expect?

The European Central Bank uses the BCBS 239 principles as its benchmark when it assesses the banks it supervises directly. Its Guide on effective risk data aggregation and risk reporting, published in May 2024, names seven areas where it expects substantial progress. One is data quality: controls on accuracy and integrity, completeness and timeliness, automated where appropriate, periodic reconciliation, and a register of data quality issues with their remediation.

Does Soda make a bank compliant with BCBS 239?

No. Compliance is your bank's, and most of the principles are decisions on governance, architecture and reporting. Soda covers the part that is tests on the data: accuracy and reconciliation (Principles 3 and 7), completeness (4) and timeliness (5). It runs those checks before each report, records every result, and tags each check with the principle it serves.

Does our risk data leave our network?

Not when you run Soda self-hosted. The runner executes every check inside your network, and the Diagnostics Warehouse keeps failed rows in your own warehouse. Soda Cloud receives metadata, aggregated check results and monitoring metrics: each check's name and logic, the dataset name, what the check measured and whether it passed. Showing samples of failed rows in Soda Cloud is a separate option, off by default. If you use Soda's hosted runner instead, the checks run from Soda's infrastructure.

What can we show a supervisor?

The history of every run: each check, its result, when it ran and on which version of the data contract, and who proposed and who approved each change to a check. For checks that test single rows, and with the Diagnostics Warehouse turned on, failed rows are kept in your warehouse with their check, so a failure can be traced to the records behind it.

Does Soda work with our data catalog?

Yes. Soda publishes each check's result to Collibra, Alation, Atlan, Microsoft Purview or data.world, next to the dataset it tests, on a schedule. With Collibra it also brings owners, tags and business terms into Soda. Your team sets the integration up together with Soda.

First call · 30 minutes · Zoom

Have the evidence before your supervisor asks.

Bring a risk data rule. See how Soda would run it and record the result.

  • Two short steps, then pick a time
  • Soda can run inside your network
  1. 1You
  2. 2Your company
  3. 3Your time