{
  "openapi": "3.0.1",
  "info": {
    "title": "Vinted Scraper — Listings, Prices & Seller Data",
    "description": "Scrape Vinted listings, prices, sellers and reviews across 27 country markets. Goes past Vinted's hard 960-item search cap and reports exactly how complete each run was. Export to CSV, Excel, JSON or API.",
    "version": "0.1",
    "x-build-id": "cx6f7hirxP8IHM3Qx"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/vonsensey~vinted-scraper-api/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-vonsensey-vinted-scraper-api",
        "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/vonsensey~vinted-scraper-api/runs": {
      "post": {
        "operationId": "runs-sync-vonsensey-vinted-scraper-api",
        "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/vonsensey~vinted-scraper-api/run-sync": {
      "post": {
        "operationId": "run-sync-vonsensey-vinted-scraper-api",
        "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",
        "properties": {
          "searchQueries": {
            "title": "Search keywords",
            "type": "array",
            "description": "Keywords to search for. Each keyword is run against every market you select. Leave empty if you are pasting URLs instead.",
            "items": {
              "type": "string"
            }
          },
          "startUrls": {
            "title": "Vinted URLs",
            "type": "array",
            "description": "Paste any Vinted URL and it is handled automatically: a filtered catalog or search URL (its filters are carried over), an item URL (/items/123...), or a member URL (/member/123...). The country is taken from the domain, so a vinted.pl URL is scraped on the Polish market.",
            "items": {
              "type": "string"
            }
          },
          "markets": {
            "title": "Markets",
            "type": "array",
            "description": "Which country markets to search. Applies to keywords only; pasted URLs keep their own domain. Most European markets share one inventory pool, so extra euro markets add requests but few new listings, and a listing that several euro markets return is delivered and billed once. Markets with their own currency keep their own rows. See the README for the measured overlap.",
            "items": {
              "type": "string",
              "enum": [
                "fr",
                "de",
                "uk",
                "us",
                "pl",
                "lt",
                "es",
                "it",
                "nl",
                "be",
                "cz",
                "sk",
                "at",
                "lu",
                "pt",
                "se",
                "dk",
                "fi",
                "ro",
                "hu",
                "gr",
                "ie",
                "hr",
                "si",
                "lv",
                "ee",
                "au"
              ],
              "enumTitles": [
                "France",
                "Germany",
                "United Kingdom",
                "United States",
                "Poland",
                "Lithuania",
                "Spain",
                "Italy",
                "Netherlands",
                "Belgium",
                "Czechia",
                "Slovakia",
                "Austria",
                "Luxembourg",
                "Portugal",
                "Sweden",
                "Denmark",
                "Finland",
                "Romania",
                "Hungary",
                "Greece",
                "Ireland",
                "Croatia",
                "Slovenia",
                "Latvia",
                "Estonia",
                "Australia"
              ]
            },
            "default": [
              "fr"
            ]
          },
          "maxItems": {
            "title": "Max items",
            "minimum": 0,
            "type": "integer",
            "description": "Hard ceiling on billable rows for the whole run. Set 0 for no limit. This is the single most important cost control, especially with Deep mode on.",
            "default": 100
          },
          "deep": {
            "title": "Deep mode - go past Vinted's 960-item cap",
            "type": "boolean",
            "description": "A single Vinted search returns at most 960 items (96 per page, 10 pages, then HTTP 400) no matter how much stock matches. Deep mode splits the query into price bands so it can reach far more, and reports exactly how complete the result was. Costs extra requests, so raise Max items to make use of it.",
            "default": false
          },
          "priceMin": {
            "title": "Minimum price",
            "minimum": 0,
            "type": "integer",
            "description": "Only return items at or above this price."
          },
          "priceMax": {
            "title": "Maximum price",
            "minimum": 0,
            "type": "integer",
            "description": "Only return items at or below this price."
          },
          "sortBy": {
            "title": "Sort by",
            "enum": [
              "relevance",
              "newest_first",
              "price_low_to_high",
              "price_high_to_low"
            ],
            "type": "string",
            "description": "Result ordering. Newest first returns ordinary listings and is the right choice for monitoring. On broad searches Vinted answers Relevance with paid-promoted listings only (every row isPromoted: true, measured 2026-10-01), so use it for narrow searches. Note: with Deep mode on, price bands are walked from cheapest upward, so a run that stops at Max items returns the cheapest matches regardless of this setting. Turn Deep mode off if ordering matters more than coverage.",
            "default": "newest_first"
          },
          "includeItemDetail": {
            "title": "Include item descriptions",
            "type": "boolean",
            "description": "Fetch each item's page for its full description, colour, category, availability (isAvailable) and schema.org condition class (conditionCode). Vinted only exposes these on the item page, about 500 KB per item on the wire (measured 2026-10-01), direct, at about 30 pages a minute per market (the run pauses when Vinted asks it to slow down), and through a residential proxy only if Vinted refuses outright. It is billed as the item-detail event (about 7x a listing) and that charge REPLACES the listing charge for the row rather than adding to it. Leave it off unless you actually need descriptions.",
            "default": false
          },
          "includeSellerRating": {
            "title": "Include seller rating on listings",
            "type": "boolean",
            "description": "Add each seller's feedback reputation (0-1) and feedback count to their listing rows (sellerFeedbackReputation, sellerFeedbackCount). It costs one small request per distinct seller per market (included in the listing price, which does not change). Vinted allows about 30 of those a minute, so the run pauses when it says so: 100 rated rows take about 2.5 minutes.",
            "default": false
          },
          "includeSellerProfile": {
            "title": "Include seller profiles",
            "type": "boolean",
            "description": "For member URLs, also emit a seller row with feedback counts, reputation, location and item count.",
            "default": false
          },
          "includeSellerReviews": {
            "title": "Include seller reviews",
            "type": "boolean",
            "description": "For member URLs, also emit the reviews buyers left on that seller. They are fetched before the seller's listings, and both count toward Max items.",
            "default": false
          },
          "maxReviewsPerSeller": {
            "title": "Max reviews per seller",
            "minimum": 0,
            "type": "integer",
            "description": "Caps how many reviews are pulled per seller.",
            "default": 25
          },
          "maxConcurrency": {
            "title": "Max concurrency",
            "minimum": 1,
            "maximum": 20,
            "type": "integer",
            "description": "How many targets to work on at once. Lower this if you see blocking.",
            "default": 5
          },
          "requestDelayMs": {
            "title": "Delay between requests",
            "minimum": 0,
            "maximum": 10000,
            "type": "integer",
            "description": "Pause between requests on the same market. Raising it trades speed for a lower chance of being throttled.",
            "default": 250
          },
          "proxyConfiguration": {
            "title": "Proxy",
            "type": "object",
            "description": "Optional — proxy is handled for you and its cost is included in the price. When this names no proxy group and no proxy URLs (left empty, switched off, or automatic mode), each market goes direct first and moves to Apify Proxy RESIDENTIAL the first time Vinted's Datadome refuses it. Pick a group or enter your own proxy URLs only if you have a specific reason: they are used as given, with no direct try, and a datacenter group may return only free error rows."
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}