Product Matching avatar

Product Matching

Pricing

from $9.99 / 1,000 results

Go to Apify Store
Product Matching

Product Matching

Product Matching — matches products across two datasets using identifiers, names, and brands, then returns confidence scores, matching evidence, product differences, and clear match classifications.

Pricing

from $9.99 / 1,000 results

Rating

0.0

(0)

Developer

Jamshaid Arif

Jamshaid Arif

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Share

A reusable entity-matching Actor. Give it two product datasets (A and B) and it returns, for every A record, its best B match with a confidence score, human-readable evidence, and the concrete field differences. It never claims an exact match when the confidence is insufficient.

What does this Actor do?

For each record in Dataset A it finds the most likely matching record in Dataset B and classifies the match:

  • exact — identifier-level agreement (SKU / GTIN / MPN / model) or a perfect normalized name + brand.
  • probable — strong name + brand agreement.
  • possible — plausible but weaker match.
  • no_match — nothing cleared the confidence bar.

Matching is delegated to the repository's shared matching module, which caps confidence when hard identifiers conflict, so two different products are never reported as the same item.

Why use it?

  • Reconcile a supplier catalogue against your own, or two competitor price feeds, without hand-mapping SKUs.
  • Every match is auditable: you see why it matched and how the two records differ (e.g. price, availability, URL).

How to use it

  1. Provide Dataset A and Dataset B — inline JSON arrays (recordsA / recordsB), or descriptors pointing at an Apify dataset (datasetA / datasetB).
  2. Optionally set matchFields to control which fields identify a product, and minConfidence to tune strictness.
  3. Run and export the matches.

Input

FieldTypeDescription
recordsA / recordsBarrayInline product records for each side.
datasetA / datasetBobjectAdvanced: {records|csv|json|datasetId|datasetUrl}.
matchFieldsobject{nameFields, brandFields, idFields, compareFields} overrides.
minConfidencenumber0–1; matches below this become no_match (default 0.6).

Input example

{
"recordsA": [{ "name": "Wireless Mouse", "brand": "Acme", "sku": "AM-100", "price": 19.99 }],
"recordsB": [{ "name": "Acme Wireless Mouse", "brand": "Acme", "sku": "AM-100", "price": 22.50 }],
"minConfidence": 0.6
}

Output

One match record per A record, plus a final summary record.

Output example

{
"recordType": "match",
"recordA": { "name": "Wireless Mouse", "sku": "AM-100", "price": 19.99 },
"recordB": { "name": "Acme Wireless Mouse", "sku": "AM-100", "price": 22.50 },
"matchStatus": "exact",
"matchConfidence": 0.98,
"matchingEvidence": ["identifier 'sku' matches (am100)", "brand matches ('acme' vs 'acme')"],
"differences": { "price": [19.99, 22.50] }
}

You can download the dataset in various formats such as JSON, HTML, CSV, or Excel.

Configuration

  • matchFields.idFields — identifier fields checked first (default: gtin, upc, ean, isbn, sku, mpn, model, manufacturerNumber).
  • matchFields.nameFields / brandFields — fields used for name/brand similarity.
  • matchFields.compareFields — fields whose differences are reported (default: price, currency, availability, url).

Environment variables

None. This Actor processes only the records you provide — no scraping, no proxy required.