One search. Every store.
Search Amazon, Walmart, Best Buy, Costco and 8 more retailers in one API call. Cartroute returns every matching offer with landed price, verified coupons and a 90-day price verdict, as one normalized JSON response your agent can act on.
# One call. Twelve retailers. curl "https://cart-route.com/api/v1/search?q=sony+wh-1000xm6" \ -H "Authorization: Bearer $CARTROUTE_API_KEY" { "object": "search_result", "data_source": "sandbox", "total_results": 1, "results": [ { "title": "Sony WH-1000XM6 Wireless Noise Cancelling Headphones", "price_summary": { "best_retailer": "Newegg", "best_effective_price_usd": 343.99, "spread_usd": 111, "offers_count": 7 }, "price_insight": { "verdict": "good_time_to_buy", "low_90d_usd": 342.99 }, "offers": [ { "retailer": "Newegg", "price_usd": 343.99, "shipping_usd": 0, "best_coupon": null, "effective_price_usd": 343.99, "in_stock": true } ] } ], "credits": { "charged": 1, "remaining": 199 } }
# Claude Code claude mcp add --transport http cartroute https://cart-route.com/mcp \ --header "Authorization: Bearer $CARTROUTE_API_KEY" # Any client with a JSON config (Cursor, Claude Desktop via mcp-remote) { "mcpServers": { "cartroute": { "url": "https://cart-route.com/mcp", "headers": { "Authorization": "Bearer cr_live_..." } } } } # Tools: search_products, get_product, get_price_history, # find_coupons, list_retailers, list_categories, get_account
import os, requests r = requests.get( "https://cart-route.com/api/v1/search", params={"q": "65 inch oled tv", "max_price": 2000, "in_stock": True}, headers={"Authorization": f"Bearer {os.environ['CARTROUTE_API_KEY']}"}, timeout=10, ) best = r.json()["results"][0]["price_summary"] print(best["best_retailer"], best["best_effective_price_usd"])
Every search covers
What does Cartroute return for a single query?
One GET /api/v1/search returns every matching product, every retailer offer for each product, and the six numbers an agent needs to recommend where to buy. Nothing needs to be scraped, parsed or reconciled on your side.
Landed and effective price
landed_price_usd adds shipping. effective_price_usd subtracts the best coupon anyone can use. Student and membership-gated discounts are listed but never assumed.
Coupons with evidence
Each code carries success_rate, sample_size and last_verified_at, so an agent can tell a reliable code from a 60% gamble.
90-day price verdict
price_insight.verdict says whether today's price is at the 90-day low, typical, or above the 30-day average, with the numbers behind it.
Stock and delivery
Per-offer stock level, delivery window and store pickup, so the cheapest offer is never an out-of-stock listing.
Matched by GTIN, not title
Offers are joined on GTIN and MPN. A Costco bundle with a different model suffix is not silently compared with the bare unit elsewhere.
Freshness on every offer
freshness_seconds tells the agent how old each price is. Retailer refresh intervals run from 10 to 30 minutes.
How does an agent connect to Cartroute?
Three ways, all authenticated with the same API key, all metered the same way: one credit per successful call, nothing for a malformed one.
- REST. OpenAPI 3.1 describes every field. Errors are RFC 9457 problem+json with stable codes.
- MCP. Point any Model Context Protocol client at
https://cart-route.com/mcp. Seven tools, Streamable HTTP. Setup guide. - Self-registration. An agent can create an account for its user with
POST /api/v1/accountsand receive a working key with 100 credits.
Built for machines that retry
| Idempotency | Idempotency-Key replays for 24 h, no second charge |
| Rate limits | RateLimit-* headers and Retry-After |
| Units | Every money field ends in _usd |
| Pagination | Opaque next_cursor |
| Discovery | api-catalog, MCP card, llms.txt |
| Every page | Add ?format=json or Accept: application/json |
Which products have the widest price gap today?
Same product, same condition, different retailer. Updated September 23, 2026.
Why not scrape each retailer directly?
Most teams try it first. It works for one retailer and breaks at three: bot defences, layout changes, and matching the same product across stores are each a full-time job.
| Cartroute | DIY scraping | Single-retailer APIs | |
|---|---|---|---|
| Retailers per call | 12 | 1 per scraper | 1 |
| Cross-store product matching | GTIN / MPN | You build it | Not offered |
| Shipping in the comparison | Yes, landed price | Checkout emulation | Rarely |
| Coupons with success rates | Yes | No | No |
| Price history | 180 days | From when you start | Rarely |
| MCP server | Yes | No | No |
| Time to first result | About a minute | Weeks | Days per retailer, with approvals |
How much does it cost to start?
Nothing. A new account gets 100 credits immediately and 100 more after confirming the email address: 200 searches with no card. Paid plans start at $29 a month for 5,000 credits.