Depop Scraper - Listings, Shops, Sellers & Reviews
Pricing
from $1.00 / 1,000 results
Depop Scraper - Listings, Shops, Sellers & Reviews
From $1/1K. Scrape Depop search results, listings, shops, and reviews to JSON, CSV, or Excel. Extract titles, prices, shipping, brands, conditions, colours, sizes, photos, descriptions, and seller profiles.
Pricing
from $1.00 / 1,000 results
Rating
5.0
(1)
Developer
Abot API
Maintained by CommunityActor stats
2
Bookmarked
53
Total users
19
Monthly active users
5 days ago
Last modified
Categories
Share
Depop Scraper: Items, Shops & Reviews
Depop Scraper turns Depop into structured product and seller data. Search by keyword with brand, category, colour, condition, and price filters, paste product, search, shop, or category URLs, or list sellers to pull every review they have received. Each record comes back as clean JSON, CSV, or Excel rows, or read straight through the API: title, full description, price and shipping, brand, condition, colours, sizes, every photo, and the seller's public profile.
Why This Scraper?
- Three ways in. Keyword search with filters, URL input (product, search, or a whole shop, walked item by item), or a seller's reviews.
- Rich product records. Title, description, price and shipping breakdown, brand, condition, colours, sizes, every photo, like count, and seller profile.
- Seller reviews on demand. One row per review, with rating, text, date, reviewer, and the product the review is about.
- Source-side filters. Brand, category, colour, condition, department group, gender, price range, and sort order, so you never post-filter a huge dataset yourself.
- 12 marketplaces. US, UK, Australia, Ireland, Italy, France, Germany, Spain, Netherlands, Belgium, New Zealand and Canada, each in its local currency.
- Depth on demand. Switch on detail enrichment for seller profile, full description, colours, material and condition, and pay the enrichment charge only when you use it.
- Built for schedules. Incremental mode returns only new and changed items on recurring runs, and Resume continues an interrupted run without duplicate charges.
Use Cases
- Resale and vintage sourcing: track new listings for specific brands, keywords, or price ranges before they sell.
- Price and market research: compare prices, discounts, and shipping costs across brands and categories.
- Seller due diligence: pull a shop's reviews and rating history before buying from or partnering with them.
- Trend and demand tracking: monitor a category or keyword over time with scheduled, incremental runs.
- Marketplace analytics: build datasets of condition, brand, and size distribution for research or reporting.
Data You Get
Sample shape: values are illustrative placeholders, not from a live record.
| Field | Example |
|---|---|
id | "000000001" |
slug | "seller-name-sample-item-0000" |
url | "https://www.depop.com/products/seller-name-sample-item-0000/" |
title | "Sample Vintage Jacket" |
description | "Full item description appears here when detail enrichment is on." |
price | 30 |
currency | "USD" |
shippingCost | 5 |
isReduced | true |
discountPercentage | 28 |
status | "ONSALE" |
brandName | "Sample Brand" |
conditionName | "Like new condition" |
colours | ["black", "white"] |
sizes | [{ "id": 0, "name": "M", "quantity": 1 }] |
categoryName | "Shoes" |
gender | "unisex" |
likeCount | 0 |
pictures | ["https://media-photos.depop.com/b1/00000000/0000000000_0000/P0.jpg"] |
mainPicture | "https://media-photos.depop.com/b1/00000000/0000000000_0000/P0.jpg" |
sellerUsername | "sampleseller" |
sellerItemsSold | 0 |
sellerReviewsRating | 5 |
raw | { complete source object with every original field } |
conditionName, colours, categoryName, sellerUsername, sellerItemsSold, and sellerReviewsRating are populated only when fetchDetails is on (it is off by default); with it off you get the faster search-card fields and null placeholders for the rest. Product records also carry a full price and shipping breakdown (totalPrice, buyerFee, tax, taxType, shippingId, nationalShippingCost), plus material, age, style, source, attributeTags, variants, sku, isBoosted, isSold, hasFreeShipping, pictureCount, sellerVerified, sellerLastSeen, and sellerOnVacation. isBoosted comes from Search and URL-search results; isSold comes from a seller's shop listing. A field only available from one source is null on rows built from a different source.
Reviews mode returns a different row shape: id, kind, role, rating, text, date, transactionId, authorId, authorUsername, authorVerified, productId, productPicture, sellerId, sellerUsername, sellerUrl, sellerVerified, sellerBio, sellerFollowers, sellerFollowing, sellerReviewsTotal, sellerReviewsRating, sellerItemsSold, sellerPictureUrl, and raw.
When incrementalMode is on, every returned row, product or review, also carries changeType (NEW, UPDATED, REAPPEARED, or EXPIRED), changedFields (populated only for UPDATED), firstSeenAt, and lastSeenAt.
How to Use
- Pick a mode:
search(by keyword),url(paste product, search, or shop links), orreviews(pull feedback for one or more sellers). - Fill in the fields for that mode: keywords and filters for search, links for URL mode, sellers for reviews.
- Set Max Items and Max Pages Per Search to control run size and cost, then click Start. The default proxy (Apify datacenter) works on every plan; Residential proxy is recommended for the most reliable results.
- Download the dataset as JSON, CSV, or Excel, or read it through the API.
Search by keyword with filters:
{"mode": "search","queries": ["nike vintage", "carhartt jacket"],"country": "us","sortBy": "newest","minPrice": 20,"maxPrice": 100,"maxPages": 5,"proxy": { "useApifyProxy": true }}
Brand and condition filters, with detail enrichment on:
{"mode": "search","queries": ["shoes"],"country": "gb","brands": ["270"],"conditions": ["used_like_new", "used_excellent"],"fetchDetails": true,"maxListings": 50}
Paste links (product page, search page, a whole shop, or a category):
{"mode": "url","urls": ["https://www.depop.com/products/sampleseller-sample-item-0000/","https://www.depop.com/search/?q=carhartt","https://www.depop.com/sampleseller/","https://www.depop.com/category/home/"],"maxPages": 3}
Every review for one or more sellers:
{"mode": "reviews","sellers": ["sampleseller", "https://www.depop.com/anotherseller/"],"reviewRole": "seller","maxPages": 10}
Run it from your code
Python:
from apify_client import ApifyClientclient = ApifyClient("<YOUR_APIFY_TOKEN>")run = client.actor("abotapi/depop-scraper").call(run_input={"mode": "search", "queries": ["nike vintage"]})for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(item["title"], item["price"], item["currency"])
JavaScript:
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });const run = await client.actor('abotapi/depop-scraper').call({ mode: 'search', queries: ['nike vintage'] });const { items } = await client.dataset(run.defaultDatasetId).listItems();
Or connect it to Make, Zapier, n8n, Google Sheets, or webhooks from the Integrations tab.
How maxPages and maxListings interact
maxPages defaults to 0 (unlimited): a search, shop, or review walk keeps going until the source reports it has no more results, a page comes back empty, or a page repeats content already served in that same walk, so there is no artificial page ceiling. maxListings (default 20) is the cap you actually want. When several keywords, URLs, shops, or sellers run in the same call, the budget is split proportionally across them so each gets a share instead of the first one taking it all. Set maxListings to 0 for a fully unlimited run.
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. Long unlimited runs also checkpoint their own progress, so a platform migration or a manual Resurrect picks up where it left off. - Incremental mode (
incrementalMode) is for scheduled runs over the same search, URLs or sellers. Each item is classifiedNEW,UPDATED(withchangedFields),REAPPEARED, orEXPIRED(only withemitExpiredon, and only after a run that scanned the whole tracked scope:maxPagesandmaxListingsboth unlimited, Resume not used). Unchanged items are always suppressed and not billed.stateKeynames or shares the stored state; leaving it empty derives one from the search, URL or seller and filter setup. - What counts as a change. Seller and shopper activity never makes an item
UPDATED:likeCount,sellerLastSeen, the seller stats (sellerItemsSold,sellerReviewsTotal,sellerReviewsRating,sellerAverageShippingDays,sellerFollowers,sellerFollowing) and theraw/sellerRawpassthrough are ignored. Add any other fields toignoreFieldsForChanges; ignored fields are still returned. - Using both. Resume plus Incremental mode on a search that already has saved state is rejected with a message asking you to drop one. Used together the first time, the resumed items seed the baseline so they won't show as
NEWon the next run.
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.
- Authorize a connector once under Apify → Settings → Integrations (Notion, Linear, Airtable, or Apify).
- Select it in the "Pipe results into your apps" input field. (If the picker is empty, you haven't authorized a connector yet.)
- For Notion, also set
notionParentPageUrlto the page where items 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
| Parameter | Type | Default | Description |
|---|---|---|---|
mode | string | search | search, url, or reviews. |
queries | array | (none, example prefilled) | Search keywords (Search mode). Each keyword runs its own paginated search; results are combined. |
sortBy | string | relevance | relevance, newest, price-asc, or price-desc (Search mode). |
minPrice | integer | (none) | Minimum price in the marketplace currency (Search mode). |
maxPrice | integer | (none) | Maximum price in the marketplace currency (Search mode). |
gender | string | any | any, female, male, or unisex (Search mode). |
brands | array | (none) | Numeric brand IDs (Search mode). Leave empty for all brands. |
categories | array | (none) | Numeric category IDs (Search mode). |
colours | array | (none) | Colour slugs such as black, white, pink (Search mode). |
conditions | array | (none) | One or more of brand_new, used_like_new, used_excellent, used_good, used_fair. |
groups | array | (none) | Department group slugs such as tops, footwear, coats-jackets (Search mode). |
sizes | array | (none) | Numeric size IDs, category-specific (Search mode, advanced). |
urls | array | (none, example prefilled) | Product, search, shop, or category URLs (URL mode). Category URLs support womens, mens, kids, home and beauty, plus women's and men's sub-pages (e.g. /category/womens/tops/); empty or unrecognised category pages are skipped with a warning. Search filters above are ignored in this mode. |
sellers | array | (none, example prefilled) | Seller usernames, shop URLs, or numeric user IDs (Reviews mode). |
reviewRole | string | seller | seller or buyer reviews (Reviews mode). |
country | string | us | Marketplace region and currency for Search mode; fills the gap when a pasted URL doesn't name its own country; also the default proxy country. |
maxPages | integer | 0 | Max pages per keyword, URL, shop, or seller. 0 means unlimited: the walk stops on its own at the source's reported total, an empty page, or a page that repeats content already served in that walk. |
maxListings | integer | 20 | Total item cap across all keywords, URLs, shops, or sellers combined. 0 means unlimited. |
fetchDetails | boolean | false | Fetch each item's detail page to add full description, all photos, colours, material, style, condition, category, and seller stats. Leave off for lighter, search-card-only runs. |
proxy | object | { "useApifyProxy": true } (Apify datacenter) | Proxy configuration. Residential is recommended for the most reliable results. Datacenter by default; refused connections switch to Apify Residential automatically, then to a backup connection. |
resumeFromRunId | string | (none) | Continue one previous run or dataset by id; items already collected there are skipped, so this run returns only new items. |
incrementalMode | boolean | false | Turn on for daily/recurring monitoring of the same search, URLs, or sellers. Returns only NEW, UPDATED, and REAPPEARED items after the first run. |
stateKey | string | (none) | Name or share an incremental-mode monitoring campaign. Left empty, a key is derived automatically from the search/URL/seller and filter setup. |
emitExpired | boolean | false | Incremental mode only. Also return items no longer found, marked EXPIRED, once a run has fully scanned the tracked scope. |
ignoreFieldsForChanges | string[] | [] | Incremental mode only. Extra output fields to ignore when deciding whether an item is UPDATED (seller activity/stats, likeCount and the raw passthrough are always ignored). |
mcpConnectors | array | (none) | Optional: send a summary of each record to apps you authorized under Integrations. |
notionParentPageUrl | string | (none) | Notion connector only: page under which records are created. |
maxNotifyListings | integer | 50 | Cap on items written to each connector per run. Does not affect the dataset. |
Output Example
Sample shape: values are illustrative placeholders, not from a live record.
{"id": "000000001","slug": "sampleseller-sample-vintage-jacket-0000","url": "https://www.depop.com/products/sampleseller-sample-vintage-jacket-0000/","title": "Sample Vintage Jacket","description": "Full item description appears here when fetchDetails is on.","price": 30,"totalPrice": 30,"shippingCost": 5,"currency": "USD","isReduced": false,"status": "ONSALE","brandName": "Sample Brand","brandId": "0000","conditionName": "Like new condition","colours": ["black"],"categoryName": "Coats & Jackets","gender": "unisex","sizes": [{ "id": 0, "name": "M", "quantity": 1 }],"likeCount": 0,"pictures": ["https://media-photos.depop.com/b1/00000000/0000000000_0000/P0.jpg"],"mainPicture": "https://media-photos.depop.com/b1/00000000/0000000000_0000/P0.jpg","sellerId": "00000000","sellerUsername": "sampleseller","sellerVerified": false,"sellerItemsSold": 0,"sellerReviewsRating": 5,"sellerReviewsTotal": 0,"countryCode": "US"}
Plan Requirement
Residential proxy is recommended for the most reliable results, especially for large or frequent runs: pick Residential under the Proxy field. The actor also works on every Apify plan, including the free plan. By default it starts on Apify datacenter proxy, keeping each connection the site accepts and switching to a fresh one when the site refuses it. If datacenter connections keep being refused, the run switches to Apify Residential proxy for the rest of the run. Residential traffic is billed to your Apify plan like any Residential run. If your plan does not include Apify Residential or Apify Proxy at all (the free plan does not), the run continues on a backup connection at no extra cost to you. Choose the marketplace country that matches your target audience: prices are quoted in that currency, and residential connections use that country.
FAQ
How much does it cost?
You pay per record returned, plus optional detail-enrichment usage when fetchDetails is on. The Pricing tab shows the current rates. Use Max Items and Max Pages Per Search to cap the cost of any run.
Is it legal to scrape Depop?
This actor collects only publicly available marketplace data. You are responsible for how you use it: follow Depop's terms and the laws that apply to you, and get legal advice if you plan commercial redistribution. Product photos and seller-written text may be subject to third-party rights.
Can I get only new or changed items on a schedule?
Yes. Schedule the actor from the Schedules tab and turn on Incremental mode. Each run then returns only NEW, UPDATED, and REAPPEARED items for the same search, URLs, or sellers, and unchanged items are not billed. Use stateKey to keep separate monitoring campaigns apart.
What is the difference between Resume and Incremental mode?
resumeFromRunId continues one specific interrupted or previous run and returns only the items that run doesn't already have. Incremental mode is for running the same search, URLs, or sellers again and again on a schedule and getting only what changed since last time. Combining both on a search that already has incremental state is rejected with a clear message; use one or the other.
Why did my run return an empty dataset instead of failing?
This actor treats "nothing usable came back" as a completed run with zero items, not an error: it retries and switches connections automatically when a request is rejected. The run stops outright only when a resumeFromRunId you provided cannot be resolved, or when Incremental mode and Resume are combined in a way that would corrupt an existing monitoring campaign. Any other empty result is a completed run with 0 items and a "No results returned for the given criteria." status message. The most common causes are search filters that match nothing, or an invalid username, slug, or URL; check the run log for details.
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.
🔗 Want more e-commerce data?
Pair this actor with these related scrapers from the same team:
| 🛒 OfferUp Scraper Scrape OfferUp listings by keyword, location and radius. Returns 40+ fields per item... | 💼 Jobsite UK From $1/1K. Collect UK job listings from Jobsite.co.uk at scale. Search by keyword... |
| 🛒 Mercari Japan Scraper From $0.80/1K. Scrape Mercari Japan listings, sellers and reviews at scale. Extract... | 🛒 Etsy Scraper Scrape Etsy listings by keyword, category, or URL. Extract titles, shops, prices... |
| 🏠 Auction.com Scraper From $1/1K. Extract foreclosure, REO, short-sale, and auction listings from Auction.com... | 📱 Clutch Scraper Scrape Clutch company directories and profiles. Get names, ratings, review counts, hourly... |
💬 Support & custom scrapers
- 🐞 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 or message Telegram @abotapi.
- ⭐ Enjoying it? A quick review on the actor page helps other users find it.