SSENSE Scraper - Products, Sale & Retail Prices avatar

SSENSE Scraper - Products, Sale & Retail Prices

Pricing

from $1.70 / 1,000 product records

Go to Apify Store
SSENSE Scraper - Products, Sale & Retail Prices

SSENSE Scraper - Products, Sale & Retail Prices

Scrape SSENSE by keyword, category, designer or URL. Every row carries the selling price and the regular price, the discount percent, stock state and images. Sale axes, designer pages and recurring change tracking are first-class.

Pricing

from $1.70 / 1,000 product records

Rating

0.0

(0)

Developer

Abot API

Abot API

Maintained by Community

Actor stats

1

Bookmarked

1

Total users

1

Monthly active users

4 days ago

Last modified

Categories

Share

SSENSE Scraper: Products, Sale & Retail Prices

SSENSE Scraper turns the SSENSE luxury storefront into a clean product feed. Search by keyword, browse the men's or women's catalogue with category, designer and sale facets, or paste store URLs to walk them directly. Every row carries the current selling price and the regular price together, with the discount percent computed, and adds the product description when you switch it on. Export to JSON, CSV or Excel, or pull the results straight into your app through the API.

Why This Scraper?

  • The full price pair on every row. Selling price and regular price come from the listing page itself, with the discount percent computed, so retail versus sale is on every record without a second request.
  • Four ways to scope a run. Search by keyword, browse a section, category or designer, watch the sale axis, or paste store URLs directly.
  • The sale axis is first class. Sale only, or a pasted sale URL, rides the store's own sale pages, including their category and designer combinations.
  • Product details on demand. Turn on Fetch product details for the description and the product type keyword; the price pair, stock state and images are on every row either way.
  • Built for recurring monitoring. Incremental mode classifies every product as NEW, UPDATED, UNCHANGED, REAPPEARED or EXPIRED against the last run, and a refused run fails loudly instead of returning an empty dataset.
  • Resume without paying twice. Continue one interrupted run by its run or dataset id, and the actor skips everything it already collected there.
  • Client-side price and sort controls. Narrow by price range or discounted rows only, then order the rows this run collected by price or discount.

Use Cases

  • Price and discount monitoring: track the sale section or specific designers on a schedule, and get only the price moves and new markdowns.
  • Resale and reseller pricing research: compare SSENSE retail and sale prices against resale platforms for the same designers and styles.
  • Assortment and catalogue analysis: map which designers, categories and genders make up the storefront, with stock state per product.
  • Fashion trend and content research: pull product names, designers and images to track what a luxury retailer stocks each season.
  • Deal and drop alerting: watch a designer or category for restocks and new markdowns with Incremental mode.

Data You Get

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

FieldExample
recordId / productId"10000001" (the store's own product id, stable across runs)
rowType"product"
title"Sample Name Wool Coat"
brand / brandId"Sample Designer" / "909"
sku"000000S00000"
gender"men" (also "women")
category"coats" (the product type keyword, with Fetch product details on)
categoryIds["3", "178"] (the store's own category ids)
price / regularPrice890 / 1290
onSale / discountPercenttrue / 31.0
currency"USD"
inStocktrue
imageUrl / urlproduct image and product page
descriptionproduct description (with Fetch product details on)
detailCarriedForwardtrue when a failed product page fetch reused the previous run's description and category
scrapedAt"2026-01-01T00:00:00Z"
changeType"NEW" (also "UPDATED", "UNCHANGED", "REAPPEARED", "EXPIRED", incremental mode only)
changedFields["price"] (incremental mode, on an UPDATED row)
firstSeenAt / lastSeenAtincremental mode change tracking timestamps

How to Use

  1. Pick a mode: search (by keyword, or by browsing a section, category, designer or the sale axis) or url (paste store links).
  2. Fill in the fields for that mode, and narrow with the price, discount and sort filters if you want.
  3. Set Max items (and, optionally, Max pages per source) to control run size and cost, then click Start.
  4. Download the dataset as JSON, CSV or Excel, or read it through the API.

Search by keyword:

{
"mode": "search",
"searchTerms": ["sneakers"],
"maxItems": 20
}

Browse the women's sale section, discounted rows only:

{
"mode": "search",
"gender": "women",
"saleOnly": true,
"onSaleOnly": true,
"maxItems": 50
}

Browse specific designers:

{
"mode": "search",
"designerSlugs": ["balenciaga", "rick-owens"],
"maxItems": 30
}

Paste a store URL:

{
"mode": "url",
"urls": ["https://www.ssense.com/en-us/men/sneakers"],
"fetchDetails": true
}

Run it from your code

Python:

from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("abotapi/ssense-product-scraper").call(run_input={"mode": "search", "searchTerms": ["sneakers"], "maxItems": 20})
for product in client.dataset(run["defaultDatasetId"]).iterate_items():
print(product["title"], product["price"], product["regularPrice"])

JavaScript:

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });
const run = await client.actor('abotapi/ssense-product-scraper').call({ mode: 'search', searchTerms: ['sneakers'], 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.

How maxItems and maxPages shape a run

maxItems is the single cap on a run: it stops after that many records, counted across every search term, designer and URL. The budget is shared out evenly between those sources, so a source that runs out of results early can leave the run below maxItems. maxPages is an optional extra safety bound on how many result pages the run may walk per source; leave it at 0 for no page limit, and the run then stops at maxItems, not here.

Notes on scope

  • A search term is never combined with a designer facet in one request; the store refuses that combination, so a designer scope walks the designer's full page instead.
  • A designer slug the store does not know would silently redirect to the full catalogue. The actor detects that redirect, refuses the page, and fails the run loudly rather than returning a wider scope than you asked for.
  • In URL mode, a pasted URL decides its own scope: the price, discount and sort filters still narrow what the run keeps, while the category, designers and sale only inputs are search mode only. Add ?page=3 to a browse URL to start from that page.
  • Prices are quoted in the currency of the country the connection exits from; every row states its own currency. The minimum and maximum price filters compare against that number as is, so pin a United States connection under Connection if you filter in US dollars.

Resume and recurring updates

  • Resume (resumeFromRunId) continues one interrupted run: paste its run or dataset id and the actor skips everything already collected there, so you don't pay twice.
  • Incremental mode (incrementalMode) is for scheduled runs over the same scope, for example a daily sale watch. Each record is classified NEW, UPDATED (with changedFields, and a price move counts as a change), UNCHANGED (suppressed and not billed unless emitUnchanged is on), REAPPEARED or EXPIRED (only after a run that scanned the whole scope, and only with emitExpired). stateKey names or shares the stored state; leave it empty and the actor derives one from the search terms, URLs and filters, so two different searches never mix state. With incremental mode off, output is exactly as before.
  • For recurring runs with Emit expired, paste browse URLs without ?page=, keep one State key per search, and keep the run on a single connection country: a run that starts mid catalogue can mark products that moved to earlier pages as expired, and a currency switch reads as a price change.

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 record, 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 record 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 search or browse) or url (paste store URLs).
searchTermsarray["sneakers"]Search mode: one or more terms to search the store for. Leave empty to browse a section, category or designer instead.
urlsarraysampleURL mode: store product, browse, category, designer or sale URLs to paste.
genderstringmenStorefront section. Applies in both modes.
categorystring(none)Search mode only: only browse this category slug.
designerSlugsarray(none)Search mode only: only browse these designer slugs.
saleOnlybooleanfalseSearch mode only: browse the sale section only.
minPriceUsdinteger(none)Keep only rows priced at or above this value, compared in the row's own currency (US dollars on a US connection). Applies in both modes.
maxPriceUsdinteger(none)Keep only rows priced at or below this value, compared in the row's own currency (US dollars on a US connection). Applies in both modes.
onSaleOnlybooleanfalseKeep only rows with a discount. Applies in both modes.
sortResultsBystringsite_orderOrder this run's rows by site_order, price_asc, price_desc, or discount_desc.
fetchDetailsbooleanfalseFetch each product's page for the description and the product type keyword. Charged once per record; the price pair, stock state and images are on every row either way.
maxItemsinteger20Stop after this many records across all sources (0 = unlimited).
maxPagesinteger0Safety bound on result pages walked per source (0 = no limit; maxItems still applies).
resumeFromRunIdstring(none)Continue one interrupted run by its run or dataset id.
incrementalModebooleanfalseReturn only new and changed records on scheduled runs over the same scope.
stateKeystring(none)Name or share an incremental-mode state; derived automatically from the scope when empty.
emitUnchangedbooleanfalseAlso return (and bill) unchanged records.
emitExpiredbooleanfalseAlso return (and bill) expired records, once a run has fully scanned the tracked scope.
proxyobjectApify ProxyConnection settings.
mcpConnectorsarray(none)Optional: send a summary of each record to apps you authorized under Integrations.
notionParentPageUrlstring(none)Notion connector only: page under which record pages are created.
maxNotifyListingsinteger50Cap on records written to each connector per run.

Output Example

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

{
"recordId": "10000001",
"rowType": "product",
"productId": "10000001",
"url": "https://www.example.com/en-us/men/product/sample-designer/sample-name-wool-coat/10000001",
"title": "Sample Name Wool Coat",
"brand": "Sample Designer",
"brandId": "909",
"sku": "000000S00000",
"gender": "men",
"category": "coats",
"categoryIds": ["3", "178"],
"price": 890,
"regularPrice": 1290,
"onSale": true,
"discountPercent": 31.0,
"currency": "USD",
"inStock": true,
"imageUrl": "https://example.com/images/sample-coat.jpg",
"description": "Sample flannel coat with a relaxed fit.",
"scrapedAt": "2026-01-01T00:00:00Z"
}

With Incremental mode on, rows also carry changeType, changedFields, firstSeenAt and lastSeenAt; a failed product page repair adds detailCarriedForward.

Plan Requirement

The default proxy setting works out of the box, and the actor rotates connections automatically when one is refused. For large or frequent runs, the residential proxy group gives more headroom; pick it under Connection.

FAQ

How much does it cost?

You pay per product record returned, plus the description surcharge only when Fetch product details is on. The Pricing tab shows the current rates. Use Max items to cap the cost of any run.

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

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

Yes. Schedule the actor from the Schedules tab and turn on Incremental mode. Each run then returns only new and updated records (a price move counts as an update), and unchanged ones are not billed unless you turn on Emit unchanged.

Why did URL mode return more or fewer rows than I expected?

A pasted product URL always returns exactly one record. A pasted browse, category, designer or sale URL is walked page by page like a search, and the price, discount and sort filters still narrow what the run keeps; the category, designers and sale only inputs do not apply, because the pasted URL already decides that scope.

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

If the store refuses every request, or a designer slug it does not know silently redirects to the full catalogue, the run stops with a clear message so "nothing matched" is never confused with "nothing could be read". Run it again in a few minutes, or check the Proxy configuration.

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 results into Notion, Linear or Airtable.

πŸ”— More scrapers you might like

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

🧩 Grailed Scraper
Scrape Grailed by keyword, category, designer, condition, size or URL. Extract prices and...
πŸ›’ The RealReal Scraper
Scrape luxury consignment listings from therealreal.com. Browse by designer, category or...
🧩 Miravia Spain Scraper
Scrape Miravia Spain by keyword, seller store or URL. Every row carries the selling price...
🧩 ASOS Scraper
Scrape ASOS by keyword, category or URL. Every row carries the selling price and the...
πŸ›’ Zalando Scraper
Scrape Zalando products: name, brand, current and original price, discount, sizes...
πŸ‘— 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.