{
  "openapi": "3.0.1",
  "info": {
    "title": "Shopify App Store Scraper — Apps, Pricing Plans & Reviews",
    "description": "Scrape the Shopify App Store: apps with rating, review count, rating breakdown, pricing plans, categories, features, languages, integrations, developer and launch date, plus merchant reviews with developer replies. By app URL, category, developer or the whole store. No login.",
    "version": "0.1",
    "x-build-id": "6LTNdHpXjTEfVbV3i"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/yugenox~shopify-app-store-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-yugenox-shopify-app-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/yugenox~shopify-app-store-scraper/runs": {
      "post": {
        "operationId": "runs-sync-yugenox-shopify-app-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/yugenox~shopify-app-store-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-yugenox-shopify-app-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": {
          "appUrls": {
            "title": "🔗 App URLs or handles",
            "type": "array",
            "description": "Shopify App Store app pages, e.g. https://apps.shopify.com/klaviyo-email-marketing, or just the handle (klaviyo-email-marketing). Category and developer links pasted here are recognised too.",
            "items": {
              "type": "string"
            }
          },
          "categories": {
            "title": "🗂️ Categories",
            "type": "array",
            "description": "Category links (https://apps.shopify.com/categories/store-design-seo), handles (store-design-seo) or names (\"Email marketing\", \"Upsell and bundles\", \"Product reviews\"). Every app the category lists is saved, in the category's own order (its rank is in \"position\").",
            "items": {
              "type": "string"
            }
          },
          "developers": {
            "title": "👩‍💻 Developers",
            "type": "array",
            "description": "Developer (partner) pages, e.g. https://apps.shopify.com/partners/klaviyo, or just the partner handle (klaviyo). Every app the developer publishes is saved.",
            "items": {
              "type": "string"
            }
          },
          "allApps": {
            "title": "Whole store (all apps)",
            "type": "boolean",
            "description": "Every app listed on the Shopify App Store (about 29,000). Combine with \"Only new apps\" to get only apps launched since your last run. A full crawl takes about an hour (the default Timeout is 2 hours; raise it when you also want reviews).",
            "default": false
          },
          "maxApps": {
            "title": "Max apps",
            "minimum": 0,
            "maximum": 50000,
            "type": "integer",
            "description": "Maximum number of apps for the whole run, shared fairly between your categories and developers. 0 = no limit.",
            "default": 100
          },
          "scrapeAppDetails": {
            "title": "Scrape app details",
            "type": "boolean",
            "description": "Open every app's page for the full details: pricing plans, rating breakdown, categories and features, languages, integrations, developer, launch date, data access. Turn off to save only what category and developer listings show (name, rating, review count, pricing summary, tagline, Built for Shopify, position). App URLs and the whole store always open the app page.",
            "default": true
          },
          "includeReviews": {
            "title": "Include reviews",
            "type": "boolean",
            "description": "Also save each app's merchant reviews: rating, date, text, store name, store country, time using the app and the developer's reply. Reviews are separate rows (type \"review\").",
            "default": false
          },
          "maxReviewsPerApp": {
            "title": "Max reviews per app",
            "minimum": 0,
            "maximum": 100000,
            "type": "integer",
            "description": "Maximum reviews per app. 0 = all of them.",
            "default": 100
          },
          "reviewsSort": {
            "title": "Sort reviews by",
            "enum": [
              "newest",
              "relevance"
            ],
            "type": "string",
            "description": "Newest first (default) or the Shopify App Store's \"Most relevant\" order.",
            "default": "newest"
          },
          "reviewRatings": {
            "title": "Only these star ratings",
            "type": "array",
            "description": "Only reviews with these star ratings, e.g. 1 and 2 for complaints. Empty = all ratings.",
            "items": {
              "type": "string",
              "enum": [
                "1",
                "2",
                "3",
                "4",
                "5"
              ],
              "enumTitles": [
                "1 star",
                "2 stars",
                "3 stars",
                "4 stars",
                "5 stars"
              ]
            }
          },
          "reviewsNewerThan": {
            "title": "Reviews newer than",
            "type": "string",
            "description": "Only reviews from this date on: a date (2026-10-01) or a period (7 days, 4 weeks, 6 months, 1 year). Older pages are not read."
          },
          "onlyNewReviews": {
            "title": "Only new reviews",
            "type": "boolean",
            "description": "Skip reviews that an earlier run with the same review settings already saved (they are not charged). Ideal for a daily or weekly review monitor.",
            "default": false
          },
          "onlyNewApps": {
            "title": "Only new apps",
            "type": "boolean",
            "description": "For categories, developers and the whole store: skip apps that an earlier run with the same input already saved (not fetched, not charged). Apps you list under App URLs are always scraped.",
            "default": false
          },
          "proxyConfiguration": {
            "title": "Proxy",
            "type": "object",
            "description": "Apify Proxy (datacenter) is the default and comes with every Apify plan. If the Shopify App Store keeps rate-limiting datacenter IPs, the run switches to residential proxies when your account has them.",
            "default": {
              "useApifyProxy": true
            }
          },
          "_noResidential": {
            "title": "Run as an account without residential proxies",
            "type": "boolean",
            "description": "Internal (canaries): behave exactly like an account without the RESIDENTIAL proxy group.",
            "default": 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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}