{
  "openapi": "3.0.1",
  "info": {
    "title": "Shopify Store Scraper - Find Stores, Emails & Tech Stack",
    "description": "Find Shopify stores by keyword, product category, country, rating or launch date. Get verified emails, phone numbers, social profiles, real product counts, price range, store age, Shopify theme and installed apps. Export to CSV, JSON or Excel for lead generation.",
    "version": "1.0",
    "x-build-id": "p9toVehJDJpaXhqD0"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/mukeshrana90~shopify-store-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-mukeshrana90-shopify-store-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/mukeshrana90~shopify-store-scraper/runs": {
      "post": {
        "operationId": "runs-sync-mukeshrana90-shopify-store-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/mukeshrana90~shopify-store-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-mukeshrana90-shopify-store-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": {
          "providers": {
            "title": "Discovery sources",
            "type": "array",
            "description": "Where to find stores. 'shopapp' searches Shopify's own marketplace (best targeting). 'taxonomy' walks the Shopify product category tree for far deeper coverage of a niche. 'domains' skips discovery and just enriches a list you supply. 'iprange' enumerates Shopify-hosted domains by reverse IP (high volume, no targeting). 'serp' finds stores via search engines.",
            "items": {
              "type": "string",
              "enum": [
                "shopapp",
                "taxonomy",
                "domains",
                "iprange",
                "serp"
              ],
              "enumTitles": [
                "Shop.app search (keyword + facets)",
                "Category tree walk (deepest coverage)",
                "My own domain list (enrich only)",
                "Shopify IP range (bulk)",
                "Search engines"
              ]
            },
            "default": [
              "shopapp"
            ]
          },
          "query": {
            "title": "Product keyword",
            "type": "string",
            "description": "What the store sells, e.g. 'organic coffee'. Optional when browsing a category."
          },
          "categoryGid": {
            "title": "Shopify category ID",
            "type": "string",
            "description": "Browse a specific Shopify product taxonomy category, e.g. 'gid://shopify/ProductCategory/251'. Combine with the 'taxonomy' provider to walk every subcategory beneath it."
          },
          "sortBy": {
            "title": "Sort results by",
            "enum": [
              "relevance",
              "most_recent",
              "price_low_to_high",
              "price_high_to_low"
            ],
            "type": "string",
            "description": "'Newest' surfaces recently launched stores — the highest-value segment for agencies and app developers, and something keyword-only tools cannot reach.",
            "default": "relevance"
          },
          "minStoreRating": {
            "title": "Minimum store rating (search filter)",
            "enum": [
              "4",
              "3",
              "2",
              "1"
            ],
            "type": "string",
            "description": "Ask Shop.app for stores rated at least this many stars. Applied during discovery, so it does not waste your result budget."
          },
          "priceMin": {
            "title": "Product price from",
            "type": "integer",
            "description": "Only find stores selling products above this price."
          },
          "priceMax": {
            "title": "Product price to",
            "type": "integer",
            "description": "Only find stores selling products below this price."
          },
          "inStock": {
            "title": "In-stock products only",
            "type": "boolean",
            "description": "Only find stores that currently have the matching products in stock.",
            "default": false
          },
          "onSale": {
            "title": "On-sale products only",
            "type": "boolean",
            "description": "Only find stores with the matching products currently discounted.",
            "default": false
          },
          "shipsTo": {
            "title": "Ships to country",
            "type": "string",
            "description": "ISO country code, e.g. 'US'."
          },
          "maxItems": {
            "title": "Number of qualified stores",
            "minimum": 1,
            "maximum": 20000,
            "type": "integer",
            "description": "How many stores that PASS your filters to return. Stores rejected by filters do not count against this.",
            "default": 50
          },
          "domains": {
            "title": "Your own domains",
            "type": "array",
            "description": "Domains or myshopify handles to enrich, used with the 'domains' provider. Accepts 'acme.com', 'https://acme.com' or a bare 'acme' handle.",
            "items": {
              "type": "string"
            }
          },
          "minProducts": {
            "title": "Minimum products",
            "type": "integer",
            "description": "Real catalog size from the store's own account — not an estimate."
          },
          "maxProducts": {
            "title": "Maximum products",
            "type": "integer",
            "description": "Upper bound on catalog size, from the store's own account record. Useful for excluding large retailers."
          },
          "minStoreAgeMonths": {
            "title": "Minimum store age (months)",
            "type": "integer",
            "description": "Estimated from the oldest published product."
          },
          "maxStoreAgeMonths": {
            "title": "Maximum store age (months)",
            "type": "integer",
            "description": "Set to e.g. 6 to find newly launched stores."
          },
          "allowUnverifiedAge": {
            "title": "Accept unverified store ages",
            "type": "boolean",
            "description": "Store age comes from the oldest product we sampled. On a large catalog we may not have seen the oldest product, so the age is only a lower bound and the store could be older than it looks. By default those are rejected when a maximum age is set; enable this to keep them.",
            "default": false
          },
          "catalogPriceMin": {
            "title": "Minimum median price",
            "type": "integer",
            "description": "Filters on the store's actual median catalog price — a real positioning signal."
          },
          "catalogPriceMax": {
            "title": "Maximum median price",
            "type": "integer",
            "description": "Only keep stores whose median catalog price is at or below this."
          },
          "storeCountry": {
            "title": "Store based in country",
            "type": "string",
            "description": "ISO code, matched against the store's own verified account country."
          },
          "minRating": {
            "title": "Minimum rating",
            "type": "integer",
            "description": "Only keep stores with at least this average product rating (0-5)."
          },
          "requireEmail": {
            "title": "Must have an email",
            "type": "boolean",
            "description": "Only keep stores we found at least one usable email address for.",
            "default": false
          },
          "requirePhone": {
            "title": "Must have a phone",
            "type": "boolean",
            "description": "Only keep stores we found at least one phone number for.",
            "default": false
          },
          "requireAddress": {
            "title": "Must have an address",
            "type": "boolean",
            "description": "Only keep stores with a known business address.",
            "default": false
          },
          "usesApps": {
            "title": "Uses these apps",
            "type": "array",
            "description": "Only keep stores running these apps, e.g. Klaviyo, Recharge, Gorgias, Yotpo, Judge.me, Attentive, Loox, Okendo, Smile.io, PageFly.",
            "items": {
              "type": "string"
            }
          },
          "usesAppsMatchAll": {
            "title": "Must use ALL listed apps",
            "type": "boolean",
            "description": "Require every app listed above rather than any one of them.",
            "default": false
          },
          "excludeApps": {
            "title": "Exclude stores using these apps",
            "type": "array",
            "description": "Useful for finding stores that do NOT yet run your competitor.",
            "items": {
              "type": "string"
            }
          },
          "customThemeOnly": {
            "title": "Custom-built themes only",
            "type": "boolean",
            "description": "A store on a non-Shopify-store theme has usually paid an agency — a budget signal.",
            "default": false
          },
          "minLeadScore": {
            "title": "Minimum lead score (0-100)",
            "type": "integer",
            "description": "Only keep stores scoring at least this on the 0-100 lead score."
          },
          "enrichCatalogue": {
            "title": "Read catalog",
            "type": "boolean",
            "description": "Fetch /products.json for price range, product mix and store age.",
            "default": true
          },
          "enrichTechStack": {
            "title": "Detect theme and apps",
            "type": "boolean",
            "description": "Read the storefront homepage to identify the theme and installed apps.",
            "default": true
          },
          "enrichContactDetails": {
            "title": "Crawl for contacts",
            "type": "boolean",
            "description": "Crawl contact, about and policy pages for emails, phones and socials.",
            "default": true
          },
          "catalogPages": {
            "title": "Catalog pages to sample",
            "minimum": 1,
            "maximum": 20,
            "type": "integer",
            "description": "250 products per page.",
            "default": 2
          },
          "contactPages": {
            "title": "Max contact pages per store",
            "minimum": 0,
            "maximum": 6,
            "type": "integer",
            "description": "How many contact/about/policy pages to try per store when hunting for an email. Set to 0 to use only the homepage.",
            "default": 3
          },
          "skipPreviouslyScraped": {
            "title": "Skip stores from previous runs",
            "type": "boolean",
            "description": "Remembers delivered stores so each run brings new ones. Stored as a readable domain list you can inspect and reuse.",
            "default": false
          },
          "excludeDomains": {
            "title": "Never return these domains",
            "type": "array",
            "description": "Seed from your CRM so you never pay for a lead you already own.",
            "items": {
              "type": "string"
            }
          },
          "resetSeenStores": {
            "title": "Reset run history",
            "type": "boolean",
            "description": "Clear the remembered store history before this run starts.",
            "default": false
          },
          "includeRejected": {
            "title": "Also output filtered-out stores",
            "type": "boolean",
            "description": "Includes rejected stores with the reasons, for tuning your filters.",
            "default": false
          },
          "disableBilling": {
            "title": "Disable pay-per-event charging",
            "type": "boolean",
            "description": "Skip all pay-per-event charges for this run. Useful for testing the Actor without incurring lead charges.",
            "default": false
          },
          "keepUnverified": {
            "title": "Keep stores we could not verify",
            "type": "boolean",
            "description": "Some storefronts sit behind bot protection and answer nothing. Off by default they are dropped; on, they are returned with verificationStatus 'blocked' so you can decide.",
            "default": false
          },
          "enrichmentConcurrency": {
            "title": "Enrichment concurrency",
            "minimum": 1,
            "maximum": 30,
            "type": "integer",
            "description": "How many stores to enrich in parallel. Raise for speed, lower to be gentler on storefronts.",
            "default": 8
          },
          "shopAppDelayMs": {
            "title": "Shop.app request delay (ms)",
            "minimum": 100,
            "maximum": 10000,
            "type": "integer",
            "description": "Shop.app rate-limits by IP. Raise this if you see throttling.",
            "default": 400
          },
          "ipRangeMaxPages": {
            "title": "IP-range pages per address",
            "minimum": 1,
            "maximum": 100,
            "type": "integer",
            "description": "How many listing pages to read per Shopify IP address when using the ip-range provider.",
            "default": 10
          },
          "serpMaxQueries": {
            "title": "Max search-engine queries",
            "minimum": 1,
            "maximum": 20,
            "type": "integer",
            "description": "How many distinct search-engine queries to run when using the serp provider.",
            "default": 3
          },
          "proxyConfiguration": {
            "title": "Proxy",
            "type": "object",
            "description": "Residential proxies are strongly recommended — Shop.app rate-limits by IP.",
            "default": {
              "useApifyProxy": true,
              "apifyProxyGroups": [
                "RESIDENTIAL"
              ]
            }
          },
          "storefrontProxyMode": {
            "title": "Proxy usage for storefront requests",
            "enum": [
              "auto",
              "always",
              "never"
            ],
            "type": "string",
            "description": "Residential proxy traffic is billed per gigabyte and storefront payloads are large, so proxying every catalog fetch multiplies your cost for no benefit. 'Auto' goes direct and falls back to the proxy only for storefronts that actually block us. Shop.app search always uses the proxy regardless.",
            "default": "auto"
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}