Developers
CSV import
The no-code fallback to the API. If you can export a spreadsheet but can't (yet) sign API requests, upload products, conversions and order-status updates as CSV files.
CSV import is built for merchants and operators who don't have an engineering team wiring up the API. You export the data you already have, drop the file in, and we run it through the exact same validation, dedup and commission rules the API uses. There are no shortcuts and no second-class path: a row imported by CSV is indistinguishable from the same row sent to the API.
How it works
Every import follows the same three steps. Nothing is written to your account until you confirm the preview.
1. Upload
From the dashboard, choose the import type and upload your .csv file. Each type maps to its own endpoint:
POST /merchant/imports/products # product catalog
POST /merchant/imports/orders # orders / conversions
POST /merchant/imports/order-status # order-status updates2. Preview
Before anything is processed, you get a preview of the whole file: the total row count, how many rows are valid, invalid or duplicates, the estimated number of conversions that will be created and the estimated commission, plus a sample of the errors found. Use the preview to catch a mis-mapped column or a wrong currency before it touches your data.
3. Process
When the preview looks right, confirm to process. Valid rows are applied through the same engine as the API: same field validation, same deduplication, same commission calculation. Invalid rows are skipped and reported so you can fix and retry them.
Products file
Imports or updates your product catalog. Required columns are externalProductId, name, productUrl and price. All other columns are optional.
externalProductId,name,productUrl,price,currency,category,brand,commissionType,commissionValue,imageUrl,stockStatus
SKU-1001,Wireless Earbuds,https://shop.example/p/1001,2999.00,NPR,Audio,Acme,PERCENT,8,https://shop.example/img/1001.jpg,IN_STOCK
SKU-1002,USB-C Charger,https://shop.example/p/1002,1499.00,NPR,Accessories,Acme,FIXED,120,https://shop.example/img/1002.jpg,IN_STOCKValidation: externalProductId is your stable product key — rows with the same id are deduped (see below). productUrl must be a valid URL. price is a decimal string (e.g. 2999.00), not a number with thousands separators or a currency symbol. currency is an ISO-4217 code. commissionType and commissionValue set a per-product commission override; if omitted, the product inherits your account/campaign default. stockStatus must be a recognised stock value.
Orders / conversions file
Records conversions. Required columns are externalOrderId and orderAmount. Everything else is optional but recommended — without a clickId the conversion can't be attributed to a click.
externalOrderId,clickId,externalProductId,orderAmount,currency,orderStatus,orderedAt,couponCode
ORD-5001,clk_8f3a...,SKU-1001,2999.00,NPR,PENDING,2026-06-12T10:15:00Z,SAVE10
ORD-5002,clk_2b7c...,SKU-1002,1499.00,NPR,CONFIRMED,2026-06-12T11:40:00Z,Validation: externalOrderId is your unique order key and is what conversions are deduplicated on. orderAmount is a decimal string in the order currency. orderStatus, when present, must be a valid order status. orderedAt is an ISO-8601 timestamp. clickId ties the conversion back to the recorded click. See Conversions for the full conversion and commission rules — they apply here unchanged.
Order-status file
Updates the status of orders you've already recorded. Required columns are externalOrderId and status.
externalOrderId,status,statusUpdatedAt,reason
ORD-5001,CONFIRMED,2026-06-13T09:00:00Z,Payment captured
ORD-5002,CANCELLED,2026-06-13T09:05:00Z,Customer requested refundValidation: externalOrderId must match an existing order. status must be a valid order status — an unrecognised value fails the row. statusUpdatedAt is an ISO-8601 timestamp and reason is free text. Status transitions drive commission state exactly as in the API; see Order status for the valid statuses and their commission effects.
Error file & retries
Invalid rows never block the valid ones. After processing, any rows that failed are collected into a downloadable error CSV: each failed row is returned with its original line plus the reason it was rejected. Fix the flagged rows in that file and re-upload just the corrections — you never have to re-submit the whole batch.
Large files
Each import job handles up to 10,000 rows. Files within that limit are processed as a single job; the preview and final report cover the entire file. To import more than 10,000 rows, split your export into multiple files and upload them in sequence — because deduplication is keyed on your external ids, splitting a file never creates duplicate conversions.
Duplicate rows
Duplicates are deduped exactly the way the API dedupes them. Conversions are unique per externalOrderId, products per externalProductId. A repeated key — whether it appears twice in the same file or was already imported earlier — is counted as a duplicate in the preview and is not double-applied. Re-uploading the same file is therefore safe and idempotent: nothing is created twice.