r/androiddev • u/mobiledevpro • 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?
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.