Marks & Spencer Scraper - Products, Prices, Stock & Reviews

Collect marksandspencer.com (M&S) products and individual reviews from keyword searches, categories or product links. Get prices, all colour galleries, size-level inventory, composition, care, ratings, and review responses, with filters, sorting, resume and recurring updates.

Open actor on Apify ↗Need a custom scraper?Telegram @abotapi ↗

What Marks & Spencer Scraper can do

  • Search terms, category browsing and multiple pasted links.
  • Department, brand, colour, size, price and additional store filters.
  • Six product sorts and four review sorts.
  • Full descriptions and galleries across available colour variants.
  • Individual size SKUs with the inventory and prices published by the store.
  • Resume an earlier collection or collect recurring changes.

Choose what to collect

These inputs let you configure Marks & Spencer Scraper - Products, Prices, Stock & Reviews. Open the actor on Apify to enter your values and review the current options.

Supported input fields
InputWhat it controls
modestring · requiredChoose keyword search or pasted links. Only the inputs in the selected mode are used.

Choices: search, url

searchTermsarraySearch each term separately. Defaults to cashmere jumper. Ignored when category is filled or mode is url.
departmentstringOptional clothing department: Womens or Mens. Applies the store department filter in search mode only.
categorystringOptional category path, category link or SubCategory identifier. Browse this category instead of search terms. Search filters and sort still apply.
brandsarrayOptional exact brand names shown in the store filters, such as Autograph or JAEGER. Search mode only.
coloursarrayOptional colour filter names, such as Navy or Black. Search mode only.
sizesarrayOptional exact size filter labels, such as S, M or 10. Search mode only.
facetarrayOptional native filter pairs, one per line, such as Fit=Regular fit or Neck Type=Crew neck. Use the exact filter name and value shown for your search. Search mode only.
minPriceintegerOptional minimum price in GBP. Search mode only.
maxPriceintegerOptional maximum price in GBP. Search mode only.
minRatingintegerOptional minimum average product rating from 0 to 5. Search mode only.
sortBystringUse the store ordering in search mode. URL mode preserves the ordering specified in each link.

Choices: relevance, new, best_selling, price_low, price_high, rating

urlsarrayPaste one or more M&S product, category or search links. Defaults to an example product. Search-mode fields are ignored. Results begin at the page specified in each link.
outputTypestringProducts saves product rows. Reviews saves individual review rows. Products and reviews saves both, joined by productId. Saved products count toward Max items; saved reviews count toward Max reviews, a separate budget.

Choices: products, reviews, products_and_reviews

fetchDetailsbooleanAdd full descriptions, composition, care, all colour galleries and size-level inventory. Each successfully saved enriched product adds one detail-enrichment charge. Reviews are separate saved items. Suppressed, skipped and failed rows do not add this charge.
reviewSortstringOrdering for individual review rows in Reviews or Products and reviews output.

Choices: recent, ratingHigh, ratingLow, helpful

reviewRatingsarrayOptional exact star ratings to include, from 1 to 5. Empty includes all ratings. Applies to review output only.
maxReviewsPerProductintegerOptional limit on individual review rows per product. Blank or 0 collects all available reviews for that product until Max reviews is reached. No separate default per-product cap.
maxPagesintegerOptional limit on result or review pages per source. Blank or 0 means unlimited pages until the source ends or Max items is reached. No default page cap.
maxItemsintegerMaximum saved product rows across the run, including recurring update rows. Default 20. Set 0 for unlimited products. Reviews use the separate Max reviews budget and never count against this.
maxReviewsintegerMaximum saved review rows across the run, independent of Max items. Default 20. Set 0 for unlimited reviews (still bounded by Maximum reviews per product and Maximum pages per source, if set).
resumeFromRunIdstringOptional previous run or dataset ID. Skip previously saved product and review IDs. Combine datasets to continue a collection. Resumed runs do not emit expired rows. For recurring collection, use incrementalMode instead.
incrementalModebooleanRemember this exact collection scope between runs. Return NEW, UPDATED or REAPPEARED rows. Use stateKey to name the collection, emitUnchanged to include unchanged rows and emitExpired for missing rows.
stateKeystringOptional name for a recurring collection. The selected mode, terms or links, filters, detail setting and review options also identify its baseline. Different scopes never share a baseline.
emitUnchangedbooleanIncremental mode only. Also save unchanged products or reviews marked UNCHANGED. Each saved row is charged as an item; saved enriched products can add the detail charge.
emitExpiredbooleanIncremental mode only. Save EXPIRED rows after a complete collection. No expiration after a cap, resumed run or incomplete source. Expired rows count as saved items and do not add a detail charge.
mcpConnectorsarrayOptionally send results into the apps you already use, via Model Context Protocol (MCP) connectors. Authorize one under Apify, Settings, API & Integrations, then select it here. Notion gets a page per record; other connectors get a best-effort write or digest. Each connector receives a condensed summary per record, not the full record; the complete record always stays in the dataset. Leave empty to skip; this never changes the dataset output. Supported: Notion (https://mcp.notion.com/mcp), Linear (https://mcp.linear.app/sse), Airtable (https://mcp.airtable.com/mcp), Apify (https://mcp.apify.com).
notionParentPageUrlstringURL or id of the Notion page under which record pages are created. Required to enable the Notion export; ignored by other connectors.
maxNotifyListingsintegerMaximum saved items to send to each selected connector. Does not limit or change the dataset.

Fields in the output

The documented dataset includes the fields below. Availability can depend on the source page and selected mode.

recordTyperecordType (text)
idid (text)
titletitle (text)
urlurl (link)
productIdproductId (text)
productUrlproductUrl (link)
brandbrand (text)
priceprice (text)
currencycurrency (text)
averageRatingaverageRating (text)
reviewCountreviewCount (text)
ratingrating (text)
reviewTextreviewText (text)
userNicknameuserNickname (text)
submissionTimesubmissionTime (text)
imagesimages (text)
variantsvariants (text)
attributesattributes (text)
fetchedDetailsfetchedDetails (text)
changeTypechangeType (text)
changedFieldschangedFields (text)
firstSeenAtfirstSeenAt (text)
lastSeenAtlastSeenAt (text)
previousPricepreviousPrice (text)
colourscolours (text)
sizessizes (text)
compositioncomposition (text)
careInstructionscareInstructions (text)
promotionspromotions (text)
itemConditionitemCondition (text)
reviewIdreviewId (text)
isRecommendedisRecommended (text)
secondaryRatingssecondaryRatings (text)
positiveFeedbackCountpositiveFeedbackCount (text)
negativeFeedbackCountnegativeFeedbackCount (text)
clientResponsesclientResponses (text)
syndicationSourcesyndicationSource (text)
isSyndicatedisSyndicated (text)
badgesOrderbadgesOrder (text)
reviewStatsreviewStats (text)

Example output

An example from this actor’s documentation. Values are illustrative; this is not a fresh live result.

{
  "recordType": "product",
  "id": "P00000001",
  "productId": "P00000001",
  "title": "Sample cashmere jumper",
  "brand": "Sample Brand",
  "url": "https://www.marksandspencer.com/sample-product/p/clp00000001",
  "productUrl": "https://www.marksandspencer.com/sample-product/p/clp00000001",
  "description": "Sample full product description.",
  "price": 50,
  "previousPrice": 60,
  "currency": "GBP",
  "averageRating": 4.5,
  "reviewCount": 10,
  "images": [
    "https://assets.digitalcontent.marksandspencer.app/image/upload/00000001"
  ],
  "colours": [
    "Navy"
  ],
  "sizes": [
    "Small"
  ],
  "composition": "Sample fabric composition",
  "careInstructions": [
    "Sample care instruction"
  ],
  "variants": [
    {
      "id": "00000001",
      "skus": [
        {
          "id": "00000001001",
          "size": {
            "primarySize": "Small"
          },
          "inventory": {
            "quantity": 10,
            "quantityOnHand": 10,
            "quantityAdvised": 0
          }
        }
      ]
    }
  ],
  "attributes": {
    "sampleAttribute": "Sample value"
  },
  "fetchedDetails": true,
  "changeType": "NEW",
  "changedFields": [],
  "firstSeenAt": "2026-01-01T00:00:00.000Z",
  "lastSeenAt": "2026-01-01T00:00:00.000Z"
}

Before you run

Start with a small input and check the resulting records against your expected fields. Source content and actor options can change; the current Apify listing is the reference for availability and pricing.

Questions about this actor

How do I run Marks & Spencer Scraper - Products, Prices, Stock & Reviews?

Open the actor on Apify, review the input form and current pricing, then run it with your chosen input. Inspect the output before using it in a larger workflow.

Where can I request a different source or output?

Email abotapi@proton.me with the source URLs, fields you need and expected collection frequency. We can discuss a custom scraper or data pipeline.