Play Billing Library 8 deprecation: migrate to v9 by 31 August 2027

New apps and updates must use Play Billing Library 9 from 31 August 2027. Ship the upgrade by May 2027 and give subscriptions a full test cycle.

Read time
17 min
Word count
2.5K
Sections
10
FAQs
8
Share
Testers sort purchase, renewal and restore cards beside Android phones on a test stand, with Google Play and Android logos
On this page · 10 sections
  1. What Google has published, and the dates that matter
  2. Step one: find out which PBL version you actually ship
  3. What breaks between PBL 8 and PBL 9
  4. Extra work if you are still on PBL 7
  5. New in 9.x that is worth adopting
  6. Testing with licence testers and Play Billing Lab
  7. A dated rollout plan
  8. India notes: UPI, user choice billing and what the docs do not say
  9. How eCorpIT can help
  10. References

Summary. Google's version deprecation FAQ, last updated on 23 October 2026, sets 31 August 2027 as the deadline by which new apps and app updates must move off Play Billing Library (PBL) 8, with an extension to 1 November 2027 available in Play Console. Each version gets two years, so PBL 9 stays accepted until 31 August 2028. The previous round has closed: the PBL 7 extension ended on 1 November 2026, so an app still on 7 cannot ship an update today. PBL 9.0.0 shipped on 19 May 2026 and 9.1.0, still the latest release on 7 November 2026, on 18 June 2026. For an app already on 8, the move is mostly deleting SKU-era classes such as SkuDetails, BillingClient.SkuType and QueryPurchaseHistoryParams, plus two behaviour changes: a Play Store blocked by the system now returns BILLING_UNAVAILABLE (code 3) instead of ERROR (code 6), and getLinkUri() for external payments can return null. Teams coming from 7 also take on PBL 8's new product details callback and its minSdk 23 floor. Licence testers see monthly subscriptions renew every 5 minutes, up to six times, so renewal testing takes hours, not months. Our recommendation: ship PBL 9 to production by May 2027.

About this article. For Android teams whose apps sell one-time products or subscriptions through Google Play. We checked every date, API name and test figure on 7 November 2026 against Google's Android Developers pages (the deprecation FAQ, release notes, PBL 9 migration guide, error-handling and testing guides, each last updated 23 October 2026), Google's Maven repository and Play Console Help pages. This is not legal or financial advice, and Google can publish new releases or change programme terms, so re-check the deprecation FAQ before you plan a final release; no vendor paid for inclusion. Researched with AI assistance and reviewed by our editorial team.

What Google has published, and the dates that matter

Google keeps the schedule on one page, the version deprecation FAQ. Every library version has a two-year deprecation cycle, which Google announced at Google I/O 2019 and repeated in its 11 June 2020 blog post introducing version 3. The table below follows Google's, as it stood on 7 November 2026. Our guide to the 2026 PBL 8 deadline covers the round that has just closed.

PBL version New app and update deadline Extension deadline Position on 7 November 2026
5 31 August 2024 1 November 2024 Not accepted for uploads
6 31 August 2025 1 November 2025 Not accepted for uploads
7 31 August 2026 1 November 2026 Not accepted; extension ended 1 November 2026
8 31 August 2027 1 November 2027 Accepted until the deadline
9 31 August 2028 1 November 2028 Current line; latest release 9.1.0

Four rules sit underneath the table.

  1. The rule bites on upload, not on live installs. Google says unmaintained APKs need no update and existing apps keep working; only new apps and updates must use a supported version. A live app on PBL 8 keeps selling after 31 August 2027. The trouble starts when you need to ship any update, including an urgent security fix.
  1. Only billing apps are in scope. The dependency appears only in APKs that require the com.android.vending.BILLING permission.
  1. The extension is a form, not a setting. An app on an unsupported version gets a warning in Play Console, and the extension form sits on that warning's details page under Policy status. It buys distribution time to 1 November; it does not change the requirement.
  1. False warnings have a known cause. If you upgraded and still see a warning, Google says to check that your manifest contains com.google.android.play.billingclient.version, because manifest merging can strip it.

The same month will probably bring a second forced change. Play's target API deadline fell on 31 August in both 2025 and 2026, and the Play Console Help page had no 2027 row on 7 November 2026. Google did say in a February 2026 blog post that Play will require API level 37 for new apps and updates in August 2027. Our target API 37 checklist tracks that round. Two mandatory changes in one release window is the real risk, which is why the plan below ships billing first.

Step one: find out which PBL version you actually ship

Google's first instruction is to check build.gradle. In practice the version can sit in three places.

  • A direct dependency on com.android.billingclient:billing or billing-ktx.
  • A transitive dependency from a cross-platform plugin or a subscription SDK. If a wrapper pins PBL 8, your upgrade waits on its release, so check its changelog now rather than in July.
  • The merged manifest, which carries the version metadata Play reads. Inspect it in Android Studio's merged manifest view before every release candidate.

A dependency report finds transitive copies (swap in your own module and variant names):


            ./gradlew :app:dependencies --configuration releaseRuntimeClasspath | grep billingclient
          

Google's migration guide pins the target at 9.1.0, and the KTX module adds Kotlin extensions and coroutines support:


            dependencies {
    val billingVersion = "9.1.0"
    implementation("com.android.billingclient:billing:$billingVersion")
    // Kotlin extensions and coroutines:
    implementation("com.android.billingclient:billing-ktx:$billingVersion")
}
          

Google also publishes an Android skill for agent-assisted upgrades. Running android skills add play-billing-library-version-upgrade in the Android CLI installs it, and Google says it detects outdated method calls and recommends replacements. Review every change it proposes: in billing code, a silent behaviour change costs revenue.

What breaks between PBL 8 and PBL 9

PBL 8 removed the old SKU query methods but kept several SKU-era classes as deprecated leftovers; PBL 9 removes them. The table follows Google's 8-to-9 list.

Removed in PBL 9 (upgrading from 8) Use instead
BillingClient.SkuType BillingClient.ProductType; Google says INAPP and SUBS work much like the old constants
SkuDetails ProductDetails, the data model that supports one-time products
SkuDetailsParams QueryProductDetailsParams with queryProductDetailsAsync()
SkuDetailsResponseListener ProductDetailsResponseListener with queryProductDetailsAsync()
QueryPurchaseHistoryParams queryPurchasesAsync() for active or pending purchases; your backend for consumed purchases; the server-side Voided Purchases API for cancelled or voided ones
getSkuDetailsList() and setSkuDetailsList() BillingFlowParams.Builder.setProductDetailsParamsList()

One documentation quirk: Google's 8-to-9 table names queryProductDetailsAsync() as the replacement for active or pending purchases, while its 7-to-9 table and its purchase history page name queryPurchasesAsync(). The second is the method that returns purchases, so use it. If you used purchase history to decide free-trial eligibility, Google now points you to ProductDetails.getSubscriptionOfferDetails(), which returns only the offers the user is eligible for.

Release 9.0.0, dated 19 May 2026, adds four behaviour changes.

  • Blocked Play Store errors move. When the system blocks the Play Store app, for example in an OEM-customised kids mode, the response changes from ERROR to BILLING_UNAVAILABLE, with a debug message saying the store is blocked. This needs AndroidX Core 1.9 or later. Google's error guide treats ERROR as worth retrying with exponential backoff, but says automatic retries are unlikely to help with BILLING_UNAVAILABLE. A retry loop keyed to ERROR will stop firing for these users, so show a clear message and a manual retry instead.
  • External payment links can be null. If you run an external payments integration, DeveloperProvidedBillingDetails.getLinkUri() is now @Nullable. Handle both null and an empty string before you build a browser intent.
  • The library itself now targets SDK 35. This does not set your app's target.
  • In-app messaging covers opt-in price increases. Users can confirm an opt-in price increase inside your app. Google shows the message from the first day the user can accept it, at most once every 7 days.

Google's PBL 9 guide also lists the launchBillingFlow() sub-response codes as a migration step, although the release notes date them to 8.0.0, so an app already on 8 may have them wired up.

None of this changes acknowledgement. Since PBL 2.0, a purchase must be acknowledged within three days, or the user is refunded and Google revokes it. Prepaid plans shorter than a week must be acknowledged within half the plan duration.

Extra work if you are still on PBL 7

If your app missed the 2026 round, it cannot ship any update until it moves to a supported version. Google's guide covers 7-to-9 in one step, and that path also carries every PBL 8 change. These are the ones that cause build failures or behaviour shifts, taken from the release notes.

Release Change you must handle
8.0.0 (30 June 2025) onProductDetailsResponse() now receives a QueryProductDetailsResult, and unfetched products come back with a product-level status code instead of disappearing
8.0.0 queryPurchaseHistory(), querySkuDetailsAsync(), the no-argument enablePendingPurchases() and the queryPurchasesAsync(String skuType, ...) overload removed
8.0.0 launchBillingFlow() results gain sub-response codes: PAYMENT_DECLINED_DUE_TO_INSUFFICIENT_FUNDS, USER_INELIGIBLE and NO_APPLICABLE_SUB_RESPONSE_CODE
8.1.0 (6 November 2025) minSdkVersion raised to 23, so an app that still supports Android 5.x must raise its own floor
8.1.0 A new queryPurchasesAsync() parameter can include suspended subscriptions, flagged by isSuspended(); do not grant access, send the user to the subscriptions centre
8.1.0 SubscriptionProductReplacementParams adds product-level replacement with a new KEEP_EXISTING mode; setSubscriptionReplacementMode() is due to be deprecated
8.2.0 (9 December 2025) The original external offers APIs, such as enableExternalOffer(), are deprecated; enableBillingProgram() sets up the newer programmes
8.3.0 (23 December 2025) External payments APIs added; a user who abandons an external payment now produces USER_CANCELED instead of ERROR

Two of these need product attention, not just code review: a message for payments declined for insufficient funds, and a screen that sends suspended subscribers to Play's subscriptions centre. Google also recommends enableAutoServiceReconnection(), added in 8.0.0, which reconnects to the billing service when a call arrives while it is disconnected.

New in 9.x that is worth adopting

Release 9.1.0 on 18 June 2026 added Billing Choice APIs: getBillingChoiceInfoAsync() returns the billing choices available to a user, including image URLs and loyalty information, and showBillingProgramInformationDialog() shows a programme's information dialog. These matter only if you enrol in one of Google's billing choice programmes.

Google's guide lists two optional changes for teams already moving.

  • Pending purchases for prepaid plans. These need PBL 7.0 or later and must be enabled explicitly. The subscription starts in SUBSCRIPTION_STATE_PENDING, and you grant access only once the transaction completes.
  • Instalment subscriptions. Google lists these in Brazil, France, Italy and Spain only, so most Indian apps can skip them.

Testing with licence testers and Play Billing Lab

Testing takes most of the calendar time, and Google's testing guide offers ways to compress it. Licence testers get test payment methods that never charge real money: cards that always approve or always decline, slow cards that approve or decline after a few minutes to simulate pending transactions, and a card that approves and then charges back.

Subscriptions bought by licence testers run on an accelerated clock, according to the same guide.

Production period or state Test duration
1 week 5 minutes
1 month 5 minutes
3 months 10 minutes
6 months 15 minutes
1 year 30 minutes
Free trial 3 minutes
Grace period 5 minutes
Account hold 10 minutes

Test subscriptions renew at most six times, not counting free trials and introductory periods. Google warns the times are approximate, so call the API after each expiry instead of trusting a timer. The guide's text says unacknowledged licence-tester purchases are refunded after 3 minutes, while its table of shortened periods lists 5 minutes for acknowledgement. Either way, acknowledgement bugs show up in the first test session rather than three days into production.

Google's Play Billing Lab app adds controls the console lacks. It can accelerate subscription state changes, move a test subscription into grace period or account hold in one step, and test out-of-app purchases against your backend. Testing with real payment methods is also possible, but only after Google enables it through your Play business development contact. Its Response Simulator forces specific BillingResult codes. It needs PBL 7.1.1 or later and a billing-overrides flag in your manifest, which Google suggests pairing with a non-production tag so the flag never reaches a production build.

Three practical limits apply. Draft apps and internal test track releases have spend limits on daily transactions, per-order value and daily total spend, reset every 24 hours. Promo codes are capped at 500 per quarter across all managed products in an app. Google also recommends occasional tests from non-licence accounts, so your app does not depend on test-only behaviour such as renewal timing.

A minimum PBL 9 test matrix covers the following.

  1. A new purchase of each one-time product and each subscription base plan, acknowledged inside the test window.
  1. A declined card, so the sub-response codes reach the right message.
  1. A slow card that approves and one that declines, to exercise pending states.
  1. Six accelerated renewals, then a cancellation, a grace period and an account hold through Play Billing Lab.
  1. An upgrade, a downgrade and, if you use it, the KEEP_EXISTING replacement mode.
  1. A restore on a fresh install using queryPurchasesAsync(), now that the purchase history APIs are gone.
  1. A device or profile where the Play Store is blocked, to confirm the BILLING_UNAVAILABLE path.
  1. A chargeback through the test card, checked against your entitlement revocation.

A dated rollout plan

Working back from 31 August 2027, this schedule leaves room for a late wrapper release and a target API change in the same summer.

When Milestone Exit check
November to December 2026 Inventory every app with the billing permission; record direct and transitive PBL versions Spreadsheet of apps, current PBL version and wrapper owner
January 2027 Code changes on a branch: removed classes, error handling, nullability Clean build on 9.1.0 or later with no deprecated billing calls
February 2027 Internal test track with licence testers; run the eight-case matrix All cases pass; Play Billing Lab state changes verified
March 2027 Closed testing with real users on non-licence accounts No rise in failed purchases or support tickets
April 2027 Staged production rollout, starting small Purchase success and refund rates match the PBL 8 baseline
May 2027 Full rollout Policy status page shows no billing warning
June to July 2027 Buffer, and room for target API work Next release ships without billing changes
31 August 2027 PBL 8 no longer accepted for new apps and updates Nothing left to do
1 November 2027 Last date covered by an extension Use only if a dependency blocked you

Before widening the rollout, compare purchase success, pending-to-purchased conversion and refund rates between the old and new versions. Real-time developer notifications and the Voided Purchases API should already drive entitlements, because the client no longer has a purchase history call to fall back on.

Billing is not the only Google clock running into 2027. Developer verification protections began in select regions on 30 September 2026, and Google plans to expand verification globally in 2027. If you also distribute APKs outside Play, our guide to Android developer verification in 2027 covers that separate timeline.

India notes: UPI, user choice billing and what the docs do not say

Google Play's help page on accepted payment methods in India, checked on 7 November 2026, lists Visa and Mastercard cards, RuPay cards for one-off purchases only, Play balance and UPI. Play accepts UPI from all providers, including for subscriptions, with recurring payments through UPI AutoPay mandates. Netbanking has been discontinued on Play since October 2025. None of this changes between PBL 8 and 9, because payment methods live in Play's purchase screen, not your code. If many Indian subscribers pay through UPI AutoPay, test renewals, grace periods and account holds thoroughly, since mandate problems surface there.

Google's billing developer documentation does not describe UPI-specific behaviour in PBL 9, and we found no Google page saying UPI purchases arrive as pending transactions. Build for pending purchases anyway, using the slow test cards, because your entitlement logic should not assume every purchase completes instantly.

User choice billing in India. Google lets developers offer an alternative billing system alongside Google Play's for mobile and tablet users in India, and cuts its service fee by 4% when a user pays through the alternative system. For what the wider 2026 fee changes mean for margins, see our breakdown of what your app pays on Google Play in 2026. The programme's main conditions are these.

  • Integrate the alternative billing APIs, which need PBL 5.2 or later for the user choice flow, so a PBL 9 app qualifies.
  • Certify PCI DSS compliance and give users a way to report fraudulent transactions.
  • Report every authorised transaction from Indian users to Google within 24 hours through the APIs.
  • Prices may differ between the two billing systems.
  • Web-based payments in an embedded WebView are allowed, subject to the same requirements and service fee.

Google lists India's alternative billing APIs as available since 14 November 2023, with no date yet set for ending manual reporting; manual reporters file monthly, by the fifth business day. If you run user choice billing, add the choice screen and transaction reporting to the PBL 9 test matrix, because the APIs that show that screen ship in the library you are replacing.

How eCorpIT can help

eCorpIT is a Gurugram-based technology organisation, founded in 2021, assessed at CMMI Level 5 and MSME certified, with senior-led engineering teams working across AWS, Microsoft and Google platforms. Our app subscription billing and monetisation service runs Play Billing Library upgrades from the dependency and wrapper audit through the PBL 9 code changes and licence-tester test plan to a staged rollout measured against your purchase and refund baseline. Talk to us at /contact-us/.

Last updated: 7 November 2026.

References

  1. Google Play Billing Library version deprecation, last updated 23 October 2026 — Android Developers
  1. Google Play Billing Library release notes, last updated 23 October 2026 — Android Developers
  1. com.android.billingclient group index — Google Maven repository
  1. Migrate to Google Play Billing Library 9 from versions 7 or 8, last updated 23 October 2026 — Android Developers
  1. Handle BillingResult response codes — Android Developers
  1. Test your Google Play Billing Library integration — Android Developers
  1. Meet Google Play Billing Library Version 3, 11 June 2020 — Android Developers Blog
  1. Target API level requirements for Google Play apps — Play Console Help
  1. Prepare your app for the resizability and orientation changes in Android 17, 13 February 2026 — Android Developers Blog
  1. Query Purchase History — Android Developers
  1. Integrate the Google Play Billing Library into your app — Android Developers
  1. About subscriptions — Android Developers
  1. Test BillingResult response codes — Android Developers
  1. Android developer verification — Android Developers
  1. Accepted payment methods on Google Play, India — Google Play Help
  1. Changes to Google Play's billing requirements for developers serving users in India — Play Console Help
  1. Alternative billing APIs — Android Developers
  1. Understanding user choice billing on Google Play — Play Console Help

Frequently asked

Quick answers.

01 When is Google Play Billing Library 8 deprecated?
Google's deprecation FAQ sets 31 August 2027 as the deadline by which new apps and app updates must use Play Billing Library 9 or later. You can request an extension to 1 November 2027 from the Policy status page in Play Console. Version 9 remains accepted until 31 August 2028 under Google's two-year cycle.
02 Will my live app stop working after 31 August 2027?
No. Google says existing apps keep working and unmaintained APKs do not need updates. The requirement applies when you upload a new app or an update. The practical risk is that you cannot ship any fix, including a security patch, until the app uses Play Billing Library 9 or later.
03 What do I have to change to move from PBL 8 to PBL 9?
Remove the SKU-era classes that PBL 9 deletes, including SkuDetails, SkuDetailsParams, BillingClient.SkuType and QueryPurchaseHistoryParams, and use ProductDetails and queryPurchasesAsync instead. Update error handling, because a system-blocked Play Store now returns BILLING_UNAVAILABLE instead of ERROR, and handle a nullable getLinkUri if you run external payments.
04 My app is still on PBL 7. What should I do?
Move straight to PBL 9 using Google's 7-to-9 migration guide. The PBL 7 extension ended on 1 November 2026, so the app cannot ship updates until it upgrades. Expect the PBL 8 changes as well: a new product details callback, removed purchase history methods, sub-response codes and a minimum SDK of 23.
05 How do I test subscriptions quickly?
Add licence testers in Play Console. Their monthly subscriptions renew about every 5 minutes and yearly ones about every 30 minutes, up to six renewals. Unacknowledged test purchases are refunded within minutes. Use Google's Play Billing Lab app to force grace period and account hold, and the slow test cards for pending purchases.
06 Why does Play Console still warn me after I upgraded?
Google's FAQ says to check that your merged AndroidManifest.xml still contains the com.google.android.play.billingclient.version entry, because manifest merging can remove it and Play then cannot see the new version. Also run a dependency report to confirm the resolved billing version is the one you expect, since a plugin can force an older one.
07 Does user choice billing in India need a specific library version?
Yes. Google's alternative billing guide asks for Play Billing Library 5.2 or later for the user choice flow, so a PBL 9 app meets it. You also need to enrol through Play Console, certify PCI DSS compliance and report Indian transactions within 24 hours. The service fee falls by 4% when users choose your billing system.
08 Do UPI payments need special handling in PBL 9?
Not in code that we could find. Google Play's India payment page lists UPI from all providers and UPI AutoPay for subscriptions, but Google's billing developer documentation describes no UPI-specific API. Handle pending purchases correctly and test renewals, grace periods and account holds, since recurring payment problems show up there.

About the author

Manu Shukla

Founder & Director

Founder of eCorpIT. Hands-on engineer leading senior-only delivery for AI apps, custom software, and cloud systems for global clients.

Subscribe

One engineering note a week. No fluff, no spam.

Senior-architect playbooks on AI agents, mobile apps, cloud, security, data, and marketing — delivered every Wednesday.

Past the reading

Read enough. Let's build something.

A senior architect responds in 24 working hours with scope, indicative cost, and a timeline. NDA before any technical conversation.

Loading search…

Browse all guides