For printers

Publish your own prices for Layout Foundry

If you run a DTF printer, you can publish your prices in one small JSON file on your own website. We read it once a week and update your listing from it. It's free, and there's nothing to sign up for.

What the feed changes

Every listing shows its prices, the date we checked them and a link to the source. With a valid feed, the date becomes the day of our weekly check, the source link points to your feed, and your listing says the prices come from you.

Your feed can update your film width, price list, delivery charge, VAT basis, turnaround, file types and recommended spacing. Your name and website stay as listed.

The verified label

When your prices come from your own feed, your listing and your rows in our price lists show the label “Verified printer”, with the date we last read your feed. It’s free, and there’s nothing to sign up for or fill in.

You get the label when all of these are true:

  • Your prices come from a valid feed.
  • The feed shows the listing is yours, in one of three ways:
    • the file is on the website in your listing, on the same domain;
    • our Gang Sheets app serves it on your Shopify shop's own web address;
    • a DNS record on your domain names the feed's address.
    Only someone who runs your website, your shop or your domain can do any of these.
  • Our last weekly check read the feed, no more than 14 days ago.

We check the file, the app's feed or the DNS record again every week.

The label says where the prices came from. Your place in a list still depends on the total price only.

To stop, remove the feed file from your website, or the DNS record from your domain. The label comes off at our next weekly check, and we check your listing against your price page again.

How printers are ranked

Printers are ranked by the total for the buyer's own layout, including delivery and VAT where they apply, cheapest first, with ties sorted by name. A feed keeps your prices current. It doesn't change your place, and no place can be bought.

If we can't confirm a price for 45 days, we hide it and ask buyers to check with you. After 90 days you're left out of the ranking. A weekly feed keeps your date current.

We take no payments, commission or sponsorship from printers.

Make your feed file

Fill in your prices and we'll write the file for you to download. Once it's on your website, your prices come from you, confirmed each week, and your listing gets the verified label. Your place in our price lists still depends on the total price only.

Your listing
As it appears in your listing, starting with https://. We use it to show where the file goes.
Do your prices include VAT?
Film and prices
In whole millimetres, from 400 mm to 700 mm.
In whole millimetres. 1 metre is 1000.
How many of those lengths a customer must buy at least.
Such as 11.00.
Delivery
Enter 0 if delivery is free.
Leave blank if no order gets free delivery.
More details (optional)Leave any of these blank to keep what your listing shows now.
Such as Next working day. 200 characters at most.
Separated by commas, such as PNG, PDF. 20 at most.
In whole millimetres.
Only if you want our gang sheet builder on your own pages. One per line, up to 5, each https:// and a host with nothing after it, on your website or one of its subdomains.

We make the file on this device. Nothing you type is sent to us or saved.

Where to put the file

Host the file at https://your-website/.well-known/layoutfoundry.json, on the same host as the website in your listing. Serve it over HTTPS, ideally with the content type application/json.

If you use our Gang Sheets app on Shopify, you can turn on the price feed on the app's Settings page instead. The app serves the same feed at /apps/layout-foundry/gang-sheets/price-feed.json on your shop's own web address, and the weekly check asks that address when the file above is missing.

  • The file must be 64 KB or smaller.
  • It must answer within 10 seconds.
  • A redirect is followed only to another address on the same host. A redirect to a different host counts as no feed.
  • Your robots.txt must allow the address. The weekly check uses the user agent LayoutFoundryPriceWatch/1.0.

Some website builders can't serve a file at that address. Check your website platform. If yours can't, use a DNS record instead.

If your website can't host the file: a DNS record

Put your feed file on any web address that uses HTTPS. Then add one TXT record to your domain's DNS that names that address. You manage DNS where you bought the domain, or with your website platform if it runs the domain for you.

  • Name: _layoutfoundry. followed by the host of the website in your listing, without www. For https://www.example.co.uk that is _layoutfoundry.example.co.uk.
  • Value: layoutfoundry-feed= followed by the feed's full address, for example layoutfoundry-feed=https://files.example.net/layoutfoundry.json.
  • Use one record that names one address.
  • The address must start with https://, have no port, user name or password, and be at most 500 characters long.
  • The same file rules apply: 64 KB or smaller, an answer within 10 seconds, redirects only on the same host, and the robots.txt on that host must allow the address.

We read the record once a week, after the two addresses above. If either of them serves a feed, we use that one. If we can't find the record or read the file it names, the label comes off at that check.

The fields

All money is in whole pence or cents, and all lengths are in whole millimetres. So £9.50 is written as 950, and 1 metre as 1000.

  • format (required): Always "layoutfoundry-price-feed".
  • version (required): 2. Feeds written with 1 still work, without uvDtf.
  • currency (required): "GBP" for a UK printer, "USD" for a US printer. It must match your listing.
  • pricesIncludeVat (required): true or false. US printers use false, because US prices are shown before sales tax.
  • filmWidthMm (required): Printable film width in whole millimetres. UK listings accept 400 mm to 700 mm.
  • pricing (required): Your pricing rule. The three rules are described below.
  • delivery (required): flatPence is the delivery charge. freeOverPence is the order total that gets free delivery, or null if there is none.
  • turnaround (optional): Short text of 200 characters or fewer, such as "Next working day".
  • fileTypes (optional): Up to 20 accepted file types, such as "PNG" and "PDF".
  • recommendedSpacingMm (optional): The gap you advise between designs, in whole millimetres, or null.
  • uvDtf (optional): Your UV DTF gang sheet prices, if you sell them: filmWidthMm (150 mm to 800 mm), pricing and delivery, in the same form as above, and pricesIncludeVat only if it differs from your DTF prices.
  • ownSiteBuilder (optional): Turns on our gang sheet builder for your own website. Give origins, a list of 1 to 5 web addresses that may show it, each written as https:// and a host with nothing after it, on your listed website's host or one of its subdomains.

No other field is accepted. A feed with any other field is rejected.

The pricing rules

  • per_length: one price for each length unit. Give unitMm (the unit, such as 1000 for a metre), unitPricePence and minUnits (the smallest order, in units).
  • tiered_per_length: the unit price falls as the order grows. Give unitMm, minUnits and tiers, a list of fromUnits and unitPricePence. The first tier must start at or below minUnits, and each tier must start above the one before it.
  • fixed_sheets: set sheet sizes at set prices. Give sheets, a list of id, lengthMm and pricePence. Each id must be different.

An example feed

This feed charges £11.00 a metre, or £9.00 a metre from 10 metres, on 570 mm film. The prices include VAT. Delivery is £4.95, and free on orders over £75.00.

{
  "format": "layoutfoundry-price-feed",
  "version": 2,
  "currency": "GBP",
  "pricesIncludeVat": true,
  "filmWidthMm": 570,
  "pricing": {
    "type": "tiered_per_length",
    "unitMm": 1000,
    "minUnits": 1,
    "tiers": [
      {
        "fromUnits": 1,
        "unitPricePence": 1100
      },
      {
        "fromUnits": 10,
        "unitPricePence": 900
      }
    ]
  },
  "delivery": {
    "flatPence": 495,
    "freeOverPence": 7500
  },
  "turnaround": "Next working day",
  "fileTypes": [
    "PNG",
    "PDF"
  ],
  "recommendedSpacingMm": 5,
  "uvDtf": {
    "filmWidthMm": 300,
    "pricing": {
      "type": "per_length",
      "unitMm": 100,
      "unitPricePence": 450,
      "minUnits": 5
    },
    "delivery": {
      "flatPence": 495,
      "freeOverPence": 7500
    }
  }
}

When a feed is rejected

The weekly check reads the file as data and runs nothing in it. A feed is rejected if it is not valid JSON, is larger than 64 KB, leaves out a required field, adds a field not listed here, uses a decimal where a whole number is needed, or gives a currency that does not match your listing.

A rejected feed is not used at all. Your listing keeps its previous prices and check date, and the problem is noted for review. Fix the file and the next weekly check reads it again.

Printers without a feed

A feed is optional. Each week we also check every listing against the printer's own price page. If a page has changed, we review it by hand and apply corrections within 7 days.

An email address for corrections is coming soon. Until then, a feed is the quickest way to correct your listing.

Our gang sheet builder on your own website

If you have the verified label, you can put our gang sheet builder on a page of your own website, whatever it's built with. Your customers add their designs, check the layout and approve the sheet. We store the print file, and your page gets a download link to attach to the order. It's free, with no account, password or key.

To turn it on, add this block to your feed, with the addresses of the pages that will show the builder:

{
  "ownSiteBuilder": {
    "origins": [
      "https://www.your-website.co.uk"
    ]
  }
}
  • Each address is https:// and a host, with no path: your listed website's host or one of its subdomains, such as https://shop.your-website.co.uk.
  • We switch it on at our next weekly check of your feed, and off at the first check after you remove the block.
  • Your customers get the film width, recommended spacing and price rule from your feed, and a sheet length and quantity that follow your price rule.
  • Your listing then says “Has a gang sheet builder on its own site”. Your place in our price lists stays the same.

Then paste these two lines into your page, with your listing's name in place of your-listing. For where the lines go on Shopware, PrestaShop, Squarespace and other platforms, see the platform guide.

The two lines appear here once the builder service is live. The block is accepted in your feed now.

When a customer approves a sheet, your page gets an lf-sheet-ready event with a reference, the download link and the date the link stops working. This order form copies them into hidden fields, and the order button waits until a sheet is ready:

<form action="/your-order-form" method="post">
  <input type="hidden" name="gang_sheet_reference">
  <input type="hidden" name="gang_sheet_link">
  <input type="hidden" name="gang_sheet_expires">
  <button type="submit" disabled>Order this sheet</button>
</form>

<script>
  const builder = document.querySelector("layout-foundry-printer-builder");
  const form = document.querySelector("form");
  builder.addEventListener("lf-sheet-ready", (event) => {
    form.elements.gang_sheet_reference.value = event.detail.reference;
    form.elements.gang_sheet_link.value = event.detail.downloadUrl;
    form.elements.gang_sheet_expires.value = event.detail.expiresAt;
    form.querySelector("button").disabled = false;
  });
  builder.addEventListener("lf-sheet-reset", () => {
    form.querySelector("button").disabled = true;
  });
</script>

If your site sets a Content-Security-Policy, allow the builder's address in script-src, connect-src and worker-src, and blob: in worker-src and img-src.

What we store, and for how long

  • The print files and a small preview of each approved sheet, with its size, the number of designs and the time it was saved. We get no names, email addresses or postal addresses.
  • Everything is deleted automatically 14 days after upload, and the download link stops working then.
  • Anyone with the link can download the files until then, so share it only with the people who print the order.
  • Sheets can be saved only from the addresses in your feed. To keep the service fair, we limit how many sheets one visitor and one printer can save in an hour, and how large each file can be.

Sell gang sheets on your Shopify store

Our Gang Sheets app puts a gang sheet builder on your own Shopify product page. Your customers lay out their designs, and the print file arrives with each order.

See the Gang Sheets app