Booking orders in bulk: how the CSV import validates first
The import validates every row before it creates anything, against the same rules the booking screen uses. You fix spreadsheet rows instead of unpicking parcels. Plus the five failures that cause most rejections.
Once you are shipping more than a handful of parcels a day, booking them one at a time stops making sense. The CSV import takes a spreadsheet of orders, validates every row before it creates anything, and gives you a report of what passed and what did not. Nothing is booked until you have seen that report.
That ordering is the whole point. An import that creates eighty good orders and twenty broken ones leaves you unpicking twenty parcels. An import that validates first leaves you fixing twenty spreadsheet rows.
How the import actually runs
- 01You upload the file in the merchant portal
- 02Columns are matched to fields, so your own header names do not have to match ours exactly
- 03Every row is validated against the same rules the booking screen uses
- 04You get a report: rows that will book, rows that will not, and the reason for each failure
- 05You confirm, and the valid rows become orders
Step three matters more than it sounds. The validation is the same schema the single-order screen uses and the same one the public API uses, so a row that passes the import is a row that would have passed any other path. There is no second, looser set of rules for bulk work.
What a row needs
The consignee name, a phone number, the delivery address, the city, the COD amount, and the weight. Dimensions are optional but worth supplying, and the reason is money rather than tidiness.
If the scale weight is 5 kg or less and you give dimensions, the charge is worked on the larger of the scale weight and the dimensional weight. Leave dimensions out and the parcel is priced on weight alone at booking, then re-measured at the warehouse, and the warehouse figure is what the final charge is based on. Supplying them means the quote you see is the charge you get. Chargeable weight versus actual weight covers the arithmetic.
The five failures that account for most rejected rows
A phone number with the wrong number of digits
The most common by a distance, and usually a spreadsheet problem rather than a typing one. A leading zero stripped by Excel turns a valid number into an invalid one. Format the column as text before you paste.
A weight of zero or blank
A parcel has to have a weight. If your own system does not hold one, put a realistic default in the column rather than leaving it empty, and correct it at the warehouse re-weigh.
A city that is not enabled
Cities are enabled in the back office before they can be booked into. A row for a city we do not yet serve is refused at validation rather than accepted and then stranded.
An address that resolves nowhere
A geocode that succeeds and lands outside every service zone refuses the row, because that is a coverage decision rather than a missing detail. An address that simply does not resolve is accepted and marked as having an unconfirmed zone, with the quote shown as indicative until the back office resolves it. Writing a Lahore delivery address a rider can find prevents most of these.
Express after the cut-off
Express or same-day requires collection before 13:00. Rows marked express that cannot make that cut-off are refused rather than silently downgraded, because a silent downgrade means a customer was promised something you did not buy.
After the import
Booked is not collectable. Every imported order lands in your booked list and has to be forwarded to the pickup request before a rider will come for it. If you import daily, set an auto-pickup time and the sweep forwards every eligible booked order automatically at the hour you choose.
Then print labels in a batch and generate a load sheet, so the handover is a count against a document. Labels and load sheets covers that step.
When to stop using CSV
If your orders already live in a Shopify or WooCommerce store, the connector is better than a spreadsheet: orders arrive without an export step, and an export step is a place where stale data creeps in. Connecting a Shopify store walks through it.
If your orders live in your own system, the REST API is better still. The import exists for the case in between, which is most sellers between ten and a few hundred parcels a day.
A practical habit
Keep one template file with the columns in a fixed order and the phone column formatted as text, and paste into it rather than exporting a fresh file each time. Most repeat import failures are a column that moved rather than data that changed.
If you have not started shipping yet, the merchant signup form is the first step, and the first fifty orders checklist covers the setup around it.
Booking in Lahore starts at PKR 180 for the first 0.5 kg. Work out your own figure before you commit.