{
  "openapi": "3.0.1",
  "info": {
    "title": "Shopify App Store Scraper - Reviews, Ratings, Pricing",
    "description": "Scrape Shopify App Store apps by keyword, category or URL: rank, rating, every pricing plan, developer, launch date. Review texts, newest first, with the developer's reply. No login.",
    "version": "0.1",
    "x-build-id": "bDfrklar1QjIH5arb"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/scrapewise~shopify-app-store-stats/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-scrapewise-shopify-app-store-stats",
        "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/scrapewise~shopify-app-store-stats/runs": {
      "post": {
        "operationId": "runs-sync-scrapewise-shopify-app-store-stats",
        "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/scrapewise~shopify-app-store-stats/run-sync": {
      "post": {
        "operationId": "run-sync-scrapewise-shopify-app-store-stats",
        "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": {
          "searchTerms": {
            "title": "Search terms (optional)",
            "type": "array",
            "description": "Words to search in the Shopify App Store, one per line, like 'product reviews' or 'upsell'. Returns the apps in Shopify's own search order, 24 per page, with each app's position (searchRank); sponsored results are skipped.",
            "items": {
              "type": "string"
            }
          },
          "categories": {
            "title": "Category slugs",
            "type": "array",
            "description": "Shopify App Store category slugs from apps.shopify.com/categories. A subcategory like 'marketing-and-conversion-upsell-and-bundles-product-bundles' or 'store-design-storefronts-page-builder' (the slug is the last part of the category URL) returns its full list (hundreds of apps, 24 per page) in Shopify's ranking order, so each app comes with its rank; sponsored slots are skipped. A top-level category like 'marketing-and-conversion' returns its overview page (about 40 apps, with the section each one sits in).",
            "items": {
              "type": "string"
            }
          },
          "appUrls": {
            "title": "App URLs or handles (optional)",
            "type": "array",
            "description": "Specific apps to read, as URLs (https://apps.shopify.com/bundle-deals) or handles (bundle-deals). Useful to track your own app and a few competitors on a schedule.",
            "items": {
              "type": "string"
            }
          },
          "developerUrls": {
            "title": "Developer pages (optional)",
            "type": "array",
            "description": "Every app of a developer, as developer page URLs (https://apps.shopify.com/partners/judge-me) or their last part (judge-me). Handy to map a competitor's whole portfolio.",
            "items": {
              "type": "string"
            }
          },
          "maxItems": {
            "title": "Max apps",
            "minimum": 1,
            "type": "integer",
            "description": "Stops after this many apps across all categories and app URLs, for example 100 for the top 100 of a subcategory. Default 30. Protects your budget.",
            "default": 30
          },
          "includeDetails": {
            "title": "Include app page details",
            "type": "boolean",
            "description": "Opens each app page (one extra request per app) to add developer, launch date, languages, every pricing plan with its features, the Built for Shopify badge, description and icon. Turn off for the category card fields only (name, rating, reviews, pricing label, URL, rank).",
            "default": true
          },
          "includeReviews": {
            "title": "Include review texts",
            "type": "boolean",
            "description": "Adds one row per merchant review of every app in the run: star rating, full review text, date, store name, store country, how long the store has used the app, and the developer's reply with its date. Each review is a separate row (type = review) and is charged like an app row.",
            "default": false
          },
          "maxReviewsPerApp": {
            "title": "Max reviews per app",
            "minimum": 1,
            "type": "integer",
            "description": "Stops after this many reviews for each app. Default 100.",
            "default": 100
          },
          "reviewSort": {
            "title": "Review order",
            "enum": [
              "newest",
              "relevance"
            ],
            "type": "string",
            "description": "Newest first is best for monitoring; together with 'Reviews since' it stops at the first older review.",
            "default": "newest"
          },
          "reviewRatings": {
            "title": "Only these star ratings (optional)",
            "type": "array",
            "description": "For example 1 and 2 to read only the complaints. Empty = all ratings.",
            "items": {
              "type": "string",
              "enum": [
                "1",
                "2",
                "3",
                "4",
                "5"
              ],
              "enumTitles": [
                "1 star",
                "2 stars",
                "3 stars",
                "4 stars",
                "5 stars"
              ]
            }
          },
          "reviewsSince": {
            "title": "Reviews since (optional)",
            "type": "string",
            "description": "Only reviews from this date on: a date like 2026-10-01 or a period like '30 days'. Schedule a daily Task with '1 days' to get only the new reviews."
          },
          "compareWithPreviousRun": {
            "title": "Compare with the previous run",
            "type": "boolean",
            "description": "Keeps the last state of every app in a key-value store on your account (named after this input, or after 'Snapshot name') and adds to each row: isNewApp, newReviews (reviews added since the previous run), previousReviewCount, ratingChange, previousRating, rankChange (positive = moved up in the category), previousCategoryRank, pricingChanged with previousPricingPlans, builtForShopifyChanged, firstSeenAt, previousSeenAt and a 'changes' list. On the first run every app is new. Schedule the same Task daily or weekly to watch a category or your competitors.",
            "default": false
          },
          "onlyChanged": {
            "title": "Deliver only new and changed apps",
            "type": "boolean",
            "description": "Turns on 'Compare with the previous run'. Apps with no new review, no rating, rank, pricing or badge change are not saved and not charged; you pay only for the rows you get. A run where nothing changed returns one free row with errorCode NO_CHANGES.",
            "default": false
          },
          "snapshotName": {
            "title": "Snapshot name (optional)",
            "type": "string",
            "description": "Name of the history to compare with. Leave empty to derive it from the categories and apps of this input (the same input always compares with itself). Set it to share one history between different inputs."
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Apify Proxy by default. Blocked IPs are swapped automatically.",
            "default": {
              "useApifyProxy": true
            }
          },
          "permitirJina": {
            "title": "Allow r.jina.ai fallback",
            "type": "boolean",
            "description": "Fallback to the free r.jina.ai renderer only if the direct fetch returns no app cards. Third-party service without SLA.",
            "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}