Macy's API: Search products
Searches Macy's products in the site's order with optional USD price bounds, sale-only results and sorting. Prices for products with a range use the lowest shown price.
Unofficial. Not affiliated with or endorsed by Macy's.
Inputs
Values from the run on Oct 31, 2026, shown under Output.
- Sort optional
sort Sort results, for example best_sellers.
price_low_to_high
One of
featured,best_sellers,top_rated,newest,price_low_to_high,price_high_to_low. Defaultfeatured.- Query, required
query What to find, such as women's winter coat.
boots
- Max Price optional
max_price Maximum price in USD, for example 250.
150
Number 0 or more. Default
1000000.- Min Price optional
min_price Minimum price in USD, for example 50.
100
Number 0 or more. Default
0.- Max Results optional
max_results Maximum products to return, for example 24.
6
Whole number from 1 to 96. Default
24.- On Sale Only optional
on_sale_only Show only products in Macy’s sale and discount selection, for example true.
true
True or false. Default
false.
Input as JSON
{ "sort": "price_low_to_high", "query": "boots", "max_price": 150, "min_price": 100, "max_results": 6, "on_sale_only": true}Output
{ "products": [ { "brand": "Tommy Hilfiger", "price": 100.56, "colours": [ "Black", "Dark Brown" ], "image_link": "https://slimages.macysassets.com/is/image/MCY/products/1/optimized/39046801_fpx.tif?qlt=80,0&resMode=sharp2&op_usm=1.75,0.3,2,0&fmt=jpeg&wid=342&hei=417&layer=1&bgcolor=100,100,100&opac=5&bgc=247,247,247" , "product_id": "28324244", "star_rating": null, "product_link": "https://www.macys.com/shop/product/tommy-hilfiger-womens-missia-knee-high-boots?ID=28324244&isDlp=true#PRICE,SPECIAL_OFFERS,SORTBY/100%257C150,Sales%20%26%20Discounts,PRICE_LOW_TO_HIGH" , "product_name": "NEW! Women's Missia Knee-High Boots", "review_count": null, "currency_code": "USD", "original_price": 169, "discount_percent": 40 }, { "brand": "Tommy Hilfiger", "price": 100.56, "colours": [ "Black", "Dark Red", "Dark Brown" ], "image_link": "https://slimages.macysassets.com/is/image/MCY/products/0/optimized/38119570_fpx.tif?qlt=80,0&resMode=sharp2&op_usm=1.75,0.3,2,0&fmt=jpeg&wid=342&hei=417&layer=1&bgcolor=100,100,100&opac=5&bgc=247,247,247" , "product_id": "27632742", "star_rating": 5, "product_link": "https://www.macys.com/shop/product/tommy-hilfiger-womens-jolay-tall-pointed-toe-dress-boots?ID=27632742&isDlp=true#PRICE,SPECIAL_OFFERS,SORTBY/100%257C150,Sales%20%26%20Discounts,PRICE_LOW_TO_HIGH" , "product_name": "Women's Jolay Pointed Toe Tall Dress Boots", "review_count": 1, "currency_code": "USD", "original_price": 169, "discount_percent": 40 }, { "brand": "Jessica Simpson", "price": 100.56, "colours": [ "Cherry Mahogany", "Indigo Dark Denin", "Black Nappa" ], "image_link": "https://slimages.macysassets.com/is/image/MCY/products/7/optimized/36932387_fpx.tif?qlt=80,0&resMode=sharp2&op_usm=1.75,0.3,2,0&fmt=jpeg&wid=342&hei=417&layer=1&bgcolor=100,100,100&opac=5&bgc=247,247,247" , "product_id": "25941179", "star_rating": null, "product_link": "https://www.macys.com/shop/product/jessica-simpson-womens-zuliena-cowboy-half-zip-boots?ID=25941179&isDlp=true#PRICE,SPECIAL_OFFERS,SORTBY/100%257C150,Sales%20%26%20Discounts,PRICE_LOW_TO_HIGH" , "product_name": "Women's Zuliena Tall Western Cowboy Boots", "review_count": null, "currency_code": "USD", "original_price": 169, "discount_percent": 40 } ]}Code
curl https://api.fous.com/v1/runs \ -H "Authorization: Bearer $FOUS_API_KEY" \ -H "Content-Type: application/json" \ -d '{"method":"macys.com/search_products","input":{"sort":"price_low_to_high","query":"boots","max_price":150,"min_price":100,"max_results":6,"on_sale_only":true}}' # Save as fous.py, then run: python3 fous.pyimport json, os, timefrom urllib.error import HTTPErrorfrom urllib.request import Request, urlopenAPI = "https://api.fous.com/v1/runs" KEY = os.environ["FOUS_API_KEY"]HEADERS = { "Authorization": f"Bearer {KEY}", "Content-Type": "application/json" ,}def call(url, body=None): data = json.dumps(body).encode() if body else None request = Request(url, data, HEADERS) try: with urlopen(request, timeout=120) as r: return r.status, json.load(r) except HTTPError as error: message = json.load(error)["error"]["message"] raise RuntimeError(message) from errorstatus, run = call(API, { "method": "macys.com/search_products" , "input": { "sort": "price_low_to_high", "query": "boots", "max_price": 150, "min_price": 100, "max_results": 6, "on_sale_only": True }})# 202: still going after 30 s. Ask again until it ends.while status == 202: time.sleep(2) status, run = call(f"{API}/{run['id']}")print(json.dumps(run["data"], indent=2))// Save as fous.mjs, then run: node fous.mjsconst api = "https://api.fous.com/v1/runs" ;const headers = { Authorization: `Bearer ${process.env.FOUS_API_KEY}`, "Content-Type": "application/json" ,};let response = await fetch(api, { method: "POST", headers, body: JSON.stringify({ "method": "macys.com/search_products" , "input": { "sort": "price_low_to_high", "query": "boots", "max_price": 150, "min_price": 100, "max_results": 6, "on_sale_only": true } }), signal: AbortSignal.timeout(120_000),});let run = await response.json();// 202: still going after 30 s. Ask again until it ends.while (response.status === 202) { await new Promise((done) => setTimeout(done, 2_000)); response = await fetch(`${api}/${run.id}`, { headers }); run = await response.json();}if (!response.ok) throw new Error(run.error.message);console.log(run.data);# Connect your agent to Fous once, over MCP (Streamable HTTP):# https://api.fous.com/mcp# Set FOUS_API_KEY first: create a key at https://app.fous.com/keys.# Claude Codeclaude mcp add \ --scope user \ --transport http fous https://api.fous.com/mcp \ --header "Authorization: Bearer ${FOUS_API_KEY:?Set FOUS_API_KEY to your Fous API key}"# Codexcodex mcp add fous \ --url https://api.fous.com/mcp \ --bearer-token-env-var FOUS_API_KEY# Cursor, VS Code, Windsurf, Cline and morenpx -y add-mcp https://api.fous.com/mcp -g -n fous \ --header "Authorization: Bearer ${FOUS_API_KEY:?Set FOUS_API_KEY to your Fous API key}"# Then ask your agent:# "Use Fous to run macys.com/search_products# with {"sort":"price_low_to_high","query":"boots","max_price":150,"min_price":100,"max_results":6,"on_sale_only":true}"Over HTTP, the answer’s data holds the output. A run still going after 30 seconds answers 202 with its id: ask GET /v1/runs/{id} until it ends.
Schema
Input schema
{ "type": "object", "required": [ "query" ], "properties": { "sort": { "enum": [ "featured", "best_sellers", "top_rated", "newest", "price_low_to_high", "price_high_to_low" ], "type": "string", "default": "featured", "description": "Sort results, for example best_sellers." }, "query": { "type": "string", "minLength": 1, "description": "What to find, such as women's winter coat." }, "max_price": { "type": "number", "default": 1000000, "minimum": 0, "description": "Maximum price in USD, for example 250." }, "min_price": { "type": "number", "default": 0, "minimum": 0, "description": "Minimum price in USD, for example 50." }, "max_results": { "type": "integer", "default": 24, "maximum": 96, "minimum": 1, "description": "Maximum products to return, for example 24." }, "on_sale_only": { "type": "boolean", "default": false, "description": "Show only products in Macy’s sale and discount selection, for example true." } }, "additionalProperties": false}Output schema
{ "type": "object", "required": [ "products" ], "properties": { "products": { "type": "array", "items": { "type": "object", "required": [ "product_name", "brand", "price", "currency_code", "original_price", "discount_percent", "star_rating", "review_count", "colours", "image_link", "product_link", "product_id" ], "properties": { "brand": { "type": [ "string", "null" ] }, "price": { "type": [ "number", "null" ], "description": "Current displayed USD price." }, "colours": { "type": "array", "items": { "type": "string" } }, "image_link": { "type": [ "string", "null" ] }, "product_id": { "type": "string", "x-fous-developer": true }, "star_rating": { "type": [ "number", "null" ] }, "product_link": { "type": "string" }, "product_name": { "type": "string" }, "review_count": { "type": [ "integer", "null" ] }, "currency_code": { "type": "string" }, "original_price": { "type": [ "number", "null" ], "description": "Original USD price when shown." }, "discount_percent": { "type": [ "number", "null" ] } }, "additionalProperties": false } } }, "additionalProperties": false}- Price
- 1 credit per completed run (1¢ with pay as you go); failed runs are free.
- Method
macys.com/search_products- Returns
- product name, brand, price, original price, discount, rating, reviews, colours, image, link, product ID
Use it from your agent
Give your agent this line. It reads SKILL.md, gets a Fous API key and connects the Fous MCP server. Its run then takes the method macys.com/search_products with the inputs above.
Ask your agent
- Find men's leather dress shoes under $150 on Macy's, sorted by top rated
- Show me the 10 best-selling women's down puffer jackets currently on sale
- I need a stand mixer between $200 and $400 — list options with ratings and review counts, cheapest first
- What's new in girls' party dresses at Macy's? Give me up to 30 results
- Looking for discounted queen-size cotton sheet sets, max $80, highest price first so I can see the premium ones
See more
Search Nordstrom products by words, price, sale status and sort order. Prices are the lowest listed price. Available sizes may be empty when a product page is unavailable.
nordstrom.com/search_productsSearches Kohl's products in site order and returns prices, offers, ratings and links for each result.
kohls.com/search_productsSearches AliExpress listings by product words, shipping destination, price range and sort order. Unpriced promotional cards are omitted; free shipping is marked only when the listing explicitly says so.
aliexpress.com/search_productsSearches Walmart products by keywords with optional sort and price range, returning prices, ratings, sellers and availability in Walmart's order. Uses Walmart's default location (no ZIP-based pricing).
walmart.com/search_productsSearches H&M clothing and home products by keyword, with country-specific prices and an optional sale-only filter.
hm.com/search_productsSearches Sephora US beauty products in Sephora's order, with brand and USD price filters and shopper sort options. Loves counts are null when a product page cannot be loaded.
sephora.com/search_productsSearches Ulta Beauty products by keyword, brand, USD price range and sort order, and returns each product with its starting prices.
ulta.com/search_productsSearches Best Buy US products with an optional price range, sort order and page. Prices and availability come from public listings and may vary by location.
bestbuy.com/search_products