Mango Scraper - Prices, Rebajas, Variants & Composition avatar

Mango Scraper - Prices, Rebajas, Variants & Composition

Pricing

from $1.00 / 1,000 product results

Go to Apify Store
Mango Scraper - Prices, Rebajas, Variants & Composition

Mango Scraper - Prices, Rebajas, Variants & Composition

Scrape Mango (shop.mango.com) fashion products: current price plus strike-through Rebajas (sale) discount, full colour/size variant matrix, section and category, and (with full detail) composition, care, materials, origin, fit and per-size availability. Search by keyword or Rebajas, or paste links.

Pricing

from $1.00 / 1,000 product results

Rating

0.0

(0)

Developer

Abot API

Abot API

Maintained by Community

Actor stats

1

Bookmarked

20

Total users

11

Monthly active users

6 days ago

Last modified

Share

Mango Scraper: Prices, Rebajas Discounts, Variant Matrix & Composition

Mango Scraper turns shop.mango.com into structured product data. Search by keyword, browse Mango's own Rebajas (sale) feed, or paste product and listing links directly, and the actor continues pagination automatically. Every record carries the current price, the strike-through original price with a discount amount and Mango's own discount percentage when a product is marked down, and the full colour/size variant matrix. Turn on full detail for composition, care instructions, materials, country of origin, fit measurements and per-size availability. Export the results as JSON, CSV or Excel, or read them straight through the API.

Why This Scraper?

  • Was-price and discount, straight from Mango's own pricing service. When a product is marked down, both the current and original prices are captured, plus the discount percentage and Mango's own promotion label.
  • Rebajas, first class. A specialsOnly toggle browses Mango's own, real, queryable Rebajas (sale) catalog for the chosen section, with genuine server-side pagination, not a guessed category filter. Mango Outlet is a separate site and out of scope here.
  • Full colour/size matrix. Every colourway and size Mango sells for a product, each colour with its own price, discount and image gallery. Turn on full detail and each size also carries real-time availability (in stock, last units, or delayed).
  • Composition, care, materials, origin and fit. With full detail on, every product also returns its fabric composition, wash-care instructions, a material breakdown by percentage, country of origin, and garment fit measurements.
  • Two ways in. Keyword search or Rebajas browse, or paste any product or category link and the actor continues pagination forward automatically from wherever the link points.
  • Built for recurring monitoring. Incremental mode returns only new and changed products on repeated runs against the same search, and a rejected scan fails loudly instead of quietly returning an empty dataset.
  • Optional export to your apps. Send results into Notion, Linear, Airtable, or any Apify MCP connector alongside the dataset.

Use Cases

  • Price monitoring and repricing: track current price, was-price and discount percentage across a catalog or a competitor's Rebajas feed.
  • Sale and markdown tracking: watch Mango's own Rebajas feed for new markdowns, or monitor a specific search for pieces that go on sale.
  • Merchandising and content teams: pull product names, categories, colours and imagery to power a storefront, lookbook, or newsletter.
  • Size and stock monitoring: use full detail mode to track per-size availability (in stock, last units, delayed) for a product line.
  • Catalog and assortment research: build a dataset of category, composition, materials and origin across a section for market or sustainability research.

Data You Get

Sample shape: values are illustrative placeholders, not from a live product.

FieldExample
productId"37021368"
name"Sample Linen Trousers"
brand"Mango" (single-brand shop; always this value)
section"Women" (also "Men")
category / families"Trousers" / [{"id": "26", "label": "Trousers", "labelEn": "Trousers"}]
collection / model"OI2026" / "SACO"
url"https://shop.mango.com/es/es/p/mujer/pantalones/sample-linen-trousers/37021368"
price / currency19.99 / "EUR"
originalPrice / discountAmount / discountPercent29.99 / 10.00 / 33.3 (only when on sale)
isOnSpecial / promoLabeltrue / "PROMOCION HASTA REBAJAS"
defaultColorId / image"99" / a media.mango.com image URL
colors[]one entry per colourway: id, label, rgb, its own price/originalPrice/discountPercent, images[], sizes[]
colors[].sizes[]id, label, plusSize; plus available, isDelayed, lastUnits when full detail is on
compositions["Composition: 55% linen, 45% viscose"]
care["Machine wash max 30Β°C, short spin"]
materials[{"name": "LINEN", "percent": 55}, {"name": "VISCOSE FSC", "percent": 45}]
originCountry / dyeingAndPrinting / measures"China" / when Mango lists it / ["Inseam 76 cm", "Side length 104 cm"]
lastUnits / isSellable / isUniqueSizefalse / true / false (product-level, with full detail)
reviews / rating / ratingCount{"averageRating": null, "totalReviewCount": 0, "items": []} / null / 0
site / isSale / scrapedAt"mango" / true (same as isOnSpecial) / UTC timestamp
color / sizes[] / galleryImages[]headline colour label / size labels / image URLs of the headline colour
details{"productId", "colorId", "discountPercent", "gender", "subcategory"}
changeType / changedFields / firstSeenAt / lastSeenAtIncremental mode only, e.g. "UPDATED" / ["price"] / timestamps

Mango's product pages carry no customer reviews, so reviews is always returned as this empty structure rather than omitted or guessed, and its own search and listing routes expose no server-side sort parameter, so none is offered here either.

Output views

The dataset has four views (also linked from the run's Output tab):

  • overview: one row per product with price, discount, section, category, link, image and the extra fields above.
  • colors: productId, name and the full colors[] colour/size matrix.
  • detail: composition, care, materials, origin and fit measures (filled when full detail is on).
  • changes: changeType, changedFields, firstSeenAt, lastSeenAt and price for incremental runs.

How to Use

  1. Pick a mode: search (keyword and/or Rebajas browse) or url (paste product or listing links).
  2. Fill in the fields for that mode: market, section and searchTerm and/or specialsOnly for search, or urls for url mode. minPrice/maxPrice apply in either mode.
  3. Turn on Fetch full product detail if you need composition, care, materials, origin, fit measurements and per-size availability. Supported link shapes (url mode): a product page (/{market}/p/..., matched by its product id), a category listing (/{market}/c/...) and a keyword search page (/{market}/search/...?q=); the promotion/sale listing link (/c/.../promocion/..., which replaced the old Rebajas link) is a category listing and works the same; home and section hub pages (/h/) are not supported. Any other link is skipped with a warning. URL mode defaults: urls is pre-filled with six sample links (an ES category, the ES promotion/sale listing, an ES search page, a GB search page, an ES product and a GB product). If you pick url mode and leave it untouched, the run scrapes those six links instead of nothing, so check the list before you start. Category and search pages return the products rendered on that one page (about 100 for a category, more for a search); only Rebajas listings paginate with ?page=. A pasted product link is matched by its product id, never by text search.
  4. Set Max products total and Max pages per search to control run size and cost, then click Start.

Keyword search, default market and section (Women, Spain):

{
"mode": "search",
"searchTerm": "vestido",
"maxItems": 20
}

Browse the UK men's Rebajas feed:

{
"mode": "search",
"market": "gb/en",
"section": "MEN",
"specialsOnly": true,
"maxItems": 50,
"maxPages": 5
}

Full product detail (composition, care, per-size availability) for a pasted product link:

{
"mode": "url",
"urls": ["https://shop.mango.com/es/es/p/mujer/sample-linen-trousers/37021368"],
"fetchDetails": true
}

Daily monitoring of a search, only what changed:

{
"mode": "search",
"specialsOnly": true,
"section": "WOMEN",
"incrementalMode": true
}

Run it from your code

Python:

from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("abotapi/mango-com-scraper").call(run_input={"mode": "search", "searchTerm": "vestido", "maxItems": 20})
for product in client.dataset(run["defaultDatasetId"]).iterate_items():
print(product["name"], product["price"], product["currency"])

JavaScript:

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });
const run = await client.actor('abotapi/mango-com-scraper').call({ mode: 'search', searchTerm: 'vestido', maxItems: 20 });
const { items } = await client.dataset(run.defaultDatasetId).listItems();

Or connect it to Make, Zapier, n8n, Google Sheets or webhooks from the Integrations tab.

Resume and recurring updates

Two different things: Resume continues ONE specific interrupted run. Incremental mode is for running this same search again and again and getting only the changes.

  • Resume (resumeFromRunId) continues one interrupted run: paste its run or dataset id and the actor skips every product it already collected there, so you don't pay twice.
  • Incremental mode (incrementalMode) is for scheduled runs over the same mode/section/search/URL/detail scope. Each product is classified NEW, UPDATED (with changedFields), or suppressed as UNCHANGED (not billed unless emitUnchanged is on). Turning on emitExpired additionally marks a product EXPIRED once a run has fully scanned the tracked scope and no longer finds it; a maxItems/maxPages cap, Resume, or a rejected page all skip this step and keep the previous state as is. REAPPEARED is not a default outcome: it only appears for a product that was previously marked EXPIRED and is then found again on a later run, so it requires emitExpired to have been on for an earlier, complete scan. What is compared: every output field except the volatile ones -- price, original price, discount, promo, currency, name, category, colours, sizes and (with fetchDetails) per-size availability and composition drive UPDATED; the headline image, colors[].images, galleryImages and scrapedAt (links, order and timestamps churn between scrapes) and the derived convenience fields site, isSale, color, sizes, details, rating and ratingCount (they duplicate fields that are already compared, or are placeholders) are never compared, and ignoreFieldsForChanges lets you exclude more (top-level names or dotted paths such as colors.sizes.available; productId can't be ignored). Ignored fields stay in the output. Changing the list never causes a one-time wave of UPDATED rows, because saved copies are re-checked with the current list. stateKey names or shares the stored state; leave it empty and the actor derives one automatically from the search/URL/detail settings, so different searches never mix state.

Send results into your apps (MCP connectors)

Optionally pipe the scraped results into the apps you already use, via Model Context Protocol (MCP) connectors. This is an extra delivery step after the scrape: the Apify dataset is never changed.

What gets written to the connector: a condensed, human-readable summary of each product, not the full JSON. Each item becomes one entry with a title and its key fields flattened to plain text. The complete record always stays in the Apify dataset.

  1. Authorize a connector once under Apify, Settings, Integrations (Notion, Linear, Airtable, or Apify).
  2. Select it in the "Pipe results into your apps" input field. If the picker is empty, you haven't authorized a connector yet.
  3. For Notion, also set notionParentPageUrl to the page where item pages should be created.

The connection is mediated by Apify's MCP proxy, so this actor never sees your third-party credentials. Leave the field empty to skip.

Input Parameters

ParameterTypeDefaultDescription
modestringsearchsearch (keyword and/or Rebajas) or url (paste product or listing links).
marketstringes/esMango's own market path prefix, e.g. es/es, gb/en (search mode only; a pasted URL carries its own market). Search mode's own nav path is verified for es, en, fr, de, it and pt language markets; other languages may fail loudly rather than silently return nothing.
sectionstringWOMENWOMEN or MEN (search mode only). Other Mango sections can still be reached by pasting URLs in url mode.
searchTermstringnone (prefill: vestido)Keyword for search mode. Mango's own search results page never paginates, so a keyword search always returns a single page.
specialsOnlybooleanfalseBrowse Mango's Rebajas (sale) catalog for the chosen section instead of a keyword search (search mode only); a keyword is ignored when this is on.
urlsarraysix sample links: two product pages (/p/, ES and GB), two category listings (/c/, one the promotion/sale listing), two keyword search pages (/search/...?q=, ES and GB)Product, category listing or keyword-search-page links to scrape (url mode only). Other link shapes are skipped with a warning. A Rebajas listing link works while Mango's sale is on; off-season it returns 404 and the run warns. Pagination continues forward automatically from any ?page= already in the URL.
minPricenumbernoneOnly return products priced at or above this amount, in both search mode and url mode.
maxPricenumbernoneOnly return products priced at or below this amount, in both search mode and url mode.
fetchDetailsbooleanfalseAdds composition, care, materials, origin, fit measures, and per-size availability. A pasted product URL in url mode always fetches this detail regardless of this toggle.
maxPagesinteger0 (unlimited)Stop after this many result pages per Rebajas/URL entry; keyword search is always a single page.
maxItemsinteger20Hard cap on total products returned across every search/URL entry; 0 = unlimited.
resumeFromRunIdstringnoneContinue one interrupted run; products it already collected are skipped, so this run returns only new products.
ignoreFieldsForChangesstring[][]Incremental mode only: fields that must not count as a change (top-level or dotted paths like colors.sizes.available); kept in output. Always ignored: image, colors.images, galleryImages, scrapedAt and the other derived fields listed under Data You Get. productId can't be ignored.
incrementalModebooleanfalseTurn on for recurring monitoring of the same search/section/URL scope; classifies each product as NEW, UPDATED, UNCHANGED, EXPIRED or REAPPEARED.
stateKeystringnone (auto-derived)Name a monitoring campaign to keep its state stable, or deliberately share state across differently-configured runs.
emitUnchangedbooleanfalseAlso return, and bill, products that have not changed since the last run.
emitExpiredbooleanfalseAlso return, and bill, products no longer found, after a complete scan of the tracked scope.
proxyobjectApify ProxyConnection settings. The actor requests a residential connection matched to the requested market's country, regardless of the Apify Proxy group selected; supplying your own proxy URLs replaces it. Datacenter connections are not supported.
mcpConnectorsarraynoneOptional MCP connectors to export a summary of results into (Notion, Linear, Airtable, Apify).
notionParentPageUrlstringnoneNotion connector only: page under which item pages are created.
maxNotifyListingsinteger50Cap on items exported to each connector per run. Does not affect the dataset.

Output Example

Sample shape: values are illustrative placeholders, not from a live product.

{
"productId": "37021368",
"name": "Sample Linen Trousers",
"brand": "Mango",
"section": "Women",
"collection": "OI2026",
"model": "SACO",
"category": "Trousers",
"families": [{ "id": "26", "label": "Trousers", "labelEn": "Trousers" }],
"url": "https://shop.mango.com/es/es/p/mujer/pantalones/sample-linen-trousers/37021368",
"price": 19.99,
"currency": "EUR",
"originalPrice": 29.99,
"discountAmount": 10.0,
"discountPercent": 33.3,
"isOnSpecial": true,
"promoLabel": "PROMOCION HASTA REBAJAS",
"image": "https://media.mango.com/is/image/punto/37021368-99-002",
"defaultColorId": "99",
"colors": [
{
"id": "99",
"label": "Black",
"rgb": "36,36,36",
"sizes": [
{ "id": "36", "label": "36", "plusSize": false, "available": true, "isDelayed": false, "lastUnits": false }
],
"images": [{ "code": "002", "url": "https://media.mango.com/is/image/punto/37021368-99-002", "alt": "Sample Linen Trousers" }],
"price": 19.99,
"currency": "EUR",
"originalPrice": 29.99,
"discountAmount": 10.0,
"discountPercent": 33.3,
"isOnSpecial": true,
"promoLabel": "PROMOCION HASTA REBAJAS"
}
],
"compositions": ["Composition: 55% linen, 45% viscose"],
"care": ["Machine wash max 30Β°C, short spin", "Do not bleach"],
"materials": [{ "name": "LINEN", "percent": 55 }, { "name": "VISCOSE FSC", "percent": 45 }],
"originCountry": "China",
"measures": ["Inseam 76 cm", "Side length 104 cm"],
"lastUnits": false,
"isSellable": true,
"isUniqueSize": false,
"reviews": { "averageRating": null, "totalReviewCount": 0, "items": [] }
}

Plan Requirement

Mango's site shows a security checkpoint page (HTTP 429) to automated visitors. Datacenter connections do not work on it, and a residential connection alone is also refused: the actor has to complete a session step on every run before the pages load. It does this automatically; you do not configure it.

  • Paid Apify plan with residential proxy access (recommended): the actor connects through a residential connection matched to your market's country, completes the session step and reads the pages. Residential traffic is billed by Apify at a higher rate than datacenter, so factor this into large or frequent runs.
  • Free plan (no residential proxies): the actor logs The selected connection is unavailable to this run. Apify free plans do not include residential proxies. and continues on a backup connection, noting Served over the backup connection (the default connection was unavailable). Some pages may still be unavailable.
  • Your own proxy URLs: supported through the proxy input; they replace the built-in connection (no backup connection is used).

If nothing could be read, the run fails with one of these messages instead of finishing as an empty success:

  • The proxy connection was refused for this account, so no page could be read. Your Apify plan does not include proxy access; a paid plan is required (check your own proxy credentials if you supplied URLs).
  • No results: residential proxies are unavailable on this run (Apify free plans do not include them), and the backup connection could not load the requested Mango pages.
  • Could not load any results page (the requests failed), so nothing was collected. This is a connection problem, not an empty search. Please try again later.

Pricing is pay per event, quoted from the live Pricing tab (FREE tier / GOLD tier): Product result $0.002 / $0.001 per product returned; Full detail enrichment $0.0008 / $0.0005 per returned product enriched with full detail (BRONZE, SILVER and PLATINUM/DIAMOND tiers are on the Pricing tab); Actor Start $0.08 / $0.05 per run.

FAQ

How much does it cost?

You pay per product returned, plus a per-item surcharge when full detail is fetched: with Fetch full product detail on, and always for a pasted product URL, which fetches its detail page regardless of that setting. The surcharge is billed per record, at the moment each one is delivered to the dataset (one detail-enrichment unit each, so an interrupted run is only billed for what was delivered), and applies only to records that are actually returned and successfully enriched, never to a failed detail fetch or a suppressed UNCHANGED record. The Pricing tab shows the current rates. Use Max products total to cap the cost of any run; when that cap is reached the run stops and nothing more is billed. If the run reaches the maximum total charge you set for it, it stops at that point: rows the platform did not store (including EXPIRED rows in Incremental mode) are neither returned nor billed, and are kept for the next run.

This actor collects only publicly available product data. You are responsible for how you use it: follow Mango's terms and the laws that apply to you, and get legal advice if you plan commercial redistribution. Product names and prices are generally facts, but photos and brand names may be subject to third-party rights.

Can I get only new or changed products on a schedule?

Yes. Schedule the actor from the Schedules tab and turn on Incremental mode. Each later run against the same search/section/URL set returns only NEW and UPDATED products by default; unchanged ones are suppressed and not billed unless you turn on Emit unchanged products.

Does a returning product ever come back marked REAPPEARED?

Only if it was previously marked EXPIRED. That itself requires Emit expired products to have been on for an earlier run that scanned the tracked scope completely, with no Max products or Max pages cap, no Resume, and no rejected page. Without that history, a product that disappears and later comes back is classified UPDATED if anything about it changed, or suppressed UNCHANGED if it did not; its state record is never deleted, so it is never NEW again.

What's the difference between Resume and Incremental mode?

Resume (resumeFromRunId) continues ONE specific interrupted run: paste its run or dataset id and already-collected products are skipped. Incremental mode is for running the same search again and again, daily or weekly, and getting only what changed; it remembers its own state between runs, keyed by the search/section/URL/detail settings or by your own State key.

Why did my run fail instead of returning an empty dataset?

If the run returns nothing and at least one page or product request (a search page, a Rebajas catalog page, a pasted listing page, or a product detail fetch) was rejected by the site (for example, the Rebajas catalog can go offline outside its own sale season), the run stops with a clear error message instead of finishing successfully with 0 items, so "nothing matched" is never confused with "nothing could be read". A price filter that legitimately narrows a successfully loaded catalog to zero rows, with no rejected requests, still finishes as a normal, empty run.

Can I use it with AI agents or MCP?

Yes. Call it from any Apify integration or MCP client, and use the connector field to push a summary of results into Notion, Linear or Airtable.

πŸ”— Want more fashion data?

Pair this actor with these related scrapers from the same team:

πŸ›’ Zara Scraper
Scrape Zara (zara.com) products: current price plus strike-through Rebajas (sale)...
πŸ‘— 24S Scraper
Scrape 24S luxury fashion by category, filters, or URL. Extract brand, name, price...
πŸ‘— OTTO.de Scraper
Scrape OTTO.de products by search or URL. Extract prices, discounts, variants...
πŸ‘— Next.co.uk Scraper
Scrape Next.co.uk: keyword search, category and product-listing walks, full product...
πŸ‘— YesStyle Scraper
Scrape YesStyle products by keyword or URL. Extract prices, discounts, ratings, stock...
πŸ‘— GOAT Scraper
Scrape GOAT (goat.com), the sneaker and streetwear resale marketplace. Search or paste...

πŸ‘‰ Browse all abotapi scrapers

πŸ’¬ Support

  • 🐞 Found a bug or a missing field? Open a ticket on the Issues tab. We usually reply within hours.
  • πŸ› οΈ Need another site, extra fields or a private build? Email contact@abotapi.com.
  • ⭐ Enjoying it? A quick review on the actor page helps other users find it.