TheRealReal Data | Luxury Resale & Thrift Comps avatar

TheRealReal Data | Luxury Resale & Thrift Comps

Pricing

from $1.50 / 1,000 results

Go to Apify Store
TheRealReal Data | Luxury Resale & Thrift Comps

TheRealReal Data | Luxury Resale & Thrift Comps

Find underpriced luxury fast. TheRealReal Real-Time Data gives you designer listing search, price and markdown history, condition grades, full product details, designer inventory and real sold comps — streamed live to your dataset with Slack webhooks. Free trial: 2 results.

Pricing

from $1.50 / 1,000 results

Rating

0.0

(0)

Developer

Emmanuel

Emmanuel

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Categories

Share

TheRealReal Real-Time Data

Live luxury resale market intelligence, authenticated designer comps, and vintage deal finder. Every row is one item on TheRealReal — what it is listed at today, what it retailed for, its condition grade, its cost in a markdown, and the full image gallery — streamed to your dataset as it is collected.

Free trial: runs on a free Apify plan export the first 2 records. Upgrade to a paid Apify plan for unlimited exports. Details in Pricing, free tier & limits.

Who it is for

  • Resale & consignment sellers sourcing designer inventory and setting prices against real marketplace data.
  • Vintage and thrift flippers cross-listing to Poshmark, eBay, Depop, Mercari, Grailed and Vinted who need trustworthy luxury comps.
  • Consignment owners and buying teams sizing how much of a designer is on the market and at what price.
  • Fashion researchers, brand pricing teams and appraisers building sell-through and condition-mix tables.
  • AI agents and pricing bots that need a clean, machine-readable feed of authenticated luxury listings.

What you can collect

CheckboxWhat it returnsfeatureType
Listing Search (on by default)Live keyword search across authenticated designer inventory, with prices, markdowns, estimated retail, condition grade, size, category and gallery.listing_search
Listing DetailsThe complete record for specific listings you name (URL, product id or SKU), including the description, condition report and measurements.listing_details
Designer InventoryA designer's full live inventory, so you can track stock depth and price positioning brand by brand.closet_listings
Designer ProfileDesigner-level supply table: how many items are live today, and how many have sold in the archive.seller_profile
Sold CompsCompleted sales for comps, margins and sell-through — scoped by keyword, by designer, or both.sold_history
Scrape By URLAny TheRealReal URL — search results, a category or shop page, a designer page, or one listing. The page type is detected for you.scrape_by_url

Every row also carries scrapedAt, a stable item_id, the sku, and the item URL, so nothing is ambiguous later.

Why it is fast and stays cheap

  • Streaming output. Each record is written the moment it is collected, so a 10-record demo run feels instant and a 10,000-record run stays light on memory (512 MB default).
  • Fast search cards first. Search results land with the fields you actually filter on — price, markdown, estimated retail, condition, designer, size, category, gallery. Enrichment is opt-in and never delays the card.
  • Enrichment never duplicates. Turn on Enrich with full listing details and the same listing_search row gains description, condition report, measurements and the complete gallery with detailsFetched: true. One discovered listing is always exactly one row.

Quick start

  1. Click Start — Listing Search is enabled and prefilled with high-intent luxury demo queries (gucci marmont, chanel flap bag, hermes scarf), 10 records each.
  2. Get results in seconds, streamed straight into your dataset.
  3. Add keywords, a designer filter or a category filter, raise Records per keyword, and enable the other features you need.

Recommended for real work: keep Residential proxy on (default) and the proxy country on United States — TheRealReal is a US storefront.

Use cases that pay for themselves

  • Find undervalued inventory — pull new arrivals per designer, filter on condition and markdown, and compare listed price against estimated retail.
  • Price a piece before you buy or consign — sold comps per designer or per keyword give you a real sale price, not a guess.
  • Build sell-through and demand tables — Designer Profile stacks live inventory against sold-archive depth, per designer.
  • Watch a designer's price moves — rerun Designer Inventory or Listing Search on a schedule and diff current_price per item_id.
  • Feed deal alerts — send every row to Slack, Discord or your own pricing bot the second it is collected.
  • Keep multi-platform pricing in sync — the output field names match the rest of the thrift/resale actor family, so TheRealReal rows union cleanly with Poshmark, Depop, Grailed, Mercari and ShopGoodwill datasets.

Input reference

FieldTypeDefaultNotes
Listing Search
enableListingSearchbooleantrueLive keyword search.
searchKeywordsstring[]["gucci marmont", "chanel flap bag", "hermes scarf"]Each keyword contributes its own rows.
searchMaxResultsnumber10Records per keyword (1–200). Multiplied by keyword count, bounded by the run limit.
searchFetchFullDetailsbooleanfalseMerges full product details into the same search row (detailsFetched: true).
searchSortselectrelevancerelevance, newest, price_low_to_high, price_high_to_low.
searchBrandstring–Designer filter by name or slug (Gucci, gucci, louis-vuitton). Optional; narrows the pool.
searchCategorystring–Category filter as the marketplace names it (women/handbags, men/shoes, jewelry/rings, watches/bracelet). Optional; narrows the pool.
Listing Details
enableListingDetailsbooleanfalseFull records for specific listings.
listingIdsstring[][]Product ids (54592052) or SKUs (GUC2147434).
listingUrlsstring[][]Full product URLs.
Designer Inventory
enableClosetListingsbooleanfalseLive inventory per designer.
sellerUsernamesstring[][]Designer names or slugs (gucci, chanel, hermes). Shared with Designer Profile and Sold Comps.
sellerMaxListingsnumber30Live listings per designer (1–200).
Designer Profile
enableSellerProfilebooleanfalseLive inventory depth + sold-archive depth per designer. Uses sellerUsernames.
Sold Comps
enableSoldHistorybooleanfalseCompleted sales for comps. Scope with searchKeywords, sellerUsernames, or both.
soldMaxItemsnumber30Sold items per scope (1–500).
Scrape By URL
enableScrapeByUrlbooleanfalseDirect URL processing with page-type detection.
scrapeUrlsstring[][]Any TheRealReal URL. Other sites are rejected. Uses Records per keyword as the per-URL cap.
Run limits & delivery
maxItemsnumber0Total rows for the whole run. 0 = no run limit.
webhookUrlstring–Optional extra real-time push of every record.
webhookFormatselectjsonjson or slack.
Connection
proxyConfigurationobjectResidential, USResidential proxy delivers the most reliable results at scale.

Practical search examples

GoalInput
Price a designer's handbags by keywordsearchKeywords: ["chanel classic flap"], searchCategory: "women/handbags"
Only one designer's inventory, cheapest firstsearchBrand: "hermes", searchSort: "price_low_to_high"
Fresh arrivals to hunt underpriced piecessearchSort: "newest", searchMaxResults: 50
One specific listing, fully detailedenableListingDetails, listingIds: ["GUC2147434"]
Comps for a model, not a sellerenableSoldHistory, searchKeywords: ["gucci marmont"]

Output reference

One row per item (or per designer for seller_profile). Full datasets are also available as pre-built views in the run's Output tab: Overview, Listing Search results, Listing Details, Designer Inventory, Designer Profiles, Sold Comps, Scrape By URL.

Core fields on listing-like rows

FieldMeaning
featureTypeWhich feature produced the row.
scrapedAt / scraped_atISO-8601 timestamp.
url / item_urlSource page and direct item page.
item_idStable product id — use it to diff prices between runs.
skuConsignor item number, unique per physical item.
title, descriptionName and (on details/enriched rows) the full condition-and-features description.
main_image_url, additional_image_urlsFull gallery, enlarged variants.
status, is_soldavailable, sold, reserved, not_for_sale.
current_priceListed today, after any markdown.
original_pricePrice before the current markdown (null when not discounted).
msrp_priceThe marketplace's estimated original retail price.
currencye.g. USD.
discount_percentage, price_drop_amountMarkdown size, as % and as an amount.
brand, brand_idDesigner name and id.
sizeDisplayed size(s), e.g. 9.5 / IT 39.5.
conditionThe marketplace's own condition grade, e.g. Excellent.
category, department, subcategoryCategory path, e.g. handbags / women / clutches.
color, colors, style_tagsColor and secondary style/pattern descriptors.
item_specificsLabel → detail pairs, including the condition report.
seller_usernameDesigner slug on designer-scoped rows (closet_listings, sold_history), otherwise null.
detailsFetchedtrue when full product details were merged into this search row.

Per-feature notes

  • listing_search — the fast card plus, when enrichment is on, the full detail set on the same row.
  • listing_details — includes brand_id, colors, item_specifics, quantity_available.
  • closet_listings — seller_username carries the designer slug; position is the rank within that designer's inventory.
  • seller_profile — total_listings is live inventory depth, total_sales is sold-archive depth.
  • sold_history — current_price is the price the item sold at; seller_username is set only for designer-scoped comps.
  • scrape_by_url — pageType is listing, search, designer or category.

Fields the marketplace does not publish — engagement counts, listing and sale timestamps, shipping quotes, seller bios — are returned as null rather than guessed.

| A whole category, no keyword | enableScrapeByUrl, scrapeUrls: ["https://www.therealreal.com/shop/women/handbags"] |

Webhook alerts

Every record is always saved to the dataset. A webhook is an additional push, fired per record as it is collected, and it never blocks collection: a failing webhook cannot stop or slow a run.

Slack (webhookFormat: "slack") — post to an incoming webhook URL and every new row renders as a ready-to-read message:

:shopping_bags: *GG Marmont Small*
*Type:* listing_search • *Price:* USD 1395 • *Brand:* Gucci • *Condition:* Excellent • *Seller:* n/a
<https://www.therealreal.com/products/women/handbags/…|Open on TheRealReal>

JSON (webhookFormat: "json") — the complete row is posted as-is, so Zapier, Make, n8n, Airtable or your own pricing service can act on it directly.

Use it from AI agents (MCP)

Connect the Apify MCP server and ask in plain language:

  • "What is the average sold price for a Gucci Marmont bag on TheRealReal?"
  • "List Chanel handbags in Excellent condition and rank them by discount."
  • "How many Gucci items are live today versus sold in the archive?"
  • "Watch the Hermès scarf market and alert me on Slack when a new listing appears under $400."

The agent calls this Actor, reads the dataset, and answers from real listing rows — then keeps the same shape for Poshmark, Depop, Grailed or eBay when you add them.

Pricing, free tier & limits

  • Free Apify plan: the first 2 records are exported, then the run stops cleanly with a note in the log. No errors, no partial rows.
  • Paid plans: full output, bounded only by your inputs and by any spending limit you set on the Actor.
  • Pay-per-event: each exported record is charged as one result event. The run stops gracefully when your spending limit is reached, and the run summary is still written.
  • Run limit (maxItems): cap total rows for the whole run — handy for a bounded price sweep.
  • Cost control: records per keyword × keywords is the row count. Search-only runs are the cheapest; enrichment adds a little time per listing.

FAQ

Do I need a residential proxy? Yes — keep the default Residential proxy on, country United States. Datacenter routing is more likely to be turned away, which shows up as missing rows rather than wrong data.

Why did I get fewer rows than I asked for? Usually because a designer or category filter narrowed the pool, or the designer genuinely has fewer items than your cap. The log reports the real available count per keyword before collecting, and the run summary shows what was saved.

Are prices and availability current? Every row is collected during the run. Availability reflects the moment of collection, so a piece can sell between your run and your purchase — rerun before you commit.

How fresh is the data if I schedule it? As fresh as your schedule: a run every 15 minutes is a live deal feed; a daily run is a price-tracking table.

Are timestamps available? The marketplace does not publish listing or sale timestamps, so those fields are null. Use scrapedAt for your own change tracking — diff item_id + current_price between runs to build price history.

Can I get sold prices for a specific model? Yes — Sold Comps accepts keywords, so "gucci marmont" returns completed sales for that model, not just that seller.

Will it be rate limited? Collection is deliberately paced, with retries that start a fresh connection when the marketplace pushes back, so long runs complete without you tuning anything. If you see gaps, raise the run limit and rerun — nothing collected is lost.

Does it work without keywords? Yes: use Scrape By URL with a category, shop or designer URL, or enable Designer Inventory with a designer list.

Where do I report a problem? Open an issue on the Actor's Issues tab with the run id and the input you used — never paste proxy credentials.