department store

Macy's Scraper — Products, Prices, SKUs & News

Extract Macy's product data — prices, variants, SKU/UPC barcodes, images, ratings & reviews — plus Macy's Inc. news, from search, category, trending, and product URLs. No browser, Akamai-proof.

TypeScript Crawlee Cheerio US

Key Features

Four surfaces in one actor — product search, category, trending, and Macy's Inc. news

Beats Akamai Bot Manager without a browser by using Macy's own mobile & website JSON APIs

Per-SKU UPC barcodes with color, size, availability, and price for every purchasable variant

Prices as integer cents plus localized formatted strings — no floating-point rounding

Full review intelligence — star histogram, recommend counts, and secondary fit/size ratings

All shades and sizes grouped under one product record, not one row per variant

Clean canonical URLs only — internal API endpoints and client keys never leak into output

One normalized schema across search, category, trending, and product-detail results

Use Cases

  • Department-store price and promotion monitoring at SKU level
  • Competitive analysis — Macy's vs Nordstrom, Ulta, or brand DTC pricing
  • Catalog matching across retailers via per-variant UPC barcodes
  • Review and rating intelligence for brands sold at Macy's
  • Retail news monitoring — Macy's Inc. press releases and earnings announcements

Input Parameters

ParameterTypeRequiredDescription
scrapeTypestringYesSurface to scrape: search, category, trending, news, or all (default: search).
querystringNoKeyword for product search, e.g. women shoes.
startUrlsarrayNoMacy's product/category URLs or Macy's Inc. news URLs.
categoryIdsarrayNoMacy's category IDs (e.g. 5449). Category URLs are preferred when known.
trendingUrlsarrayNoTrending, bestseller, or curated listing URLs.
newsUrlsarrayNoMacy's Inc. news listing or article URLs.
includeProductDetailsbooleanNoEnrich listing items with full product detail — variants, SKUs, galleries (default: true).
maxPagesnumberNoMax pagination depth per listing/news source.
maxResultsnumberNoCap on output records. 0 = no cap.
proxyobjectYesApify Proxy or custom proxy URLs. Residential, country US recommended.

Output Example

 1{
 2  "type": "product",
 3  "source": {
 4    "id": "12345678",
 5    "canonicalUrl": "https://www.macys.com/shop/product/calvin-klein-womens-sheath-dress?ID=12345678",
 6    "retailer": "macys",
 7    "currency": "USD"
 8  },
 9  "title": "Women's Sleeveless Sheath Dress",
10  "brand": "Calvin Klein",
11  "categories": ["Women", "Dresses", "Work Dresses"],
12  "price": {
13    "sale": 5999,
14    "list": 9800,
15    "currentFormatted": "$59.99",
16    "stockStatus": "InStock"
17  },
18  "stats": { "rating": 4.6, "reviewCount": 9, "ratingPercentage": 92 },
19  "options": [
20    { "type": "Color", "values": [{ "id": "1", "name": "Black" }] },
21    { "type": "Size", "values": [{ "id": "10", "name": "M" }, { "id": "12", "name": "L" }] }
22  ],
23  "variants": [
24    {
25      "id": "987654",
26      "sku": "192837465012",
27      "options": ["Black", "M"],
28      "price": { "stockStatus": "InStock" },
29      "extraInfo": { "upc": "192837465012" }
30    }
31  ],
32  "medias": [{ "type": "Image", "url": "https://slimages.macysassets.com/is/image/MCY/products/.../main.jpg" }]
33}

Pricing

Pay-per-event — you’re billed only for items actually saved:

EventPriceWhat it covers
Product scraped$0.006One product with full detail — variants, SKUs/UPCs, prices, images, ratings
Article scraped$0.002One Macy’s Inc. news article — title, author, date, body, images

Volume discounts apply automatically on higher Apify plans (down to $0.0045 per product). A 1,000-product crawl is ~$6.00 at list price.

Tips

  • Use residential US proxies. The product-detail endpoint is intermittently rate-limited; residential session rotation gets through cleanly, while datacenter IPs see more 403s.
  • Keep concurrency modest. maxConcurrency of 2–3 is the sweet spot — higher values raise rate-limit hits without improving throughput.
  • Prefer category URLs over bare IDs. The URL carries the category path the API expects; a bare ID may resolve to a broader or empty result set.
  • Turn off includeProductDetails for a fast listing-level sweep (name, brand, listing price, image, rating) when you don’t need variants or descriptions.

Frequently Asked Questions

How does it get past Akamai without a browser?
It doesn't fight the JS challenge at all. Listings come from Macy's mobile app API and product details from the website's JSON API — both run on separate infrastructure that answers anonymous read requests. No login, no cookies, no API key.
Are prices in dollars or cents?
Integer cents (5999 = $59.99) to avoid floating-point rounding, with localized formatted strings ($59.99) alongside.
How are variants and UPCs handled?
All colors and sizes are grouped under a single product record with a variants[] array. Each variant carries its own UPC barcode, color, size, availability, and price — recovered from Macy's SKU relationship data, not scraped off a swatch widget.
Can I scrape products and news in one run?
Yes. Set scrapeType to all and provide any mix of query, startUrls, categoryIds, trendingUrls, and newsUrls.

Related Tools

Ready to Extract Data?

Start using Macy's Scraper — Products, Prices, SKUs & News on Apify, or hire me for a custom solution.