Freebies Engine
Import and export offers
Export offers as CSV or a JSON offers file, and import a spreadsheet or file as drafts. Nothing is published and no codes are created.
Import a CSV
CSV import and export are on the Growth plan and up, for Admins and Owners. Bundles, upsells and display settings are not in the CSV: import creates the offer and its main rule, and you finish it in the editor.
- Open Import and export in the Tools menu, or use Import from CSV in the Offers menu.
- Select Download template to start from the right columns, or choose your own CSV file or paste it.
- Select Preview. Fix any row the preview marks as not importable.
- Select the Create button. Every row becomes a draft.
- The file can be up to 1 MB, with up to 250 offers.
- Rows with the same name in a row are one offer with several rewards. A name starting with # is an example row and is skipped.
- If a name is taken, the offer imports under a new name and the results say so.
- Codes are added on each offer's Codes tab afterwards.
Export
In the Offers menu, choose Import and export, then Export all offers for every offer in every status, one row per reward, or Export what the list shows for the current filters. A single offer's row menu has Export CSV.
Offers file (JSON)
To move offers between stores, use Offers file (JSON) on the Import and export page. Export offers file holds every offer that is not archived, with its gift tiers, selling plans and Skio tiers. On the other store, choose the file and select Preview import: items are marked Will be created, Already imported or Can't be imported. Everything is created as a draft, and importing the same file twice creates nothing the second time.
If the file's currency differs from your store's, amounts are not converted. Tick Import anyway, amounts unchanged to continue.
The CSV columns
| Column | Needed | What goes in it |
|---|---|---|
| offer_id | No | Written by export. Import ignores it and always creates new offers. |
| internal_name | Yes | Only your team sees this. Rows with the same name in a row are one offer with several rewards. A name starting with # is an example row and is skipped. |
| public_title | No | The discount message shoppers see. Up to 60 characters. Defaults to the name. |
| type | Yes | gift, bundle, upsell, discount, code or shipping. |
| template | No | Which template the offer starts from, like gift/cart-value. Optional. |
| status | No | Written by export. Imported offers are always drafts. |
| priority | No | Written by export. Imported offers go to the bottom of the stacking order. |
| starts_at | No | When it starts, like 2026-11-27T09:00:00-05:00. Without an offset, your store's time zone. |
| ends_at | No | When it ends. Same format. |
| discount_tags | No | Tags for your team, separated by |. |
| requires_code | No | true if shoppers need a discount code. Add the codes on the offer's Codes tab after importing. |
| code_redemption | No | checkout_code (default) or automatic (no code needed). |
| condition_type | No | cart_value (spend) or cart_quantity (items in the cart). |
| condition_value_threshold_cents | No | The amount in the smallest unit of currency_code (7500 = 75.00). For cart_quantity, the number of items. |
| currency_code | No | The currency of the amounts, like USD. Defaults to your store's. |
| reward_type | No | product_gift, order_discount, product_discount or shipping_discount. |
| discount_type | No | free, percentage or fixed_amount. |
| reward_value | No | A percentage (10) or an amount in whole units of the currency (5.00). |
| gift_variant_gids | No | The gift variants' Shopify IDs, separated by |. They must be in your catalog. |
| gift_quantity | No | How many of each gift. Default 1. |
| is_auto_add | No | true to add the gift automatically. |
| track_mode | No | product or variant. |
| created_at | No | Written by export. |
| updated_at | No | Written by export. |