Add a spec sheet PDF to Shopify product pages
Shopify can hold a PDF and link it to a product without any app: a file in Content → Files, a File metafield on the product, and a few lines of Liquid in the theme editor. This page walks through that, where it gets slow, and how Specsmith does the same job from your product data.
Checked against Shopify's Help Center and developer documentation, and the code of Shopify's Dawn and Horizon themes, on 19 October 2026.
The manual way
1. Make the PDF
Lay out one spec sheet per product in whatever app you design in, and export it as a PDF. Shopify's Files page takes files other than images and videos up to 20 MB.
2. Add a File metafield for products
A metafield gives every product a place to hold its own PDF. Open any product in Shopify admin, and in its Metafields section click Add definition (definitions can also be made under Settings → Metafields and metaobjects). Name it, for example "Spec sheet", click Select type, choose File, and click Save. Shopify fills in the namespace and key from the name, such as custom.spec_sheet; note it for step 4. Shopify's list of metafield types gives "a PDF file for assembly instructions" as its example of a File metafield.
3. Attach the PDF to each product
On the product, in Metafields, click the Spec sheet field, then Select file. Pick a PDF you uploaded under Content → Files (Upload files), or click Upload file to add it from your computer, then Done and Save (Shopify's steps). Repeat for every product.
4. Show a download link on the product page
A theme's own button can't take its link from a File metafield: in Shopify's dynamic sources table, a File metafield connects only to image and video settings. So the link takes a few lines of Liquid. Dawn and Horizon, Shopify's free themes, both include a Custom Liquid block for that:
- In Shopify admin, go to Online Store and click Edit theme.
- Switch the editor to your product template, and in the section where you want the link (the product information section, for example) click Add block, then Custom Liquid.
- Paste this into its Liquid code box, changing
custom.spec_sheetif your metafield's namespace and key differ:
{%- assign sheet = product.metafields.custom.spec_sheet.value -%}
{%- if sheet.url -%}
<a href="{{ sheet.url }}" target="_blank" rel="noopener">Download spec sheet (PDF)</a>
{%- endif -%}
- Move the block where you want it, and click Save.
The metafield's value is a file object whose url is the file's address on Shopify's CDN (Liquid reference). Products without a PDF show nothing. Add classes from your theme to the <a> if you want it to look like a button.
If your theme has a button block with a link setting, there's a way without Liquid: a metafield of type URL, holding the link you copy with the Link button in Content → Files, can be connected to that setting as a dynamic source. The same table allows only URL metafields there.
Themes differ. If yours has no Custom Liquid block, check its documentation; adding one means editing the theme's code.
Where the manual way gets slow
- Every PDF is made by hand. One layout per product, each kept in step with your branding and contact details.
- Sheets go stale without telling you. Change a price, a dimension or a variant and the product page shows the new data, while the PDF still shows the old. Nothing in Shopify connects the file's contents to the product.
- An update is the whole process again: a new PDF, uploaded and picked on the product, and the old one deleted from Files if you don't want it piling up.
- The link is theme code. The Custom Liquid block sits in one product template; products on another template need their own.
For a handful of products that rarely change, the manual way works well. It's the catalog that changes every month that gets slow.
How Specsmith does it
Specsmith uses the same parts Shopify gives you, a PDF in your store's Files and a File metafield on each product, and makes the PDFs from the product data. The screens are in the app's menu in Shopify admin:
| Screen | What you do there |
|---|---|
| Design | Pick a template (Classic, Showcase or Compact), the Paper size (A4 or US Letter), an Accent colour, a logo with Upload a logo, and the Header text and Footer text. Show a sample sheet draws a made-up product with the form as it stands. Then Save. |
| Fields | Choose the spec table's rows: vendor, product type, SKU, barcode, weight, price, tags, and any product or variant metafield your shop has a definition for. Each row gets a Label on the sheet and a Position. Turn the variant table and the description on or off, and Save. |
| Preview | Search for a product and see its sheet in the page. Publish this product publishes that one sheet. |
| Publish | Under Products, choose All products or one collection, then Create spec sheets. Your browser draws each PDF, saves it to your store's Files as <handle>-spec-sheet.pdf, and the app links it to the product. Draft and archived products are skipped. Keep the page open while it runs; if you leave, you can resume. |
| Home | The three steps and how many products have a sheet. Add it in the theme editor opens the theme editor to add the button. |
The first time you open Specsmith, Home makes sheets for up to 10 products by itself, so the button has something to show straight away.
The button
In the theme editor, add the Spec sheet download block from the app blocks to your product page, and save. Its settings are Style (Button or Link), Label ("Download spec sheet (PDF)" unless you change it) and Open in a new tab. Shoppers see it only on products with a published sheet. The link points straight at the PDF in your Files, so downloads keep working even if the app is down. App blocks need a theme that supports them (Online Store 2.0 themes do); no Liquid to write.
Keeping sheets current
When you edit a product, Specsmith checks whether anything printed on its sheet changed, and if so Home shows the sheet as out of date. Update them redraws the marked sheets, and deletes each old PDF once the product links to its new one. Metafield and weight changes don't reach the app by themselves, so updating also checks every sheet against its product and redraws the ones that differ. Changing the design or the fields marks every older sheet out of date.
What it doesn't do
- No templates of your own in HTML or Liquid: three templates, with your colour, logo, texts and fields.
- One sheet per product, in one language. No catalogs or line sheets with many products.
- Text prints in Latin, Greek and Cyrillic letters; Chinese, Japanese, Korean, Arabic and Hebrew aren't supported.
- Sheets aren't redrawn on the server. You start each update, and the Publish page stays open while it runs.
Sample sheets
Drawn by Specsmith's own renderer for a made-up shop, one per template. The shop and products are invented and the pictures are drawings; the layout, tables, description, header and footer are what the app makes from product fields and metafields.
- Oak side table: Classic template, A4, 1 page, 93 KB PDF.
- LED pendant light: Showcase template, A4, 2 pages with six variants, 87 KB PDF.
- Bench grinder: Compact template, US Letter, 1 page, 113 KB PDF.
Try it
Specsmith is free for sheets on up to 10 products; Pro covers any number (pricing). The docs cover every screen, what prints on a sheet, and the app's permissions.