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.
- 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.
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.txtmust allow the address. The weekly check uses the user agentLayoutFoundryPriceWatch/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, withoutwww.Forhttps://www.example.co.ukthat is_layoutfoundry.example.co.uk. - Value:
layoutfoundry-feed=followed by the feed's full address, for examplelayoutfoundry-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.txton 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. GiveunitMm(the unit, such as 1000 for a metre),unitPricePenceandminUnits(the smallest order, in units).tiered_per_length: the unit price falls as the order grows. GiveunitMm,minUnitsandtiers, a list offromUnitsandunitPricePence. The first tier must start at or belowminUnits, and each tier must start above the one before it.fixed_sheets: set sheet sizes at set prices. Givesheets, a list ofid,lengthMmandpricePence. Eachidmust 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.
Link to your listing
You can link to your own listing from your website. Copy this link and change your-listing to the last part of your listing's address on our site.
<a href="https://layoutfoundry.com/dtf-printers/your-listing">Compare our DTF prices on Layout Foundry</a>
The link takes buyers to your listing, where they can compare your prices with other printers'. It isn't a badge or an endorsement, so please keep its words plain.
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 ashttps://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.