Data may be out of date. Our scheduled checks are behind: the last successful check of the sources finished 20 Oct 2026, 21:00 UTC (16 days ago), more than 36 hours ago. Checks normally run twice daily, so figures on this page may be out of date. See the service status.
ShortageSignal

Trust · operations

Service status

What our scheduled checks actually did, from the run log. Sources are checked twice daily by scheduled jobs — this page shows the times runs were observed to start and finish, never the schedule, and it records failures and partial runs exactly like successes. ShortageSignal is not a live or continuous service, and absence of a notice is never evidence that a medicine is available.

Our scheduled checks are behind: the last successful check of the sources finished 20 Oct 2026, 21:00 UTC (16 days ago), more than 36 hours ago. Checks normally run twice daily, so figures on this page may be out of date.

Last successful check
20 Oct 2026, 21:00 UTC
the latest completed parse of the captured sources, 16 days ago; a banner appears site-wide after 36 hours
Last capture
20 Oct 2026, 20:38 UTC
the capture archiver's own last successful fetch of the CPE feed, as read by the latest parse run — behind: the latest parse found no successful capture in the last 36 hours, so the banner is shown
Last source change
19 Oct 2026, 14:45 UTC
newest captured snapshot of a Community Pharmacy England post (England)
Last Scotland check
20 Oct 2026, 21:00 UTC
NHS Scotland MSANs (separate surface, never summed with England); last change seen 17 Sep 2026, 12:52 UTC

Latest source check

Partial started (16 days ago), finished (16 days ago).

Quality gate: passed. 408 of 420 captured posts parsed; ‘other’/context share 2.1%; posts carrying a flagged source anomaly 38.8%.

12 posts parked in the latest parse: they could not be parsed completely or their captured file was missing, so that run wrote nothing from them to the record (4 × patient safety alert: incomplete parse; 4 × protocol-extension post: incomplete parse; 2 × supply notification: incomplete parse; 2 × new-protocol post: incomplete parse). A run that parks posts is recorded as partial, not complete.

Steps: parse: success, poppler: success, register: success, scotland: success, protocols: success

Other checks

NHSBSA SSP register applied
(16 days ago)
Capture archiver (last run / last success)
(16 days ago) / (16 days ago)
Email alerts
dry-run — no email alert is being sent; the dispatcher only logs what it would send. The RSS feed at /feed.xml works now. Last dispatcher run: (16 days ago). No sent email is recorded.

Cadence, as observed

Sources are checked twice daily by scheduled jobs, not continuously; GitHub's scheduler does not guarantee start times, so we publish the times runs were observed to start. In the last 30 days: 1 run before 12:00 UTC started at 11:46 UTC; 26 runs 12:00 UTC or later started between 12:11 and 23:48 UTC. 27 of 27 recorded checks completed the parse; the longest gap between successful checks was 20.0 hours.

Source checks (last 30 days)

Recorded since 30 Sep 2026, 18:39 UTC. Every source-check run recorded in the last 30 days (27). “Partial” means the parse completed but some posts were parked or another step failed; nothing from a parked post reaches the record.

JobStarted (observed)TookOutcomeParsedParkedGateSteps
parse356sPartial408/42012
2 × supply notification: incomplete parse; 4 × patient safety alert: incomplete parse; 2 × new-protocol post: incomplete parse; 4 × protocol-extension post: incomplete parse
passedparse: success, poppler: success, register: success, scotland: success, protocols: success
parse358sPartial408/42012
2 × supply notification: incomplete parse; 4 × patient safety alert: incomplete parse; 2 × new-protocol post: incomplete parse; 4 × protocol-extension post: incomplete parse
passedparse: success, poppler: success, register: success, scotland: success, protocols: success
parse390sPartial408/42012
2 × supply notification: incomplete parse; 4 × patient safety alert: incomplete parse; 2 × new-protocol post: incomplete parse; 4 × protocol-extension post: incomplete parse
passedparse: success, poppler: success, register: success, scotland: success, protocols: success
parse540sPartial408/42012
2 × supply notification: incomplete parse; 4 × patient safety alert: incomplete parse; 2 × new-protocol post: incomplete parse; 4 × protocol-extension post: incomplete parse
passedparse: success, poppler: success, register: success, scotland: success, protocols: success
parse351sPartial407/41912
2 × supply notification: incomplete parse; 4 × patient safety alert: incomplete parse; 2 × new-protocol post: incomplete parse; 4 × protocol-extension post: incomplete parse
passedparse: success, poppler: success, register: success, scotland: success, protocols: success
parse556sPartial407/41912
2 × supply notification: incomplete parse; 4 × patient safety alert: incomplete parse; 2 × new-protocol post: incomplete parse; 4 × protocol-extension post: incomplete parse
passedparse: success, poppler: success, register: success, scotland: success, protocols: success
parse534sPartial407/41912
2 × supply notification: incomplete parse; 4 × patient safety alert: incomplete parse; 2 × new-protocol post: incomplete parse; 4 × protocol-extension post: incomplete parse
passedparse: success, poppler: success, register: success, scotland: success, protocols: success
parse509sPartial407/41912
2 × supply notification: incomplete parse; 4 × patient safety alert: incomplete parse; 2 × new-protocol post: incomplete parse; 4 × protocol-extension post: incomplete parse
passedparse: success, poppler: success, register: success, scotland: success, protocols: success
parse557sPartial407/41912
2 × supply notification: incomplete parse; 4 × patient safety alert: incomplete parse; 2 × new-protocol post: incomplete parse; 4 × protocol-extension post: incomplete parse
passedparse: success, poppler: success, register: success, scotland: success, protocols: success
parse508sPartial407/41912
2 × supply notification: incomplete parse; 4 × patient safety alert: incomplete parse; 2 × new-protocol post: incomplete parse; 4 × protocol-extension post: incomplete parse
passedparse: success, poppler: success, register: success, scotland: success, protocols: success
parse341sPartial407/41912
2 × supply notification: incomplete parse; 4 × patient safety alert: incomplete parse; 2 × new-protocol post: incomplete parse; 4 × protocol-extension post: incomplete parse
passedparse: success, poppler: success, register: success, scotland: success, protocols: success
parse340sPartial407/41912
2 × supply notification: incomplete parse; 4 × patient safety alert: incomplete parse; 2 × new-protocol post: incomplete parse; 4 × protocol-extension post: incomplete parse
passedparse: success, poppler: success, register: success, scotland: success, protocols: success
parse528sPartial406/41812
2 × supply notification: incomplete parse; 4 × patient safety alert: incomplete parse; 2 × new-protocol post: incomplete parse; 4 × protocol-extension post: incomplete parse
passedparse: success, poppler: success, register: success, scotland: success, protocols: success
parse502sPartial406/41812
2 × supply notification: incomplete parse; 4 × patient safety alert: incomplete parse; 2 × new-protocol post: incomplete parse; 4 × protocol-extension post: incomplete parse
passedparse: success, poppler: success, register: success, scotland: success, protocols: success
parse362sPartial406/41812
2 × supply notification: incomplete parse; 4 × patient safety alert: incomplete parse; 2 × new-protocol post: incomplete parse; 4 × protocol-extension post: incomplete parse
passedparse: success, poppler: success, register: success, scotland: success, protocols: success
parse344sPartial405/41712
2 × supply notification: incomplete parse; 4 × patient safety alert: incomplete parse; 2 × new-protocol post: incomplete parse; 4 × protocol-extension post: incomplete parse
passedparse: success, poppler: success, register: success, scotland: success, protocols: success
parse445sPartial405/41712
2 × supply notification: incomplete parse; 4 × patient safety alert: incomplete parse; 2 × new-protocol post: incomplete parse; 4 × protocol-extension post: incomplete parse
passedparse: success, poppler: success, register: success, scotland: success, protocols: success
parse554sPartial405/41712
2 × supply notification: incomplete parse; 4 × patient safety alert: incomplete parse; 2 × new-protocol post: incomplete parse; 4 × protocol-extension post: incomplete parse
passedparse: success, poppler: success, register: success, scotland: success, protocols: success
parse438sPartial404/41612
2 × supply notification: incomplete parse; 4 × patient safety alert: incomplete parse; 2 × new-protocol post: incomplete parse; 4 × protocol-extension post: incomplete parse
passedparse: success, poppler: success, register: success, scotland: success, protocols: success
parse404sPartial404/41612
2 × supply notification: incomplete parse; 4 × patient safety alert: incomplete parse; 2 × new-protocol post: incomplete parse; 4 × protocol-extension post: incomplete parse
passedparse: success, poppler: success, register: success, scotland: success, protocols: success
parse506sPartial404/41612
2 × supply notification: incomplete parse; 4 × patient safety alert: incomplete parse; 2 × new-protocol post: incomplete parse; 4 × protocol-extension post: incomplete parse
passedparse: success, poppler: success, register: success, scotland: success, protocols: success
parse452sPartial404/41612
2 × supply notification: incomplete parse; 4 × patient safety alert: incomplete parse; 2 × new-protocol post: incomplete parse; 4 × protocol-extension post: incomplete parse
passedparse: success, poppler: success, register: success, scotland: success, protocols: success
parse496sPartial404/41612
2 × supply notification: incomplete parse; 4 × patient safety alert: incomplete parse; 2 × new-protocol post: incomplete parse; 4 × protocol-extension post: incomplete parse
passedparse: success, poppler: success, register: success, scotland: success, protocols: success
parse431sPartial404/41612
2 × supply notification: incomplete parse; 4 × patient safety alert: incomplete parse; 2 × new-protocol post: incomplete parse; 4 × protocol-extension post: incomplete parse
passedparse: success, poppler: success, register: success, scotland: success, protocols: success
parse451sPartial404/41612
2 × supply notification: incomplete parse; 4 × patient safety alert: incomplete parse; 2 × new-protocol post: incomplete parse; 4 × protocol-extension post: incomplete parse
passedparse: success, poppler: success, register: success, scotland: success, protocols: success
parse567sPartial404/41612
2 × supply notification: incomplete parse; 4 × patient safety alert: incomplete parse; 2 × new-protocol post: incomplete parse; 4 × protocol-extension post: incomplete parse
passedparse: success, poppler: success, register: success, scotland: success, protocols: success
parse333sPartial404/41612
2 × supply notification: incomplete parse; 4 × patient safety alert: incomplete parse; 2 × new-protocol post: incomplete parse; 4 × protocol-extension post: incomplete parse
passedparse: success, poppler: success, register: success, scotland: success, protocols: success

Other jobs (latest 30 runs)

The newest 30 runs of the other scheduled jobs in the last 30 days, newest first — these go back only to 17 Oct 2026, 21:31 UTC, because the alerts dispatcher is scheduled far more often than the source checks. Kinds: alerts = Email alerts dispatcher; digest = Monthly Index digest; postparse = After-parse discoverability (IndexNow, cache refresh).

JobStarted (observed)TookOutcomeParsedParkedGateSteps
alerts7sCompleteddry-run———dispatch: success
alerts7sCompleteddry-run———dispatch: success
identifiers70sCompleted———bnf: skipped, pca: skipped, match: success
alerts9sCompleteddry-run———dispatch: success
postparseworkflow_run11sCompleted———indexnow: success, revalidate: success
indexnow changed=0 submitted=0
alerts6sCompleteddry-run———dispatch: success
identifiers48sCompleted———bnf: skipped, pca: skipped, match: success
postparseworkflow_run12sCompleted———indexnow: success, revalidate: success
indexnow changed=0 submitted=0
alerts7sCompleteddry-run———dispatch: success
alerts6sCompleteddry-run———dispatch: success
alerts6sCompleteddry-run———dispatch: success
identifiers59sCompleted———bnf: skipped, pca: skipped, match: success
postparseworkflow_run7sCompleted———indexnow: success, revalidate: success
indexnow changed=0 submitted=0
alerts5sCompleteddry-run———dispatch: success
identifiers72sCompleted———bnf: skipped, pca: skipped, match: success
postparseworkflow_run10sCompleted———indexnow: success, revalidate: success
indexnow changed=16 submitted=16
digest_weekly9sCompleteddry-run———weekly: success
alerts8sCompleteddry-run———dispatch: success
alerts7sCompleteddry-run———dispatch: success
alerts11sCompleteddry-run———dispatch: success
identifiers48sCompleted———bnf: skipped, pca: skipped, match: success
postparseworkflow_run8sCompleted———indexnow: success, revalidate: success
indexnow changed=0 submitted=0
alerts7sCompleteddry-run———dispatch: success
alerts6sCompleteddry-run———dispatch: success
identifiers46sCompleted———bnf: skipped, pca: skipped, match: success
postparseworkflow_run8sCompleted———indexnow: success, revalidate: success
indexnow changed=0 submitted=0
alerts7sCompleteddry-run———dispatch: success
alerts7sCompleteddry-run———dispatch: success
alerts8sCompleteddry-run———dispatch: success
identifiers62sCompleted———bnf: skipped, pca: skipped, match: success

The same figures are available as JSON at /api/v1/status. How the checks work: methodology. Corrections to published figures: corrections log.