appranker
  • Google Play
  • Android
  • Promotion

Google Play promo codes: how to create, share and redeem

Google Play promo codes step by step: code types and quarterly limits, Play Console setup, in-app redemption code, testing, and fixes for common errors.

AppRanker team12 min read

A small shopping cart on an olive background holding a white gift card tied with a red ribbon

Google Play promo codes let you give a paid app, a one-time in-app product or a free subscription trial to a limited number of people, at no cost to them. They are the Android tool for press copies, giveaways, beta-tester thank-yous and customer support gestures, and they are easy to get wrong: a code that works in the Play Store can fail inside your app, and a subscription code can be rejected for a reason that has nothing to do with the code.

This guide covers the two code types and their limits, how to create codes in Play Console, the Billing Library code your app needs, how people redeem codes, what to test, and the errors developers and users report most. Every limit comes from Google's Create promotions help page and the Android promo codes guide, linked throughout.

Key takeaways

  • Promo codes cover paid apps, one-time products and subscription free trials of 3 to 90 days.
  • One-time-use codes work in the Play Store or in your app. Custom codes are for subscriptions only, work only in your app, and only for people who never subscribed.
  • You get 500 non-subscription codes per quarter per app, and 10,000 one-time-use codes per quarter per subscription. Unused codes do not carry over.
  • Your app must pick up purchases made outside it, or people who redeem in the Play Store will not get what they were promised.

What Google Play promo codes can give away

In Google's words, promotions let you "give users a free paid app, one-time product, or subscription with a promo code." There are two kinds of code:

One-time-use codes Custom codes
Who makes the code Google generates unique codes You choose the code text
Redeemed Once per code Many times, up to your limit
Works for Paid apps, one-time products, subscriptions Subscriptions only
Where people redeem Play Store or your app Only inside your app
Who can use it Anyone with the code Only people who have not subscribed before

For subscriptions, a code gives a free trial, not a free subscription. Google says subscription promo codes "provide users with a free trial of between 3 and 90 days," and the trial uses the subscription's backwards-compatible base plan. If that offer already has a free trial, the promo code's trial length replaces it.

Promo codes or subscription offers?

Google compares the two on the same help page. Offers (new customer acquisition, upgrade and developer-determined offers) can include free trials and introductory prices and appear in your app or the Play Store. Promo codes give a single free trial, and you decide who gets them. Use offers for everyone who qualifies, and promo codes when you want to hand something to specific people.

Promo code limits

Google's limits, from the Create promotions page:

  • 500 promo codes per quarter across all non-subscription promotions in an app. You can split them any way you like, for example 250 paid-app codes and 250 codes for one in-app product, or 100 codes each for five products.
  • 10,000 one-time-use codes per quarter for each subscription product. Subscription codes do not count against the 500.
  • Custom codes need a redemption limit between 2,000 and 99,999.
  • Unused one-time-use codes expire with the quarter. "Unused codes won't carry over to the next quarter."
  • A promotion can last up to one year.
  • You cannot change a promotion's size or type after you create it.

On the first day of a new quarter, Google says you may need to "wait for 24 hours and try again" before you can create new codes.

How to create promo codes in Play Console

Step 1: Get your app ready

For paid apps you can skip ahead. For one-time products and subscriptions, Google says "you need to integrate In-app Promotions in your app," which means using the Play Billing Library and handling purchases made outside the app (see the code below). Codes also cannot be used for inactive products, and one-time product promotions need an active buy purchase option.

Step 2: Create the promotion

  1. Open Play Console and go to Monetize with Play > Promo codes.
  2. Click Create promo code and accept the Promo codes Terms of Service.
  3. Name the promotion, set start and end dates, choose the promotion type and enter how many codes you need.
  4. For a subscription, pick the subscription and the free trial length.
  5. For a custom code, enter the code and the redemption limit.
  6. Set the status to On and click Create.
  7. For one-time-use codes, wait a few seconds and download the CSV file of codes.

Google's rules for custom codes: they must be unique within the app, so you cannot reuse one for a later campaign; they are alphanumeric and not case-sensitive; and Google suggests "adding a year or date to the end of your custom code" so you can tell campaigns apart later, for example LAUNCH2026.

You can rename, pause or change the dates of a live promotion later from the same page. Once the end date passes, the codes expire and you can no longer view or update them.

Make your app handle promo code redemptions

This is where most promo code problems start. The Android guide says "a user who redeems a one-time code from the Play store is immediately asked to purchase the subscription through the Play store. This is an out-of-app purchase, so be sure that your app can handle these purchases gracefully."

The Play Billing integration guide explains the two ways your app learns about such a purchase:

  • onPurchasesUpdated fires only "as long as your app is running and has an active Google Play Billing Library connection."
  • For everything else, call queryPurchasesAsync() when the billing connection is established and in onResume(), "to handle purchases that have transitioned to the PURCHASED state while your app was not running."

A minimal Kotlin activity that does both:

class MainActivity : AppCompatActivity() {
    private lateinit var billingClient: BillingClient

    private val purchasesListener = PurchasesUpdatedListener { result, purchases ->
        if (result.responseCode == BillingClient.BillingResponseCode.OK) {
            purchases?.forEach(::handlePurchase)
        }
    }

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        billingClient = BillingClient.newBuilder(this)
            .setListener(purchasesListener)
            .enablePendingPurchases(PendingPurchasesParams.newBuilder().enableOneTimeProducts().build())
            .build()
    }

    override fun onResume() {
        super.onResume()
        if (billingClient.isReady) {
            refreshPurchases()
        } else {
            billingClient.startConnection(object : BillingClientStateListener {
                override fun onBillingSetupFinished(result: BillingResult) {
                    if (result.responseCode == BillingClient.BillingResponseCode.OK) refreshPurchases()
                }
                override fun onBillingServiceDisconnected() = Unit
            })
        }
    }

    // Picks up codes redeemed in the Play Store while the app was closed.
    private fun refreshPurchases() {
        listOf(BillingClient.ProductType.INAPP, BillingClient.ProductType.SUBS).forEach { type ->
            val params = QueryPurchasesParams.newBuilder().setProductType(type).build()
            billingClient.queryPurchasesAsync(params) { result, purchases ->
                if (result.responseCode == BillingClient.BillingResponseCode.OK) purchases.forEach(::handlePurchase)
            }
        }
    }

    private fun handlePurchase(purchase: Purchase) {
        if (purchase.purchaseState != Purchase.PurchaseState.PURCHASED) return
        grantEntitlement(purchase) // Your code: verify the token on your server, then unlock.
        if (!purchase.isAcknowledged) {
            // Consumable products use consumeAsync instead.
            val params = AcknowledgePurchaseParams.newBuilder()
                .setPurchaseToken(purchase.purchaseToken)
                .build()
            billingClient.acknowledgePurchase(params) { /* log the result */ }
        }
    }
}

Two details matter. First, acknowledge every purchase: Google says this "must be done within three days so that the purchase isn't automatically refunded and entitlement revoked," and a promo redemption is a purchase like any other. Second, tell the person what they just unlocked. Google's testing guide says that for each redemption path you should "make sure that the item is correctly detected and that the user is notified."

How people redeem a Google Play promo code

There are four ways, and your instructions should name the one you expect people to use:

  1. In the Play Store app: tap the profile icon, then Payments & subscriptions > Redeem code, and enter the code.
  2. On the web: go to play.google.com/redeem and enter the code.
  3. During a purchase: on the Google Play purchase screen, tap the arrow next to the payment method, then Redeem code. This is the only way to use a custom code.
  4. With a link: https://play.google.com/redeem?code=YOURCODE. Google says that after the user presses Redeem, the Play Store prompts them to open your app if it is installed and up to date, or to install or update it.

Links are the easiest to send. This Node.js script turns the CSV file from Play Console into a list of codes and redeem links you can merge into an email tool:

// promo-links.mjs: node promo-links.mjs promo_codes.csv promo_links.csv
import { readFileSync, writeFileSync } from 'node:fs';

const [input = 'promo_codes.csv', output = 'promo_links.csv'] = process.argv.slice(2);
const lines = readFileSync(input, 'utf8').split(/\r?\n/).filter(Boolean);
if (lines[0] && /code/i.test(lines[0])) lines.shift(); // drop a header row if there is one

const rows = lines
  .map((line) => line.split(',')[0].trim())
  .filter((code) => /^[A-Za-z0-9]+$/.test(code))
  .map((code) => `${code},https://play.google.com/redeem?code=${encodeURIComponent(code)}`);

writeFileSync(output, ['code,link', ...rows].join('\n') + '\n');
console.log(`${rows.length} redeem links written to ${output}`);

Keep the CSV private and send each one-time code to one person. Anyone who sees a code can redeem it, and Google's user help says that "for privacy and security reasons" it does not share which Google Account redeemed a code.

A hand holding a card that reads Golden offer, use it proper, against a red background

Say plainly what a code unlocks, for how long and who can use it. Photo: RDNE Stock project / Pexels

Test promo codes before you send them

Create a few codes for yourself first. Google's billing test guide lists the paths to cover:

  • A code entered in the purchase dialog launched from your app.
  • A code redeemed in the Play Store app.
  • A code redeemed on the Play Store website with the Redeem button.

And the situations to test, at a minimum:

  • Redemption before the app is installed.
  • Redemption while the app is running in the foreground, using a second device for the Play Store.
  • Redemption in multi-window mode, with your app and the Play Store open side by side.

Test codes come out of the same quarterly quota, so create only what you need.

Fix common Google Play promo code errors

What people see Likely cause What to do
Code "not valid for this purchase" in your app Subscription codes apply to the subscription's backwards-compatible base plan, and the user is buying a different plan Check which base plan or offer is marked backwards compatible and redeem against that purchase path
"Your account isn't eligible for this offer" Signed in with a different Google Account, or a custom code used by a past subscriber Sign in to the account that got the code; send a one-time-use code instead of a custom one
"Couldn't redeem this code. This code can only be used in [country/region]" The person is not in the country where the promotion is offered Check where the person is and what Play country their account uses
Code already redeemed Someone else used it first Send a new code; Google cannot say which account used it
"The code you entered has expired" The promotion's end date has passed Create a new promotion with new dates
The code works in the Play Store but nothing unlocks The app does not query purchases on resume Add the queryPurchasesAsync() call shown above
Code rejected on a work or school account Some promotions do not work on organization accounts Ask the person to use a personal Google Account

The first row comes from an August 2026 RevenueCat community thread, where a developer's 30-day trial codes failed with "not valid for this purchase" until they checked the backwards-compatible base plan. The others come from Google's user help on promotions and codes. Google's user advice also includes basics worth putting in your own instructions: type the code without spaces or dashes, and check that it has not expired.

Ways to use promo codes without breaking the rules

Good uses for a limited number of free copies or trials:

  • Press and creators. Send a code with your app press kit so reviewers can test the paid features.
  • Beta testers. Thank the people who tested your app before launch with a code for the full version.
  • Support. Give a month free to someone who hit a serious bug.
  • Win-back. Offer a trial to people who lapsed, using one-time-use codes since custom codes exclude past subscribers.
  • Seasonal campaigns. Pair codes with a sale in your holiday app marketing plan.

Two rules apply to all of them. Google requires that you "be transparent about your promotion offers," including the eligibility and terms. And Google Play's ratings and reviews policy prohibits "incentivizing feedback," with "Don't offer rewards or incentives for ratings or reviews" as a direct example. Never give a code in exchange for a review. Ask for ratings with the Google Play In-App Review API instead.

If you ship on iOS too, Apple's version is offer codes, which work differently and replaced In-App Purchase promo codes; see our guide to App Store offer codes. And if you ever move the app to another account, Google says promotions do not transfer, though "previously issued Promo Codes should still work." Our guide on how to transfer an app to another developer account covers the rest of that move.

Promo codes bring people you already know

Codes reward people who already know your app: press, testers, customers. To reach people who have never heard of it, you need discovery too. Our playbook on how to promote your app for free covers the no-budget channels, and you can promote your app on a pay-to-rank leaderboard where the order is a plain sort on what each listing has paid and every row links straight to your Google Play page.

Google Play promo codes checklist

  • In-app Promotions integrated for one-time products and subscriptions.
  • queryPurchasesAsync() called on connection and in onResume().
  • Every purchase acknowledged or consumed within three days.
  • Backwards-compatible base plan checked for subscription codes.
  • Codes tested in the app, the Play Store app and the Play website.
  • Code type matched to the audience: custom codes only for new subscribers.
  • Offer terms and eligibility stated plainly where you share the code.
  • No codes offered in exchange for ratings or reviews.
  • Unused quota planned before the quarter ends.

FAQ

How many promo codes can I create on Google Play?

Up to 500 per quarter per app across paid-app and one-time product promotions, and up to 10,000 one-time-use codes per quarter for each subscription product. Custom subscription codes have a redemption limit you set between 2,000 and 99,999.

Can I create promo codes for a subscription?

Yes, but they give a free trial of 3 to 90 days rather than a free subscription. The trial uses the subscription's backwards-compatible base plan, and custom codes work only for people who have never subscribed.

Where do users enter a Google Play promo code?

In the Play Store app under Profile > Payments & subscriptions > Redeem code, at play.google.com/redeem, on the purchase screen through the arrow next to the payment method, or through a link in the form https://play.google.com/redeem?code=YOURCODE.

Do Google Play promo codes expire?

Yes. Codes stop working after the promotion's end date, and a promotion can last up to one year. Unused one-time-use codes from your quarterly quota also do not carry over to the next quarter.

Can I give promo codes in exchange for reviews?

No. Google Play's policy prohibits incentivizing ratings and reviews, and that includes free codes or discounts offered for a rating.

Do promo codes still work after an app transfer?

Google says promotions are not transferred to the new developer account, but "previously issued Promo Codes should still work." Create new promotions in the target account for future campaigns.

Image credits

Filed under

  • Google Play
  • Android
  • Promotion
All articles