Paste a Chewy or Amazon pet food URL and get an A-F ingredient grade in 8-12 seconds. KibbleIQ fetches the page server-side, pulls the verbatim ingredient panel, and runs the same rubric used across 192 verified reviews — no typing required, same scoring math, same reproducibility per the KibbleIQ Methodology.

Submits to the analyzer on the homepage. Best results on Chewy.com, Amazon.com, and brand-direct product pages.

Supported sites

Per the URL-extract function shipped in Session 46 (April 2026), the following hosts work reliably. Other hosts may work too — the extractor is host-agnostic and runs on any public HTTPS product page — but the table below reflects what's been tested.

Host class Examples Reliability
Major retailers Chewy.com, Amazon.com High — consistent DOM, ingredients render as text
Brand-direct (premium) Orijen, Acana, Fromm, Blue Buffalo, Wellness, Open Farm High — most use a uniform product-page template
Brand-direct (mass) Purina, Hill's, Royal Canin, Nutro, Iams, Eukanuba Mixed — some put the panel inside an expand-on-click tab; extractor handles most cases
Specialty + small batch The Farmer's Dog, Nom Nom, Stella & Chewy's, Primal Mostly works — fresh and freeze-dried subscription brands occasionally hide the panel behind a region-gated route
PetSmart / Petco petsmart.com, petco.com Mostly works — slower than Chewy due to heavier page weight

How the extraction works

Step 1 — Server-side fetch. Per the KibbleIQ rate-limit policy (5 extractions per minute per IP), the URL-extract Netlify function pulls the page HTML server-side, with private and link-local hostnames blocked at the validator. The fetch runs with a 45-second cap, so a slow upstream times out cleanly rather than hanging the analyzer.

Step 2 — HTML reduction. The function strips scripts, styles, SVG, and noscript blocks, then keeps the visible text plus data-attribute fragments. Some retailers (notably Amazon) hide the ingredient panel inside an expand panel that's still present in the raw HTML even when rendered behind a click — the reducer keeps that text while dropping the noise.

Step 3 — Verbatim extraction via Claude Haiku. The reduced HTML goes to Claude Haiku with a tight verbatim-only prompt: return the ingredient panel exactly as written, ignore marketing copy, do not infer ingredients that aren't listed. The output is the raw comma-separated panel — exactly the format the analyzer's paste mode accepts.

Step 4 — Standard analyzer flow. The extracted panel populates the analyzer's paste field. You then click Analyze (or the URL-paste form here submits the URL directly so the homepage chains both steps automatically). The analyzer runs the appropriate KibbleIQ rubric — Dry Kibble Rubric v1.0, Fresh Food Rubric v1.0, or Treats Rubric v1.0 — and returns the A-F grade plus the per-axis breakdown.

Why URL-paste, not just typing

The analyzer accepts ingredients however you supply them — paste the comma-separated list, type the brand name, or paste a URL. Each input route has tradeoffs:

Method Best for Watch out for
Brand search Major brands with a verified database entry (170+ products as of DB v3.22). Returns a cached, source-stamped result instantly. New SKUs, regional variants, and reformulations may not be in the database yet — brand search may fall back to model knowledge with lower certainty.
Type the ingredients Foods you have the bag in front of you for, or any product not in the database. Typos on long mineral-chelate names; missing ingredients drop the score by accident; pasting from PDFs sometimes mangles the comma separators.
Paste the URL Whenever the product has a public retailer or brand-direct page. Captures the panel verbatim with the original ingredient order intact, which the rubric uses as a quality signal per the AAFCO labeling rules. Some pages render ingredients only as PDF or image — in those cases the extractor returns empty and you'll need to type the panel manually.

What URL-paste doesn't do (yet)

It doesn't read PDFs or image-only ingredient panels. A handful of brand sites publish the ingredient list as a downloadable PDF or as a photo of the bag. The extractor reads HTML text only — those pages return an empty panel and the analyzer prompts you to paste the ingredients manually.

It doesn't bypass site bot protections. Some retailers throttle or block automated fetches. When that happens the function returns an explicit error so you know the URL was rejected upstream — not silently swallowed.

It doesn't comparison-shop URLs. The Compare Brands tab on the homepage takes typed brand names, not URLs. Cross-format comparisons (a Chewy fresh-food page vs. an Amazon kibble page, for example) need to go through brand search or manual paste — the URL extractor scores one panel at a time.

It doesn't guess at ingredients the page doesn't list. Per the KibbleIQ reproducibility contract, the analyzer scores what's actually listed on the panel. If a retailer page omits the panel entirely (some marketplace listings do), the extractor returns empty rather than fabricating a likely-typical ingredient list.

Privacy and rate limits

URLs you paste here are fetched by the Netlify function and not stored beyond the in-memory L1 cache used for instance-level deduplication (warm-instance scope, evicts on cold start). The analyzer endpoint itself is rate-limited at 5 requests per minute per IP. The URL-extract endpoint has the same 5-per-minute cap. No part of this flow logs your IP address or browsing history beyond standard Netlify access logs, which auto-rotate per Netlify's privacy policy.

FAQ

What URLs work? Chewy, Amazon, and most brand-direct sites (premium and mass-market). Specialty subscription brands work most of the time. PDF-only and image-only ingredient panels do not work — you'll need to paste those manually.

Why not just type the brand? Brand search is faster when the product is in our verified database. URL-paste wins on long panels (40+ ingredients), reformulated SKUs not yet in the database, and any case where you have the page open already.

Is the URL fetched server-side or in my browser? Server-side. The Netlify function performs the fetch, so cross-origin restrictions don't apply and the request comes from a Netlify IP, not yours.

Can I link directly to the URL-paste flow? Yes. Append ?url= followed by the URL-encoded product URL to https://kibbleiq.com/ — the analyzer auto-fills the brand input and runs the extractor on page load. This is what the form on this page does.