Operations
What each automated job costs against its spending limit, day by day, and what a month would cost with every source covered.
| Job | Schedule | Limit | Today | This week | This month | Limit used | Last 14 days | Last run |
|---|---|---|---|---|---|---|---|---|
| Statistics loader No AI model | Every day at 03:00 | – | 0 | 0 | 0 | – | run log | Done 21 Oct 2026, 14:07 |
| Document watch Small model (Haiku class) | Every 2 hours | €1.5 per day | 0.0032 | 0.0569 | 0.0569 | 0.2% | run log | Done 21 Oct 2026, 18:10 |
| Morning brief Mid-size model (Sonnet class) | Weekdays at 07:00 | €1 per day | 0.0085 | 0.07 | 0.07 | 0.8% | run log | Done 21 Oct 2026, 15:26 |
| Anomaly watch No AI model | Weekly, once Eurostat updates weekly deaths | – | 0 | 0 | 0 | – | run log | Skipped 21 Oct 2026, 15:26 |
| Workforce reconciliation Mid-size model (Sonnet class) | Once a week | €1 per week | 0 | 0.0109 | 0.0109 | 1.1% | run log | Done 19 Oct 2026, 23:18 |
| Nurses' survey summary Mid-size model (Sonnet class) | Every Sunday at 20:00 | €2 per week | 0 | 0 | 0 | 0% | run log | – |
| Shortage watch Small model (Haiku class) | Every day at 05:00 | €0.5 per day | 0 | 0.0034 | 0.0034 | 0% | run log | Done 21 Oct 2026, 15:26 |
| Opportunity radar Small model (Haiku class) | Every Monday at 06:00 | €0.5 per week | 0 | 0.0003 | 0.0003 | 0.1% | run log | Done 19 Oct 2026, 23:47 |
| Month close Large model (Opus class) | Once a month | €5 per month | 0 | 0.2806 | 0.2806 | 5.6% | run log | Done 20 Oct 2026, 00:16 |
| Document backfill (one-off) Small model (Haiku class) | Once (initial backfill) | €12 per month | 0 | 1.0007 | 1.0007 | 8.3% | run log | Done 19 Oct 2026, 22:50 |
| Total | 0.0117 | 1.4229 | 1.4229 | run log |
Monthly cost with every source covered
How it is worked out
Runs a month × (average input tokens × input price + average output tokens × output price) ÷ 1,000,000 × the euro rate × a coverage factor.
monthly_eur = runs_per_month x (avg_input_tokens x price_in_usd_per_mtok + avg_output_tokens x price_out_usd_per_mtok) / 1e6 x EUR_PER_USD x coverage_factor
| Job | Model | Runs a month | Tokens in / out | € per run | € a month | Limit | Based on |
|---|---|---|---|---|---|---|---|
| Statistics loader | No AI model | 30.4 | 0 / 0 | 0 | 0 within limit | 0 | No model used. no model calls run log |
| Document watch | Small model (Haiku class) | 365.3 | 202,427 / 3,657 | 0.019 | 6.9335 within limit | 45.66 | Observed runs. average of 3 runs that used a model in the last 30 days run log |
| Morning brief | Mid-size model (Sonnet class) | 21.7 | 1,151 / 1,399 | 0.014 | 0.3045 within limit | 30.44 | Observed runs. average of 5 runs that used a model in the last 30 days run log |
| Anomaly watch | No AI model | 4.4 | 0 / 0 | 0 | 0 within limit | 0 | No model used. no model calls run log |
| Workforce reconciliation | Mid-size model (Sonnet class) | 4.4 | 3,280 / 614 | 0.0109 | 0.0475 within limit | 4.35 | Observed runs. average of 1 runs that used a model in the last 30 days run log |
| Nurses' survey summary | Mid-size model (Sonnet class) | 4.4 | 100,000 / 4,000 | 0.2064 | 0.8978 within limit | 8.7 | Assumed. 50 interviews x ~2k tokens in (brief's sizing); synthesis out run log |
| Shortage watch | Small model (Haiku class) | 30.4 | 6,154 / 2,722 | 0.0017 | 0.0517 within limit | 15.22 | Observed runs. average of 2 runs that used a model in the last 30 days run log |
| Opportunity radar | Small model (Haiku class) | 4.4 | 1,173 / 352 | 0.0003 | 0.0011 within limit | 2.17 | Observed runs. average of 1 runs that used a model in the last 30 days run log |
| Month close | Large model (Opus class) | 1 | 7,342 / 6,688 | 0.1403 | 0.1403 within limit | 5 | Observed runs. average of 2 runs that used a model in the last 30 days run log |
| Document backfill (one-off) | Small model (Haiku class) | 0 | 3,463,111 / 83,115 | 0.3336 | 0 within limit | 12 | Observed runs. average of 3 runs that used a model in the last 30 days run log |
| Total | 8.3765 | 111.54 | run log |
Recent runs
| Started | Job | Status | Tokens in / out | Cost (€) | What it did |
|---|---|---|---|---|---|
| 21 Oct 2026, 18:10 | Document watch | Done | 0 / 0 | 0 | new documents: hio: +0; okypy: +0; cystat_publications: +0; parliament_health: +0; seeds: +0; eu_council: +0; ecdc_cdtr: +0; ema_news: +0; who_news: +0; neha: +0; state_of_health: +0; ec_policy_pages: run log |
| 21 Oct 2026, 16:10 | Document watch | Done | 0 / 0 | 0 | new documents: hio: +0; okypy: +0; cystat_publications: +0; parliament_health: +0; seeds: +0; eu_council: +0; ecdc_cdtr: +0; ema_news: +0; who_news: +0; neha: +0; state_of_health: +0; ec_policy_pages: run log |
| 21 Oct 2026, 15:26 | Morning brief | Done | 941 / 795 | 0.0085 | brief 2026-10-21: 5 sentences (97 words en), 0 dropped by the checks, 0 change-log entries, status ok run log |
| 21 Oct 2026, 15:26 | Anomaly watch | Skipped | 0 / 0 | 0 | weekly: skipped: Eurostat weekly deaths not updated since the last run; monthly cause groups 91 run log |
| 21 Oct 2026, 15:26 | Shortage watch | Done | 0 / 0 | 0 | 0 new shortages, 0 resolved run log |
| 21 Oct 2026, 15:25 | Document watch | Done | 0 / 0 | 0 | new documents: hio: +0; okypy: +0; cystat_publications: +0; parliament_health: +0; seeds: +0; eu_council: +0; ecdc_cdtr: +0; ema_news: +0; who_news: +0; neha: +0; state_of_health: +0; ec_policy_pages: run log |
| 21 Oct 2026, 14:10 | Document watch | Done | 34,045 / 652 | 0.0032 | new documents: hio: +1; okypy: +0; cystat_publications: +0; parliament_health: +0; seeds: +0; eu_council: +0; ecdc_cdtr: +0; ema_news: +0; who_news: +0; neha: +0; state_of_health: +0; ec_policy_pages: run log |
| 21 Oct 2026, 14:07 | Statistics loader | Done | 0 / 0 | 0 | cystat_db: 38 tables, +0 new, 0 revised, 0 errors; eurostat: 53 tables, +0 new, 0 revised, 0 errors; who_gho: 27 tables, +0 new, 0 revised, 0 errors; eea: 2 tables, +0 new, 17 revised, 0 errors; datag run log |
| 20 Oct 2026, 00:16 | Month close | Done | 7,241 / 6,989 | 0.1451 | month 2026-09: 21 sentences, 0 dropped, 0 change-log entries, status ok run log |
| 20 Oct 2026, 00:10 | Month close | Done | 7,444 / 6,388 | 0.1355 | month 2026-09: 21 sentences, 1 dropped, 0 change-log entries, status ok run log |
| 20 Oct 2026, 00:10 | Morning brief | Done | 1,340 / 1,872 | 0.0184 | brief 2026-10-19: 9 sentences (195 words en), 1 dropped by the checks, 0 change-log entries, status ok run log |
| 20 Oct 2026, 00:09 | Morning brief | Done | 1,397 / 1,938 | 0.0191 | brief 2026-10-16: 11 sentences (230 words en), 0 dropped by the checks, 0 change-log entries, status ok run log |
| 20 Oct 2026, 00:09 | Morning brief | Done | 834 / 866 | 0.0089 | brief 2026-10-15: 6 sentences (107 words en), 0 dropped by the checks, 0 change-log entries, status ok run log |
| 20 Oct 2026, 00:09 | Morning brief | Done | 1,242 / 1,522 | 0.0152 | brief 2026-10-14: 8 sentences (171 words en), 0 dropped by the checks, 0 change-log entries, status ok run log |
| 20 Oct 2026, 00:09 | Morning brief | Done | 0 / 0 | 0 | brief 2026-10-13: 0 sentences (0 words en), 0 dropped by the checks, 0 change-log entries, status empty run log |
| 20 Oct 2026, 00:09 | Morning brief | Failed | 0 / 0 | 0 | (Background on this error at: https://sqlalche.me/e/21/f405) run log |
| 20 Oct 2026, 00:07 | Document watch | Done | 572,997 / 10,306 | 0.0537 | new documents: hio: +0; okypy: +0; cystat_publications: +0; parliament_health: +0; seeds: +0; eu_council: +0; ecdc_cdtr: +0; ema_news: +0; who_news: +0; neha: +0; state_of_health: +0; ec_policy_pages: run log |
| 19 Oct 2026, 23:47 | Opportunity radar | Done | 1,173 / 352 | 0.0003 | 0 new matches; 5 open items run log |
| 19 Oct 2026, 23:47 | Shortage watch | Done | 5,903 / 2,445 | 0.0016 | 0 new shortages, 0 resolved run log |
| 19 Oct 2026, 23:47 | Shortage watch | Failed | 6,405 / 3,000 | 0.0018 | json.decoder.JSONDecodeError: Unterminated string starting at: line 1 column 1152 (char 1151) run log |
| 19 Oct 2026, 23:26 | Anomaly watch | Done | 0 / 0 | 0 | weekly: 6 events; monthly cause groups 91 run log |
| 19 Oct 2026, 23:18 | Workforce reconciliation | Done | 3,280 / 614 | 0.0109 | 29 counts available, 2 missing; estimate rows 6 run log |
| 19 Oct 2026, 22:50 | Document backfill (one-off) | Done | 10,317,281 / 233,018 | 0.9875 | new documents: hio: +210; okypy: +488; cystat_publications: +26; parliament_health: +1; seeds: +0. Enriched 725, extracted 711 (agreed 44, review 58, restated 53). run log |
| 19 Oct 2026, 22:38 | Document backfill (one-off) | Done | 23,509 / 7,128 | 0.0051 | run log |
| 19 Oct 2026, 22:34 | Document backfill (one-off) | Failed | 48,543 / 9,198 | 0.0081 | json.decoder.JSONDecodeError: Expecting ',' delimiter: line 1 column 2314 (char 2313) run log |
| 19 Oct 2026, 22:07 | Statistics loader | Done | 0 / 0 | 0 | eurostat: 53 tables, +755011 new, 41672 revised, 0 errors; who_gho: 27 tables, +5890 new, 0 revised, 0 errors; eea: 2 tables, +2788 new, 8 revised, 0 errors; datagovcy: 1 tables, +0 new, 0 revised, 0 run log |
| 19 Oct 2026, 20:15 | Document watch | Done | 240 / 14 | 0 | run log |
| 19 Oct 2026, 20:15 | Document watch | Failed | 0 / 0 | 0 | TypeError: object of type 'int' has no len() run log |