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
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.
Edit — Update values directly in the CSV (e.g. change a price, extend a sale window, add a new SKU as a new row).
Re‑upload — Upload the edited CSV back into the portal. Rows are matched to existing SKUs by
ProductID; aProductIDnot already in the system creates a new SKU.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.
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:
For example: Title_en, Title_fr, Title_ja, Description_en, Category_en, Item_Main_Title_en, Item_Sub_Title_en, etc.
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
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:
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.
6. Reserved / internal columns
The following columns may appear in your export but are reserved for specific configurations and are typically left blank:
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:
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
ProductIDfor 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 leaveEnd_Timeblank for SKUs that shouldn't expire.Real Currency SKUs should always have
Price_USpopulated — it's used as the fallback reference price alongsidePrice_US_Default.Sku_Purchase_LimitandRefresh_Ratework 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). 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.
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.
Last updated
Was this helpful?