Data Health
Monitor the health of your data and define pass/fail contracts on tables to catch freshness, volume, and completeness issues automatically.
Last reviewed September 15, 2026
Data Health and Data Contracts work together to keep the data in your warehouse correct. Data Health is the monitoring side. It is a live view of the health of your data, based on checks that run automatically as data comes in. Data Contracts is where you define those checks. A contract is a set of pass/fail checks on one table, with a tier, SLA targets and alert routing.
Open Data → Integrations → Data Health. Open a contract from Data Health or from the detail page of a table in the Data Catalog.
Data Health vs. Contracts
| Page | What it is |
|---|---|
| Data Health | The monitoring view. Shows every active check, its latest status and when it last ran. It groups the checks by what you must do and shows the pass rate. |
| Data Contracts | The definition side. A contract attaches to a table (a “subject” from the Data Catalog) and bundles the checks you want on it, plus a tier, optional SLA targets, alert routing and an owner. |
Checks observe but do not block. A failing check never stops a sync or blocks downstream pipelines. It records a result, shows in the app and can alert your team. Data quality is a signal, not a gate.
Creating a contract
Contracts attach to catalog subjects. To create a contract, open the Contract tab on the detail page of a table in the Data Catalog. Manage all contracts from the Data Contracts list.
Each contract includes:
- Tier: T1 (critical), T2 (important) or T3 (low priority), described in Data Tiers. When you select a tier for a new contract, Vendo adds a default set of checks. You can edit these checks. When you change the tier of an existing contract, Vendo does not add default checks again.
- Checks: the pass/fail checks (see below).
- SLA (optional): an availability target (%) and a recovery target (minutes) that record the expectations for this table.
- Alert routing (optional): the channels that receive failure alerts: In-App, Email or Slack.
- Owner (optional): the team member who is responsible for the health of this table.
You can Deactivate a contract. Its checks stop running and Vendo keeps the history. You can also Permanently delete a contract. This removes the contract, its checks and all result history. You cannot undo this.
Data Tiers
An item in the Data Catalog has a tier only when a data contract guards it. The tier shows the importance and the reliability of the item:
| Tier | Label | Description |
|---|---|---|
| Tier 1 | Critical | Core business data. High reliability requirements. Used in production dashboards and reports. |
| Tier 2 | Important | Significant data assets used regularly. Important but not mission-critical. |
| Tier 3 | Low priority | Supplementary or experimental data. May change structure or be deprecated. |
Tiers help teams prioritize data quality work and set expectations about stability and reliability.
Check kinds
A contract can combine any of these checks:
| Check | What it asserts |
|---|---|
| Freshness | The table has been written to within a maximum age (hours). By default this reads the last sync time of the source. It can instead check the maximum value of a timestamp column in the table. |
| Row count | The row count of the table is at or above a minimum (and optionally below a maximum). |
| Required columns | Required columns exist, forbidden columns do not, and specified columns have the expected data types. |
| Missing values | The share of NULL values in a column stays below a threshold (for example, 0.05 = 5%). |
| Blank values | The share of NULL or blank string values in a column stays below a threshold. |
| Placeholder values | The share of literal placeholder values in a column (for example, n/a, nil, none, which you can configure) stays below a threshold. |
| Row count drift | The row count of the table stays within a tolerance (%) of the row count of another table. Use it to compare a raw table with its transformed table. Supports an optional shared WHERE clause. |
| Custom rule | A query that you write holds: it returns no rows, returns a single true value, or returns a scalar that meets a threshold (for example, = 0). Use it for rules across tables. |
Checks from models and tracking specs
Vendo creates these checks from other parts of the app. You do not add them in a contract. They show on the Data Health page with the other checks.
| Check | What it asserts | Where it comes from |
|---|---|---|
| Model reconciliation | The totals and dimension values in a model output still match its source tables. | The Data Health section of a model detail page. Click Propose checks, review the checks, then activate them. |
| Daily output | A pipeline output produced rows for each business day that it was expected to. | Vendo manages it for pipeline outputs. |
| Tracking spec conformance | Events from your tracking match the tracking spec: required values, types and allowed values. | Vendo creates it when you publish a tracking spec. |
| Undeclared tracking data | No events or properties arrive from your tracking that the tracking spec does not declare. | Vendo creates it when you publish a tracking spec. |
How checks run
Checks run automatically after each sync that writes to a table with an active contract. Vendo also runs all active checks on an hourly schedule.
To run checks on demand:
- To run all active checks, click Run checks at the top of the Data Health page.
- To run the checks of one table, click Re-check now on its row.
The checks run in the background. Refresh the page after a minute to see the new results.
Each check shows one of these statuses:
| Status | Meaning |
|---|---|
| Passing | The check held. |
| Warning | The check passed with a warning. A freshness check also shows Warning when a table has no new rows but its source syncs normally. |
| Failing | The check did not hold. The data does not meet the rule. |
| Errored | The check itself could not run (for example, missing table, malformed SQL). Vendo counts it apart from failures. |
| Inactive | Vendo skipped the check on its last run. |
| Coverage gap | Vendo could not watch the table because the table is not available. |
| Never run | The check has no result yet. |
Vendo stores each result with the expected value, the actual value and a message. For example, a failing freshness check reads as “expected ≤ 6h, actual 12h.”
The Data Health page
The Data Health page summarizes all active checks in your workspace:
- Summary stats: Needs your action, System issues, Watch, Passing, Pass rate and Last sweep.
- Check lists: the Needs your action, System issues, Worth a look and Passing sections. Each row shows the status, what is wrong, what to do and when the check last ran.
If the page is empty, add a contract to a catalog subject to start monitoring it.
Alerts
When a check changes to failing, or recovers, Vendo sends a notification for that check. Select the channels in the Alert routing section of the contract: In-App, Email or Slack. Slack requires a connected Slack workspace.
Failures also show in the app:
- The Data Health page shows the failing check with its latest result.
- The Health card of the table in the Data Catalog shows its contract tier with the observed freshness, row count and schema information.
Relationship to the Data Catalog
Data Health builds on the Data Catalog:
- Contracts attach to catalog subjects. These are the tables that the catalog tracks across your sources.
- Contract tiers are the same T1/T2/T3 classification that the catalog uses.
- The catalog detail page of each table has a Contract tab where you define or edit its contract. It also has a Health view that combines pipeline observations with contract status.
Add contracts to your Tier 1 tables first (the tables that feed production reports and downstream tools). Then add more contracts as necessary.