{
  "openapi": "3.0.1",
  "info": {
    "title": "Google Play Scraper: App Details, Play Store Reviews & Search",
    "description": "Google Play scraper: app details, Play Store reviews, keyword search, developer apps and similar apps. Reviews filtered by stars, date, keyword and version. Installs, rating, price, developer email. No login.",
    "version": "0.7",
    "x-build-id": "4rUL4MH6z8qWZWaSs"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/datagleaner~google-play-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-datagleaner-google-play-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/datagleaner~google-play-scraper/runs": {
      "post": {
        "operationId": "runs-sync-datagleaner-google-play-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/datagleaner~google-play-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-datagleaner-google-play-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": {
          "appIds": {
            "title": "App IDs or URLs (details)",
            "type": "array",
            "description": "Details mode: package names (`com.spotify.music`) or Google Play URLs (`https://play.google.com/store/apps/details?id=com.spotify.music`). Each returns one app record. Apps that do not exist in the chosen country are skipped and not charged.",
            "items": {
              "type": "string"
            }
          },
          "searchQueries": {
            "title": "Search keywords",
            "type": "array",
            "description": "DISCONTINUED 2026-11-01 and ignored: Google Play's robots.txt disallows this path. Use appIds, similarAppIds or developerIds. Search mode: keywords as you would type them in the Play Store, e.g. `habit tracker`. Each returns up to `maxItems` apps in store rank order (Google Play shows one page of about 20 to 30 results per query).",
            "items": {
              "type": "string"
            }
          },
          "similarAppIds": {
            "title": "Find similar apps to these app IDs or URLs",
            "type": "array",
            "description": "Similar-apps mode: package names or Google Play URLs. Returns the apps Google Play lists as similar (up to about 50 per app), for competitor discovery and wider coverage than one keyword search. Records carry `similarTo` with the seed app. Same price per app as any other app record.",
            "items": {
              "type": "string"
            }
          },
          "developerIds": {
            "title": "Developer names, app IDs, IDs or page URLs (their apps)",
            "type": "array",
            "description": "Developer mode: an appId or app page URL of any of the developer's apps (`com.todoist`; the developer is read from that app's own page, the most reliable form), a developer name exactly as shown on Google Play (`Spotify AB`; near-misses like `Doist Inc.` return nothing), a numeric developer ID, or a developer page URL. Returns the apps on that developer's page (about 20 for a name, about 10 for a numeric ID; the `developerUrl` field of an app record is the name-based page). Records carry `developerQuery`.",
            "items": {
              "type": "string"
            }
          },
          "reviewAppIds": {
            "title": "App IDs or URLs (reviews)",
            "type": "array",
            "description": "DISCONTINUED 2026-11-01 and ignored: Google Play's robots.txt disallows the reviews path. Use appIds, similarAppIds or developerIds.",
            "items": {
              "type": "string"
            }
          },
          "maxItems": {
            "title": "Max apps per keyword, developer or seed app",
            "minimum": 1,
            "maximum": 250,
            "type": "integer",
            "description": "Stops after this many apps for each keyword in `searchQueries`, each developer in `developerIds` and each app in `similarAppIds`. Google Play returns at most about 30 results per keyword and about 50 similar apps per app, so use several related keywords or similar-apps mode for wider coverage.",
            "default": 30
          },
          "includeDetails": {
            "title": "Fetch full details for search results",
            "type": "boolean",
            "description": "One extra request per search, developer or similar-apps result adds rating count, histogram, version, update date, developer ID, website, address and phone, full description and screenshots. Turn off for a faster list from the cards only (title, developer, installs, rating, price, category, icon). The price per app is the same.",
            "default": true
          },
          "findDeveloperEmails": {
            "title": "Also find each developer's email",
            "type": "boolean",
            "description": "Off by default. When on, after the apps are collected this Actor runs Data Gleaner's App Developer Email Finder on your Apify account and adds `developerEmails` (every public email found, from the store listing, trader declaration and the developer's website) and `developerEmailSource` to each app record. That Actor bills you separately at its own price, $0.0015 for each app whose developer has a public email (no charge for apps without one); this Actor adds no charge. App records are written at the end of the run instead of one by one. If the email lookup fails, the app records are still returned without the extra fields.",
            "default": false
          },
          "sitemapDiscovery": {
            "title": "Discover apps from Google Play's sitemaps",
            "type": "boolean",
            "description": "Bulk discovery without search: samples random shards of the sitemaps Google Play publishes (declared in its robots.txt), keeps apps whose package name matches `packagePrefixes` / `packageContains` (all apps if both are empty), then fetches each one's details page. The sitemaps have no dates or categories, so this is a random sample of the catalogue (about 40 apps per shard), not a full list; rare filters need more `sitemapShards`. Each app returned is one `app` event.",
            "default": false
          },
          "packagePrefixes": {
            "title": "Sitemap: package name starts with",
            "type": "array",
            "description": "Used with `sitemapDiscovery`. Keep apps whose package name starts with any of these, e.g. `com.acme.` (one company's namespace) or `de.` (German developers' reverse domains).",
            "items": {
              "type": "string"
            }
          },
          "packageContains": {
            "title": "Sitemap: package name contains",
            "type": "array",
            "description": "Used with `sitemapDiscovery`. Keep apps whose package name contains any of these words, e.g. `fitness`, `vpn`, `calculator`. Matches the package name only, not the title.",
            "items": {
              "type": "string"
            }
          },
          "sitemapMaxApps": {
            "title": "Sitemap: max apps",
            "minimum": 1,
            "maximum": 1000,
            "type": "integer",
            "description": "Stops after this many matching apps have been fetched.",
            "default": 50
          },
          "sitemapShards": {
            "title": "Sitemap: max shards to scan",
            "minimum": 1,
            "maximum": 150,
            "type": "integer",
            "description": "Each shard is one sitemap file of about 390 Play pages, about 40 of them apps (the rest are books). The scan stops here even if fewer than `sitemapMaxApps` matched, so a very rare filter returns little and costs nothing. Shards you scan without a match are not charged.",
            "default": 30
          },
          "country": {
            "title": "Store country",
            "type": "string",
            "description": "Two-letter country code of the Play Store to read, e.g. `US`, `GB`, `DE`, `JP`. It changes prices, availability, ratings shown and which reviews appear.",
            "default": "US"
          },
          "language": {
            "title": "Language",
            "type": "string",
            "description": "Language code for store text, e.g. `en`, `de`, `ja`, `pt-BR`.",
            "default": "en"
          },
          "requestDelaySecs": {
            "title": "Delay between requests (seconds)",
            "minimum": 0.1,
            "type": "number",
            "description": "Polite pacing. Lower is faster and raises the chance of being blocked.",
            "default": 0.5
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}