A model provides an incorrect answer with high confidence. A dashboard displays different values for the same metric because of how the queries were constructed. An engineer spends several hours repairing a broken pipeline only for the same issue to return three weeks later in a different form. The models and the dashboards do not cause these situations. These are data quality issues. Teams must apply the solutions earlier in the process than they usually realise.
Soda data quality is a testing framework that validates data using the same principles as a software test suite. It uses YAML rules called SodaCL to check tables for freshness, completeness, and validity. Soda Core is a free tool that runs from the command line. Soda Cloud provides additional features for teams, including scheduled scans, dashboards, and alerting for integrated monitoring.
Soda is a practical solution for data quality issues. It is a testing framework that evaluates your data similarly to how a test suite evaluates code. You define rules for how a table should appear, and Soda executes these rules against your actual data. It notifies you immediately if the data does not match your requirements. You can use the free command-line tool or subscribe to the hosted platform for additional features like monitoring, alerts, and dashboards. At Shipshape Data, we frequently use data quality tools. We use Soda when a client lacks a central location for data checks and the accuracy of their information is in doubt.
This guide explains the functions of Soda and how to plan an implementation that remains manageable as alert volumes grow. It provides instructions for installing and configuring the software with a data warehouse. It also describes how to integrate Soda into CI/CD and orchestration workflows to automate checks. The final section compares the tool to Great Expectations and various anomaly-detection platforms. You can read the entire guide for a complete introduction or go directly to the comparison section to evaluate if Soda is the correct choice for your requirements.
How Soda data quality works
Soda validates datasets by comparing them to rules you write in YAML. These rules use a syntax called SodaCL, which stands for Soda Checks Language. You can write checks to verify that a table contains more than a thousand rows, that an email field has no blank entries, or that order IDs are unique. Soda executes these checks against Snowflake, BigQuery, Redshift, Databricks, PostgreSQL or other supported connectors. The system then returns a result of pass or fail. You receive a notification immediately if a check fails.
SodaCL ships with more than twenty-five built-in metrics covering freshness, completeness, validity, and distribution, which covers most of what a data team needs without writing custom SQL. When the built-ins fall short, you drop into a raw SQL check and Soda treats the result the same way. The language reads close to plain English, which matters more than it sounds: a check that an analyst can read and correct without asking an engineer gets maintained. A check buried in a wall of Python doesn't.
Soda Core: the free, open-source engine
Soda Core is a command-line tool and Python library. You can install the software, connect it to a data source, and run a scan to see results in your terminal. The tool is free and includes all necessary features. Many teams use only this tool for their work. If you want to use version-controlled checks alongside dbt models in a CI pipeline, Soda Core performs these tasks independently.
Soda Cloud: monitoring and management
Soda Cloud is the commercial version of the software. It provides scheduled scans that run automatically, a dashboard that tracks quality trends across all monitored datasets, and alert routing to notify data owners of failed checks. It includes anomaly detection to identify patterns that are not covered by manual rules, which helps find unexpected failures. The choice between the open-source version and the cloud version follows a standard model. The core version provides more direct control, while the cloud version provides more convenience. Your team's choice depends on whether you already have existing systems for running scheduled jobs and managing alerts.
Step 1: plan before you write a single check
Teams often waste their first month with Soda by writing checks immediately. They connect Soda to every table in the warehouse and generate many results. By the third week, staff members stop reading the Slack channel because it sends forty daily alerts about tables that few people use.
Planning is less engaging than writing YAML. However, it determines whether people trust a data quality system or choose to ignore its alerts.
Identify the datasets that are relevant
Begin by prioritising tables that support production systems, customer dashboards, and automated decision tools. These datasets cause immediate and visible failures when errors occur, so they require the first quality checks. You should also prioritise internal datasets used by multiple teams. Even if these are not customer-facing, a quality issue in a shared dataset will negatively affect every downstream team.
You can divide most data estates into three tiers. Tier one includes production systems, revenue data, and customer-facing elements. Tier two includes internal dashboards, operational reports, and daily team workflows. Tier three includes experimental data, archives, and rarely used queries. You should create your initial checks for tier one only. Ensure these checks run reliably and allow the team to understand the patterns before you expand coverage to the other tiers. If you try to cover all three tiers immediately, you will likely create checks that no one maintains for data that no one uses.
Define the criteria for quality for each dataset
Each dataset requires a specific definition of quality. A rule that applies to a revenue table may not be appropriate for a log table. Revenue figures typically require zero missing values and exact decimal precision. Behavioural logs can tolerate occasional gaps but require timestamps to be in a strict order. An event log with entries out of sequence is not useful for downstream tasks. You should write these standards in plain language before creating any automated checks. This prevents you from encoding assumptions that have not been agreed upon.
You can create a comprehensive checklist for any dataset by answering four questions. First, identify which fields must always contain data and determine the maximum percentage of missing values that downstream systems can tolerate. Second, define the required format for each field and set the boundaries for acceptable numerical or categorical ranges. Third, establish how related fields interact and identify the specific rules that must remain consistent across those fields. Finally, determine the maximum age of the data before it loses its utility and set the expected frequency for updates. Answering these four points provides most of the necessary requirements for a table.
Build a coverage plan with a sane check frequency
Not every check needs to run hourly.
Run structural checks such as row counts and schema shape often since they are inexpensive. Business logic checks require more compute and are updated less frequently, therefore running them each day is usually enough. Carry out costly distribution checks that examine whole columns for statistical drift on a weekly basis unless a particular requirement calls for a higher frequency. Mistakes in scheduling these checks can lead to financial and operational impacts. Executing checks too frequently consumes warehouse compute on unchanged data. Running them too rarely lets broken pipelines remain for a week before they are detected.
Step 2: install and configure Soda
Once you have a plan, you can install Soda within a few minutes. The system that executes the scans needs to have Python 3.8 or a later version. You also require the login credentials for the data warehouse you plan to use.
Install the right variant for your warehouse
Soda Core can be obtained as a collection of platform-specific packages. Each package contains the database driver for a particular connector. Install the Snowflake package when using that warehouse, the BigQuery package for BigQuery, or the appropriate packages for Redshift, PostgreSQL, and Databricks. Only install packages for the data sources you plan to query. If you later add a new source, you can install the extra package without modifying your current configuration. Once installed, execute the version command in your terminal. Verify that the system outputs a version number before proceeding.
Point the tool at your data
Connection details reside in a configuration file that is separate from your checks. This separation stops you from embedding credentials in files you commit and share. The configuration file specifies the data source, its type, and the required connection parameters. For PostgreSQL, these parameters comprise the host, port, username, password, database, and schema. Snowflake needs account and warehouse names, BigQuery needs project and dataset identifiers, and Databricks needs cluster details. Use environment variables for any sensitive data. If the file holds a hardcoded credential, even for a temporary development environment, avoid placing it under version control. This practice is required because team members might copy a working configuration file containing a real password to save time rather than reading the documentation.
Create and run your first scan
Your checks are kept in a second YAML file that is separate from the connection configuration. This file holds your specific rules, for example requiring a row count greater than zero, ensuring no customer IDs are missing, or confirming that order dates are no older than one day. When you execute the scan command with your data source, configuration file, and checks file, Soda connects to your data and runs each check. The results are output directly to the terminal as passes or failures. If a check fails, the output shows which rule was broken and compares the expected value to the actual value found. This lets you start debugging with specific data points rather than general observations.
The usefulness of a data quality check relies on how fast a failure notification pinpoints the specific error, not on the existence of a success indicator.
Step 3: wire Soda into the workflows you already have
Manual scans detect issues after they happen, often after someone spots incorrect data. Automated checks add more value by preventing bad data from entering the system. This necessitates integrating checks into CI/CD pipelines for structural changes and into orchestration tools for data movement.
Put checks in the deployment pipeline
Your CI/CD pipeline serves as the first checkpoint for your data. Here, schema changes, dbt model edits, and transformation logic are reviewed before deployment. You should set up the pipeline to run Soda whenever a schema or model is changed. A failed check should block the deployment just like a failed unit test. This step is typically a short part of a GitHub Actions workflow or a comparable CI tool. You must install the required Soda package, fetch credentials from your secrets store, and execute the scan command against the deployment environment. You should keep the check files in the same repository as the transformation code. This ensures that any change to the data quality definition appears in the same pull request as the code that modifies the table. This keeps the review process and version history consistent.
Add checks to the orchestration layer
Airflow, Prefect, Dagster, and comparable tools control data movement, making them the logical place to add validation as a defined step in the DAG. Run a check immediately after loading data from an external source, then run another check after each transformation step completes. This helps you detect problems both in the original data and in the results of your processing. Configure the orchestrator to stop if a check fails. Allowing a pipeline to keep running with data known to be incorrect will only make it harder to locate the original cause of the problem.
Get alerts to the right person, not the loudest channel
A check that fails without notifying anyone in a log file is ineffective.
Route alerts to the actual data owners instead of dumping everything into a single shared channel that everyone eventually mutes, regardless of whether the routing uses Slack, email, PagerDuty, or the Soda Cloud integration directly. A good alert lists the failed check, the dataset it failed on, and the actual value versus the expected value, enabling the reader to begin fixing. Not every check warrants the same urgency. A broken revenue calculation should trigger an immediate page. A completeness check on a low-stakes internal table can wait for a Slack message reviewed during business hours. Treating every failure as equally urgent trains the team to ignore all of them within a month.
Step 4: how Soda compares to the alternatives
You have alternatives besides Soda. If you select a data quality tool before defining your specific checks and schedule, you will probably need to rebuild your system in eighteen months because the tool does not meet your needs.
Soda versus Great Expectations
Great Expectations is the main open-source alternative. The two tools share numerous features. Both employ configuration files for data validation, support major data warehouses, and provide free core versions. The primary difference lies in how users write checks. Great Expectations uses expectation objects. This method is structured but demands more effort to read and write. SodaCL uses a syntax that resembles ordinary sentences. A row count check in Great Expectations needs more lines of code than the same check in SodaCL. This length difference becomes more significant as a team grows its total number of checks from a few to several hundred.
Great Expectations excels at data profiling because it can automatically generate validation rules from an existing dataset. This feature helps you quickly establish coverage for a table lacking previous checks. Soda focuses on checks that users write themselves. Its error messages are generally clearer and its scans often run faster. If your team needs automatic documentation and profiling right away, the complexity of Great Expectations is justified. If you prefer checks that everyone on the team can read and edit without engineering training, Soda is the more straightforward option.
Soda compared to anomaly detection platforms
Commercial platforms such as Monte Carlo and Datafold employ a different method. These tools do not ask you to write rules. Instead, they examine your data history to set a baseline and issue alerts when the data diverges from that pattern. This method lets you roll out coverage rapidly, particularly for tables where specific problems are hard to anticipate. However, you give up control over the exact criteria that cause an alert. This trade-off does not suit every team.
Both cost and capability matter equally in this decision. Soda Core can be used for free no matter how much data or how many tables you have. Commercial platforms typically charge according to data volume or table count. Consequently, your costs will rise as your data environment expands, even if you do not add more checks. You ought to compute the costs using your specific data volume before selecting a platform. Evaluate your preferred options against a data pipeline that is currently problematic. A tool might seem to perform well in a brief demo yet fail to manage the specific transformations that break your reports.
Establishing the correct sequence
Data quality checks become ineffective when the underlying data model is disorganised. Teams frequently adopt Soda and create accurate checks that fail often. These failures typically happen because there is no agreement on a table's contents rather than genuine data errors. Data quality tools need a stable target for validation. If the data architecture changes continuously, the checks will flag every change as a failure. This quickly leads teams to lose trust in the alerts.
That is essentially what data quality management means: a discipline that begins by agreeing on what correct looks like, encodes that agreement, and then automates it so the agreement persists without manual weekly re-checking. Soda forms a strong component of that discipline. It does not replace having the discipline initially.
Process ownership is as important as the checks.
A check without a named owner is a check that nobody fixes when it fails, and this gap usually reflects broader data governance gaps: no one has agreed who is responsible for a dataset's quality. Resolve that ownership issue before scaling checks beyond your first tier, because a hundred well-written checks directed to no one produce the same result as having no checks.
Where to start
Start with a small scope. Choose your most important datasets and write the specific checks that would have caught your three most recent data incidents. Make sure these tests run reliably in your continuous integration pipeline before proceeding to other tasks. Keep an accurate record of your coverage as you move forward. A dashboard that looks thorough but only tracks row counts will not stop major failures. Expand your coverage only after you have set up a working pattern and the team depends on the alerts' accuracy.
If you are earlier in the process, still mapping which datasets matter or untangling a data model that cannot remain stable long enough to validate, that is the area where we spend most of our time at Shipshape Data. Talk to us and we will help you determine where your foundation needs work before you choose a tool to place on top of it.
If your internal reporting no longer satisfies your needs, you may need our data consulting services. We usually start working with clients at this stage.
Frequently asked questions
Is the Soda data quality software open-source?
Soda Core is a free, open-source command-line engine and Python library. Many teams use this tool solely for their needs. Soda Cloud is a commercial product that adds features like scheduled scans, monitoring dashboards, and alert routing. Most users move from the free version to the paid version when they need a hosted platform for scheduling and results.
What is the cost of Soda data quality pricing?
Soda Core stays free no matter how much data or how many tables you use. Soda Cloud is the paid version that offers scheduled scans, dashboards, and alerts. Other commercial anomaly detection tools typically base their pricing on data volume or table counts. This means the cost of those alternatives rises as your data environment expands.
What is Soda Core for data quality testing?
Soda Core is an open-source command-line tool and a Python library. It runs data checks written in SodaCL, a YAML-based language, against a database or data warehouse. You can install the tool, link it to a data source, and run a scan. The results show in your terminal as a pass or fail status. This tool works independently and does not need a paid Soda Cloud account.
What are the data quality tools provided by Soda?
Soda's core offering is SodaCL, a YAML check language that covers freshness, row counts, missing values, duplicates, and schema changes across more than twenty-five built-in metrics, and includes custom SQL checks for anything the built-ins do not cover. Soda Core runs this from the command line, whereas Soda Cloud adds scheduling, dashboards, and alert routing.
How does Soda define data quality?
In Soda, data quality means creating rules in SodaCL that describe how a table should look, then executing them against the actual data to obtain an immediate pass or fail. It includes freshness, completeness, validity, and distribution, so issues are caught the moment reality no longer matches the rule instead of after several downstream reports.