Commerce agent● operational

agents/catalog-enrichment

The answer was on page 14 of a PDF nobody opened.

Your supplier sent nine usable fields. They also sent a 24-page datasheet, a folder of packaging artwork and an email thread — containing about eighty more. This agent reads all of it, and cites where every value came from.

Resolved recordSKU-9921
As received

9

populated fields

After enrichment

84

each with a source

power_budget_total120 Wp.14 · table 2 · row 3
power_per_port_max30 Wp.14 · table 2 · row 4
poe_standardIEEE 802.3atp.14 · table 2 · footnote
operating_temp_range−10 °C to 55 °Cp.19 · environmental
mountingDIN rail · wall · desktopp.6 · installation diagram

Every row carries page, table and raw string · switch source documents below

The job

The data exists. It is just not in a database.

Almost no catalog is missing information in the sense of nobody knowing it. The thread pitch is printed on a drawing. The allergen matrix is on the back of the carton. The power budget is in table 2 on page 14. The new lead time is in an email from March.

It is all in the building. It is simply in formats a database cannot query, and reading it costs a human being roughly four minutes per document.

Which is why enrichment projects historically stall. The work is not difficult, it is enormous — and the moment it is finished the suppliers issue revisions and it begins decaying.

This agent reads by layout rather than keyword, so it retrieves the value in a specific cell of a specific table rather than whatever text sits near a matching word. That distinction is the difference between extraction and guessing.

One run

Four documents. Same product. Different truths.

Each source document class yields a different slice of the record. Note what each one cannot tell you — that is the row that escalates.

Source file

MFR-9921-DS-rev4.pdf

Document class

24-page PDF · text + tables

Attributes found

41

Escalated

1

0.4s
power_budget_total
120 W
p.14 · table 2 · row 3
set
0.4s
power_per_port_max
30 W
p.14 · table 2 · row 4
set
0.5s
poe_standard
IEEE 802.3at
p.14 · table 2 · footnote
set
0.9s
operating_temp_range
−10 °C to 55 °C
p.19 · environmental
set
1.2s
mounting
DIN rail · wall · desktop
p.6 · installation diagram
set
1.3s
enclosure_rating
IP30
p.19 · environmental
set
1.6s
mtbf_hours
412,000
p.22 · reliability
set
1.9s
recycled_content_pct
Not stated anywhere in this document
Request from supplier
esc
Escalation

The value is genuinely not present in this document. The agent names the attribute, the supplier to request it from, and the document class that would satisfy it — rather than filling the gap with a figure from a comparable product.

Capability ledger

This agent produces catalogs with holes in them, on purpose. The alternative is catalogs with confident errors in them.

Does

Reads the documents you already have — spec sheets, packaging artwork, dimensioned drawings, certificates, and the supplier emails where half the real information lives.

Extracts by layout rather than by keyword, so a value in row 3 of table 2 on page 14 is retrieved as that value, not as adjacent prose.

Normalises every extracted value to GS1 unit codes and controlled vocabularies so records from different suppliers become genuinely comparable.

Stores the page, table and raw string behind each attribute, so any published value can be traced back to the document it came from.

Re-extracts when a supplier issues a revision, and raises a drift event rather than silently overwriting the previous value.

Will not

Infer an attribute from a similar SKU. If this product's documents do not state it, it stays empty.

Resolve a bare number into a unit. 0.285 with no unit and no context escalates rather than becoming grams.

Treat the absence of a warning as the presence of a guarantee — no 'may contain' printed is not a clean allergen record.

Pick a winner when two supplied documents disagree. Both are surfaced and neither publishes.

Extract from a document older than the evidence window configured for that attribute class.

Invocation

Point it at a folder, a mailbox, or an SFTP drop. No supplier onboarding required.

Give it the documents you already have.

Direct invocation
POST /v1/agents/catalog-enrichment/run

{
  "sku": "SKU-9921",
  "sources": [
    "s3://feeds/sonicpro/MFR-9921-DS-rev4.pdf",
    "s3://feeds/sonicpro/artwork/*.ai"
  ],
  "min_confidence": 0.97,
  "on_conflict": "surface_both"
}
Response
{
  "run_id": "run_2c77ae10",
  "resolved": 84,
  "escalated": 1,
  "conflicts": 0,
  "gaps": [
    { "field": "recycled_content_pct",
      "reason": "not_in_any_source",
      "request_from": "supplier:sonicpro",
      "document_class": "sustainability_declaration" }
  ]
}
On file drop

Watches an SFTP folder or S3 prefix and processes whatever lands.

On mailbox

Reads a shared supplier inbox, including attachments and reply chains.

On revision

Re-extracts when a supplier issues a new document version.

On schedule

Sweeps existing sources to catch documents that changed quietly.

Deploy

Send the worst supplier folder you own.

Not the clean one. The folder with scanned PDFs, an XLSX nobody can open, and artwork in a proprietary format. We will enrich a thousand SKUs from it and return the resolved records, the provenance trail, and the list of gaps worth chasing.

1,000 SKUs · Read-only · Nothing published · Output in 5 working days