PHPackages                             evrenonur/google-play-scraper - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Utility &amp; Helpers](/categories/utility)
4. /
5. evrenonur/google-play-scraper

ActiveLibrary[Utility &amp; Helpers](/categories/utility)

evrenonur/google-play-scraper
=============================

PHP library to scrape application data from the Google Play Store with proxy support

v1.0.1(3mo ago)091MITPHPPHP ^8.2CI passing

Since Mar 19Pushed 3mo agoCompare

[ Source](https://github.com/evrenonur/google-play-scraper)[ Packagist](https://packagist.org/packages/evrenonur/google-play-scraper)[ RSS](/packages/evrenonur-google-play-scraper/feed)WikiDiscussions main Synced 3w ago

READMEChangelog (1)Dependencies (5)Versions (7)Used By (0)

Google Play Scraper for PHP
===========================

[](#google-play-scraper-for-php)

[![Latest Version on Packagist](https://camo.githubusercontent.com/f465060d210ec13dc90916f63db95a370d6ed651ca4c1602e1f1ce1361263a53/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f762f657672656e6f6e75722f676f6f676c652d706c61792d73637261706572)](https://packagist.org/packages/evrenonur/google-play-scraper)[![License: MIT](https://camo.githubusercontent.com/fdf2982b9f5d7489dcf44570e714e3a15fce6253e0cc6b5aa61a075aac2ff71b/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4c6963656e73652d4d49542d79656c6c6f772e737667)](LICENSE)[![PHP Version](https://camo.githubusercontent.com/b8c88c618d1de544036ac4292103b1705c34a1d7a2626c0a71307e400f587500/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f7068702d762f657672656e6f6e75722f676f6f676c652d706c61792d73637261706572)](https://packagist.org/packages/evrenonur/google-play-scraper)[![Tests](https://github.com/evrenonur/google-play-scraper/actions/workflows/tests.yml/badge.svg?branch=main)](https://github.com/evrenonur/google-play-scraper/actions/workflows/tests.yml)

Google Play Scraper: Easily Scrape Google Play Store Data
---------------------------------------------------------

[](#google-play-scraper-easily-scrape-google-play-store-data)

Scrape detailed app information, search results, reviews, and more from the Google Play Store with a single PHP library.

> This package is a PHP port of [facundoolano/google-play-scraper](https://github.com/facundoolano/google-play-scraper) (Node.js).

Features
--------

[](#features)

- **10 Scraping Methods:** app, search, list, developer, suggest, reviews, similar, permissions, dataSafety, categories
- **Proxy Support:** HTTP, HTTPS, SOCKS5 proxies with authentication
- **Throttling:** Built-in request rate limiting
- **Pagination:** Token-based review pagination
- **Modern PHP:** PHP 8.2+, Enums, named arguments, readonly properties
- **Customizable HTTP:** Full HTTP client control with custom Guzzle options

Requirements
------------

[](#requirements)

- PHP &gt;= 8.2
- Composer
- ext-json
- ext-mbstring

Installation
------------

[](#installation)

Install via Composer:

```
composer require evrenonur/google-play-scraper
```

Usage
-----

[](#usage)

Available methods:

- [app](#app): Retrieves the full detail of an application.
- [list](#list): Retrieves a list of applications from one of the collections at Google Play.
- [search](#search): Retrieves a list of apps that results of searching by the given term.
- [developer](#developer): Returns the list of applications by the given developer name.
- [suggest](#suggest): Given a string returns up to five suggestions to complete a search query term.
- [reviews](#reviews): Retrieves a page of reviews for a specific application.
- [similar](#similar): Returns a list of similar apps to the one specified.
- [permissions](#permissions): Returns the list of permissions an app has access to.
- [dataSafety](#datasafety): Returns the data safety information of an app.
- [categories](#categories): Retrieve a full list of categories present from dropdown menu on Google Play.

### app

[](#app)

Retrieves the full detail of an application. Parameters:

- `appId`: the Google Play id of the application (the `?id=` parameter on the url).
- `lang` (optional, defaults to `'en'`): the two letter language code in which to fetch the app page.
- `country` (optional, defaults to `'us'`): the two letter country code used to retrieve the applications.

Example:

```
use GooglePlayScraper\GooglePlayScraper;

$scraper = new GooglePlayScraper();
$app = $scraper->app('com.google.android.apps.translate');
```

Results:

```
[
    'title' => 'Google Translate',
    'description' => 'Translate between 103 languages by typing...',
    'summary' => 'The world is closer than ever with over 100 languages',
    'installs' => '500,000,000+',
    'minInstalls' => 500000000,
    'maxInstalls' => 898626813,
    'score' => 4.482483,
    'scoreText' => '4.5',
    'ratings' => 6811669,
    'reviews' => 1614618,
    'histogram' => ['1' => 370042, '2' => 145558, '3' => 375720, '4' => 856865, '5' => 5063481],
    'price' => 0,
    'free' => true,
    'currency' => 'USD',
    'offersIAP' => false,
    'developer' => 'Google LLC',
    'developerId' => '5700313618786177705',
    'developerEmail' => 'translate-android-support@google.com',
    'developerWebsite' => 'http://support.google.com/translate',
    'privacyPolicy' => 'http://www.google.com/policies/privacy/',
    'genre' => 'Tools',
    'genreId' => 'TOOLS',
    'categories' => [
        ['name' => 'Tools', 'id' => 'TOOLS'],
    ],
    'icon' => 'https://lh3.googleusercontent.com/...',
    'headerImage' => 'https://lh3.googleusercontent.com/...',
    'screenshots' => ['https://lh3.googleusercontent.com/...'],
    'contentRating' => 'Everyone',
    'adSupported' => false,
    'updated' => 1576868577000,
    'version' => 'Varies with device',
    'appId' => 'com.google.android.apps.translate',
    'url' => 'https://play.google.com/store/apps/details?id=com.google.android.apps.translate&hl=en&gl=us',
]
```

### list

[](#list)

Retrieves a list of applications from one of the collections at Google Play. Parameters:

- `collection` (optional, defaults to `Collection::TOP_FREE`): the Google Play collection to retrieve. Options: `TOP_FREE`, `TOP_PAID`, `GROSSING`.
- `category` (optional, defaults to `Category::APPLICATION`): the category to filter by. Use [Category enum](#category) values.
- `num` (optional, defaults to `500`): the number of apps to retrieve.
- `lang` (optional, defaults to `'en'`): the two letter language code.
- `country` (optional, defaults to `'us'`): the two letter country code.
- `fullDetail` (optional, defaults to `false`): if `true`, an extra request will be made for every resulting app to fetch its full detail.

Example:

```
use GooglePlayScraper\GooglePlayScraper;
use GooglePlayScraper\Enum\Collection;
use GooglePlayScraper\Enum\Category;

$scraper = new GooglePlayScraper();
$apps = $scraper->list(
    collection: Collection::TOP_FREE,
    category: Category::GAME_ACTION,
    num: 2,
);
```

Results:

```
[
    [
        'url' => 'https://play.google.com/store/apps/details?id=com.example.game',
        'appId' => 'com.example.game',
        'title' => 'Example Game',
        'summary' => 'An amazing game!',
        'developer' => 'Example Dev',
        'developerId' => '1234567890',
        'icon' => 'https://lh3.googleusercontent.com/...',
        'score' => 4.2,
        'scoreText' => '4.2',
        'price' => 0,
        'free' => true,
    ],
    // ...
]
```

### search

[](#search)

Retrieves a list of apps that results of searching by the given term. Parameters:

- `term`: the term to search by.
- `num` (optional, defaults to `20`, max `250`): the number of apps to retrieve.
- `lang` (optional, defaults to `'en'`): the two letter language code.
- `country` (optional, defaults to `'us'`): the two letter country code.
- `fullDetail` (optional, defaults to `false`): if `true`, an extra request will be made for every resulting app to fetch its full detail.
- `price` (optional, defaults to `Price::ALL`): price filter.
    - `Price::ALL`: free and paid
    - `Price::FREE`: free apps only
    - `Price::PAID`: paid apps only

Example:

```
use GooglePlayScraper\GooglePlayScraper;
use GooglePlayScraper\Enum\Price;

$scraper = new GooglePlayScraper();
$results = $scraper->search(
    term: 'whatsapp',
    num: 5,
    price: Price::FREE,
);
```

Results:

```
[
    [
        'url' => 'https://play.google.com/store/apps/details?id=com.whatsapp',
        'appId' => 'com.whatsapp',
        'title' => 'WhatsApp Messenger',
        'summary' => 'Simple. Reliable. Private.',
        'developer' => 'WhatsApp LLC',
        'developerId' => 'WhatsApp+LLC',
        'icon' => 'https://lh3.googleusercontent.com/...',
        'score' => 4.2,
        'scoreText' => '4.2',
        'price' => 0,
        'free' => true,
    ],
    // ...
]
```

### developer

[](#developer)

Returns the list of applications by the given developer name or ID. Parameters:

- `devId`: the developer name or the numeric developer ID.
- `lang` (optional, defaults to `'en'`): the two letter language code.
- `country` (optional, defaults to `'us'`): the two letter country code.
- `num` (optional, defaults to `60`): the number of apps to retrieve.
- `fullDetail` (optional, defaults to `false`): if `true`, an extra request will be made for every resulting app to fetch its full detail.

Example:

```
$scraper = new GooglePlayScraper();

// By developer name
$apps = $scraper->developer(devId: 'Google LLC');

// By numeric ID
$apps = $scraper->developer(devId: '5700313618786177705');
```

Results:

```
[
    [
        'url' => 'https://play.google.com/store/apps/details?id=com.google.android.apps.translate',
        'appId' => 'com.google.android.apps.translate',
        'title' => 'Google Translate',
        'developer' => 'Google LLC',
        'icon' => 'https://lh3.googleusercontent.com/...',
        'score' => 4.5,
        'scoreText' => '4.5',
        'price' => 0,
        'free' => true,
    ],
    // ...
]
```

### suggest

[](#suggest)

Given a string returns up to five suggestions to complete a search query term. Parameters:

- `term`: the term to get suggestions for.
- `lang` (optional, defaults to `'en'`): the two letter language code.
- `country` (optional, defaults to `'us'`): the two letter country code.

Example:

```
$scraper = new GooglePlayScraper();
$suggestions = $scraper->suggest('inst');
```

Results:

```
['instagram', 'instagram lite', 'instreet', 'instant apps', 'instapay']
```

### reviews

[](#reviews)

Retrieves a page of reviews for a specific application. Parameters:

- `appId`: the Google Play id of the application.
- `sort` (optional, defaults to `Sort::NEWEST`): the ordering of the reviews.
    - `Sort::HELPFULNESS`: most helpful first
    - `Sort::NEWEST`: newest first
    - `Sort::RATING`: highest rated first
- `lang` (optional, defaults to `'en'`): the two letter language code.
- `country` (optional, defaults to `'us'`): the two letter country code.
- `num` (optional, defaults to `150`): the number of reviews to retrieve.
- `paginate` (optional, defaults to `false`): enable pagination.
- `nextPaginationToken` (optional, defaults to `null`): token for the next page.

Example:

```
use GooglePlayScraper\GooglePlayScraper;
use GooglePlayScraper\Enum\Sort;

$scraper = new GooglePlayScraper();

// Basic usage
$result = $scraper->reviews('com.whatsapp', sort: Sort::NEWEST, num: 10);

// Pagination
$page1 = $scraper->reviews('com.whatsapp', num: 10, paginate: true);
$page2 = $scraper->reviews(
    'com.whatsapp',
    num: 10,
    paginate: true,
    nextPaginationToken: $page1['nextPaginationToken'],
);
```

Results:

```
[
    'data' => [
        [
            'id' => 'gp:AOqpTOF...',
            'userName' => 'John Doe',
            'userImage' => 'https://lh3.googleusercontent.com/...',
            'date' => '2024-01-15T12:00:00.000Z',
            'score' => 5,
            'scoreText' => '5',
            'url' => 'https://play.google.com/store/apps/details?id=com.whatsapp&reviewId=gp:AOqpTOF...',
            'title' => 'Great app',
            'text' => 'Very reliable messaging application.',
            'replyDate' => '2024-01-16T10:00:00.000Z',
            'replyText' => 'Thanks for your feedback!',
            'version' => '2.24.1.6',
            'thumbsUp' => 42,
            'criterias' => [],
        ],
        // ...
    ],
    'nextPaginationToken' => 'CpEBCo4BCi...',
]
```

### similar

[](#similar)

Returns a list of similar apps to the one specified. Parameters:

- `appId`: the Google Play id of the application to get similar apps for.
- `lang` (optional, defaults to `'en'`): the two letter language code.
- `country` (optional, defaults to `'us'`): the two letter country code.
- `fullDetail` (optional, defaults to `false`): if `true`, an extra request will be made for every resulting app to fetch its full detail.

Example:

```
$scraper = new GooglePlayScraper();
$apps = $scraper->similar('com.whatsapp');
```

Results:

```
[
    [
        'url' => 'https://play.google.com/store/apps/details?id=org.telegram.messenger',
        'appId' => 'org.telegram.messenger',
        'title' => 'Telegram',
        'developer' => 'Telegram FZ-LLC',
        'icon' => 'https://lh3.googleusercontent.com/...',
        'score' => 4.3,
        'scoreText' => '4.3',
        'price' => 0,
        'free' => true,
    ],
    // ...
]
```

### permissions

[](#permissions)

Returns the list of permissions an app has access to. Parameters:

- `appId`: the Google Play id of the application.
- `lang` (optional, defaults to `'en'`): the two letter language code.
- `country` (optional, defaults to `'us'`): the two letter country code.
- `short` (optional, defaults to `false`): if `true`, returns only the permission group names.

Example:

```
$scraper = new GooglePlayScraper();

// Detailed permissions
$permissions = $scraper->permissions('com.google.android.apps.translate');

// Short format
$short = $scraper->permissions('com.google.android.apps.translate', short: true);
```

Results (detailed):

```
[
    ['type' => 'Identity', 'permission' => 'find accounts on the device'],
    ['type' => 'Contacts', 'permission' => 'read your contacts'],
    ['type' => 'Photos/Media/Files', 'permission' => 'read the contents of your USB storage'],
    // ...
]
```

Results (short):

```
['Identity', 'Contacts', 'Photos/Media/Files', 'Camera', 'Microphone', 'Other']
```

### dataSafety

[](#datasafety)

Returns the data safety information of an app. Parameters:

- `appId`: the Google Play id of the application.
- `lang` (optional, defaults to `'en'`): the two letter language code.

Example:

```
$scraper = new GooglePlayScraper();
$safety = $scraper->dataSafety('com.google.android.apps.translate');
```

Results:

```
[
    'sharedData' => [
        [
            'data' => 'App activity',
            'optional' => false,
            'purpose' => 'App functionality, Analytics',
            'type' => 'App interactions',
        ],
        // ...
    ],
    'collectedData' => [
        [
            'data' => 'Personal info',
            'optional' => false,
            'purpose' => 'App functionality',
            'type' => 'Name',
        ],
        // ...
    ],
    'securityPractices' => [
        [
            'practice' => 'Data is encrypted in transit',
            'description' => 'Your data is transferred over a secure connection',
        ],
        // ...
    ],
    'privacyPolicyUrl' => 'http://www.google.com/policies/privacy/',
]
```

### categories

[](#categories)

Retrieves a full list of categories present from dropdown menu on Google Play.

Example:

```
$scraper = new GooglePlayScraper();
$categories = $scraper->categories();
```

Results:

```
['APPLICATION', 'GAME', 'FAMILY', 'PHOTOGRAPHY', 'ENTERTAINMENT', 'COMMUNICATION', ...]
```

Configuration
-------------

[](#configuration)

### Proxy Support

[](#proxy-support)

```
// HTTP proxy
$scraper = new GooglePlayScraper(proxy: 'http://proxy.example.com:8080');

// SOCKS5 proxy
$scraper = new GooglePlayScraper(proxy: 'socks5://proxy.example.com:1080');

// Authenticated proxy
$scraper = new GooglePlayScraper(proxy: 'http://user:pass@proxy.example.com:8080');

// Change proxy at runtime
$scraper->setProxy('http://new-proxy.example.com:3128');
$scraper->setProxy(null); // Remove proxy
```

### Throttling

[](#throttling)

```
// Max 10 requests per 2 seconds
$scraper = new GooglePlayScraper(
    throttleLimit: 10,
    throttleInterval: 2000,
);
```

### Custom Guzzle Options

[](#custom-guzzle-options)

```
$scraper = new GooglePlayScraper(
    guzzleOptions: [
        'timeout' => 60,
        'verify' => false,
        'headers' => ['Accept-Language' => 'tr-TR'],
    ],
);
```

Enums
-----

[](#enums)

### Collection

[](#collection)

ValueDescription`Collection::TOP_FREE`Top free apps`Collection::TOP_PAID`Top paid apps`Collection::GROSSING`Top grossing apps### Category

[](#category)

53 category values:

App CategoriesGame Categories`APPLICATION`, `COMMUNICATION`, `EDUCATION`, `ENTERTAINMENT`, `FINANCE`, `HEALTH_AND_FITNESS`, `LIFESTYLE`, `MUSIC_AND_AUDIO`, `NEWS_AND_MAGAZINES`, `PHOTOGRAPHY`, `PRODUCTIVITY`, `SHOPPING`, `SOCIAL`, `SPORTS`, `TOOLS`, `TRAVEL_AND_LOCAL`, `VIDEO_PLAYERS`, `WEATHER`, ...`GAME`, `GAME_ACTION`, `GAME_ADVENTURE`, `GAME_ARCADE`, `GAME_BOARD`, `GAME_CARD`, `GAME_CASINO`, `GAME_CASUAL`, `GAME_EDUCATIONAL`, `GAME_MUSIC`, `GAME_PUZZLE`, `GAME_RACING`, `GAME_ROLE_PLAYING`, `GAME_SIMULATION`, `GAME_SPORTS`, `GAME_STRATEGY`, `GAME_TRIVIA`, `GAME_WORD`### Sort

[](#sort)

ValueDescription`Sort::HELPFULNESS`Most helpful first`Sort::NEWEST`Newest first`Sort::RATING`Highest rated first### Price

[](#price)

ValueDescription`Price::ALL`All apps`Price::FREE`Free apps only`Price::PAID`Paid apps only### Age

[](#age)

ValueDescription`Age::FIVE_UNDER`Ages 5 &amp; under`Age::SIX_EIGHT`Ages 6-8`Age::NINE_UP`Ages 9 &amp; upProject Structure
-----------------

[](#project-structure)

```
src/
├── GooglePlayScraper.php          # Main facade class
├── Enum/
│   ├── Age.php
│   ├── Category.php               # 53 app/game categories
│   ├── Collection.php             # TOP_FREE, TOP_PAID, GROSSING
│   ├── Permission.php
│   ├── Price.php                  # ALL, FREE, PAID
│   └── Sort.php                   # HELPFULNESS, NEWEST, RATING
├── Scraper/
│   ├── AppScraper.php             # App details
│   ├── CategoriesScraper.php      # Category listing
│   ├── DataSafetyScraper.php      # Data safety info
│   ├── DeveloperScraper.php       # Developer apps
│   ├── ListScraper.php            # Collection lists
│   ├── PermissionsScraper.php     # App permissions
│   ├── ReviewsScraper.php         # Reviews with pagination
│   ├── SearchScraper.php          # Search
│   ├── SimilarScraper.php         # Similar apps
│   └── SuggestScraper.php         # Search suggestions
└── Utils/
    ├── HttpClient.php             # Guzzle wrapper (proxy + throttle)
    ├── MappingHelper.php          # Data transformation helpers
    └── ScriptData.php             # HTML script tag parser

```

Testing
-------

[](#testing)

```
# Run all unit tests (84 tests)
composer test

# Run with PHPUnit directly
vendor/bin/phpunit

# Integration tests (requires network access)
php tests/integration.php
```

### Test Structure

[](#test-structure)

SuiteFilesDescription**Unit Tests**`tests/`Mock-based, no network access required**Scraper Tests**`tests/Scraper/`One test file per scraper (10 files)**Utility Tests**`tests/`ScriptData, MappingHelper, HttpClient**Enum Tests**`tests/EnumTest.php`Category, Collection, Sort, Price, Age**Facade Tests**`tests/GooglePlayScraperTest.php`Main facade class**Integration Tests**`tests/integration.php`Real API testsDependencies
------------

[](#dependencies)

PackageVersionPurpose`guzzlehttp/guzzle`^7.9HTTP client`symfony/dom-crawler`^7.2HTML parsing`symfony/css-selector`^7.2CSS selector support`psr/log`^3.0Logging interface`phpunit/phpunit`^12.5Testing (dev)License
-------

[](#license)

MIT License. See [LICENSE](LICENSE) for details.

Reference
---------

[](#reference)

This PHP package was developed based on the architecture and workflows of [facundoolano/google-play-scraper](https://github.com/facundoolano/google-play-scraper) (Node.js).

###  Health Score

40

—

FairBetter than 86% of packages

Maintenance82

Actively maintained with recent releases

Popularity9

Limited adoption so far

Community8

Small or concentrated contributor base

Maturity51

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 83.3% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~0 days

Total

6

Last Release

96d ago

Major Versions

0.0.4 → v1.0.02026-03-19

### Community

Maintainers

![](https://www.gravatar.com/avatar/1fc8601ce58b58037771714731b5909d88b0e08cb3d2e5fcf8e28799dd5376fa?d=identicon)[evrenonur](/maintainers/evrenonur)

---

Top Contributors

[![evrenonur](https://avatars.githubusercontent.com/u/49561437?v=4)](https://github.com/evrenonur "evrenonur (5 commits)")[![github-actions[bot]](https://avatars.githubusercontent.com/in/15368?v=4)](https://github.com/github-actions[bot] "github-actions[bot] (1 commits)")

###  Code Quality

TestsPHPUnit

### Embed Badge

![Health badge](/badges/evrenonur-google-play-scraper/health.svg)

```
[![Health](https://phpackages.com/badges/evrenonur-google-play-scraper/health.svg)](https://phpackages.com/packages/evrenonur-google-play-scraper)
```

###  Alternatives

[craftcms/cms

Craft CMS

3.6k3.6M2.9k](/packages/craftcms-cms)[tempest/framework

The PHP framework that gets out of your way.

2.2k31.1k12](/packages/tempest-framework)[civicrm/civicrm-core

Open source constituent relationship management for non-profits, NGOs and advocacy organizations.

749284.3k35](/packages/civicrm-civicrm-core)[spatie/laravel-export

Create a static site bundle from a Laravel app

672139.5k6](/packages/spatie-laravel-export)[blackfire/player

A powerful web crawler and web scraper with Blackfire support

49517.1k](/packages/blackfire-player)[crwlr/crawler

Web crawling and scraping library.

36816.4k2](/packages/crwlr-crawler)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
