
Operations
6 min
How One Factory Sysadmin Eliminated Label Tickets Without IT
A factory sysadmin was drowning in 50+ label change requests a year. He built a pipeline once. Six months later, zero IT tickets. Here's how.
zplflow team
Jul 31, 2026
A sysadmin at a mid-size 3PL warehouse in northern Italy told me his label problem last spring. He’d been keeping a spreadsheet. Fifty-three label change requests in 2025. Each one was a ticket. Each ticket meant: open the ZPL, find the right field, edit it, test it on a printer, test it on a different printer, deploy it, hope it didn’t break.
Average resolution time: 4 working days. Total cost: roughly 200 sysadmin hours. One sysadmin’s entire year, spent editing text files instead of running infrastructure.
Every change followed the same script: account manager forwards a client email, sysadmin opens the ZPL template, hunts for the right field (usually wrapped in 200+ lines of ^A0, ^FD, ^FS blocks), edits, prints a test page, walks to the printer, scans the barcode. Sometimes the alignment is off. Sometimes the font is wrong. Sometimes the barcode is too small. Fix it. Test again. Deploy. Close ticket. Four days, from request to deployment, for a one-character change.
He set up one pipeline per client. Each pipeline captured the recurring changes that account managers asked for: barcode value, client logo, address block, legal text. Variables for the things that actually change order-to-order. The setup, end to end, took about an hour. Once.
The sysadmin (or, later, the account manager herself) defined the transformations:
curl -X POST https://api.zplflow/v1/pipelines \
-H "Authorization: Bearer ulb_your_key" \
-H "Idempotency-Key: setup-client-acme" \
-H "Content-Type: application/json" \
-d '{
"name": "client-acme-shipping",
"steps": [
{"type": "replace_text", "search": "{{CLIENT_VAT}}", "replace": "{{vat_number}}"},
{"type": "add_barcode", "barcode_type": "code128", "x": 100, "y": 200, "height": 50, "value": "{{tracking_number}}"},
{"type": "add_text", "x": 50, "y": 350, "font_height": 20, "value": "{{carrier_name}}"}
]
}'
curl -X POST https://api.zplflow/v1/pipelines/9f3c1d2a-.../apply \
-H "Authorization: Bearer ulb_your_key" \
-H "Idempotency-Key: label-2026-07-31-001" \sysadmin-eliminates-label-tickets.png
-H "Content-Type: application/json" \
-d '{
"documents": [
{
"zpl_base64": "XlhBeF0ACj4wX0A...original-template-base64...",
"variables": {
"vat_number": "IT12345678901",
"tracking_number": "1Z999AA10123456784",
"carrier_name": "DHL Express"
}
}
]
}'
# Cost: 1 token (all three DOM steps fall within the base quota)
# Time: ~20 milliseconds
The same sysadmin, same spreadsheet, same factory:
| Before | After | |
|---|---|---|
| Label change requests (6 months) | 27 | 31 |
| IT tickets opened | 27 | 0 |
| Average time to change | 4 working days | 4 minutes |
| Sysadmin hours spent on labels | ~100 | ~6 |
| Account manager self-service | None | 31/31 changes |
He told me the part that surprised him: account managers started asking for changes they would never have asked for before. A new line of legal text for a French client. A different barcode position for a German client. A logo swap. Things that would have been “not worth the IT ticket” became one-line variable changes in the Admin UI.
If your sysadmin’s calendar is full of label tickets, here’s the experiment:
zplflow is label infrastructure for 3PLs. API-first, zero maintenance. Convert PDF to ZPL, transform labels with programmable pipelines, print on any Zebra.
Tags