Google Play Scraper: Apps, Developers & Ratings avatar

Google Play Scraper: Apps, Developers & Ratings

Pricing

from $0.20 / 1,000 apps

Go to Apify Store
Google Play Scraper: Apps, Developers & Ratings

Google Play Scraper: Apps, Developers & Ratings

Scrape Google Play Store search results: app name, package id, developer, rating, icon and store URL. Any country and language. No login, no API key.

Pricing

from $0.20 / 1,000 apps

Rating

0.0

(0)

Developer

The Mine Works

The Mine Works

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

Categories

Share

The Mine Works: 544 users across 100 public Actors, >99% run success. Pay only for results delivered. Browse all Actors.

Scrape Google Play Store search results: app name, package id, developer, star rating and icon, for any country storefront. No login, no API key, no browser.

✅ Name, developer, rating and icon on ~100% of records · ✅ Any country and language · ✅ Runs on the cheapest proxy tier · ✅ Empty runs never billed

Search the Play Store

{
"queries": ["fitness", "habit tracker"],
"country": "US",
"language": "en",
"maxItems": 100
}

Google Play returns a single result page per search term, so breadth comes from supplying more terms, not from deeper pagination. A run with ten keywords returns far more than one keyword with a high maxItems.

Compare an app market across countries

{
"queries": ["mobile banking"],
"country": "IN",
"language": "en",
"maxItems": 50
}

Play rankings differ sharply by storefront, so the same query in US, IN, BR and DE returns different apps and different competitive sets.

What you get for each app

{
"app_id": "com.myfitnesspal.android",
"name": "MyFitnessPal: Calorie Counter",
"developer": "MyFitnessPal, Inc.",
"rating": 4.4,
"icon": "https://play-lh.googleusercontent.com/...",
"app_url": "https://play.google.com/store/apps/details?id=com.myfitnesspal.android&hl=en&gl=US",
"country": "US"
}
FieldDescription
📦 app_idAndroid package name, the app's stable identifier
📱 nameApp title as shown in the store
🏢 developerPublisher name
ratingStar rating out of 5
🖼️ iconApp icon URL
🌍 country, languageWhich storefront the result came from
🔗 app_urlStore link, pinned to the same country and language

Common use cases

App Store Optimisation research. See who ranks for a keyword in a given country before choosing your own.

Competitive tracking. Watch which apps appear for your category keywords over time with monitor mode.

Market entry research, comparing the same query across storefronts.

Building an app dataset from a keyword list, with package ids you can feed into other tools.

Run it on a schedule

  1. Run once with the keyword list you want repeated, then click Save as a task.
  2. Turn on Monitor mode so later runs return only apps that are newly ranking.
  3. In the Apify Console go to Schedules and add the saved task.

Nothing is charged just for a schedule existing.

FAQ

Do I need a Google account or API key? No. Everything comes from public store search pages.

How many apps does one keyword return? About 30, which is what Google Play shows on a search page. Add more keywords for more coverage.

Can I get install counts and full descriptions? Not from search results. Those live on individual app detail pages, and search only exposes name, developer, rating and icon. Fields that search cannot provide are not included rather than returned empty.

Does country actually change the results? Yes, substantially. Both country and language are passed through to Google and are recorded on every row so you can tell results apart.

Is this GDPR compliant? It collects public app store listings and publisher names, not personal data.

Use from Claude, ChatGPT and any MCP agent

https://mcp.apify.com/?tools=themineworks/google-play-search
import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });
const run = await client.actor('themineworks/google-play-search').call({
queries: ['fitness', 'habit tracker'],
country: 'US',
maxItems: 100,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);