{
  "openapi": "3.0.1",
  "info": {
    "title": "Vinted Scraper: Listings, Prices & Sold Items",
    "description": "Scrape Vinted listings from 26 countries (vinted.ro, .fr, .de, .co.uk, .com...) by keyword or URL: prices, fees, brand, size, condition, photos, descriptions and seller ratings. No 960-result limit. Monitor new listings, price drops and sold items, and compare prices across countries.",
    "version": "1.0",
    "x-build-id": "AeC5bDgGEh2krY47C"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/upright_inmate~vinted-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-upright_inmate-vinted-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/upright_inmate~vinted-scraper/runs": {
      "post": {
        "operationId": "runs-sync-upright_inmate-vinted-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/upright_inmate~vinted-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-upright_inmate-vinted-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",
        "properties": {
          "searchQueries": {
            "title": "Search keywords",
            "type": "array",
            "description": "What to search for, exactly as you would type it on Vinted, e.g. \"nike air force 1\" or \"rochie zara\". Each keyword is a separate search in the selected country. The filters below apply to these keywords.",
            "items": {
              "type": "string"
            }
          },
          "startUrls": {
            "title": "Vinted URLs",
            "type": "array",
            "description": "Any Vinted URL from any country: a search or catalog page with your filters already applied (e.g. https://www.vinted.ro/catalog?search_text=zara&order=newest_first), an item page (/items/...) for full item details, a brand page (/brand/...) or a seller profile (/member/...) to get the seller's profile and all their active listings. Filters in the URL are kept; the filter fields below do not apply to URLs.",
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "country": {
            "title": "Country (for search keywords)",
            "enum": [
              "at",
              "be",
              "hr",
              "cz",
              "dk",
              "ee",
              "fi",
              "fr",
              "de",
              "gr",
              "hu",
              "ie",
              "it",
              "lv",
              "lt",
              "lu",
              "nl",
              "pl",
              "pt",
              "ro",
              "sk",
              "si",
              "es",
              "se",
              "gb",
              "us"
            ],
            "type": "string",
            "description": "The Vinted website to search the keywords on. Prices and price filters are in this country's currency. URLs always use the website they point to.",
            "default": "ro"
          },
          "sortBy": {
            "title": "Sort by",
            "enum": [
              "relevance",
              "newest_first",
              "price_low_to_high",
              "price_high_to_low"
            ],
            "type": "string",
            "description": "Order of the results. Choose \"Newest first\" for deal alerts. Monitoring runs and runs that scrape all listings (Max listings per search 0 or above 960) always use \"Newest first\", because Vinted's relevance order changes between page loads and would make listings appear and disappear at random.",
            "default": "relevance"
          },
          "minPrice": {
            "title": "Minimum price",
            "minimum": 0,
            "type": "number",
            "description": "Only listings priced at least this much, in the selected country's currency (e.g. RON for Romania). Leave empty for no minimum."
          },
          "maxPrice": {
            "title": "Maximum price",
            "minimum": 0,
            "type": "number",
            "description": "Only listings priced at most this much, in the selected country's currency. Leave empty for no maximum."
          },
          "conditions": {
            "title": "Condition",
            "uniqueItems": true,
            "type": "array",
            "description": "Only listings in these conditions. Leave empty for all conditions.",
            "items": {
              "type": "string",
              "enum": [
                "new_with_tags",
                "new_without_tags",
                "very_good",
                "good",
                "satisfactory"
              ],
              "enumTitles": [
                "New with tags",
                "New without tags",
                "Very good",
                "Good",
                "Satisfactory"
              ]
            }
          },
          "brands": {
            "title": "Brands",
            "type": "array",
            "description": "Only listings of these brands. Use brand names (e.g. \"Nike\", \"Zara\") or Vinted brand IDs (e.g. 53). Names are matched to Vinted's brand list automatically.",
            "items": {
              "type": "string"
            }
          },
          "categoryIds": {
            "title": "Category IDs",
            "type": "array",
            "description": "Vinted category (catalog) IDs, e.g. 1242 for men's trainers. Find the ID in the URL of a Vinted category page (/catalog/1242-trainers). Easier: open the category on Vinted and paste the URL into Vinted URLs.",
            "items": {
              "type": "string"
            }
          },
          "sizeIds": {
            "title": "Size IDs",
            "type": "array",
            "description": "Vinted size IDs (the size_ids[] values in a Vinted URL after you pick sizes on the website).",
            "items": {
              "type": "string"
            }
          },
          "colorIds": {
            "title": "Color IDs",
            "type": "array",
            "description": "Vinted color IDs (the color_ids[] values in a Vinted URL after you pick colors on the website).",
            "items": {
              "type": "string"
            }
          },
          "materialIds": {
            "title": "Material IDs",
            "type": "array",
            "description": "Vinted material IDs (the material_ids[] values in a Vinted URL after you pick materials on the website).",
            "items": {
              "type": "string"
            }
          },
          "maxItemsPerSearch": {
            "title": "Max listings per search",
            "minimum": 0,
            "type": "integer",
            "description": "Maximum listings to scrape for each keyword, URL and seller. Set 0 for all listings. Vinted shows at most 960 results per search; above that the search is automatically split into price ranges, so you can get all listings.",
            "default": 100
          },
          "maxItems": {
            "title": "Max results in total",
            "minimum": 0,
            "type": "integer",
            "description": "Stop after saving this many results in total, across all searches. Useful to cap the cost of a run. Set 0 for no limit. On the free Apify plan, runs save at most 100 results.",
            "default": 0
          },
          "includeItemDetails": {
            "title": "Include item details",
            "type": "boolean",
            "description": "Open each listing's page to add the description, color, material, category, upload time, shipping price, all photos, availability and the seller's login and rating. Slower, and charged as a detailed listing.",
            "default": false
          },
          "includeSellerDetails": {
            "title": "Include seller profiles",
            "type": "boolean",
            "description": "Add each seller's public profile: rating, number of reviews (positive/neutral/negative), followers, active and sold listing counts, city, country, last login, holiday mode and verifications. Each seller is charged once per run.",
            "default": false
          },
          "monitoringId": {
            "title": "Monitoring ID",
            "maxLength": 60,
            "type": "string",
            "description": "Any name for this monitor, e.g. \"nike-deals\". Runs with the same ID and the same searches compare their results with the previous runs, and each listing gets isNew, firstSeenAt, previousPrice, priceChange and priceDropped fields. Leave empty to turn monitoring off."
          },
          "saveOnly": {
            "title": "Save only",
            "enum": [
              "all",
              "new",
              "priceDrops",
              "newOrPriceDrops"
            ],
            "type": "string",
            "description": "Which listings to save in monitored runs. \"Only new listings\" scans just the newest search pages until a page has no new listing, so frequent runs stay cheap. Price drops and sold detection compare every listing, so they scan the whole search and each scanned page is charged. The first run of a monitor always saves everything as the baseline. Requires a Monitoring ID.",
            "default": "all"
          },
          "trackSoldItems": {
            "title": "Detect sold listings",
            "type": "boolean",
            "description": "Detect listings that disappeared from your searches since earlier runs and check their pages: each sold or removed listing is saved as a soldSignal result. Needs a complete scan of each search, so set Max listings per search to 0 for large searches; when not all listings are saved, every scanned search page and checked listing page is charged. Requires a Monitoring ID.",
            "default": false
          },
          "missingRunsThreshold": {
            "title": "Missing runs before checking",
            "minimum": 1,
            "maximum": 10,
            "type": "integer",
            "description": "How many consecutive runs a listing must be missing from its search before its page is checked for a sale. 1 reports fastest; 2 avoids extra checks for listings that drop out of results only briefly.",
            "default": 2
          },
          "compareCountries": {
            "title": "Compare with countries",
            "maxItems": 5,
            "uniqueItems": true,
            "type": "array",
            "description": "Also run every search keyword in these countries (up to 5) and add one countryPriceSummary result per keyword with min, median, average and max prices per country, converted to EUR, plus the cheapest and most expensive country. Price filters are converted to each country's currency.",
            "items": {
              "type": "string",
              "enum": [
                "at",
                "be",
                "hr",
                "cz",
                "dk",
                "ee",
                "fi",
                "fr",
                "de",
                "gr",
                "hu",
                "ie",
                "it",
                "lv",
                "lt",
                "lu",
                "nl",
                "pl",
                "pt",
                "ro",
                "sk",
                "si",
                "es",
                "se",
                "gb",
                "us"
              ],
              "enumTitles": [
                "Austria (vinted.at, EUR)",
                "Belgium (vinted.be, EUR)",
                "Croatia (vinted.hr, EUR)",
                "Czechia (vinted.cz, CZK)",
                "Denmark (vinted.dk, DKK)",
                "Estonia (vinted.ee, EUR)",
                "Finland (vinted.fi, EUR)",
                "France (vinted.fr, EUR)",
                "Germany (vinted.de, EUR)",
                "Greece (vinted.gr, EUR)",
                "Hungary (vinted.hu, HUF)",
                "Ireland (vinted.ie, EUR)",
                "Italy (vinted.it, EUR)",
                "Latvia (vinted.lv, EUR)",
                "Lithuania (vinted.lt, EUR)",
                "Luxembourg (vinted.lu, EUR)",
                "Netherlands (vinted.nl, EUR)",
                "Poland (vinted.pl, PLN)",
                "Portugal (vinted.pt, EUR)",
                "Romania (vinted.ro, RON)",
                "Slovakia (vinted.sk, EUR)",
                "Slovenia (vinted.si, EUR)",
                "Spain (vinted.es, EUR)",
                "Sweden (vinted.se, SEK)",
                "United Kingdom (vinted.co.uk, GBP)",
                "United States (vinted.com, USD)"
              ]
            }
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Vinted limits how many pages one IP address can load, so the Actor uses Apify Proxy by default. Residential proxies are the most reliable.",
            "default": {
              "useApifyProxy": true,
              "apifyProxyGroups": [
                "RESIDENTIAL"
              ]
            }
          },
          "maxConcurrency": {
            "title": "Max concurrency",
            "minimum": 1,
            "maximum": 50,
            "type": "integer",
            "description": "Maximum pages loaded in parallel. Lower it if many requests fail.",
            "default": 10
          },
          "maxRequestRetries": {
            "title": "Max request retries",
            "minimum": 0,
            "maximum": 10,
            "type": "integer",
            "description": "How many times a failed page is retried before it is skipped (blocked requests are retried with a new IP on top of this).",
            "default": 5
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}