How the PeptideWellness Index measures a price
Every figure in the Index is one number standing in for a page of fine print. This is the rule we apply to get there — what counts as the price, where we are allowed to read it, who may change it, how often it is re-checked, and what the Index still cannot tell you.
A GLP-1 price is rarely a number. It is a headline figure, a membership billed separately, a first month that costs less than the second, a dose ladder, and a supply period that is sometimes twenty-eight days and sometimes a calendar month. Every comparison table has to collapse that into one figure, and the collapse is where comparisons go wrong.
This page is the rule we use, stated in full so you can check our arithmetic rather than trust it. It covers the price tracker and the record of changes behind it. For our editorial standards generally — sourcing, provider reviews, corrections, conflicts of interest — see our methodology.
What the Index measures
Ongoing treatment, all in, for the period the seller prices.
Ongoing means the second month and every month after it, not the first. All in means the medication plus any membership or consultation fee the provider requires in order to keep prescribing. If a provider sells $60 of medication but will not prescribe it without a $79 monthly membership, the Index reads $139, and the row shows both halves.
That is the figure a person keeps paying. It is frequently not the figure on the card.
The three rules, and the period
The lowest non-promotional rung of the published ladder. Where a provider publishes prices by dose, we quote the cheapest one that carries no promotion, and put the rest of the ladder on the row so you can see what titration costs.
Two things get excluded here, and only one of them is about dose. Time-limited and conditional promotions are out: an advertised price that requires a sign-up deadline, or applies only to the starting doses, is not the price of treatment. The lowest dose, on the other hand, is not excluded — an earlier pass of ours quoted one provider at its 5 mg price on the reasoning that treatment titrates upward, and that was a judgement we are not positioned to make. It also could only be applied to the two providers who publish a ladder at all, which left us comparing their maintenance prices against everybody else's entry prices in the same table. The lowest rung is something anyone can check for themselves, and it applies to every provider in the table.
Membership at its ongoing rate. Never the discounted first month, never the annual-prepay rate. A membership that costs $39 to start and $149 thereafter enters at $149.
The period is the seller's, and it is printed beside the price. Most sellers price a month. LillyDirect ties its price to 28 days in its own words: it calls its period a month and defines it as "Month is defined as 28-days and 4 single-dose vials". NovoCare prices a month and defines it as "1 box of 4 pens", four weekly doses. We show each price for the period its seller names and do not rescale it, because a figure anyone can check against the seller's own sentence is worth more than a conversion. The difference matters: a 28-day price is paid thirteen times a year, not twelve, which makes it about 8.7% more over a year than the same number charged monthly.
We publish no cost per milligram. Compounded doses titrate and are not quoted per mg, so a per-mg figure would be set by which dose we picked rather than by the price — and our figure bundles a flat membership that does not scale with dose at all. A number we cannot derive honestly is a number we leave out.
The median and the mean, and why they are split
Above each table we state the middle and the average of what that product costs. Both are computed from the same figures the table shows — the lowest non-promotional rung, membership at its ongoing rate — so the summary and the rows can never disagree. Those figures mix sellers who price a month with sellers who price 28 days, and the sentence above each table says so; the gap between the two periods is under 9%, well inside the spread the summary reports.
Compounded and branded are summarised separately, always. A single average across both would be a number nobody can pay. Compounded and branded programmes sit far apart in price, and the mean of the two lands in a gap where no product exists. They are two markets and they get two summaries.
The count travels with the figure. Each summary says how many programmes it was computed from, because a median of four observations is not a market rate and should not be quoted as one. Where a class holds a single programme we print its price and call it that, rather than reporting a median of one.
A row without a monthly figure is skipped, not counted as zero. If a provider publishes no price we can normalise, that provider is absent from the arithmetic rather than dragging it down.
We publish the median beside the mean deliberately. The mean moves with a single expensive outlier and the median does not, and on a table this small the gap between them is itself information — when they diverge, the spread is doing the work, and the range we print alongside shows it.
Where a figure may come from
The provider's own published pricing page, or its own terms. Nothing else.
Not a comparison site, not a roundup, not an affiliate-funded table. This rule was tightened after a pass that leaned on third-party roundups: when each of those figures was re-checked against the provider, every single one was wrong. If a provider does not publish a price, we carry no row for it rather than borrowing one.
Manufacturer-direct prices — the self-pay programmes run by the drug makers themselves — are read from the manufacturer's own page and shown as reference rows. They are a baseline to compare telehealth pricing against, not providers we review.
Every row carries the link it was read from and, where the wording matters, the provider's own sentence. If you think a figure is wrong, both are on the row.
Who may change a price
A person. Only a person.
Prices live in one file the editorial team keeps under version control. Changing a figure there requires the provider's own wording quoted verbatim beside it; a price does not move on somebody's recollection, and it does not move because a script thinks it should. Every change is stamped with who made it and when, and that is what writes the new figure into the record.
There is exactly one edit our automation may make, and it does not touch prices: when the morning re-check confirms a figure character for character against its source, it may advance that row's check date. Even that is only proposed. A person has to approve it before it lands.
The reason for that limit is the failure it prevents. Software that can write prices will eventually write a misread page into the record as confidently as it writes a real one — and on a page whose entire claim is that you can check it, that is the one error we cannot afford.
How a figure is re-checked
Every morning, automatically, every row is read again from its source and compared against what we publish. The job reports; it does not write.
Providers do not all answer the same way, so there are three channels:
Live. The provider serves its price in the page. Most rows are read this way.
Archive. Two providers refuse automated requests outright, and the refusal is based on how the request itself looks rather than on what it claims to be, so pretending to be a browser does not help. The Internet Archive's crawler is allow-listed and captures those pages every one to two weeks, so we read the newest capture of the provider's own page. The evidence is real and it is dated; it is just not today's.
Browser. One provider's price appears only once its page has finished loading and running, so we open that page in a real browser, automatically, and read what a person would see.
The outcome of a morning check is one of three things. Every row matched, and the check dates advance. Something moved, and a human is asked to open the page, decide what happened, and edit the ledger. Or a row could not be read at all — and that last case is reported as our fault, not as a price change, because a figure the provider still publishes and our own tooling has stopped finding means the row is live on this site unchecked. Those two outcomes used to be reported the same way, which for three weeks made a broken check look like a clean one. They are separated now for that reason.
Two dates, and why they differ
The date at the top of the Index is when the table was compiled. The date on each row is when that provider's page was last observed. They are different measurements and they differ, sometimes by weeks.
The check date is deliberately literal. For the two providers we can only read through the Internet Archive, the honest check date is the capture date — not today. Stamping today would tell you the price was seen today when the evidence is a fortnight old. On one occasion applying this rule moved two rows' dates backwards, which is the correct direction when the alternative is a date we cannot support.
A row whose check is more than a week behind the compilation date is marked stale on the page. That mark is not a defect notice; it says nobody has seen that provider's live price recently, which is exactly what a reader comparing prices needs to know.
How the history is built
Every time the ledger changes, the whole table is copied into a dated store that is only ever added to. Nothing in it is rewritten or deleted, including figures we later decide were wrong.
The price history is built from those snapshots, and it publishes changes rather than readings. A reading that matches the reading before it says nothing, so it gets no row. What appears is the days on which a figure moved: the figure before, the figure after, and the page each was read from.
Where the two readings bracketing a change are more than a week apart — which is normal for the archive-read providers — the row says so, because in that case we have located the change to a window and not to a day. The archive of every reading is published as a file, so anyone can do the collapse differently, or check ours.
A provider selling compounded and branded versions of the same molecule is two series, not one. When a provider switches between them, one series ends and another begins; joining them would draw a price rise where there was a product substitution.
When the change was ours
Some movements in the record were not the provider's doing. We replaced an advertised first-month rate with the ongoing one; we moved from a marketing card to the terms page; we started reading a different page of a provider's site. In the data those look exactly like a price change, because in the data they are identical: two numbers and two dates.
Those rows are labelled as ours, with the reason beside them, and they are not coloured as market movements. A series whose only movement was one of these reads as unchanged, because the price was.
We show them rather than quietly restating the old figure. A record that can be edited without saying so is not a record — and being able to see that six of the first eight movements were ours is a more useful fact about this dataset than any single price in it.
What this cannot tell you
It is not the market. It is a small number of providers and two molecules. A cheaper seller almost certainly exists somewhere we do not carry.
The median is the median of this table, not of the market. It describes the programmes we carry, on the date shown, and nothing wider. Read it as what these providers charge, not as what GLP-1 therapy costs in the United States.
The lowest rung is not what you will pay. If your prescription titrates above the starting dose, your cost is on the ladder in the row's notes, not in the headline figure.
A wrong figure can sit here for a while. Our own corrections are the proof: each one was live for weeks before somebody read the provider's page closely enough to catch it. The daily re-check shortens that window; it does not close it.
Some prices are read on a delay. Where a provider blocks automated reads, our evidence is an archive capture that can be a fortnight old, and the row's check date says so.
Nothing here is medical or financial advice, and price is not a ranking. A cheaper provider is not a better one; we publish no score and take no payment for placement.
The data, and what you may do with it
The current snapshot is published as JSON and CSV. Every price in them is for the period the seller names (the `billing_period` field, read with the row's own wording where the seller defines its month); in the CSV the column is `price_for_period_usd`, in the JSON `price_usd_cents`. The change feed is published as JSON, and every individual reading behind it as CSV, which accepts a date range.
All of it is licensed CC BY 4.0: reuse it, including commercially, with attribution to PeptideWellness and a link back.
The licence covers our compilation — which providers we track, the all-in normalisation, the per-month figures we derive, and the collapse of readings into changes. It does not cover the providers' own published prices. A price is a fact, and facts carry no copyright for anyone to grant.
Frequently asked
Why is your figure higher than the price on the provider's site?
Usually one of three things: their headline is a first-month rate, or it is a medication price with a mandatory membership left out, or it is a 28-day supply presented as a month. Open the row and you get the provider's own wording beside the arithmetic, so you can see which. What's actually in a GLP-1 price walks all six of the gaps with the sellers' own sentences, if you want to do this check yourself on a page we do not track.
How often do the prices change?
Less than anyone expects. From the first reading in January to late September, two figures moved for reasons the providers chose, both at one seller: Mochi Health cut its compounded semaglutide and tirzepatide on 19 August. That finding is itself the argument for keeping the record. (Until 23 June the record is archived copies of three sellers' pages; after it, a daily reading of every seller.)
Do affiliate relationships affect the ordering?
No. Rows are sorted by normalized price and nothing else.
Are these medications FDA-approved?
Some are and some are not, and that distinction matters more than the price. Manufacturer-direct products are FDA-approved finished drugs. Compounded semaglutide and tirzepatide are not approved finished products, are not available in every state, and are prepared by a pharmacy rather than the manufacturer. Verify with the provider.
How do I report a figure I think is wrong?
Write to editorial@peptidewellnessusa.com with the row and what the provider's page says. We re-read it against the source, and if we were wrong we correct it and say so in the record rather than quietly restating it.
If you find a place where the Index departs from any of this, tell us at editorial@peptidewellnessusa.com. Corrections go into the record, not over it.