{
  "openapi": "3.0.1",
  "info": {
    "title": "Shopee Scraper - Full Product Detail | 💵$5/1K",
    "description": "[💵 $5 / 1K, no start fee] Scrape Shopee products in all 11 countries: price, rating, seller, description, brand, attributes, every variant and the full image gallery. Search by keyword, category, shop or link. No account needed.",
    "version": "0.1",
    "x-build-id": "yJPGUFfuITGemaxZo"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/webdata_labs~shopee-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-webdata_labs-shopee-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/webdata_labs~shopee-scraper/runs": {
      "post": {
        "operationId": "runs-sync-webdata_labs-shopee-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/webdata_labs~shopee-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-webdata_labs-shopee-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": "Shopee keywords to scrape. Each keyword is paged and re-sorted independently until it runs out of new products, and every row is tagged with the keyword it came from.",
            "items": {
              "type": "string"
            }
          },
          "startUrls": {
            "title": "Shopee URLs",
            "type": "array",
            "description": "Any mix of Shopee product, search, category or shop URLs. The country is taken from each URL's domain, so a shopee.sg link is scraped against Singapore even when the market below says Indonesia.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "country": {
            "title": "Shopee market",
            "enum": [
              "id",
              "sg",
              "my",
              "th",
              "ph",
              "vn",
              "br",
              "tw",
              "mx",
              "co",
              "cl"
            ],
            "type": "string",
            "description": "Which Shopee country site keywords are searched on. Prices come back in that market's currency.",
            "default": "id"
          },
          "maxItemsPerSource": {
            "title": "Max products per keyword / URL",
            "minimum": 0,
            "type": "integer",
            "description": "How many products to return for each keyword or URL. Set 0 for no limit. You are billed per product, so a large number means a large bill.",
            "default": 50
          },
          "fullDetail": {
            "title": "Full detail (variants, attributes, gallery)",
            "type": "boolean",
            "description": "Adds a second request per product to pull brand ID, product attributes, variant tiers and model list, the full image gallery and the category path. Roughly doubles runtime; price, rating and seller data are returned either way.",
            "default": false
          },
          "sort": {
            "title": "Sort order",
            "enum": [
              "relevancy",
              "sales",
              "latest",
              "price_asc",
              "price_desc"
            ],
            "type": "string",
            "description": "Sort order to start from. Once it stops yielding new products the Actor cycles through the other sort orders, which is how one keyword reaches several hundred products instead of one page.",
            "default": "relevancy"
          },
          "minPrice": {
            "title": "Minimum price",
            "minimum": 0,
            "type": "integer",
            "description": "Lower price bound in the market's own currency, applied by Shopee before we scrape. Leave empty for no bound."
          },
          "maxPrice": {
            "title": "Maximum price",
            "minimum": 0,
            "type": "integer",
            "description": "Upper price bound in the market's own currency, applied by Shopee before we scrape. Leave empty for no bound."
          },
          "mallOnly": {
            "title": "Shopee Mall sellers only",
            "type": "boolean",
            "description": "Restrict keyword searches to Shopee Mall (official brand and retailer stores).",
            "default": false
          },
          "includeSellerProfile": {
            "title": "Include full seller profile",
            "type": "boolean",
            "description": "Adds follower count, item count, response rate, verification badges and join date for each seller, as a nested shop object. One extra request per unique shop, not per product.",
            "default": false
          },
          "includeItemsWithoutPrice": {
            "title": "Keep products Shopee shows no price for",
            "type": "boolean",
            "description": "Shopee serves no public price page for a minority of live products. By default those are skipped and replaced with other products, so you are never billed for a row without a price. Turn this on to receive them anyway with everything except price and rating.",
            "default": false
          },
          "delayMs": {
            "title": "Delay between requests (ms)",
            "minimum": 0,
            "maximum": 10000,
            "type": "integer",
            "description": "Optional pause before each request. The Actor already rotates proxy sessions and retries on refusal, so leave this at 0 unless you are running many keywords and want to be gentler.",
            "default": 0
          }
        }
      },
      "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
                  }
                }
              },
              "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}