{
  "openapi": "3.0.1",
  "info": {
    "title": "Shopify Store Detector: Theme Detector, Apps & Store Checker",
    "description": "Is this site Shopify? Check websites in bulk and find companies using Shopify: myshopify domain, Shopify theme detector (theme name and version), installed Shopify apps, currency, country, email provider and full tech stack. No login, no proxy. $2 per 1,000 sites.",
    "version": "0.1",
    "x-build-id": "sri3uvBWTr1Dxbara"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/redfoxscout~shopify-store-detector/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-redfoxscout-shopify-store-detector",
        "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/redfoxscout~shopify-store-detector/runs": {
      "post": {
        "operationId": "runs-sync-redfoxscout-shopify-store-detector",
        "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/redfoxscout~shopify-store-detector/run-sync": {
      "post": {
        "operationId": "run-sync-redfoxscout-shopify-store-detector",
        "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": {
          "urls": {
            "title": "Websites to check",
            "type": "array",
            "description": "Domains or URLs to scan, one per line. Bare domains like <code>example.com</code> are fine; <code>https://</code> is added automatically. The homepage (or the exact URL you give) is analysed. Or use \"Websites from another Actor\" below.",
            "items": {
              "type": "string"
            }
          },
          "startUrls": {
            "title": "Start URLs (alias)",
            "type": "array",
            "description": "Same as Websites to check above, for tools that send startUrls. Both lists are checked together, each site once. Accepts plain domains or {\"url\": \"...\"} objects.",
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "datasetId": {
            "title": "Websites from another Actor (optional)",
            "type": "string",
            "description": "Check the websites in another Actor run's results, e.g. Google Maps Scraper or any lead list. Pick the dataset here, or in an Actor-to-Actor integration set it to {{resource.defaultDatasetId}}. Its websites are added to the list above."
          },
          "datasetUrlField": {
            "title": "Field with the website",
            "type": "string",
            "description": "The dataset field that holds the website or URL, e.g. website (Google Maps Scraper), url or domain. Dot paths like contact.website work. If it is empty, website, url and domain are tried.",
            "default": "website"
          },
          "maxDatasetItems": {
            "title": "Max dataset rows",
            "minimum": 1,
            "maximum": 1000000,
            "type": "integer",
            "description": "Read at most this many rows from that dataset.",
            "default": 10000
          },
          "monitorName": {
            "title": "Change alert name (optional)",
            "type": "string",
            "description": "Name this list (e.g. \"clients-weekly\") to compare each run with the previous run of the same name. Every row then gets changeStatus (new, changed or unchanged) and changedFields. Best on an Apify schedule."
          },
          "onlyChanges": {
            "title": "Only new and changed sites in the results",
            "type": "boolean",
            "description": "Needs a change alert name. Unchanged sites are still checked and charged as usual, but left out of the results, so each run's dataset is your change report.",
            "default": false
          },
          "checkDns": {
            "title": "Check DNS records",
            "type": "boolean",
            "description": "Look up MX, TXT, NS and SOA records to detect the store's email provider (Google Workspace, Microsoft 365) and verified SaaS tools. Adds about 0.2 s per site.",
            "default": true
          },
          "minConfidence": {
            "title": "Minimum confidence (0-100)",
            "minimum": 0,
            "maximum": 100,
            "type": "integer",
            "description": "Hide detections below this confidence. 50 removes weak single-signal guesses. Use 0 to see everything.",
            "default": 50
          },
          "categoryFilter": {
            "title": "Only these categories",
            "type": "array",
            "description": "Optional. Return only technologies in these categories, e.g. <code>Ecommerce</code>, <code>CMS</code>, <code>Analytics</code>, <code>Marketing automation</code>, <code>Live chat</code>, <code>Payment processors</code>, <code>Email</code>. Case-insensitive. Leave empty for all.",
            "items": {
              "type": "string"
            }
          },
          "readCatalog": {
            "title": "Read the product catalog",
            "type": "boolean",
            "description": "Read the store's public product and collection lists (products.json, collections.json) for product count, price range, store age, collection count and sample products. Adds 2 to 3 requests per Shopify store. Turn off for the fastest run.",
            "default": true
          },
          "maxCatalogPages": {
            "title": "Max catalog pages (250 products each)",
            "minimum": 1,
            "maximum": 40,
            "type": "integer",
            "description": "How many pages of 250 products to read per store. 2 covers up to 500 products; a bigger store is marked with productCountCapped = true, so its counts are a floor. Maximum 40 (10,000 products).",
            "default": 2
          },
          "readContacts": {
            "title": "Read contact details and social links",
            "type": "boolean",
            "description": "Read the email addresses, phone numbers and company social profile links the store publishes on its homepage and, for Shopify stores, its contact page. Adds one request per Shopify store.",
            "default": true
          },
          "includeEvidence": {
            "title": "Include evidence",
            "type": "boolean",
            "description": "Add which signal triggered each detection (header, script URL, meta tag, cookie, DNS record...).",
            "default": true
          },
          "maxConcurrency": {
            "title": "Max concurrency",
            "minimum": 1,
            "maximum": 100,
            "type": "integer",
            "description": "How many sites to fetch in parallel.",
            "default": 20
          },
          "requestTimeoutSecs": {
            "title": "Request timeout (seconds)",
            "minimum": 5,
            "maximum": 120,
            "type": "integer",
            "description": "Give up on a site that takes longer than this to respond.",
            "default": 30
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Optional. Most sites don't need a proxy. Enable if many sites return HTTP 403.",
            "default": {
              "useApifyProxy": false
            }
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}