{
  "openapi": "3.0.1",
  "info": {
    "title": "Depop Scraper - Listings, Shops, Sellers & Reviews",
    "description": "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.",
    "version": "1.7",
    "x-build-id": "t57nr2XUy32jNSEj5"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/abotapi~depop-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-abotapi-depop-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/acts/abotapi~depop-scraper/runs": {
      "post": {
        "operationId": "runs-sync-abotapi-depop-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor and returns information about the initiated run in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/runsResponseSchema"
                }
              }
            }
          }
        }
      }
    },
    "/acts/abotapi~depop-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-abotapi-depop-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "inputSchema": {
        "type": "object",
        "required": [
          "mode"
        ],
        "properties": {
          "mode": {
            "title": "Mode",
            "enum": [
              "search",
              "url",
              "reviews"
            ],
            "type": "string",
            "description": "How to find data to scrape. 'search' and 'url' return items; 'reviews' returns one row per review left for the listed sellers.",
            "default": "search"
          },
          "queries": {
            "title": "Search Keywords",
            "type": "array",
            "description": "Keywords to search for (Search mode only). Multi-keyword supported. Each keyword runs its own paginated search; results are combined.",
            "items": {
              "type": "string"
            }
          },
          "sortBy": {
            "title": "Sort By",
            "enum": [
              "relevance",
              "newest",
              "price-asc",
              "price-desc"
            ],
            "type": "string",
            "description": "Result ordering (Search mode only). Default = relevance. Depop has removed the 'Newly listed' sort; choosing it runs the search by relevance.",
            "default": "relevance"
          },
          "minPrice": {
            "title": "Min Price",
            "minimum": 0,
            "type": "integer",
            "description": "Minimum price in the marketplace currency. Leave empty for no minimum."
          },
          "maxPrice": {
            "title": "Max Price",
            "minimum": 0,
            "type": "integer",
            "description": "Maximum price in the marketplace currency. Leave empty for no maximum."
          },
          "gender": {
            "title": "Gender Department",
            "enum": [
              "any",
              "female",
              "male",
              "unisex"
            ],
            "type": "string",
            "description": "Filter by department (Search mode only).",
            "default": "any"
          },
          "brands": {
            "title": "Brand IDs",
            "type": "array",
            "description": "Numeric brand IDs (Search mode only). E.g. 270 = Nike. Multiple selectable. Leave empty for all brands.",
            "items": {
              "type": "string"
            }
          },
          "categories": {
            "title": "Category IDs",
            "type": "array",
            "description": "Numeric category IDs (Search mode only). E.g. 231 = Shoes. Multiple selectable.",
            "items": {
              "type": "string"
            }
          },
          "colours": {
            "title": "Colours",
            "type": "array",
            "description": "Colour slugs (Search mode only). E.g. black, white, pink, blue, red, green, multi. Multiple selectable.",
            "items": {
              "type": "string"
            }
          },
          "conditions": {
            "title": "Conditions",
            "type": "array",
            "description": "Condition slugs (Search mode only). One or more of: brand_new, used_like_new, used_excellent, used_good, used_fair.",
            "items": {
              "type": "string"
            }
          },
          "groups": {
            "title": "Department Groups",
            "type": "array",
            "description": "Department group slugs (Search mode only). E.g. tops, bottoms, footwear, accessories, coats-jackets. Multiple selectable.",
            "items": {
              "type": "string"
            }
          },
          "sizes": {
            "title": "Size IDs",
            "type": "array",
            "description": "Numeric size IDs (Search mode only, advanced). Size IDs are category-specific (the same number means a different size for shoes vs. dresses) — find one on a real listing's size selector. Leave empty unless you know them. Matching is done against each result's own size data, since the site's own size filter does not reliably narrow results upstream.",
            "items": {
              "type": "string"
            }
          },
          "urls": {
            "title": "URLs",
            "type": "array",
            "description": "Direct Depop URLs (URL mode only). Multi-URL supported. Accepts product URLs (/products/<slug>/), search URLs (/search/?q=...), shop URLs (/<username>/, which walk every item the seller has listed), and category URLs (/category/<slug>/) for womens, mens, kids, home and beauty, including women's and men's sub-pages such as /category/womens/tops/ or /category/mens/tops/tshirts/. Category pages that Depop itself shows empty (e.g. luxury, plus-size, petite, pets, brand, electronics) and other category paths are skipped with a warning rather than guessed. The search filters above are ignored in URL mode; if the pasted URL doesn't name a country, the marketplace region below is used.",
            "items": {
              "type": "string"
            }
          },
          "sellers": {
            "title": "Sellers",
            "type": "array",
            "description": "Seller usernames, shop URLs, or numeric user IDs (Reviews mode only). Multi-seller supported; each seller's reviews are surfaced as separate rows.",
            "items": {
              "type": "string"
            }
          },
          "reviewRole": {
            "title": "Review Role",
            "enum": [
              "seller",
              "buyer"
            ],
            "type": "string",
            "description": "Whether to fetch reviews the user received as a seller or as a buyer (Reviews mode only).",
            "default": "seller"
          },
          "country": {
            "title": "Marketplace Country",
            "enum": [
              "us",
              "gb",
              "au",
              "ie",
              "it",
              "fr",
              "de",
              "es",
              "nl",
              "be",
              "nz",
              "ca"
            ],
            "type": "string",
            "description": "Which regional inventory and currency to use in Search mode. In URL mode this only fills the gap when a pasted URL doesn't already name its own country. Also used as the default residential proxy country.",
            "default": "us"
          },
          "maxPages": {
            "title": "Max Pages Per Search",
            "minimum": 0,
            "type": "integer",
            "description": "Maximum pages to walk per keyword / URL / shop / seller. ~24 items per page; up to 20 reviews per page. Set 0 for unlimited (the walk still stops naturally at the end of results; bounded by Max Items).",
            "default": 0
          },
          "maxListings": {
            "title": "Max Items (Total)",
            "minimum": 0,
            "type": "integer",
            "description": "Cap across all keywords / URLs / shops / sellers combined. Default 20. Set 0 for unlimited (capped only by Max Pages and the natural end of results).",
            "default": 20
          },
          "fetchDetails": {
            "title": "Fetch Item Details",
            "type": "boolean",
            "description": "If on (Search and URL modes, including shop URLs), the actor opens each item's detail page to add the seller (username, ID, verified badge, photo), full description, all photos, colours, material, style, condition, category and seller rating / items-sold stats. Charged as a detail-enrichment event per item. Off by default (faster, cheaper runs that return search-card fields only); turn on when you need seller and full item details. Not used in Reviews mode.",
            "default": false
          },
          "resumeFromRunId": {
            "title": "Resume from a previous run (delta)",
            "type": "string",
            "description": "Optional. ID of a previous run of this actor (or a dataset ID). Items already in that dataset are skipped, so this run returns only NEW items (a delta). Combine both runs' datasets for the full set. For recurring/scheduled monitoring of the same search, use Incremental mode below instead."
          },
          "incrementalMode": {
            "title": "Incremental changes for scheduled runs",
            "type": "boolean",
            "description": "Turn this on for daily/recurring monitoring of the same search, URLs, or sellers. The first run returns everything as NEW. Later runs return only NEW, UPDATED, and REAPPEARED items — items unchanged since the last run are suppressed (not returned, not billed). State is kept separately per search/URL/seller and filter setup; use State key below to name or deliberately share a monitoring campaign. To continue one specific interrupted run instead, use Resume from a previous run above.",
            "default": false
          },
          "stateKey": {
            "title": "State key (optional, incremental mode only)",
            "type": "string",
            "description": "Optional. Name this monitoring campaign to keep its state stable, or to deliberately share state across differently-configured runs. Leave empty to let the actor derive a key automatically from the search/URL/seller and filter settings — different setups then never mix state with each other."
          },
          "emitExpired": {
            "title": "Emit expired items (incremental mode only)",
            "type": "boolean",
            "description": "Off by default. Turn on to also return items that were present in a previous run but are no longer found, marked EXPIRED. Only produced once a run has fully scanned the tracked search (Max Pages Per Search and Max Items both set to 0/unlimited, and Resume not used) — this returns and bills extra synthetic rows, so leave it off unless you need expiry tracking.",
            "default": false
          },
          "ignoreFieldsForChanges": {
            "title": "Ignore fields when detecting changes (incremental mode only)",
            "type": "array",
            "description": "Output field names that should NOT make an item count as UPDATED. Always ignored: likeCount, sellerLastSeen, the seller stats (sellerItemsSold, sellerReviewsTotal, sellerReviewsRating, sellerAverageShippingDays, sellerFollowers, sellerFollowing) and the raw / sellerRaw passthrough. They describe the seller or shopper activity rather than the listing, and change on almost every run. Add fields such as description or pictures here if changes to them are not relevant to you. Ignored fields are still returned in the output.",
            "items": {
              "type": "string"
            }
          },
          "proxy": {
            "title": "Proxy Configuration",
            "type": "object",
            "description": "Residential proxy is recommended for the most reliable results, especially for large or frequent runs. The default is Apify datacenter proxy (Automatic), which works on every plan: if datacenter connections are refused, the run switches to Apify Residential automatically, then to a backup connection. The residential country follows the marketplace country above.",
            "default": {
              "useApifyProxy": true
            }
          },
          "mcpConnectors": {
            "title": "Pipe results into your apps (optional)",
            "type": "array",
            "description": "Optionally send the scraped results into the apps you already use, via Model Context Protocol (MCP) connectors. Authorize a connector once under Apify → Settings → Integrations, then select it here. The connector receives a condensed, human-readable summary per item (title + key fields), not the full JSON — the complete record stays in the dataset. Leave empty to skip. Supported: Notion (https://mcp.notion.com/mcp), Linear (https://mcp.linear.app/sse), Airtable (https://mcp.airtable.com/mcp), Apify (https://mcp.apify.com)."
          },
          "notionParentPageUrl": {
            "title": "Notion parent page (Notion connector only)",
            "type": "string",
            "description": "URL (or id) of the Notion page under which item pages are created. Required to enable the Notion export; ignored by other connectors."
          },
          "maxNotifyListings": {
            "title": "Max items to export per connector",
            "minimum": 1,
            "maximum": 1000,
            "type": "integer",
            "description": "Cap on items written to each connector per run. Does not affect the dataset.",
            "default": 50
          }
        }
      },
      "runsResponseSchema": {
        "type": "object",
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "actId": {
                "type": "string"
              },
              "userId": {
                "type": "string"
              },
              "startedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "finishedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "status": {
                "type": "string",
                "example": "READY"
              },
              "meta": {
                "type": "object",
                "properties": {
                  "origin": {
                    "type": "string",
                    "example": "API"
                  },
                  "userAgent": {
                    "type": "string"
                  }
                }
              },
              "stats": {
                "type": "object",
                "properties": {
                  "inputBodyLen": {
                    "type": "integer",
                    "example": 2000
                  },
                  "rebootCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "restartCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "resurrectCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "computeUnits": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "options": {
                "type": "object",
                "properties": {
                  "build": {
                    "type": "string",
                    "example": "latest"
                  },
                  "timeoutSecs": {
                    "type": "integer",
                    "example": 300
                  },
                  "memoryMbytes": {
                    "type": "integer",
                    "example": 1024
                  },
                  "diskMbytes": {
                    "type": "integer",
                    "example": 2048
                  }
                }
              },
              "buildId": {
                "type": "string"
              },
              "defaultKeyValueStoreId": {
                "type": "string"
              },
              "defaultDatasetId": {
                "type": "string"
              },
              "defaultRequestQueueId": {
                "type": "string"
              },
              "buildNumber": {
                "type": "string",
                "example": "1.0.0"
              },
              "containerUrl": {
                "type": "string"
              },
              "usage": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "integer",
                    "example": 1
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "usageTotalUsd": {
                "type": "number",
                "example": 0.00005
              },
              "usageUsd": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "number",
                    "example": 0.00005
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}