{
  "openapi": "3.0.1",
  "info": {
    "title": "Etsy Scraper — Listings, Carts, Ad Slots, Reviews & Emails",
    "description": "Live Etsy buyer demand per listing: in-cart counts, paid ad slots and organic rank, plus prices and variations. Opt-in shop reviews are one billed row each (rating, text, reviewer, listing). Search with Etsy's filters or paste any URL. Seller enrichment adds sales, email and payment stack.",
    "version": "0.0",
    "x-build-id": "p1JelthjPcFoV8HON"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/memo23~etsy-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-memo23-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/memo23~etsy-scraper/runs": {
      "post": {
        "operationId": "runs-sync-memo23-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/memo23~etsy-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-memo23-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",
        "properties": {
          "startUrls": {
            "title": "Etsy URLs",
            "type": "array",
            "description": "Etsy URLs to scrape — mix any of these four formats freely (one of each is prefilled as an example):<br><br>• <b>Any product</b> — <code>https://www.etsy.com/listing/{id}/...</code><br>• <b>Any category</b> — <code>https://www.etsy.com/c/...</code> (apply filters on Etsy, then copy the URL)<br>• <b>Keyword search</b> — <code>https://www.etsy.com/search?q=...</code><br>• <b>Any Etsy shop</b> — <code>https://www.etsy.com/shop/{name}</code>",
            "items": {
              "type": "string"
            }
          },
          "searchQuery": {
            "title": "Search keyword (optional)",
            "type": "string",
            "description": "A keyword to search Etsy for, e.g. \"ceramic mug\". Turned into an etsy.com/search URL and paginated. Use instead of, or alongside, startUrls."
          },
          "searchQueries": {
            "title": "Search keywords",
            "type": "array",
            "description": "Run several keyword searches in one go — each becomes its own Etsy search. Combined with the single <b>Search query</b> field above and de-duplicated.",
            "items": {
              "type": "string"
            }
          },
          "country": {
            "title": "Ship-to market",
            "type": "string",
            "description": "Two-letter market code (<code>US</code>, <code>GB</code>, <code>DE</code>…). Applied to keyword searches as Etsy's <code>ship_to</code> facet, so you only get shops that ship there. Pasted start URLs keep their own parameters."
          },
          "sort": {
            "title": "Sort results",
            "enum": [
              "most_relevant",
              "highest_reviews",
              "date_desc",
              "price_asc",
              "price_desc"
            ],
            "type": "string",
            "description": "Order Etsy applies to keyword searches before we read the page. Pasted start URLs keep their own <code>order=</code>.",
            "default": "most_relevant"
          },
          "minPrice": {
            "title": "Min price",
            "minimum": 0,
            "type": "integer",
            "description": "Lower price bound in the market's currency (Etsy's <code>min=</code> facet)."
          },
          "maxPrice": {
            "title": "Max price",
            "minimum": 0,
            "type": "integer",
            "description": "Upper price bound (Etsy's <code>max=</code> facet)."
          },
          "onSaleOnly": {
            "title": "On sale only",
            "type": "boolean",
            "description": "Only listings currently discounted.",
            "default": false
          },
          "freeShippingOnly": {
            "title": "Free shipping only",
            "type": "boolean",
            "description": "Only listings with free shipping to the ship-to market.",
            "default": false
          },
          "digitalOnly": {
            "title": "Digital downloads only",
            "type": "boolean",
            "description": "Only instant-download listings (printables, templates, fonts).",
            "default": false
          },
          "starSellerOnly": {
            "title": "Star Seller shops only",
            "type": "boolean",
            "description": "Only listings from shops holding Etsy's Star Seller badge.",
            "default": false
          },
          "bestsellerOnly": {
            "title": "Bestsellers only",
            "type": "boolean",
            "description": "Only listings Etsy badges as Bestseller.",
            "default": false
          },
          "personalizableOnly": {
            "title": "Personalizable only",
            "type": "boolean",
            "description": "Only listings the buyer can personalize (names, dates, text).",
            "default": false
          },
          "maxItems": {
            "title": "Maximum products",
            "minimum": 1,
            "type": "integer",
            "description": "Hard cap on the number of products collected across all start URLs and searches together. With several of them, each gets an equal share first, and what one does not use goes to the others. Use this to control billing.",
            "default": 1000
          },
          "maxConcurrency": {
            "title": "Max concurrency",
            "minimum": 1,
            "type": "integer",
            "description": "Product pages fetched in parallel through the managed unblocker. Keep moderate (3–8); each page is one unblocker request.",
            "default": 5
          },
          "includeReviews": {
            "title": "Include sample reviews",
            "type": "boolean",
            "description": "Include the recent customer reviews carried in each listing's structured data (author, rating, text, date).",
            "default": true
          },
          "enrichSeller": {
            "title": "Enrich with shop/seller data (sales, star-seller, listings)",
            "type": "boolean",
            "description": "Fetch each unique shop's page to add lifetime sales count, Star-Seller status, total listings, shop rating, and shop description/slogan. One extra request per shop (cached, so a shop is fetched at most once per run).",
            "default": false
          },
          "shopDetails": {
            "title": "Shop details row (one row per shop URL)",
            "type": "boolean",
            "description": "For every shop URL in your input, emit one dedicated shop row (rowType: \"shop\") with the shop's name, lifetime sales, rating + review count, total listings, Star-Seller status, slogan, description and logo — before its products are crawled. Paste only shop URLs with Maximum products = 1 per shop to run this as a pure shop-details scraper.",
            "default": false
          },
          "enrichEmails": {
            "title": "Enrich with seller contact emails (experimental, billed per email)",
            "type": "boolean",
            "description": "Best-effort: discover each shop's own website (from its name + country) and harvest a contact email. Adds contactEmail, contactWebsite and a detailed emailEnrichment object. Billed per email found — never charged for misses.",
            "default": false
          },
          "qualifyByPayment": {
            "title": "💳 Qualify by payment (flag businesses that take money online)",
            "type": "boolean",
            "description": "Requires \"Enrich with contact emails\". Scans each business's website — reusing the pages already fetched for email discovery, so no extra cost or time — for payment processors and e-commerce platforms (Stripe, Shopify, PayPal, Paddle, Lemon Squeezy, WooCommerce, Square, Chargebee and more). Adds takesPayments (is this a real paying business?), paymentProcessors (which stack), stripeLiveKey (the public key if exposed) and paymentConfidence. Turn raw contacts into monetization-qualified leads. No extra charge — included with each enriched company.",
            "default": false
          },
          "proxy": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Proxy used for the direct enrichment fetches (e.g. seller email discovery). Etsy product/shop pages are fetched through a built-in managed unblocker, so this setting does not affect them. Paying users are routed through a premium residential pool automatically.",
            "default": {
              "useApifyProxy": true
            }
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}