Skip to main content

Identity resolution as code

Project description

kanoniv

Identity resolution as code. Define matching rules in YAML, reconcile locally in Python.

PyPI License

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

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

kanoniv-0.3.9.tar.gz (538.2 kB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

kanoniv-0.3.9-cp313-cp313-win_amd64.whl (1.9 MB view details)

Uploaded CPython 3.13Windows x86-64

kanoniv-0.3.9-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.4 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64

kanoniv-0.3.9-cp313-cp313-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl (4.0 MB view details)

Uploaded CPython 3.13macOS 10.12+ universal2 (ARM64, x86-64)macOS 10.12+ x86-64macOS 11.0+ ARM64

kanoniv-0.3.9-cp312-cp312-win_amd64.whl (1.9 MB view details)

Uploaded CPython 3.12Windows x86-64

kanoniv-0.3.9-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.4 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

kanoniv-0.3.9-cp312-cp312-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl (4.0 MB view details)

Uploaded CPython 3.12macOS 10.12+ universal2 (ARM64, x86-64)macOS 10.12+ x86-64macOS 11.0+ ARM64

kanoniv-0.3.9-cp311-cp311-win_amd64.whl (1.9 MB view details)

Uploaded CPython 3.11Windows x86-64

kanoniv-0.3.9-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.4 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

kanoniv-0.3.9-cp311-cp311-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl (4.0 MB view details)

Uploaded CPython 3.11macOS 10.12+ universal2 (ARM64, x86-64)macOS 10.12+ x86-64macOS 11.0+ ARM64

kanoniv-0.3.9-cp310-cp310-win_amd64.whl (1.9 MB view details)

Uploaded CPython 3.10Windows x86-64

kanoniv-0.3.9-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.4 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64

kanoniv-0.3.9-cp310-cp310-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl (4.0 MB view details)

Uploaded CPython 3.10macOS 10.12+ universal2 (ARM64, x86-64)macOS 10.12+ x86-64macOS 11.0+ ARM64

File details

Details for the file kanoniv-0.3.9.tar.gz.

File metadata

  • Download URL: kanoniv-0.3.9.tar.gz
  • Upload date:
  • Size: 538.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: maturin/1.12.6

File hashes

Hashes for kanoniv-0.3.9.tar.gz
Algorithm Hash digest
SHA256 46bc3eebe6dfb63f4c5567544a78d716656388f581320abc88a6c73a6b19aecd
MD5 df8c20681f23765759b48c80d45d8389
BLAKE2b-256 824231e47e66029c18273b5ae241504f00bc9fd700f653484df046d9cd2b896c

See more details on using hashes here.

File details

Details for the file kanoniv-0.3.9-cp313-cp313-win_amd64.whl.

File metadata

  • Download URL: kanoniv-0.3.9-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 1.9 MB
  • Tags: CPython 3.13, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: maturin/1.12.6

File hashes

Hashes for kanoniv-0.3.9-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 91286acf17988b81199275eabcc732b01be42d223ee04186c87155ba55f9e223
MD5 03dcd8f4aee43445482af1a52dd41fa6
BLAKE2b-256 104ba622d1716a599d49b5b44f1ab6f7377699e65ea3c85eeba06d4ae7693992

See more details on using hashes here.

File details

Details for the file kanoniv-0.3.9-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for kanoniv-0.3.9-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 6ff7e082795415e6f0b7ba8ad9a1c57c3afe6e71fa7dbb397918133ec48de716
MD5 c1dc59f07ccc2cd1a6aee6aceb38e2bd
BLAKE2b-256 795919d4186eebe69d8f31cb91f3a0fb9464f24db6bf27e0fd4180a2e9f4fe38

See more details on using hashes here.

File details

Details for the file kanoniv-0.3.9-cp313-cp313-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl.

File metadata

File hashes

Hashes for kanoniv-0.3.9-cp313-cp313-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl
Algorithm Hash digest
SHA256 133ab33f89e5673d7e93fdca22915c6eacbe0877ca77417809155accaded6fd8
MD5 343f5adc7a7ad27921c1d866039846ef
BLAKE2b-256 c3aad5d80a7bd587c94271bf81bdf914cf6e4c7c0e85288145d28948eee7a070

See more details on using hashes here.

File details

Details for the file kanoniv-0.3.9-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: kanoniv-0.3.9-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 1.9 MB
  • Tags: CPython 3.12, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: maturin/1.12.6

File hashes

Hashes for kanoniv-0.3.9-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 4bfbce6e768e71e18055e868b10a5998083cdb476332bb91bc2df9cc1985011e
MD5 4a9ad2717c9d62b92cd07df8a7aec894
BLAKE2b-256 8d7b4bf97a62edf5290d9fbbd888a82c4186a9c42650f6dc25a67e5710e7cf7e

See more details on using hashes here.

File details

Details for the file kanoniv-0.3.9-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for kanoniv-0.3.9-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 d8988f22f07ba723338a70f22b1794733d083de40872e5e5f653265e7dd671ba
MD5 c1cfa03e1715b9a6fdd86b89ceb580d7
BLAKE2b-256 7ceac6d26be352afae427ff0e52e031e96f1649f254d7bfba72ca096b09b75ce

See more details on using hashes here.

File details

Details for the file kanoniv-0.3.9-cp312-cp312-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl.

File metadata

File hashes

Hashes for kanoniv-0.3.9-cp312-cp312-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl
Algorithm Hash digest
SHA256 317dce6508a583d75c4c655c9ee1f3d58f84e73418cedd07f8322e14e0a9a80f
MD5 75b960b52bfa2fcd56cd22a09d541f48
BLAKE2b-256 5264e55503acf01cdc03273551916964d53abfdc5dbc7bf5dc2ca090784ac97f

See more details on using hashes here.

File details

Details for the file kanoniv-0.3.9-cp311-cp311-win_amd64.whl.

File metadata

  • Download URL: kanoniv-0.3.9-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 1.9 MB
  • Tags: CPython 3.11, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: maturin/1.12.6

File hashes

Hashes for kanoniv-0.3.9-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 b840c5e329bfe3a9a521c6370a668491c6c76557ab8ab0daae52298bd457fcf7
MD5 17625a01df5ab751a21529de3ead50eb
BLAKE2b-256 18fd263ef0ce5645e36aca50a2ed2617ed140030053e85b25f7d84a159e7db9f

See more details on using hashes here.

File details

Details for the file kanoniv-0.3.9-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for kanoniv-0.3.9-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 a55b31ef3b8c3da484a434c07fe1fef113851d4b00eefaefcc02e0d8f4dd51d7
MD5 5b06277a30bbfbf6157292349f56634b
BLAKE2b-256 3c18a600039e086ddd81462d739cd10ce81263425e832ada1f36a07f0a532eee

See more details on using hashes here.

File details

Details for the file kanoniv-0.3.9-cp311-cp311-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl.

File metadata

File hashes

Hashes for kanoniv-0.3.9-cp311-cp311-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl
Algorithm Hash digest
SHA256 609bc11100dbb070177dcebd8c7f923110f21b0823b149e79da4249a0e658170
MD5 3cbb451225b3086b1b90b86e5f7fb65c
BLAKE2b-256 8ad8e4f5923d7383cd10318ed00ba8f94070ac6f464c23c058373fb44e5109d5

See more details on using hashes here.

File details

Details for the file kanoniv-0.3.9-cp310-cp310-win_amd64.whl.

File metadata

  • Download URL: kanoniv-0.3.9-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 1.9 MB
  • Tags: CPython 3.10, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: maturin/1.12.6

File hashes

Hashes for kanoniv-0.3.9-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 cfa25823004efb0f3bedade2678eda243f6786f8bfbc64c1fd76cbbf06c711ad
MD5 41f74f4b66d6f1480227891e8791f633
BLAKE2b-256 e9ca5875cd20090c70dc8f125ad115db9736f1ecad4ef6f349411c004b3e9812

See more details on using hashes here.

File details

Details for the file kanoniv-0.3.9-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for kanoniv-0.3.9-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 0872ba3398f42de8ced48cb65032301353e84e72d801118e9692153a44c3e6ff
MD5 feada3f922d94bd4e51ceb11fa4bdd84
BLAKE2b-256 8b7d08d715d9b333424a720d295be82d2b960ba7c8e41fbb5eaf7472c5ab9bfa

See more details on using hashes here.

File details

Details for the file kanoniv-0.3.9-cp310-cp310-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl.

File metadata

File hashes

Hashes for kanoniv-0.3.9-cp310-cp310-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl
Algorithm Hash digest
SHA256 ab7fa18bd5863fe7c519c710fab0f3b6f0bd295dbd2193e847ff3d0bfa6ced72
MD5 86a4d19e70daaf415eca53dd86f5de11
BLAKE2b-256 0638c64a39eb25812f65d92353a323e4aa839ea8beca99fdb6033fb406487bef

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page