Skip to main content
Glama

find_flips

Read-onlyIdempotent

Find profitable resale candidates at a retailer in one call. Returns product families (variants collapsed) from the refreshed catalog ranked by ROI after marketplace fees, priced against the better of the live Amazon buy box and the Walmart cross-match (each row names the winning marketplace), with dead / parked-at-MSRP / case-pack / mismatched listings removed and a BUY or THIN call on every row, plus a coverage summary. Candidates are not gated on an on-sale flag: any price-changed item that clears the ROI screen surfaces. Set window:"today" for the daily-deals report (items refreshed today). Set retailer_id to "all" to scan across stores. To scan a whole merchandising category (e.g. every shoe/apparel or electronics store, including feed-based stores the daily scan misses), set retailer_id:"all" and pass vertical (e.g. "shoes_apparel"). On plans with paging, page the full ranked list via meta.next_cursor; the Free plan returns the top 10 rows. For ONE store, set retailer_id to that store and exhaustive:true to page its ENTIRE ROI-screened catalog (not just the top deals), served from a daily full-catalog precompute so it never times out; walmart is excluded. These are paper calls: shortlist, then verify live with get_retailer_product / check_listing_eligibility before buying. Links may be affiliate links; responses include an affiliate_disclosure.

Input Schema

NameRequiredDescriptionDefault
brandNoBrand filter (exact match).
limitNoRows per page. Default 25. The normal rundown caps at 100/page; an exhaustive full-store scan allows up to 1000/page so a whole-store workbook is a handful of pages. Free tier is capped to the top 10.
cursorNoPagination cursor. Omit for the first page; then pass the prior response's meta.next_cursor verbatim to page through the full rundown (paid tiers only). On an exhaustive scan it is an opaque token - keep paging until meta.has_more is false.
windowNoTime window for candidates. "today" = items refreshed since 00:00 UTC today (the daily-deals report); "week" = last 7 days; "all" (default) = the full refreshed catalog. Candidates are not gated on an on-sale flag - any price-changed item that clears the ROI screen surfaces. Sales rank (BSR) is never a filter.
min_netNoMinimum net profit per unit in USD. Default 3.00.
min_roiNoMinimum ROI after fees, as a fraction (0.20 = 20%). Default 0.20.
categoryNoCategory filter (exact match).
verticalNoScan every store in a merchandising vertical (10-41 stores) instead of the daily-deals changes feed. Covers feed-based stores that the "all" changes scan misses. Inherently cross-retailer: when set, retailer_id is ignored and the scan always spans the vertical's member stores (set retailer_id:"all"). Use for "find shoe deals / apparel flips / electronics to resell" style asks.
max_priceNoMaximum retailer buy price (USD).
min_priceNoMinimum retailer buy price (USD).
exhaustiveNoStore-level FULL-CATALOG scan. With a specific retailer_id (not "all"), returns that store's COMPLETE ROI-screened resale catalog - every matched product, not a top sample - paged to completion via meta.next_cursor (paid tiers only). Served from a daily precompute (<=24h fresh), so it does not time out. Ignored for retailer_id:"all" / vertical, for window:"today", and for walmart (never full-scanned). Shortlist the winners, then verify live with get_retailer_product / check_listing_eligibility before buying.
retailer_idYesRetailer id (e.g. "kohls", "walmart"), or "all" to scan across stores and merge the results. For a whole merchandising category (e.g. every shoe/apparel store), set retailer_id:"all" and pass `vertical`.
include_thinNoInclude THIN rows (profitable but under min ROI). Default false.
referral_pctNoMarketplace referral fee as a fraction of resale price. Default 0.20.
fulfillment_feeNoFlat per-unit fulfilment fee in USD. Default 5.00.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • changedInput schema / properties / exhaustive / description
      Previous value: -"Store-level FULL-CATALOG scan. With a specific retailer_id (not \"all\"), returns that store's COMPLETE ROI-screened resale catalog - every matched product, not a top sample - paged to completion via meta.next_cursor (paid tiers only). Served from a daily precompute (<=24h fresh), so it does not time out. Ignored for retailer_id:\"all\" / vertical, for window:\"today\", and for walmart (never full-scanned). Shortlist the winners, then run the verify-leads skill to confirm them live before buying."New value: +"Store-level FULL-CATALOG scan. With a specific retailer_id (not \"all\"), returns that store's COMPLETE ROI-screened resale catalog - every matched product, not a top sample - paged to completion via meta.next_cursor (paid tiers only). Served from a daily precompute (<=24h fresh), so it does not time out. Ignored for retailer_id:\"all\" / vertical, for window:\"today\", and for walmart (never full-scanned). Shortlist the winners, then verify live with get_retailer_product / check_listing_eligibility before buying."
  2. Changed3 schema fields changed
    • changedInput schema / properties / cursor / description
      Previous value: -"Pagination cursor. Omit for the first page; then pass the prior response's meta.next_cursor to page through the full ranked rundown (paid tiers only)."New value: +"Pagination cursor. Omit for the first page; then pass the prior response's meta.next_cursor verbatim to page through the full rundown (paid tiers only). On an exhaustive scan it is an opaque token - keep paging until meta.has_more is false."
    • changedInput schema / properties / limit / description
      Previous value: -"Rows per page. Default 25, max 100. Free tier is capped to the top 10."New value: +"Rows per page. Default 25. The normal rundown caps at 100/page; an exhaustive full-store scan allows up to 1000/page so a whole-store workbook is a handful of pages. Free tier is capped to the top 10."
    • changedInput schema / properties / limit / maximum
      Previous value: -100New value: +1000
  3. Changed1 schema field changed
    • addedInput schema / properties / exhaustive
      Added value: +{
      +  "description": "Store-level FULL-CATALOG scan. With a specific retailer_id (not \"all\"), returns that store's COMPLETE ROI-screened resale catalog - every matched product, not a top sample - paged to completion via meta.next_cursor (paid tiers only). Served from a daily precompute (<=24h fresh), so it does not time out. Ignored for retailer_id:\"all\" / vertical, for window:\"today\", and for walmart (never full-scanned). Shortlist the winners, then run the verify-leads skill to confirm them live before buying.",
      +  "type": "boolean"
      +}
  4. Changed3 schema fields changed
    • addedInput schema / properties / cursor
      Added value: +{
      +  "description": "Pagination cursor. Omit for the first page; then pass the prior response's meta.next_cursor to page through the full ranked rundown (paid tiers only).",
      +  "type": "string"
      +}
    • changedInput schema / properties / limit / description
      Previous value: -"Number of ranked rows to return. Default 25."New value: +"Rows per page. Default 25, max 100. Free tier is capped to the top 10."
    • changedInput schema / properties / window / description
      Previous value: -"Time window for candidates. \"today\" = on-sale items updated since 00:00 UTC today (the daily-deals report); \"week\" = last 7 days; \"all\" (default) = full on-sale catalog. Sales rank (BSR) is never a filter."New value: +"Time window for candidates. \"today\" = items refreshed since 00:00 UTC today (the daily-deals report); \"week\" = last 7 days; \"all\" (default) = the full refreshed catalog. Candidates are not gated on an on-sale flag - any price-changed item that clears the ROI screen surfaces. Sales rank (BSR) is never a filter."
  5. Changed1 schema field changed
    • changedInput schema / properties / min_roi / description
      Previous value: -"Minimum ROI after fees, as a fraction (0.30 = 30%). Default 0.30."New value: +"Minimum ROI after fees, as a fraction (0.20 = 20%). Default 0.20."
  6. Changed2 schema fields changed
    • changedInput schema / properties / retailer_id / description
      Previous value: -"Retailer id (e.g. \"kohls\", \"walmart\"), or \"all\" to scan several large retailers and merge the results."New value: +"Retailer id (e.g. \"kohls\", \"walmart\"), or \"all\" to scan across stores and merge the results. For a whole merchandising category (e.g. every shoe/apparel store), set retailer_id:\"all\" and pass `vertical`."
    • addedInput schema / properties / vertical
      Added value: +{
      +  "description": "Scan every store in a merchandising vertical (10-41 stores) instead of the daily-deals changes feed. Covers feed-based stores that the \"all\" changes scan misses. Inherently cross-retailer: when set, retailer_id is ignored and the scan always spans the vertical's member stores (set retailer_id:\"all\"). Use for \"find shoe deals / apparel flips / electronics to resell\" style asks.",
      +  "enum": [
      +    "shoes_apparel",
      +    "general_merchandise",
      +    "home_garden",
      +    "electronics",
      +    "sports_outdoors",
      +    "health_beauty",
      +    "toys_games",
      +    "food_supplements",
      +    "crafts_hobbies",
      +    "bags_travel"
      +  ],
      +  "type": "string"
      +}
  7. Changed2 schema fields changed
    • removedInput schema / properties / max_sales_rank
      Removed value: -{
      -  "description": "Maximum Amazon sales rank (BSR). Default 250000.",
      -  "maximum": 9007199254740991,
      -  "minimum": 0,
      -  "type": "integer"
      -}
    • addedInput schema / properties / window
      Added value: +{
      +  "description": "Time window for candidates. \"today\" = on-sale items updated since 00:00 UTC today (the daily-deals report); \"week\" = last 7 days; \"all\" (default) = full on-sale catalog. Sales rank (BSR) is never a filter.",
      +  "enum": [
      +    "all",
      +    "today",
      +    "week"
      +  ],
      +  "type": "string"
      +}
  8. Added

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/idempotent/non-destructive/openWorld, yet the description adds substantial context beyond them: filtering rules (dead, parked-at-MSRP, case-pack, mismatched removed), the BUY/THIN verdict per row, fee-adjusted ROI against the better of Amazon buy box and Walmart cross-match, a coverage summary, Free-plan top-10 cap, <=24h precompute freshness so exhaustive scans never time out, Walmart exclusion, and affiliate-disclosure caveats.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

It is long, but front-loaded with the return contract first and then the mode-selection rules, and nearly every sentence carries operative information. There is mild duplication between the prose and the schema's exhaustive/window/vertical descriptions, which keeps it just short of a 5.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 15-parameter, no-output-schema tool, the description compensates fully: it explains the ranked return structure, the BUY/THIN verdict, coverage summary, pagination via meta.next_cursor, plan-tier limits, data freshness, and affiliate disclosures. An agent has everything needed to call and interpret it.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the per-field schema already documents each parameter and the baseline is 3. The description adds genuine cross-parameter interplay not captured per-property — that vertical overrides retailer_id, that exhaustive is ignored for retailer_id:"all"/vertical/window:"today"/walmart, and that cursor chains via meta.next_cursor.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('Find profitable resale candidates at a retailer') and immediately specifies the return shape: product families from the refreshed catalog ranked by ROI, with the winning marketplace named per row. It also implicitly separates itself from the verification siblings by framing results as paper calls to shortlist.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit routing for every major mode: window:"today" for the daily-deals report, retailer_id:"all" for cross-store, vertical for category-wide scans including feed-based stores, and exhaustive:true for a single store's full catalog. It also names the follow-up tools (get_retailer_product / check_listing_eligibility) and warns the results must be verified before buying.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources