> For the complete documentation index, see [llms.txt](https://docs.coda.co/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.coda.co/general-information/coda-portal/coda-portal-appendix/codas-pricing-template.md).

# Coda’s Pricing Template

The Bulk SKU Upload template is a CSV file used to create and update multiple SKUs (in‑app purchase items) for a title in a single upload. You can export your title's current SKUs to this format, edit prices, availability, and localized text in a spreadsheet, then re‑upload the file to apply the changes in bulk.

Each **row** represents one SKU (product). Each **column** represents one attribute of that SKU. Column names are case‑sensitive and must match exactly.

> This reference describes the general template structure. Column availability may vary slightly by title configuration — if a column described here doesn't appear in your export, contact your Coda account manager.

A sample file, `sample_bulk_sku_upload_template.csv`, is included alongside this page. It uses placeholder SKUs and dummy translations to illustrate each pricing scheme and field combination described below — download it as a starting point for your own upload.

***

### 1. How the template works

1. **Export** — Download your title's current SKUs as a CSV from the portal. Every existing SKU appears as one row, pre‑filled with its current values.
2. **Edit** — Update values directly in the CSV (e.g. change a price, extend a sale window, add a new SKU as a new row).
3. **Re‑upload** — Upload the edited CSV back into the portal. Rows are matched to existing SKUs by `ProductID`; a `ProductID` not already in the system creates a new SKU.
4. **Review** — The portal validates the file and reports any row‑level errors before changes go live.

***

### 2. Core SKU fields

These columns appear once per row and control the SKU's identity, pricing model, availability window, and purchase limits.

| Column                      | Required | Type / Format                                                             | Description                                                                                                                                                                                                                                                                                             |
| --------------------------- | -------- | ------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `ProductID`                 | Yes      | String                                                                    | The unique identifier for the SKU. Used to match the row to an existing SKU on upload — **do not change this value for an existing SKU**, or the upload will create a duplicate instead of updating it.                                                                                                 |
| `Pricing_Scheme`            | Yes      | Enum: `Real Currency`, `Freebie`, `Loyalty Currency`, `Loyalty Milestone` | Determines how the SKU is "paid for." See Section 3 for how this affects the other pricing fields.                                                                                                                                                                                                      |
| `Price_US_Default`          | Yes      | Decimal (USD)                                                             | The SKU's base/list price in US dollars. Used as the reference price even for non‑cash schemes (set to `0.00` for `Freebie`, `Loyalty Currency`, and `Loyalty Milestone` rows). For `Real Currency` SKUs this should match the `Price_US` column.                                                       |
| `Price_<COUNTRY>`           | No       | Decimal, one column per country                                           | Per‑country override price in local currency. Only meaningful when `Pricing_Scheme = Real Currency`. See Section 5.                                                                                                                                                                                     |
| `Main_IconPath`             | Yes      | String (relative file path)                                               | Path/filename of the SKU's storefront icon image, matched against the image assets uploaded for the title (e.g. `festivefixtures/Loyalty_Offer.webp`).                                                                                                                                                  |
| `Start_Time`                | No       | ISO‑8601 datetime, `YYYY-MM-DDTHH:MM:SS`                                  | When the SKU becomes available for purchase. Leave blank for "available immediately."                                                                                                                                                                                                                   |
| `End_Time`                  | No       | ISO‑8601 datetime, `YYYY-MM-DDTHH:MM:SS`                                  | When the SKU stops being available. Leave blank, or use the sentinel value `2100-01-01T00:00:00`, for "no end date."                                                                                                                                                                                    |
| `Web_Store_Exclusive`       | Yes      | Enum: `Yes`, `No`                                                         | Whether the SKU is sold only through the web store, as opposed to also being purchasable in‑app.                                                                                                                                                                                                        |
| `Sku_Purchase_Limit`        | No       | Integer                                                                   | Maximum number of times a single player can purchase this SKU within one refresh window (see `Refresh_Rate`). Leave blank for no limit.                                                                                                                                                                 |
| `Refresh_Rate`              | No       | Integer (days)                                                            | Length, in days, of the purchase‑limit window. E.g. `1` = daily limit, `7` = weekly, `30` = monthly. Very large values (e.g. `100000` or more) are used as a "never refreshes" sentinel — i.e. the limit applies once, for the lifetime of the SKU. Only meaningful together with `Sku_Purchase_Limit`. |
| `Purchase_Limit_Start_Date` | No       | ISO‑8601 datetime                                                         | The anchor date the purchase‑limit window counts from. Typically set equal to `Start_Time`.                                                                                                                                                                                                             |
| `Loyalty_Currency_Earned`   | Yes      | Decimal                                                                   | Amount of loyalty currency the player earns from purchasing this SKU. For `Real Currency` SKUs this is typically **\~100× the USD price** (e.g. a $0.99 SKU earns ≈99 points); some promotional/bonus SKUs earn at a higher multiplier (e.g. 200×). Set to `0.00` when not applicable.                  |
| `Loyalty_Currency_Burned`   | Yes      | Decimal                                                                   | Amount of loyalty currency a player must redeem to acquire this SKU. Only meaningful when `Pricing_Scheme = Loyalty Currency`; set to `0.00` otherwise.                                                                                                                                                 |

***

### 3. Pricing Scheme and related fields

`Pricing_Scheme` determines which of the pricing columns actually apply to a given row:

| `Pricing_Scheme`    | What it means                                                                 | Fields that apply                                                                                                                                                                                      |
| ------------------- | ----------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `Real Currency`     | Standard paid purchase, charged in real money.                                | `Price_US_Default`, `Price_<COUNTRY>` columns. `Loyalty_Currency_Earned` is typically populated (points earned per purchase); `Loyalty_Currency_Burned` = `0.00`.                                      |
| `Freebie`           | Free item, no charge.                                                         | `Price_US_Default` = `0.00`, all `Price_<COUNTRY>` blank. `Loyalty_Currency_Earned`/`Burned` = `0.00`. Commonly paired with a `Sku_Purchase_Limit` of `1` and a large `Refresh_Rate` (one‑time claim). |
| `Loyalty Currency`  | Redeemed using the player's loyalty/points balance instead of cash.           | `Loyalty_Currency_Burned` is populated with the redemption cost. `Price_US_Default` = `0.00`.                                                                                                          |
| `Loyalty Milestone` | Reward automatically granted at a loyalty milestone (not directly purchased). | Pricing fields are typically all `0.00`; availability is controlled by `Sku_Purchase_Limit` / `Refresh_Rate` rather than price.                                                                        |

***

### 4. Localized text columns

Five text fields — **Title**, **Description**, **Category**, **Item\_Main\_Title**, and **Item\_Sub\_Title** — each repeat once per supported language, using the pattern:

```
<Field>_<language_code>
```

For example: `Title_en`, `Title_fr`, `Title_ja`, `Description_en`, `Category_en`, `Item_Main_Title_en`, `Item_Sub_Title_en`, etc.

| Field prefix             | Required                           | Description                                                                                                                    |
| ------------------------ | ---------------------------------- | ------------------------------------------------------------------------------------------------------------------------------ |
| `Title_<lang>`           | `_en` required; others recommended | The SKU's display name shown in storefront listings.                                                                           |
| `Description_<lang>`     | No                                 | Longer descriptive text for the SKU. Optional and frequently left blank — not all storefront surfaces display it.              |
| `Category_<lang>`        | Recommended                        | The category/grouping label the SKU is shown under in the storefront (e.g. "FC Point Offer Permanent").                        |
| `Item_Main_Title_<lang>` | `_en` required; others recommended | The primary title shown on the item itself (as opposed to the storefront listing) — commonly the same value as `Title_<lang>`. |
| `Item_Sub_Title_<lang>`  | No                                 | A secondary line of text shown under `Item_Main_Title_<lang>` on the item.                                                     |

Leave a language's column blank to fall back to the default/English text on that surface (behavior may vary by title configuration).

#### Supported language codes

| Code | Language  | Code | Language   |
| ---- | --------- | ---- | ---------- |
| `en` | English   | `ru` | Russian    |
| `zh` | Chinese   | `da` | Danish     |
| `ar` | Arabic    | `fi` | Finnish    |
| `ro` | Romanian  | `lo` | Lao        |
| `tr` | Turkish   | `pt` | Portuguese |
| `pl` | Polish    | `km` | Khmer      |
| `th` | Thai      | `es` | Spanish    |
| `sv` | Swedish   | `de` | German     |
| `nl` | Dutch     | `sk` | Slovak     |
| `ms` | Malay     | `el` | Greek      |
| `mn` | Mongolian | `id` | Indonesian |
| `ja` | Japanese  | `it` | Italian    |
| `my` | Burmese   | `cs` | Czech      |
| `no` | Norwegian | `hu` | Hungarian  |
| `fr` | French    |      |            |

***

### 5. Per‑country pricing columns

For SKUs using `Pricing_Scheme = Real Currency`, price can be overridden per country using columns named:

```
Price_<COUNTRY_CODE>
```

using the country's ISO 3166‑1 alpha‑2 code. If a country's column is left blank, the storefront falls back to a computed/default price derived from `Price_US_Default`.

<details>

<summary>Full list of supported country codes</summary>

| Code | Country       | Code | Country              | Code | Country        |
| ---- | ------------- | ---- | -------------------- | ---- | -------------- |
| `US` | United States | `IE` | Ireland              | `KZ` | Kazakhstan     |
| `DE` | Germany       | `EC` | Ecuador              | `TH` | Thailand       |
| `HK` | Hong Kong     | `MM` | Myanmar              | `LA` | Laos           |
| `TW` | Taiwan        | `MN` | Mongolia             | `PE` | Peru           |
| `PT` | Portugal      | `EG` | Egypt                | `CZ` | Czech Republic |
| `DK` | Denmark       | `AE` | United Arab Emirates | `PH` | Philippines    |
| `PY` | Paraguay      | `UY` | Uruguay              | `TL` | Timor‑Leste    |
| `HU` | Hungary       | `IN` | India                | `PK` | Pakistan       |
| `QA` | Qatar         | `ZA` | South Africa         | `PL` | Poland         |
| `MA` | Morocco       | `IQ` | Iraq                 | `TR` | Turkey         |
| `ID` | Indonesia     | `IT` | Italy                | `LK` | Sri Lanka      |
| `MX` | Mexico        | `MY` | Malaysia             |      |                |
| `ES` | Spain         | `AR` | Argentina            |      |                |
| `AT` | Austria       | `AU` | Australia            |      |                |
| `NG` | Nigeria       | `RO` | Romania              |      |                |
| `NL` | Netherlands   | `NO` | Norway               |      |                |
| `BD` | Bangladesh    | `NP` | Nepal                |      |                |
| `BE` | Belgium       | `FI` | Finland              |      |                |
| `BH` | Bahrain       | `JP` | Japan                |      |                |
| `FR` | France        | `NZ` | New Zealand          |      |                |
| `BO` | Bolivia       | `SA` | Saudi Arabia         |      |                |
| `BR` | Brazil        | `SE` | Sweden               |      |                |
| `SG` | Singapore     | `SK` | Slovakia             |      |                |
| `KE` | Kenya         | `GB` | United Kingdom       |      |                |
| `KH` | Cambodia      | `CA` | Canada               |      |                |
| `CH` | Switzerland   | `CL` | Chile                |      |                |
| `GR` | Greece        | `CO` | Colombia             |      |                |
| `KW` | Kuwait        | `GT` | Guatemala            |      |                |

</details>

***

### 6. Reserved / internal columns

The following columns may appear in your export but are reserved for specific configurations and are typically left blank:

| Column          | Notes                                                                                                                                                                                                                         |
| --------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `EventPackage`  | Links a SKU to a specific promotional event/package grouping. Only used for titles running event‑based bundles — leave blank unless your Coda account manager has instructed you to set a specific package ID for a campaign. |
| `Active_Cogs`   | Internal cost‑of‑goods‑sold tracking flag. Leave blank; contact your Coda account manager if you need COGS tracking enabled for a SKU.                                                                                        |
| `Cogs_Currency` | Currency code paired with `Active_Cogs`. Leave blank unless directed otherwise.                                                                                                                                               |

***

### 7. Sample rows

The included sample CSV covers the following illustrative SKUs:

| ProductID                | Pricing Scheme    | What it demonstrates                                                                             |
| ------------------------ | ----------------- | ------------------------------------------------------------------------------------------------ |
| `GEMPACK_100`            | Real Currency     | A basic, always-available currency pack with no purchase limit.                                  |
| `GEMPACK_2500_BONUS`     | Real Currency     | A limited-time promo with a bonus loyalty multiplier (earns 200× instead of the usual \~100×).   |
| `FOUNDERS_BUNDLE`        | Real Currency     | A web-store-exclusive, one-time-only bundle (`Sku_Purchase_Limit = 1`, sentinel `Refresh_Rate`). |
| `WELCOME_GIFT`           | Freebie           | A one-time free gift for new players, capped for the SKU's lifetime.                             |
| `DAILY_LOGIN_REWARD`     | Freebie           | A free reward that resets daily (`Refresh_Rate = 1`).                                            |
| `LOYALTY_SKIN_COMMON`    | Loyalty Currency  | A low-cost item redeemed with loyalty points, no purchase limit.                                 |
| `LOYALTY_SKIN_LEGENDARY` | Loyalty Currency  | A higher-cost redemption capped at 3 per month.                                                  |
| `MILESTONE_REWARD_TIER5` | Loyalty Milestone | A reward auto-granted at a loyalty milestone rather than purchased.                              |
| `SEASON_PASS_PREMIUM`    | Real Currency     | A seasonal pass limited to one purchase per season window.                                       |
| `GEMPACK_50`             | Real Currency     | A minimal row with only the required fields populated.                                           |

To keep the file readable, only `en`, `fr`, `es`, `de`, `ja`, and `zh` are filled in for the localized text columns, and only `US`, `GB`, `SG`, `JP`, `BR`, and `DE` are filled in for per‑country pricing — every other language/country column is present (per the full template) but left blank, exactly as most real exports leave the majority of these optional columns blank.

***

### 8. Tips and common errors

* **Don't change `ProductID`** for existing SKUs — this is the match key. Changing it creates a duplicate SKU rather than updating the original.
* **Keep the sentinel end date** (`2100-01-01T00:00:00`) or leave `End_Time` blank for SKUs that shouldn't expire.
* **Real Currency SKUs should always have `Price_US` populated** — it's used as the fallback reference price alongside `Price_US_Default`.
* **`Sku_Purchase_Limit` and `Refresh_Rate` work as a pair** — setting one without the other may produce unexpected results.
* Column headers are **case‑sensitive** — don't rename them when editing in Excel/Sheets.

Here’s the [Sample Google Sheet (Pricing template)](https://docs.google.com/spreadsheets/u/0/d/1QBehJqAGAtEnOdZcqrxkkFYWJnhQCSTkc8HOVoPYFtU/edit). Download and create a copy to submit the pricing information. Convert the Price & SKU info tab in the sheet in CSV format and upload it to the Coda Portal.

You can also download and view the sample or from the Coda Portal.

{% file src="/files/c32Iw4HSXmApDPfuN9Mf" %}
Coda Product (SKU) Price Template
{% endfile %}

The sample file contains an example product. Your import file probably contains many more products and variants. If you use the sample file to create your own import file, then make sure that you create a copy of the file and remove all the example products.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.coda.co/general-information/coda-portal/coda-portal-appendix/codas-pricing-template.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
