Macy's Scraper avatar

Macy's Scraper

Pricing

from $4.50 / 1,000 product scrapeds

Go to Apify Store
Macy's Scraper

Macy's Scraper

Scrape Macy's product catalog and Macy's Inc. news in one actor. Extract prices, variants, SKUs/UPCs, color & size options, images, ratings and reviews from search, category, trending, and product URLs. Powered by Macy's APIs no browser, Akamai-proof, fast, clean normalized JSON.

Pricing

from $4.50 / 1,000 product scrapeds

Rating

0.0

(0)

Developer

Richard Feng

Richard Feng

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

Categories

Share

Macy's Product & News Scraper

Extract full Macy's catalog data — products, prices, variants, SKUs/UPCs, images, ratings, and reviews — plus Macy's Inc. newsroom articles, all as clean, normalized JSON. Search by keyword, scrape a category, pull trending products, or paste any macys.com product URL. No browser, no HTML parsing, no bot-challenge headaches.

What does Macy's Scraper do?

Macy's Scraper pulls structured product and editorial data straight from Macy's own backend APIs and returns it in a single, consistent schema:

  • 🔎 Product search — any keyword ("dresses", "nike men shoes", "kitchen") → paginated product results.
  • 🗂️ Category / listing pages — paste a macys.com/shop/... category URL or supply a category ID.
  • 🔥 Trending & featured — bestseller / trending / curated landing pages.
  • 🧾 Product detail — full descriptions, every color & size, per-SKU UPC barcodes, pricing tiers, image galleries, star ratings & review counts.
  • 📰 Macy's Inc. news — press releases and newsroom articles from macysinc.com (title, author, date, body, images).

Every record is normalized to the same top-level shape (source / title / brand / price / options / variants / medias / stats), so downstream code doesn't care whether an item came from search, a category, or a product page.

Why use Macy's Scraper?

  • Beats Akamai without a browser. www.macys.com sits behind Akamai Bot Manager — plain HTTP clients are blocked outright and even fingerprinted headless browsers stall at the JS challenge. This actor talks to Macy's mobile app API and website JSON API instead, which run on separate infrastructure and answer anonymous read requests. Result: seconds per page, not minutes, and no browser farm to babysit.
  • Real SKUs, not guesses. Each purchasable variant carries its own UPC barcode, color, size, availability, and price — recovered from Macy's upcs relationship data, not scraped off a swatch widget.
  • Prices as integer cents. Sale, list, and previous prices are returned as integers (5999 = $59.99) so you never fight floating-point rounding — with the localized formatted strings alongside ("$59.99").
  • One SKU per product. All shades/sizes are grouped under a single dataset item with a variants[] array — not one row per variant.
  • Clean, public URLs only. Output canonicalUrl is always the real shopper-facing product page. Internal API endpoints, client keys, and query params never leak into your dataset.
  • Four surfaces, one actor. Search, category, trending, and news in a single run via the all mode.
  • Export anywhere. Download as JSON, CSV, Excel, or HTML, or pull straight from the dataset API.

How to use Macy's Scraper

  1. Open the Input tab.
  2. Pick a Scrape type (search, category, trending, news, or all).
  3. Fill the matching field:
    • Search products → set Search query (e.g. dresses).
    • Category products → paste category URLs into Start URLs, or add Category IDs.
    • Trending products → add Trending URLs.
    • News articles → add News URLs (defaults to the Macy's Inc. press-release feed).
  4. (Optional) Toggle Fetch product details off for faster, listing-level records.
  5. Choose a Proxy — Apify Residential, country US is recommended.
  6. Click Start, then download from the Dataset tab.

Tip: Set maxPages: 1 and maxResults: 10 for a quick smoke test before a full run.

Input

FieldTypeDescription
scrapeTypeenumsearch, category, trending, news, or all (combine every provided input). Default search.
querystringKeyword for product search, e.g. women shoes.
startUrlsarrayMacy's product/category URLs or Macy's Inc. news URLs. Augments generated inputs.
categoryIdsarrayMacy's category IDs (e.g. 5449). Category URLs are preferred when known.
trendingUrlsarrayTrending / bestseller / curated listing URLs.
newsUrlsarrayMacy's Inc. news listing or article URLs.
includeProductDetailsbooleanWhen true (default), each listing item is enriched with the full product-detail JSON (descriptions, variants, SKUs, galleries). Turn off for faster listing-level output.
maxPagesintegerMax pagination depth per listing/news source. Default 20.
maxResultsintegerCap on output records. 0 = no cap.
minResultsintegerFail the run if fewer records are produced (handy for live smoke tests).
maxRequestsPerCrawlintegerHard cap on total requests. 0 = Crawlee default.
maxConcurrencyintegerConcurrent requests. Default 3.
proxyobjectRequired. Apify Proxy or custom proxy URLs. Residential / country US recommended.

Supported URL types

TypeExample
Product detailhttps://www.macys.com/shop/product/...?ID=12345678
Category / listinghttps://www.macys.com/shop/womens-clothing/womens-dresses?id=5449
Featured / keyword landinghttps://www.macys.com/shop/featured/dresses
Trendinghttps://www.macys.com/shop/featured/trending-now
News listing (RSS)https://www.macysinc.com/rss/pressrelease.aspx
News articlehttps://www.macysinc.com/newsroom/news/...

Category URLs are preferred over bare category IDs — the URL carries the category path the API needs. Purely editorial featured pages (no product grid) may legitimately return no products.

Output

Each dataset item follows the schema in .actor/dataset_schema.json. Product example (abridged):

{
"type": "product",
"source": {
"id": "12345678",
"canonicalUrl": "https://www.macys.com/shop/product/calvin-klein-womens-sheath-dress?ID=12345678",
"retailer": "macys",
"language": "en-US",
"currency": "USD"
},
"scrapeContext": { "type": "search", "query": "dresses", "listUrl": "search:dresses" },
"title": "Women's Sleeveless Sheath Dress",
"brand": "Calvin Klein",
"description": "A polished sleeveless sheath in a stretch crepe...",
"categories": ["Women", "Dresses", "Work Dresses"],
"price": {
"sale": 5999,
"list": 9800,
"previous": 9800,
"currentFormatted": "$59.99",
"listFormatted": "$98.00",
"previousFormatted": "$98.00",
"stockStatus": "InStock"
},
"stats": {
"rating": 4.6,
"reviewCount": 9,
"ratingRange": 5,
"ratingPercentage": 92,
"recommendedCount": 5,
"notRecommendedCount": 1,
"ratingDistribution": [ { "rating": 5, "count": 8 }, { "rating": 1, "count": 1 } ],
"secondaryRatings": [
{ "id": "OverallSize", "label": "Runs Small/Runs Large", "value": 4, "valueLabel": "neutral", "minLabel": "Runs Small", "maxLabel": "Runs Large", "range": 7 }
],
"reviewSources": ["BV"]
},
"details": {
"features": ["Square neckline; Sheath silhouette", "Back zip closure", "Lined", "Imported"],
"sizeAndFit": ["Approx. 25-3/4\" long", "Tailored fit through the chest, waist, and hips; sits close to the body"],
"materialsAndCare": ["68% cotton, 29% polyester, 3% spandex; lining: 100% polyester", "Machine wash"],
"specialSizes": ["Regular"],
"bullets": ["Approx. 25-3/4\" long", "Tailored fit through the chest, waist, and hips", "68% cotton...", "Machine wash", "Imported"]
},
"options": [
{
"type": "Color",
"values": [
{ "id": "1", "name": "Black", "swatchIcon": { "type": "Image", "url": "https://slimages.macysassets.com/is/image/MCY/products/.../swatch.jpg" } }
]
},
{ "type": "Size", "values": [ { "id": "10", "name": "M" }, { "id": "12", "name": "L" } ] }
],
"variants": [
{
"id": "987654",
"sku": "192837465012",
"options": ["Black", "M"],
"price": { "stockStatus": "InStock" },
"extraInfo": { "upc": "192837465012" }
}
],
"medias": [
{ "type": "Image", "url": "https://slimages.macysassets.com/is/image/MCY/products/.../main.jpg", "index": 0 }
],
"extraInfo": { "sourceType": "xapi-json", "topLevelCategory": "Women" }
}

News example (abridged):

{
"type": "article",
"source": {
"id": "macys-inc-press-2026-001",
"canonicalUrl": "https://www.macysinc.com/newsroom/news/...",
"retailer": "macys",
"publishedUTC": 1751500800000
},
"scrapeContext": { "type": "news" },
"title": "Macy's, Inc. Reports Quarterly Results",
"author": "Macy's, Inc.",
"publishedAt": "2026-06-30",
"summary": "...",
"bodyText": "...",
"images": [ { "type": "Image", "url": "https://www.macysinc.com/.../hero.jpg" } ]
}

Download as JSON, CSV, XLSX, or HTML from the Dataset tab.

Data fields

FieldTypeNotes
typeenumproduct or article.
source.idstringMacy's product ID or article ID.
source.canonicalUrlstringPublic, shopper-facing page URL. Never an internal API endpoint.
source.retailerstringAlways macys.
source.currencystringUSD.
titlestringProduct name / article headline.
brandstringProduct brand.
descriptionstringFull product description.
categoriesarrayTaxonomy breadcrumb names.
price.sale / list / previousintegerInteger cents (5999 = $59.99).
price.*FormattedstringLocalized display strings ("$59.99").
price.stockStatusenumInStock / LowInStock / OutOfStock / Unknown.
stats.rating / reviewCountnumberAverage overall rating and total review count.
stats.ratingPercentage / recommendedCount / notRecommendedCountnumberRecommend %, and recommend / not-recommend counts.
stats.ratingDistribution[]arrayStar histogram: { rating, count } per star value.
stats.secondaryRatings[]arrayPDP slider ratings (e.g. Length, Coverage, Overall Size): id, label, value, minLabel/maxLabel, range.
details.features[]arrayFeatures / product details bullets.
details.sizeAndFit[]arraySize & Fit bullets (length, fit, silhouette).
details.materialsAndCare[]arrayMaterials & Care bullets (fabric composition, wash/care).
details.specialSizes[] / details.bullets[]arraySize types (e.g. Regular, Petite) and the full combined bullet list.
options[]arrayColor / Size option groups, each value with id, name, and (colors) a swatchIcon.
variants[]arrayOne purchasable SKU per entry: id, sku (UPC barcode), options (color/size), per-SKU price, extraInfo.upc.
medias[]arrayProduct image gallery (type, url, index).
author / publishedAt / summary / bodyText / imagesArticle-only fields.

How it works

Macy's storefront HTML (www.macys.com/shop/...) is guarded by Akamai Bot Manager. Rather than fight the JS challenge, this actor uses Macy's own APIs, which live on separate infrastructure:

  • Listings (search / category / trending) → the Macy's mobile app API (api.macys.com/xapi/mobileapp/browse/v1/search), authenticated with the app's embedded non-protected client key (no login). Responses are protobuf, decoded by a small dependency-free reader.
  • Product detail → the website JSON API (www.macys.com/xapi/digital/v1/product/{id}), which returns full descriptions, upcs (SKU/UPC), color/size maps, pricing tiers, and image galleries.
  • News → the Macy's Inc. newsroom (www.macysinc.com), which is not behind Akamai.

includeProductDetails (default true) controls whether listing results are enriched with the full product JSON, or emitted as lighter listing-level records built directly from the mobile response.

Tips & advanced options

  • Use residential US proxies. The product-detail endpoint is intermittently rate-limited; retryOnBlocked + Apify residential session rotation gets through cleanly. Datacenter IPs are more likely to see 403s.
  • Keep concurrency modest. maxConcurrency of 2–3 is the sweet spot. Higher values raise rate-limit rates without improving throughput.
  • Smoke test first. Set maxPages: 1, maxResults: 10, and minResults: 1 to confirm your input shape before a full crawl.
  • Prefer category URLs over 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/descriptions.

FAQ

Do I need a login, cookie, or API key? No. The actor uses Macy's own anonymous, read-only app/website APIs — no account, no token beyond your Apify proxy.

Are the prices in dollars or cents? Integer cents (5999 = $59.99) to avoid floating-point rounding. Each price also carries a localized formatted string.

Why don't I see the internal API URLs in my dataset? By design. Output canonicalUrl is always the public product/article page a shopper would visit; the internal fetch endpoints, client keys, and query params stay in logs, never in output.

Some trending/featured pages return no products — is that a bug? No. Purely editorial landing pages (e.g. trending-now) may have no underlying product grid. Use a real category URL/ID or a search query for guaranteed product results.

Can I scrape multiple surfaces in one run? Yes. Set scrapeType: "all" and provide any mix of query, startUrls, categoryIds, trendingUrls, and newsUrls.

Will re-running the same input re-scrape everything? Yes. Each run starts with a fresh request queue, so hitting Start again re-scrapes every source. Split into batches for very large crawls.

Legality / Terms of Service. Web scraping legality depends on jurisdiction and intended use. Review Macy's Terms of Service and consult counsel before running at scale. This actor is provided as-is for research, price monitoring, competitive analysis, and other lawful use cases, and collects only publicly available data.

Support

Questions, bugs, or feature requests (historical backfills, additional Macy's surfaces, custom fields) — open an issue on the Apify listing or contact the autofacts team.