# Play Billing Library 9: Migration Guide and 2027 Deadline

> Play Billing Library 9 migration: version 8 is supported to August 31, 2027. What changed, how to migrate, and where Flutter stands, checked Oct 21, 2026.

Canonical: https://app369.com/blog/play-billing-library-9-migration-deadline-2027/
Last updated: 2026-10-21

[![Simon Dziak](https://app369.com/.netlify/images?w=48&amp;h=48&amp;fm=webp&amp;q=100&amp;url=%2Fimages%2Fszymon.jpg) **Simon Dziak** Founder & developer, App369](https://app369.com/about/szymon-dziak/) [LinkedIn](https://www.linkedin.com/in/szymondziak/)

Published October 18, 2026 · Updated October 21, 2026•Facts last verified October 21, 2026•6 min

App369https://app369.com/blog/play-billing-library-9-migration-deadline-2027/

[← Back to Blog](https://app369.com/blog/)

## Key takeaways

- →Google's deprecation table sets August 31, 2027 for new apps and updates on Billing Library 8, with an extension deadline of November 1, 2027. Version 9 is the next supported version, and its own row says August 31, 2028.
- →Version 9.0.0 (May 19, 2026) brings four changes from 8, including: blocked Play Store apps now return BILLING_UNAVAILABLE instead of ERROR, getLinkUri() can be null, and targetSdkVersion is 35. Version 9.1.0 (June 18, 2026) adds Billing Choice APIs.
- →Google's migration guide for 8 to 9 says to update the dependency to 9.1.0, handle new sub-response codes, and use AndroidX Core 1.9 or later for the new error code.
- →As of October 21, 2026, Flutter's in_app_purchase_android 0.5.5 (published October 19) uses Billing Library 9.1.0 and needs Android minSdk 23 and Flutter 3.44 or later. RevenueCat's purchases_flutter 10.17.0 still uses Billing Library 8.3.0.
- →Google says existing apps keep working. The deadline applies to new apps and updates, so an app still on version 8 can't ship an update after its deadline.

Pricing an app? Try the free [app cost calculator](https://app369.com/tools/app-cost-calculator/) or get a range for your project in the [instant quote](https://app369.com/instant-quote/).

**Google’s deprecation table gives Play Billing Library 8 a deadline of August 31, 2027 for new apps and updates, with an extension deadline of November 1, 2027, so version 9 is the one to move to.** Google says existing apps keep working. The rule applies to new apps and updates. If you ship with Flutter, the practical question is when your plugin moves, because the official plugin moved to version 9.1.0 on October 19, 2026, while RevenueCat still uses version 8.3.0.

The dates below come from Google’s deprecation page and release notes, and the plugin facts from the flutter/packages and RevenueCat repositories and pub.dev, as listed in the sources. I checked each one on October 21, 2026.

**Disclosure:** App369 is my studio. I build and fix apps, including in-app purchases and subscriptions in Flutter, and the last section mentions what I sell. Google and RevenueCat don’t pay me for anything on this page.

## The deadlines

Google gives every Billing Library version a two-year deprecation cycle. Its table:

| Version | New apps and updates must move by | Extension deadline |
| --- | --- | --- |
| 5 | August 31, 2024 | November 1, 2024 |
| 6 | August 31, 2025 | November 1, 2025 |
| 7 | August 31, 2026 | November 1, 2026 |
| **8** | **August 31, 2027** | **November 1, 2027** |
| 9 | August 31, 2028 | November 1, 2028 |

Source: [Google Play Billing Library version deprecation](https://developer.android.com/google/play/billing/deprecation-faq), last updated October 20, 2026.

Google’s FAQ also says:

- **Existing apps still work.** Unmaintained APKs don’t need updates. New apps and updates must use supported versions.
- **The extension form is in Play Console.** An app on an unsupported version gets a warning. Open its details on the Policy status page to find the form.
- **Check the manifest if a warning stays.** The merged `AndroidManifest.xml` must contain `com.google.android.play.billingclient.version`.

If your app is still on version 7, read [the version 7 to 8 guide](https://app369.com/blog/play-billing-library-7-deprecated-update-to-8-2026/) first.

## What changed in version 9

Version 9.0.0 was released on May 19, 2026. Per Google’s release notes:

| Change in 9.0.0 | What it means |
| --- | --- |
| Error codes for blocked Play Store activity | When the system blocks the Play Store app, for example in OEM-customized kids mode, the response code changes from `ERROR` to `BILLING_UNAVAILABLE`. The `BillingResult` carries a _Play Store is blocked_ debug message. This needs AndroidX Core 1.9 or later |
| `DeveloperProvidedBillingDetails.getLinkUri()` is `@Nullable` | Handle both `null` and an empty string before parsing the link or launching a browser intent |
| `targetSdkVersion` updated to 35 | Stated in the release notes |
| In-app messaging for opt-in price increases | Users can confirm an upcoming opt-in price increase without leaving the app. The message is shown from the first day the user can accept, at most once every 7 days |

Version 9.1.0 was released on June 18, 2026. It adds Billing Choice APIs, including `BillingClient.getBillingChoiceInfoAsync()`, `BillingChoiceInfo` and `BillingClient.showBillingProgramInformationDialog()`. Google’s release notes and Google’s Maven metadata list no later 9.x release as of October 21, 2026.

## How Google says to migrate

Google’s guide for moving to version 9 uses `9.1.0` in its examples. The steps:

1. **Update the dependency** to `com.android.billingclient:billing:9.1.0`. For Kotlin extensions, add `billing-ktx`.
2. **Skip the `queryProductDetailsAsync` change if you are on 8.** Google says the `onProductDetailsResponse` signature change applies only to upgrades from version 7.
3. **Remove the old APIs, if you still use any.** Google’s list includes `SkuDetails`, `querySkuDetailsAsync`, `BillingClient.SkuType` (use `ProductType`), `QueryPurchaseHistoryParams`, the no-argument `enablePendingPurchases()` and `queryPurchasesAsync(String, listener)`. Google’s 8.0.0 release notes say version 8 already removed querySkuDetailsAsync, queryPurchaseHistory, the no-argument enablePendingPurchases() and queryPurchasesAsync(String, listener). The notes don’t say that for SkuDetails, SkuType or QueryPurchaseHistoryParams, so search your code for all of them.
4. **Consider automatic service reconnection.** Google recommends it.
5. **Handle new sub-response codes** on the `BillingResult` from `launchBillingFlow()`: `PAYMENT_DECLINED_DUE_TO_INSUFFICIENT_FUNDS`, `USER_INELIGIBLE` and `NO_APPLICABLE_SUB_RESPONSE_CODE`.
6. **Account for the error-code change** and the nullable link from the table above.

## Flutter apps: where the plugins stand

Flutter’s official plugin moved to version 9 on October 19, 2026. The pull request ([flutter/packages #12781](https://github.com/flutter/packages/pull/12781)) was merged that day and shipped as in_app_purchase_android 0.5.5. As of October 21, 2026:

| Package | Latest version (published) | Billing Library it uses |
| --- | --- | --- |
| `in_app_purchase_android` | 0.5.5 (October 19, 2026) | 9.1.0, per its `build.gradle.kts` on `main`. Its changelog lists the move from 8.0.0 to 9.1.0 in 0.5.5 (0.5.0 moved from 7.1.1 to 8.0.0) |
| `in_app_purchase` | 3.3.1 (September 18, 2026) | Depends on `in_app_purchase_android` ^0.5.0, so it resolves to 0.5.5 on Flutter 3.44 or later |
| `purchases_flutter` (RevenueCat) | 10.17.0 (October 19, 2026) | Bundles Android SDK 10.28.1 |
| `purchases-android` (RevenueCat) | `main` branch | `billingClient = "8.3.0"` in `libs.versions.toml` |

What 0.5.5 changes, per its changelog:

- **It needs a recent Flutter.** Like 0.5.4, its pubspec requires Flutter 3.44 or later and Dart 3.12.
- **It raises the Android minimum SDK to 23.** The changelog says apps with a lower `minSdkVersion` will fail to merge the manifest.
- **A blocked Play Store returns a different code.** When the system blocks the Play Store, for example in an OEM kids mode, the plugin now reports `BillingResponse.billingUnavailable` where it used to report `BillingResponse.error`. If your code branches on the response code, or matches the code’s text in `IAPError.message`, handle the new value.

My advice: if you use `in_app_purchase`, upgrade to 0.5.5 when your Flutter version allows it, and test purchases before the next release. If you use RevenueCat, wait for a `purchases_flutter` release that moves to version 9 rather than overriding the Gradle dependency yourself, because the SDK’s code is built against the version 8 API.

## What to do now

This section is my advice, not Google’s.

1. **Find the version you ship.** In a native app, check `com.android.billingclient:billing` in `build.gradle`. In Flutter, check `in_app_purchase_android` or `purchases_flutter` in `pubspec.lock`. To check your own build files against these dates, the free [Google Play deadline checker](https://app369.com/tools/google-play-deadline-checker/) reads them in your browser.
2. **Upgrade the plugin, or watch RevenueCat.** The official `in_app_purchase_android` plugin is on version 9 from 0.5.5. If you use RevenueCat, check its changelog once a month, and plan the upgrade when it mentions Billing Library 9.
3. **Keep your Flutter version current.** Each plugin release raises its minimum Flutter, and a late jump can mean fixing other build errors first.
4. **Upgrade early in the cycle, not at the deadline.** Google’s extension to November 1, 2027 is a safety net, not a plan.
5. **Test purchases and restores before you ship.** Use Play Console license testers to buy, cancel and restore each product type.

For every other dated Apple, Google Play and Firebase requirement in 2026 and 2027, see [App Store and Google Play deadlines for 2026 and 2027](https://app369.com/blog/app-store-google-play-deadlines-2026-2027/). The related Android target level requirement is in [the target API 36 guide](https://app369.com/blog/google-play-target-api-36-android-16-requirement-2026/).

If you use RevenueCat and the paywall comes back empty after an upgrade, check the store setup first: [RevenueCat “Products Could Not Be Fetched”](https://app369.com/fix/revenuecat-products-could-not-be-fetched/) lists RevenueCat’s own checks.

## Need a hand?

If your in-app purchases break during the Billing Library upgrade, or you’re not sure what your plugins need, the [App Fix Ticket](https://app369.com/fixed-price/flutter-firebase-bug-fix/) covers it in two fixed-price steps. A $450 Diagnosis gives you the root cause with evidence and a fixed repair quote within 3 business days, credited toward the fix. If you go ahead, the $1,200 Fix takes 5 business days and comes as a pull request. Or [send me a short description](https://app369.com/contact/).

## **Frequently asked questions**

<dl>

<dt>**When must I move to Play Billing Library 9?**</dt>
<dd>Google's deprecation table gives version 8 a deadline of August 31, 2027 for new apps and updates, and an extension deadline of November 1, 2027. After that, an update has to use a supported version, and version 9 is the next one.</dd>

<dt>**What changed between version 8 and version 9?**</dt>
<dd>Google's 9.0.0 release notes list four changes: Play Store blocked by the system now returns BILLING_UNAVAILABLE instead of ERROR, DeveloperProvidedBillingDetails.getLinkUri() is @Nullable, targetSdkVersion is 35, and in-app messaging can announce an upcoming opt-in price increase. Version 9.1.0 adds Billing Choice APIs.</dd>

<dt>**Can I use Billing Library 9 in a Flutter app today?**</dt>
<dd>Yes, through the official plugin, from in_app_purchase_android 0.5.5, published October 19, 2026. It builds against com.android.billingclient:billing 9.1.0, raises the Android minSdk to 23, and still needs Flutter 3.44 or later. It also changes the response code for a blocked Play Store from ERROR to BILLING_UNAVAILABLE. RevenueCat's purchases_flutter 10.17.0 still uses 8.3.0.</dd>

<dt>**Do I need to rewrite my purchase code for version 9?**</dt>
<dd>Google's guide says only the queryProductDetailsAsync signature change applies just to upgrades from version 7. It lists removed APIs without a version 8 exemption, so an app on version 8 that still calls any of them must change those calls. The other steps are the dependency bump, new sub-response codes, the error-code change and the nullable link.</dd>

<dt>**How do I ask for the extension?**</dt>
<dd>Google says an app on an unsupported version gets a warning in Play Console. Open the warning's details on the Policy status page and use the extension form there.</dd>

</dl>

## **Sources**

1. [flutter/packages on GitHub, pull request #12781 (in_app_purchase_android to Billing Library 9.1.0)](https://github.com/flutter/packages/pull/12781)
2. [Android Developers, Google Play Billing Library release notes](https://developer.android.com/google/play/billing/release-notes)
3. [Android Developers, Migrate to Billing Library 9](https://developer.android.com/google/play/billing/migrate-gpblv9)
4. [Android Developers, Google Play Billing Library version deprecation (last updated October 20, 2026)](https://developer.android.com/google/play/billing/deprecation-faq)
5. [flutter/packages, in_app_purchase_android changelog](https://github.com/flutter/packages/blob/main/packages/in_app_purchase/in_app_purchase_android/CHANGELOG.md)
6. [flutter/packages, in_app_purchase changelog](https://github.com/flutter/packages/blob/main/packages/in_app_purchase/in_app_purchase/CHANGELOG.md)
7. [pub.dev API, in_app_purchase_android](https://pub.dev/api/packages/in_app_purchase_android)
8. [RevenueCat purchases-flutter changelog on GitHub](https://github.com/RevenueCat/purchases-flutter/blob/main/CHANGELOG.md)
9. [RevenueCat purchases-android on GitHub (libs.versions.toml)](https://github.com/RevenueCat/purchases-android/blob/main/gradle/libs.versions.toml)

Tags

#play billing library 9 #play billing library 9 migration #play billing library 8 deprecation #billing library deadline august 31 2027 #billing library extension november 1 2027 #in_app_purchase_android billing 9 #purchases_flutter billing library 9 #play billing 9.1.0 #flutter in app purchase billing library update

Generated from app369.com . © 2026 App369. All rights reserved.

**Share:**

[Share on Twitter](https://twitter.com/intent/tweet?text=Play%20Billing%20Library%209%3A%20Migration%20Guide%20and%202027%20Deadline&amp;url=https%3A%2F%2Fapp369.com%2Fblog%2Fplay-billing-library-9-migration-deadline-2027%2F) [Share on LinkedIn](https://www.linkedin.com/sharing/share-offsite/?url=https%3A%2F%2Fapp369.com%2Fblog%2Fplay-billing-library-9-migration-deadline-2027%2F) [Share on Facebook](https://www.facebook.com/sharer/sharer.php?u=https%3A%2F%2Fapp369.com%2Fblog%2Fplay-billing-library-9-migration-deadline-2027%2F)

## **Related Resources **

[Play Billing Library 7 Deprecated: How to Update to 8](https://app369.com/blog/play-billing-library-7-deprecated-update-to-8-2026/) [Flutter UIScene Migration: Fix Launch Crashes on Xcode 27](https://app369.com/blog/flutter-uiscene-migration-xcode-27-app-wont-launch-2026/) [Google Play Requires Target API 36: The Android 16 Update](https://app369.com/blog/google-play-target-api-36-android-16-requirement-2026/) [Flutter "Deleted Android v1 Embedding" Build Error: The Fix](https://app369.com/blog/flutter-deleted-android-v1-embedding-build-failed-2026/) [ITMS-90725 SDK Version Issue: Fix in Flutter (Xcode 26)](https://app369.com/blog/itms-90725-sdk-version-issue-xcode-26-flutter-2026/) [JCenter Shutdown: Fixing Old Android and Flutter Builds](https://app369.com/blog/jcenter-bintray-shut-down-fix-android-flutter-builds-2026/)

## **Related guides **

[<h3>**Play Billing Library 7 Deprecated: How to Update to 8**</h3>Play Billing Library 7 is deprecated: since Aug 31, 2026 new apps and updates need v8, and the extension ended Nov 1. The Flutter fix, checked Oct 21, 2026.**Read more **](https://app369.com/blog/play-billing-library-7-deprecated-update-to-8-2026/) [<h3>**App Store and Google Play Deadlines for 2026 and 2027**</h3>Dated table of App Store, Google Play, Firebase and Google API deadlines for mobile apps in 2026 and 2027, each linked to its source. Checked Oct 21, 2026.** Read more **](https://app369.com/blog/app-store-google-play-deadlines-2026-2027/) [<h3>**Google Play Requires Target API 36: The Android 16 Update**</h3>Target API level 36: since Aug 31, 2026 Google Play needs apps and updates to target Android 16. What changes and the Flutter versions, checked Oct 21, 2026.** Read more **](https://app369.com/blog/google-play-target-api-36-android-16-requirement-2026/)