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.3.tar.gz (400.6 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.3-cp313-cp313-win_amd64.whl (1.2 MB view details)

Uploaded CPython 3.13Windows x86-64

kanoniv-0.3.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.5 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64

kanoniv-0.3.3-cp313-cp313-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl (2.5 MB view details)

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

kanoniv-0.3.3-cp312-cp312-win_amd64.whl (1.2 MB view details)

Uploaded CPython 3.12Windows x86-64

kanoniv-0.3.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.5 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

kanoniv-0.3.3-cp312-cp312-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl (2.5 MB view details)

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

kanoniv-0.3.3-cp311-cp311-win_amd64.whl (1.2 MB view details)

Uploaded CPython 3.11Windows x86-64

kanoniv-0.3.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.5 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

kanoniv-0.3.3-cp311-cp311-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl (2.5 MB view details)

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

kanoniv-0.3.3-cp310-cp310-win_amd64.whl (1.2 MB view details)

Uploaded CPython 3.10Windows x86-64

kanoniv-0.3.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.5 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64

kanoniv-0.3.3-cp310-cp310-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl (2.5 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.3.tar.gz.

File metadata

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

File hashes

Hashes for kanoniv-0.3.3.tar.gz
Algorithm Hash digest
SHA256 d9f03bfdd8dc0e0f3ed843e7d559a08713b2aa8c8ba30004282bc08f9570f923
MD5 6c361bef3bbee2b99216616ce3173757
BLAKE2b-256 3f79fe52cb489bdc8690d5cc461a281d9cbb990c2309a8a8df2be2ce9b83c9d9

See more details on using hashes here.

File details

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

File metadata

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

File hashes

Hashes for kanoniv-0.3.3-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 688afa3aeb1c506ee5218f887e15be9c08ed5866b77d5882ea1bb36f9c0e3c2c
MD5 708d027e78f7c78977e5939d9e450149
BLAKE2b-256 82f543ca59764c8b4257d6d2342c9b5b07cdd7e7fe6e13ac3103b68fd5778c81

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for kanoniv-0.3.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 5f85660b0b04ba51af297318e796bc2fa83905355d8854f96503a4d5d100da92
MD5 aaf0b2b2dfdb08eaad1bd3235b0614d5
BLAKE2b-256 64186e0bceb47ac43bbcb4171c1550f8131c4814bee55c5156a39f6c0dbf8ee7

See more details on using hashes here.

File details

Details for the file kanoniv-0.3.3-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.3-cp313-cp313-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl
Algorithm Hash digest
SHA256 39081be0487e1ea52caf919a3dcaa177a34bf563ce0a77ab4c7a5db5b70115f7
MD5 f7c86a7fe03248ceafb7455745542f6f
BLAKE2b-256 705bec83392981fa54abba85aa1e1ee3f082137175c1d98fa3c8773815e48732

See more details on using hashes here.

File details

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

File metadata

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

File hashes

Hashes for kanoniv-0.3.3-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 26af1a55b26bc3f789641727a50c4012f6a137dfb5f357ce3fa6095fefd13093
MD5 608e75c2663b24cf038a16e7fbb20059
BLAKE2b-256 5039764f1146943196f42e636a81813f6ce37d712a2f9cda030f8ee7770ca5ad

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for kanoniv-0.3.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 37bd7565f5eba7506188b42fc3187143750a9348aabc6df06040631077d385eb
MD5 f34a2a92d5f983108af4125ee563d384
BLAKE2b-256 096ffeec3a1c756c414898458572497e21fc842d2efe3333a1099f4c11eb9e10

See more details on using hashes here.

File details

Details for the file kanoniv-0.3.3-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.3-cp312-cp312-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl
Algorithm Hash digest
SHA256 bb62429cc73dfed08abf29cd4c3e1c596975b7d74ce61a43b66170342759ae22
MD5 c6bae6e83a3fabcf742160c723c0e385
BLAKE2b-256 2c8a24cafcceafef4923d81396c12cd2e57eb985c6d01827831c81d478daa02f

See more details on using hashes here.

File details

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

File metadata

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

File hashes

Hashes for kanoniv-0.3.3-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 41479a05ccbb454773d9f4e8461199b952ec6f6aad035cc62090fdf16188aef5
MD5 bb7de47637c26f30490a8fc6ca59af7c
BLAKE2b-256 dab2d96cd94c779dec7aedf1631b1c7e9bf0c9e1cc15a957da7e281f7f109d71

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for kanoniv-0.3.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 ccb632fcf790f30073ae2f185e2f26fe883e39d063e90839553f1bef1d70d241
MD5 aae9ed30d1bee0b7e1d13c340e979c2c
BLAKE2b-256 bebbb810c4e813b78ed6745700a489406dd9fbddbde7489b9e0247db2671b648

See more details on using hashes here.

File details

Details for the file kanoniv-0.3.3-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.3-cp311-cp311-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl
Algorithm Hash digest
SHA256 53f1c1f9e27e5e98c08effd0ea3ddce58dbfa41575f76790475345c6a266912e
MD5 45cc93a4d01a049f528dbcebd2f04e57
BLAKE2b-256 1526e2c12ff0e0bf4e19af25833a0e1c9a1d43acf81b01cee7cdc77cd864107c

See more details on using hashes here.

File details

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

File metadata

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

File hashes

Hashes for kanoniv-0.3.3-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 56bc2bd0619c755409b6047b9aa0c0128c6a4dd00fed2d8b481f9f4dce615266
MD5 be364fc5f07795440597e60079e176e5
BLAKE2b-256 b87a3de2be9d48924c4d621093d5d32d48c71c771b398681761f0e09680f8621

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for kanoniv-0.3.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 11b753dadca5a666ae9c20515c13b0f596fe3707ab764ad17731908faf4356c6
MD5 ec40ab4f1b50e22e049d974ac1402f1c
BLAKE2b-256 e4845fd37171912784c313bfcb5fe561ccad00c24143f1ebb20022d4477c906c

See more details on using hashes here.

File details

Details for the file kanoniv-0.3.3-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.3-cp310-cp310-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl
Algorithm Hash digest
SHA256 fb68cd6f7b7b24e76b11f9610f30cd86f9ddd0b3370c5f1aacb94183c8d41570
MD5 df793145620a4079f4109421bf87869d
BLAKE2b-256 c71b816d613a3d6a87d4faab211c2084d3f615d63f8f8c64d9bcc1b326771730

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