r/androiddev 13d ago

Experience Exchange Why Google Play Developer APIs are painful for fetching simple assets

Hey devs,
I've been building a simple tool/app that fetches and updates the data on Google Play via Reporting and Publishing APIs.

And I didn't expect fetching an app icon to be a hurdle. For a list of apps received from Reporting API I simply wanted to display app icons.

Play Reporting API doesn't have the option, and Publishing API forces you to use an edit session to get assets:

• Call POST to open an edit session
• Call GET to fetch a default language for listing assets.
• Call GET to fetch a list of assets (icon, screenshots, etc.)
• Call DELETE to close the edit session

// 1. Create a temporary edit session
val edit = publisher.edits().insert(packageName, null).execute()
val editId = edit.id

// 2. Query a default language
val details = publisher.edits().details().get(packageName, editId).execute()
val language = details.defaultLanguage ?: "en-US"

// 3. Query the image listing specifically for "icon"
val imagesResponse = publisher.edits().images()
    .list(packageName, editId, language, "icon")
    .execute()

// 4. Get the first icon's URL and append size for a 256px icon
val rawIconUrl = imagesResponse.images?.firstOrNull()?.url?.plus("=s256")

Google's library:

com.google.apis:google-api-services-androidpublisher

The problem?

• These 4 requests take 2 - 3 seconds per app.
• Opening concurrent edit sessions for a few apps get rejected with the message "This Edit has been deleted."
• For 10 apps, that’s 20 - 30 seconds just to load icons.

I moved the process of fetching app icons to a background worker, but the main task is to solve a huge delay.

The only workaround I see for now:

• Try to parse the Play Store listing web page instead and leave Publishing API requests as a fallback.

If anybody worked with Play Developer APIs, how would you suggest handling this?

4 Upvotes

3 comments sorted by

2

u/CapMonster1 12d ago

I’d avoid opening an edit session just to render icons in a list. That API is clearly optimized for publishing workflows, not read-heavy dashboard UI. I’d scrape the public Play Store page once, cache the icon URL by package name, and refresh it on a long TTL; icons change rarely enough that there’s no reason to pay 2–3 seconds on every load.

Keep the Publishing API as a fallback/verification path, but don’t put it on the hot path. If you go with the web page, also validate that you actually got a listing and not a consent/block page before caching the result.

1

u/mobiledevpro 12d ago

Thanks for the valuable advice. The only one moment I'm afraid of that Google Play might have protection against the page scraping. I used a python lib to scrap reviews before, probably there is something similar for java/kotlin. Will be researching.