Nimbryxo Studio

Google Play App Search, Lookup & Reviews Scraper

Search Google Play by keyword or look up apps directly by package ID, with ratings, installs, pricing, developer contact details, and optional user reviews across dozens of countries and languages.

Input schema

Input fields, types, required flags, descriptions, defaults, and prefills come from the published definition. Prefill examples are distinct from defaults.

FieldTypeRequiredDescription
modestringrequiredWhat to scrape.
searchQuerystringoptionalKeyword to search for in mode=search, for example `photo editor` or `calculator`.
appIdsarrayoptionalPackage names or Google Play URLs. Used by details, reviews, similar, permissions, and dataSafety modes.
Show all input fields
FieldTypeRequiredDescription
modestringrequiredWhat to scrape.
searchQuerystringoptionalKeyword to search for in mode=search, for example `photo editor` or `calculator`.
appIdsarrayoptionalPackage names or Google Play URLs. Used by details, reviews, similar, permissions, and dataSafety modes.
packageNamesarrayoptionalAndroid package names such as `com.whatsapp`. Play URLs are also accepted.
startUrlsarrayoptionalFull Google Play app URLs, for example `https://play.google.com/store/apps/details?id=com.whatsapp`.
developerIdstringoptionalNumeric Google Play developer ID or a developer page URL, used in mode=developer.
developerNamestringoptionalDisplay name shown on Google Play, for example `Google LLC`, used in mode=developer.
countrystringoptionalStorefront for search results, pricing, and availability. Reviews are selected by Language, not Country.
languagestringoptionalLanguage for app pages and the review bucket. Google Play uses this language, not Country, to choose reviews.
maxItemsintegeroptionalHard cap on dataset rows. Search returns at most 250 apps per query. For similar mode one seed app is one row.
maxReviewsPerAppintegeroptionalReviews to collect for each app. Google Play returns at most 4,500 reviews per page; the actor paginates up to this cap.
reviewSortstringoptionalOrder used when fetching reviews.
includeDetailsbooleanoptionalFetch the full app page for search and developer results, and include app metadata in permissions/dataSafety output. Adds one request per app.
includePermissionsbooleanoptionalAdd the app's permission list to app records. Works in search, details, developer, and similar modes.
includeDataSafetybooleanoptionalAdd shared data, collected data, security practices, and the privacy policy URL to app records.
proxyConfigurationobjectoptionalOptional. The actor works without a proxy; use one only if Google Play blocks your runs.

Download the published input schema

View complete JSON
{
  "description": "Choose what to collect from Google Play: search results, app details, reviews, developer catalogs, similar apps, permissions, or data safety.",
  "properties": {
    "appIds": {
      "default": [],
      "description": "Package names or Google Play URLs. Used by details, reviews, similar, permissions, and dataSafety modes.",
      "editor": "stringList",
      "prefill": [],
      "title": "App IDs",
      "type": "array"
    },
    "country": {
      "default": "us",
      "description": "Storefront for search results, pricing, and availability. Reviews are selected by Language, not Country.",
      "editor": "select",
      "enum": [
        "us",
        "gb",
        "ca",
        "au",
        "in",
        "de",
        "fr",
        "es",
        "it",
        "jp",
        "kr",
        "br",
        "mx",
        "nl",
        "be",
        "at",
        "ch",
        "se",
        "no",
        "dk",
        "fi",
        "pl",
        "pt",
        "cz",
        "ro",
        "hu",
        "gr",
        "tr",
        "ru",
        "ua",
        "za",
        "eg",
        "ng",
        "ke",
        "id",
        "th",
        "vn",
        "ph",
        "my",
        "sg",
        "tw",
        "hk",
        "nz",
        "ar",
        "cl",
        "co",
        "pe",
        "il",
        "ae",
        "sa"
      ],
      "enumTitles": [
        "United States",
        "United Kingdom",
        "Canada",
        "Australia",
        "India",
        "Germany",
        "France",
        "Spain",
        "Italy",
        "Japan",
        "South Korea",
        "Brazil",
        "Mexico",
        "Netherlands",
        "Belgium",
        "Austria",
        "Switzerland",
        "Sweden",
        "Norway",
        "Denmark",
        "Finland",
        "Poland",
        "Portugal",
        "Czech Republic",
        "Romania",
        "Hungary",
        "Greece",
        "Turkey",
        "Russia",
        "Ukraine",
        "South Africa",
        "Egypt",
        "Nigeria",
        "Kenya",
        "Indonesia",
        "Thailand",
        "Vietnam",
        "Philippines",
        "Malaysia",
        "Singapore",
        "Taiwan",
        "Hong Kong",
        "New Zealand",
        "Argentina",
        "Chile",
        "Colombia",
        "Peru",
        "Israel",
        "United Arab Emirates",
        "Saudi Arabia"
      ],
      "prefill": "us",
      "title": "Country",
      "type": "string"
    },
    "developerId": {
      "description": "Numeric Google Play developer ID or a developer page URL, used in mode=developer.",
      "editor": "textfield",
      "title": "Developer ID",
      "type": "string"
    },
    "developerName": {
      "description": "Display name shown on Google Play, for example `Google LLC`, used in mode=developer.",
      "editor": "textfield",
      "title": "Developer name",
      "type": "string"
    },
    "includeDataSafety": {
      "default": false,
      "description": "Add shared data, collected data, security practices, and the privacy policy URL to app records.",
      "prefill": false,
      "title": "Include data safety",
      "type": "boolean"
    },
    "includeDetails": {
      "default": false,
      "description": "Fetch the full app page for search and developer results, and include app metadata in permissions/dataSafety output. Adds one request per app.",
      "prefill": false,
      "title": "Include full app details",
      "type": "boolean"
    },
    "includePermissions": {
      "default": false,
      "description": "Add the app's permission list to app records. Works in search, details, developer, and similar modes.",
      "prefill": false,
      "title": "Include permissions",
      "type": "boolean"
    },
    "language": {
      "default": "en",
      "description": "Language for app pages and the review bucket. Google Play uses this language, not Country, to choose reviews.",
      "editor": "select",
      "enum": [
        "en",
        "es",
        "fr",
        "de",
        "it",
        "pt",
        "ja",
        "ko",
        "zh",
        "ru",
        "ar",
        "hi",
        "th",
        "vi",
        "id",
        "tr",
        "pl",
        "nl",
        "sv",
        "da",
        "no",
        "fi",
        "cs",
        "ro",
        "hu",
        "el",
        "he",
        "uk",
        "ms",
        "tl"
      ],
      "enumTitles": [
        "English",
        "Spanish",
        "French",
        "German",
        "Italian",
        "Portuguese",
        "Japanese",
        "Korean",
        "Chinese",
        "Russian",
        "Arabic",
        "Hindi",
        "Thai",
        "Vietnamese",
        "Indonesian",
        "Turkish",
        "Polish",
        "Dutch",
        "Swedish",
        "Danish",
        "Norwegian",
        "Finnish",
        "Czech",
        "Romanian",
        "Hungarian",
        "Greek",
        "Hebrew",
        "Ukrainian",
        "Malay",
        "Filipino"
      ],
      "prefill": "en",
      "title": "Language",
      "type": "string"
    },
    "maxItems": {
      "default": 100,
      "description": "Hard cap on dataset rows. Search returns at most 250 apps per query. For similar mode one seed app is one row.",
      "maximum": 10000,
      "minimum": 1,
      "prefill": 3,
      "title": "Max items",
      "type": "integer"
    },
    "maxReviewsPerApp": {
      "default": 100,
      "description": "Reviews to collect for each app. Google Play returns at most 4,500 reviews per page; the actor paginates up to this cap.",
      "maximum": 50000,
      "minimum": 1,
      "prefill": 100,
      "title": "Max reviews per app",
      "type": "integer"
    },
    "mode": {
      "default": "search",
      "description": "What to scrape.",
      "editor": "select",
      "enum": [
        "search",
        "details",
        "reviews",
        "developer",
        "similar",
        "permissions",
        "dataSafety"
      ],
      "enumTitles": [
        "Search apps by keyword",
        "App details by package name or URL",
        "Reviews for apps",
        "Developer catalog",
        "Similar apps",
        "App permissions",
        "Data safety labels"
      ],
      "prefill": "search",
      "title": "Mode",
      "type": "string"
    },
    "packageNames": {
      "default": [],
      "description": "Android package names such as `com.whatsapp`. Play URLs are also accepted.",
      "editor": "stringList",
      "prefill": [],
      "title": "Package names",
      "type": "array"
    },
    "proxyConfiguration": {
      "description": "Optional. The actor works without a proxy; use one only if Google Play blocks your runs.",
      "editor": "proxy",
      "title": "Proxy configuration",
      "type": "object"
    },
    "reviewSort": {
      "default": "newest",
      "description": "Order used when fetching reviews.",
      "editor": "select",
      "enum": [
        "newest",
        "rating",
        "helpfulness"
      ],
      "enumTitles": [
        "Newest first",
        "Rating",
        "Most helpful"
      ],
      "prefill": "newest",
      "title": "Review sort",
      "type": "string"
    },
    "searchQuery": {
      "default": "calculator",
      "description": "Keyword to search for in mode=search, for example `photo editor` or `calculator`.",
      "editor": "textfield",
      "prefill": "calculator",
      "title": "Search query",
      "type": "string"
    },
    "startUrls": {
      "default": [],
      "description": "Full Google Play app URLs, for example `https://play.google.com/store/apps/details?id=com.whatsapp`.",
      "editor": "stringList",
      "prefill": [],
      "title": "Google Play app URLs",
      "type": "array"
    }
  },
  "required": [
    "mode"
  ],
  "schemaVersion": 1,
  "title": "Google Play Store Scraper Input",
  "type": "object"
}

Output schema

Published result links and storage locations. This schema is not an exhaustive contract for every field in a dataset record.

FieldTypeRequiredDescription
itemsstringoptionalDataset containing app, review, permission, data safety, and similar-app records.

Download the published output schema

View complete JSON
{
  "actorOutputSchemaVersion": 1,
  "description": "Google Play apps, reviews, permissions, data safety labels, developer catalogs, and similar apps.",
  "properties": {
    "items": {
      "description": "Dataset containing app, review, permission, data safety, and similar-app records.",
      "template": "{{links.apiDefaultDatasetUrl}}/items",
      "title": "Google Play records",
      "type": "string"
    }
  },
  "title": "Google Play App Intelligence Output",
  "type": "object"
}

Dataset schema

Published dataset views and any declared field definitions. A view can select only a subset of the returned record fields.

Download the published dataset schema

View complete JSON
{
  "actorSpecification": 1,
  "fields": {
    "properties": {
      "IAPRange": {
        "description": "Displayed in-app purchase range.",
        "type": "string"
      },
      "adSupported": {
        "description": "Whether the app contains ads.",
        "type": "boolean"
      },
      "androidVersion": {
        "description": "Minimum Android version when published.",
        "type": "string"
      },
      "appId": {
        "description": "Backward-compatible alias of packageName.",
        "type": "string"
      },
      "appTitle": {
        "description": "App name for a review record.",
        "type": "string"
      },
      "appVersion": {
        "description": "App version the review was written for.",
        "type": "string"
      },
      "author": {
        "description": "Reviewer name.",
        "type": "string"
      },
      "available": {
        "description": "Whether the app is listed in the selected storefront.",
        "type": "boolean"
      },
      "categories": {
        "description": "Categories as objects with name and id.",
        "items": {
          "type": "object"
        },
        "type": "array"
      },
      "containsAds": {
        "description": "Whether the app is marked as containing ads.",
        "type": "boolean"
      },
      "content": {
        "description": "Backward-compatible alias of text.",
        "type": "string"
      },
      "contentRating": {
        "description": "Content rating, for example Everyone or Teen.",
        "type": "string"
      },
      "country": {
        "description": "Storefront used for the request.",
        "type": "string"
      },
      "criterias": {
        "description": "Per-criterion ratings when Google Play provides them.",
        "items": {
          "type": "object"
        },
        "type": "array"
      },
      "currency": {
        "description": "ISO currency code.",
        "type": "string"
      },
      "dataSafety": {
        "description": "Shared data, collected data, security practices, and privacy policy URL.",
        "type": "object"
      },
      "date": {
        "description": "Review date in ISO 8601 format.",
        "type": "string"
      },
      "description": {
        "description": "Full app description as plain text.",
        "type": "string"
      },
      "descriptionHTML": {
        "description": "Full app description with Google Play HTML markup.",
        "type": "string"
      },
      "developer": {
        "description": "Developer display name.",
        "type": "string"
      },
      "developerAddress": {
        "description": "Developer contact address.",
        "type": "string"
      },
      "developerEmail": {
        "description": "Developer contact email.",
        "type": "string"
      },
      "developerId": {
        "description": "Google Play developer ID.",
        "type": "string"
      },
      "developerInput": {
        "description": "Developer ID or display name used for the run.",
        "type": "string"
      },
      "developerLegalAddress": {
        "description": "Legal developer address.",
        "type": "string"
      },
      "developerLegalEmail": {
        "description": "Legal developer email.",
        "type": "string"
      },
      "developerLegalName": {
        "description": "Legal developer name.",
        "type": "string"
      },
      "developerLegalPhone": {
        "description": "Legal developer phone number.",
        "type": "string"
      },
      "developerReply": {
        "description": "Developer reply text and date when present.",
        "type": "object"
      },
      "developerUrl": {
        "description": "Developer catalog URL.",
        "type": "string"
      },
      "developerWebsite": {
        "description": "Developer website.",
        "type": "string"
      },
      "free": {
        "description": "Whether the app is free.",
        "type": "boolean"
      },
      "genre": {
        "description": "Primary genre name.",
        "type": "string"
      },
      "genreId": {
        "description": "Primary genre ID.",
        "type": "string"
      },
      "headerImage": {
        "description": "Header image URL.",
        "type": "string"
      },
      "helpfulCount": {
        "description": "Number of helpful votes.",
        "type": "integer"
      },
      "histogram": {
        "description": "Rating distribution from 1 star to 5 stars.",
        "items": {
          "type": "integer"
        },
        "type": "array"
      },
      "icon": {
        "description": "App icon URL.",
        "type": "string"
      },
      "id": {
        "description": "Stable identifier. For app records this is the Android package name; for reviews it is the review ID.",
        "type": "string"
      },
      "installs": {
        "description": "Displayed install count, for example 1,000,000,000+.",
        "type": "string"
      },
      "isExactMatch": {
        "description": "Whether the record is Google Play's exact-match card.",
        "type": "boolean"
      },
      "language": {
        "description": "Language used for the request.",
        "type": "string"
      },
      "lastUpdated": {
        "description": "Backward-compatible alias of updated.",
        "type": "string"
      },
      "maxInstalls": {
        "description": "Upper bound of the install estimate.",
        "type": "integer"
      },
      "minInstalls": {
        "description": "Lower bound of the install estimate.",
        "type": "integer"
      },
      "name": {
        "description": "App name.",
        "type": "string"
      },
      "offersIAP": {
        "description": "Whether the app offers in-app purchases.",
        "type": "boolean"
      },
      "packageName": {
        "description": "Android package name, for example com.whatsapp.",
        "type": "string"
      },
      "permissionGroups": {
        "description": "Permissions grouped the way Google Play presents them.",
        "items": {
          "type": "object"
        },
        "type": "array"
      },
      "permissions": {
        "description": "Flat permission list with permission, group, and type.",
        "items": {
          "type": "object"
        },
        "type": "array"
      },
      "price": {
        "description": "App price in the selected storefront currency. Zero means free.",
        "type": "number"
      },
      "priceText": {
        "description": "Localized price text.",
        "type": "string"
      },
      "privacyPolicy": {
        "description": "Privacy policy URL.",
        "type": "string"
      },
      "rank": {
        "description": "One-based position in search or developer results.",
        "type": "integer"
      },
      "rating": {
        "description": "Average rating from 0 to 5.",
        "type": "number"
      },
      "ratingCount": {
        "description": "Total number of ratings.",
        "type": "integer"
      },
      "ratings": {
        "description": "Backward-compatible alias of ratingCount.",
        "type": "integer"
      },
      "realInstalls": {
        "description": "Google Play install estimate.",
        "type": "integer"
      },
      "recentChanges": {
        "description": "Latest changelog.",
        "type": "string"
      },
      "recordType": {
        "description": "app, review, permissions, dataSafety, or similar.",
        "type": "string"
      },
      "released": {
        "description": "Original release date as displayed by Google Play.",
        "type": "string"
      },
      "repliedAt": {
        "description": "Backward-compatible developer reply date.",
        "type": "string"
      },
      "replyContent": {
        "description": "Backward-compatible developer reply text.",
        "type": "string"
      },
      "reviewCount": {
        "description": "Total number of written reviews.",
        "type": "integer"
      },
      "reviewId": {
        "description": "Review ID (backward-compatible alias of id).",
        "type": "string"
      },
      "reviewUrl": {
        "description": "Permalink to the review.",
        "type": "string"
      },
      "reviews": {
        "description": "Nested reviews when reviews are requested alongside app records.",
        "items": {
          "type": "object"
        },
        "type": "array"
      },
      "score": {
        "description": "Backward-compatible alias of rating.",
        "type": "number"
      },
      "scoreText": {
        "description": "Rating as displayed by Google Play.",
        "type": "string"
      },
      "scrapedAt": {
        "description": "ISO 8601 collection timestamp.",
        "type": "string"
      },
      "screenshots": {
        "description": "Screenshot URLs.",
        "items": {
          "type": "string"
        },
        "type": "array"
      },
      "searchQuery": {
        "description": "Search query that produced the record.",
        "type": "string"
      },
      "similarApps": {
        "description": "Apps related to the seed app.",
        "items": {
          "type": "object"
        },
        "type": "array"
      },
      "size": {
        "description": "Download size when Google Play exposes it.",
        "type": "string"
      },
      "sort": {
        "description": "Review sort order.",
        "type": "string"
      },
      "sourceUrl": {
        "description": "URL the record was collected from.",
        "type": "string"
      },
      "storeCountry": {
        "description": "Storefront used for a review request.",
        "type": "string"
      },
      "summary": {
        "description": "Short app summary.",
        "type": "string"
      },
      "text": {
        "description": "Review text.",
        "type": "string"
      },
      "thumbsUpCount": {
        "description": "Backward-compatible alias of helpfulCount.",
        "type": "integer"
      },
      "title": {
        "description": "Backward-compatible alias of name.",
        "type": "string"
      },
      "updated": {
        "description": "Last update date.",
        "type": "string"
      },
      "url": {
        "description": "Google Play app URL.",
        "type": "string"
      },
      "userImage": {
        "description": "Reviewer avatar URL.",
        "type": "string"
      },
      "userName": {
        "description": "Reviewer name (backward-compatible alias of author).",
        "type": "string"
      },
      "version": {
        "description": "Latest app version when Google Play publishes it.",
        "type": "string"
      },
      "video": {
        "description": "Promo video URL.",
        "type": "string"
      }
    },
    "type": "object"
  },
  "title": "Google Play Store records",
  "views": {
    "overview": {
      "display": {
        "component": "table",
        "properties": {
          "currency": {
            "format": "text",
            "label": "Currency"
          },
          "developer": {
            "format": "text",
            "label": "Developer"
          },
          "genre": {
            "format": "text",
            "label": "Genre"
          },
          "installs": {
            "format": "text",
            "label": "Installs"
          },
          "name": {
            "format": "text",
            "label": "App"
          },
          "packageName": {
            "format": "text",
            "label": "Package"
          },
          "price": {
            "format": "number",
            "label": "Price"
          },
          "rating": {
            "format": "number",
            "label": "Rating"
          },
          "ratingCount": {
            "format": "number",
            "label": "Ratings"
          },
          "updated": {
            "format": "text",
            "label": "Updated"
          },
          "url": {
            "format": "text",
            "label": "URL"
          }
        }
      },
      "title": "Apps",
      "transformation": {
        "fields": [
          "packageName",
          "name",
          "developer",
          "rating",
          "ratingCount",
          "installs",
          "price",
          "currency",
          "genre",
          "updated",
          "url"
        ]
      }
    },
    "reviews": {
      "display": {
        "component": "table",
        "properties": {
          "appId": {
            "format": "text",
            "label": "App ID"
          },
          "appTitle": {
            "format": "text",
            "label": "App"
          },
          "author": {
            "format": "text",
            "label": "Author"
          },
          "date": {
            "format": "text",
            "label": "Date"
          },
          "helpfulCount": {
            "format": "number",
            "label": "Helpful"
          },
          "rating": {
            "format": "number",
            "label": "Rating"
          },
          "reviewId": {
            "format": "text",
            "label": "Review ID"
          },
          "text": {
            "format": "text",
            "label": "Review"
          }
        }
      },
      "title": "Reviews",
      "transformation": {
        "fields": [
          "reviewId",
          "appId",
          "appTitle",
          "author",
          "rating",
          "text",
          "date",
          "helpfulCount"
        ]
      }
    },
    "similar": {
      "display": {
        "component": "table",
        "properties": {
          "name": {
            "format": "text",
            "label": "Seed app"
          },
          "packageName": {
            "format": "text",
            "label": "Seed package"
          },
          "similarApps": {
            "format": "text",
            "label": "Similar apps"
          }
        }
      },
      "title": "Similar apps",
      "transformation": {
        "fields": [
          "packageName",
          "name",
          "similarApps"
        ]
      }
    },
    "trust": {
      "display": {
        "component": "table",
        "properties": {
          "dataSafety": {
            "format": "text",
            "label": "Data safety"
          },
          "name": {
            "format": "text",
            "label": "App"
          },
          "packageName": {
            "format": "text",
            "label": "Package"
          },
          "permissions": {
            "format": "text",
            "label": "Permissions"
          }
        }
      },
      "title": "Permissions and data safety",
      "transformation": {
        "fields": [
          "packageName",
          "name",
          "permissions",
          "dataSafety"
        ]
      }
    }
  }
}

Key-value schema

Published key-value store definitions, when provided by this build.

This definition is not present in the default published build. See the published README for available documentation.

Published README

Read the full published documentation

Google Play App Intelligence Scraper - Details, Reviews & Safety Labels

Collect public Google Play data in one run: keyword search results, full app records, long review histories, developer catalogs, similar apps, permission lists, and data safety labels. Everything is read from public Play pages and RPC endpoints, so no Google account, cookie, or API key is needed.

Modes

Mode What it returns
search Apps matching a keyword, with search rank and an exact-match marker. Add full details, permissions, data safety, or reviews with the toggles.
details One full app record per package name or Play URL.
reviews One flat record per review, with author, rating, text, date, helpful votes, app version, and developer replies.
developer The app catalog for a numeric developer ID or a display name.
similar One record per seed app, with a similarApps array of related apps.
permissions One record per app with grouped and flat permission lists.
dataSafety One record per app with shared data, collected data, security practices, and the privacy policy URL.

What you can collect

App records

  • Identity: id, packageName, name, developer, developerId, developerUrl, url, sourceUrl
  • Ratings: rating, ratingCount, scoreText, reviewCount, histogram
  • Reach and pricing: installs, minInstalls, maxInstalls, price, currency, priceText, free, offersIAP, IAPRange
  • Store metadata: genre, genreId, categories, contentRating, version, updated, released, androidVersion, recentChanges, size when Google publishes it
  • Creative and copy: description, descriptionHTML, summary, icon, headerImage, screenshots, video
  • Developer contact: developerEmail, developerWebsite, developerAddress, developerLegalName, developerLegalEmail, developerLegalAddress, developerLegalPhone, privacyPolicy
  • Search context: searchQuery, rank, isExactMatch
  • Optional trust data: permissions, permissionGroups, dataSafety
  • Optional related data: similarApps, nested reviews
  • Run metadata: recordType, language, country, scrapedAt

Review records

  • id, reviewId, appId, appTitle
  • author, userName, userImage
  • rating, score, text, content, date
  • helpfulCount, thumbsUpCount
  • version, appVersion, criterias
  • developerReply with reply text and date; replyContent and repliedAt are kept for existing integrations
  • reviewUrl, language, storeCountry, sort, recordType, scrapedAt

Permission records

permissions is a flat list of {permission, group, type} objects. permissionGroups keeps Google Play's grouping. Permission names are localised by language.

Data safety records

dataSafety contains sharedData, collectedData, securityPractices, and privacyPolicyUrl. Each shared or collected entry has type, data, optional, and purpose when Google provides them.

Input

Field Default Notes
mode search One of the seven modes above.
searchQuery calculator Keyword for search mode.
appIds – Package names or Play URLs.
packageNames – Package names or Play URLs for details, reviews, similar, permissions, or data safety.
startUrls – Full Play app URLs; the id parameter is extracted.
developerId – Numeric developer ID or developer page URL.
developerName – Display name such as Google LLC.
country us Storefront for search results, pricing, and availability.
language en Language for app pages and the review bucket. Google Play selects reviews by language, not country.
maxItems 100 Hard row cap, 1–10,000. Search returns at most 250 apps per query. In similar mode one seed app is one row.
maxReviewsPerApp 100 Review cap per app, 1–50,000. Requests use up to 4,500 reviews per page.
reviewSort newest newest, rating, or helpfulness.
includeDetails false Fetch the full app page for search and developer results, and include app metadata in permissions/dataSafety output.
includePermissions false Add permissions to app records in search, details, developer, and similar modes.
includeDataSafety false Add data safety labels to app records.
proxyConfiguration – Optional. The actor works without a proxy.

Use at least one of searchQuery, appIds, packageNames, startUrls, or a developer field, depending on the mode.

Examples

Search with full details and permissions:

{
  "mode": "search",
  "searchQuery": "photo editor",
  "country": "us",
  "language": "en",
  "maxItems": 10,
  "includeDetails": true,
  "includePermissions": true
}

Deep reviews for two apps:

{
  "mode": "reviews",
  "packageNames": ["com.whatsapp", "com.instagram.android"],
  "language": "en",
  "maxReviewsPerApp": 5000,
  "reviewSort": "newest",
  "maxItems": 10000
}

Developer catalog:

{
  "mode": "developer",
  "developerName": "Google LLC",
  "country": "us",
  "language": "en",
  "maxItems": 200
}

Data safety labels:

{
  "mode": "dataSafety",
  "packageNames": ["com.whatsapp", "com.spotify.music"],
  "language": "en",
  "includeDetails": true
}

Output behaviour

  • Records are omit-empty at every depth. A field Google Play does not publish for an app is left out, never set to null, "", 0, or [].
  • Existing field names from earlier versions (appId, title, score, ratings, lastUpdated, reviewId, content, thumbsUpCount, replyContent, repliedAt, appVersion) are still emitted beside the newer names so saved integrations keep working.
  • Old input keys are mapped in code: searchTerms to searchQuery, maxResults to maxItems, reviewCount to maxReviewsPerApp, and includeReviews to nested reviews on app records.
  • A run that produces zero records fails with a clear status message instead of returning an empty dataset. If some apps fail and others succeed, the dataset is kept and the run ends with a warning summary.
  • RUN_SUMMARY in the key-value store records counts, caps, warnings, errors, and whether any request was blocked.

Limits and honest caps

  • Search: most keywords return 15–50 apps. A minority expose a continuation token; the actor follows it up to 250 apps per query. To collect more, run several queries.
  • Reviews: Google Play serves up to 4,500 reviews per page. maxReviewsPerApp is capped at 50,000 and pagination stops when Google runs out of tokens or returns no new review IDs.
  • Similar apps: up to 150 related apps per seed. Similarity is broad; "similar" means related, not necessarily a direct competitor.
  • Version history: Google Play no longer exposes a version-history page or working RPC. Only the latest version, updated, and recentChanges are returned, and they are absent when Google does not publish them.
  • App size: Google Play's web pages do not expose a download size for most apps. size is emitted only when the source includes it.
  • Developer catalogs: pagination follows the continuation token. A very large publisher can still have more apps than the selected maxItems.
  • Permissions and data safety: these are separate Play endpoints. If one app has no declaration, the record still includes its identity and omits the empty section with a warning.

FAQ

Do I need a Google account, cookie, or API key? No. All seven modes use public Play pages and RPCs that work without authentication.

Does country change reviews? No. country controls the storefront, pricing, search result set, and availability. Reviews are selected by language; this is why the actor keeps the two inputs separate.

Why is a package missing from a search run? Google Play's search covers a limited result set per keyword, and some terms return fewer than 20 apps. Try a broader keyword or add the package directly in packageNames.

What happens when Google blocks a request? The actor retries with bounded exponential backoff. If every request is blocked, the run fails loudly with a blocked-request message. A proxy can be supplied, but it is never required.

Can I mix apps and search in one run? Use details or search with includeDetails, or run separate tasks. Keeping modes separate makes row counts and output shapes predictable.

Is this affiliated with Google? No. This is an independent third-party actor that reads public Google Play pages.

Python quickstart

Use a schema-derived input and the Python standard library to start a run. An Apify account and token are required for execution.

Open the step-by-step Python guide →

Source build yabCXYoj5lcWqvbGd. Documentation is regenerated from the default published build; private drafts are not included.