App Intelligence Bundle: Listing, Charts, Reviews & Developer avatar

App Intelligence Bundle: Listing, Charts, Reviews & Developer

Pricing

from $0.50 / 1,000 app profiles

Go to Apify Store
App Intelligence Bundle: Listing, Charts, Reviews & Developer

App Intelligence Bundle: Listing, Charts, Reviews & Developer

One app in, a full profile out. Pulls the store listing, scans the country top charts for its position, samples recent reviews into a star breakdown, and lists everything else the developer ships. Four scrapers, one run, joined on the app.

Pricing

from $0.50 / 1,000 app profiles

Rating

0.0

(0)

Developer

Daniel Meshulam

Daniel Meshulam

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

9 days ago

Last modified

Share

Give it an app. Get back the listing, its top-chart position by country, a star breakdown of recent reviews, and everything else that developer ships.

{ "appIds": ["324684580", "com.spotify.music"], "chartCountries": ["us", "gb"] }

Four scrapers, one run, joined on the app. No key, no login.

Why this is a bundle and not four runs

You could run the four Actors separately. Two of the joins are the reason not to.

The developer name is not an input you have. It comes out of the listing, and the two stores spell the same company differently: Apple returns Spotify, Google returns Spotify AB. So the portfolio lookup cannot happen until the listing has, and it has to try both spellings. That ordering is the bundle.

Chart position is not a per-app query. The charts endpoint answers "what is in the US top-free chart", not "where is this app". Answering the question you actually have means pulling the chart and scanning it. Here isCharting is false when you asked and it was not there, which is a real answer, rather than a missing field you have to interpret. It is null when no chart covering that app was read at all, which is a different answer and says so.

What one row gives you

Field
title, appId, platform, developer, developerIdidentity
storeRating, storeRatingCountthe store's own lifetime numbers
price, isFree, version, updatedAt, genreslisting state
isCharting, chartPositionsrank per country, chart and category
reviews.starCounts, reviews.negativeShare, reviews.sampleMeanRatingthe recent sample, which is where a slide shows up first
recentNegativeReviewsthe five most recent 1-2 star reviews, verbatim
developerAppCount, developerOtherAppsthe rest of the portfolio, by rating count
incompletePartswhich step fell short, if any

The store's lifetime rating and the recent sample mean are deliberately both present. A 4.7 lifetime average with a 2.9 recent sample is the single most useful thing this returns, and averaging them together would hide it.

Three output views

The dataset ships with Overview, Chart positions and Review sentiment tabs, so you can read the part you came for without writing a transformation.

Partial profiles are labelled, not hidden

A member Actor that fails does not fail the run. A listing without reviews is still worth having, so the missing part is named in incompleteParts and the rest is returned. What is never returned is a profile that looks complete and is not.

What it costs

Each member Actor charges its own normal rate, because the runs happen under your account with your token: App Store & Google Play Scraper, App Store Top Charts Scraper, App Store & Google Play Reviews Scraper and App Store Developer Portfolio Scraper. This Actor adds one small charge per composed profile on top.

That is the honest accounting. A bundle that hides the cost of what it triggers is a trap, so: profiling two apps with charts in two countries and 100 reviews each is four member runs, and the reviews are the expensive part at $0.20 per 1,000.

Set a maximum charge per run in the run options for a hard ceiling. It is honoured, and the Actor stops cleanly rather than being killed mid-write.

Use cases

  • ASO and competitive tracking: schedule it weekly on a competitor set and watch rating, version cadence and chart rank move together
  • Publisher due diligence: one call tells you how many apps a developer ships and how the rest of them are rated
  • Release regression: recentNegativeReviews carries appVersion, so a bad release shows up as complaints clustered on one version
  • Market entry: run the same app across chartCountries to see where it charts and where it does not
  • Feeding an LLM: one composed JSON object per app rather than four datasets to reconcile

Notes

  • Apple charts only. Google Play publishes no equivalent public chart feed, so chartPositions covers the iOS side of a profile. The Android listing and reviews are unaffected.
  • The developer portfolio is an iOS catalogue. An Android-only developer name may return nothing; that shows up in incompleteParts rather than as a silent empty list.
  • Reviews are a recent sample, not the full history. Both stores expose only a recent window, and reviewsSampled tells you how many actually came back.
  • chartCountries costs one chart pull per country per chart type, so three countries and two chart types is six pulls. Trim it if you only care about one market.

FAQ

Do I need an App Store or Google Play API key?

No. Every member Actor reads public store endpoints with no key and no login.

Which identifier do I pass?

The App Store takes a numeric id (324684580) or an iOS bundle id; Google Play takes the package name (com.spotify.music). Pass both forms of the same app to get a profile per store in one run. Passing an Android package and expecting iOS data back returns an empty iOS side, not an error.

Because it was not in the charts you asked for. Charts are per country, per chart type and per category, and a very popular app can be absent from top-free while sitting high in top-grossing. The default scans free and paid; add top-grossing if that is the question.

On an Android row isCharting is null rather than false. The chart feeds read here are Apple's, so a Play package is never going to appear in one, and saying false would claim a check that never happened.

How do I spot a bad release?

Compare storeRating, which is lifetime, against reviews.sampleMeanRating, which is the recent window. A gap between them is a change in sentiment. Then read recentNegativeReviews, where each entry carries the appVersion it was written against.

Can I track this over time?

Yes, and that is the intended use. Run it on an Apify Schedule; every run appends to the dataset with its own timestamp, so a few weeks of runs is a rating and chart history that neither store publishes.

Why is one part of my profile empty?

Check incompleteParts. It names the step that fell short and why, whether that was a timeout, a member Actor error, or an identifier that resolved on one store and not the other.

Is it cheaper than running the four Actors myself?

No, and it does not claim to be. The member Actors charge the same either way. What you save is the ordering, the developer-name join, the chart scan, and reconciling four datasets whose fields do not line up.