A client brings in a spreadsheet with 8,000 rows and says: we want each of our customers to get a voucher with their name, a unique discount code, and a barcode to scan in-store. Deadline: two weeks. Now you either say it's impossible on a reasonable budget, or you reach for variable data printing - VDP. We reach for VDP, and honestly, after a dozen or so such projects, I still enjoy the moment when the first sheet comes out of the printer and everything checks out.
VDP isn't some new, trendy technology. Digital printing machines have long been able to change content on every sheet or every page - because unlike offset, where the printing plate is a physical, fixed matrix, digital printing generates the image anew for every impression. That's the fundamental difference, and it's at the heart of the whole matter: offset prints identical copies, while digital can print 10,000 different variants in a single job, with no extra setup cost.
What it actually is and why offset can't handle it
In offset printing, each color has its own plate - a metal sheet with the image applied, which transfers ink onto thousands of sheets identically. Changing even a single letter means a new plate, new exposure, new setup on the machine. That's why offset is cheap for large runs of identical content and completely unviable for personalization - nobody's going to make a separate plate for each of 5,000 customers.
Digital printing, whether laser or industrial inkjet, has no plate. The image is generated electronically right before printing, so the machine can print a sheet for Anna Smith, then immediately after one for John Doe, and then a completely different graphic - with no changeover at all. VDP relies exactly on this feature: it combines a graphic template (layout, background, logo, fixed elements) with a database (names, numbers, codes, addresses) and generates a unique file for each record.
What looks like magic to the client is, in practice, a well-organized relationship between three elements: a graphic design with variable fields, a clean database in a spreadsheet, and software that links the two - most often XMPie for us, or the VDP modules in Fiery or PrintShop Mail.
What it looks like in practice - a concrete example
Let's say we're producing 3,000 birthday vouchers for a cosmetics store chain. The graphic design is a single page with a fixed background, logo, and product graphic - that doesn't change. The variable fields are: customer name, a unique 8-digit discount code, a Code 128 barcode generated from that code, and an expiration date calculated automatically as 30 days from the mailing date.
The Excel database has columns: name, discount_code, expiration_date. 3,000 rows, 3,000 unique combinations. The VDP software maps each column to the corresponding field in the design and generates 3,000 unique page variants - all in a single print job, all with the same background, but each different in the variable fields. The whole operation, from preparing the file to launching the job on the machine, takes maybe an hour, most of which is spent checking whether the database is clean - more on that shortly, because that's exactly the stage where things most often go wrong.
What can be personalized in VDP: Text (name, surname, address, amount), barcodes and QR codes, sequential numbering, images (e.g., a different product photo for different customer segments), and even entire content blocks - e.g., a different offer for VIP customers than for new ones. The more segmentation, the more design variants, but the mechanics stay the same.
Three applications that genuinely work well
Vouchers and discount cards
A unique code on every voucher isn't just personalization for show - it's control. The customer can't share the code with a friend, because the system marks it as used once scanned. For retail chains, it's also data: you know exactly which voucher was redeemed, when, and at which store. Without VDP, this kind of system simply doesn't exist, because manually numbering 5,000 cards is physically unfeasible in any reasonable timeframe.
Event tickets
A ticket with a unique number and QR code is standard today, not a luxury. VDP lets you print tickets with different seating categories (VIP, floor, balcony), different prices printed directly on the ticket, and a unique code scanned at entry by security or a gate - if a code has already been scanned, the system catches it. We've handled runs of 15,000 tickets where each had a different seat number - without VDP, that job simply wouldn't make economic sense.
B2B and B2C mailings
Here personalization goes further than just a name in the letter header - because honestly, a simple "Dear John" doesn't impress anyone anymore, people have seen it a thousand times in emails. What's more interesting are mailings where the offer content actually changes depending on the segment: a customer who recently bought running shoes gets a mailing about the new footwear collection, while a customer who buys accessories gets an accessories offer. This requires a richer database, but the response rate for such campaigns tends to be noticeably higher than for a uniform mailing sent to everyone.
The most common mistakes - and why the database is 80% of the work
Here's something clients most often underestimate: the graphic design itself in VDP is usually the simplest part. The real work and the greatest risk of errors lie in the database. We've seen spreadsheets where a postal code column was formatted as a number and Excel stripped the leading zero - so instead of "05-123" we got "5123". We've seen a database where half the names were in "JOHN SMITH" all-caps format and half were normal case, and nobody standardized it before printing, so some vouchers shouted while others didn't.
The second classic problem is duplicates in the database. If a database has 3,000 rows but 40 of them are accidental duplicates of the same customer, you'll print 40 unnecessary vouchers - and with discount codes, that means one customer gets two identical codes, which can either lock up in a validation system or, worse, allow double redemption.
The third mistake, less obvious: special characters and accented letters in a database exported from another system. If the database comes from a CRM and was exported with the wrong encoding, an accented name can turn into garbled characters or a question mark entirely. You won't catch this by eye scanning through 3,000 rows in Excel - the database needs to be run through validation before the job is launched.
Before you send the database to print: Check whether postal codes retain their leading zeros, whether there are duplicate rows, whether the character encoding (UTF-8) is correct for accented characters, and whether every column has data in every row (an empty field in a mandatory spot will break the whole record or, worse, print an empty placeholder on the voucher). One bad column in a database of 5,000 records can potentially mean 5,000 faulty prints.
Barcodes and QR codes in VDP - what to watch out for
Generating a unique barcode for every record sounds simple, but it has its pitfalls. Code 128 and EAN have checksums - if the input data (e.g., voucher number) has the wrong length or contains characters not allowed for that code type, the code won't generate correctly, or worse, it'll generate as an image that looks like a barcode but doesn't scan properly. We always test a sample of printed codes with a physical scanner before running the full batch - not on screen, but with a real scanner under real lighting conditions.
For QR codes, the minimum size for scanning with a phone is about 2×2 cm, and if the code encodes a long URL with tracking parameters, the code becomes denser and needs a larger surface area for a phone to read it without trouble from the typical distance someone holds a phone at.
How to prepare a design for VDP, step by step
First, the graphic design is done in software that supports variable fields - most often Adobe InDesign with a plugin, or a dedicated module like XMPie, PrintShop Mail, or DirectSmile. Fixed elements (background, logo, decorative elements) stay the same as in a normal design. Variable fields are marked as placeholders - e.g., <<name>>, <<discount_code>> - which the software replaces with real data from the database during generation.
Second, the database must have column headers that exactly match the field names in the design, or they need to be manually mapped in the VDP software. Column names without accented characters and spaces are safer - "discount_code" instead of "Discount Code" saves headaches during import.
Third, before launching the full run, we always do a test print on a sample of 20-30 records, deliberately chosen to cover edge cases: the longest name in the database (to check whether the text overflows the frame), the shortest, records with accented characters, records with empty optional fields. This is the stage that genuinely prevents disaster on a run of 5,000 pieces.
A rule we always apply: if a design has a text field of variable length (e.g., first and last name), the text frame must either have font auto-scaling or enough spare room for the longest realistic entry in the database. Otherwise a long name will spill past the margin, while a short one will look lost in an oversized frame.
How much it costs and when it's worth it
VDP makes sense for runs from a few hundred up to tens of thousands of digitally printed pieces - above a certain threshold (usually 10-20 thousand identical copies), offset starts becoming cheaper per unit, but offset doesn't personalize, so the cost comparison loses its meaning if personalization is a project requirement, not an option. The cost of preparing a VDP template is usually a one-time setup fee - design with variable fields, testing, database validation - and after that, the cost per unit is close to regular digital printing, with a small surcharge for data complexity.
A real example from our own work: a B2B mailing for 1,200 business partners, each with a different price offer depending on purchase history. Setting up the template and integrating the database was a one-time job that took about a working day; printing the 1,200 pieces itself took the machine a few hours. The setup cost spread across 1,200 pieces turned out to be a small fraction of the total cost - and that's a typical scenario: the larger the run, the smaller the share of setup cost in the unit price.
Before placing a VDP order, check
- The database has a unique identifier in every row (no duplicates)
- Postal codes and other numeric fields retain leading zeros
- Character encoding handles accented characters correctly
- Column names match the variable fields in the design
- Text frames have room for the longest possible entry
- Barcodes/QR codes tested with a physical scanner on a sample
- A test print of 20-30 records covering edge cases has been done
- The format and length of discount codes match the client's system
When VDP doesn't make sense
Not every project needs full VDP. If personalization is limited to a single field - say, just a sequential number on 500 invitations - sometimes it's simpler and cheaper to just order digital printing with automatic numbering, without building a full database-driven system. VDP shows its strength only with multiple variable fields, large runs, or integration with external systems like a CRM or a loyalty platform. Before committing to VDP, it's worth asking your print provider whether the scale of the project even justifies it - sometimes a simpler solution is just enough.
Variable data printing is one of those solutions that sound more complicated than they actually are in practice, provided someone on the other end knows what they're doing with the database. The whole technical difficulty lies not in the printing, but in preparing and validating the data - and that's work that needs to be done once, properly, before the machine starts running. If you have a project with personalization, send us a sample of your database before you even order the graphic design - sometimes the data structure suggests how to design the layout, not the other way around.
VDP variable data printing print personalization vouchers tickets mailing digital printing barcodes