- bulk manage products using the Publishing API
- bulk manage prices using pricing templates
- individually manage products using Play Console
Using Google Play's billing system , you can offer in-app products that charge users on a one-time basis. In-app products can include items like virtual goods (for example, game levels or potions) and premium services within your app on Google Play.
You can also create a subscription , which charges users on a recurring basis.
Important:Google Play Developer Program Policies and service fees apply to both in-app products and subscriptions.
Availability
If you're in a supported location for merchant registration , you can use Google Play's billing system.
If you’re in a supported location and want to start using Google Play's billing system features in your apps, set up a payments profile and learn about setting up Google Play's billing system on the Android Developers site .
To be available for purchase, an in-app product needs to be active and its app needs to be targeted to the user's country or region. An in-app product will be available for purchase as long as it's active, even if its app is unpublished . You must deactivate an in-app product if you don't want it to be available.
If you’re using a test account, go to the Android Developers site to learn more about testing your Google Play Billing Library integration.
After you create an in-app product, it’s available for users running the latest version of Google Play Store.
Note: This Play Console availability may make the SKU available for users to purchase directly from Games Home in the Play Store – rather than from within your app – as part of the Cart Abandonment Reminder feature, which nudges users to complete previously abandoned purchases. (Learn more about purchases made outside your app here .) This feature is on by default for all developers.
To opt your app out of the Cart Abandonment Reminder feature, please submit this form .
Required permissions
To offer an in-app product, you need to declare the com.android.vending.BILLING
permission in your app’s APK manifest file. If you distribute your app globally, you can still publish apps that use com.android.vending.BILLING
permission in all countries.
Create in-app products
Create a single in-app product
- Product IDs must start with a number or lowercase letter and can contain numbers (0-9), lowercase letters (a-z), underscores (_), and periods (.).
- You can’t change or reuse a product ID after the product has been created.
- Note:The product ID
android.test
is unavailable for use, along with all product IDs that start withandroid.test
.
To create an in-app product, do the following steps:
- Open Play Console.
- Go to the In-app products page ( Monetize with Play> Products> In-app products).
- Click Create product.
- Enter your product details.
- Product ID:A unique ID for your in-app product.
- Title:A short name of the item (up to 55 characters, but we recommend limiting titles to 25 characters to display properly in all contexts), like "Sleeping potion."
- Description:A long description of the item (up to 200 characters), like "Instantly puts creatures to sleep."
- Icon:A unique and accurate image for your product. Don't include text, promotions, or branding. Your product icon is shown on your store listing and during the purchase flow.
- 32-bit PNG
- 512 x 512 pixels
- Up to 1 MB
- Price:Enter a price in your local currency or select a pricing template .
- Multi-quantity:Allow multi-quantity checkout for this product. Users will be able to purchase in multiple quantities within the threshold of their country or region. Note the following information:
- To configure multi-quantity checkout in Play Console, your app needs Google Play Billing Library 4.0 . Visit the Android Developers site to learn how to integrate the Google Play Billing Library into your app.
- Multi-quantity checkout is not available in some countries or regions.
- In most countries or regions where multi-quantity checkout is available, the SKU price threshold is around USD 100. To allow multi-quantity checkout, you will need to adjust the price (before tax) to below the threshold in each country or region.
- Play Points exclusive:Make your product available only in Google Play Points.
- Save your changes and click Activateto make your in-app product available to users.
Languages and translations
In-app products use the same default language as their app. To add translations in specific languages, select an in-app product, and then click Manage translationsand apply the languages you want. To learn more about how to provide a localized experience for your users, see Translate and localize your app .
Create a batch of multiple in-app products
- bulk manage products using the Publishing API
- bulk manage prices using pricing templates
- individually manage products using Play Console
Upload a CSV file of in-app products
To upload a CSV file, do the following steps:
- Open Play Console.
- Go to In-app products page ( Monetize with Play> Products> In-app products).
- Click Import.
- Importing multiple products by uploading a CSV file will overwrite existing products only if the value of a
Product ID
in the CSV file matches theProduct ID
of an existing in-app product in the product list. Overwriting a product doesn't delete in-app products that aren't included in the CSV.
- Importing multiple products by uploading a CSV file will overwrite existing products only if the value of a
- Drop your CSV file to upload or click Upload.
Export a CSV file of existing in-app products
To export a CSV file, do the following steps:
- Open Play Console.
- Go to In-app products page ( Monetize with Play> Products> In-app products).
- Click Export.
View a CSV file example
- The first example defines a title and description in two different languages (
en_US
andes_ES
). A pricing template defines the item's price. - The second example doesn't use a pricing template. Instead, it specifies a price for the default country (US). Play Console uses current exchange rates and locally relevant pricing patterns to automatically set the prices in all other countries where the app is distributed.
- The third example doesn't use a pricing template either. The item's price is specified manually for each country where the app is distributed.
CSV syntax example
Product ID,Published State,Purchase Type,Auto Translate,Locale; Title; Description,Auto Fill Prices,Price,Pricing Template ID
In-app product examples
Example 1
basic_sleeping_potion,published,managed_by_android,false,en_US; Basic Sleeping Potion; Puts small creatures to sleep.; es_ES; Poción básica de dormir; Causa las criaturas pequeñas ir a dormir.,false,,4637138456024710495
Example 2
standard_sleeping_potion, published,managed_by_android,false,en_US; Standard Sleeping Potion; Puts all creatures to sleep for 2 minutes.,true, 1990000,
Example 3
invisibility_potion,published, managed_by_android,false,en_US; Invisibility Potion; Invisible to all enemies for 5 minutes.,false, US; 1990000; BR; 6990000; RU; 129000000; IN; 130000000; ID; 27000000000; MX; 37000000,
Data values for CSV files
Product ID
Setting this value in the CSV file has the same effect as entering a Product ID when creating a new in-app product.
If you specify a Product ID
assigned to an in-app product that already exists in a product list, the data for the existing in-app product is overwritten with the values that you specify in the CSV file.
Publish State
published
or unpublished
. This is the same as setting an in-app product as Activeor Inactive.Purchase Type
This value must be set to managed_by_android
.
Auto Translate
This value must be set to false
because auto translation of in-app product details isn't supported.
If you want to provide translations of an in-app product’s title and description, specify these translations explicitly within the Locale
value.
Locale
, Title
,
and
Description
If you include only one locale for an item, you must specify your app's default locale and the item's default title and description:
app_default_locale; item_default_title; item_default_description;
When setting the Locale
value, you can use any of the language codes that appear when adding translations of your store listing
.
Note:When specifying the Title
and Description
values, use backslashes to escape the semicolon ( \;
) and backslash ( \\
) characters.
If you want to include translated versions of the item's title and description, you must list the default locale, title, and description, followed by the locales, titles, and descriptions for each translation. In the following example, the in-app product uses en_US
(United States English) as the default locale and es_ES
(Spain Spanish) as a translation:
en_US; Invisibility Cloak; Makes you invisible.; es_ES; Capote Invisible; Se vuelven invisible.
Note:An app contains a single default language, but each in-app product maintains its own list of translations. Even though the first locale in each item's Locale
value must be the same throughout the CSV file, the other locales can differ from one item to another.
Auto-Fill Prices
, Country
,
and Price
You can set Auto-fill prices
to true
or false
. If an in-app product uses a pricing template
, you should set Auto-fill prices
to false
, and you shouldn't set a value for the Price
.
Note:When you specify an item's price in a CSV file, provide a price in micro-units, where 1,000,000 micro-units is equivalent to 1 unit of real currency.
Use auto-filled prices
The following sections describe how the value of Auto-fill prices
affects the syntax and meaning of the Country
and Price
values.
If you set Auto-fill prices
to true
, you specify only the item's default price; you don't include a Country
value.
For example, under the following conditions:
- Your app's default locale is
en_US
. - An in-app product's default, tax-exclusive price is USD 1.99.
- You want the prices for other countries autofilled.
You'd set the values of Auto-fill prices
and Price
at the end of a row in the CSV file as follows: true,1990000,
Set your own price per country
If you set Auto-Fill Prices
to false
instead, you can specify a series of country
and price
values for all countries where you distribute your app, including the country corresponding to your app's default locale. Each country
value is the two-letter uppercase ISO country code
that represents a country where your app is distributed.
Note:You must provide a country code and price for each country that your app targets. To view and edit the list of countries that your app targets, use the Countries / regionstab on the Production page.
Each price
value represents the cost of the item in micro-units of the currency used in that country.
For example, if you're offering your app for the following prices (all taxes included) in other countries:
- R$6.99 in Brazil
- ₽129 in Russia
- ₹130 in India
- Rp 27,000 in Indonesia
- $37 in Mexico
You can set the values of Auto-Fill Prices
, Country
, and Price
at the end of a row in the CSV file as follows:
false, BR; 6990000; RU; 129000000; IN; 130000000; ID; 27000000000; MX; 37000000;
Pricing Template ID
If an item is linked to a pricing template, you should set Auto-Fill prices
to false
, and you shouldn't set a value for the price
column. If the item isn't linked to a pricing template, you shouldn't set a value for the Pricing template ID
. Instead, you should set Auto-Fill prices
, Country
, and Price
based on how you want to set the in-app product's prices.
If you import a CSV file, you can update the links between in-app products and pricing templates. To link the product to a specific pricing template, set the Pricing Template ID
value to that pricing template's ID. To unlink an in-app product from all pricing templates, don't set a value for its Pricing template ID
.
You can link up to 1,000 app prices or in-app product prices to a particular pricing template. Therefore, don't specify the same Pricing template ID
value in more than 1,000 rows of a CSV file.
EEA Withdrawal Right Type
DIGITAL_CONTENT
or SERVICE
. Reduced VAT Rates
If you sell digital news, magazines, newspapers, books, video, music, audio, or audiobooks in various countries or regions may be eligible for reduced VAT rates .
For reduced rates, values on this field will follow this format:
CountryCode;VATRate;
Each country or rate pair should be followed by a semicolon before adding a new country or rate pair.
For example:
CA;BOOKS_1
to set Books tier 1 reduced rate for Canada.
FR;NEWS_1; GR;NEWS_2
to set News tier 1 reduced rate for France and News tier 2 reduced rate for Greece.
BOOKS_1, NEWS_1, NEWS_2, MUSIC_OR_AUDIO_1, LIVE_OR_BROADCAST_1
(uppercase or lowercase). Communications and amusement taxes
If you want to collect applicable state communications and amusement taxes you must specify that your app or product is a streaming product and set this field as ELIGIBLE
or, if not, just leave the field empty.
Currently, the only country allowed for this type of tax is the US.
The value of this field is always set as:
CountryCode;Eligibility;Rate
For example:
US;ELIGIBLE;VIDEO_RENTAL
If eligible, you can set the field according to the following categories:
VIDEO_RENTAL
for video streaming - subscription, rental, or pay-per-view
VIDEO_SALES
for video streaming - sales
VIDEO_MULTI_CHANNEL
for video streaming - multi-channel
AUDIO_RENTAL
for audio streaming - subscriptions or rental
AUDIO_SALES
for audio streaming - sales
AUDIO_MULTI_CHANNEL
for audio streaming - multi-channel