Quality Engine

Numbers you'd stake your quarter on.

Every column scored on five dimensions. When a number moves, trace it to the row, the test, and the timestamp.

Data Quality

92%
43 sources assessed
Completeness
94%
Uniqueness
95%
Validity
98%
Freshness
12%
Referential
89%

A traffic light you can read in a meeting.

Three colours. Green, yellow, red.

≥ 80

Good

Trust it.

≥ 50

Warning

Drill in. Something's off.

< 50

Critical

Don't publish until it's fixed.

How the score is computed

Five dimensions, rolled up into one number.

  • Completeness. Cells with a value.
  • Uniqueness. Primary keys with no duplicates.
  • Validity. Test-suite pass rate.
  • Freshness. Latest row vs. expected cadence.
  • Referential Integrity. Foreign keys that resolve.

Every column. Every test. One screen.

Expand any source to see the failing column and test.

Data Quality

Column-level quality assessment across your data sources.

92%
43 sources assessed
Completeness
94%
Non-null, non-empty values
Uniqueness
95%
Distinct values in key columns
Validity
98%
Data quality test pass rate
Freshness
12%
Timestamp recency
Referential
89%
FK relationship validity
Sources View all 43 tables →
stg_xero__contacts
62%
52 rows · 10 columns
Completeness
64%
Validity
100%
stg_salesforce__case_history
67%
193 rows · 6 columns
Completeness
71%
Validity
100%
stg_business_central__customers
74%
5 rows · 16 columns
Completeness
75%
Validity
100%
stg_business_central__vendors
76%
7 rows · 14 columns
Completeness
77%
Validity
100%
stg_business_central__employees
80%
7 rows · 13 columns
Completeness
80%
Validity
60%
Columns 13 total
birth_date 50%
100% complete
valid_ts
email 0%
0% complete
employee_id 100%
100% complete
uniquenot_null
department_id 100%
100% complete
fk_departments
manager_id 72%
86% complete
fk_employees
Close the loop

Every red light comes with a way to fix it.

Detecting is the easy half. Pillar gives the same person three ways to fix it without a ticket.

Detected stg_bc__employees
email 0%
✗ not_null ✗ valid_email

Upload a spreadsheet

Upload a CSV. Merge on the primary key. No engineer needed.

Connect a database

Link a side database. We join the missing columns into staging.

Override the mapping

Pick which source wins. One dropdown.

Rescored stg_bc__employees
email 94%
✓ not_null ✓ valid_email
One-click re-assessment No ops tickets Re-run locally or on schedule

Scoring runs wherever your data lives.

Scoring runs on every supported warehouse.

Integrated
Integrated SQL Data Lake Integrated SQL Data Lake
Bring your own
Snowflake
Databricks
BigQuery
Microsoft Fabric
Zero YAML

Tests that write themselves.

You map a connector. We generate the tests. Not-null on every key, uniqueness on every PK, sanity bounds on every timestamp, join audits on every FK. No YAML.

Auto-generated from schema
stg_business_central__employees
email varchar
0% complete
✓ not_null ✓ unique ✗ valid_email
employee_id bigint
100% complete
✓ not_null ✓ unique ✓ primary_key
manager_id bigint · fk
86% complete
✓ not_null ✗ fk_employees 1 orphan row
Generated from your schema. Zero YAML. Not-null, uniqueness, validity, freshness and referential integrity — regenerated on every source you add.
Living metric

Fresh or it doesn't count.

Other quality tools score what's in the warehouse. We also score when it got there. Stale beats missing.

Each table has a freshness SLA. Exceed it and the source flips to Warning or Critical.

Per-source SLAs Auto-tuned from cadence Alerts before the board sees it
Freshness monitor
Real-time
Source Last synced 24h Status
stg_salesforce__accounts just now
Fresh
stg_xero__invoices 2 min ago
Fresh
stg_business_central__gl 43 min ago
Fresh
stg_hubspot__deals 47 min ago
Warning
stg_quickbooks__payments 3 days ago
Stale
12% of sources breached SLA
Quality engine flagged at 09:42

Ready to stop second-guessing your dashboards?

Book a demo. We'll score your own data in a day.