The RealReal Scraper icon

The RealReal Scraper

Scrape luxury consignment listings from therealreal.com. Browse by designer, category or keyword and get designer, item class, condition grade, retail…

Start using this actor on Apify ↗Need a custom scraper?Contact us ↗

The RealReal Scraper at a glance

The RealReal Scraper is a ready-to-run Apify actor from abotapi for collecting ecommerce data. Its documented output includes item, change, designer, item class and condition, which you can export as JSON, CSV or Excel or read through the Apify API. It costs $2.00 per 1,000 results on the Apify Free plan and from $1.50 on paid plans, with smaller per-run or optional feature charges listed on Apify.

Runs on
Apify cloud: console, API, schedules and integrations
Data type
Ecommerce
Pricing
$2.00 per 1,000 results (Free plan), from $1.50 on paid plans
Output
Documented below · JSON, CSV, Excel
Inputs
27 options

Scrape luxury consignment listings from therealreal.com. Browse by designer, category or keyword and get designer, item class, condition grade, retail price versus current list price, measurements, materials and authentication notes. Built for price positioning per brand per category.

What The RealReal Scraper can do

  • Two real browse axes. Category paths and designer names are both applied by the marketplace's own server, so a per-designer pull returns that brand's current catalogue with no further filtering needed. There is no keyword box and no sort option is offered, because both are accepted by this site and then silently ignored on the pages this Actor reads, so this Actor skips a pasted keyword link with an explanation instead of quietly answering it with the wrong data.
  • A price-positioning table, with no extra charge. Every row carries retailPrice, listPrice, originalPrice, discountPct and vsRetailPct, so a pull for one designer in one category is ready for a spreadsheet without any joining.
  • Built for a consignment marketplace, not a retail catalogue. Each row is a single physical item, not a restocked SKU. Sold items are returned by default because a sold item's final price is a real comparable, and the condition grade is returned exactly as the marketplace assigns it, with the inspector's own free-text note kept in a separate field.
  • Cheap by default. Designer, condition grade, all three prices, colour, primary material and the image gallery all come from the result pages at no extra cost. Reading each item's own page for measurements, full copy, materials and the authentication note is optional and billed only for items that actually get it.
  • Incremental mode for recurring monitoring. Schedule the same search and get back only new and updated items by default (NEW, UPDATED with the changed fields named, UNCHANGED suppressed); turn on Emit expired items too, once a run scans the whole scope end to end, to also get EXPIRED items (which on a consignment marketplace usually means sold) and, on a later run, REAPPEARED ones.
  • Resume for one interrupted run. Paste a run or dataset id and the walk skips everything that run already collected, without re-paying for it, and still advances past a page made entirely of already-known items instead of mistaking that for the site repeating itself.

Choose what to collect

These inputs let you configure The RealReal Scraper - Luxury Prices, Brands & Listings. Open the actor on Apify to enter your values and review the current options.

Supported input fields
InputWhat it controls
modestring · requiredChoose 'search' to browse by category or designer, or 'url' to scrape pasted The RealReal links. Each mode reads only its own fields below.

Choices: search, url

categoriesarrayOnly used when mode = search, ignored in URL mode. Category paths as they appear in a The RealReal URL after /shop/, for example 'women/handbags', 'men/shoes', 'jewelry' or 'watches'. Each is walked as its own catalogue.
designersarrayOnly used when mode = search. Designer names, for example 'Chanel', 'Louis Vuitton' or 'Bottega Veneta'. Each designer is walked as its own catalogue, which is what makes a per-brand price-positioning pull a single run. Names are turned into the designer's own catalogue page, so ordinary spelling works.
designerCategorystringOptional, and only used alongside Designers. Narrows every designer catalogue to one category path, for example 'women/handbags' or 'men/shoes'. The marketplace does not serve a designer's whole catalogue on one page, so when this is empty each designer is walked under 'women'.
urlsarrayOnly used when mode = url, ignored in search mode. Item links under /products/, category links under /shop/ and designer links under /designers/ are all accepted. A designer link with no category is routed to that designer's catalogue, because the marketplace does not serve the bare designer landing page to this Actor. A keyword link is skipped and says why. Left untouched, url mode scrapes one example of each supported link shape (still capped by Max items).
designerstringOptional. Keep only items by this designer, for example 'Chanel', 'Hermes' or 'Louis Vuitton'. To pull several designers as separate catalogues, use the Designers list above instead.
conditionstringOptional. Keep only items at this condition grade. The marketplace grades every consigned item on its own five-step scale, from Pristine (original condition, may include tags and box) down to Fair (heavily worn).

Choices: , Pristine, Excellent, Very Good, Good, Fair

Show 20 more inputs
More input fields
InputWhat it controls
colorstringOptional. Keep only items in this colour, as the marketplace names it, for example 'Black', 'Brown', 'Blue' or 'Gold'.
minPriceintegerOptional. Only keep items whose current list price is at or above this amount, in US dollars. Also sent to the marketplace as a filter, so it narrows the walk itself rather than only the output. Useful for walking a large catalogue in price bands.
maxPriceintegerOptional. Only keep items whose current list price is at or below this amount, in US dollars. Also sent to the marketplace as a filter.
availableOnlybooleanOptional. Keep only items that can be bought right now. Sold items are returned by default, because on a consignment marketplace a sold item and its final price are the most useful data points for pricing analysis.
onSaleOnlybooleanOptional. Keep only items whose current list price is below their earlier consignment price.
vintageOnlybooleanOptional. Keep only items the marketplace flags as vintage.
editorsPickOnlybooleanOptional. Keep only items the marketplace's own editors have highlighted.
withTagsOnlybooleanOptional. Keep only items still carrying their original retail tags, which usually sit at the top of the condition scale.
fetchDetailsbooleanRead every item's own page for its measurements (height, width, strap drop and so on), full description and materials, item-class hierarchy, authentication note, return policy and carbon and water figures. Off by default because it costs one extra page per item. A pasted item link always reads the item page, because there is no result card behind it, so an item link is always billed one 'Item page detail' event whatever this toggle says.
maxItemsintegerMaximum number of items to return across the whole run. This is the run's cap. Use 0 for unlimited.
maxPagesintegerMaximum number of result pages to take per keyword, category, designer or link. Each page carries about 120 items. 0 = unlimited; the run then stops only at Max items, at the marketplace's own per-search depth limit, or when there are no more results.
resumeFromRunIdstringPaste a previous run ID or dataset ID to continue a large catalogue pull without returning or charging for items already collected there. Use this after an interrupted run. For recurring monitoring of the same search, use Incremental mode below instead.
incrementalModebooleanTurn this on for daily or recurring monitoring. The first run returns every matching item as NEW. Later runs normally return only NEW, UPDATED and REAPPEARED items, which makes it a cheap way to watch markdowns and new consignments. Turn on 'Emit unchanged' or 'Emit expired' only when you also want those rows returned (and billed). Change detection compares the whole item row, so a price or markdown, condition, availability, title, photos, badges or item-page copy change makes it UPDATED (changedFields names what moved). Never compared: scrapedAt, obsessionCount (other shoppers' favourites), detailFetched, and anything you list in the ignore field below. State is kept separately for each search and filter setup; use State key to name or deliberately share a monitoring campaign. To continue one specific interrupted run instead, use Resume from a previous run above.
stateKeystringOptional. Name this monitoring campaign to keep its state stable, or to deliberately share state across differently configured runs. Leave empty to derive a key automatically from the search and filter settings, so two different searches never mix state.
emitUnchangedbooleanOff by default. Turn on to also return items that have not changed since the last run, marked UNCHANGED. This returns, and bills, extra rows you already have, so leave it off unless you want a full snapshot every run.
emitExpiredbooleanOff by default. Turn on to also return items that were present in a previous run but are no longer listed, marked EXPIRED. On a consignment marketplace that usually means the item sold, which makes it the most useful signal here. Only produced once a run has fully scanned the tracked search, never when Max items capped it, when Resume was used, or when the run hit the marketplace's per-search depth limit. This returns, and bills, extra rows.
ignoreFieldsForChangesarrayOptional. Field names that must NOT make an item count as UPDATED, for example listPrice if you only care about availability. Use a dotted path for a nested field (sustainability.carbon). The fields stay in the output; they are only left out of the comparison and out of changedFields. Takes effect immediately without an UPDATED wave.
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 item; other connectors get a best-effort write or digest. Each connector receives a condensed summary per item, 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 item pages are created. Required to enable the Notion export; ignored by other connectors.
maxNotifyListingsintegerCap on items written to each connector per run. Does not affect the dataset.

Fields in the output

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

nameItem
changeTypeChange
designerDesigner
categoryItem class
conditionCondition
conditionNoteCondition note
listPriceList price
retailPriceRetail price
originalPriceWas price
vsRetailPct% below retail
discountPct% marked down
isOnSaleOn sale
Show 27 more fields
currencyCurrency
colorColour
primaryMaterialMaterial
availabilityAvailability
isSoldSold
measurementsMeasurements
itemClassClass path
obsessionCountFavourites
isEditorsPickEditors' pick
badgeBadge
skuSKU
itemIdItem ID
imagesImages
urlURL
detailFetchedDetail read
scrapedAtScraped at
descriptionDescription
materialsMaterials
authenticationNoteAuthentication note
sustainabilitySustainability
slugSlug
taxonsTaxons
returnPolicyReturn policy
disclaimersDisclaimers
changedFieldsChanged fields
firstSeenAtFirst seen
lastSeenAtLast seen

Example output

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

{
  "itemId": "00000000",
  "sku": "SAM000000",
  "variantId": null,
  "name": "Sample Leather Tote",
  "url": "https://www.therealreal.com/products/women/handbags/totes/sample-item-000000",
  "designer": "Example Maison",
  "designerId": "0",
  "itemClass": [
    "Women",
    "Handbags",
    "Totes"
  ],
  "category": "Totes",
  "condition": "Very Good",
  "conditionNote": "Light scuffing at the base corners, noted by our inspection team.",
  "color": "Brown",
  "gender": "Women",
  "primaryMaterial": "Leather",
  "attributes": {
    "Color": [
      "Brown"
    ],
    "Primary Material": [
      "Leather"
    ],
    "Gender": [
      "Women"
    ],
    "Condition": [
      "Light scuffing at the base corners, noted by our inspection team."
    ]
  },
  "retailPrice": 3800,
  "listPrice": 990,
  "originalPrice": 1600,
  "currency": "USD",
  "discountPct": 38.1,
  "vsRetailPct": 73.9,
  "isOnSale": true,
  "availability": "AVAILABLE",
  "isSold": false,
  "quantity": "1",
  "obsessionCount": 3,
  "isEditorsPick": false,
  "badge": null,
  "images": [
    "https://product-images.therealreal.com/SAM000000_1_enlarged.jpg"
  ],
  "imageCount": 1,
  "sourceUrl": "https://www.therealreal.com/shop/women/handbags",
  "detailFetched": true,
  "measurements": {
    "Height": "10\"",
    "Width": "14\"",
    "Handle Drop": "9\""
  },
  "materials": [
    "Sample Leather Tote",
    "Brown Leather",
    "Silver-Tone Hardware",
    "Double Top Handles",
    "Magnetic Closure"
  ],
  "description": "Sample Leather Tote. Brown Leather. Silver-Tone Hardware. Double Top Handles. Magnetic Closure.",
  "authenticationNote": "Authenticated by our in-house specialists prior to listing.",
  "sustainability": {
    "kilogramsOfCarbon": "2.4",
    "litersOfWater": "410.0"
  },
  "returnPolicy": "Final Sale",
  "disclaimers": [
    "Vintage items are sold as-is and may show signs of age consistent with the condition grade."
  ],
  "scrapedAt": "2026-09-11T00:00:00Z"
}

Ways to use this data

  • Brand and merchandising teams: track how a designer's pieces are pricing on the resale market, category by category, against what they retailed for.
  • Resellers and consignors: benchmark current listing prices for a brand or item class before pricing their own inventory.
  • Appraisers and insurers: pull comparable list and sold prices for a specific designer, item class or condition grade.
  • Market researchers: schedule the same search with incremental mode on to build a time series of markdowns and sell-through.

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

What data does The RealReal Scraper return?

The documented output for The RealReal Scraper includes item, change, designer, item class, condition, condition note, list price and retail price. Availability of each field depends on the source page and the selected mode.

How much does The RealReal Scraper cost?

It costs $2.00 per 1,000 results on the Apify Free plan and from $1.50 on paid plans, with smaller per-run or optional feature charges listed on Apify. The Apify listing shows the current rate for every plan.

Can I get only new, changed or sold items on a schedule?

Yes. Schedule the Actor from the Schedules tab and turn on Incremental changes for scheduled runs. Each run then returns only new and updated items by default, and unchanged items are not returned or billed unless you ask for them; turn on Emit expired items too, once a run scans the whole scope end to end, to also get expired items and, on a later run, reappeared ones.

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

If this run returned no items and at least one page was refused, it stops with an error so "nothing matched" is never confused with "the connection could not read here". Run it again in a few minutes, or check the Connection section. If some pages could not be read but items were still returned, the run still succeeds with a note on the run explaining the shortfall.

Why did my search stop at 2000 items even though the site reports far more matches?

This marketplace clamps every single search at 2000 items, however many it reports matching. Split a large category into one designer at a time, a single category, or price bands, and run each as its own search.

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

Ready to collect with The RealReal Scraper?

Run it on Apify with your own input and export the results as JSON, CSV or Excel.