What enrichment does
For each product, enrichment works through a few steps:1
Search the lakehouse
It looks up the product in the shared lakehouse
— a knowledge base of product, technology, and document data — before going
to the open web.
2
Scrape the brand's official site
It finds the product on the brand’s own website and reads the authoritative
description, specifications, and attributes published there.A successful fetch isn’t automatically trusted. Bot-protection and CAPTCHA
challenge pages return perfectly valid-looking responses, so MerchantOps
sanity-checks what came back: content that reads like a block page, or a
product name sharing nothing with the product it asked for, is treated as a
bad scrape. When that happens the entire scraped result is discarded —
no scraped value is saved, and none of it is passed on as context for
generation. The run continues on the lakehouse and generated content alone,
and records a warning on the job saying the scrape looked
suspect and was dropped. Suspect scrapes are thrown away, not trusted.
3
Generate missing content
Where a field is still empty, it generates the missing content (for example,
a product description) — but only when there’s enough grounded input to write
responsibly. When a field can’t be grounded in real source data or supporting
context, enrichment leaves it blank rather than inventing a value, so a record
may still show deliberate gaps. A run where nothing at all could be grounded
finishes with a warning on the Jobs page rather than a clean success.
4
Standardize attributes
It normalizes attribute values to your catalog’s standard form — so a color,
size, or material entered many different ways lands on one consistent value.
How enrichment decides which value wins
A single product can pick up the same field from four places: the shared lakehouse, the brand’s official site, content generated during the run, and the values you entered yourself. Enrichment resolves the conflict field by field, not once for the whole product.Priority is set per property
Each property definition carries its ownsource_priority — an ordered list of sources, best first. There is no single
site-wide ranking, and the built-in defaults deliberately differ by what kind of
field it is:
A property that doesn’t set its own order falls back to the default:
generated content, then the brand site, then the lakehouse, then your input.
Both the order and the merchant-input guard below are editable in the app: open
a property in the Property Dictionary, enable generation, and set its
prompt, the context fields to pass in, and the source order. The same settings
can be overridden for one product type or a whole category — see
Enrichment configuration and overrides.
Ranking generated content first does not mean it usually replaces real source
data — most of the time it is never generated at all. See the next section.
Generation is skipped when good source data already exists
Before generating anything, enrichment looks at what the field already holds. If a scraped or lakehouse value is already there with a confidence of 0.70 or higher, generation for that field is skipped entirely — no generated value is produced, so there is nothing to outrank the source data. In practice, generated copy wins mainly where source data was missing or low-confidence. Re-running enrichment on a product that already has more than one version bypasses this check, so a re-run can refresh content an earlier run left untouched.Values you entered are protected on most fields
A field whose current value came from you is normally left alone, whatever a source produces. That protection is a per-property switch,overwrite_merchant_input, and it is off by default — meaning your value
stays.
Three built-in fields ship with it on, because they are content MerchantOps
is expected to author:
- Description
- Features
- Meta title
overwrite_merchant_input
off on that property.
The guard is evaluated against the field’s currently tracked source, so it
protects a value only while that value is still attributed to your input. A field
another source filled — because you left it blank — is not covered; editing it
yourself puts it back under the guard.
Edits you make by hand
When you change a value on a product, MerchantOps records that it was a manual edit, along with who made it and when. Feed imports honor that absolutely: an imported row never overwrites a hand-edited field, and rows that disagree are reported as conflicts on the import job instead of being applied silently. Clearing the edit — the Reset to feed action — hands the field back to the feed. See Manual edits for the full picture — what enrichment can still replace, and the one import option that deliberately overrides the protection.It runs automatically
Enrichment runs in the background as a job — you don’t have to start it for each product. When you create or import products, they’re queued for enrichment and processed in parallel, and you can watch progress on the Jobs page.Reviewing enriched products
Check enrichment status, read the completeness score, and re-run enrichment.
Jobs
Monitor enrichment, import, and export jobs and their progress.