Sign In
Products
ZPL ViewerBarcode GeneratorImage → ZPLZPL cheat sheetLabel DesignerTemplate Gallery
Developers
API QuickstartAPI ReferenceMCP ServerBulk GenerationWebhooksSDKs & ExamplesLimitsDirectPrint agent NewGitHub ActionVS Code extensionOn-Premise
Solutions
Logistics & ShippingE-CommerceERP & WMSManufacturingRetailHealthcare & LaboratoryAll solutions
Tools
ZPL Diagnostics HubZPL DebuggerSize & DPI AnalyzerDPI ConverterBarcode fit calculatorShipping Label AnalyzerFont InspectorOrientation DebuggerCalibration AssistantPrinter Compatibility CheckerBarcode Readability CheckerPrinter Language DetectorThermal Printer Test PackZPL ToolsEPL ToolsTSPL ToolsCPCL ToolsPrinter Language ConverterAll ToolsGuidesPricing
Language
EnglishTürkçeDeutsch
Home›Guides›How to Print ZPL Labels from Excel or CSV Data

How to Print ZPL Labels from Excel or CSV Data

Published: · Updated:

The most common real-world labelling job is not one label — it is one design and a spreadsheet of rows: products, shipments, shelf locations. This guide shows the whole path from an Excel/CSV file to a stack of printable ZPL labels.

Step 1 — put variables in your ZPL

Wherever a value changes per row, replace it with a {{name}} placeholder:

^XA
^FO40,40^A0N,35^FD{{product}}^FS
^FO40,90^BY2^BCN,80,Y,N,N^FD{{sku}}^FS
^XZ

Open this label in the ZPL viewer →

Placeholders can be typed ({{qty:sayi}} for numbers) and can carry defaults ({{note|—}} keeps a row valid when the cell is empty). The bulk tool detects the placeholders automatically when you paste the template.

Step 2 — export your sheet as CSV

In Excel: File → Save As → CSV (UTF-8). The first row must be headers. Header names do not have to match the placeholder names — the next step maps them — but matching names map themselves.

Step 3 — upload and map columns

In the bulk generator, upload the CSV and match each placeholder to a column. You get a per-row preview before anything is generated, so a mismatched column shows up as a wrong label on screen, not as a wasted roll of media.

Step 4 — generate and print

The batch runs as a job: you see progress, can cancel, and download the result as a ZIP. Each generated label counts against your plan's quota — a 500-row sheet is 500 operations, and the tool says so before you start rather than surprising you at the invoice.

Automating it over the API

The same flow exists as REST endpoints for recurring jobs: POST /v1/variables/csv parses the file, POST /v1/bulk/jobs starts the batch — see the API reference. What worked in the browser works identically over the API; it is the same engine.

Honest limits

Rendering shows what the server draws, not what your printer's darkness and media will do with it — proof one label physically before committing a large batch. Formulas in cells are treated as plain text (deliberately: CSV formula injection is a real attack), so compute values in the sheet before exporting.

Related lint rule

If you store the template on the printer with ^DF and recall it with ^XF instead, only the data sent to numbered ^FN fields changes between labels. A stored format with no ^FN prints the same label every time, often because a design program exported text or barcodes as a ^GF image. The linter flags this as ZPL2003.

Frequently asked questions

Can I print ZPL labels directly from an Excel file?

Not directly — export the sheet as CSV (UTF-8) first, then upload it to the bulk generator. Placeholders like {{sku}} in your ZPL template are mapped to CSV columns, previewed per row, and generated as a batch job.

Do Excel formulas work in the CSV?

No — cell content is treated as plain text on purpose (CSV formula injection is a real attack). Compute the values in the spreadsheet before exporting; only the results travel.

How is a 500-row batch billed?

Each generated label counts as one operation against your plan's quota, so 500 rows are 500 operations. The tool states the count before you start the job.

Related guides

ERP label printing with ZPL

Where ERP label pipelines break, and the validation gate that stops a bad template before it reaches a warehouse printer.

UPS ZPL labels: request, preview and fix

The Shipping API fields behind a ZPL label (format code, stock size, character set), the per-package path to the payload and why density is read from the file.

Working with carrier ZPL labels

Carrier APIs hand back ZPL, not a picture. How to decode it, check it before it burns media, and what you must not change.

FedEx ZPL labels: request, preview and fix

The Ship API fields that decide the ZPL (image type, stock, 203 or 300 dpi), where the label sits in the response and the checks to run before printing.

Try your own ZPL code →