Skip to content

Reading a certificate of analysis: what a COA actually shows

Every field on a COA, explained: the 0.877 Total THC formula, what ND actually means, and the concrete signs a result has been altered or lab-shopped.

This depends on where you live. Plant limits, licensing, permitted products and testing rules differ by country and change often. Check the law section before acting on it.

On this page

Most people reading a certificate of analysis go straight to one number: the THC percentage on the front page. That number is a calculation, not a direct measurement, and a report that shows it without the two figures behind it cannot be checked at all.

A COA is what a lab hands back after testing a cannabis sample: a snapshot of chemical composition and contaminant levels, tied to one sample, one method and one date. Whether you are a home grower who paid for a private potency test, a club member checking a distributed batch, or a commercial QA lead reviewing a supplier's paperwork, the same reading skills apply: know which fields are measurements, which are calculations, and which are pass/fail decisions against a limit someone else set.

What every field on the page actually means

Read the metadata block before the numbers. It tells you whether the result even applies to what you are holding.

FieldWhat it tells youWhy it matters
Sample IDA unique code for this specific sample pulled for testingLinks the result to one physical sample, not the whole batch by assumption
Batch/lot numberThe production batch the sample was drawn fromMust match the number on the packaging or the release record; a mismatch is a red flag (see below)
Collected/sampling dateWhen the sample was pulled from the batchSeparate from testing: a batch can sit for weeks between sampling and lab receipt
Received dateWhen the lab logged the sample inConfirms chain of custody; a long gap between collection and receipt invites questions about what happened in between
Tested dateWhen the analysis actually ranSome panels have to run before release, not after
Reported dateWhen the certificate was issuedThe date "as of" for every number on the page
Lab name and accreditation numberThe testing body and its formal competence certificateA logo is not proof; the number is checkable against the accreditor's own published records [1][2]
Accreditation scopeThe specific methods and analytes the lab is certified to runA lab accredited for cannabinoids is not automatically accredited for pesticides or heavy metals
Method columnThe analytical technique used per analyte, e.g. HPLC-DAD, GC-FID, ICP-MSNo method column means no way to judge what the number can and cannot detect
Blank or missing rowAn analyte the lab did not test forNot the same as a pass. A blank row is an absence of information, not a clean result

This is close to what regulators tell consumers to look for directly [3], and it follows the analyte and terminology conventions proposed in a 2020 peer-reviewed review written to help standardise USP cannabis quality attributes [4].

The arithmetic behind the headline number

Cannabinoids are made and stored in the plant mostly as acids: tetrahydrocannabinolic acid (THCA), not Δ9-THC itself. Heat converts THCA to Δ9-THC by knocking off a CO₂ group, which is why a cannabinoid panel reports THCA and Δ9-THC as two separate lines and calculates Total THC from both:

Total THC = (THCA × 0.877) + Δ9-THC

The 0.877 factor is not a rounding convention. It is the molecular-weight ratio of THC (314.5 g/mol) to THCA (358.5 g/mol): when THCA loses CO₂ on decarboxylation, about 12.3% of its mass leaves as gas, so only 87.7% of the acid's mass converts to the neutral cannabinoid [5]. The same factor appears directly in regulatory text: Malta's cannabis-association testing standard defines Total THC as exactly THCA × 0.877 plus Δ9-THC, reported on a dry-weight basis [6].

  • Decarboxylation mass-loss constant0.877THC molecular weight ÷ THCA molecular weight
  • Worked example: THCA21.4%dry weight
  • Worked example: Δ9-THC0.5%dry weight
  • Worked example: Total THC19.3%(21.4 × 0.877) + 0.5

A certificate that prints only "Total THC 19.3%" with no THCA or Δ9-THC line cannot be checked by arithmetic, and it cannot be checked for internal consistency either: there is no way to confirm the lab didn't just write down a number. Ask for the panel that shows the split (see potency testing: HPLC vs GC for why the method used to produce that split matters too), not the headline figure alone.

ND doesn't mean zero

Every analytical method has a floor. Below a certain concentration, the method cannot tell a real signal from background noise; a little above that, it can detect the analyte but not measure it precisely enough to report a number.

TermWhat it meansWhat it does not mean
Limit of detection (LOD)The smallest amount the method can reliably distinguish from noiseProof the analyte is completely absent below this point
Limit of quantitation (LOQ)The smallest amount the method can measure with acceptable accuracy and precision; always higher than the LODThe point at which the analyte itself stops existing
ND, "not detected"The result fell below the lab's reported LOQ for that analyteZero. It means "present at an amount this method cannot reliably report," which could be anything from none to just under the LOQ

A result printed as ND with no LOQ number next to it is not fully checkable: you cannot tell whether the method's floor was tight enough to matter for your decision.

Two different kinds of number can sit in a contaminant row, and mixing them up is the most common misreading of a COA. A reported value is a plain measurement with no pass/fail attached, which is how most cannabinoid and terpene lines work. An action limit is a ceiling set by a regulator or standard, and the lab compares its reported value against that ceiling to produce a Pass or Fail [3]. Heavy metals, microbial counts and mycotoxins almost always carry action limits; potency and most terpenes usually do not.

The relationship between LOQ and action limit matters more than either number alone. Oregon's cannabis-testing rule requires a lab's LOQ for a regulated analyte to sit at or below half the action limit for that analyte [7]. A method whose floor sits close to or above the pass/fail line cannot reliably tell a marginal pass from a marginal fail, whatever the report says.

How a real potency number gets inflated

A THCA/Δ9-THC split that adds up correctly still describes only the sample the lab received. A few practices, none of which show up anywhere on the certificate itself, can push a batch's reported potency above what a buyer or member actually receives.

  • Testing before the batch reaches its target moisture. Cannabinoid content is reported on a dry-weight basis, so the moisture correction has to be right. Material pulled and tested early in drying, rather than once it has reached the batch's stated moisture range, is a recurring source of disputed results; growers and lab-watchers flag it as a concern, and it has not been settled by a controlled trial. See water activity and moisture content for the correction itself.
  • Sampling only dense, trichome-rich flower and leaving out leaf and lower-canopy material the batch actually contains. Leaf tissue carries noticeably less resin than calyx, so a sample drawn only from the best-looking colas reads higher than a sample reflecting the whole batch, by plain sampling bias rather than any error in the lab.
  • Reporting the highest sub-lot in a batch as if it represented the batch, instead of a pooled, representative sample. Sampling flower for lab testing covers the sub-sampling method that avoids this.

Rounding compounds all three. A report that rounds Total THC to one decimal place, or further, can nudge a 19.3% result toward 20%: small on paper, but it is a claim of precision the underlying method may not support unless the lab states its measurement uncertainty alongside the number.

None of this touches the lab's arithmetic. It changes what gets put in front of the lab in the first place, which is why the sampling procedure on a COA, or its absence, matters as much as the panel results.

One COA, line by line

Annotated specimen certificate of analysis, six zonesA mock one-page certificate of analysis from a placeholder lab, stamped Specimen, with six numbered zones. Zone 1, identity: Sample ID S-2026-04471, Batch/Lot No. LOT-0231-C. Zone 2, the date chain: Collected 2 March 2026, Received 6 March, Tested 9 March, Reported 11 March. Zone 3: Example Analytical Labs, accredited to ISO/IEC 17025 by Example Accreditation Body, certificate number XXXX-XX (a placeholder), next to a plain seal outline; the scope lists cannabinoid potency, terpenes, microbiological contaminants, heavy metals and mycotoxins. Zone 4: the cannabinoid panel by HPLC-DAD in percent dry weight, with Result and LOQ columns: THCA 21.4, delta-9-THC 0.50, Total THC (calculated) 19.3, CBDA not detected, CBG 0.31, CBN 0.04, CBC not detected, each LOQ 0.02. A margin note, joined to the THCA, delta-9-THC and Total THC rows by three leader lines, works Total THC = THCA × 0.877 + delta-9-THC = 21.4 × 0.877 + 0.50 = 19.3 percent. Below it the terpene panel by GC-FID has Result and LOQ columns and no Limit column: beta-myrcene 0.42, D-limonene 0.18, beta-caryophyllene 0.15, alpha-pinene not detected, each LOQ 0.01. Zone 5, the contaminant panel, has Test, Reported, Limit and Result columns: total aerobic microbial count 340 against a limit of 2,000 cfu per gram; total yeast and mould count not detected against 1,000; lead 0.08 against 0.5 micrograms per gram; total aflatoxins not detected against 0.020. Every result reads Pass in plain text. Zone 6, the sign-off: authorised by A. Example, signed and dated 11 March 2026.Certificate of AnalysisSPECIMENSample IDS-2026-04471Batch/Lot No.LOT-0231-CCollected2026-03-02Received2026-03-06Tested2026-03-09Reported2026-03-11Example Analytical Labs00 Example Street, ExampletownISO/IEC 17025 — Cert. No. XXXX-XXAccredited by Example Accreditation BodyScopeCannabinoid potency, Terpenes, Microbiological contaminants,Heavy metals, MycotoxinsCANNABINOIDSMethod: HPLC-DAD · % dry weightAnalyteResultLOQTHCA21.40.02Δ9-THC0.500.02Total THC (calculated)19.3–CBDAND0.02CBG0.310.02CBN0.040.02CBCND0.02Total THC =(THCA × 0.877) + Δ9-THC= (21.4 × 0.877) + 0.50= 19.3 %TERPENESMethod: GC-FID · % dry weightTerpeneResultLOQβ-Myrcene0.420.01D-Limonene0.180.01β-Caryophyllene0.150.01α-PineneND0.01CONTAMINANTSMethod: plate count · ICP-MS · ELISATestReportedLimitResultTotal aerobic microbial count340 cfu/g2,000 cfu/gPassTotal yeast and mould countND1,000 cfu/gPassLead (Pb)0.08 µg/g0.5 µg/gPassTotal aflatoxinsND0.020 µg/gPassAuthorised byA. ExampleDate2026-03-11123456Annotated specimen certificate of analysis, six zonesA mock one-page certificate of analysis from a placeholder lab, stamped Specimen, with six numbered zones. Zone 1, identity: Sample ID S-2026-04471, Batch/Lot No. LOT-0231-C. Zone 2, the date chain: Collected 2 March 2026, Received 6 March, Tested 9 March, Reported 11 March. Zone 3: Example Analytical Labs, accredited to ISO/IEC 17025 by Example Accreditation Body, certificate number XXXX-XX (a placeholder), next to a plain seal outline; the scope lists cannabinoid potency, terpenes, microbiological contaminants, heavy metals and mycotoxins. Zone 4: the cannabinoid panel by HPLC-DAD in percent dry weight, with Result and LOQ columns: THCA 21.4, delta-9-THC 0.50, Total THC (calculated) 19.3, CBDA not detected, CBG 0.31, CBN 0.04, CBC not detected, each LOQ 0.02. A margin note, joined to the THCA, delta-9-THC and Total THC rows by three leader lines, works Total THC = THCA × 0.877 + delta-9-THC = 21.4 × 0.877 + 0.50 = 19.3 percent. Below it the terpene panel by GC-FID has Result and LOQ columns and no Limit column: beta-myrcene 0.42, D-limonene 0.18, beta-caryophyllene 0.15, alpha-pinene not detected, each LOQ 0.01. Zone 5, the contaminant panel, has Test, Reported, Limit and Result columns: total aerobic microbial count 340 against a limit of 2,000 cfu per gram; total yeast and mould count not detected against 1,000; lead 0.08 against 0.5 micrograms per gram; total aflatoxins not detected against 0.020. Every result reads Pass in plain text. Zone 6, the sign-off: authorised by A. Example, signed and dated 11 March 2026.Certificate of AnalysisSPECIMENSample IDS-2026-04471Batch/Lot No.LOT-0231-CCollected2026-03-02Received2026-03-06Tested2026-03-09Reported2026-03-11Example Analytical Labs00 Example Street, ExampletownISO/IEC 17025 — Cert. No. XXXX-XXAccredited by Example Accreditation BodyScopeCannabinoid potency, Terpenes,Microbiological contaminants,Heavy metals, MycotoxinsCANNABINOIDSMethod: HPLC-DAD · % dry weightAnalyteResultLOQTHCA21.40.02Δ9-THC0.500.02Total THC (calculated)19.3–CBDAND0.02CBG0.310.02CBN0.040.02CBCND0.02Total THC =(THCA × 0.877) + Δ9-THC= (21.4 × 0.877) + 0.50= 19.3 %TERPENESMethod: GC-FID · % dry weightTerpeneResultLOQβ-Myrcene0.420.01D-Limonene0.180.01β-Caryophyllene0.150.01α-PineneND0.01CONTAMINANTSMethod: plate count · ICP-MS · ELISATestReportedLimitResultTotal aerobic microbial count340 cfu/g2,000 cfu/gPassTotal yeast and mould countND1,000 cfu/gPassLead (Pb)0.08 µg/g0.5 µg/gPassTotal aflatoxinsND0.020 µg/gPassAuthorised byA. ExampleDate2026-03-11123456

Six zones, six checks

  1. Identity

    Sample ID and Batch/Lot No. must match the packaging or the release record.

  2. Date chain

    Collected, Received, Tested, Reported, in that order. Here the sample took 4 days to reach the lab.

  3. Accreditation and scope

    Look the certificate number up with the accreditor, and check the scope covers every panel reported.

  4. Analyte panels

    Total THC is calculated from the two rows above it, not measured. Every ND carries an LOQ. No Limit column: these are measurements.

  5. Contaminant panel

    Pass is a comparison: read each Reported value against its Limit yourself.

  6. Sign-off

    The lab’s authorised signatory. The Qualified Person signs the batch release separately.

Illustrative worked example: the lab, sample, dates, accreditation number and signatory are fictional.Source: Malta ARUC Directive 1, Standard VII (v2.0, 5 July 2024), for the contaminant limits
Fig. 1A certificate of analysis has six zones worth checking independently: identity, chain of custody, accreditation, the analyte panels' arithmetic, contaminant limits and sign-off.Horus

Take a single realistic result and read it the way a release decision would. The contaminant limits below use Malta's ARUC testing standard as one real, cited example; see Malta: ARUC testing and release rules for the full rule set [6]. Every jurisdiction and association sets its own numbers, and the figures under Result and Reported here are an illustrative worked example, not a real lab's data.

Cannabinoid panel, HPLC-DAD, dry weight:

AnalyteResultLOQ
THCA21.4%0.02%
Δ9-THC0.50%0.02%
Total THC (calculated)19.3%–
CBDAND0.02%
CBG0.31%0.02%
CBN0.04%0.02%
CBCND0.02%

Terpene panel, GC-FID, dry weight:

TerpeneResultLOQ
β-Myrcene0.42%0.01%
D-Limonene0.18%0.01%
β-Caryophyllene0.15%0.01%
α-PineneND0.01%

Every terpene row carries a result and an LOQ, exactly like the cannabinoid panel, but there is no limit column: terpene content is a composition measurement, not a contaminant check, so nothing here can pass or fail. It describes the sample; it does not gate the release.

Contaminant panel, plate count for microbials, ICP-MS for metals, ELISA for mycotoxins:

TestReportedLimitResult
Total aerobic microbial count340 cfu/g2,000 cfu/g [6]Pass
Total yeast and mould countND1,000 cfu/g [6]Pass
Lead (Pb)0.08 µg/g0.5 µg/g [6]Pass
Total aflatoxinsND0.020 µg/g [6]Pass

Reading this line by line: the cannabinoid panel checks out because Total THC reconstructs from THCA and Δ9-THC using the 0.877 factor; the terpene panel carries the same LOQ discipline with no pass/fail line attached, because nothing regulates terpene content; every ND row across both panels carries an LOQ, so "not detected" means "below 0.01–0.02%," not "confirmed absent"; and every contaminant line shows a reported value next to the limit it was checked against, rather than a bare Pass with nothing to verify it against. A qualified person still has to sign the release decision itself: Malta's standard requires a named, qualified signatory to confirm the batch meets the stipulated requirements before distribution, separate from the lab's own report [6].

Signs the certificate doesn't add up

Before you act on a COA, check these

A single missing item is not automatically fraud (small labs sometimes run lean paperwork), but two or more together are reason enough to ask for a fresh, verifiable copy before acting on the result.

What the certificate cannot tell you

A COA measures chemical composition and contaminant levels against a stated method and a stated limit, full stop. It says nothing about effect, strength of high, or medical suitability, and any report that implies otherwise, a "quality score" or a "potency grade" layered on top of the measured percentage, is adding marketing to a measurement, not reporting one. Treat the numbers as exactly what they are: what was in this sample, on this date, measured this way.

Before you rely on a certificate for anything beyond your own curiosity, do three cheap checks: confirm Total THC reconstructs from the THCA and Δ9-THC lines, confirm every ND carries an LOQ, and confirm the accreditation number against the lab's own published scope, not just the PDF in front of you [1][2]. If a report resists any of the three, treat the headline percentage as unverified rather than as fact. See ISO 17025 accreditation checklist for the fuller version of that third check, and quality attributes of cannabis flower for what a COA never measures at all: appearance, aroma and foreign matter.