One search, every store. RedPath is a Chrome extension that sweeps 27 retailers across the web in parallel, reads prices straight out of their search results, and ranks every offer cheapest-first - with the single lowest price spotlighted at the top.
scraper.js runs a tiered extraction waterfall. Every store runs through up to
four independent strategies, so a store only fails if all four miss:
__NEXT_DATA__, Redux
state…). The engine deep-walks every JSON blob hunting for product-shaped
objects by key signature (name/price/url aliases, nested price objects).If everything misses or the store blocks robots, RedPath still gives you a one-click manual search link. Mercari, Google Shopping, and Bing Shopping are manual links from the start (fully client-rendered).
Scraping public pages is best-effort - retailers can and do block it. The reliable alternative is a store’s official API, and RedPath supports the eBay Browse API out of the box:
Once connected, eBay searches go through the official API - no scraping, no
blocking, cleaner data - and results are ranked by the same Specific/General
engine as everything else. Your key is stored only on your device
(chrome.storage.local) and is never part of the shipped code or sent
anywhere but eBay. Remove it anytime to fall back to public-page reading.
This is the model for adding more official sources later (Best Buy and Walmart both offer free keys); each store adapter is small and self-contained.
Match modes:
Condition filter (Any / New / Refurbished / Used): each listing is
classified by Scraper.detectCondition: from eBay’s authoritative API
condition field when available, otherwise from title keywords (“Renewed”,
“Refurbished”, “Open Box”, “Pre-Owned”, “Used”, …). Anything with no signal
defaults to New (most retail listings). Switching the filter re-ranks the
current results instantly without re-searching.
Match filtering - the keyword + category engine. After each sweep RedPath
decides which listings are genuinely the product using a local relevance engine
(scraper.js), with no AI, no API key, and no server: it runs entirely in
the popup and works identically on Chrome, Brave, Edge, and Firefox. Beyond
plain token matching it:
It is conservative: a real product with a long, spec-stuffed title is always kept, and Specific mode keeps the accuracy high by requiring every query word to appear.
Ranking defenses (so the “best deal” is actually the product):
chrome://extensionsRed Path)
Important: live price scanning only works when RedPath runs as an installed extension. Opened as a normal web page, the browser’s security rules block it from reaching other sites - the page will tell you when that’s the case.
Hardening applied for publication - this is also the honest list of what the extension does and doesn’t do:
https://*/*); link-only stores get no permission at all.
activeTab + scripting are used solely for the user-initiated page scan.textContent), never string-built HTML,
and all URLs are validated to http(s) at extraction and render time
(images https-only).script-src 'self'; object-src 'none'; frame-ancestors
'none' on top of MV3’s baseline; all code and fonts ship in the package,
nothing loads from CDNs, no remote code (a CWS requirement).credentials: "omit", so the user’s
retailer cookies/sessions are never attached to a RedPath search.What no extension can promise: client-side code is always readable by the person who installs it (CWS forbids obfuscation), and searches necessarily reach retailers from the user’s own browser/IP. “Impossible to hack” doesn’t exist in software - the strategy above is minimizing what an attacker could ever get: there are no secrets in the extension, no user data beyond one locally-stored search term, and no privileged surface beyond reading retailer search pages.
RedPath can tag every outbound store link with your affiliate IDs so you earn
a commission when someone buys - at no extra cost to them. As the developer,
you set the IDs once in the CONFIG block at the top of
affiliates.js; the same IDs apply to every user (they are
public tracking IDs, not secrets, and never change the price a shopper pays):
CONFIG field |
Get it from | Covers |
|---|---|---|
ebayCampaignId |
partnernetwork.ebay.com (free) | eBay |
skimlinksId |
sovrn.com/commerce | ~48,000 merchants (Walmart, Target, Best Buy, …) - one ID |
amazonTag |
affiliate-program.amazon.com | Amazon (see below) |
templates (JSON) |
Impact / CJ / Rakuten dashboards | any store, per-store {url} template |
For each link RedPath uses, in order: your custom template for that store -> a
native tag (Amazon tag, eBay EPN params) -> a universal Skimlinks wrap ->
otherwise the link is left untouched. Blank fields simply don’t earn; nothing
breaks.
You must comply with two things (both handled/flagged):
Realistically, affiliate income needs real user volume - commissions are a few percent per sale - so treat this as “monetize once you have users,” not instant profit.
retailers.js is small and self-contained, and the universal JSON-LD parser
keeps working regardless.src/manifest.json: Manifest V3 config; host permissions name only the
retailers actually fetched (no https://*/*)src/popup/popup.html / popup.css: the UI (light default, dark toggle)src/popup/popup.js: search orchestration, ranking, page-scan logicsrc/popup/theme-early.js: applies the stored theme before first paintsrc/lib/scraper.js: the tiered extraction engine (structured data, embedded
state mining, DOM record detection, relevance scoring, match filtering)src/lib/ebay-api.js: official eBay Browse API adapter (OAuth token + search)src/lib/bestbuy-api.js: official Best Buy Products API adaptersrc/lib/affiliates.js: outbound-link affiliate tagging (EPN, Amazon,
Skimlinks, custom templates)src/lib/retailers.js: the store list + tier-0 site parserssrc/lib/brands.js: brand lexicon used by the relevance enginesrc/options/options.html / options.js / options.css: API-key settings pagesrc/assets/: shipped images and icons/src/vendor/: locally bundled npm packages (Chrome extensions can’t use CDNs)build/vendor.mjs: copies runtime files from node_modules -> src/vendor/,
verbatim and unmodifiedbuild/build.mjs: assembles dist/ for store uploadlegal/: privacy policy, licence, permission justificationsstore/: Chrome and Firefox listing copydocs/: architecture, Firefox notes, submission checklist| Package | Used for |
|---|---|
@fontsource/inter |
Body text, headings, buttons |
@fontsource/jetbrains-mono |
Prices and ranks |
@fontsource/playfair-display |
Display serif accents |
animejs |
Subtle entrance animations |
The REDPATH wordmark is an image (src/assets/wm_title.png), not live text, so
no display font is bundled for it.
src/vendor/ is pre-built and checked in, so Load Unpacked works with zero
build steps. Only if you update packages: npm install then npm run vendor.
Apache License 2.0 - see legal/LICENSE.
Karen Contreras Cubas - karenc.cubas@gmail.com
Privacy policy: legal/privacy-policy.md.