{
  "openapi": "3.0.1",
  "info": {
    "title": "Shopify Theme Detector - Find Stores by Theme in Bulk",
    "description": "Find out which theme a Shopify store runs, in bulk. Every record returns the theme family and its Theme Store ID where it has one, alongside store size, country and whether the store is still publishing products - so you can prospect owners of a rival theme or of an ageing free one.",
    "version": "1.0",
    "x-build-id": "tzmvxyuUroTn5F0Ke"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/vonsensey~shopify-theme-detector-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-vonsensey-shopify-theme-detector-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/vonsensey~shopify-theme-detector-scraper/runs": {
      "post": {
        "operationId": "runs-sync-vonsensey-shopify-theme-detector-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/vonsensey~shopify-theme-detector-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-vonsensey-shopify-theme-detector-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": {
          "storeUrls": {
            "title": "Store URLs",
            "type": "array",
            "description": "Shopify stores to qualify, one per line. Accepts a bare domain (example.com), a full URL, or a myshopify handle (brand.myshopify.com). Leave empty to let discovery find stores instead.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "discoverStores": {
            "title": "Discover new stores",
            "type": "boolean",
            "description": "Also find Shopify stores automatically, instead of only qualifying the ones you supply. Discovery is broad rather than keyword-targeted, so narrow it with the filters below. Stores that fail your filters are never charged.",
            "default": true
          },
          "maxStores": {
            "title": "Max stores to deliver",
            "minimum": 1,
            "maximum": 100000,
            "type": "integer",
            "description": "How many qualified store records to return. This is what you pay for — one charge per delivered store.",
            "default": 50
          },
          "maxStoresScanned": {
            "title": "Max stores to check",
            "minimum": 1,
            "maximum": 100000,
            "type": "integer",
            "description": "Ceiling on how many candidates are checked while looking for matches. Raise it when a narrow filter (a small country, a rare keyword) rejects most candidates. Checking is free; only delivered stores are charged.",
            "default": 200
          },
          "discoverySeed": {
            "title": "Discovery seed",
            "minimum": 1,
            "type": "integer",
            "description": "Pin this to get the same discovered stores every run — useful for reproducible tests. Leave empty and each run samples a different slice, so repeat runs bring back new stores instead of the ones you already paid for."
          },
          "ccIndex": {
            "title": "Crawl index (advanced)",
            "type": "string",
            "description": "Pin discovery to one specific web-crawl index, e.g. CC-MAIN-2026-30. Leave empty to draw from the most recent indexes automatically, which is what you want unless you are reproducing an old run."
          },
          "countries": {
            "title": "Countries",
            "type": "array",
            "description": "Only deliver stores based in these countries. Two-letter ISO codes, e.g. US, GB, AU, CA, DE.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "minProducts": {
            "title": "Min products",
            "minimum": 0,
            "type": "integer",
            "description": "Only deliver stores with at least this many published products. Filters out empty and abandoned stores."
          },
          "maxProducts": {
            "title": "Max products",
            "minimum": 0,
            "type": "integer",
            "description": "Only deliver stores with at most this many published products. Useful for targeting small independent brands rather than large retailers."
          },
          "activeWithinDays": {
            "title": "Active within (days)",
            "minimum": 1,
            "type": "integer",
            "description": "Only deliver stores that published a product in the last N days. The strongest signal that a store is still trading. Needs the catalogue, so it requires 'Include catalogue' to stay on."
          },
          "launchedWithinDays": {
            "title": "Launched within (days)",
            "minimum": 1,
            "type": "integer",
            "description": "Only deliver stores that look recently launched, judged by the oldest product they ever published. Turns on the launch-era lookup automatically (one extra request per store). Stores whose catalogue is too large to page to the end are excluded rather than guessed at."
          },
          "keywords": {
            "title": "Must match keywords",
            "type": "array",
            "description": "Only deliver stores whose name, description, domain, vendors or product types contain at least one of these words.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "excludeKeywords": {
            "title": "Exclude keywords",
            "type": "array",
            "description": "Never deliver stores matching any of these words.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "includeCatalog": {
            "title": "Include catalogue",
            "type": "boolean",
            "description": "Adds the last-product date (is this store still active?), price range, vendors and product types. Costs one extra request per store.",
            "default": false
          },
          "includeContacts": {
            "title": "Include contact details",
            "type": "boolean",
            "description": "Adds the store's public contact email, phone and social profiles, taken from the storefront and its published policy pages.",
            "default": false
          },
          "includeTechStack": {
            "title": "Include theme and apps",
            "type": "boolean",
            "description": "Adds the Shopify theme and the apps detected on the storefront — useful for targeting stores that already run (or lack) a given tool.",
            "default": true
          },
          "includeLaunchDate": {
            "title": "Include launch-era estimate",
            "type": "boolean",
            "description": "Adds the oldest published product date as a rough store-age signal. Off by default because it costs one extra request per store.",
            "default": false
          },
          "maxCostUsd": {
            "title": "Max cost (USD)",
            "minimum": 0.01,
            "type": "number",
            "description": "Hard ceiling on what this run may cost, in USD. The run stops cleanly once delivering another store would exceed it. Accepts fractions, e.g. 0.25. Leave empty for no ceiling."
          },
          "maxConcurrency": {
            "title": "Concurrency",
            "minimum": 1,
            "maximum": 30,
            "type": "integer",
            "description": "Parallel stores in flight. Higher is faster; the default is tuned to stay well inside Shopify's rate limits.",
            "default": 10
          },
          "proxyConfiguration": {
            "title": "Proxy",
            "type": "object",
            "description": "Required. Shopify rate-limits by IP, so a run without rotating proxies returns almost nothing. Datacenter proxies are enough — residential is not needed."
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}