Sources and freshness

Everything here is a copy of a public register. No fact is ours — which means the useful question is never “is this right?” but “which register said so, and when did we last read it?” Both answers are on every screen.

What the data is

National medicines registers and open scientific databases: Swissmedic and the Swiss Federal Office of Public Health, the EMA, the national agencies across the EU, the FDA and CMS in the United States, plus the WHO ATC classification and open pharmacology databases for enrichment.

Public-source-only, by design

Commercially licensed drug databases are deliberately not in here. Where a customer holds their own licence for one, it is connected through their own credentials rather than redistributed by us. The consequence is honest coverage gaps in some markets, which is preferable to a licence we cannot pass on to you.

The three states on the Sources page

Sources lists every feed with one badge. The badge answers one specific question: do we hold data inside this source's agreed freshness window? It does not answer “did the last poll succeed?”, and the difference matters.

BadgeStateWhat it means
liveokWe hold data from inside this source’s freshness window. For a source with no declared window, it means we have successfully synced at least once and make no age claim.
degradedstaleWe have tried to sync and have not succeeded inside the window. The data shown is older than it should be. The row says how much older.
pendingnever_runWe have never successfully synced this source. Usually it is waiting on credentials or an access agreement — it is not broken, it has not started.

Why a source can be "live" and still failing

A separate retrying marker appears when the badge is live but recent runs have failed. That is deliberate, and it comes from a real problem: one register publishes an error on most days while its underlying data is never more than a few days old, and another polls cleanly while serving data three months stale. Folding both into one badge made the two look identical.

So read them as two different things. The badge is about the age of the data you are being shown. The retrying marker is about the health of the pipeline. A live-and-retrying source is fine to use today and worth watching.

Checking freshness for one specific fact

The Sources page is the whole-system view. For a single answer, the source chips on the value itself tell you which register asserted it — and over the API, every response carries the same information in machine-readable form:

_meta.sources
"_meta": {
  "sources": {
    "bag_sl":     { "last_synced_at": "2026-09-11T03:12:00Z", "schema_state": "ok" },
    "swissmedic": { "last_synced_at": "2026-09-11T03:40:00Z", "schema_state": "ok" },
    "bdpm":       { "last_synced_at": "2026-06-02T04:00:00Z", "schema_state": "stale",
                    "reason": "error" }
  }
}

schema_state uses exactly the three values above. A stale entry also carries a reason. If a figure matters and its source is stale, go to the register directly before acting on it.

What "no data" means on each screen

  • No price. No published price is on file for that product in that market. It does not mean the medicine is free, and we do not estimate one.
  • No warnings. No label warning text is on file. It is not a statement that the product has no warnings — which is why the section is hidden entirely rather than shown empty.
  • No interaction. We hold no reviewed interaction for that pair. That is not proof of safety. See reading an interaction verdict.
  • Not registered in a country. Frequently a real answer rather than a gap — but check the badge for that country's register before concluding it.

Watching changes as they land

Changes is the live feed of what moved: new registrations, updates, withdrawals and recalls, filterable by source, jurisdiction and change type, with a field-level diff on each row. It polls continuously, so leaving it open is a reasonable way to watch a launch or a recall wave.

If you would rather be told than watch, webhooks push the same feed to a URL of yours, and GET /v1/changes pulls it on your own schedule with the free tier's changes:read scope.

Public status

The status page is public and shows the same source-health snapshot without a login — useful for linking to when explaining a gap to somebody outside your organisation.