Skip to content
Docs menu

Running a programme · For a brand's operations team

Uploading batches from a spreadsheet

When a brand orders twenty-five batches at once, typing them into a form is where mistakes happen. The upload path takes a spreadsheet in three steps, and each step exists to stop a specific mistake.

Three steps #

  • Template

    What it does
    An Excel file downloaded from the product's own Bulk upload tab. Its product dropdown holds that one product, and batch_kind is a dropdown too.
    What it stops
    A typed product name that matches nothing — and a batch generated for the wrong product.
  • Preview

    What it does
    Parses the file, validates every row, resolves the products and prices the file against the credit balance. It writes nothing.
    What it stops
    A surprise.
  • Commit

    What it does
    Asks you to retype the label total, the way a bank asks you to retype an amount.
    What it stops
    A mis-click.

After the commit the background worker writes the batches — always the worker, never the request, because twenty-five rows of 10,000 labels is a quarter of a million labels.

The columns #

product, quantity, batch_kind, programme, lot_number, batch_name, scan_limit, hidden_code_format, mfg_date, expiry_date, offer_end_date, discount_price_rupees, fact1_name, fact1_value, fact2_name, fact2_value

Only product and quantity are required. product takes the product's id or its exact name (capitals do not matter) — and it has to be the product whose page you uploaded from: a row for any other product is rejected by name. Only Excel (.xlsx) is accepted; a CSV is refused with a sentence saying so.

Limits and formats #

  • A file holds up to 1,000 rows and 2 MB.
  • Dates are YYYY-MM-DD and nothing else. A date means the end of that day, IST.
  • discount_price_rupees is a whole number of rupees. The verdict page shows it as Special price.
  • batch_kind takes a value from the template's dropdown. The values are not listed on this page on purpose: they are the console's own list, and the template always carries the current one.
  • The expiry date, the offer end date and the special price take three of the verdict page's five fact slots, so a row has two left for facts you name. A fact3_name column you add is read, but a sixth fact is rejected with that reason.
  • The dropdowns are typing help, not a gate: a pasted value skips them. Every row is checked again on upload.

When a row is rejected #

The preview names the row and the reason. Fix the file and preview again; nothing was written, so there is nothing to undo.

The preview also prices the file against your balance and shows any shortfall in red before you commit. If you commit a file the balance cannot cover, the rows are generated one by one until the credits run out, and the report lists the rest as failed. A row is never half-generated, and the balance never goes below zero.

Uploading again #

  • The same file uploaded twice generates nothing twice, and spends nothing the second time.
  • Change one row and upload the file again, and only that row is generated again, as a new batch. The batch the old row made stays as it was.
  • Two identical rows in one file are rejected, because they would be generated once. Give each its own lot number.

Last reviewed 19 Oct 2026 · Something wrong? connect@avrascan.com