{
  "object": "doc",
  "title": "How should an agent decide where to buy?",
  "description": "A decision procedure over effective price, stock, membership, coupons and price history.",
  "section": "Agents and integrations",
  "url": "https://cart-route.com/docs/guides/recommendations",
  "updated": "2026-09-23",
  "prev": "https://cart-route.com/docs/guides/no-code",
  "next": "https://cart-route.com/docs/machine-readable",
  "text": "Rank in-stock offers by `effective_price_usd`, drop members-only stores unless the shopper has that membership, treat coupons that need a code as conditional on their success rate, and use `price_insight.verdict` to say whether to buy now. Then recommend one retailer and state the numbers behind the choice. The procedure below turns a Cartroute response into a recommendation a shopper can trust.\n\n## What is the decision procedure?\n\n- Pick the product. If several results match, confirm the exact model with the user before comparing prices. Offers are matched by GTIN, so every offer under one product is the same item.\n\n- Filter offers. Keep `availability.in_stock` offers. Drop `retailer.membership_required` unless the shopper has that membership (or search with `include_membership=false`). Drop `condition: \"open_box\"` unless the shopper accepts open-box.\n\n- Rank on effective price. Sort by `effective_price_usd`, never `price_usd`: shipping and coupons change the winner on a meaningful share of products.\n\n- Check the coupon. If the winner's `best_coupon.requires_code` is true, give the code and mention `success_rate` when it is below about 0.85. If the next offer is within that coupon's saving, it may be the safer pick.\n\n- Check timing. `good_time_to_buy`: say so. `above_recent_average`: suggest waiting and quote `price_insight.reason`. `typical_price`: no strong signal either way.\n\n- Check delivery and returns when the user cares: `delivery_days_max` and `retailer.returns_window_days` can justify a slightly higher price.\n\n- Recommend one retailer, with the effective price, what it includes (shipping, coupon) and a `buy_url`.\n\n## What does a good answer sound like?\n\n\"Buy it at Newegg for $343.99, shipping included and in stock (2–3 day delivery). That's the lowest price across 7 retailers and matches its 90-day low. Costco is $4 cheaper but needs a membership.\"\n\n## Which mistakes should an agent avoid?\n\n- Quoting `price_usd` as \"the price\" when shipping or a coupon changes the ranking.\n\n- Recommending a Costco or Sam's Club offer to someone without a membership.\n\n- Promising a coupon with `requires_eligibility: true`, such as a student discount.\n\n- Presenting prices as current when `freshness_seconds` is large, or presenting `data_source: \"sandbox\"` prices as real.\n\n- Calling the API once per retailer. One search already covers all 12.\n\n## Is there a ready-made prompt?\n\nYes. The MCP server's `find_best_deal` prompt encodes this procedure; see [MCP server](https://cart-route.com/docs/mcp)."
}