<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Peter Tomko</title>
    <description>The latest articles on DEV Community by Peter Tomko (@tomkess).</description>
    <link>https://dev.to/tomkess</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4235872%2F71593a3a-b01a-439a-b1e0-4e7f50189076.jpg</url>
      <title>DEV Community: Peter Tomko</title>
      <link>https://dev.to/tomkess</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/tomkess"/>
    <language>en</language>
    <item>
      <title>Why your product feed is lying to someone right now</title>
      <dc:creator>Peter Tomko</dc:creator>
      <pubDate>Mon, 09 Nov 2026 21:21:00 +0000</pubDate>
      <link>https://dev.to/tomkess/why-your-product-feed-is-lying-to-someone-right-now-jnn</link>
      <guid>https://dev.to/tomkess/why-your-product-feed-is-lying-to-someone-right-now-jnn</guid>
      <description>&lt;h1&gt;
  
  
  Why your product feed is lying to someone right now
&lt;/h1&gt;

&lt;p&gt;&lt;em&gt;Part 1 of 6 in CatalogSentry's launch series.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Every feed-format validator will tell you your feed is clean. Every field is present. Every&lt;br&gt;
price is a number. Every GTIN matches the expected pattern. And your feed can still be&lt;br&gt;
wrong — not malformed, &lt;em&gt;wrong&lt;/em&gt; — in ways that none of that checking catches.&lt;/p&gt;

&lt;p&gt;Here's the gap: field-format validation asks "does this field exist, and is it the right&lt;br&gt;
type?" It never asks "do these two fields, both describing the same product, actually agree&lt;br&gt;
with each other?"&lt;/p&gt;

&lt;h2&gt;
  
  
  The silent contradiction
&lt;/h2&gt;

&lt;p&gt;Picture a listing for a phone. The title says "Samsung Galaxy S24 256GB." The description&lt;br&gt;
says "with 128GB storage, stunning display and all-day battery." Both fields are present.&lt;br&gt;
Both are well-formed strings. A format validator has nothing to flag. But a buyer reading&lt;br&gt;
the full listing — or a marketplace's own content-quality system — is looking at two&lt;br&gt;
different products described as one.&lt;/p&gt;

&lt;p&gt;This isn't a hypothetical. It's one of the four examples baked into CatalogSentry's own demo&lt;br&gt;
fixture, and we'll show the exact output in part 3 of this series. The point here is the&lt;br&gt;
shape of the problem: a feed can pass every format check it owns and still contradict&lt;br&gt;
itself in the fields that actually describe the product to a buyer.&lt;/p&gt;

&lt;h2&gt;
  
  
  What this actually costs
&lt;/h2&gt;

&lt;p&gt;Three concrete failure modes, in order of how visible they are:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Marketplace rejections or suspensions.&lt;/strong&gt; Marketplaces increasingly run their own
content-quality checks on listings before (or after) they go live. A title/description
mismatch, a duplicate GTIN across two SKUs, or two "variants" that are secretly identical
products are the kind of thing that gets a listing pulled or a seller account flagged —
and you find out from the marketplace, not from your own tooling.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Confused buyers, and the support/return cost that follows.&lt;/strong&gt; A buyer who orders based
on "256GB" and receives something that was actually specced at 128GB in the fine print is
a buyer who returns the item, opens a support ticket, or leaves a bad review — all of
which cost more than catching the contradiction before the listing went live would have.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Lost conversions from duplicate or indistinguishable listings.&lt;/strong&gt; Two SKUs secretly
describing the same product split your reviews, split your sales rank, and confuse
shoppers comparing "variants" that turn out to be identical. None of that shows up as an
error — it shows up as quietly worse performance you can't easily trace back to the feed.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Why this keeps happening
&lt;/h2&gt;

&lt;p&gt;Feeds get built from multiple source systems — a PIM, a spreadsheet a merchandiser edits by&lt;br&gt;
hand, a supplier data dump — and titles, descriptions, and attributes often get written or&lt;br&gt;
updated independently of each other. Nobody &lt;em&gt;intends&lt;/em&gt; to ship a contradiction. It accumulates&lt;br&gt;
from reasonable, independent edits to fields that nothing checks against each other.&lt;br&gt;
At catalog volume — hundreds or thousands of SKUs, updated on a schedule, by more than one&lt;br&gt;
person — this isn't a rare accident. It's a predictable rate of drift, and the only way to&lt;br&gt;
catch it reliably is a check that compares fields against each other, every run, the same&lt;br&gt;
way every time.&lt;/p&gt;

&lt;h2&gt;
  
  
  What catches this
&lt;/h2&gt;

&lt;p&gt;That's the layer CatalogSentry adds on top of your existing feed: &lt;strong&gt;it checks that your&lt;br&gt;
product feed agrees with itself — not just that each field is present and the right type.&lt;/strong&gt;&lt;br&gt;
Deterministic checks, no inference calls, no vibes — every finding names the exact SKU, quotes&lt;br&gt;
the conflicting values, and recommends a fix. We'll walk through exactly what the original four&lt;br&gt;
checks do, with real output, in the rest of this series (see part 2 for the current, larger set).&lt;/p&gt;

&lt;p&gt;Worth saying plainly up front, since we'd rather you hear it from us than discover it&lt;br&gt;
yourselves: this is an early-stage tool. It's been run once, end-to-end, against a real&lt;br&gt;
995-product public catalog (not a synthetic fixture) with every check enabled — no crashes,&lt;br&gt;
real findings, real evidence. It has not yet been run against a real customer's own feed. What&lt;br&gt;
we're telling you in this series is what it does today, not a promise about what it will catch&lt;br&gt;
in every feed you throw at it.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Next:&lt;/strong&gt; &lt;a href="//./02-what-catalogsentry-checks-today.md"&gt;Part 2 — what CatalogSentry actually checks today&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Want to see this run against a real feed before reading further? Try&lt;br&gt;
&lt;a href="https://catalogsentry-demo.ai-product-intelligence.workers.dev" rel="noopener noreferrer"&gt;the interactive demo&lt;/a&gt;, or run CatalogSentry (AI Product Intelligence Engine) directly&lt;br&gt;
on &lt;a href="https://apify.com/tomko5peter/ai-product-intelligence-engine" rel="noopener noreferrer"&gt;Apify Store&lt;/a&gt; — it's live today.&lt;/p&gt;

</description>
      <category>ecommerce</category>
      <category>python</category>
      <category>api</category>
      <category>apify</category>
    </item>
  </channel>
</rss>
