{
  "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\r\n\r\n\n## What is the decision procedure?\n\r\n\r\n\n- Pick the product. If several results match, confirm the exact model with the user before comparing prices. Offers under one product are the same model; check each offer's `listing_title` when the configuration matters.\r\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.\r\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.\r\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.\r\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.\r\n\n- Check delivery and returns when the user cares: `delivery_days_max` and `retailer.returns_window_days` can justify a slightly higher price.\r\n\n- Recommend one retailer, with the effective price, what it includes (shipping, coupon) and a `buy_url`.\r\n\n\r\n\r\n\n## What does a good answer sound like?\n\r\n\"Buy it at Best Buy for $343.99, shipping included, new and sold by Best Buy. That's the lowest price across the three stores checked an hour ago, and matches the lowest price recorded for it. An eBay seller lists it $6 lower but doesn't state shipping.\"\n\r\n\r\n\n## Which mistakes should an agent avoid?\n\r\n\r\n\n- Quoting `price_usd` as \"the price\" when shipping or a coupon changes the ranking.\r\n\n- Recommending a members-only offer to someone without that membership.\r\n\n- Promising a coupon with `requires_eligibility: true`, such as a student discount.\r\n\n- Presenting prices as current when `freshness_seconds` is large, or presenting `data_source: \"preview\"` prices as live retailer prices.\r\n\n- Calling the API once per retailer. One search already covers all 3.\r\n\n\r\n\r\n\n## Is there a ready-made prompt?\n\r\nYes. The MCP server's `find_best_deal` prompt encodes this procedure; see [MCP server](https://cart-route.com/docs/mcp)."
}