kanoniv
Identity resolution as code. Define matching rules in YAML, reconcile locally in Python.
Installation
pip install kanoniv
Quick Start
import kanoniv
# 1. Load your spec
spec = kanoniv.Spec.from_file("kanoniv.yml")
# 2. Validate it
result = kanoniv.validate(spec)
result.raise_on_error()
# 3. Load sources
sources = [
kanoniv.Source.from_csv("crm", "data/crm_contacts.csv", primary_key="id"),
kanoniv.Source.from_csv("billing", "data/billing_accounts.csv", primary_key="id"),
]
# 4. Reconcile
result = kanoniv.reconcile(sources, spec)
# 5. Golden records as a DataFrame
df = result.to_pandas()
print(f"{result.cluster_count} entities, {result.merge_rate:.0%} merge rate")
Every record in the output DataFrame gets a kanoniv_id — a stable identifier that groups duplicate records across sources into a single entity.
What the Spec Covers
The YAML spec is the single source of truth for your identity resolution pipeline:
- Sources — canonical field mappings from each system
- Blocking — composite keys to reduce O(n²) comparisons
- Scoring — Fellegi-Sunter probabilistic matching with EM training
- Normalizers — email, phone, name, nickname, domain (built-in)
- Survivorship — golden record assembly rules (source priority, most complete)
- Governance — freshness checks, schema validation, shadow-mode deploys
See the spec reference for the full schema.
Source Adapters
# Pandas DataFrame
source = kanoniv.Source.from_pandas("crm", df, primary_key="contact_id")
# CSV file
source = kanoniv.Source.from_csv("billing", "data/billing.csv", primary_key="account_id")
# Warehouse table (requires sqlalchemy)
source = kanoniv.Source.from_warehouse(
"erp", table="raw.erp_customers", connection_string="postgresql://..."
)
# dbt model (requires sqlalchemy)
source = kanoniv.Source.from_dbt("staging", model="stg_customers")
Validation & Planning
# Validate spec for errors
result = kanoniv.validate(spec)
if not result:
print(result.errors)
# Preview the execution plan
plan = kanoniv.plan(spec)
print(plan.summary())
Diffing Specs
# Compare two spec versions
diff = kanoniv.diff(spec_v1, spec_v2)
print(diff.summary)
Cloud API (Optional)
For managed reconciliation, monitoring, and collaboration, install with the cloud extra:
pip install kanoniv[cloud]
client = kanoniv.Client(api_key="kn_...")
result = client.resolve(system="crm", external_id="003xxx")
entities = client.entities.search(q="john@acme.com")
See the cloud API docs for the full reference.
Links
License
Apache-2.0
Metadata
Release files for kanoniv 0.3.9
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| kanoniv-0.3.9.tar.gz | 538.2 kB | Details |
Built distributions (wheels)
Total release size: 33.9 MB
Release files / kanoniv-0.3.9.tar.gz
| Download URL | kanoniv-0.3.9.tar.gz |
|---|---|
| Size | 538.2 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
46bc3eebe6dfb63f4c5567544a78d716656388f581320abc88a6c73a6b19aecd
|
|
BLAKE2b-256 checksum How to use checksums |
824231e47e66029c18273b5ae241504f00bc9fd700f653484df046d9cd2b896c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
maturin/1.12.6
|
Release files / kanoniv-0.3.9-cp313-cp313-win_amd64.whl
| Download URL | kanoniv-0.3.9-cp313-cp313-win_amd64.whl |
|---|---|
| Size | 1.9 MB |
| Tags | CPython 3.13 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
91286acf17988b81199275eabcc732b01be42d223ee04186c87155ba55f9e223
|
|
BLAKE2b-256 checksum How to use checksums |
104ba622d1716a599d49b5b44f1ab6f7377699e65ea3c85eeba06d4ae7693992
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
maturin/1.12.6
|
Release files / kanoniv-0.3.9-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
| Download URL | kanoniv-0.3.9-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl |
|---|---|
| Size | 2.4 MB |
| Tags | CPython 3.13 Linux glibc 2.17+ x86-64 |
|
SHA-256 checksum How to use checksums |
6ff7e082795415e6f0b7ba8ad9a1c57c3afe6e71fa7dbb397918133ec48de716
|
|
BLAKE2b-256 checksum How to use checksums |
795919d4186eebe69d8f31cb91f3a0fb9464f24db6bf27e0fd4180a2e9f4fe38
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
maturin/1.12.6
|
Release files / kanoniv-0.3.9-cp313-cp313-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl
| Download URL | kanoniv-0.3.9-cp313-cp313-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl |
|---|---|
| Size | 4.0 MB |
| Tags | CPython 3.13 macOS 10.12+ universal2 (ARM64, x86-64) macOS 10.12+ x86-64 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
133ab33f89e5673d7e93fdca22915c6eacbe0877ca77417809155accaded6fd8
|
|
BLAKE2b-256 checksum How to use checksums |
c3aad5d80a7bd587c94271bf81bdf914cf6e4c7c0e85288145d28948eee7a070
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
maturin/1.12.6
|
Release files / kanoniv-0.3.9-cp312-cp312-win_amd64.whl
| Download URL | kanoniv-0.3.9-cp312-cp312-win_amd64.whl |
|---|---|
| Size | 1.9 MB |
| Tags | CPython 3.12 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
4bfbce6e768e71e18055e868b10a5998083cdb476332bb91bc2df9cc1985011e
|
|
BLAKE2b-256 checksum How to use checksums |
8d7b4bf97a62edf5290d9fbbd888a82c4186a9c42650f6dc25a67e5710e7cf7e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
maturin/1.12.6
|
Release files / kanoniv-0.3.9-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
| Download URL | kanoniv-0.3.9-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl |
|---|---|
| Size | 2.4 MB |
| Tags | CPython 3.12 Linux glibc 2.17+ x86-64 |
|
SHA-256 checksum How to use checksums |
d8988f22f07ba723338a70f22b1794733d083de40872e5e5f653265e7dd671ba
|
|
BLAKE2b-256 checksum How to use checksums |
7ceac6d26be352afae427ff0e52e031e96f1649f254d7bfba72ca096b09b75ce
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
maturin/1.12.6
|
Release files / kanoniv-0.3.9-cp312-cp312-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl
| Download URL | kanoniv-0.3.9-cp312-cp312-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl |
|---|---|
| Size | 4.0 MB |
| Tags | CPython 3.12 macOS 10.12+ universal2 (ARM64, x86-64) macOS 10.12+ x86-64 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
317dce6508a583d75c4c655c9ee1f3d58f84e73418cedd07f8322e14e0a9a80f
|
|
BLAKE2b-256 checksum How to use checksums |
5264e55503acf01cdc03273551916964d53abfdc5dbc7bf5dc2ca090784ac97f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
maturin/1.12.6
|
Release files / kanoniv-0.3.9-cp311-cp311-win_amd64.whl
| Download URL | kanoniv-0.3.9-cp311-cp311-win_amd64.whl |
|---|---|
| Size | 1.9 MB |
| Tags | CPython 3.11 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
b840c5e329bfe3a9a521c6370a668491c6c76557ab8ab0daae52298bd457fcf7
|
|
BLAKE2b-256 checksum How to use checksums |
18fd263ef0ce5645e36aca50a2ed2617ed140030053e85b25f7d84a159e7db9f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
maturin/1.12.6
|
Release files / kanoniv-0.3.9-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
| Download URL | kanoniv-0.3.9-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl |
|---|---|
| Size | 2.4 MB |
| Tags | CPython 3.11 Linux glibc 2.17+ x86-64 |
|
SHA-256 checksum How to use checksums |
a55b31ef3b8c3da484a434c07fe1fef113851d4b00eefaefcc02e0d8f4dd51d7
|
|
BLAKE2b-256 checksum How to use checksums |
3c18a600039e086ddd81462d739cd10ce81263425e832ada1f36a07f0a532eee
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
maturin/1.12.6
|
Release files / kanoniv-0.3.9-cp311-cp311-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl
| Download URL | kanoniv-0.3.9-cp311-cp311-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl |
|---|---|
| Size | 4.0 MB |
| Tags | CPython 3.11 macOS 10.12+ universal2 (ARM64, x86-64) macOS 10.12+ x86-64 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
609bc11100dbb070177dcebd8c7f923110f21b0823b149e79da4249a0e658170
|
|
BLAKE2b-256 checksum How to use checksums |
8ad8e4f5923d7383cd10318ed00ba8f94070ac6f464c23c058373fb44e5109d5
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
maturin/1.12.6
|
Release files / kanoniv-0.3.9-cp310-cp310-win_amd64.whl
| Download URL | kanoniv-0.3.9-cp310-cp310-win_amd64.whl |
|---|---|
| Size | 1.9 MB |
| Tags | CPython 3.10 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
cfa25823004efb0f3bedade2678eda243f6786f8bfbc64c1fd76cbbf06c711ad
|
|
BLAKE2b-256 checksum How to use checksums |
e9ca5875cd20090c70dc8f125ad115db9736f1ecad4ef6f349411c004b3e9812
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
maturin/1.12.6
|
Release files / kanoniv-0.3.9-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
| Download URL | kanoniv-0.3.9-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl |
|---|---|
| Size | 2.4 MB |
| Tags | CPython 3.10 Linux glibc 2.17+ x86-64 |
|
SHA-256 checksum How to use checksums |
0872ba3398f42de8ced48cb65032301353e84e72d801118e9692153a44c3e6ff
|
|
BLAKE2b-256 checksum How to use checksums |
8b7d08d715d9b333424a720d295be82d2b960ba7c8e41fbb5eaf7472c5ab9bfa
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
maturin/1.12.6
|
Release files / kanoniv-0.3.9-cp310-cp310-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl
| Download URL | kanoniv-0.3.9-cp310-cp310-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl |
|---|---|
| Size | 4.0 MB |
| Tags | CPython 3.10 macOS 10.12+ universal2 (ARM64, x86-64) macOS 10.12+ x86-64 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
ab7fa18bd5863fe7c519c710fab0f3b6f0bd295dbd2193e847ff3d0bfa6ced72
|
|
BLAKE2b-256 checksum How to use checksums |
0638c64a39eb25812f65d92353a323e4aa839ea8beca99fdb6033fb406487bef
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
maturin/1.12.6
|