{
  "openapi": "3.0.1",
  "info": {
    "title": "Google Play Apps Scraper",
    "description": "Export localized Google Play search results and rich app details, including ratings, installs, prices, media, release notes, Android requirements, and public developer contacts.",
    "version": "0.1",
    "x-build-id": "dMuM05GMC7lGP9QjQ"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/fetch_cat~google-play-apps-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-fetch_cat-google-play-apps-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/fetch_cat~google-play-apps-scraper/runs": {
      "post": {
        "operationId": "runs-sync-fetch_cat-google-play-apps-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/fetch_cat~google-play-apps-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-fetch_cat-google-play-apps-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": {
          "queries": {
            "title": "Search queries",
            "type": "array",
            "description": "Search terms such as brands, competitors or keywords. Category words run keyword searches, not official top charts. At least one query, app ID or URL is needed; this field is not required when using direct inputs.",
            "items": {
              "type": "string"
            }
          },
          "appIds": {
            "title": "App IDs",
            "type": "array",
            "description": "Android package IDs such as com.spotify.music. Direct inputs always request full details, even when Include detailed app metadata is off. They reserve space within Maximum apps and are not filtered by the search price filter.",
            "items": {
              "type": "string"
            }
          },
          "startUrls": {
            "title": "Google Play app URLs",
            "type": "array",
            "description": "Direct Google Play app detail URLs containing an id parameter. Use queries for discovery; search-result URLs are not accepted. Direct URLs always request details, share Maximum apps with all inputs and are not filtered by the search price filter.",
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "country": {
            "title": "Country code",
            "type": "string",
            "description": "Two-letter Google Play country code used for localized rankings and prices.",
            "default": "us"
          },
          "language": {
            "title": "Language code",
            "type": "string",
            "description": "Two- or three-letter language code for localized titles and descriptions, for example en. Defaults to en when omitted; available translations depend on Google Play.",
            "default": "en"
          },
          "maxResults": {
            "title": "Maximum apps",
            "minimum": 1,
            "maximum": 500,
            "type": "integer",
            "description": "Combined maximum of distinct saved apps across all queries, IDs and URLs, from 1 to 500. API default is 25 when omitted; the form prefill is 20. Space is reserved for direct app inputs, and earlier queries can consume the remaining search slots. Fewer results may be available.",
            "default": 25
          },
          "includeDetails": {
            "title": "Include detailed app metadata",
            "type": "boolean",
            "description": "Enrich search results with full detail fields such as installs, rating counts, screenshots, release dates and public developer contacts. Defaults to true. When false, searches save lighter cards with many detail fields null or empty. Direct app IDs and URLs still fetch full details. If search enrichment fails, the available card is preserved.",
            "default": true
          },
          "price": {
            "title": "Search price filter",
            "enum": [
              "all",
              "free",
              "paid"
            ],
            "type": "string",
            "description": "Request all, free or paid apps in searches; default all. This is best-effort because Google Play may ignore the filter. It does not apply to direct app IDs or URLs; those still share the combined result and processing limits.",
            "default": "all"
          },
          "maxConcurrency": {
            "title": "Detail request concurrency",
            "minimum": 1,
            "maximum": 10,
            "type": "integer",
            "description": "Maximum simultaneous detail-enrichment requests within a search, from 1 to 10; default 3. Direct app lookups are sequential. Lower this if Google Play is unstable.",
            "default": 3
          },
          "maxRequestRetries": {
            "title": "Transient request retries",
            "minimum": 0,
            "maximum": 5,
            "type": "integer",
            "description": "Retries for rate limits, server errors, timeouts, and temporary network failures. Missing apps are not retried.",
            "default": 2
          },
          "runTimeSecs": {
            "title": "Processing time limit",
            "minimum": 30,
            "maximum": 285,
            "type": "integer",
            "description": "Soft processing deadline from 30 to 285 seconds; default 270. Stops starting later search batches and direct lookups when reached. In-flight requests and retries can continue, so this is not a hard network timeout. Partial rows and RUN_SUMMARY are retained when normal completion is possible.",
            "default": 270
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}