---
id: "offerings/product-editor-csv"
title: "Product Editor CSV format"
description: "Download a file from Product Editor and treat that export as the template. This page explains what each row and column means."
permalink: "/docs/offerings/product-editor-csv"
slug: "product-editor-csv"
version: "current"
original_source: "docs/offerings/product-editor-csv.mdx"
---

> **AI agents:** This is the Markdown version of a RevenueCat documentation page. For the complete documentation index, see [llms.txt](https://www.revenuecat.com/docs/llms.txt).

Download a file from [Product Editor](https://www.revenuecat.com/docs/offerings/product-editor-configure) and treat that export as the template. This page explains what each row and column means.

To see the full column layout without generating an export first, download a filled-in example:

- [App Store sample CSV](https://www.revenuecat.com/docs_files/products/product-editor/app-store-sample.csv) (`rc_pro_monthly` and `rc_pro_yearly`)
- [Play Store sample CSV](https://www.revenuecat.com/docs_files/products/product-editor/play-store-sample.csv) (`pro:monthly` and `pro:yearly`)

These samples are examples of the format, not a catalog to upload. Identifiers, prices, and territories must match the app you are editing.

:::info
Edit one store per file. App Store exports do not include Play Store columns, and Play Store exports do not include App Store columns. Mixing stores in one upload is not supported.
:::

## How rows are grouped

Every row belongs to a product identified by **`store`** + **`store_identifier`**.

| `row_type`     | What it describes                                                    |
| -------------- | -------------------------------------------------------------------- |
| `product`      | Product-level fields: type, title, duration, store-specific settings |
| `price`        | One territory’s price and availability                               |
| `localization` | One locale’s name and description                                    |
| `offer`        | A free trial or Play Store offer                                     |

Leave a cell **blank or unchanged** to keep the current store value. Amounts are ordinary decimal prices (`9.99`), not micros.

`store_identifier` is the store product ID:

- **App Store:** the product ID (for example `rc_pro_monthly`)
- **Play Store:** `subscriptionId:basePlanId` (for example `premium:monthly`)

## Example

A minimal App Store price update (other columns omitted for readability):

| `row_type` | `store`     | `store_identifier` | `product_type` | `duration` | `territory`   | `amount` | `currency` | `available` |
| ---------- | ----------- | ------------------ | -------------- | ---------- | ------------- | -------- | ---------- | ----------- |
| `product`  | `app_store` | `rc_pro_monthly`   | `subscription` | `P1M`      |               |          |            |             |
| `price`    | `app_store` | `rc_pro_monthly`   |                |            | United States | `9.99`   | `USD`      | `true`      |

Territories in the export use **country names** (`United States`, `Germany`). You can also use ISO 2-letter codes (`US`, `DE`) on upload.

## Shared columns

These appear for both App Store and Play Store files.

| Column                         | Used on                    | Description                                                                                                                                                                                 |
| ------------------------------ | -------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `row_type`                     | all                        | `product`, `price`, `localization`, or `offer`                                                                                                                                              |
| `store`                        | all                        | `app_store` or `play_store`                                                                                                                                                                 |
| `store_identifier`             | all                        | Store product ID (see above)                                                                                                                                                                |
| `product_type`                 | `product`                  | For example `subscription`, `consumable`, `non_consumable`                                                                                                                                  |
| `display_name`                 | `product`                  | Name in the RevenueCat dashboard                                                                                                                                                            |
| `title`                        | `product`                  | Store title                                                                                                                                                                                 |
| `duration`                     | `product`                  | Billing period as ISO 8601 duration (`P1W`, `P1M`, `P3M`, `P6M`, `P1Y`)                                                                                                                     |
| `territory`                    | `price`, some `offer` rows | Country for this price or offer availability                                                                                                                                                |
| `amount`                       | `price`                    | Price in the territory’s currency                                                                                                                                                           |
| `currency`                     | `price`                    | ISO currency code (for example `USD`, `EUR`)                                                                                                                                                |
| `start_date`                   | `price`, App Store `offer` | When the price or App Store trial starts (`YYYY-MM-DD`). Empty starts an App Store trial today. Draft prices can omit it. Approved App Store subscription price changes need a future date. |
| `available`                    | `price`, some `offer` rows | `true` or `false`. Whether the product (or offer) is available in that territory                                                                                                            |
| `available_in_new_territories` | `product`                  | `true` or `false`. Sell in territories Apple or Google add later                                                                                                                            |
| `locale`                       | `localization`             | Locale code (for example `en-US`)                                                                                                                                                           |
| `localized_name`               | `localization`             | Customer-facing name for that locale                                                                                                                                                        |
| `localized_description`        | `localization`             | Customer-facing description for that locale                                                                                                                                                 |
| `trial_offer_duration`         | `offer`                    | Trial length as ISO 8601 duration (for example `P7D`, `P1M`). Used for App Store free trials and Play Store trial offers.                                                                   |

`start_date` is the only date column. Exports prefix the value with `'` (for example `'2026-09-01`) so Excel keeps it as text. Play Store offers do not use `start_date`.

## App Store columns

Present only on App Store exports.

| Column                              | Used on   | Description                                            |
| ----------------------------------- | --------- | ------------------------------------------------------ |
| `app_store_subscription_group_name` | `product` | Subscription group reference name in App Store Connect |

App Store `offer` rows use `trial_offer_duration`. Leave `start_date` empty to start the trial today. Product names must stay within Apple’s limits (typically 30 characters for the display name and 45 for the description) or App Store Connect will reject the change.

## Play Store columns

Present only on Play Store exports. Play Store CSV export includes **subscriptions** only.

| Column                                                             | Used on   | Description                                        |
| ------------------------------------------------------------------ | --------- | -------------------------------------------------- |
| `play_store_offer_id`                                              | `offer`   | Offer ID in Play Console. Required on `offer` rows |
| `play_store_offer_other_regions_available`                         | `offer`   | Whether the offer is available in other regions    |
| `play_store_base_plan_type`                                        | `product` | `auto_renewing`, `prepaid`, or `installments`      |
| `play_store_base_plan_offer_tags`                                  | `product` | Offer tags for the base plan                       |
| `play_store_auto_renewing_grace_period_duration`                   | `product` | Grace period for auto-renewing base plans          |
| `play_store_auto_renewing_account_hold_duration`                   | `product` | Account hold duration                              |
| `play_store_auto_renewing_resubscribe_state`                       | `product` | Resubscribe behavior                               |
| `play_store_auto_renewing_proration_mode`                          | `product` | How upgrades and downgrades are prorated           |
| `play_store_auto_renewing_legacy_compatible`                       | `product` | Whether the base plan is backwards compatible      |
| `play_store_auto_renewing_legacy_compatible_subscription_offer_id` | `product` | Legacy-compatible offer ID                         |
| `play_store_prepaid_time_extension`                                | `product` | Prepaid time extension                             |
| `play_store_installments_committed_payments_count`                 | `product` | Number of committed installment payments           |
| `play_store_installments_renewal_type`                             | `product` | Installment renewal type                           |
| `play_store_installments_grace_period_duration`                    | `product` | Installment grace period                           |
| `play_store_installments_account_hold_duration`                    | `product` | Installment account hold                           |
| `play_store_installments_resubscribe_state`                        | `product` | Installment resubscribe behavior                   |
| `play_store_installments_proration_mode`                           | `product` | Installment proration                              |
| `play_store_other_regions_available_in_new_territories`            | `product` | Other-regions availability for new territories     |
| `play_store_other_regions_usd_amount`                              | `product` | USD price used for other regions                   |
| `play_store_other_regions_usd_currency`                            | `product` | Currency for the USD other-regions price (`USD`)   |
| `play_store_other_regions_eur_amount`                              | `product` | EUR price used for other regions                   |
| `play_store_other_regions_eur_currency`                            | `product` | Currency for the EUR other-regions price (`EUR`)   |

Only fill the Play columns that apply to the `play_store_base_plan_type` (auto-renewing, prepaid, or installments). Leave the rest blank. Play Store `offer` rows need `play_store_offer_id` and `trial_offer_duration`.

## Limits

- At most **50 products** per export or import
- One app and one store per file
- Play Store: subscriptions only

Return to [Configure products with Product Editor](https://www.revenuecat.com/docs/offerings/product-editor-configure) for download, review, and commit steps.
