{
  "openapi": "3.0.1",
  "info": {
    "title": "Shopify App Store Scraper: Apps, Rankings and Reviews",
    "description": "Returns Shopify App Store data: app details (developer, rating, reviews, pricing plans, categories, launch date, languages, Built for Shopify badge), category rankings with position changes, and merchant reviews with store name, country and developer replies.",
    "version": "1.0",
    "x-build-id": "9AAcrg08YFfdGBFty"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/agents001~shopify-app-store-feed/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-agents001-shopify-app-store-feed",
        "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/agents001~shopify-app-store-feed/runs": {
      "post": {
        "operationId": "runs-sync-agents001-shopify-app-store-feed",
        "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/agents001~shopify-app-store-feed/run-sync": {
      "post": {
        "operationId": "run-sync-agents001-shopify-app-store-feed",
        "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": {
          "apps": {
            "title": "Apps",
            "type": "array",
            "description": "App handles or App Store links, for example 'judgeme' or 'https://apps.shopify.com/klaviyo-email-marketing'. The handle is the part of the link after apps.shopify.com/. Returns one app record per app and, if reviews are switched on, its reviews.",
            "items": {
              "type": "string"
            }
          },
          "categories": {
            "title": "Categories to rank",
            "type": "array",
            "description": "Category handles or links, for example 'marketing-and-conversion-social-trust-product-reviews' or 'https://apps.shopify.com/categories/store-design-site-optimization-seo'. Returns the ranked app list in the order the App Store shows it. Use subcategories: top-level categories such as 'marketing-and-conversion' have no ranked list.",
            "items": {
              "type": "string"
            }
          },
          "keywords": {
            "title": "Keywords (filter rankings)",
            "type": "array",
            "description": "Only return ranked apps whose name, tagline or handle contains any of these words, for example 'google' or 'loyalty'. Positions stay the real positions in the category. This filters category rankings; the Actor does not use the App Store search page because its robots.txt disallows it.",
            "items": {
              "type": "string"
            }
          },
          "includeAppDetails": {
            "title": "Return app details",
            "type": "boolean",
            "description": "One record per app: name, developer, rating, review count, rating breakdown, pricing plans, categories, launch date, languages, integrations and the Built for Shopify badge.",
            "default": true
          },
          "includeReviews": {
            "title": "Return reviews",
            "type": "boolean",
            "description": "One record per merchant review: date, star rating, text, the store name and country as published, time using the app, and the developer's reply.",
            "default": true
          },
          "maxReviewsPerApp": {
            "title": "Maximum reviews per app",
            "minimum": 0,
            "maximum": 50000,
            "type": "integer",
            "description": "Stop after this many reviews per app (10 reviews per page). 0 means all reviews; popular apps have tens of thousands, which takes hours at a polite request rate.",
            "default": 20
          },
          "reviewsSortBy": {
            "title": "Review order",
            "enum": [
              "newest",
              "relevance"
            ],
            "type": "string",
            "description": "Newest first (best for monitoring) or the App Store's 'Most relevant' order.",
            "default": "newest"
          },
          "reviewRatings": {
            "title": "Only these star ratings",
            "type": "array",
            "description": "Only reviews with these star ratings, for example 1 and 2 to collect complaints. Empty means all ratings.",
            "items": {
              "type": "string",
              "enum": [
                "5",
                "4",
                "3",
                "2",
                "1"
              ],
              "enumTitles": [
                "5 stars",
                "4 stars",
                "3 stars",
                "2 stars",
                "1 star"
              ]
            }
          },
          "maxAppsPerCategory": {
            "title": "Maximum ranked apps per category",
            "minimum": 0,
            "maximum": 5000,
            "type": "integer",
            "description": "Read the ranking down to this position (24 apps per page). 0 means the whole category.",
            "default": 24
          },
          "includeDetailsForRankedApps": {
            "title": "Also return app details for ranked apps",
            "type": "boolean",
            "description": "Fetch the app page of every ranked app returned and add its app record (one extra request and one app record per app).",
            "default": false
          },
          "onlyNew": {
            "title": "Only new items since the previous run",
            "type": "boolean",
            "description": "Remember what was already returned for this exact input and only return reviews not seen before and apps that newly entered the tracked part of each category ranking. App detail records are always returned. The first run returns everything. Ideal for scheduled daily runs. Changing apps, categories, keywords or review filters starts a fresh history.",
            "default": false
          },
          "maxItems": {
            "title": "Maximum records",
            "minimum": 0,
            "type": "integer",
            "description": "Stop after this many records in total (apps, reviews and rankings together). 0 means no limit. You pay per record returned.",
            "default": 1000
          },
          "stateStoreName": {
            "title": "History store name",
            "pattern": "^[a-zA-Z0-9-]{1,63}$",
            "type": "string",
            "description": "Name of the key-value store in your account that remembers what was already returned. Each different input gets its own record inside it. Change it only to keep separate histories.",
            "default": "shopify-app-store-feed-state"
          },
          "requestDelaySecs": {
            "title": "Delay between requests",
            "minimum": 0.5,
            "maximum": 10,
            "type": "number",
            "description": "Minimum seconds between requests to apps.shopify.com. Keep this polite; values below 0.5 are raised to 0.5.",
            "default": 1
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}