{
  "openapi": "3.0.1",
  "info": {
    "title": "App Release Review Impact: Rating by Version",
    "description": "Groups App Store and Google Play reviews by app version and shows how each release changed the rating, with significance flags and the complaints that are new in that version.",
    "version": "0.19",
    "x-build-id": "oZNutIV3uxBjg02Mn"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/datagrit~app-release-review-impact/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-datagrit-app-release-review-impact",
        "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/datagrit~app-release-review-impact/runs": {
      "post": {
        "operationId": "runs-sync-datagrit-app-release-review-impact",
        "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/datagrit~app-release-review-impact/run-sync": {
      "post": {
        "operationId": "run-sync-datagrit-app-release-review-impact",
        "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",
        "required": [
          "apps"
        ],
        "properties": {
          "apps": {
            "title": "Apps",
            "type": "array",
            "description": "App Store IDs (digits, e.g. 1064216828), apps.apple.com URLs, Google Play package names (e.g. com.reddit.frontpage) or play.google.com URLs. Mix both stores freely; every app is analyzed separately within its own store.",
            "default": [
              "1064216828",
              "com.reddit.frontpage"
            ],
            "items": {
              "type": "string"
            }
          },
          "countries": {
            "title": "App Store countries",
            "type": "array",
            "description": "Two-letter App Store storefronts to read for App Store apps (us, gb, de, ...; uk is read as gb). A code the App Store does not know is reported and skipped. Reviews of all selected countries are merged into one row per version. The App Store feed exposes at most the 500 newest reviews per country and often only the first 50. Google Play apps ignore this field.",
            "default": [
              "us"
            ],
            "items": {
              "type": "string"
            }
          },
          "googlePlayCountry": {
            "title": "Google Play country",
            "type": "string",
            "description": "Two-letter Google Play country used when reading Google Play apps.",
            "default": "us"
          },
          "googlePlayLanguage": {
            "title": "Google Play language",
            "type": "string",
            "description": "Language code of the Google Play page (en, de, pt-br, ...). It sets the language of the interface, not a filter on review language.",
            "default": "en"
          },
          "maxReviewsPerApp": {
            "title": "Reviews to read per app",
            "minimum": 50,
            "maximum": 5000,
            "type": "integer",
            "description": "Newest reviews to read per app. For App Store apps this limit applies per country; the feed pages 50 reviews at a time up to 500 and often stops after the first page. Google Play allows up to 5000, and more reviews reach further back in version history there; the strict newComplaintTerms list fills mainly at 2000 to 5000.",
            "default": 500
          },
          "minReviewsPerVersion": {
            "title": "Minimum reviews per version",
            "minimum": 3,
            "maximum": 500,
            "type": "integer",
            "description": "Versions with fewer reviews are left out, because averages over a handful of reviews are noise. Rating changes are always compared with the nearest older version that passes this limit.",
            "default": 10
          },
          "latestVersions": {
            "title": "Only the latest N versions",
            "minimum": 0,
            "maximum": 100,
            "type": "integer",
            "description": "Keep only the N newest versions of each app that pass the minimum reviews limit. Zero keeps all of them.",
            "default": 0
          },
          "onlyRegressions": {
            "title": "Only versions that got worse",
            "type": "boolean",
            "description": "Return only versions whose average rating dropped by at least 0.15 stars against the previous version and the drop is statistically significant (95 % confidence).",
            "default": false
          },
          "maxItems": {
            "title": "Maximum version rows",
            "minimum": 1,
            "maximum": 10000,
            "type": "integer",
            "description": "Stop after this many version rows in total across all apps.",
            "default": 200
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Apify Proxy is on by default. The App Store review feed sometimes answers with an empty page; the Actor retries an empty first page up to six times, gives every app a budget of at most 75 seconds for everything that goes wrong (pauses after empty pages, waits before retrying HTTP 429 or server errors and the time spent in attempts that failed; each attempt is also cut off after 25 seconds), limited to an equal share of the 150 seconds of the whole run and never below 9 seconds so that apps that were not touched yet can still be read, and gives an app it cannot read within its budget a free status row. If the proxy cannot be created the run continues without it.",
            "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}