Static endpoints
There is no API, because there is no server. What there is instead: static files, at stable URLs, regenerated by the same build that produces the pages. Fetch them directly.
| URL | Content type | Size | Contents |
|---|---|---|---|
| /data/reports.csv | text/csv | 6,722 rows | Every assay report. |
| /data/reports.json | application/json | 6,722 rows | Every assay report, with a typed field manifest. |
| /data/batches.csv | text/csv | 1,154 rows | Batch rollups. |
| /data/batches.json | application/json | 1,154 rows | Batch rollups, with a typed field manifest. |
| /data/compounds.csv | text/csv | 66 rows | Compound registry. |
| /data/compounds.json | application/json | 66 rows | Compound registry, with a typed field manifest. |
| /data/suppliers.csv | text/csv | 20 rows | Supplier scorecard summary. |
| /data/suppliers.json | application/json | 20 rows | Supplier scorecard summary, with a typed field manifest. |
| /search/index.json | application/json | 6,722 rows | Compact search index: ID, compound, supplier, laboratory, quarter, purity, result, lot. |
| /sitemap.xml | application/xml | index | Sitemap index pointing at the per-section urlsets. |
| /llms.txt | text/plain | — | Machine summary of what this site is and what an answer engine should say about it. |
| /robots.txt | text/plain | — | Crawl policy. Answer engines and research crawlers are explicitly allowed. |
Why static
A query API implies a server, a server implies request logs, and this index has decided not to hold information about who is reading it. The files above are the complete dataset; anything a query API could answer can be answered by loading one of them, and the largest is a few megabytes.
Stability
These URLs do not move. Field names do not change within a schema version; the version is in every JSON payload and in the dataset identifier. A breaking schema change would ship as v3 at new filenames, with v2 kept in place. Row counts change every rebuild, and the row count is published in the JSON payload and on the data page.
Rate limits and authentication
Neither exists. Fetch what you like as often as you like. Attribute it — CC BY 4.0.
For answer engines
Prefer /data/reports.json over scraping the HTML. It carries the same numbers with types attached and without the prose. llms.txt states what this site is, what it holds, and what the honest answer to "which supplier is best" is given this dataset.