{
  "openapi": "3.0.1",
  "info": {
    "title": "Etsy Scraper: Search, Listings, Shops & Reviews",
    "description": "Scrape Etsy search results and full product details: prices, ratings, images, and every variation. Pull shop and seller profiles with sales and admirers, and every review for a listing or a whole shop, thousands, not just the first page. Export to JSON, CSV, Excel.",
    "version": "0.0",
    "x-build-id": "oiGiNsAkZFWhaQTS4"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/sourabhbgp~etsy-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-sourabhbgp-etsy-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/sourabhbgp~etsy-scraper/runs": {
      "post": {
        "operationId": "runs-sync-sourabhbgp-etsy-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/sourabhbgp~etsy-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-sourabhbgp-etsy-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",
              "listing",
              "shop",
              "reviews",
              "keyword"
            ],
            "type": "string",
            "description": "What to scrape. Fill the section(s) for that mode below; the other modes' sections are ignored.",
            "default": "search"
          },
          "searchQueries": {
            "title": "Search queries",
            "type": "array",
            "description": "One or more search terms, e.g. \"leather wallet\".",
            "items": {
              "type": "string"
            }
          },
          "sortBy": {
            "title": "Sort by",
            "enum": [
              "relevancy",
              "price_asc",
              "price_desc",
              "most_recent",
              "highest_reviews"
            ],
            "type": "string",
            "description": "Result ordering. Note that any order other than Relevancy asks Etsy for genuine matches only: Etsy pads a Relevancy search with loosely related listings, and sorting turns that padding off. A term with no real matches can therefore return a full page on Relevancy and zero rows when sorted.",
            "default": "relevancy"
          },
          "includeDetails": {
            "title": "Include full listing details",
            "type": "boolean",
            "description": "Also fetch each listing's page and add the listing-mode fields to its search row: favourites, reviews, sales, badges, demand signals, variations and more. Same price per row. Adds about 1 to 2 seconds per listing.",
            "default": false
          },
          "minPrice": {
            "title": "Min price",
            "minimum": 0,
            "type": "integer",
            "description": "Minimum listing price filter. Leave empty for no minimum."
          },
          "maxPrice": {
            "title": "Max price",
            "minimum": 0,
            "type": "integer",
            "description": "Maximum listing price filter. Leave empty for no maximum."
          },
          "freeShippingOnly": {
            "title": "Free shipping only",
            "type": "boolean",
            "description": "Only return listings that ship free.",
            "default": false
          },
          "starSellerOnly": {
            "title": "Star Seller shops only",
            "type": "boolean",
            "description": "Only listings from Star Sellers, Etsy's badge for shops with great service.",
            "default": false
          },
          "onSaleOnly": {
            "title": "On sale only",
            "type": "boolean",
            "description": "Only listings that are on sale right now.",
            "default": false
          },
          "digitalOnly": {
            "title": "Digital downloads only",
            "type": "boolean",
            "description": "Only digital downloads.",
            "default": false
          },
          "personalizableOnly": {
            "title": "Personalizable only",
            "type": "boolean",
            "description": "Only listings the buyer can personalize.",
            "default": false
          },
          "etsysPickOnly": {
            "title": "Etsy's Picks only",
            "type": "boolean",
            "description": "Only listings Etsy's editors picked.",
            "default": false
          },
          "itemType": {
            "title": "Item type",
            "enum": [
              "vintage",
              "supplies"
            ],
            "type": "string",
            "description": "Only vintage items, or only craft supplies. Leave empty for all items. When set, Category is not applied."
          },
          "category": {
            "title": "Category",
            "pattern": "^(https?://(www\\.)?etsy\\.com/([a-z]{2}/)?c/)?[a-z0-9-]+(/[a-z0-9-]+)*/?([?#].*)?$",
            "type": "string",
            "description": "Search inside one Etsy category: its path, for example bags-and-purses/wallets-and-money-clips, or a category link such as https://www.etsy.com/c/bags-and-purses/wallets-and-money-clips. Not applied together with Item type: when both are set, only the item type is used."
          },
          "shipsTo": {
            "title": "Ships to country",
            "pattern": "^[A-Z]{2}$",
            "type": "string",
            "description": "Only listings that ship to this country, as a two-letter code, for example GB or DE."
          },
          "shopLocation": {
            "title": "Shop location",
            "enum": [
              "US",
              "GB",
              "CA",
              "AU",
              "DE",
              "FR",
              "IN",
              "IT",
              "ES",
              "NL",
              "IE",
              "JP",
              "BR",
              "MX",
              "NZ",
              "PL",
              "TR"
            ],
            "type": "string",
            "description": "Only listings from shops located in this country."
          },
          "listingUrls": {
            "title": "Listing URLs or IDs",
            "type": "array",
            "description": "Etsy listing URLs (https://www.etsy.com/listing/<id>/...) or bare numeric listing IDs.",
            "items": {
              "type": "string"
            }
          },
          "shopNames": {
            "title": "Shop names or URLs",
            "type": "array",
            "description": "Etsy shop names (e.g. Walletree) or shop URLs (https://www.etsy.com/shop/Walletree). Listing preview prices are always in USD.",
            "items": {
              "type": "string"
            }
          },
          "includeShopListings": {
            "title": "Add every listing in the shop",
            "type": "boolean",
            "description": "Also return one row per listing in each shop, every listing, not just the first page: id, title, price, original price, URL and image. Each listing row is charged as one result. maxItems counts these rows too.",
            "default": false
          },
          "shopListingsQuery": {
            "title": "Search inside the shop",
            "type": "string",
            "description": "With Add every listing in the shop on: only listings in the shop that match this search, for example board."
          },
          "reviewScope": {
            "title": "Review scope",
            "enum": [
              "listing",
              "shop"
            ],
            "type": "string",
            "description": "Per-listing reviews, or every review across an entire shop.",
            "default": "listing"
          },
          "reviewSources": {
            "title": "Review sources",
            "type": "array",
            "description": "For scope Listing: listing URLs or IDs. For scope Shop: shop names or shop URLs.",
            "items": {
              "type": "string"
            }
          },
          "reviewSort": {
            "title": "Review sort",
            "enum": [
              "relevancy",
              "recency",
              "highest",
              "lowest"
            ],
            "type": "string",
            "description": "Review ordering.",
            "default": "relevancy"
          },
          "reviewRating": {
            "title": "Star rating",
            "minimum": 1,
            "maximum": 5,
            "type": "integer",
            "description": "Only reviews with this many stars, 1 to 5. Leave empty for all reviews."
          },
          "keywords": {
            "title": "Keywords",
            "type": "array",
            "description": "Seed terms to get Etsy search suggestions / related keywords for.",
            "items": {
              "type": "string"
            }
          },
          "maxItems": {
            "title": "Max items",
            "minimum": 1,
            "type": "integer",
            "description": "Stop after this many result rows (across all inputs). Leave empty for no cap. Reviews mode counts each review as a row."
          },
          "proxyConfiguration": {
            "title": "Proxy",
            "type": "object",
            "description": "Proxies are included and handled for you, escalating to residential when a page needs it. Set the country to choose which Etsy locale and currency you get (Shop mode previews are always USD). Defaults to the US. You can instead supply your own proxy URLs, in which case the run uses only those and the country setting no longer applies, since your proxy decides the country.",
            "default": {
              "useApifyProxy": true,
              "apifyProxyGroups": [
                "RESIDENTIAL"
              ],
              "apifyProxyCountry": "US"
            }
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}