Product linking, the entity-resolution task of mapping merchant product records to canonical catalog products, consolidates fragmented listings so downstream search, recommendation, and advertising see one clean entry per product. At marketplace scale, billions of noisy, multi-category records must be resolved against tens of millions of canonical products, where scoring every candidate with a single model is either too weak for the hard cases or too costly for the easy ones. We present a production retrieve-then-match cascade that spends computation in proportion to difficulty: retrieval surfaces plausible matches, a lightweight text cross-encoder auto-resolves the high-confidence majority, and an agentic multimodal vision-language model settles the ambiguous remainder by inspecting product images and issuing web searches for evidence that is in neither record. The cross-encoder is distilled from millions of dual-VLM-consensus labels, retiring human annotation from the training set, and is calibrated to auto-accept links at a 98% precision bar validated against a smaller operator-certified audit. The agent is a self-hosted open-weight model that reaches a closed frontier VLM's precision at a four-point recall cost (88% versus 92%) for roughly one-seventh the per-pair cost, with no fine-tuning. Per-pair cost spans nearly five orders of magnitude from the cheap cross-encoder to the frontier VLM, so escalating only the hard tail to the agent raises end-to-end link coverage from the cheap stage's 68% to 77%.
Figures & tables
Figure 1. The adaptive-routing cascade: retrieval narrows each merchant record to K=20 candidates, a cheap text-only cross-encoder routes each pair by confidence (auto-accepting high , auto-rejecting low ), and only the ambiguous medium band escalates to the agentic multimodal VLM. Per-pair cost is relative to the cross-encoder (Table 1 ).
Model
Rel. cost
Modality
Cross-encoder matcher
1×
text
Open-weight agentic VLM
∼7,000×
text+image+search
Closed frontier VLM
∼50,000×
text+image+search
Table 1. Relative per-pair cost across the three matching models, normalized to the cheap cross-encoder ( 1× ); values are relative multipliers only.
Table 2. Retrieval recall on the deduplication slice (the primary, independent-ground-truth metric; Section 4.1 ), under the production configuration (image+text+GTIN ANN, RRF fusion, K=20 ) and single-factor changes to it.
Recipe
R@P98 (stress audit)
Raw barcode digits, no mitigation
0.200
+ barcode dropout + name-similarity guardrail
0.692
+ distillation from the guardrailed teacher, 1 epoch
0.743
+ distillation from the guardrailed teacher, 2 epochs
0.768
Table 3. Recall at the 98% precision operating point (R@P98) on a stress audit oversampled for barcode-collision pairs (same barcode, conflicting name), across the mitigation progression. Single-seed for the distillation rows (Section 4.2.2 ).
System
Accuracy (%)
Precision (%)
Recall (%)
Human operators
83.0
94.4
77.0
Closed VLM (GPT-5.4)
96.7
99.1
95.5
Δ (VLM − operators)
+13.7
+4.7
+18.5
Table 4. Agentic VLM versus trained human operators on the hardest medium-confidence match tasks. Differences are significant at p<0.0001 ; the 95% confidence intervals on the deltas exclude zero.
Dimension
Open (Qwen 3.6, self-hosted)
Closed (GPT-5.4, API)
Precision
98.0%
98.0%
Recall
88%
92%
Relative cost/pair
∼ 1 ×
∼ 7 ×
Search backend
self-hosted web search (MCP)
OpenAI-hosted web search
Fine-tuning / weights
full control
none
Table 5. Open-weight self-hosted agent versus the closed frontier agent on the hard-tail matching stage, at equal precision. Cost is per pair, normalized to the open-weight stack (open =1× here; Table 1 gives the absolute cost ladder); other rows are relative or architectural.
Entity resolution links records that refer to the same real-world entity across datasets despite differences in names, attributes, formats, and languages.