<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Savlume]]></title><description><![CDATA[Savlume]]></description><link>https://savlume.hashnode.dev</link><generator>RSS for Node</generator><lastBuildDate>Sun, 15 Nov 2026 20:40:30 GMT</lastBuildDate><atom:link href="https://savlume.hashnode.dev/rss.xml" rel="self" type="application/rss+xml"/><language><![CDATA[en]]></language><ttl>60</ttl><item><title><![CDATA[Keeping Deal Data Fresh: Incremental Crawling and Change Detection for Price Tracking]]></title><description><![CDATA[A price comparison site is only as useful as its last check. A deal that was real on Monday can be gone by Friday, and a price that moved overnight makes…]]></description><link>https://savlume.hashnode.dev/keeping-deal-data-fresh-incremental-crawling-and-change-detection-for-price-tracking</link><guid isPermaLink="true">https://savlume.hashnode.dev/keeping-deal-data-fresh-incremental-crawling-and-change-detection-for-price-tracking</guid><category><![CDATA[AI]]></category><category><![CDATA[APIs]]></category><category><![CDATA[Web Development]]></category><dc:creator><![CDATA[hi gi]]></dc:creator><pubDate>Sun, 15 Nov 2026 00:06:19 GMT</pubDate><content:encoded><![CDATA[<p>A price comparison site is only as useful as its last check. A deal that was real on Monday can be gone by Friday, and a price that moved overnight makes yesterday's guide wrong. At Savlume, we publish buying guides that list current prices, so keeping those prices fresh is a core engineering problem, not an afterthought. This post explains how we think about incremental crawling and change detection — the pipeline that decides what to re-check, when, and how to react when a price moves.</p>
<p>Why you cannot just re-crawl everything</p>
<p>The naive approach is simple: crawl every product page on a schedule and rewrite the database. It works at small scale and falls apart quickly. Retailer pages are heavy, rate limits are real, and most prices have not changed since the last check. Re-crawling everything wastes bandwidth, invites blocks, and buries the few real changes in a pile of identical snapshots.</p>
<p>The fix is to crawl incrementally: only fetch what is likely to have changed, and only act when the fetched data actually differs from what we already have.</p>
<p>Prioritising what to check</p>
<p>Not every product deserves the same check frequency. We rank products by a few signals:</p>
<ul>
<li>Volatility. Products whose prices moved recently get checked more often. A stable price that has not moved in a month can wait.</li>
<li>Traffic. Guides that readers open every day get fresher data than guides nobody has visited in weeks.</li>
<li>Seasonality. Around Black Friday and other sale events, everything gets checked more often, because that is when prices move fastest.</li>
<li>Deal status. A product currently listed as a deal — a price below its usual level — gets checked daily, because a deal ending is exactly the change readers care about most.</li>
</ul>
<p>This is a priority queue, not a fixed schedule. The crawler works through the highest-priority items first, so a limited crawl budget still covers the prices that matter.</p>
<p>Change detection: compare, don't just store</p>
<p>Fetching a page is only half the job. The other half is deciding whether anything changed. We keep the last known snapshot for each product — price, list price, availability, and the verification status — and compare the new fetch against it field by field.</p>
<p>Three outcomes matter:</p>
<ol>
<li>No change. The price is the same. We update the "last checked" timestamp and move on. Nothing is republished, and no alert fires.</li>
<li>Price changed. The new price replaces the old one, the change is logged with a timestamp, and the guide's verification status is re-evaluated. A price drop can become a new deal; a price rise can end one.</li>
<li>Page or structure changed. The price field is missing or the page layout shifted. This is not a price change — it is a signal that the extractor may be broken, and it goes to a review queue instead of silently overwriting good data.</li>
</ol>
<p>That third case is the one most small crawlers miss. A missing price should never be treated as a zero price or a removed product. It means "we don't know", and the guide should keep showing the last verified price with its check date rather than publishing a guess.</p>
<p>Verification status: retailer-verified vs. source-reported</p>
<p>At Savlume, every price carries a verification label. A price is retailer-verified when we confirmed it directly on the retailer's own page; it is source-reported when it comes from a secondary source and has not been confirmed at the retailer. Change detection feeds directly into this: a retailer-verified price that we re-confirm stays retailer-verified with a fresh timestamp. A price we can no longer confirm at the retailer drops back to source-reported until it is verified again.</p>
<p>This matters because a guide is a promise. Readers should be able to tell, at a glance, which prices we actually saw at the store and which ones we are passing along. The labels are part of the data model, not decoration on the page.</p>
<p>Publishing the change, fast</p>
<p>A detected price change is only useful if it reaches readers. Our guides are served through a small API surface — /api/v1/items for structured product data and /feed/all.xml for an RSS feed — and an MCP endpoint at /api/mcp plus an llms.txt file so AI agents can read the same data. When a price changes, the guide page, the API, and the feed all reflect the new value from the same source of truth, so there is no window where the guide says one price and the feed says another.</p>
<p>The RSS feed is the fastest path to readers who follow it: a price drop that the crawler confirms in the morning can be in a subscriber's reader before lunch, without anyone manually editing a page.</p>
<p>What we learned</p>
<ul>
<li>Check the prices readers actually see. A crawler that checks everything equally will always be behind on the pages that matter.</li>
<li>Treat "unknown" as a state, not an error. A failed fetch should never overwrite a good price with a blank.</li>
<li>Log every change with a timestamp. Price history is what turns "this is cheap now" into "this is the cheapest it has been in a month", and that history only exists if you record it.</li>
<li>Keep one source of truth. The guide page, the API, and the feed should all read from the same data, so a change propagates everywhere at once.</li>
</ul>
<p>Price tracking is not a scraping problem. It is a freshness problem: knowing what changed, deciding what it means, and getting the new answer to readers before it goes stale again.</p>
<p>Prices in Savlume guides are marked retailer-verified or source-reported, and every guide links back to the retailer so you can check the current price before you buy. Browse the guides at <a href="https://savlume.com/">https://savlume.com/</a></p>
<p>Follow Savlume Deals on WhatsApp: <a href="https://whatsapp.com/channel/0029VbE9P7J7DAX7rD8TAC2U">https://whatsapp.com/channel/0029VbE9P7J7DAX7rD8TAC2U</a></p>
]]></content:encoded></item><item><title><![CDATA[Designing RSS and API Feeds So Price Drops Reach Readers in Minutes]]></title><description><![CDATA[This is the third post in our series on building Savlume ( a US deal tracker. The first covered our deal verifier and the MCP + llms.txt layer ( the second…]]></description><link>https://savlume.hashnode.dev/designing-rss-and-api-feeds-so-price-drops-reach-readers-in-minutes</link><guid isPermaLink="true">https://savlume.hashnode.dev/designing-rss-and-api-feeds-so-price-drops-reach-readers-in-minutes</guid><category><![CDATA[AI]]></category><category><![CDATA[APIs]]></category><category><![CDATA[Web Development]]></category><dc:creator><![CDATA[hi gi]]></dc:creator><pubDate>Sat, 14 Nov 2026 00:48:04 GMT</pubDate><content:encoded><![CDATA[<h1>Designing RSS and API Feeds So Price Drops Reach Readers in Minutes</h1>
<p>This is the third post in our series on building Savlume (<a href="https://savlume.com/">https://savlume.com/</a>), a US deal tracker. The first covered our deal verifier and the MCP + llms.txt layer (<a href="https://savlume.com/llms.txt">https://savlume.com/llms.txt</a>); the second covered automated price tracking and GEO/AEO (<a href="https://savlume.hashnode.dev/building-an-ai-shopping-assistant-automated-price-tracking-and-geo-aeo-in-practice">https://savlume.hashnode.dev/building-an-ai-shopping-assistant-automated-price-tracking-and-geo-aeo-in-practice</a>). This one is about the plumbing in between: the RSS and API feeds that carry a price drop from our catalog to a reader, a feed reader, or another agent — fast, without duplicates, and without lying about what changed.</p>
<h2>1. Why feeds, not just pages</h2>
<p>A deal page is a snapshot. A feed is a changelog. When a price drops, the useful event is not "this page exists" but "this item's price changed at this time, from this to that, with this evidence level." Readers who follow deals need the event; agents who answer shopping questions need it too.</p>
<p>Savlume ships three feed surfaces for the same catalog:</p>
<ul>
<li>/feed/all.xml (<a href="https://savlume.com/feed/all.xml">https://savlume.com/feed/all.xml</a>) — RSS for all updates, the one feed readers and automation tools already know how to consume.</li>
<li>/api/v1/items (<a href="https://savlume.com/api/v1/items?mode=all&amp;limit=24">https://savlume.com/api/v1/items?mode=all&amp;limit=24</a>) — paginated JSON for every item, plus /api/v1/items/{id} for a single item.</li>
<li>/api/mcp (<a href="https://savlume.com/api/mcp">https://savlume.com/api/mcp</a>) — an MCP endpoint so an AI agent can query the catalog directly instead of scraping pages.</li>
</ul>
<p>One catalog, three doors. The rule that keeps them honest: every surface reports the same price, the same verification status (retailer-verified or source-reported), and the same timestamps. A feed entry that disagrees with the page it links to is worse than no feed at all.</p>
<h2>2. What goes into a feed entry</h2>
<p>Each entry carries the minimum a reader needs to decide in seconds, and nothing they have to re-verify by clicking:</p>
<ul>
<li>The item and its canonical URL — the Savlume item page, so the entry is citable.</li>
<li>The current price and the reference price, as separate fields — so a "40% off" claim can be checked, not just believed.</li>
<li>The verification status — retailer-verified (confirmed at the retailer's own listing) or source-reported (from a deal source, not yet confirmed at the retailer). The status travels with the price; it is never stripped in the feed.</li>
<li>Publication, update, and verification times — when the item was listed, when the entry last changed, and when the price was last checked. A price without a time is a rumor, and a feed that hides the check time turns rumors into headlines.</li>
<li>The conditions — coupon required, Prime required, limit per customer, free shipping or not. A price that only exists with a coupon is not the same price.</li>
</ul>
<p>What we deliberately leave out: cashback, gift cards, and points are never subtracted from the checkout price, and expired or out-of-stock entries are kept as reference, never as recommendations. A feed that promotes a dead deal is a feed readers unsubscribe from.</p>
<h2>3. Deduplication: the same drop, once</h2>
<p>The hardest feed problem is not speed — it is not repeating yourself. A price that flickers between two values, or a page that gets re-saved without a real change, must not produce five entries for one event. Our rules:</p>
<ul>
<li>An entry is emitted only when the price, the verification status, or the availability actually changes. A re-save with no change is not an event.</li>
<li>The same product, variant, and conditions are one item. Historical comparisons only compare identical conditions; a different coupon or a different variant is a different record, not an update to the old one.</li>
<li>Missing information stays unknown. If a check fails, we report "couldn't verify," not "deal dead" — and a failed check does not emit a new entry pretending the price moved.</li>
</ul>
<p>The practical effect for a subscriber: the feed is quiet most of the day and noisy exactly when something real happens. That is the trust contract of a feed — every entry should be worth the interruption.</p>
<h2>4. Polling, caching, and not hammering the retailer</h2>
<p>A feed does not remove the need to check prices; it changes who checks what, and how often. Our catalog checks run on our side, and the feed is the public result of those checks. Consumers poll the feed on a sane interval instead of scraping retailer pages themselves, which is better for everyone: fewer requests to retailers, and one verified answer instead of a hundred unverified guesses.</p>
<p>Two design choices that matter:</p>
<ul>
<li>Stable item IDs and canonical URLs. A feed reader can tell that today's entry is the same item as yesterday's, so it can show "price dropped from $X to $Y" instead of "a new product appeared."</li>
<li>Machine-readable text per item. Every item also has a /items/{id}/markdown text version, so an agent or a feed consumer that wants the clean facts can quote them without parsing HTML.</li>
</ul>
<h2>5. What we would do differently next</h2>
<p>If we rebuilt the feed layer tomorrow, we would add per-category feeds (one RSS feed per guide category, so a reader who only cares about kitchen deals does not get headphone drops), and a "verification changed" event type distinct from "price changed" — because a price that goes from source-reported to retailer-verified is news even when the number stays the same.</p>
<p>For now, the single all-updates feed does the job: one place where every real change appears once, with its evidence attached.</p>
<h2>Try it</h2>
<ul>
<li>Browse the deals: Savlume (<a href="https://savlume.com/">https://savlume.com/</a>)</li>
<li>Subscribe to all updates: <a href="https://savlume.com/feed/all.xml">https://savlume.com/feed/all.xml</a></li>
<li>Read the machine-readable index: <a href="https://savlume.com/llms.txt">https://savlume.com/llms.txt</a></li>
<li>API guide for agents: <a href="https://savlume.com/agent">https://savlume.com/agent</a></li>
<li>Example buying guide: Top 5 Air Fryers Under $100 for Black Friday 2026 (<a href="https://savlume.com/best/air-fryers-under-100">https://savlume.com/best/air-fryers-under-100</a>)</li>
</ul>
<p>Follow Savlume Deals on WhatsApp: <a href="https://whatsapp.com/channel/0029VbE9P7J7DAX7rD8TAC2U">https://whatsapp.com/channel/0029VbE9P7J7DAX7rD8TAC2U</a></p>
]]></content:encoded></item><item><title><![CDATA[Building an AI Shopping Assistant: Automated Price Tracking and GEO/AEO in Practice]]></title><description><![CDATA[This is the second post in our series on building Savlume, a US deal tracker. The first covered our deal verifier and the MCP + llms.txt layer. This one is…]]></description><link>https://savlume.hashnode.dev/building-an-ai-shopping-assistant-automated-price-tracking-and-geo-aeo-in-practice</link><guid isPermaLink="true">https://savlume.hashnode.dev/building-an-ai-shopping-assistant-automated-price-tracking-and-geo-aeo-in-practice</guid><category><![CDATA[AI]]></category><category><![CDATA[APIs]]></category><category><![CDATA[Web Development]]></category><dc:creator><![CDATA[hi gi]]></dc:creator><pubDate>Fri, 13 Nov 2026 06:26:23 GMT</pubDate><content:encoded><![CDATA[<h1>Building an AI Shopping Assistant: Automated Price Tracking and GEO/AEO in Practice</h1>
<p>This is the second post in our series on building <a href="https://savlume.com/">Savlume</a>, a US deal tracker. The first covered our <a href="https://savlume.com/llms.txt">deal verifier and the MCP + llms.txt layer</a>. This one is about the two things that make it work day to day: automated price tracking, and GEO/AEO — making a site that AI search engines can actually cite.</p>
<h2>1. Automated price tracking: the data model matters more than the scraper</h2>
<p>Everyone asks what we scrape. The more important question is what we store. Every deal on Savlume is a record with:</p>
<ul>
<li>The price and the <strong>verification status</strong>: retailer-verified (confirmed at the retailer's own listing) or source-reported (from a deal source, not yet confirmed at the retailer).</li>
<li>A <strong>verification timestamp</strong>: when the price was last checked.</li>
<li>The <strong>conditions</strong>: coupon required, Prime required, limit per customer, free shipping or not.</li>
<li>The <strong>reference price</strong> as a separate field from the checkout price.</li>
</ul>
<p>That model is what makes the automation trustworthy. A price without a timestamp is a rumor, and a discount computed from an inflated reference price is a lie. Two rules we never break: expired and out-of-stock entries are kept as reference, never as recommendations; and cashback, gift cards, and points are never subtracted from the checkout price. Historical comparisons only compare the same product, variant, and conditions — missing information stays unknown.</p>
<p>The catalog is exposed the same way it is stored: <a href="https://savlume.com/api/v1/items?mode=all&amp;limit=24">/api/v1/items</a> (paginated JSON), <a href="https://savlume.com/feed/all.xml">/feed/all.xml</a> (RSS for all updates), and a <code>/items/{id}/markdown</code> text version plus <code>/api/v1/items/{id}</code> JSON for every item. The 35 buying guides under <a href="https://savlume.com/best">/best</a> are structured content — multi-source review consensus plus current retailer offers — so a tracker can follow a whole category, not just one SKU.</p>
<h2>2. GEO/AEO: make your site citable by AI search</h2>
<p>GEO (generative engine optimization) and AEO (answer engine optimization) are the same idea: when someone asks ChatGPT, Perplexity, or Gemini "what's the best air fryer under $100?", the answer comes from sources the model can read and cite. A normal HTML page is hard for an agent to quote precisely. So we ship a machine-readable layer:</p>
<ul>
<li><strong><a href="https://savlume.com/llms.txt">/llms.txt</a></strong> — a single index of everything: about and methodology, today's deals, Black Friday and Cyber Monday, coupons, categories, stores, brands, reviews, and all 35 guides. It also carries the interpretation rules: quote the original source and the canonical Savlume item URL with publication, update, and verification times.</li>
<li><strong><a href="https://savlume.com/agent">/agent</a></strong> — an API guide written for agents, not humans.</li>
<li><strong><a href="https://savlume.com/api/mcp">/api/mcp</a></strong> — an MCP endpoint, so an agent can query the catalog directly.</li>
<li><strong>Per-item Markdown</strong> — every item has a clean text version, which is what an agent actually wants to quote.</li>
</ul>
<p>The practical effect: an agent that reads our llms.txt can answer with a real price, a real timestamp, and a real link, instead of hallucinating one. And because every price carries its verification status, the agent can say "retailer-verified" or "source-reported" instead of stating an unverified price as fact.</p>
<p>Three things we learned doing this:</p>
<ul>
<li><strong>Write the llms.txt first, not last.</strong> It forces you to decide what the site is and what evidence each claim carries.</li>
<li><strong>Label uncertainty in the data, not in a footnote.</strong> "Source-reported" next to the price is what makes the answer honest.</li>
<li><strong>Keep the canonical URL in every answer.</strong> The llms.txt rules tell agents to cite the Savlume item URL with its timestamps — that is how the citation survives.</li>
</ul>
<h2>3. What this buys you</h2>
<p>For shoppers: prices with evidence levels and timestamps, not badges. For agents: a catalog they can query and cite. For us: every AI answer that cites a Savlume price is a backlink with a timestamp attached.</p>
<p>Try it: browse <a href="https://savlume.com/">Savlume</a>, read <a href="https://savlume.com/llms.txt">savlume.com/llms.txt</a>, or check the API guide at <a href="https://savlume.com/agent">savlume.com/agent</a>.</p>
]]></content:encoded></item><item><title><![CDATA[Show HN: Savlume – An AI-verified US deal tracker with open MCP & llms.txt endpoints]]></title><description><![CDATA[Hi everyone, With Black Friday 2026 coming up, I got tired of fake "list prices" on retail sites where a $50 item is suddenly marked "50% off from $100"…]]></description><link>https://savlume.hashnode.dev/show-hn-savlume-an-ai-verified-us-deal-tracker-with-open-mcp-llms-txt-endpoints</link><guid isPermaLink="true">https://savlume.hashnode.dev/show-hn-savlume-an-ai-verified-us-deal-tracker-with-open-mcp-llms-txt-endpoints</guid><dc:creator><![CDATA[hi gi]]></dc:creator><pubDate>Wed, 11 Nov 2026 10:11:19 GMT</pubDate><content:encoded><![CDATA[<p>Hi everyone,</p>
<p>With Black Friday 2026 coming up, I got tired of fake "list prices" on retail sites where a $50 item is suddenly marked "50% off from $100".</p>
<p>So I built **Savlume** (<a href="https://savlume.com/">https://savlume.com/</a>) — an independent US shopping deal tracker that cross-checks source-reported offers against actual retailer pricing, strips out noisy promo-code prefixes, and flags honest trade-offs before you buy.</p>
<p>A few things we built under the hood:</p>
<p>1. **Black Friday 2026 Doorbuster Hub**: <a href="https://savlume.com/black-friday">https://savlume.com/black-friday</a> (side-by-side price comparison tables + verified promo codes across Amazon, Best Buy, Walmart, and Target).</p>
<p>2. **Consensus Buying Guides**: Instead of generic fluff, we synthesize pros, trade-offs, and review consensus for price-capped categories like [Best Air Fryers Under $100](<a href="https://savlume.com/best/air-fryers-under-100">https://savlume.com/best/air-fryers-under-100</a>) and [Best Wireless Earbuds Under $100](<a href="https://savlume.com/best/wireless-earbuds-under-100">https://savlume.com/best/wireless-earbuds-under-100</a>).</p>
<p>3. **Head-to-Head Model Comparisons**: Automated side-by-side spec &amp; price matchups at <a href="https://savlume.com/compare">https://savlume.com/compare</a></p>
<p>4. **Open for AI Agents (GEO / MCP)**: We exposed a clean [llms.txt](<a href="https://savlume.com/llms.txt">https://savlume.com/llms.txt</a>), full RSS feed (<a href="https://savlume.com/feed/all.xml">https://savlume.com/feed/all.xml</a>), and an MCP server endpoint so AI assistants can query live verified US deals directly.</p>
<p>Would love your feedback on the speed, UI, and price-verification transparency!</p>
]]></content:encoded></item><item><title><![CDATA[How We Built an AI Shopping Deal Verifier with MCP & llms.txt]]></title><description><![CDATA[Most deal sites have the same flaw: a price is shown with no evidence behind it. A "$100 off" badge means nothing if the reference price is inflated, the…]]></description><link>https://savlume.hashnode.dev/how-we-built-an-ai-shopping-deal-verifier-with-mcp-llms-txt</link><guid isPermaLink="true">https://savlume.hashnode.dev/how-we-built-an-ai-shopping-deal-verifier-with-mcp-llms-txt</guid><category><![CDATA[AI]]></category><category><![CDATA[ecommerce]]></category><category><![CDATA[mcp]]></category><category><![CDATA[llms.txt]]></category><category><![CDATA[webdev]]></category><dc:creator><![CDATA[hi gi]]></dc:creator><pubDate>Sun, 08 Nov 2026 06:20:01 GMT</pubDate><content:encoded><![CDATA[<p>Most deal sites have the same flaw: a price is shown with no evidence behind it. A "$100 off" badge means nothing if the reference price is inflated, the price is from last week, or "in stock" was never actually checked. We built Savlume (<a href="https://savlume.com/">https://savlume.com/</a>) to fix that. Every deal carries its verification status, and the whole catalog is machine-readable, so AI agents can check a price instead of guessing one.</p>
<h2>1. The problem: deal prices lie by omission</h2>
<p>A deal is a claim — a price, a discount, availability — and a claim needs evidence and a timestamp. Three things go wrong on most deal sites: the reference price is inflated, so the discount looks bigger than it is; the price is stale but presented as current; stock and coupon conditions are asserted, never checked. Our rule from day one: if we can't show the evidence, we say so on the page.</p>
<h2>2. Two-tier verification: retailer-verified vs source-reported</h2>
<p>Every price on Savlume is one of two things: retailer-verified (confirmed at the retailer's own listing), or source-reported (the price comes from a deal source such as DealNews or 9to5Toys and has not been confirmed at the retailer — labeled exactly that on the page). A few more rules we enforce: expired and out-of-stock entries are kept as reference material, never as recommendations; listed/reference prices and conditional checkout prices are separate fields, and cashback, gift cards, and points are never subtracted from the checkout price; a failed check is not proof that an offer expired — we report "couldn't verify," not "deal dead"; historical comparisons only compare the same product, variant, and conditions, and missing information stays unknown.</p>
<p>A concrete example: our Black Friday air fryer guide (<a href="https://savlume.com/best/air-fryers-under-100">https://savlume.com/best/air-fryers-under-100</a>) lists the Ninja Foodi 2-basket at $99.99 as source-reported via Target, while the Instant Pot Vortex Plus at $79.95 and the COSORI Pro III at $79.99 are retailer-verified on Amazon. Same page, different evidence levels, each labeled.</p>
<h2>3. Making the catalog machine-readable: llms.txt + MCP</h2>
<p>Verification is only half the job. The other half is letting machines read it: /llms.txt (<a href="https://savlume.com/llms.txt">https://savlume.com/llms.txt</a>) is the index — about and methodology, today's deals, Black Friday and Cyber Monday pages, coupons, categories, stores, brands, reviews, and all 35 buying guides; /api/v1/items (<a href="https://savlume.com/api/v1/items?mode=all&amp;limit=24">https://savlume.com/api/v1/items?mode=all&amp;limit=24</a>) is JSON for every item, paginated, and each item page also has a /items/{id}/markdown text version and a /api/v1/items/{id} JSON representation; /feed/all.xml (<a href="https://savlume.com/feed/all.xml">https://savlume.com/feed/all.xml</a>) is RSS for all updates; /api/mcp (<a href="https://savlume.com/api/mcp">https://savlume.com/api/mcp</a>) is an MCP endpoint, so AI agents can query the catalog directly instead of scraping pages; /agent (<a href="https://savlume.com/agent">https://savlume.com/agent</a>) is the API guide for agents. The reasoning is simple: the same agents that write buying advice should be able to verify a price before quoting it. If an LLM can read our llms.txt, it can cite a real price with a real timestamp instead of hallucinating one.</p>
<h2>4. How it was built</h2>
<p>The site was built with the help of an AI coding agent (Codex), which made it fast to iterate on the data model and the verification labels. The 35 buying guides under /best (<a href="https://savlume.com/best">https://savlume.com/best</a>) are structured content — multi-source review consensus plus current retailer offers — not scraped listicles. And the site says plainly on its llms.txt that it is "Independent US shopping summaries with AI assistance. Purchases take place at external retailers. No claim of personal product testing, exhaustive market coverage or guaranteed lowest price." That disclosure is a feature, not a disclaimer we hide.</p>
<h2>5. Lessons so far</h2>
<p>Label uncertainty on the page, not in a footnote nobody reads. A price without a time is a rumor — verification timestamps are part of the record. Don't subtract incentives from the price: cashback isn't a discount at checkout, so it never lowers the number we show. Ship the machine-readable layer early: llms.txt and the MCP endpoint cost little to add and make the site useful to the agents that increasingly do the shopping research.</p>
<h2>Try it</h2>
<p>Browse the deals: Savlume (<a href="https://savlume.com/">https://savlume.com/</a>). Read the machine-readable index: savlume.com/llms.txt (<a href="https://savlume.com/llms.txt">https://savlume.com/llms.txt</a>). API guide for agents: savlume.com/agent (<a href="https://savlume.com/agent">https://savlume.com/agent</a>). Example buying guide: Top 5 Air Fryers Under $100 for Black Friday 2026 (<a href="https://savlume.com/best/air-fryers-under-100">https://savlume.com/best/air-fryers-under-100</a>).</p>
]]></content:encoded></item></channel></rss>