Add a GS1 DataMatrix and four AI rows: 01, 17, 10 and 21.
COMPLIANCE / DSCSA / GS1 DATAMATRIX
DSCSA Label Printing: The Product Identifier, Encoded and Readable
Print DSCSA product identifiers: a GS1 DataMatrix with GTIN, serial, lot and expiry plus the human-readable text, from Excel, CSV or your database, on thermal printers.

Under the Drug Supply Chain Security Act, every package of a prescription drug and every homogeneous case carries a product identifier: the NDC, a serial number, the lot number and the expiration date. It appears twice, as text a person can read and as a code a scanner reads. On a package the code is a 2D DataMatrix; on a homogeneous case it can be a linear barcode or a 2D DataMatrix (FDA: Drug Supply Chain Security Act).
The enhanced, package-level requirements took effect on 27 November 2023. FDA then gave trading partners staged exemptions: manufacturers and repackagers to 27 May 2025, wholesale distributors to 27 August 2025, dispensers with 26 or more full-time employees to 27 November 2025, and small dispensers to 27 November 2027 (FDA: waivers and exemptions beyond the stabilization period). For a label line the date has passed: the identifier has to be right on every package.
FROM YOUR DATA TO THE PACKAGE
Bind it once. Print every serial.
The serials and lots come from your own system. LabelInn puts them into the code and keeps a record of what was printed.

Every value comes from a column of your file, a database query, an API or a counter. The mapping is saved with the design.

Flip through the rows in the preview, then print the range you need.

Who printed, when, on which printer, from which file and rows. Export it when someone asks.
01 / DSCSA
What goes into the code
US pharma uses GS1 for the code. The NDC is carried inside the GTIN, not as a field of its own. These are the four Application Identifiers, with the values from the sample label above.
| AI | Data element | In the sample | Format |
|---|---|---|---|
| (01) | GTIN, which contains the NDC | 00312345678906 | 14 digits, fixed |
| (17) | Expiration date | 280531 | YYMMDD, fixed |
| (10) | Lot number | A12345 | Up to 20 characters |
| (21) | Serial number | 100000000001 | Up to 20 characters |
Fixed-length fields need nothing after them. After a variable-length field such as the lot, the symbol needs a separator (FNC1) before the next field. LabelInn places it from the AI catalog, so the order of the rows is yours to choose and the code stays valid.
02 / PRODUCT IDENTIFIER
Print it from your own data
Bind each row. The GTIN can be fixed on the design; lot, expiry and serial come from an Excel or CSV column, a database query or an API. Short GTINs are padded with leading zeros, dates and digits are checked as you bind.
Add the human-readable lines as text fields bound to the same columns, so the text and the code can never disagree.
Preview row by row and print. Every printed label is written to the print history with its data, the printer, the user and the time.
Take the serial numbers from the system that issues them. LabelInn has counters, but for DSCSA the serial has to match what your trading partners receive in the transaction data, so the source of truth should be the system that sends it.
03 / GS1 DATAMATRIX
The check we ran
We built the sample code above from the four AI rows through the same path the print engine uses, drew it, and decoded the image with an independent decoder (ZXing). It returned the symbology identifier ]d2, which means GS1 DataMatrix, and the exact element string 01003123456789061728053110A12345<GS>21100000000001, with the separator after the lot. That proves the encoding. It does not replace grading a printed label on your line with your own verifier.
04 / SERIALIZATION
Where it stops
- LabelInn prints and records the identifier. It does not exchange transaction information (EPCIS) with your trading partners, answer verification requests (VRS) or keep case-to-package aggregation. Those belong to your serialization or DSCSA data system.
- No NDCs or GTINs. The NDC comes from FDA listing, the GTIN from GS1 US.
- Not legal advice. You remain responsible for meeting the Act.
05 / DSCSA
Which plan
Binding Excel, CSV and database columns and the full print history are in Starter ($7.99/mo). The audit log with every printed value exportable as CSV, and e-signatures for FDA 21 CFR Part 11, are in Enterprise. Signing up starts a 14-day trial with everything on.
ANY PRINTER
Design it, bind your data, print on the printer you already own.
Zebra, TSC, Toshiba, Epson and more — over USB, network or Bluetooth, with no driver to install.

PRICING
Start free. Pay when it earns its keep.
QUESTIONS / FAQ
Frequently asked questions
What has to be on a DSCSA label?
The product identifier: NDC, serial number, lot number and expiration date, both as human-readable text and in a machine-readable code. On a package the code is a 2D DataMatrix; on a homogeneous case it can be a linear barcode or a DataMatrix.
Is the NDC encoded directly?
No. The code carries a GTIN, and the GTIN contains the NDC. The GTIN goes in AI (01), next to the expiry (17), lot (10) and serial (21).
Can LabelInn print DSCSA labels from our ERP data?
Yes. Each value can come from an Excel or CSV export, a database query or an API, and each printed label is recorded with its data. The serial numbers should come from the system that also sends them to your trading partners.
Does LabelInn send EPCIS data or answer verification requests?
No. LabelInn prints the identifier and records what it printed. Transaction data exchange, verification and aggregation are done by your DSCSA data system.
When do small dispensers have to comply?
FDA extended the exemption for small dispensers (25 or fewer full-time pharmacists and technicians) to 27 November 2027. Manufacturers and repackagers had until 27 May 2025.
KEEP GOING
Related
PRINTING REGULATED CODES?
Tell us the rule, the code and the printer.
Send us which rule applies, what you label, how many labels a day and where the data comes from. A person replies within 24 hours with what LabelInn covers today and what it does not.