Methodology · How we test
Methodology
Counted live from the certificate database when this page loaded. Every figure below is dated, because they all move.
This page documents how the numbers on TitrateLab are computed, including the places where our method is weaker than we would like. It exists so that nobody has to take a TitrateLab figure on faith. If a number in one of our articles does not match what you would derive from the pipeline described here, that is a bug, and we want to hear about it.
What this page covers
TitrateLab aggregates third-party certificates of analysis for research peptides and publishes what they say about the vendors selling them. We also track retail pricing and community discussion. Everything we publish comes out of the pipelines below.
The three counters at the top of this page are read live from the certificate database when the page loads. Figures inside the text are dated, because they move. Where you see a count in prose, it was true on 2026-07-25.
Two things this page is not. It is not a safety certification, and it is not medical advice. See the medical disclaimer, and what we claim and what we do not for the scope of every figure below.
Where the certificates come from
Every record in the corpus is a lab document about a specific batch. We do not run assays ourselves and we do not commission them. We collect certificates that labs, vendors, forums, and buyers have already published, then parse them into structured fields.
As of 2026-07-25 the corpus holds 62,194 published certificates, of which 50,540 carry a measured purity and 16,282 carry a measured quantity deviation. 61,193 of them (98%) carry a verification URL pointing back at the issuing lab’s own record, so the underlying document can be checked without trusting us.
| Source | Certificates | Most recent addition |
|---|---|---|
Freedom Diagnostics (freedomdiagnosticstesting.com) |
38,508 | 2026-07-04 |
| Janoshik Analytical public portal | 12,305 | 2026-07-25 |
| Finnrick panel reports | 8,944 | 2026-07-05 |
| Community-posted third-party certs | 1,339 | 2026-04-24 |
| Buyer submissions to TitrateLab | 457 | 2026-07-25 |
| glp1forum attachments | 320 | 2026-07-22 |
| Telegram vendor channels | 298 | 2026-07-16 |
| Discord image uploads | 23 | 2026-04-17 |
Freedom Diagnostics is a US lab that publishes one COA per accession as a public PDF. It is by a wide margin our largest source and supplies about two thirds of all purity measurements we hold. It is a bulk pipeline rather than a continuous feed, and it is gated so that a full re-pull is a deliberate operator action rather than a cron job. That is why its “most recent addition” date lags.
Janoshik Analytical is a Czech lab whose public verification portal many experienced buyers treat as the reference standard. This is our most consistently fresh feed and it ingests daily.
Finnrick runs rotating-panel testing against a pool of labs and publishes per-batch records with a 0 to 10 composite test score. Finnrick does not name the individual bench that ran each assay; it publishes them under its own coded lab identifiers, which we surface as “Finnrick (Lab A)” and so on. For those certificates we can tell you the panel operator but not the lab.
MESO-Rx is an index, not a source. Users post lab verification URLs in reply chains on the Analytical Lab Testing subforum, and we extract those URLs and pull the certificates from whichever lab portal they belong to. 1,463 of our Janoshik records were discovered this way. That crawl has not run since 2026-05-01.
A note on freshness. Two of our three largest sources have not produced a new record in about three weeks. Finnrick’s poller has run without error and returned zero new records on every run since 2026-07-05, which is consistent with a quiet upstream and also consistent with a scraper that has silently stopped matching. We cannot currently distinguish those two cases from the logs, and we would rather say so than let the corpus look fresher than it is.
How a certificate becomes a record
Reading the document. Freedom certificates carry a text layer about 88% of the time and are parsed directly. Everything else, including the Janoshik portal images and buyer-submitted photographs, goes through vision OCR. The model is Gemini 2.5 Flash. Extracted fields are cached against a hash of the source document so a re-run does not re-OCR the same image.
A second model, Claude Haiku 4.5, does a different and narrower job: deciding whether a submitted document is a certificate of analysis at all, and drafting record summaries. It does not extract the numbers.
Keeping the original. Janoshik purges images from older records unpredictably, so a certificate that was readable at ingest can become unverifiable upstream later. We cache source images locally to guard against that. Coverage is partial and we should be plain about it: of the Janoshik records that carry an image URL, we hold a local copy for about 3,300 of roughly 7,200. Records ingested before local caching existed are not retroactively covered, and anything already purged upstream is gone.
Resolving who made it. Certificates name manufacturers inconsistently. “JKL Peptides”, “JKL”, and “JKL Biotech” may be one supply chain or three. Vendor identity is resolved at write time by a layered cascade in scripts/coa/canonical_vendor.py, which tries, in order: the submitter’s declared vendor, exact name, known alias, normalized form, domain fragment, short code, source-channel routing, community co-mention evidence, and finally fuzzy matching. Each layer carries a confidence, and the layer that fired is stored on the record.
When no layer is confident enough, the resolver does not invent a vendor. It writes a proposal to an operator review queue instead. Automatic vendor creation is disabled in code and a continuous-integration test fails the build if any new code path tries to insert a manufacturer without going through review. As of today the queue holds 763 pending proposals, with 3,434 approved and 20 rejected.
The honest state of vendor identity: 4,579 distinct raw manufacturer strings currently resolve to 3,858 canonical entities. That is roughly a 10% consolidation. It is not the collapse we want, and the layer above it, mapping Western storefronts to the Chinese OEMs that actually manufacture the material, is not built. The table that would hold that mapping exists and is empty. Per-manufacturer figures on this site should therefore be read as per-identity, not per-factory, and some identities are the same factory under different names.
Of published certificates, 59,130 are bound to an identified vendor, 2,681 are still pending identification, and 383 have been marked unidentifiable.
What we measure
Purity is the assay percentage as the lab reported it, from HPLC or UHPLC.
Quantity deviation compares the measured amount in the vial against the labeled amount. Negative means underfilled.
Endotoxin is the lab’s reported status where one exists. 8,893 records carry one.
In spec is our headline pass criterion, and its definition matters more than most readers expect. A batch counts as in spec when purity is at or above 90% and the dose is no more than 10% under label. The dose test applies only where label data exists, so a vendor is never penalized for a lab that did not report a label comparison.
That test is one-sided by design and by consequence. Overfill is not counted as a failure. A batch filled at 150% of label still counts as in spec. Roughly a third of the batches we currently count as in spec are more than 10% over label, so our in-spec rate is more generous than a two-sided reading of “within 10%” would produce. If you want the stricter number, the underlying per-batch data is on each vendor page.
We report a batch as failing on purity only when the lab measured it that way. 269 certificates in the corpus returned 0% purity, meaning the sample did not contain the labeled peptide at all. 541 certificates show a batch 40% or more underfilled.
The Trust Grade
Each vendor profile carries a letter. Here is exactly how it is produced, and what it cannot tell you.
Components and weights
A composite score is assembled from six components, defined in scripts/coa/trust_stats.py:
| Component | Weight | What it measures |
|---|---|---|
| Purity | 30% | Assayed purity, adjusted for which peptides the vendor sells |
| Quantity accuracy | 25% | How close measured dose sits to labeled dose |
| Public verification | 15% | How many certificates are independently verifiable |
| Batch consistency | 12% | Spread across the vendor’s batches of the same compound |
| Endotoxin | 10% | Beta-Binomial posterior over pass and fail counts |
| Evidence weight | 8% | Effective sample size behind the above |
Recency and shrinkage
Certificates decay with a 180-day half-life, floored at 5%, so a two-year-old result still counts for something but not much. A certificate with no usable date is weighted at half.
Component scores are shrunk toward the population average using empirical Bayes. A vendor with two certificates does not get to look excellent on two lucky results; its score sits close to the corpus mean until evidence accumulates. This is deliberate, and it has a side effect worth stating: because low-evidence vendors are pulled toward the middle, only vendors with many certificates can move far from average. Measured across the live vendor set, the composite correlates more strongly with how many certificates we hold than with average purity. The score is substantially a measure of how much we know about a vendor.
The letter is graded on a curve
Letters are quantile-calibrated against the whole tracked vendor population, not against an absolute standard:
| Letter | Band |
|---|---|
| A+ | top 5% |
| A | 80th to 95th percentile |
| B+ | 65th to 80th |
| B | 45th to 65th |
| C | 20th to 45th |
| D | 5th to 20th |
| F | bottom 5% |
An A therefore means “better than 80% of tracked vendor identities”, not “meets a published quality bar”. If the whole market got worse, the letters would not move. The percentile population includes every tracked identity, while the letter is only displayed for vendors with at least three purity-carrying certificates, so the displayed distribution skews higher than the bands imply.
Critical failures cap the letter
A composite that rewards volume can let a high-volume vendor average away a serious failure. Buyers read the letter as a safety signal, so specific failures override the average. The score is left untouched and displayed as computed; only the letter is capped, and the reason is shown on the page.
- Fewer than three purity measurements shows no letter at all. The vendor is marked “Insufficient purity data” rather than given a grade we cannot stand behind.
- A single tail failure caps the letter at C. Triggers are a 0% purity result, a batch 40% or more underfilled, an endotoxin failure, or a batch-consistency flag suggesting commingled or cherry-picked batches.
- Serial failure floors the letter at F. That means five or more 0% purity certificates, or an independent-lab failure rate above 40%.
For the count-based triggers we use independent labs only (Finnrick and Janoshik), so a single noisy buyer submission cannot destroy a vendor’s grade.
Two caveats on the gate that we would rather disclose than have discovered. The commingling trigger is a proxy: it fires on purity spread across batches, from as little as five percentage points, so it can cap a vendor whose real problem is batch variance rather than deliberate cherry-picking. And the endotoxin trigger accepts any recorded failure regardless of how strong the evidence behind it is, including curator-asserted failures that our own red-flag logic deliberately excludes elsewhere. Both make the gate more aggressive than its description implies.
What the letter does not mean
It is not a guarantee about the vial you receive. It is a summary of documents about batches that were tested in the past, weighted toward vendors who have been tested often. A vendor with a good letter can still ship you a bad batch, and a vendor with no letter is unrated rather than unsafe.
The ranked leaderboard in the subscriber dashboard is a different number from the profile letter. It blends lab results with community sentiment and incident history. The profile letter uses lab data only.
A third scorer, a two-axis Bayesian estimator in scripts/chat/kb.py, backs the research chat when it is asked to compare vendors. It is not what ranks vendor pages, and figures it produces will not always agree with the letter.
Buyer-submitted certificates
Anyone can submit a certificate. Submissions go through automatic screening with no human moderation tier, a deliberate choice made on 2026-05-10 to keep the queue from silently stalling.
Documents are rejected outright for prompt injection or signs of forgery, and rejected as unreadable when OCR confidence is too low. Softer flags, including possible PII, a purity value that looks like an outlier, a perceptual-hash duplicate, an unknown vendor, or too many submissions for one vendor inside 24 hours, do not block publication. Those records publish with the flags attached so operator views can still see why a row was questioned.
Submitted records carry half the confidence weight of a lab-sourced record, floored at 0.05, because the chain of custody runs through a stranger rather than a lab portal.
To date: 1,001 submissions, 462 published, 539 rejected.
Price data
We track retail pricing separately from lab data. The pricelist corpus currently holds 14,141 vendor and product rows across 48 vendors, of which 2,938 are in stock. Prices are observed from vendor pricelists and storefronts rather than supplied by vendors for placement. Pricing never influences a Trust Grade.
Community signal
Alongside lab data we track how peptides are discussed, which is how we spot problems before a lab result exists. This layer informs research articles and the pulse feed. It does not feed the Trust Grade on vendor profiles.
Message volume across monitored Discord communities is large, in the low hundreds of millions of messages including archives. Two figures are more meaningful than the raw total: 113,262 messages have matched the peptide keyword filter, and a 5,191-message audit sample has been classified by Claude Haiku 4.5 for relevance, sentiment, and intent, with the model’s reasoning and confidence stored on every row.
In that audit sample the classifier disagreed with the keyword filter about 21% of the time, usually on ambiguous slang. Two honest limits on that number. The sample is the most recent several thousand messages rather than a random draw, and the classification runs have not been re-executed since 2026-05-11, so it describes the corpus as it looked then.
Guild coverage is smaller than it once was. Of roughly 1,465 communities the fleet has tracked at some point, 253 are currently marked active and 178 produced any message in the last seven days. Earlier versions of this page said the fleet “reaches 1,000+ servers”, which was true cumulatively and is not true in the present tense.
Forum coverage as of today: glp1forum is live with roughly 75,000 posts and ingesting daily. MESO-Rx holds about 9,700 posts and has not ingested since 2026-05-01. We do not ingest Reddit.
Discord anonymization
Discord-sourced authorship and server names are anonymized before anything is published, including for paying subscribers. Author handles are replaced with a one-way hash and servers are labeled generically. This is enforced in the build that produces the published files rather than offered as a setting, and there is no operator switch that turns it off.
Forum attribution works differently. glp1forum authorship is unlocked for subscribers, because that forum is already publicly indexed and attribution there re-publishes something that is already attributable. Discord is not, so the asymmetry is deliberate.
One gap we will state rather than let you assume otherwise: channel names are not currently covered by that anonymization and can appear in published pulse data. That is a defect, not a policy, and it is being fixed.
Independence and funding
Vendor letter grades are computed from lab certificate data by the formula above. We take no money from any vendor for scoring, ranking, or placement. There is no sponsored slot and no affiliate link on a graded surface.
Revenue is Pro subscriptions, currently $12 a month or $33 for lifetime access, plus a margin on customer orders we route. That margin is built into displayed catalog prices. No subscription and no order volume moves any vendor’s score.
Limits, biases, and open problems
The gaps tell you where our conclusions cannot reach.
Temporal skew. Certificate dates span 2017 to today, but 82% of the corpus was tested in the last twelve months. Sparse early years should not be used for year-over-year claims without checking the sample size, and we footnote those figures in articles when we make them.
The OEM graph is missing. Described above. Per-identity figures are not per-factory figures.
Source concentration. Two thirds of our purity data comes from one lab. If Freedom Diagnostics has a systematic bias in method or in which vendors submit to it, that bias is in most of our aggregates.
Submission self-selection. Vendors and buyers choose what to send to a lab and what to publish afterward. A published certificate is not a random sample of what a vendor ships, and no statistical treatment on our end fixes that.
Lab disagreement is unresolved. On comparable peptides, Janoshik has historically reported quantity readings heavier than aggregator-panel results. Competing explanations include real methodological differences in what mass gets counted, self-selection in who submits where, and panel methods that under-detect over-labeling. We have not resolved it. Quantity figures are labeled with their source and we do not treat the two pipelines as interchangeable.
Chinese-language sources. Much of the supply chain we track originates from Chinese OEMs. We do not ingest Chinese-language forums or seller platforms. The asymmetry between our English-speaking buyer corpus and the manufacturer side is real and unresolved.
Thin per-vendor samples. Many identities carry one or two certificates. Below three purity measurements we show no letter, but a vendor sitting just above that line is still close to anecdote.
Vendors that leave no trail. Operations that disappeared without an enforcement action, a filing, or a community post-mortem are not in our incident archive, which currently documents 27 shutdowns.
Stale pipelines. Named above rather than buried: Finnrick and Freedom have not added records in about three weeks, MESO-Rx crawling stopped on 2026-05-01, Discord COA image ingestion stopped on 2026-04-17, and community message classification stopped on 2026-05-11.
What we claim, and what we do not
This section does two jobs. It is the answer for anyone reviewing what kind of health content this site publishes, and it is the standing answer when a vendor writes in about a grade.
What our numbers are. Every figure on this site is a measurement of a document or a price. A purity percentage is what a lab wrote on a certificate about one batch. A quantity deviation is that lab’s measured fill against the label on that vial. A price is what a seller asked for a product on a date we recorded. A Trust Grade is an arithmetic summary of the certificates we hold about one vendor identity, computed by the formula above and calibrated against the rest of the tracked population.
What our numbers are not.
- Not medical advice. Nothing here is a diagnosis, a treatment plan, or a dose to take. We do not publish dosing protocols. Where a research article reports doses, they are doses that appeared in a published study or that circulate in buyer communities, reported as observed facts about the literature or the market and labeled that way.
- Not a therapeutic claim. We do not claim that any peptide cures, treats, prevents, reverses, or heals any condition. Our research articles describe what trials and preclinical studies measured, tag each result with its evidence tier, and say so plainly when the honest answer is that human evidence does not exist. Reporting what a study found is not the same as claiming the effect.
- Not a safety certification. A purity number is not a clearance. Most certificates we hold carry no endotoxin result at all (the counts are under What we measure above), so on the majority of the documents we read, the question that decides whether an injected product is dangerous is simply unanswered.
- Not a guarantee about the vial you receive. A certificate describes the sample a lab tested. It does not describe the vial in your hand. A vendor with a good grade can still ship a bad batch, and a clean result on one production run does not carry to the next.
- Not a verdict on a company. Vendor and manufacturer names are used descriptively to identify parties in the documentary record. A letter grade summarizes documents, not a business. Inclusion is not endorsement and exclusion is not condemnation.
What we will and will not change on request. We correct misattribution, arithmetic, and anything we got factually wrong, and we log the correction with a date rather than editing quietly. We do not remove an accurate lab result because the vendor it belongs to would prefer it unpublished, and we do not soften a finding to make a page easier to advertise. If a figure here is wrong, tell us what the right one is and how you know.
Corrections and right of reply
For factual corrections, methodology disputes, or anything in our published research you believe misrepresents the record: legal@titratelab.com.
If you represent a vendor or a lab and believe a passage misrepresents your operation, the same address applies, and we will tell you which certificates drive your grade so you can check them against your own records. We do not remove accurate lab results on request. We do correct misattribution, and misattribution is the most common real complaint we receive, because vendor identity resolution is genuinely hard.
Vendor and manufacturer names are used descriptively to identify parties in the documentary record. Inclusion is not endorsement and exclusion is not condemnation.
Every aggregate on this site should be reproducible from the pipelines described here. If you try to reproduce one and cannot, write to us. We will either point you at the query, correct the article, or correct the pipeline. All three have happened.
Change log
2026-08-01. Added “What we claim, and what we do not”, which states the scope of every figure on the site in one place: what our numbers measure, and that they are not medical advice, not therapeutic claims, not a safety certification, not a guarantee about any individual vial, and not a verdict on a business. No figure changed, and the section states no new count of its own: it points back at the figures already reported above rather than repeating a literal that could drift out of step with them.
2026-07-25. Full audit against the live codebase and database. Corrected corpus counts, which had been frozen at their 2026-04-23 values while the corpus grew roughly sevenfold. Named Freedom Diagnostics as the largest source, which the page had previously omitted while describing Finnrick as the largest. Corrected the OCR model to Gemini 2.5 Flash. Replaced the description of the vendor scoring formula with the one that actually produces the public letter, including quantile calibration and the failure caps. Clarified that the in-spec dose test is one-sided. Removed several claims that could not be verified against the implementation, including a routed-order loyalty offer that was withdrawn from marketing on 2026-07-12, an outlier-exclusion rule that does not exist in code, a nightly automated regression suite that was never installed, and a characterization of how Discord data is collected that the code does not support. Added the source-freshness table and the stale-pipeline disclosures.
2026-04-23. First published version.