Print-on-demand cost data, free to use
Every price on this site in one JSON file: what each supplier charges to print and ship each product in the US, with the source and check time of every figure. No key or account, licensed CC BY 4.0.
One JSON file, no key
GET https://bestprintondemand.co/data.json
- Format
- JSON in UTF-8: one object whose
recordsarray holds one record per supplier offer, a product printed one way by one supplier. - Access
- A plain GET. No key, no account, and open to scripts on any site (CORS).
- Freshness
- Printful and Printify prices are re-checked in rotating hourly batches and Gelato's about every six hours; other suppliers' prices are checked by hand and dated. The file is cached for up to 15 minutes.
- License
- CC BY 4.0: reuse it anywhere, crediting BestPrintOnDemand and linking the page or source a figure came from.
Every supplier's landed total for one product, cheapest first:
curl -s https://bestprintondemand.co/data.json | jq '[.records[] | select(.product.slug == "unisex-tee" and .landedUsd != null) | {supplier: .supplier.name, landedUsd}] | sort_by(.landedUsd)'
What each record holds
The file repeats this list as fields. Around the records it states its license, how each automatic feed is checked (priceCoverage) and when the prices were last checked (dateModified).
product.keystring- Stable product identifier.
product.namestring- Product name as the site shows it.
product.slugstring- The product page's path segment.
product.categorystring- apparel, drinkware, accessories, wall-art or home.
product.urlURL- The product's page, with every supplier's cost side by side.
supplier.slugstring- Stable supplier identifier.
supplier.namestring- Supplier name.
variantstring- The exact variant the price is for, as its source names it.
blankModelstring or null- The blank model named in the priced variant (for example Bella+Canvas 3001); null when no single model is established.
fulfillmentstring- Print method: DTG, DTF, sublimation, embroidery, cut-sew and so on.
regionstring- Where the price delivers to (US).
currencystring- Always USD.
baseCostUsdnumber or null- The supplier's price for one item on its free plan, before shipping; null when no current price is published.
basePriceStatuspriced, unavailable or unverified- priced: a current price. unavailable: the source no longer lists a qualifying US price, so the previous one is withheld. unverified: no price has been confirmed.
shippingUsdnumber or null- First-item shipping to the US.
landedUsdnumber or null- baseCostUsd plus shippingUsd: one item delivered, before tax.
shippingEstimatedboolean- true when shippingUsd is an estimate (the median rate other suppliers publish for the same product or category), not the supplier's own rate.
planBaseCostUsdnumber or null- The supplier's own price for the same variant on its paid discount plan, read with the live price (today Printify Premium); null elsewhere.
priceBasisstring- How the base price was read, in words.
confidenceconfirmed, reported or unknown- confirmed: read from the supplier's own page, catalog or API. reported: a converted or starting price from another source. unknown: no price confirmed.
liveboolean- true when the base price comes from an automatic feed: Printful's or Printify's public catalog, or Gelato's quote API.
basePriceObservedAtdate- When the base price was observed: a timestamp for feed prices, a month (YYYY-MM) for prices checked by hand.
observedMonthdate- The same value as basePriceObservedAt, kept for older readers.
sourceUrlURL- The page or API response that states the base price.
shippingEvidence.kindoffer, category, estimate or unknown- Where shippingUsd comes from: the supplier's rate stated with this offer, its rate for the product type, an estimate, or none.
shippingEvidence.sourceUrlURL or null- The page that states the shipping rate.
shippingEvidence.observedAtdate or null- When the shipping rate was recorded.
shippingEvidence.notestring- What the shipping rate covers, in words.
A total is one item delivered in the US, before tax, marketplace fees and plan fees. How each figure is found and checked is on the methodology page.
Dated copies for analysis and citation
Snapshots
CSV copies of the file, published on a stated date. The JSON above is always the current version; cite a snapshot when your figures must stay reproducible.
Cite as
BestPrintOnDemand (2026). Print-on-demand supplier costs (US) [Data set]. Zenodo. https://doi.org/10.5281/zenodo.23102289
Look up costs from an assistant (MCP)
An assistant that supports remote MCP servers (Claude, ChatGPT and Cursor do) can call these tools itself. Add the address as a custom connector; there is no account or key. It is listed in the official MCP Registry as co.bestprintondemand/print-on-demand-costs.
https://bestprintondemand.co/mcp
Find print-on-demand products
find_products
Search the catalog of print-on-demand products (t-shirts, hoodies, mugs, posters, stickers, phone cases, tote bags and more, or a blank such as Bella+Canvas 3001). Returns each match's slug, its lowest listed US total and supplier, and its page.
querystring, required- Product type or blank, e.g. "hoodie", "11oz mug", "Bella+Canvas 3001".
limitinteger- Most results to return (default 10).
Get a product's costs by supplier
get_product_costs
Every supplier's listed US cost for one print-on-demand product: base price, first-item shipping and total, each with its source and date, cheapest first, plus the site's one-sentence answer on which supplier is cheapest like for like. Give sell_price (and optionally a sales channel) to get each supplier's profit after fees.
productstring, required- Product slug from find_products (e.g. "unisex-tee") or its name.
sell_pricenumber- Your sell price in USD, to compute profit per supplier.
channelstring- Sales channel whose fees to subtract: etsy, shopify-own, woocommerce, tiktok-shop, walmart, ebay or amazon-seller.
buyer_pays_shippingboolean- True when the buyer pays shipping on top of the sell price (default false: you cover shipping).
Compare two print-on-demand suppliers
compare_suppliers
Which of two suppliers (e.g. Printful and Printify) has the lower listed US total across the products both offer, matched on product, print method and blank, with the record by category and the largest gaps.
supplier_astring, required- A supplier name or slug, e.g. "Printful".
supplier_bstring, required- Another supplier, e.g. "Printify".
Read-only, at most 60 calls a minute from one address. Each answer links the page it comes from and every figure's source.
The data describes listed starting costs, not a quote for your order: sizes, colors, print areas and plans change the price. Confirm the final price on the supplier's own page before you sell.