What you'll need
- Access to your product page templates (or your headless CMS).
- Your current product master data — cannabinoid percentages, terpene results, batch and lot numbers, expiry dates, COA URLs.
- Your Health Canada license number.
- Either a developer or a marketing technologist who has shipped schema.org markup before. (If you have a Shopify or WooCommerce site, the dev who installed your SEO plugin can do this.)
Adoption in five steps
- Pick your delivery format. Most producers should start with JSON-LD embedded on every product page — it improves SEO and is read by every modern aggregator. If you have a partner who consumes feeds, also publish an XML feed at a stable URL like
/feeds/products.xml. - Copy the producer template. Start from the ready-made template in the COSTA repository. It includes JSON-LD blocks for dried flower, pre-rolls, vape cartridges, edibles, and concentrates. Replace the placeholders (
YOUR_STRAIN_NAME,THC_PERCENTAGE, etc.) with your real values. - Embed on your product pages. Place the JSON-LD inside a
<script type="application/ld+json">tag in the<head>of each product page. If you run a templated storefront, populate the fields from your existing product database — do this once in the template, not once per SKU. - Validate before deploying. Run the JSON-LD through a validator (Google's Rich Results Test or the JSON-LD Playground). Cross-check that THC, CBD, and terpene percentages match your actual lab COA — structured data wrong is worse than structured data missing.
- Tell the alliance. Once your feed is live, email hello@gocosta.org with the URL. We list adopters publicly and notify aggregators that a new producer feed is available.
A minimal worked example
Here is what a single dried flower product looks like in JSON-LD, with every required field populated. Drop this into your product page's <head>:
<script type="application/ld+json">
{
"@context": "https://schema.org/",
"@type": "Product",
"name": "OG Kush Dried Flower",
"brand": { "@type": "Brand", "name": "Heritage Cannabis Co." },
"sku": "HC-OGK-FLOWER-3.5G",
"url": "https://heritagecannabisinc.ca/products/og-kush-35g",
"image": ["https://heritagecannabisinc.ca/images/og-kush.jpg"],
"description": "Premium OG Kush dried flower with a citrus and pine profile.",
"offers": {
"@type": "Offer",
"price": "12.99",
"priceCurrency": "CAD",
"availability": "https://schema.org/InStock"
},
"cannabis": {
"@type": "CannabisProduct",
"cannabinoidProfile": { "thcPercent": 18.5, "cbdPercent": 0.1 },
"strain": { "name": "OG Kush", "type": "Hybrid" },
"terpeneProfile": { "dominant": ["Myrcene", "Limonene", "Caryophyllene"] },
"productForm": "Dried Flower",
"packageSize": "3.5g",
"classOfCannabis": "Cannabis (dried)",
"healthCanadaLicenseNum": "LC0001234567",
"expiryDate": "2026-06-15",
"batchLotNum": "HCC-2025-0847",
"testing": {
"testedForContaminants": true,
"testResultsUrl": "https://heritagecannabisinc.ca/coa/og-kush-batch-0847.pdf"
},
"regulatoryDisclosure": {
"cannabisAccessRequirement": "RecreationalAndMedical",
"consumptionWarning": "Keep out of reach of children. For use by adults 19+."
}
}
}
</script>See the full specification for every field, including the XML representation and optional fields like detailed terpene breakdowns and aggregate ratings.
Data discipline matters
Structured data is a contract. If your JSON-LD says
thcPercent: 22 and your COA says 18.5, you have signed a public contract that says 22 — and you've made it machine-readable for every regulator and aggregator. Wire your COSTA payload directly to the same source of truth your lab results live in, not to your marketing copy.FAQ
Do we need to remove our existing data feeds?
No. COSTA is additive. Keep providing whatever formats your existing partners require. Add COSTA on top so any new partner can consume your catalog without a custom integration.
Do we need permission to use the standard?
No. The spec is published under CC BY 4.0. Use it, fork it, extend it. Attribution is appreciated, not required for commercial use.
What if a field in the spec doesn't apply to our product?
Required fields must be present. Optional fields can be omitted entirely — do not include the key with an empty value. If you need a field that doesn't exist, you can extend the schema under your own namespace (e.g., "myproducer:harvestDate") without breaking interoperability.
How often do we need to update?
Update whenever the underlying data changes — new batch, new price, stock change, new COA. JSON-LD on a templated product page is updated automatically whenever your product database is. An XML feed should be regenerated at least daily.
Does this conflict with our provincial reporting?
No. Provincial wholesale boards have their own intake formats, and COSTA does not replace them. COSTA covers the consumer-facing product page and the public-web representation of your catalog — not what you file with the OCS, AGLC, or SQDC.
What does it cost?
Nothing. There are no fees, no API keys, no membership dues. You publish on your own domain. Your only cost is the development time to add the JSON-LD or XML to your site.
Who validates that our data is honest?
COSTA does not audit producers. The structured data is public, machine-readable, and easy to cross-reference against the COA URL you embedded. The transparency itself is the enforcement mechanism — regulators, journalists, and aggregators can spot inconsistencies trivially.
Ready to publish?
Email hello@gocosta.org once your feed is live. We will list you in the public adopter directory and notify the marketplaces and aggregators that read COSTA feeds.