{
  "openapi": "3.0.1",
  "info": {
    "title": "Shopify Products Scraper By Collection & Keyword",
    "description": "Shopify Products Scraper by Collection & Keyword extracts product data from Shopify stores using collections and keyword searches. Collect product names, prices, descriptions, SKUs, variants, images, availability, and URLs for ecommerce research and competitor analysis.",
    "version": "0.1",
    "x-build-id": "QKdaGPvSHHkJyYGCm"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/api-empire~shopify-products-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-api-empire-shopify-products-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/api-empire~shopify-products-scraper/runs": {
      "post": {
        "operationId": "runs-sync-api-empire-shopify-products-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/api-empire~shopify-products-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-api-empire-shopify-products-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": "🛍️ Shopify Store URLs",
            "type": "array",
            "description": "One or more Shopify storefront URLs, e.g. https://deathwishcoffee.com. Collection URLs and product URLs entered further down are resolved to their store automatically, so this field can stay empty if you only use those.",
            "items": {
              "type": "string"
            }
          },
          "catalogueSource": {
            "title": "🎯 What to pull",
            "enum": [
              "store",
              "collections",
              "keyword",
              "productUrls"
            ],
            "type": "string",
            "description": "Chooses where products come from. Whole store = every published product. Specific collections = only the products inside the collections you name. In-store keyword search = only what the store's own product search returns for your terms. Specific product URLs = only the products you list. Default is the whole store."
          },
          "collectionHandles": {
            "title": "📚 Collection handles",
            "type": "array",
            "description": "Collection handles to pull products from, e.g. accessories, coffee-mugs. Used when the scope is 'Specific collections only'. Example: accessories -> only the products inside that collection.",
            "items": {
              "type": "string"
            }
          },
          "collectionUrls": {
            "title": "📚 Collection URLs",
            "type": "array",
            "description": "Full collection URLs, e.g. https://deathwishcoffee.com/collections/accessories. The store is taken from the URL, so a store URL above is optional when you use this.",
            "items": {
              "type": "string"
            }
          },
          "attachCollectionMembership": {
            "title": "🔗 Join collection membership onto every product row",
            "type": "boolean",
            "description": "Adds collections, collectionTitles, collectionCount and primaryCollection to each product row, so you can see every collection a product sits in. Turn it off for a faster run; the four fields are then left empty rather than guessed. Default is on."
          },
          "emitCollectionRows": {
            "title": "📇 Also emit one row per collection",
            "type": "boolean",
            "description": "Adds rows of type 'collection' carrying the collection id, handle, title, description, image URL, dates, the product count the store reports and the product count actually observed in this run. Default is on."
          },
          "maxCollectionsToScan": {
            "title": "🔢 Max collections to read per store",
            "minimum": 0,
            "type": "integer",
            "description": "Caps how many of the store's collections are read when building membership. 0 = all of them. Stores can publish well over a thousand collections, so a cap keeps the run short; when the cap bites, membershipComplete on every product row is false. Default is 150."
          },
          "searchTerms": {
            "title": "🔍 In-store search terms",
            "type": "array",
            "description": "Keywords to run through the store's own product search, e.g. mug, cold brew. Used when the scope is 'In-store keyword search'. Each term is a separate search and every resulting row records which term found it.",
            "items": {
              "type": "string"
            }
          },
          "maxMatchesPerTerm": {
            "title": "🔢 Max matches per search term",
            "minimum": 1,
            "maximum": 10,
            "type": "integer",
            "description": "How many product matches to keep for each term. A Shopify storefront's own product search returns at most 10 matches per term, so values above 10 are treated as 10. Example: 3 -> the three best matches for every term. Default is 10."
          },
          "productUrls": {
            "title": "🔗 Product URLs",
            "type": "array",
            "description": "Full product URLs, e.g. https://deathwishcoffee.com/products/ride-or-die-mug. Used when the scope is 'Specific product URLs only'. The store is taken from the URL.",
            "items": {
              "type": "string"
            }
          },
          "maxProductsPerSource": {
            "title": "📦 Max products per source",
            "minimum": 0,
            "type": "integer",
            "description": "Caps how many products are returned per store, per collection or per search term. 0 = no cap. Example: 50 with three collections -> up to 150 product rows. Default is 200."
          },
          "maxItems": {
            "title": "📦 Max products per source (legacy key)",
            "minimum": 0,
            "type": "integer",
            "description": "Kept so input built for the original Shopify Products Scraper keeps working. Identical to 'Max products per source' above, which wins when both are set."
          },
          "proxyConfiguration": {
            "title": "🌐 Connection",
            "type": "object",
            "description": "Optional connection settings for reaching the storefront. Leave as-is unless a store is unreachable from the default route."
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}