One source of truth.
For every dataset
that matters.

Data Cardinal helps data teams define, govern, and serve authoritative datasets — with versioning, schema enforcement, and instant REST APIs built in.

No credit card required · Free during early access

Data Cardinal
workspace / production
Search datasets…⌘K
SR

Datasets

5 datasets · 3 published

NameVersionStatusRecordsUpdated
country_codesReference
v2.3.1active2492h ago
currency_codesReference
v1.8.0active1681d ago
iso_languagesReference
v3.1.2active7,9083d ago
market_segmentsTaxonomy
v0.9.4draft425d ago
risk_categoriesReference
v2.0.0active151w ago
↗ 1,240 API calls today·Schema validation active·All systems operational
Scroll
01

Centralized Data Registry

Define and manage all your datasets in one governed place. No more spreadsheets scattered across drives — every canonical list lives in Data Cardinal, tagged, searchable, and owned.

  • Dataset catalog with ownership & tagging
  • Search and filter across all datasets
  • Workspace-scoped access
Dataset Catalog4 of 12 shown
country_codes
geoiso
data-team249
currency_codes
finance
finance-ops168
iso_languages
isoi18n
data-team7,908
market_segments
taxonomy
product42
02

Versioned Records

Every change to a dataset is tracked. Roll back to any prior version, compare diffs between releases, and understand exactly what changed and when.

  • Full version history per dataset
  • Side-by-side diff view
  • One-click rollback to any version
country_codesv2.3.1active
v2.3.1Today, 10:42by sarah@co
Added XK (Kosovo)
v2.3.0Jun 10, 09:15by raj@co
Updated EU members
v2.2.0May 28, 14:00by sarah@co
Fixed ISO codes
Diff v2.2.0 → v2.3.1
+ XK · Kosovo · XKX
+ SS · South Sudan · SSD
- YU · Yugoslavia · YUG
03

REST API Serving

Auto-generated, versioned REST endpoints are ready the moment you publish. Any service can consume governed data without querying a database or sharing spreadsheets.

  • Auto-generated per dataset
  • Version-pinned endpoints
  • Filterable & paginated responses
API Endpointslive
GET /api/v2/datasets/country_codes/records
{  "data": [{    "code": "US",    "name": "United States",    "iso3": "USA"  }, ...],  "meta": { "version": "v2.3.1",            "total": 249 }}
?filter=region:EU?page=2&limit=50?version=v2.2.0
04

Schema Validation

Define the shape of your data once. Data Cardinal enforces types, required fields, value constraints, and enum lists at write time — bad data never gets in.

  • Per-column types and constraints
  • Enum & allowed-values lists
  • Real-time validation on edit
Schema · country_codes4 columns
codetextrequired2-letter ISO 3166
nametextrequiredFull country name
iso3textrequired3-letter ISO code
numericintegerUN numeric code
Validation error · row 12: "numeric" must be an integer, got "N/A"
05

Access Control

Role-based permissions at the dataset and record level. Grant teams viewer or steward access, require approval workflows, and audit every change.

  • Admin / Steward / Viewer roles
  • Per-dataset permission grants
  • Change approval workflows
Access Control
AdminStewardViewer
country_codes
currency_codes
market_segments
Pending approval
raj@co wants to edit market_segments
ApproveDeny
How it works

From schema to API in minutes

1

Define your schema

Set column names, types, required fields, and allowed values. Data Cardinal validates every write against this spec.

schema.create("country_codes", {  code:    { type: "text", required: true },  name:    { type: "text", required: true },  numeric: { type: "integer" }})
2

Add records

Import from CSV or add rows in the UI. Validation runs on every change — bad data never reaches production.

dataset.import("country_codes", "countries.csv")// ✓ 249 rows validated// ✗ 2 rows rejected (schema error)
3

Publish a version

When the dataset is ready, publish it. Data Cardinal snapshots the records and increments the version.

dataset.publish("country_codes")// Published: v2.3.1// Endpoint: /api/v2/datasets/country_codes
4

Consume via API

Any service calls the auto-generated REST endpoint. Pin a version to freeze behaviour across deployments.

GET /api/v2/datasets/country_codes/records    ?version=v2.3.1&filter=region:EU→ 200 OK  { data: [...], meta: { total: 44 } }
5

Govern changes

Stewards propose edits, admins approve. Every change is logged with who, what, and when.

change #42  by raj@co  → pending approval+ XK · Kosovo · XKX~ GB · UK → United KingdomApproved by sarah@co — v2.4.0 published
Before & after

From spreadsheet chaos to governed data

The old way
With Data Cardinal
Lookup tables scattered across a dozen spreadsheets
One versioned dataset, always canonical and owned
"Which file has the latest country codes?" — nobody knows
Every change tracked, diffed, and timestamped
Services hardcode values and silently break on updates
Version-pinned REST API — consumers never break
Schema changes announced in Slack, then forgotten
Enforced at write time — bad data never gets in
No idea who changed what, or when
Full audit trail: who, what, and why

Start governing your
data today

Join data teams who stopped wrangling spreadsheets and started shipping governed, versioned datasets that every service trusts.

Free during early access · No credit card required