Skip to content

Goldenmatch

Zero-config entity resolution feeding a durable identity layer: messy records from any source become stable golden entities, a Customer 360 with provenance, merge/split and…

Install

$pip install goldenmatch

Install command taken from the project's README or registry entry. Always review code before running it.

GoldenMatch

Find the rows in your data that are the same person, company or product. No rules to write, no labelled pairs, no model to train.

Zero-config entity resolution for Python. Point it at a CSV or a table: it chooses how to match, shows you what it chose, and merges each group of duplicates into one golden record.

v3.22.0: Zero-config person dedupe is 18-30x faster, and your records come back as you entered them. 250k rows went from 520 s to 18 s with identical clusters (upgrade pulls goldenmatch-native 0.2.3). The unique, duplicate and deduplicated tables now carry your original values instead of standardized ones; keep_original_values=False or --standardized-values restores the old output.

v3.21.0: No false alarms on small files, and no LLM calls you didn't ask for. A correct run on a small file no longer logs RED "output may be low-precision", and auto-config now turns on the (paid) LLM scorer only when you pass llm_auto=True -- it used to do so whenever an OPENAI_API_KEY or ANTHROPIC_API_KEY happened to be set. If you relied on that, pass llm_auto=True or set llm_scorer in your config.

v3.20.0: Integer ID columns no longer crash zero-config. A CSV whose phone or account column is plain digits (read as int64) made gm.dedupe(path) and goldenmatch dedupe die with ArrowNotImplementedError in auto-config's blocking; it now runs, and negative evidence on such a column scores instead of silently switching itself off. The CLI summary now says what it counts -- 12 records -> 7 entities (4 duplicate groups) -- and result.total_entities matches it.


Try it

pip install goldenmatch
goldenmatch dedupe customers.csv

Take a customers.csv where the same people were entered more than once:

id name email phone address zip
1 Maria Gonzalez maria.gonzalez@example.com 555-201-3344 14 Oak Street 62704
2 Maria Gonzales mgonzalez@example.com (555) 201-3344 14 Oak St 62704
3 María González maria.gonzalez@example.com 5552013344 14 Oak St. 62704
4 James O'Neil jim.oneil@example.com 555-883-1200 902 Pine Avenue 84065
5 Jim O'Neill jim.oneil@example.com 555.883.1200 902 Pine Ave 84065
8 Thomas Becker tbecker@example.com 555-667-0192 77 Elm Court 97024
12 Thomas Baker thomas.baker@example.com 555-120-4455 41 Walnut Way 97024

GoldenMatch puts rows 1-3 together as one person and rows 4-5 as another. Thomas Becker and Thomas Baker share a zip code and stay separate. Each group becomes one golden record, built from the best value of each field. The run writes <timestamp>_deduplicated.csv, one row per person (the four golden records plus the three people who had no duplicate), and <timestamp>_golden.csv with the merged records alone.

From Python:

import goldenmatch as gm

result = gm.dedupe("customers.csv")
print(result)       # DedupeResult(records=12, clusters=4, match_rate=75.0%)

result.deduplicated # one row per person: 7 here
result.golden       # one merged record per duplicate group
result.unique       # the records that had no duplicate
result.clusters     # which input rows belong together
result.config       # the matching config it chose

Already have the data in memory? gm.dedupe_df(table) takes a pyarrow Table or a polars DataFrame.

What it chose, and how to change it

Similar plugs

The agent harness performance optimization system. Skills, instincts, memory, security, and research-first development for Claude Code, Codex, Opencode, Cursor and beyond.

Fair-code workflow automation platform with native AI capabilities. Combine visual building with custom code, self-host or cloud, 400+ integrations.

Java 面试 & 后端通用面试指南,覆盖计算机基础、数据库、分布式、高并发、系统设计与 AI 应用开发

Build Agentic workflows, RAG pipelines, with rich AI model and tool support on one collaborative workspace. Deploy on cloud, VPC, or self-hosted, so teams move from prototype…

Explore related