ScavioScavio
Pricing
Tools
Sign InsGet Startedg
Blog
Macys9 min readNov 9, 2026

How to Get Macy's Sale Prices, Clearance and Store Stock With an API

Track Macy's sale prices, clearance and store pickup with Scavio's Macy's API: 9 endpoints, 1 credit each, with sale end dates and per-size pickup flags.

Scavio Team

Nov 9, 2026

Try the Macy's API free
scavio
Ecommerce / Price monitoring
Macys

To get Macy's sale prices programmatically, use Scavio's Macy's API. POST /api/v1/macys/deals returns a sale list by name, Today Only, Black Friday, Last Act, Clearance & Closeout, Limited-Time Special or all Sales & Offers, 60 items a page with price, regular price, percent off, price label, sale end date and deal label. /product re-prices up to 10 products per call, and /stores plus /store-availability tell you which stores near a ZIP can hand an item over and which sizes are in one store. All 9 endpoints cost 1 credit a call, $1 per 1,000 requests on the Growth plan.

Every response below was captured on November 9, 2026, with Macy's holiday sale lists live, eighteen days before Black Friday. Prices are US dollars from macys.com; the API covers the US site only. Listing calls (deals, search, category, brand) read large pages and took 4 to 45 seconds, so give your client a timeout of at least 90 seconds; product, stores, store availability, reviews and suggestions answered in under 6 seconds.

Step 1: Pull a sale list by name

Bash
curl -s https://api.scavio.dev/api/v1/macys/deals \
  -H "Authorization: Bearer $SCAVIO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"type": "today_only"}'

Today Only returned 11 items in 5.0 seconds, all with sale_ends 2026-11-09: six Bulova watches and five coffee machines. The list header and one item, as captured (the image URL trimmed):

JSON
{
  "type": "today_only",
  "label": "Today Only",
  "total": 11,
  "page": 1,
  "total_pages": 1,
  "per_page": 60,
  "sort": "featured",
  "count": 11,
  "sponsored_dropped": 0,
  "items": [
    {
      "id": 25839233,
      "title": "Vertuo Next Coffee and Espresso Maker",
      "brand": "Nespresso",
      "url": "https://www.macys.com/shop/product/nespresso-12-vertuo-next-coffee-espresso-maker?ID=25839233",
      "price": 99.95,
      "price_max": null,
      "regular_price": 229,
      "regular_price_max": null,
      "sale_price": 99.95,
      "percent_off": 56,
      "percent_off_max": null,
      "price_label": "Sale",
      "set_value": null,
      "on_sale": true,
      "sale_ends": "2026-11-09",
      "deal_label": "Today Only",
      "currency": "USD",
      "rating": 4,
      "review_count": 4377,
      "colors": [],
      "promotions": [
        {
          "id": "19959674",
          "title": "Bonus Offer With Purchase",
          "description": "$19.99 Magic Bullet 3 Piece Personal Blender available with a Macys.com purchase! One bonus per order while supplies last. Offer ends November 28th, 2026.",
          "type": "Tiered Pricing"
        }
      ],
      "is_sponsored": false
    }
  ]
}

Change type to black_friday, last_act, clearance, limited_time_special or sale for the other lists. The same day, Black Friday Deals held 118,542 items, 50 of the first 60 ending 2026-11-28, led by a Calvin Klein wool-blend overcoat at $99.99 against $425; all Sales & Offers held 187,530. Every list also returns facets[] with Macy's own counts per discount range, brand, price and pickup store, which is how we measured that only 27% of the Black Friday list was 50% off or more (chart in the comparison post).

Step 2: Find deep Macy's clearance you can pick up today

Bash
curl -s https://api.scavio.dev/api/v1/macys/deals \
  -H "Authorization: Bearer $SCAVIO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"type": "clearance", "pickup_store_id": 10, "filters": {"PRICE_DISCOUNT_RANGE": "70_PERCENT_ off & more"}, "sort": "price_low_to_high"}'

Unfiltered, Clearance & Closeout had 23,134 items that day, 4,685 of them at 70% off or more. Keeping only those that Herald Square (store 10) can hand over left 59, cheapest first, in 7.5 seconds. The applied filters and the first item, as captured (page fields, facets and most item fields trimmed):

JSON
{
  "type": "clearance",
  "label": "Clearance & Closeout",
  "total": 59,
  "sort": "price_low_to_high",
  "count": 59,
  "applied_filters": [
    { "name": "PRICE_DISCOUNT_RANGE", "values": ["70_PERCENT_ off & more"] },
    { "name": "UPC_BOPS_PURCHASABLE", "values": ["10"] }
  ],
  "items": [
    {
      "id": 24390783,
      "title": "Women's Soft Stretch Cheeky Hipster Panty DMSSCH",
      "brand": "Maidenform",
      "price": 3.53,
      "regular_price": 12,
      "percent_off": 71,
      "percent_off_max": null,
      "price_label": "Now",
      "on_sale": true,
      "sale_ends": null,
      "deal_label": "LAST ACT",
      "promotions": [
        {
          "id": "19952961",
          "title": null,
          "description": "Last Act: Extra savings do not apply. Last Act items are final sale, no returns allowed.",
          "type": "Promotional Pricing"
        }
      ]
    }
  ]
}

Three things to read correctly. Filters take the facet's value (70_PERCENT_ off & more), not its label ("70% off & more"); check applied_filters to see what Macy's applied. Items sold at a price range match on their deepest discount: rows on this list showed percent_off 50 with percent_off_max 74; check percent_off yourself if every price in the range has to be 70% off. And clearance items usually have no end date: 56 of the first 60 on the unfiltered list had sale_ends null, while deal_label tells Clearance from LAST ACT, the final-sale markdowns. For Last Act alone, use "type": "last_act": 7,908 items, 48% at 70% off or more.

Step 3: Price a watchlist 10 products at a time

Bash
curl -s https://api.scavio.dev/api/v1/macys/product \
  -H "Authorization: Bearer $SCAVIO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"product_ids": [12680074, 25839233, 10928457, 10020147, 4916836, 28229426, 13313167, 24043186, 16834030, 4632095]}'

All 10 came back in 5.8 seconds, "requested": 10, "count": 10, "not_found": [], for 1 credit. Four rows, with only the price fields kept:

JSON
[
  { "requested_id": 12680074, "id": 12680074, "title": "3-Pc. Mixing Bowl Set", "brand": "OXO", "price": 29.99, "regular_price": 50, "sale_price": 29.99, "percent_off": 40, "price_label": "Sale", "on_sale": true, "sale_ends": "2026-11-12", "deal_label": null, "price_valid_until": "2026-11-12", "rating": 4.8, "review_count": 83 },
  { "requested_id": 25839233, "id": 25839233, "title": "Vertuo Next Coffee and Espresso Maker", "brand": "Nespresso", "price": 99.95, "regular_price": 229, "sale_price": 99.95, "percent_off": 56, "price_label": "Sale", "on_sale": true, "sale_ends": "2026-11-09", "deal_label": "Today Only", "price_valid_until": "2026-11-09", "rating": 4, "review_count": 4377 },
  { "requested_id": 10928457, "id": 10928457, "title": "Vertuo Next Premium Coffee and Espresso Machine by Breville, Black with Aeroccino Milk Frother", "brand": "Nespresso", "price": 99.95, "regular_price": 239.95, "sale_price": 99.95, "percent_off": 58, "price_label": "Sale", "on_sale": true, "sale_ends": "2026-11-09", "deal_label": "Today Only", "price_valid_until": "2026-11-09", "rating": 4, "review_count": 4270 },
  { "requested_id": 10020147, "id": 10020147, "title": "Manual Espresso Machine ECP3420", "brand": "De'Longhi", "price": 99.95, "regular_price": 179.95, "sale_price": 99.95, "percent_off": 44, "price_label": "Sale", "on_sale": true, "sale_ends": "2026-11-09", "deal_label": "Today Only", "price_valid_until": "2026-11-09", "rating": 4.4, "review_count": 77 }
]

Store these rows on a schedule and you have a price tracker: a drop is a lower price than the last row, a new sale is on_sale turning true, and sale_ends tells you when the Today Only price stops. Match rows on requested_id: a collection member id answers with the collection product. The batch is Macy's summary view, so it has rating and review_count but no star histogram; an id Macy's does not know is listed in not_found and is not billed.

Step 4: Read one product in full

Bash
curl -s https://api.scavio.dev/api/v1/macys/product \
  -H "Authorization: Bearer $SCAVIO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"product_id": 12680074}'

Captured in 2.7 seconds (description, bullets, categories, images, colors, review summary, promotions and 10 more fields trimmed):

JSON
{
  "requested_id": 12680074,
  "id": 12680074,
  "title": "3-Pc. Mixing Bowl Set",
  "full_title": "OXO 3-Pc. Mixing Bowl Set",
  "brand": "OXO",
  "brand_page_id": 60448,
  "type": "GADGET",
  "url": "https://www.macys.com/shop/product/oxo-3-pc.-mixing-bowl-set?ID=12680074",
  "price": 29.99,
  "price_max": null,
  "regular_price": 50,
  "sale_price": 29.99,
  "percent_off": 40,
  "price_label": "Sale",
  "on_sale": true,
  "sale_ends": "2026-11-12",
  "deal_label": null,
  "currency": "USD",
  "price_valid_until": "2026-11-12",
  "rating": 4.8,
  "review_count": 83,
  "text_review_count": 76,
  "rating_distribution": { "1": 1, "2": 1, "3": 3, "4": 5, "5": 73 },
  "recommended_count": 34,
  "questions_count": 0,
  "available": true,
  "variant_count": 1,
  "variants": [
    { "upc": "719812013633", "variant_id": 46165515, "color": "White", "size": null, "available": true, "availability_message": "In Stock", "low_availability": false, "ship_days": 2, "ship_message": "Usually ships within 2 business days." }
  ]
}

The UPC lets you match the same item at other retailers, for example through the Google Shopping API. review_count (83) counts every rating; text_review_count (76) counts the written ones, which is what the reviews endpoint can return. On apparel, variants[] lists every size and color with its own UPC and online availability, and colors[].price prices each color.

Step 5: Check Macy's in-store stock near a ZIP

First, the stores:

Bash
curl -s https://api.scavio.dev/api/v1/macys/stores \
  -H "Authorization: Bearer $SCAVIO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"zip": "10001"}'

ZIP 10001 returned 15 stores in 0.8 seconds, nearest first, out to 16.63 miles. One store, as captured:

JSON
{
  "store_id": 1380,
  "name": "Jersey City",
  "address": { "line1": "20 Mall Dr E", "line2": "Newport Centre Mall", "city": "Jersey City", "state": "NJ", "zip": "07310", "country": "US" },
  "phone": "201-255-5200",
  "lat": 40.725931,
  "lng": -74.037475,
  "distance_miles": 2.77,
  "hours": [
    { "date": "2026-11-09", "open": "10:00 AM", "close": "9:00 PM", "closed": false },
    { "date": "2026-11-10", "open": "10:00 AM", "close": "9:00 PM", "closed": false }
  ],
  "curbside_hours": [
    { "date": "2026-11-09", "open": "10:00 AM", "close": "8:00 PM", "closed": false },
    { "date": "2026-11-10", "open": "10:00 AM", "close": "8:00 PM", "closed": false }
  ],
  "pickup_cutoff": "4:00 PM",
  "features": []
}

Then ask which of them can hand a product over:

Bash
curl -s https://api.scavio.dev/api/v1/macys/store-availability \
  -H "Authorization: Bearer $SCAVIO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"product_id": 4916836, "zip": "10001"}'

For the Calvin Klein Prosper overcoat, the answer came back in 2.5 seconds with "count": 15, "available_count": 13. Each store comes in the stores shape plus two fields; the first three, trimmed to those:

JSON
[
  { "store_id": 10, "name": "Herald Square", "distance_miles": 0.54, "available": true, "available_items_count": 103 },
  { "store_id": 1380, "name": "Jersey City", "distance_miles": 2.77, "available": true, "available_items_count": 89 },
  { "store_id": 940, "name": "Queens Furniture and Mattress Gallery", "distance_miles": 6.63, "available": false, "available_items_count": 0 }
]

The two stores that said no were Macy's furniture and mattress galleries. available_items_count is Macy's own item count for the store, not a number of coats on the rack.

Step 6: See which sizes are in one store

Bash
curl -s https://api.scavio.dev/api/v1/macys/store-availability \
  -H "Authorization: Bearer $SCAVIO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"product_id": 4916836, "store_id": 10}'

At one store, the answer is per variant. Captured in 1.8 seconds (store address, hours and features trimmed, 100 of 102 variants trimmed):

JSON
{
  "product_id": 4916836,
  "title": "Men's Prosper Wool-Blend Slim Fit Overcoat",
  "brand": "Calvin Klein",
  "store": { "store_id": 10, "name": "Herald Square", "pickup_cutoff": "4:00 PM", "pickup_day": "TODAY", "pickup_options": ["In Store"] },
  "variant_count": 102,
  "pickup_available_count": 97,
  "in_store_available_count": 102,
  "variants": [
    { "upc": "622363944717", "variant_id": 36024775, "color": "Black", "size": "36S", "pickup_available": true, "in_store_available": true, "available_online": true },
    { "upc": "628735274451", "variant_id": 46679932, "color": "Charcoal", "size": "48R", "pickup_available": false, "in_store_available": true, "available_online": true }
  ]
}

All 102 sizes and colors were in the store, but 5 of them, all in sizes 46 and 48, could not be ordered for pickup. So in_store_available answers "is it on the floor" and pickup_available answers "can I order it and collect it by the 4:00 PM cut-off". Herald Square offered in-store pickup only, no curbside. There are no unit counts anywhere in the API: say "in the store", never "3 left".

Step 7: Search, browse a category or a brand

Bash
curl -s https://api.scavio.dev/api/v1/macys/category \
  -H "Authorization: Bearer $SCAVIO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"category_id": 31839, "special_offer": "black_friday_deal"}'

Gadgets & Utensils with the Black Friday filter returned 505 items in 10.0 seconds, among them a Viking 8-piece utensil set at $99.99 against $267, 63% off, ending 2026-11-28. A product's categories[] gives you category ids; its brand_page_id feeds /brand, where OXO Kitchen Gadgets (60448) returned 391 items sorted cheapest first, from a $4.99 coffee scoop, in 44.9 seconds. /search takes the same filters with a query: "oxo mixing bowls" returned 18 OXO items, 17 on sale at 40% to 42% off until 2026-11-12. Listing totals change with the sort, as they do on the site, so compare totals only between calls with the same sort and filters.

Step 8: Read the reviews

Bash
curl -s https://api.scavio.dev/api/v1/macys/reviews \
  -H "Authorization: Bearer $SCAVIO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"product_id": 4916836, "rating": 1, "limit": 5}'

Only the 1-star reviews of the overcoat: "total": 40, 8 pages, in 0.75 seconds. One review, as captured (slider ratings, badges and syndication source trimmed):

JSON
{
  "id": 298724354,
  "rating": 1,
  "title": "Wrong size sent by Macy’s",
  "text": "I ordered size 40S they sent 38R instead, it supposed to be my valentines day gift for my husband they just ruined everything for me , i start hating shopping from macys cause this was not the first time to send a wrong item or a wrong size , the coat seems nice though but never ever order from Macys again !",
  "date": "2026-02-16",
  "nickname": "Ab25",
  "location": null,
  "recommended": false,
  "helpful_yes": 0,
  "helpful_no": 0,
  "incentivized": false,
  "syndicated": false,
  "fit": "neutral",
  "photos": [],
  "brand_response": null
}

Sort by newest, highest_rated, lowest_rated or with_photos, keep one star rating with rating, or keep reviews mentioning a word with query. Up to 100 a page.

Step 9: Pull autocomplete

Bash
curl -s https://api.scavio.dev/api/v1/macys/suggestions \
  -H "Authorization: Bearer $SCAVIO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"query": "black fri"}'
JSON
{
  "query": "black fri",
  "count": 7,
  "suggestions": ["black friday's specials for women", "black friday's special", "black friday's special perfume for women", "black friday's specials for men", "black friday's specials for women boots", "black fringe boots", "black friday's specials occasion for women"]
}

Captured in 1.6 seconds. Feed a suggestion back into /search.

All nine endpoints

EndpointWhat it returnsCredits
/api/v1/macys/search60 products a page with price, regular price, percent off, price label, sale end date, deal label, rating and colors; brand, color, special-offer, price, pickup-store and facet filters1
/api/v1/macys/categoryOne category by id or URL, the same grid and filters1
/api/v1/macys/brandOne brand's Macy's page by id or URL, the same grid and filters1
/api/v1/macys/dealsA sale list by type: sale, clearance, today_only, last_act, limited_time_special, black_friday1
/api/v1/macys/productOne product with every variant's UPC, the price block, star histogram and fit; or up to 10 products per call1
/api/v1/macys/reviewsMacy's own reviews, 1-100 a page, sorted or filtered by star rating or a word1
/api/v1/macys/storesUp to 15 stores near a ZIP, a point or a city, with today's and tomorrow's hours and the pickup cut-off1
/api/v1/macys/store-availabilityPickup yes or no at stores near a location, or pickup and in-store flags per variant at one store1
/api/v1/macys/suggestionsThe search box's autocomplete, up to 7 suggestions1

What the API does not return: price history (start polling to build one), unit counts at stores, coupon or promo codes, Q&A text (only the counts), and ratings left without text. For a side-by-side of every Macy's data option, see the best Macy's price tracker APIs; to use the Step 3 rows as a price history, see did Macy's raise the price before the sale?.

Getting started

  1. Sign up at dashboard.scavio.dev/sign-up: 50 free credits, no card required, enough for 50 Macy's calls.
  2. Copy your API key from the dashboard.
  3. Send a POST to /api/v1/macys/deals with {"type": "today_only"} and your key in the Authorization header.

Try the Macy's API free in the playground first, or call it from Claude and other agents through the MCP server. It covers macys.com in the United States; Bloomingdale's and international prices are not covered.

Reference: Macy's API overview · deals · product · store availability · stores · search · category · brand · reviews · suggestions

Frequently asked questions

How do I find Macy's clearance items with an API?

Call Scavio's /api/v1/macys/deals with type clearance. On November 9, 2026, it returned Clearance & Closeout with 23,134 items, 60 a page, each with price, regular price, percent off, price label and deal label (Clearance or LAST ACT). Add Macy's discount filter, for example 70% off and more, and pickup_store_id to keep only what one store can hand over; at Herald Square that left 59 items.

How do I check if an item is in stock at a Macy's store?

Two calls. /api/v1/macys/stores with a ZIP returns up to 15 stores with a store_id each. /api/v1/macys/store-availability with the product id and the ZIP says which of those stores can do pickup; with one store_id instead, it returns every size and color with pickup_available and in_store_available. Neither gives a number of units.

What is the difference between Macy's clearance and Last Act?

Last Act is Macy's final-sale markdown list, and its items carry the note "Last Act items are final sale, no returns allowed." On November 9, 2026, Last Act had 7,908 items, 48% of them at 70% off or more, against 23,134 in Clearance & Closeout with 20% at 70% or more. Many clearance items carry the LAST ACT deal label too.

Does the API return Macy's coupon codes?

No. Prices come back as Macy's shows them, with the deal label and any promotion text Macy's prints, such as a bonus-with-purchase offer and its end date. There are no coupon or promo codes and no price history.

How much does Macy's data cost with Scavio?

Every Macy's endpoint costs 1 credit a call, $1 per 1,000 requests at the Growth rate of $1 per 1,000 credits, including a product call that prices 10 products at once. A product id Macy's does not know returns 404 and is not charged, and new accounts get 50 free credits with no card.

Macy's sale prices as JSON

  • Today Only, Black Friday, Last Act and clearance lists
  • Sale end date and deal label on every item
  • Pickup and in-store flags per size and color
Try the Macy's API free

50 free credits, no credit card

On this page

  1. Step 1: Pull a sale list by name
  2. Step 2: Find deep Macy's clearance you can pick up today
  3. Step 3: Price a watchlist 10 products at a time
  4. Step 4: Read one product in full

Related articles

View all
  • scavio
    Ecommerce / Price monitoring
    Dicks sporting goods
    How to Get Dick's Sporting Goods Clearance Prices, Per-Size Stock and Store Availability With an API
  • scavio
    Ecommerce / Price monitoring
    Jcpenney
    How to Get JCPenney Clearance Prices, Prices After Coupon and Store Stock With an API
ScavioScavio

One scraper API for every social, search, e-commerce and real estate platform. Built for AI agents.

Product

  • Features
  • Pricing
  • Dashboard
  • Affiliates

Developers

  • Documentation
  • API Reference
  • Quickstart
  • MCP Integration
  • Python SDK

Alternatives

  • Tavily Alternative
  • SerpAPI Alternative
  • Firecrawl Alternative
  • Exa Alternative
  • Serper Alternative
  • Tavily vs Scavio
  • SerpAPI vs Scavio
  • All alternatives
  • Compare Scavio vs alternatives

Search APIs

  • Google Search API
  • Amazon Product API
  • YouTube API
  • Reddit API
  • Walmart Product API
  • TikTok API
  • Instagram API

Tools

  • All Tools

Ask AI about Scavio

© 2026 Scavio. All rights reserved.

Featured on TAAFT
Terms of ServicePrivacy Policy