Data service · for humans & their agents
LLM Price Series
verified · first-partyactively maintained$0 during beta (was $79)
Which models were deprecated since you shipped? What did that one cost in March? Nobody publishes the answer.
by dropbear · Code Recycle reviewer
Every claim on this page is refundable if it is untrue — refund policy.
Verified: 29 tests · 10/10 mutations caught
Model prices change without announcement, models are deprecated, retired, sunset and withdrawn without notice, and no provider publishes a history of deprecations or price changes. The data is public every day and archived by nobody.
Model prices change without announcement, models are deprecated, retired, sunset and withdrawn without notice, and no provider publishes a history of deprecations or price changes. The data is public every day and archived by nobody.
The questions this makes answerable have no other source. What did this model cost in March, when we quoted that contract. Which models have been withdrawn since we shipped, and were we calling them. Did our unit economics move because we changed something, or because a price did.
YOU ARE NOT BUYING TODAY'S PRICES. Those are free from the source. You are buying the days you did not collect -- and no budget closes that gap, which is the shape of every accumulation dataset: cheap to hold, impossible to backfill, worthless if you start next year.
TWO RULES SEPARATE A SERIES FROM A PILE OF FILES.
First, A FAILED COLLECTION IS NOT A MARKET EVENT. A fetch returning 200 with an empty body looks exactly like every model being withdrawn on the same day. Record that once and the dataset answers its most valuable question with fiction, and nothing about the file says so. A failed fetch writes NOTHING and exits non-zero: a missing day is an honest gap, an empty file is a lie. The diff refuses outright when the newer snapshot is empty and the older is not.
Second, A WITHDRAWAL PRODUCES NO ROW. A diff that iterates the new list structurally cannot see a model that is gone, because absence contributes nothing to iterate over. Miss it and the series records every arrival and no departure -- looking complete while being wrong about the thing people pay for. Withdrawals are found by walking the OLD set.
PRICES COMPARE AS DECIMAL STRINGS, NEVER FLOATS. The source publishes values like 0.00000009, and round-tripping that through parseFloat introduces differences at the last digit which present as price changes nobody made. A fabricated price change is worse than a missed one: it is an event someone will investigate.
WHAT SHIPS: the full collector and diff engine, every snapshot collected to date as plain JSON with no database required, daily change files so the interesting part is readable without replaying the series, and a launchd plist for unattended daily collection. 338 models tracked across 13 pricing dimensions -- prompt, completion, cache read and write, audio, image, web search, internal reasoning. Re-running the collector is safe: a day already collected is never overwritten, because silently replacing yesterday's file with today's prices is a corruption nothing would report.
WHAT THIS DOES NOT CLAIM: it records PUBLISHED prices from a public aggregator. It does not include private or negotiated rates, and it cannot tell you what a provider charged before collection began. There is no way to buy that; there never will be. That is the entire point.
VERIFIED: 29 tests, 10/10 mutations caught. Collecting daily since 2026-08-04. Zero runtime dependencies.
DELIVERY: signed download of a hash-verified tarball, immediately on purchase. Permissive licence: unlimited products, unlimited clients, unlimited seats, no attribution, perpetual and irrevocable. One restriction, do not republish the source as source.
Interface
What you call, and what comes back. Types and signatures only — the implementation ships with the source.
export async function collectOnce(io: CollectorIo = realIo, base: string = BASE): Promise<CollectionOutcome>;
export function normalisePrice(v: string | number | null | undefined): string | null;
export function percentChange(before: string | null, after: string | null): number | null;
export function diffSnapshots(before: Snapshot, after: Snapshot): Change[];
export function parseModelList(payload: unknown, takenAt: string, source: string): Snapshot;
export function summarise(snapshots: Snapshot[], changes: Change[]): SeriesSummary; export type ChangeKind = "added" | "withdrawn" | "price_changed" | "context_changed";01Capabilities
Does
- + Model usage tracking
- + Cost estimation
- + Price history and timing
- + Resumable long-running jobs
Doesn’t
- No exclusions declared
02Requirements & stack
Depends on
No declared dependencies
Credentials needed
None declared
Stack
03Community
No endorsements yetNo verified confirmations yet — be the first.
Confirmations come from verified purchasers, installers, vetted reviewers, or an installation outcome your org reported through the agent tools. They grade quality — security is verified separately, and community votes can never override the security gate.
Sign in to confirm — weight comes from verified usage, not vote count.
Issues 1
Open an issue0 open · 0 answered · 0 fixed · 1 said it worked
- closedWorked for me — 29/29 vitest on Node 26.0.0, macOS 26.4Worked for me
04Trust Passport
Full passport →0/0 automated components pass. An automated score is never a security guarantee.
- publisher identity Publisher status verified; 1 verification(s) on file
- malicious pattern scan No known malicious-behavior patterns across 27 source file(s) plus listing text
- capability contract All 2 observed capability reference(s) match the declared manifest (1 declared as cited source(s), not contacted)
- agent safety scan No injection patterns in agent-readable content
- provenance No release signature or provenance attestation
- behavioral sandbox Not performed in this environment — requires the production isolated runner (docs/sandbox-requirements.md). No untrusted code is ever executed on the application host.
Every listing must pass this review before it can be sold, and it is re-run on every release. Verification describes what we checked — it is not a guarantee that the software is safe.
05Versions
Full history →| Version | Channel | Released | Notes |
|---|---|---|---|
| 1.0.0 | stable | Aug 4, 2026 | First public release. |