Skip to content

jlink

Record linkage for researchers: write the match rule in plain English and Jev judges each candidate pair with a probability.

ProjectbetaMIT

Overview

jlink links records across datasets, such as Compustat firms and patent assignees, using a match rule written in plain English. String distance can link 'Acme Widgets Inc.' to 'ACME WIDGETS, INC' but not 'IBM' to 'International Business Machines', and cannot know you want subsidiaries kept apart from parents. jlink blocks candidate pairs locally, then asks Jev, for each pair and your rule, whether they are the same entity; Jev returns a probability in about a fifth of a second for about a thousandth of a cent.

It is built for applied economists: the rule sentence goes into your data appendix, every pair has a probability so you can threshold, require a margin or carry uncertainty into estimation, and a stratified sample can be hand-labelled to produce precision, recall and a calibration table. Results are stored so reruns are free and identical. In the README's benchmarks, 171,354 pairs cost $2.95, and with no labels jlink beat LinkTransformer's zero-shot models on eleven of twelve standard benchmarks. It warns against sending restricted-use data, and supports local Laya or DiffusionGemma servers. It works from Python, the CLI, Stata and R.

What the decision model decides

TypeQuestionAnswers
Yes / noGiven these two records and this rule, are they the same entity?—

How it works

  1. State the entity, fields to compare and the match rule
  2. Block candidate pairs locally
  3. Jev judges each pair with a probability
  4. Resolve matches with thresholds and margins
  5. Hand-label a stratified sample to estimate precision, recall and calibration

Strengths

  • Match rule is explicit and reportable
  • Calibration checks built in
  • Reproducible, stored probabilities
  • Works from Python, CLI, Stata and R

Caveats

  • Compared fields go to an external API unless a local server is used
  • Not for restricted-use data without permission
  • Accuracy depends on rule wording

Getting started

uv add jlink (or uv tool install jlink for the CLI), then jlink.link(left, right, entity=..., on=[...], definition=...).

At a glance

Type
Project
Status
beta
Language
Python
Runtime
library and CLI (Stata, R wrappers)
Has code
yes
License
MIT

Use cases and integrations

How curated lists describe it

  • Research data: links records under a plain-English match rule using Jev Noul pair judgments, with local candidate blocking and match resolution.

    yibie/awesome-jev
  • The string baselines are best-match Jaro-Winkler and best-match TF-IDF cosine; the table shows the better of the two. Exact matching after normalization scores 0.26, 0.41, 0.00, 0.00 and 0.22.

    logicrw/awesome-jev-projects
  • Links records under a plain-English match rule using Jev Noul pair judgments, with local candidate blocking and match resolution.

    hellogumbo/awesome-jev

Frequently asked questions

What does Jev decide?

Whether each candidate pair of records refers to the same entity under your plain-English rule.

How much does it cost?

In the README's benchmarks, 171,354 pairs cost $2.95.

Can I keep data local?

Yes, with a local Laya or DiffusionGemma server; otherwise only the listed fields are sent.

Related projects

  • SQLite and Node library adding Jev judgments to SQL for matching, evidence picking, ranking, review queues and semantic CI checks.

    ProjectbetaJavaScript
  • Decision-first CSV cleaning: code proposes repairs, Jev scores action, applicability and risk, a fixed policy applies or abstains.

    ProjectprototypePython
  • Neo4j demos using Jev as a calibrated judge in GraphRAG pipelines, starting with entity resolution and a review queue.

    AppprototypePython
  • Small dependency-free library that maps uploaded CSV columns to your schema with exact-name matching, then one Jev Noul per remaining pair.

    ProjectprototypeJavaScript
  • Sutro's active-learning CLI that finds rows Jev is least sure about, asks you to label them, and uses GEPA to improve the definition.

    CLIbetaPython
  • CLI that normalises messy Japanese addresses to postal codes with rules and Japan Post data, asking Jev only for ambiguous steps.

    LibraryprototypeTypeScript