{
  "openapi": "3.0.1",
  "info": {
    "title": "Shopify Store Analyzer: Apps, Theme & Tech Stack",
    "description": "Analyze any Shopify store by domain: installed apps with evidence, free or paid theme, catalog size, prices, pixels and markets. Pay per store analyzed.",
    "version": "1.4",
    "x-build-id": "lOaxf32TRgi9uWfsh"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/maxbuildog~shopify-store-analyzer/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-maxbuildog-shopify-store-analyzer",
        "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/maxbuildog~shopify-store-analyzer/runs": {
      "post": {
        "operationId": "runs-sync-maxbuildog-shopify-store-analyzer",
        "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/maxbuildog~shopify-store-analyzer/run-sync": {
      "post": {
        "operationId": "run-sync-maxbuildog-shopify-store-analyzer",
        "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 domains or URLs",
            "maxItems": 200000,
            "type": "array",
            "description": "Domains or URLs of the stores to analyze, one per line, for example `allbirds.com` or `https://www.gymshark.com`. A line copied from a spreadsheet or an email is cleaned (quotes, angle brackets, punctuation at the end, a Markdown link, a label such as `Website: allbirds.com`, a URL encoded as a whole), and a line that holds several domains separated by commas, semicolons, bars or spaces gives one row per domain. Scheme, www, case, paths and query strings are ignored: entries that are the same store are merged before anything is fetched, so you get one row per distinct store. Every distinct store that is not billed (not Shopify, unreachable, password protected, closed, blocked, headless without a public catalog, data that could not be read completely, or a second entry that redirected to a store already analyzed) still gets a row with the matching `status`. Can be left empty when a dataset is given below.",
            "items": {
              "type": "string"
            }
          },
          "datasetId": {
            "title": "Read the domains from a dataset (optional)",
            "type": "string",
            "description": "ID or name of a dataset, for example the output of another Actor that finds or lists stores, or of an earlier run of this one. The domain of each item is read from the field below and added to the store domains above (duplicates are merged). Up to 200,000 items are read."
          },
          "domainField": {
            "title": "Field of the dataset items that holds the domain",
            "type": "string",
            "description": "Name of the field that holds the domain or URL in the items of the dataset above, with dots for a nested field (`store.url`). When empty, the first of these fields that holds a text is used: domain, url, website, storeUrl, shopUrl, inputUrl, finalUrl, homepage, link."
          },
          "appsToMatch": {
            "title": "Apps to look for (optional)",
            "type": "array",
            "description": "App ids or names to look for, for example `judgeme` or `Klaviyo` (case, spaces and punctuation are ignored; a name must be the whole name of the app, not a part of it). Each row then says which of them were detected (`matchedApps`) and whether at least one was (`hasMatchedApp`); open the Apps to match view to filter. It changes nothing to the analysis or to the price.",
            "items": {
              "type": "string"
            }
          },
          "maxProductsToScan": {
            "title": "Max products to read per store",
            "minimum": 1,
            "maximum": 5000,
            "type": "integer",
            "description": "How many products to read from each store's public product feed to compute prices, discounts, stock and dates. The total product count does not depend on this value when the store exposes it (`catalog.productCountMethod` says how it was obtained). When a catalog is larger than this value, price statistics and dates are computed on the products read (`catalog.scanIsComplete` is false). Reading more is slower and returns bigger payloads (250 is one request). Above 1000 products per store, concurrency is lowered to 3 and a memory setting of 2048 MB is advised.",
            "default": 250
          },
          "includeProducts": {
            "title": "Include a product sample",
            "type": "boolean",
            "description": "Add a `productsSample` field to each row with the first products of the feed (title, URL, vendor, price, availability, dates, image).",
            "default": false
          },
          "productsSampleSize": {
            "title": "Product sample size",
            "minimum": 1,
            "maximum": 50,
            "type": "integer",
            "description": "How many products to include in `productsSample` when the option above is enabled (50 at most: each product takes 12 columns in a CSV or Excel export, and Apify exports at most 2,000 columns).",
            "default": 20
          },
          "maxConcurrency": {
            "title": "Max stores in parallel",
            "minimum": 1,
            "maximum": 30,
            "type": "integer",
            "description": "How many stores to analyze at the same time. Requests to one store are always rate limited (about 2 per second for JSON endpoints and 1 per second for pages), so a higher value only helps with long lists. The default memory (1024 MB) is sized for 10 to 20 stores in parallel at 250 products each.",
            "default": 10
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Optional. No proxy is used by default. Enable it if many stores answer `blocked`, which usually means the platform's datacenter IPs were challenged.",
            "default": {}
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}