How do I print shipping labels from a CSV file?
Export your orders, check that every row has a name, full street address, city, state, five-digit ZIP and weight, then import the file into a label tool that maps columns and prices the batch. Most failed runs come from the file: a ZIP that lost its leading zero, or one order split across several item rows.
The columns every label needs
A carrier label needs less than an order export carries. Find these columns first and ignore the rest: payment, tax, discount and billing columns do nothing for a label, and the billing address is the one most often mapped by mistake. Weight is the column a store export is most likely to be missing. If your file has none, decide before the run where it comes from: a saved package, the listing, or a scale at the bench.
| Column | Why the label needs it | Watch for |
|---|---|---|
| Recipient name | The first line of the address block | A buyer name on a gift order, where the recipient is someone else |
| Street, line 1 | The delivery address line | The billing street sitting beside the shipping street |
| Street, line 2 | Apartment, suite or unit | Left empty when the unit was typed into line 1, which is fine |
| City, state, ZIP | Routing and the zone, which sets the price | A four-digit ZIP, which means a leading zero went missing |
| Country | Whether the label needs a customs form | Blank on domestic rows in some exports; treat blank as US only if the store is US-only |
| Weight and its unit | The price, and the service it qualifies for | Ounces read as pounds, or a per-item weight that was never multiplied by quantity |
| Box size | Dimensional weight on bigger boxes | Missing from every store export; it comes from your saved packages |
| Order number | Matching the label back to the order and the packing slip | Long numbers turned into scientific notation by a spreadsheet |
Six ways an export breaks a label run
None of these show up until the batch is priced, and some only show up when a parcel comes back. Check for each one before you import, because a fix in the file is quicker than a fix on fifty labels.
| What broke | How it shows | Fix |
|---|---|---|
| ZIP lost its leading zero | 02134 reads as 2134 and the row fails or rates to the wrong place | Open the CSV with the ZIP column set to Text, or pad it back to five digits |
| Weight in the wrong unit | A 12 oz mailer priced as a 12 lb box | Confirm the unit in the header and convert grams or decimal pounds before mapping |
| One row per item | A three-item order becomes three labels | Use the per-order file, or group rows on the order number |
| Line 2 merged into line 1 | Unit numbers vanish, or two addresses run together | Keep the unit at the end of line 1 or on line 2, never in the city field |
| International rows mixed in | A row that cannot print without customs details | Split them out and add contents, values and tariff codes first |
| Duplicate rows from re-exports | The same order shipped twice | Export by date range once, and dedupe on the order number |
USPS prefers the apartment or suite at the end of the delivery address line, and allows it on the line immediately above when it does not fit. Either is fine on a label; losing it is not.
Exports that are ready to use
Every store hands you a different file, and the grain matters more than the brand. Etsy offers an orders file with one row per order and an order items file with one row per item. eBay's orders report comes from Manage orders or Seller Hub Reports, for a range of 1 to 90 days, with one row per order line. Shopify's orders export puts each line item on its own row, with a shipping block and an identical billing block, and no weight column. WooCommerce core exports products, not orders, so an orders file needs the Customer / Order / Coupon Export extension or another route.
Whatever the store, open one file before you build anything on it. Neither Etsy nor eBay publishes a full column list for these files, so map from the headers you actually got.
| Store | File | One row per |
|---|---|---|
| Etsy | Orders, or Order items | Order, or item |
| eBay | Orders report | Order line |
| Shopify | Orders export | Line item |
| WooCommerce | Customer / Order / Coupon Export | Depends on the export format |
Importing the file
Count the orders in the store's own unshipped view, so you know how many labels to expect.
Open the file and check the ZIP, weight and order number columns before anything else.
Take international rows out into their own batch.
Import the file and map each label field to one column, shipping block only.
Compare the row count after import with the count from step 1. More rows means items were split; fewer means a filter or a duplicate.
Price the batch, change any row that needs a different service, then buy and print.
Put the tracking numbers back on the orders, by upload or by hand.
Printing the labels does not tell your store anything. A file is one way, so the tracking step at the end is yours unless the store is connected.
Key takeaways
- A label needs a name, street, city, state, a five-digit ZIP, a weight and a box size. Billing columns are noise.
- Check ZIPs for a lost leading zero and weights for the wrong unit before importing.
- Know your file's grain: one row per order, or one per item.
- Count the rows after import against the store's unshipped count.
- Tracking still has to go back to the store after a file-based run.
Drop in the export you already have
The Workbench, which is part of Pro, takes a CSV or Excel file and recognises many order exports on its own, among them eBay, Amazon, Shopify, WooCommerce and Squarespace, and the order files other label tools export. It also tries to read Etsy's, TikTok Shop's and Wix's files; check the column matches on your first import. A file it does not recognise gets a mapping step, one column per label field.
Rows that share an order number come in as one order, an Excel file's ZIP column gets its leading zeros back, and the import flags recipients who appear twice. Every row starts on the cheapest rate shown, and you can change any row before you buy. The batch prints as one 4x6 or letter PDF, and the tracking numbers export as a CSV for the stores you update by file.
If your store is eBay, connecting it skips the file: paid orders arrive with the address and the listing weight, and tracking goes back to eBay when the label is bought.
Related questions
Each store hides it somewhere different. Step-by-step guides: export Etsy orders to CSV, download an eBay orders report, export Shopify orders for a label run, export WooCommerce orders to CSV, export Big Cartel orders, export Reverb orders and export Discogs orders.
One row per order, if the store offers it, because a label is per parcel. Take the per-item file only when you need the line items for picking, and then group the rows on the order number before you price anything, or a three-item order turns into three labels.
No. A connected store sends paid orders in without a file and takes the tracking back, which removes both the export and the upload. In I'd Ship That that is the eBay connection; other stores come in by file. See bulk shipping labels for both routes side by side.
Not in I'd Ship That. File import lives in The Workbench, which is part of Pro. On the free Starter plan you create labels one at a time, from the web or the phone apps. Billing has the plan details.
By an upload or by hand, unless the store is connected. Most stores accept a bulk tracking upload with the order number, the carrier and the tracking number; uploading tracking numbers in bulk covers where each store puts it. On Etsy, tracking goes on each order through Complete order.