{
  "openapi": "3.0.1",
  "info": {
    "title": "Shopify App Store Scraper — Apps, Pricing, Reviews & Developers",
    "description": "Shopify App Store data: apps from search, categories, developers or URLs with rating, review count, pricing plans, Built for Shopify badge, developer website and support email, plus merchant reviews.",
    "version": "0.1",
    "x-build-id": "f7WWNXdpLO1CTgCIk"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/tortuga~shopify-app-store-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-tortuga-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/tortuga~shopify-app-store-scraper/runs": {
      "post": {
        "operationId": "runs-sync-tortuga-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/tortuga~shopify-app-store-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-tortuga-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": {
          "mode": {
            "title": "What to scrape",
            "enum": [
              "details",
              "listings",
              "reviews"
            ],
            "type": "string",
            "description": "details: one full profile per app (description, pricing plans, developer website, address and support email, categories and features, languages, integrations, rating histogram). listings: only the search / category / developer cards (rank, rating, review count, pricing line, tagline, Built for Shopify), cheapest and fastest. reviews: merchant reviews of the apps (rating, text, date, store name and country, time using the app, developer reply).",
            "default": "details"
          },
          "searchTerms": {
            "title": "Search keywords",
            "type": "array",
            "description": "Keywords to search on the Shopify App Store, e.g. \"product reviews\" or \"upsell\". Results are read in the order the App Store ranks them; paid placements are skipped unless Include ads is on.",
            "items": {
              "type": "string"
            }
          },
          "startUrls": {
            "title": "Start URLs",
            "type": "array",
            "description": "Any apps.shopify.com page: app pages (https://apps.shopify.com/judgeme), review pages (https://apps.shopify.com/judgeme/reviews, star filters kept), categories (https://apps.shopify.com/categories/marketing-and-conversion-social-trust-product-reviews, feature filters kept), developer pages (https://apps.shopify.com/partners/judge-me), search pages (https://apps.shopify.com/search?q=bundles) and guide pages (apps.shopify.com/stories/...).",
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "appHandles": {
            "title": "App handles",
            "type": "array",
            "description": "Shortcut for app URLs: the part after apps.shopify.com/ in an app link, e.g. \"judgeme\" or \"klaviyo-email-marketing\".",
            "items": {
              "type": "string"
            }
          },
          "maxItems": {
            "title": "Max items",
            "minimum": 1,
            "type": "integer",
            "description": "Stop after this many items in total (apps, cards or reviews across all inputs). Keeps cost predictable: no app page is requested for an app that would not fit.",
            "default": 100
          },
          "maxAppsPerSource": {
            "title": "Max apps per search / category",
            "minimum": 1,
            "type": "integer",
            "description": "Optional cap per search keyword, category or developer page, so several searches share the budget. In reviews mode it limits how many apps of each listing are read. Leave empty for no cap."
          },
          "includeAds": {
            "title": "Include ads",
            "type": "boolean",
            "description": "Also output the paid placements (\"Ad\") the App Store shows on top of search and category pages, flagged with isAd: true. Off by default: ads repeat on every page and are not part of the ranking.",
            "default": false
          },
          "maxReviewsPerApp": {
            "title": "Max reviews per app",
            "minimum": 1,
            "type": "integer",
            "description": "Reviews mode only: cap per app, so a run over several apps spreads the budget. Leave empty for all reviews (up to Max items)."
          },
          "reviewsSort": {
            "title": "Sort reviews",
            "enum": [
              "newest",
              "relevance"
            ],
            "type": "string",
            "description": "Reviews mode only: newest first (default, needed for date limits and monitoring) or the App Store's \"Most relevant\" order.",
            "default": "newest"
          },
          "reviewRatings": {
            "title": "Only these star ratings",
            "type": "array",
            "description": "Reviews mode only: keep only reviews with these star ratings, e.g. 1 and 2 for complaints about a competitor. The filter is applied by the App Store, so you do not pay for other reviews. Leave empty for all.",
            "items": {
              "type": "string",
              "enum": [
                "1",
                "2",
                "3",
                "4",
                "5"
              ],
              "enumTitles": [
                "1 star",
                "2 stars",
                "3 stars",
                "4 stars",
                "5 stars"
              ]
            }
          },
          "reviewsNewerThan": {
            "title": "Only reviews newer than",
            "type": "string",
            "description": "Reviews mode only: a date (YYYY-MM-DD) or a period such as \"7 days\" or \"24 hours\". Reviews are read newest first and paging stops at the first page that is entirely older, so a scheduled run only fetches what is new. Reviews show whole days, so a review dated on the cutoff day is included."
          },
          "onlyNewOrChanged": {
            "title": "Only new or changed items",
            "type": "boolean",
            "description": "Remember what earlier runs of this input returned and output only new items or items whose rating, review count or pricing changed (reviews mode: only reviews no earlier run output; paging stops where the previous run's reviews begin). Use with a Schedule; unchanged items are not charged.",
            "default": false
          },
          "monitoringKey": {
            "title": "Monitoring key",
            "type": "string",
            "description": "Name for this watch, so several schedules on the same search stay separate; defaults to a key derived from the search input. Only used with Only new or changed items."
          },
          "proxyConfiguration": {
            "title": "Proxy",
            "type": "object",
            "description": "Apify datacenter proxy works for the Shopify App Store (no Unblocker or residential proxy needed). The actor rotates IPs and retries when the App Store rate-limits a request (HTTP 429).",
            "default": {
              "useApifyProxy": true
            }
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}