{
  "query": {
    "kind": "year",
    "from": "2026-01-01T00:00:00.000Z",
    "to": "2026-12-31T23:59:59.999Z",
    "year": 2026,
    "filters": []
  },
  "count": 941,
  "occurrences": [
    {
      "contest_id": "arrl-straight-key-night",
      "name": "ARRL Straight Key Night",
      "start": "2026-01-01T00:00:00Z",
      "end": "2026-01-01T23:59:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 23.98,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "60m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m",
        "2m",
        "1.25m",
        "70cm",
        "33cm",
        "23cm",
        "13cm",
        "3cm"
      ],
      "bands_note": "All authorized amateur frequencies; activity traditionally centres on HF",
      "sponsor": "ARRL",
      "rules_url": "http://www.arrl.org/straight-key-night",
      "verified": true,
      "note": "",
      "exchange": "",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-21",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "arrl-straight-key-night-20260101T0000@contestcal",
      "start_date": "2026-01-01",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "60m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m",
        "VHF+"
      ],
      "duration_bucket": "12-24"
    },
    {
      "contest_id": "sartg-new-year-rtty",
      "name": "SARTG New Year RTTY Contest",
      "start": "2026-01-01T08:00:00Z",
      "end": "2026-01-01T11:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 3,
      "modes": [
        "RTTY"
      ],
      "submodes": [],
      "bands": [
        "80m",
        "40m"
      ],
      "bands_note": "",
      "sponsor": "SARTG (Scandinavian Amateur Radio Teleprinter Group)",
      "rules_url": "https://www.sartg.com/contest/nyrules.htm",
      "verified": true,
      "note": "",
      "exchange": "RST + QSO number starting with 001 + name + 'Happy New Year' in your native language (abbreviations like 'HNY' are not allowed)",
      "country": "SE",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-12",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "sartg-new-year-rtty-20260101T0800@contestcal",
      "start_date": "2026-01-01",
      "mode_families": [
        "RTTY",
        "Digital"
      ],
      "band_families": [
        "80m",
        "40m"
      ],
      "duration_bucket": "2-12"
    },
    {
      "contest_id": "agcw-hnyc",
      "name": "AGCW Happy New Year Contest (HNY)",
      "start": "2026-01-01T09:00:00Z",
      "end": "2026-01-01T12:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 3,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "80m",
        "40m",
        "20m"
      ],
      "bands_note": "",
      "sponsor": "AGCW-DL",
      "rules_url": "https://www.agcw.de/contest/hnyc/",
      "verified": true,
      "note": "Log deadline is a fixed calendar date -- '14. Januar 24:00 MEZ' -- not an interval after the contest, so log_deadline_days is deliberately unset.",
      "exchange": "RST + running 3-digit QSO number from 001 (AGCW members also send their membership number, e.g. 599 067/2583)",
      "country": "DE",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-12",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "agcw-hnyc-20260101T0900@contestcal",
      "start_date": "2026-01-01",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "80m",
        "40m",
        "20m"
      ],
      "duration_bucket": "2-12"
    },
    {
      "contest_id": "agcw-vhf-uhf",
      "name": "AGCW VHF/UHF Contest",
      "start": "2026-01-01T14:00:00Z",
      "end": "2026-01-01T17:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 3,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "2m",
        "70cm"
      ],
      "bands_note": "",
      "sponsor": "AGCW-DL",
      "rules_url": "https://www.agcw.de/contest/vhf-uhf/",
      "verified": true,
      "note": "Four dates a year, each with two back-to-back sessions on different bands: the first session is 2 m only, the second 70 cm only. Encoded as two sessions off one anchor, so eight occurrences a year. The per-session band split is not expressible in the current schema -- both bands are listed at contest level.",
      "exchange": "RST + running number + locator",
      "country": "DE",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-12",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "agcw-vhf-uhf-20260101T1400@contestcal",
      "start_date": "2026-01-01",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "VHF+"
      ],
      "duration_bucket": "2-12"
    },
    {
      "contest_id": "agcw-vhf-uhf",
      "name": "AGCW VHF/UHF Contest",
      "start": "2026-01-01T17:00:00Z",
      "end": "2026-01-01T18:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "2m",
        "70cm"
      ],
      "bands_note": "",
      "sponsor": "AGCW-DL",
      "rules_url": "https://www.agcw.de/contest/vhf-uhf/",
      "verified": true,
      "note": "Four dates a year, each with two back-to-back sessions on different bands: the first session is 2 m only, the second 70 cm only. Encoded as two sessions off one anchor, so eight occurrences a year. The per-session band split is not expressible in the current schema -- both bands are listed at contest level.",
      "exchange": "RST + running number + locator",
      "country": "DE",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-12",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "agcw-vhf-uhf-20260101T1700@contestcal",
      "start_date": "2026-01-01",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "VHF+"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "irts-80m-counties",
      "name": "IRTS 80m Counties Contest",
      "start": "2026-01-01T17:00:00Z",
      "end": "2026-01-01T18:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW",
        "SSB"
      ],
      "submodes": [],
      "bands": [
        "80m"
      ],
      "bands_note": "CW 3510-3560 kHz; SSB 3600-3650 and 3700-3775 kHz.",
      "sponsor": "IRTS",
      "rules_url": "https://www.irts.ie/cgi/st.cgi?r_hfcrules.html",
      "verified": true,
      "note": "THIS RECORD WAS WRONG IN EVERY FIELD THAT MATTERED AND IS REWRITTEN. It was carried as the third Sunday of June, 1300-1500 UTC, with NO source_note at all -- a stub whose rule, month, weekday, hour and duration were all invented. IRTS runs it three times a year for ONE HOUR each: 1 January, 18 March and 21 October in 2026. Nothing about the old record survived contact with the sponsor's own calendar.\n\nIt was flagged `verified: false` throughout, which is the only reason it was not a lie -- and it is exactly why the registry entry said 'that record is unverified; source it'. An unverified record is a promise to come back, and this is what coming back found.\n\nMANUAL, AND THE NEW YEAR ROUND KEEPS ITS OWN HOUR. The January running is at 1700 UTC and the other two at 2000, so the record's default is 2000 and 1 January carries an override. There is no ordinal to derive: a fixed New Year's Day round and two Wednesday evenings in March and October are not one pattern.",
      "exchange": "EI and GI stations send a signal report, a serial number starting at 001 and their county. Everyone else sends the report and serial only.",
      "country": "IE",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-23",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "irts-80m-counties-20260101T1700@contestcal",
      "start_date": "2026-01-01",
      "mode_families": [
        "CW",
        "SSB"
      ],
      "band_families": [
        "80m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "skcc-skse",
      "name": "SKCC Straight Key Sprint Europe (SKSE)",
      "start": "2026-01-01T20:00:00Z",
      "end": "2026-01-01T22:00:00Z",
      "start_wall": "2026-01-01T21:00:00",
      "end_wall": "2026-01-01T23:00:00",
      "local_rolling": false,
      "timezone": "Europe/Berlin",
      "duration_hours": 2,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m",
        "6m"
      ],
      "bands_note": "160 through 6 m excluding the WARC bands -- SKCC names 60, 30, 17 and 12 m as excluded.",
      "sponsor": "Straight Key Century Club",
      "rules_url": "https://www.skccgroup.com/operating_activities/skse/",
      "verified": true,
      "note": "SKCC PRINTS TWO UTC TIMES AND THE CONTEST HAS ONE LOCAL TIME. 2000Z from November to March and 1900Z from April to October are both 2100 in central Europe: CET is UTC+1 and CEST is UTC+2. So this is not a contest that changes its hour twice a year, it is a contest at nine in the evening that Europe's clocks move around, and it is recorded the way the sponsor means it -- `timezone: Europe/Berlin` with wall_clock times, exactly as the ARS Spartan Sprint is recorded in New York.\n\nTHAT READING IS TESTABLE AND IT PASSES ON THE MONTHS THAT DECIDE IT. Europe changes clocks on the last Sunday of March and of October, and the first Thursday of both months falls on the near side of the change: March is still CET and resolves to 2000Z, April is CEST and resolves to 1900Z, October is still CEST at 1900Z, November is CET at 2000Z. All four match SKCC's own table, which is what makes this one rule rather than two.\n\nEncoding it as two records split by month -- winter and summer -- would have produced two entries with the same name and hidden the reason. Encoding one UTC time would have been wrong for five months of the year.\n\nStraight keys, sideswipers and bugs only: no keyer, no keyboard. That is the club's whole premise rather than a category.\n\nThe fifteen-minute QRS extensions at each end are not in the window: they are an invitation to slow operators rather than part of the scored period.",
      "exchange": "RST, QTH, the operator's name and the SKCC number. Non-members send 'none' for the number.",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-23",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": "2026-01-08T22:00:00Z",
      "uid": "skcc-skse-20260101T2000@contestcal",
      "start_date": "2026-01-01",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m",
        "6m"
      ],
      "duration_bucket": "2-12"
    },
    {
      "contest_id": "jarl-new-year-qso-party",
      "name": "New Year QSO Party",
      "start": "2026-01-02T00:00:00Z",
      "end": "2026-01-07T12:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 132,
      "modes": [
        "Mixed"
      ],
      "submodes": [],
      "bands": [],
      "bands_note": "",
      "sponsor": "JARL",
      "rules_url": "https://www.jarl.org/English/4_Library/A-4-3_Contests/qsoparty_rule_eng.html",
      "verified": false,
      "note": "BANDS UNRECORDED, NOT UNBANDED. JARL states only 'All bands and Modes permitted for JA amateur radio stations' and points at the Japanese band plan, so there is no band list to record and every band filter on this site excludes this record. VERIFIED:FALSE because JARL publishes the 79th party's dates but no recurrence rule -- January 2 is what the 2026 page says, not a rule JARL has stated.",
      "exchange": "RS(T) or a signal strength report plus the operator's name (a handle or initials is acceptable)",
      "country": "JP",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-17",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "jarl-new-year-qso-party-20260102T0000@contestcal",
      "start_date": "2026-01-02",
      "mode_families": [
        "CW",
        "SSB",
        "FM",
        "RTTY",
        "Digital",
        "FT8/FT4",
        "Mixed"
      ],
      "band_families": [],
      "duration_bucket": "gte24"
    },
    {
      "contest_id": "nccc-ns-ft4",
      "name": "NCCC FT4 Sprint (FT4 NS)",
      "start": "2026-01-02T01:00:00Z",
      "end": "2026-01-02T01:30:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.5,
      "modes": [
        "FT8/FT4"
      ],
      "submodes": [
        "FT4"
      ],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "Northern California Contest Club (NCCC)",
      "rules_url": "https://www.ncccsprint.com/ft4ns.html",
      "verified": true,
      "note": "NCCC describes these as 'nominal rules' that may be modified on a weekly basis, and runs formal Ladder seasons interspersed with practice weeks. The 30-minute session slot itself is fixed.",
      "exchange": "Grid square (following NA VHF, WW Digi and ARRL IDC practice)",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "nccc-ns-ft4-20260102T0100@contestcal",
      "start_date": "2026-01-02",
      "mode_families": [
        "Digital",
        "FT8/FT4"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "nccc-ns-rtty",
      "name": "NCCC RTTY Sprint (RTTY NS)",
      "start": "2026-01-02T01:45:00Z",
      "end": "2026-01-02T02:15:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.5,
      "modes": [
        "RTTY"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m"
      ],
      "bands_note": "",
      "sponsor": "Northern California Contest Club (NCCC)",
      "rules_url": "https://ncccsprint.com/rttyns.html",
      "verified": true,
      "note": "NCCC describes these as 'nominal rules' that may be modified on a weekly basis, and runs formal Ladder seasons interspersed with practice weeks. The 30-minute session slot itself is fixed.",
      "exchange": "Serial number + name + QTH (both callsigns required in the exchange)",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "nccc-ns-rtty-20260102T0145@contestcal",
      "start_date": "2026-01-02",
      "mode_families": [
        "RTTY",
        "Digital"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "nccc-ns-cw",
      "name": "NCCC Sprint (NS)",
      "start": "2026-01-02T02:30:00Z",
      "end": "2026-01-02T03:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.5,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m"
      ],
      "bands_note": "",
      "sponsor": "Northern California Contest Club (NCCC)",
      "rules_url": "https://ncccsprint.com/rules.html",
      "verified": true,
      "note": "NCCC describes these as 'nominal rules' that may be modified on a weekly basis, and runs formal Ladder seasons interspersed with practice weeks. The 30-minute session slot itself is fixed.",
      "exchange": "Serial number + name + QTH (both callsigns required in the exchange)",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "nccc-ns-cw-20260102T0230@contestcal",
      "start_date": "2026-01-02",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "podxs-pskfest",
      "name": "PODXS 070 Club PSKfest",
      "start": "2026-01-03T00:00:00Z",
      "end": "2026-01-03T23:59:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 23.98,
      "modes": [
        "Digital"
      ],
      "submodes": [
        "PSK31"
      ],
      "bands": [
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "",
      "sponsor": "PODXS 070 Club",
      "rules_url": "https://www.podxs070.com/o7o-club-sponsored-contests/pskfest",
      "verified": true,
      "note": "",
      "exchange": "State/province/country (SPC)",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-12",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": "2026-01-10T23:59:00Z",
      "uid": "podxs-pskfest-20260103T0000@contestcal",
      "start_date": "2026-01-03",
      "mode_families": [
        "Digital"
      ],
      "band_families": [
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "12-24"
    },
    {
      "contest_id": "erau-es-ll-kv",
      "name": "Estonian HF Cup (ES LL KV)",
      "start": "2026-01-03T08:00:00Z",
      "end": "2026-01-03T08:59:00Z",
      "start_wall": "2026-01-03T10:00:00",
      "end_wall": "2026-01-03T10:59:00",
      "local_rolling": false,
      "timezone": "Europe/Tallinn",
      "duration_hours": 0.98,
      "modes": [
        "CW",
        "SSB"
      ],
      "submodes": [],
      "bands": [
        "80m"
      ],
      "bands_note": "CW below 3600 kHz and SSB above it; 3530-3560 kHz and 3600-3650 kHz are recommended.",
      "sponsor": "ERAU",
      "rules_url": "https://www.erau.ee/images/LL/ES%20LL%20KV%20reeglid.pdf",
      "verified": true,
      "note": "SPONSOR-ANCHORED LOCAL TIME, and ERAU's own calendar proves the reading: 10:00-10:59 Estonian time is 08:00-08:59 UTC in winter (EET) and 07:00-07:59 in summer (EEST), which is exactly the split ERAU prints across the nine stages. The rules give no date rule at all -- 4.2 defers to the calendar plan -- so the dates are manual and taken from ERAU's published 2026 calendar. Eight of the nine are the first Saturday of their month; February's is the second. The log deadline is 'the Thursday of the following week', which is not a fixed number of days from the end of each stage, so it is recorded here rather than as log_deadline_days. Stages 4.3 also splits each hour into four periods; that is a scoring device inside one continuous hour.",
      "exchange": "RS(T) and a continuous serial number from 001.",
      "country": "EE",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-19",
      "can_enter": false,
      "eligibility_scope": "entity_list",
      "eligibility_reason": "Entry limited to ES. K stations may be worked but cannot submit an entry.",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "erau-es-ll-kv-20260103T0800@contestcal",
      "start_date": "2026-01-03",
      "mode_families": [
        "CW",
        "SSB"
      ],
      "band_families": [
        "80m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "rsgb-afs-cw",
      "name": "RSGB AFS Contest, CW",
      "start": "2026-01-03T13:00:00Z",
      "end": "2026-01-03T17:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 4,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "80m",
        "40m"
      ],
      "bands_note": "80 m and 40 m. CW 3510-3570 and 7000-7040 kHz; SSB 3600-3775 and 7060-7200 kHz; PSK63 3580-3590 and 7040-7045 kHz; RTTY 3590-3620 and 7045-7060 kHz.",
      "sponsor": "RSGB Contest Committee",
      "rules_url": "https://www.rsgbcc.org/hf/rules/2026/rafs.shtml",
      "verified": true,
      "note": "ALL THREE HANG OFF ONE ANCHOR, WHICH IS WHAT FIVE YEARS OF RSGB'S DATES SHOW. The AFS CW Saturday is the anchor; Datamodes is the Sunday eight days later and SSB the Saturday fourteen days later. No consistent ordinal describes Datamodes on its own -- it is the third Sunday in 2022 and 2023 and the second in 2024, 2025 and 2026 -- so encoding it as an ordinal would have been wrong in two of the five years RSGB published.\n\nTHE 1 JANUARY EXCEPTION IS EVIDENCED, NOT ASSUMED. 1 January 2022 was itself a Saturday and RSGB ran AFS CW on the 8th, so `exclude_dates: [[1, 1]]` is what reproduces that year -- the same shape ARRL RTTY Roundup states outright for its own New Year clash. RSGB does not state it in words, but unlike TRAC's equivalent this is not a single year's evidence fitted to a rule: it is the only reading that fits all five years across all three contests. It next decides anything in 2028.\n\nPREVIOUSLY UNVERIFIED, AND THE GUESS WAS RIGHT ABOUT THE RULE AND WRONG ABOUT NOTHING ELSE. This record was carried with a guessed rules URL that 404'd, and the note asked someone to find the real page under rsgbcc.org/hf/. It is at /hf/rules/{year}/rafs.shtml, which is now the record's rules_url_pattern. The first-Saturday recurrence and the 1300-1700 times the record already held were correct; what was missing was the 1 January exception, and the two sibling contests.",
      "exchange": "RS(T) plus a serial number starting at 1 and incrementing by 1, irrespective of band.",
      "country": "GB",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-19",
      "can_enter": false,
      "eligibility_scope": "entity_list",
      "eligibility_reason": "Entry limited to G. K stations may be worked but cannot submit an entry.",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "rsgb-afs-cw-20260103T1300@contestcal",
      "start_date": "2026-01-03",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "80m",
        "40m"
      ],
      "duration_bucket": "2-12"
    },
    {
      "contest_id": "arrl-kids-day-jan",
      "name": "ARRL Kids Day (January)",
      "start": "2026-01-03T18:00:00Z",
      "end": "2026-01-03T23:59:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 5.98,
      "modes": [
        "SSB"
      ],
      "submodes": [],
      "bands": [
        "80m",
        "40m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m"
      ],
      "bands_note": "Suggested frequencies on each band, for example 28.350-28.400 MHz on 10 m. Local repeaters may also be used with the owner's permission.",
      "sponsor": "ARRL",
      "rules_url": "http://www.arrl.org/kids-day",
      "verified": false,
      "note": "UNVERIFIED ON PURPOSE, AND THE HEDGE IS ARRL'S OWN. Their page says 'GENERALLY the first Saturday in January' -- and ARRL's Generic Contest Calendar, which states every other ARRL recurrence flatly, lists only the June running and gives it as 'Third Saturday in June' with no hedge at all. So the January date is stated once, softly, in one place. The record carries the hedge as a hedge rather than promoting it to a rule.\n\nThe catalog held the June running from the first seeding pass and never had this one, from a sponsor with 21 encoded records -- which is the gap audit's second finding in miniature: the bias was not only across sponsors but WITHIN them.",
      "exchange": "Name, age, location and favourite colour.",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-21",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "arrl-kids-day-jan-20260103T1800@contestcal",
      "start_date": "2026-01-03",
      "mode_families": [
        "SSB"
      ],
      "band_families": [
        "80m",
        "40m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m"
      ],
      "duration_bucket": "2-12"
    },
    {
      "contest_id": "arrl-rtty-roundup",
      "name": "ARRL RTTY Roundup",
      "start": "2026-01-03T18:00:00Z",
      "end": "2026-01-04T23:59:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 29.98,
      "modes": [
        "RTTY"
      ],
      "submodes": [],
      "bands": [
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "",
      "sponsor": "ARRL",
      "rules_url": "http://www.arrl.org/rtty-roundup",
      "verified": true,
      "note": "",
      "exchange": "",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-21",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "arrl-rtty-roundup-20260103T1800@contestcal",
      "start_date": "2026-01-03",
      "mode_families": [
        "RTTY",
        "Digital"
      ],
      "band_families": [
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "gte24"
    },
    {
      "contest_id": "lrmd-vytautas-magnus",
      "name": "Vytautas Magnus Contest (VMC)",
      "start": "2026-01-04T07:00:00Z",
      "end": "2026-01-04T07:59:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.98,
      "modes": [
        "CW",
        "SSB",
        "FM"
      ],
      "submodes": [],
      "bands": [
        "80m",
        "2m"
      ],
      "bands_note": "80m CW 3510-3600 kHz and SSB 3600-3700 kHz; 2m calling frequencies CW 144.050, SSB 144.300 and FM 145.500 MHz.",
      "sponsor": "LRMD",
      "rules_url": "https://lrmd.lt/vmc/",
      "verified": true,
      "note": "Encoded as the first Sunday in January, which gives 4 January 2026 -- the date LRMD prints. CAVEAT: LRMD's two wordings diverge in the years when 1 January is itself a Sunday. 'The first Sunday AFTER New Year's Day' would then be the 8th, while the first Sunday IN January is the 1st. No such year has been published by LRMD, so neither reading can be tested against a sponsor date; the first-Sunday reading is encoded and the divergence recorded rather than resolved. FM is in submodes because it is not in the catalog's mode vocabulary.",
      "exchange": "RS(T), a serial number from 001 and a six-character WW locator.",
      "country": "LT",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-19",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": "2026-01-05T07:59:00Z",
      "uid": "lrmd-vytautas-magnus-20260104T0700@contestcal",
      "start_date": "2026-01-04",
      "mode_families": [
        "CW",
        "SSB",
        "FM"
      ],
      "band_families": [
        "80m",
        "VHF+"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "k1usn-sst",
      "name": "K1USN Slow Speed Test (SST)",
      "start": "2026-01-05T00:00:00Z",
      "end": "2026-01-05T01:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "",
      "sponsor": "K1USN Radio Club",
      "rules_url": "https://www.k1usn.com/sst_rules.html",
      "verified": true,
      "note": "No formal log submission -- participants post scores to 3830scores.com.",
      "exchange": "Name + state/province/DX country",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "k1usn-sst-20260105T0000@contestcal",
      "start_date": "2026-01-05",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "agcw-zap-merit",
      "name": "AGCW ZAP Merit Contest (ZMC)",
      "start": "2026-01-05T17:40:00Z",
      "end": "2026-01-05T18:30:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.83,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "80m"
      ],
      "bands_note": "",
      "sponsor": "AGCW-DL",
      "rules_url": "https://www.agcw.de/contest/tzap/",
      "verified": false,
      "note": "PARTLY UNVERIFIED. The recurrence (every Monday), the 1740 UTC pre-logging opening and the 1800 UTC telegram transmission are all quoted from AGCW. AGCW publishes NO closing time. The 1830 end stored here is a PLACEHOLDER so the record expands -- it is not a sponsor fact and must not be presented as one. Confirm the session length with the ZMC manager before shipping. Points accumulate over a calendar year; logs are due 31 January of the following year.",
      "exchange": "Callsign + date + time + RST (SWLs log RST of both stations in a QSO)",
      "country": "DE",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-12",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "agcw-zap-merit-20260105T1740@contestcal",
      "start_date": "2026-01-05",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "80m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "ars-spartan-sprint",
      "name": "ARS Spartan Sprint",
      "start": "2026-01-06T01:00:00Z",
      "end": "2026-01-06T03:00:00Z",
      "start_wall": "2026-01-05T20:00:00",
      "end_wall": "2026-01-05T22:00:00",
      "local_rolling": false,
      "timezone": "America/New_York",
      "duration_hours": 2,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "",
      "sponsor": "Adventure Radio Society",
      "rules_url": "https://ars-qrp.com/Spartan_Sprint/Spartan_Sprint.html",
      "verified": true,
      "note": "CORRECTION (anchor): previously encoded as the first TUESDAY of the month. The sponsor's rule is the first MONDAY US local, which lands on Tuesday UTC -- and those are different dates whenever the 1st falls on a Tuesday (Sep and Dec 2026). SPONSOR-ANCHORED LOCAL TIME: ARS publishes no UTC time and states the event 'is always at these Local Times', so the UTC instant is what moves -- 0100Z Tuesday under EST, 0000Z Tuesday under EDT. Resolved through America/New_York rather than hardcoded, so DST is handled. ARS lists Eastern, Central, Mountain and Pacific times that are the same instant in every zone that observes DST; Arizona, which does not, is the one place the sponsor's own table is inconsistent.",
      "exchange": "RST + state/province + power output",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "ars-spartan-sprint-20260106T0100@contestcal",
      "start_date": "2026-01-06",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "2-12"
    },
    {
      "contest_id": "cwops-cwt",
      "name": "CWops Test (CWT)",
      "start": "2026-01-07T13:00:00Z",
      "end": "2026-01-07T14:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "CWops",
      "rules_url": "https://cwops.org/cwops-tests/",
      "verified": true,
      "note": "",
      "exchange": "Members: name + CWops number. Non-members: name + state/province/DX prefix.",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "cwops-cwt-20260107T1300@contestcal",
      "start_date": "2026-01-07",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "cwops-cwt",
      "name": "CWops Test (CWT)",
      "start": "2026-01-07T19:00:00Z",
      "end": "2026-01-07T20:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "CWops",
      "rules_url": "https://cwops.org/cwops-tests/",
      "verified": true,
      "note": "",
      "exchange": "Members: name + CWops number. Non-members: name + state/province/DX prefix.",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "cwops-cwt-20260107T1900@contestcal",
      "start_date": "2026-01-07",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "cwops-cwt",
      "name": "CWops Test (CWT)",
      "start": "2026-01-08T03:00:00Z",
      "end": "2026-01-08T04:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "CWops",
      "rules_url": "https://cwops.org/cwops-tests/",
      "verified": true,
      "note": "",
      "exchange": "Members: name + CWops number. Non-members: name + state/province/DX prefix.",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "cwops-cwt-20260108T0300@contestcal",
      "start_date": "2026-01-08",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "cwops-cwt",
      "name": "CWops Test (CWT)",
      "start": "2026-01-08T07:00:00Z",
      "end": "2026-01-08T08:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "CWops",
      "rules_url": "https://cwops.org/cwops-tests/",
      "verified": true,
      "note": "",
      "exchange": "Members: name + CWops number. Non-members: name + state/province/DX prefix.",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "cwops-cwt-20260108T0700@contestcal",
      "start_date": "2026-01-08",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "nccc-ns-ft4",
      "name": "NCCC FT4 Sprint (FT4 NS)",
      "start": "2026-01-09T01:00:00Z",
      "end": "2026-01-09T01:30:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.5,
      "modes": [
        "FT8/FT4"
      ],
      "submodes": [
        "FT4"
      ],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "Northern California Contest Club (NCCC)",
      "rules_url": "https://www.ncccsprint.com/ft4ns.html",
      "verified": true,
      "note": "NCCC describes these as 'nominal rules' that may be modified on a weekly basis, and runs formal Ladder seasons interspersed with practice weeks. The 30-minute session slot itself is fixed.",
      "exchange": "Grid square (following NA VHF, WW Digi and ARRL IDC practice)",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "nccc-ns-ft4-20260109T0100@contestcal",
      "start_date": "2026-01-09",
      "mode_families": [
        "Digital",
        "FT8/FT4"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "nccc-ns-rtty",
      "name": "NCCC RTTY Sprint (RTTY NS)",
      "start": "2026-01-09T01:45:00Z",
      "end": "2026-01-09T02:15:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.5,
      "modes": [
        "RTTY"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m"
      ],
      "bands_note": "",
      "sponsor": "Northern California Contest Club (NCCC)",
      "rules_url": "https://ncccsprint.com/rttyns.html",
      "verified": true,
      "note": "NCCC describes these as 'nominal rules' that may be modified on a weekly basis, and runs formal Ladder seasons interspersed with practice weeks. The 30-minute session slot itself is fixed.",
      "exchange": "Serial number + name + QTH (both callsigns required in the exchange)",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "nccc-ns-rtty-20260109T0145@contestcal",
      "start_date": "2026-01-09",
      "mode_families": [
        "RTTY",
        "Digital"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "nccc-ns-cw",
      "name": "NCCC Sprint (NS)",
      "start": "2026-01-09T02:30:00Z",
      "end": "2026-01-09T03:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.5,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m"
      ],
      "bands_note": "",
      "sponsor": "Northern California Contest Club (NCCC)",
      "rules_url": "https://ncccsprint.com/rules.html",
      "verified": true,
      "note": "NCCC describes these as 'nominal rules' that may be modified on a weekly basis, and runs formal Ladder seasons interspersed with practice weeks. The 30-minute session slot itself is fixed.",
      "exchange": "Serial number + name + QTH (both callsigns required in the exchange)",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "nccc-ns-cw-20260109T0230@contestcal",
      "start_date": "2026-01-09",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "pears-national-vhf-uhf",
      "name": "PEARS National VHF/UHF Contest",
      "start": "2026-01-09T16:00:00Z",
      "end": "2026-01-10T14:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 22,
      "modes": [
        "CW",
        "SSB",
        "FM",
        "Digital"
      ],
      "submodes": [],
      "bands": [
        "6m",
        "2m",
        "70cm",
        "23cm"
      ],
      "bands_note": "50, 70, 144, 432 and 1296 MHz, each split into SSB/CW, digital and FM channels -- for example 144.200-144.250 SSB/CW, 144.250-144.300 digital, 144.350-144.400 FM. The 70 MHz (4 m) band is in PEARS's list but has no token in this catalog's band vocabulary, so it is recorded only here.",
      "sponsor": "Port Elizabeth Amateur Radio Society (PEARS)",
      "rules_url": "https://mysarl.org.za/wp-content/uploads/2025/12/2026-SARL-Contest-Manual-Version-1.1-2025-12-15.pdf",
      "verified": true,
      "note": "TWO SESSIONS, NOT ONE 44-HOUR BLOCK, and the distinction is the sponsor's own: PEARS scores them separately and says so. They are back to back -- the second 'commences immediately after' the first ends at 14:00 UTC Saturday -- so a single 44-hour occurrence would draw the same bar on the rail and lose the fact that they are two scored periods. The anchor is the 2nd FRIDAY of January, which is how PEARS phrases it. Sourced from the SARL Contest Manual, which carries this contest's full rules and names its organising body -- the venue in which South African clubs publish their rules, not a listing of them. See data/sources.md, 'Nine South African clubs, one manual'.",
      "exchange": "A signal report and locator, per the contest's channel plan.",
      "country": "ZA",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-19",
      "can_enter": false,
      "eligibility_scope": "entity_list",
      "eligibility_reason": "Entry limited to ZS, V5, A2, Z2, C9, 7P, 3DA. K stations may be worked but cannot submit an entry.",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "pears-national-vhf-uhf-20260109T1600@contestcal",
      "start_date": "2026-01-09",
      "mode_families": [
        "CW",
        "SSB",
        "FM",
        "Digital"
      ],
      "band_families": [
        "6m",
        "VHF+"
      ],
      "duration_bucket": "12-24"
    },
    {
      "contest_id": "k1usn-sst",
      "name": "K1USN Slow Speed Test (SST)",
      "start": "2026-01-09T20:00:00Z",
      "end": "2026-01-09T21:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "",
      "sponsor": "K1USN Radio Club",
      "rules_url": "https://www.k1usn.com/sst_rules.html",
      "verified": true,
      "note": "No formal log submission -- participants post scores to 3830scores.com.",
      "exchange": "Name + state/province/DX country",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "k1usn-sst-20260109T2000@contestcal",
      "start_date": "2026-01-09",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "skcc-wes",
      "name": "SKCC Weekend Sprintathon (WES)",
      "start": "2026-01-10T12:00:00Z",
      "end": "2026-01-11T23:59:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 35.98,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "Straight Key Century Club",
      "rules_url": "https://www.skccgroup.com/operating_activities/weekend_sprintathon/",
      "verified": true,
      "note": "Older sources describe the anchor as 'the Saturday following the 6th', which differs from '2nd Saturday' in some months. SKCC's current page says 2nd Saturday; re-check if dates drift.",
      "exchange": "RST + state/province/country + name + SKCC number (C/T/S suffix for award holders)",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "skcc-wes-20260110T1200@contestcal",
      "start_date": "2026-01-10",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m",
        "6m"
      ],
      "duration_bucket": "gte24"
    },
    {
      "contest_id": "uba-psk63-prefix",
      "name": "UBA PSK63 Prefix Contest",
      "start": "2026-01-10T12:00:00Z",
      "end": "2026-01-11T11:59:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 23.98,
      "modes": [
        "Digital"
      ],
      "submodes": [
        "BPSK63"
      ],
      "bands": [
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "",
      "sponsor": "UBA",
      "rules_url": "https://www.uba.be/en/hf/contest-rules/uba-psk63-prefix-contest",
      "verified": true,
      "note": "The stated deadline instant (17 January 2027 23:59 UTC) is the right date for the seven-day interval UBA states but 23:59 rather than the 11:59 that end-plus-7-days gives. The interval is the rule, so the interval is encoded. Nothing distinguishes 'the 2nd weekend of january' from 'the second full weekend' in either published year, so the full-weekend form is used and no claim is made that UBA meant one rather than the other.",
      "exchange": "Stations outside Belgium send RSQ + a serial number starting with 001; stations in Belgium send RSQ + the three-letter code of their UBA section (non-members send XXX, the national stations send UBA).",
      "country": "BE",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-18",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": "2026-01-18T11:59:00Z",
      "uid": "uba-psk63-prefix-20260110T1200@contestcal",
      "start_date": "2026-01-10",
      "mode_families": [
        "Digital"
      ],
      "band_families": [
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "12-24"
    },
    {
      "contest_id": "pears-national-vhf-uhf",
      "name": "PEARS National VHF/UHF Contest",
      "start": "2026-01-10T14:00:00Z",
      "end": "2026-01-11T12:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 22,
      "modes": [
        "CW",
        "SSB",
        "FM",
        "Digital"
      ],
      "submodes": [],
      "bands": [
        "6m",
        "2m",
        "70cm",
        "23cm"
      ],
      "bands_note": "50, 70, 144, 432 and 1296 MHz, each split into SSB/CW, digital and FM channels -- for example 144.200-144.250 SSB/CW, 144.250-144.300 digital, 144.350-144.400 FM. The 70 MHz (4 m) band is in PEARS's list but has no token in this catalog's band vocabulary, so it is recorded only here.",
      "sponsor": "Port Elizabeth Amateur Radio Society (PEARS)",
      "rules_url": "https://mysarl.org.za/wp-content/uploads/2025/12/2026-SARL-Contest-Manual-Version-1.1-2025-12-15.pdf",
      "verified": true,
      "note": "TWO SESSIONS, NOT ONE 44-HOUR BLOCK, and the distinction is the sponsor's own: PEARS scores them separately and says so. They are back to back -- the second 'commences immediately after' the first ends at 14:00 UTC Saturday -- so a single 44-hour occurrence would draw the same bar on the rail and lose the fact that they are two scored periods. The anchor is the 2nd FRIDAY of January, which is how PEARS phrases it. Sourced from the SARL Contest Manual, which carries this contest's full rules and names its organising body -- the venue in which South African clubs publish their rules, not a listing of them. See data/sources.md, 'Nine South African clubs, one manual'.",
      "exchange": "A signal report and locator, per the contest's channel plan.",
      "country": "ZA",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-19",
      "can_enter": false,
      "eligibility_scope": "entity_list",
      "eligibility_reason": "Entry limited to ZS, V5, A2, Z2, C9, 7P, 3DA. K stations may be worked but cannot submit an entry.",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "pears-national-vhf-uhf-20260110T1400@contestcal",
      "start_date": "2026-01-10",
      "mode_families": [
        "CW",
        "SSB",
        "FM",
        "Digital"
      ],
      "band_families": [
        "6m",
        "VHF+"
      ],
      "duration_bucket": "12-24"
    },
    {
      "contest_id": "naqp-cw",
      "name": "North American QSO Party, CW",
      "start": "2026-01-10T18:00:00Z",
      "end": "2026-01-11T05:59:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 11.98,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "",
      "sponsor": "National Contest Journal (NCJ)",
      "rules_url": "https://www.ncjweb.com/NAQP-Rules.pdf",
      "verified": true,
      "note": "",
      "exchange": "Name + state/province/country",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "naqp-cw-20260110T1800@contestcal",
      "start_date": "2026-01-10",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "2-12"
    },
    {
      "contest_id": "darc-10m",
      "name": "DARC 10m Contest",
      "start": "2026-01-11T09:00:00Z",
      "end": "2026-01-11T10:59:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1.98,
      "modes": [
        "SSB",
        "CW"
      ],
      "submodes": [],
      "bands": [
        "10m"
      ],
      "bands_note": "CW 28.000-28.190 kHz, SSB 28.300-28.700 kHz",
      "sponsor": "DARC",
      "rules_url": "https://www.darc.de/der-club/referate/conteste/darc-10m-contest/regeln/",
      "verified": true,
      "note": "The recurrence wording comes from DARC's own superseded pre-2023 Ausschreibung, retained below the current one on the same page; the current Ausschreibung prints a date and no rule. The two agree for 2026, and DARC's KW contest calendar prints the same 11 January.",
      "exchange": "RS(T) + serial from 001; German stations additionally send the DOK of the callsign used, or 'NM' if it has no DOK.",
      "country": "DE",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-18",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": "2026-01-18T10:59:00Z",
      "uid": "darc-10m-20260111T0900@contestcal",
      "start_date": "2026-01-11",
      "mode_families": [
        "CW",
        "SSB"
      ],
      "band_families": [
        "10m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "rsgb-afs-data",
      "name": "RSGB AFS Contest, Datamodes",
      "start": "2026-01-11T13:00:00Z",
      "end": "2026-01-11T17:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 4,
      "modes": [
        "RTTY",
        "Digital"
      ],
      "submodes": [
        "PSK63"
      ],
      "bands": [
        "80m",
        "40m"
      ],
      "bands_note": "80 m and 40 m. CW 3510-3570 and 7000-7040 kHz; SSB 3600-3775 and 7060-7200 kHz; PSK63 3580-3590 and 7040-7045 kHz; RTTY 3590-3620 and 7045-7060 kHz.",
      "sponsor": "RSGB Contest Committee",
      "rules_url": "https://www.rsgbcc.org/hf/rules/2026/rafs.shtml",
      "verified": true,
      "note": "ALL THREE HANG OFF ONE ANCHOR, WHICH IS WHAT FIVE YEARS OF RSGB'S DATES SHOW. The AFS CW Saturday is the anchor; Datamodes is the Sunday eight days later and SSB the Saturday fourteen days later. No consistent ordinal describes Datamodes on its own -- it is the third Sunday in 2022 and 2023 and the second in 2024, 2025 and 2026 -- so encoding it as an ordinal would have been wrong in two of the five years RSGB published.\n\nTHE 1 JANUARY EXCEPTION IS EVIDENCED, NOT ASSUMED. 1 January 2022 was itself a Saturday and RSGB ran AFS CW on the 8th, so `exclude_dates: [[1, 1]]` is what reproduces that year -- the same shape ARRL RTTY Roundup states outright for its own New Year clash. RSGB does not state it in words, but unlike TRAC's equivalent this is not a single year's evidence fitted to a rule: it is the only reading that fits all five years across all three contests. It next decides anything in 2028.",
      "exchange": "RS(T) plus a serial number starting at 1 and incrementing by 1, irrespective of band.",
      "country": "GB",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-19",
      "can_enter": false,
      "eligibility_scope": "entity_list",
      "eligibility_reason": "Entry limited to G. K stations may be worked but cannot submit an entry.",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "rsgb-afs-data-20260111T1300@contestcal",
      "start_date": "2026-01-11",
      "mode_families": [
        "RTTY",
        "Digital"
      ],
      "band_families": [
        "80m",
        "40m"
      ],
      "duration_bucket": "2-12"
    },
    {
      "contest_id": "k1usn-sst",
      "name": "K1USN Slow Speed Test (SST)",
      "start": "2026-01-12T00:00:00Z",
      "end": "2026-01-12T01:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "",
      "sponsor": "K1USN Radio Club",
      "rules_url": "https://www.k1usn.com/sst_rules.html",
      "verified": true,
      "note": "No formal log submission -- participants post scores to 3830scores.com.",
      "exchange": "Name + state/province/DX country",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "k1usn-sst-20260112T0000@contestcal",
      "start_date": "2026-01-12",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "4sqrp-sss",
      "name": "4 States QRP Group Second Sunday Sprint (SSS)",
      "start": "2026-01-12T01:00:00Z",
      "end": "2026-01-12T03:00:00Z",
      "start_wall": "2026-01-11T19:00:00",
      "end_wall": "2026-01-11T21:00:00",
      "local_rolling": false,
      "timezone": "America/Chicago",
      "duration_hours": 2,
      "modes": [
        "CW",
        "SSB",
        "Digital"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "",
      "sponsor": "4 States QRP Group",
      "rules_url": "https://www.4sqrp.com/SSS/sss_rules_revised_02_2026.pdf",
      "verified": true,
      "note": "SPONSOR-ANCHORED LOCAL TIME. The anchor is the second SUNDAY and the sprint runs into Monday UTC. 4SQRP states the consequence itself: '7 PM until 9 PM central time (CST or CDT, whichever is in effect at the time). If you use UTC, that time changes when we switch from CST to CDT (or vice versa).' Resolved through America/Chicago, so it is 0100Z Monday in winter and 0000Z Monday in summer.",
      "exchange": "RST + state/province/country + 4SQRP member number (power if non-member)",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "4sqrp-sss-20260112T0100@contestcal",
      "start_date": "2026-01-12",
      "mode_families": [
        "CW",
        "SSB",
        "Digital"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "2-12"
    },
    {
      "contest_id": "agcw-zap-merit",
      "name": "AGCW ZAP Merit Contest (ZMC)",
      "start": "2026-01-12T17:40:00Z",
      "end": "2026-01-12T18:30:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.83,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "80m"
      ],
      "bands_note": "",
      "sponsor": "AGCW-DL",
      "rules_url": "https://www.agcw.de/contest/tzap/",
      "verified": false,
      "note": "PARTLY UNVERIFIED. The recurrence (every Monday), the 1740 UTC pre-logging opening and the 1800 UTC telegram transmission are all quoted from AGCW. AGCW publishes NO closing time. The 1830 end stored here is a PLACEHOLDER so the record expands -- it is not a sponsor fact and must not be presented as one. Confirm the session length with the ZMC manager before shipping. Points accumulate over a calendar year; logs are due 31 January of the following year.",
      "exchange": "Callsign + date + time + RST (SWLs log RST of both stations in a QSO)",
      "country": "DE",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-12",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "agcw-zap-merit-20260112T1740@contestcal",
      "start_date": "2026-01-12",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "80m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "darc-rtty-kurzcontest",
      "name": "DARC RTTY-Kurzcontest",
      "start": "2026-01-13T18:00:00Z",
      "end": "2026-01-13T19:29:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1.48,
      "modes": [
        "RTTY"
      ],
      "submodes": [
        "RTTY 45.45 baud"
      ],
      "bands": [
        "80m",
        "40m"
      ],
      "bands_note": "",
      "sponsor": "DARC",
      "rules_url": "https://www.darc.de/der-club/referate/conteste/rtty-kurz/rtty-rules/",
      "verified": true,
      "note": "Four legs a year, one record, offset one month from the FT4 contest: RTTY takes the first month of each quarter and FT4 the second, both on the second Tuesday.",
      "exchange": "RST + DOK; German non-members send 'NM'. Stations outside Germany send RST + serial from 001.",
      "country": "DE",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-18",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": "2026-01-20T19:29:00Z",
      "uid": "darc-rtty-kurzcontest-20260113T1800@contestcal",
      "start_date": "2026-01-13",
      "mode_families": [
        "RTTY",
        "Digital"
      ],
      "band_families": [
        "80m",
        "40m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "cwops-cwt",
      "name": "CWops Test (CWT)",
      "start": "2026-01-14T13:00:00Z",
      "end": "2026-01-14T14:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "CWops",
      "rules_url": "https://cwops.org/cwops-tests/",
      "verified": true,
      "note": "",
      "exchange": "Members: name + CWops number. Non-members: name + state/province/DX prefix.",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "cwops-cwt-20260114T1300@contestcal",
      "start_date": "2026-01-14",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "cwops-cwt",
      "name": "CWops Test (CWT)",
      "start": "2026-01-14T19:00:00Z",
      "end": "2026-01-14T20:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "CWops",
      "rules_url": "https://cwops.org/cwops-tests/",
      "verified": true,
      "note": "",
      "exchange": "Members: name + CWops number. Non-members: name + state/province/DX prefix.",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "cwops-cwt-20260114T1900@contestcal",
      "start_date": "2026-01-14",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "cwops-cwt",
      "name": "CWops Test (CWT)",
      "start": "2026-01-15T03:00:00Z",
      "end": "2026-01-15T04:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "CWops",
      "rules_url": "https://cwops.org/cwops-tests/",
      "verified": true,
      "note": "",
      "exchange": "Members: name + CWops number. Non-members: name + state/province/DX prefix.",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "cwops-cwt-20260115T0300@contestcal",
      "start_date": "2026-01-15",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "cwops-cwt",
      "name": "CWops Test (CWT)",
      "start": "2026-01-15T07:00:00Z",
      "end": "2026-01-15T08:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "CWops",
      "rules_url": "https://cwops.org/cwops-tests/",
      "verified": true,
      "note": "",
      "exchange": "Members: name + CWops number. Non-members: name + state/province/DX prefix.",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "cwops-cwt-20260115T0700@contestcal",
      "start_date": "2026-01-15",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "nccc-ns-ft4",
      "name": "NCCC FT4 Sprint (FT4 NS)",
      "start": "2026-01-16T01:00:00Z",
      "end": "2026-01-16T01:30:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.5,
      "modes": [
        "FT8/FT4"
      ],
      "submodes": [
        "FT4"
      ],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "Northern California Contest Club (NCCC)",
      "rules_url": "https://www.ncccsprint.com/ft4ns.html",
      "verified": true,
      "note": "NCCC describes these as 'nominal rules' that may be modified on a weekly basis, and runs formal Ladder seasons interspersed with practice weeks. The 30-minute session slot itself is fixed.",
      "exchange": "Grid square (following NA VHF, WW Digi and ARRL IDC practice)",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "nccc-ns-ft4-20260116T0100@contestcal",
      "start_date": "2026-01-16",
      "mode_families": [
        "Digital",
        "FT8/FT4"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "nccc-ns-rtty",
      "name": "NCCC RTTY Sprint (RTTY NS)",
      "start": "2026-01-16T01:45:00Z",
      "end": "2026-01-16T02:15:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.5,
      "modes": [
        "RTTY"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m"
      ],
      "bands_note": "",
      "sponsor": "Northern California Contest Club (NCCC)",
      "rules_url": "https://ncccsprint.com/rttyns.html",
      "verified": true,
      "note": "NCCC describes these as 'nominal rules' that may be modified on a weekly basis, and runs formal Ladder seasons interspersed with practice weeks. The 30-minute session slot itself is fixed.",
      "exchange": "Serial number + name + QTH (both callsigns required in the exchange)",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "nccc-ns-rtty-20260116T0145@contestcal",
      "start_date": "2026-01-16",
      "mode_families": [
        "RTTY",
        "Digital"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "nccc-ns-cw",
      "name": "NCCC Sprint (NS)",
      "start": "2026-01-16T02:30:00Z",
      "end": "2026-01-16T03:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.5,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m"
      ],
      "bands_note": "",
      "sponsor": "Northern California Contest Club (NCCC)",
      "rules_url": "https://ncccsprint.com/rules.html",
      "verified": true,
      "note": "NCCC describes these as 'nominal rules' that may be modified on a weekly basis, and runs formal Ladder seasons interspersed with practice weeks. The 30-minute session slot itself is fixed.",
      "exchange": "Serial number + name + QTH (both callsigns required in the exchange)",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "nccc-ns-cw-20260116T0230@contestcal",
      "start_date": "2026-01-16",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "k1usn-sst",
      "name": "K1USN Slow Speed Test (SST)",
      "start": "2026-01-16T20:00:00Z",
      "end": "2026-01-16T21:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "",
      "sponsor": "K1USN Radio Club",
      "rules_url": "https://www.k1usn.com/sst_rules.html",
      "verified": true,
      "note": "No formal log submission -- participants post scores to 3830scores.com.",
      "exchange": "Name + state/province/DX country",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "k1usn-sst-20260116T2000@contestcal",
      "start_date": "2026-01-16",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "sarl-qrp-summer",
      "name": "SARL QRP Contest (Summer leg)",
      "start": "2026-01-17T07:00:00Z",
      "end": "2026-01-17T09:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 2,
      "modes": [
        "SSB",
        "CW"
      ],
      "submodes": [],
      "bands": [
        "40m",
        "20m",
        "10m"
      ],
      "bands_note": "40m, 20m and 10m, any of them at any time during the contest. QRP calling frequencies 7.090, 14.285 and 28.360 MHz are suggested.",
      "sponsor": "SARL",
      "rules_url": "https://mysarl.org.za/wp-content/uploads/2025/12/2026-SARL-Contest-Manual-Version-1.1-2025-12-15.pdf",
      "verified": true,
      "note": "The summer leg is the January one -- the seasons are southern hemisphere, so January is summer. One of SARL's four named QRP legs. They are four records rather than one because SARL names four legs by season and they do not share a clock: the Summer and Winter legs run 07:00-09:00 UTC and the Autumn and Spring legs 13:30-15:30, so no single start/end pair covers them. Grouping the two pairs by their times would have been this catalog inventing a structure SARL does not use. log_format and log_deadline_days are absent: this pass read each contest's Aim, Dates, Frequencies and Exchange sections and did not read its Log Sheets section, so neither is recorded rather than assumed from SARL's other contests.",
      "exchange": "Realistic RS(T), 6-character grid square and transmit power in watts (for example 57, KG33uk, 10).",
      "country": "ZA",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-19",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "sarl-qrp-summer-20260117T0700@contestcal",
      "start_date": "2026-01-17",
      "mode_families": [
        "CW",
        "SSB"
      ],
      "band_families": [
        "40m",
        "20m",
        "10m"
      ],
      "duration_bucket": "2-12"
    },
    {
      "contest_id": "mrasz-ha-dx",
      "name": "HA-DX Contest",
      "start": "2026-01-17T12:00:00Z",
      "end": "2026-01-18T12:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 24,
      "modes": [
        "CW",
        "SSB"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "",
      "sponsor": "MRASZ",
      "rules_url": "https://ha-dx.com/en/contest-rules",
      "verified": true,
      "note": "MRASZ states the rule and the year in the same sentence, which is its own check: January 2026's full weekends are the 3rd/4th, 10th/11th, 17th/18th and 24th/25th (31 January's Sunday falls in February), so the third is 17-18 January -- the date the rules print. The contest ends at 12:00 UTC, not 11:59, so the Sunday overlaps the Saturday start by a minute; that is what the rules say.",
      "exchange": "Hungarian stations send RS(T) and their county abbreviation; everyone else sends RS(T) and an incremental serial number.",
      "country": "HU",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-19",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": "2026-01-23T12:00:00Z",
      "uid": "mrasz-ha-dx-20260117T1200@contestcal",
      "start_date": "2026-01-17",
      "mode_families": [
        "CW",
        "SSB"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "gte24"
    },
    {
      "contest_id": "rsgb-afs-ssb",
      "name": "RSGB AFS Contest, SSB",
      "start": "2026-01-17T13:00:00Z",
      "end": "2026-01-17T17:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 4,
      "modes": [
        "SSB"
      ],
      "submodes": [],
      "bands": [
        "80m",
        "40m"
      ],
      "bands_note": "80 m and 40 m. CW 3510-3570 and 7000-7040 kHz; SSB 3600-3775 and 7060-7200 kHz; PSK63 3580-3590 and 7040-7045 kHz; RTTY 3590-3620 and 7045-7060 kHz.",
      "sponsor": "RSGB Contest Committee",
      "rules_url": "https://www.rsgbcc.org/hf/rules/2026/rafs.shtml",
      "verified": true,
      "note": "ALL THREE HANG OFF ONE ANCHOR, WHICH IS WHAT FIVE YEARS OF RSGB'S DATES SHOW. The AFS CW Saturday is the anchor; Datamodes is the Sunday eight days later and SSB the Saturday fourteen days later. No consistent ordinal describes Datamodes on its own -- it is the third Sunday in 2022 and 2023 and the second in 2024, 2025 and 2026 -- so encoding it as an ordinal would have been wrong in two of the five years RSGB published.\n\nTHE 1 JANUARY EXCEPTION IS EVIDENCED, NOT ASSUMED. 1 January 2022 was itself a Saturday and RSGB ran AFS CW on the 8th, so `exclude_dates: [[1, 1]]` is what reproduces that year -- the same shape ARRL RTTY Roundup states outright for its own New Year clash. RSGB does not state it in words, but unlike TRAC's equivalent this is not a single year's evidence fitted to a rule: it is the only reading that fits all five years across all three contests. It next decides anything in 2028.",
      "exchange": "RS(T) plus a serial number starting at 1 and incrementing by 1, irrespective of band.",
      "country": "GB",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-19",
      "can_enter": false,
      "eligibility_scope": "entity_list",
      "eligibility_reason": "Entry limited to G. K stations may be worked but cannot submit an entry.",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "rsgb-afs-ssb-20260117T1300@contestcal",
      "start_date": "2026-01-17",
      "mode_families": [
        "SSB"
      ],
      "band_families": [
        "80m",
        "40m"
      ],
      "duration_bucket": "2-12"
    },
    {
      "contest_id": "naqp-ssb",
      "name": "North American QSO Party, SSB",
      "start": "2026-01-17T18:00:00Z",
      "end": "2026-01-18T05:59:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 11.98,
      "modes": [
        "SSB"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "",
      "sponsor": "National Contest Journal (NCJ)",
      "rules_url": "https://www.ncjweb.com/NAQP-Rules.pdf",
      "verified": true,
      "note": "",
      "exchange": "Name + state/province/country",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "naqp-ssb-20260117T1800@contestcal",
      "start_date": "2026-01-17",
      "mode_families": [
        "SSB"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "2-12"
    },
    {
      "contest_id": "arrl-january-vhf",
      "name": "ARRL January VHF Contest",
      "start": "2026-01-17T19:00:00Z",
      "end": "2026-01-19T03:59:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 32.98,
      "modes": [
        "Mixed"
      ],
      "submodes": [],
      "bands": [
        "6m",
        "2m",
        "1.25m",
        "70cm",
        "33cm",
        "23cm",
        "13cm",
        "3cm"
      ],
      "bands_note": "All authorized frequencies above 50 MHz",
      "sponsor": "ARRL",
      "rules_url": "http://www.arrl.org/january-vhf",
      "verified": false,
      "note": "ARRL states third OR fourth weekend in January -- varies by year. Confirm against current rules annually.",
      "exchange": "",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "VHF+ contest. Scoring depends heavily on local activity and grid density; Florida coverage is thinner than the Northeast.",
      "log_due": null,
      "uid": "arrl-january-vhf-20260117T1900@contestcal",
      "start_date": "2026-01-17",
      "mode_families": [
        "CW",
        "SSB",
        "FM",
        "RTTY",
        "Digital",
        "FT8/FT4",
        "Mixed"
      ],
      "band_families": [
        "6m",
        "VHF+"
      ],
      "duration_bucket": "gte24"
    },
    {
      "contest_id": "k1usn-sst",
      "name": "K1USN Slow Speed Test (SST)",
      "start": "2026-01-19T00:00:00Z",
      "end": "2026-01-19T01:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "",
      "sponsor": "K1USN Radio Club",
      "rules_url": "https://www.k1usn.com/sst_rules.html",
      "verified": true,
      "note": "No formal log submission -- participants post scores to 3830scores.com.",
      "exchange": "Name + state/province/DX country",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "k1usn-sst-20260119T0000@contestcal",
      "start_date": "2026-01-19",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "agcw-zap-merit",
      "name": "AGCW ZAP Merit Contest (ZMC)",
      "start": "2026-01-19T17:40:00Z",
      "end": "2026-01-19T18:30:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.83,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "80m"
      ],
      "bands_note": "",
      "sponsor": "AGCW-DL",
      "rules_url": "https://www.agcw.de/contest/tzap/",
      "verified": false,
      "note": "PARTLY UNVERIFIED. The recurrence (every Monday), the 1740 UTC pre-logging opening and the 1800 UTC telegram transmission are all quoted from AGCW. AGCW publishes NO closing time. The 1830 end stored here is a PLACEHOLDER so the record expands -- it is not a sponsor fact and must not be presented as one. Confirm the session length with the ZMC manager before shipping. Points accumulate over a calendar year; logs are due 31 January of the following year.",
      "exchange": "Callsign + date + time + RST (SWLs log RST of both stations in a QSO)",
      "country": "DE",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-12",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "agcw-zap-merit-20260119T1740@contestcal",
      "start_date": "2026-01-19",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "80m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "rsgb-ft4-series",
      "name": "RSGB FT4 Contest Series",
      "start": "2026-01-19T20:00:00Z",
      "end": "2026-01-19T22:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 2,
      "modes": [
        "FT8/FT4"
      ],
      "submodes": [
        "FT4"
      ],
      "bands": [
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "80, 40, 20, 15 and 10 m.",
      "sponsor": "RSGB Contest Committee",
      "rules_url": "https://www.rsgbcc.org/hf/rules/2026/r80m_ft4.shtml",
      "verified": true,
      "note": "TWELVE MONDAY EVENINGS AND THE CLOCK SHIFTS FOR THE SUMMER: January to March and October to December run 2000-2200 UTC, April to September run 1900-2100. Six legs each way, so the record's default is the winter clock and the summer legs carry their own -- the third contest to need per-date times, after the Autumn Series and the 80m Club Championship.\n\nMANUAL BECAUSE THE DATES ARE NOT ON THE RULES PAGE and follow no ordinal: they are Mondays, but the third Monday in January, the fourth in February, the third in March. RSGB publishes them on its CGI calendar and this record holds what that prints.\n\nNot the same contest as the FT4 International Activity Day in April, which is 24 hours and has its own rules page.",
      "exchange": "A signal report. A serial number is not required.",
      "country": "GB",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-23",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": "2026-01-20T22:00:00Z",
      "uid": "rsgb-ft4-series-20260119T2000@contestcal",
      "start_date": "2026-01-19",
      "mode_families": [
        "Digital",
        "FT8/FT4"
      ],
      "band_families": [
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "2-12"
    },
    {
      "contest_id": "cwops-cwt",
      "name": "CWops Test (CWT)",
      "start": "2026-01-21T13:00:00Z",
      "end": "2026-01-21T14:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "CWops",
      "rules_url": "https://cwops.org/cwops-tests/",
      "verified": true,
      "note": "",
      "exchange": "Members: name + CWops number. Non-members: name + state/province/DX prefix.",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "cwops-cwt-20260121T1300@contestcal",
      "start_date": "2026-01-21",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "cwops-cwt",
      "name": "CWops Test (CWT)",
      "start": "2026-01-21T19:00:00Z",
      "end": "2026-01-21T20:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "CWops",
      "rules_url": "https://cwops.org/cwops-tests/",
      "verified": true,
      "note": "",
      "exchange": "Members: name + CWops number. Non-members: name + state/province/DX prefix.",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "cwops-cwt-20260121T1900@contestcal",
      "start_date": "2026-01-21",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "cwops-cwt",
      "name": "CWops Test (CWT)",
      "start": "2026-01-22T03:00:00Z",
      "end": "2026-01-22T04:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "CWops",
      "rules_url": "https://cwops.org/cwops-tests/",
      "verified": true,
      "note": "",
      "exchange": "Members: name + CWops number. Non-members: name + state/province/DX prefix.",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "cwops-cwt-20260122T0300@contestcal",
      "start_date": "2026-01-22",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "cwops-cwt",
      "name": "CWops Test (CWT)",
      "start": "2026-01-22T07:00:00Z",
      "end": "2026-01-22T08:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "CWops",
      "rules_url": "https://cwops.org/cwops-tests/",
      "verified": true,
      "note": "",
      "exchange": "Members: name + CWops number. Non-members: name + state/province/DX prefix.",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "cwops-cwt-20260122T0700@contestcal",
      "start_date": "2026-01-22",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "nccc-ns-ft4",
      "name": "NCCC FT4 Sprint (FT4 NS)",
      "start": "2026-01-23T01:00:00Z",
      "end": "2026-01-23T01:30:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.5,
      "modes": [
        "FT8/FT4"
      ],
      "submodes": [
        "FT4"
      ],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "Northern California Contest Club (NCCC)",
      "rules_url": "https://www.ncccsprint.com/ft4ns.html",
      "verified": true,
      "note": "NCCC describes these as 'nominal rules' that may be modified on a weekly basis, and runs formal Ladder seasons interspersed with practice weeks. The 30-minute session slot itself is fixed.",
      "exchange": "Grid square (following NA VHF, WW Digi and ARRL IDC practice)",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "nccc-ns-ft4-20260123T0100@contestcal",
      "start_date": "2026-01-23",
      "mode_families": [
        "Digital",
        "FT8/FT4"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "nccc-ns-rtty",
      "name": "NCCC RTTY Sprint (RTTY NS)",
      "start": "2026-01-23T01:45:00Z",
      "end": "2026-01-23T02:15:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.5,
      "modes": [
        "RTTY"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m"
      ],
      "bands_note": "",
      "sponsor": "Northern California Contest Club (NCCC)",
      "rules_url": "https://ncccsprint.com/rttyns.html",
      "verified": true,
      "note": "NCCC describes these as 'nominal rules' that may be modified on a weekly basis, and runs formal Ladder seasons interspersed with practice weeks. The 30-minute session slot itself is fixed.",
      "exchange": "Serial number + name + QTH (both callsigns required in the exchange)",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "nccc-ns-rtty-20260123T0145@contestcal",
      "start_date": "2026-01-23",
      "mode_families": [
        "RTTY",
        "Digital"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "nccc-ns-cw",
      "name": "NCCC Sprint (NS)",
      "start": "2026-01-23T02:30:00Z",
      "end": "2026-01-23T03:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.5,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m"
      ],
      "bands_note": "",
      "sponsor": "Northern California Contest Club (NCCC)",
      "rules_url": "https://ncccsprint.com/rules.html",
      "verified": true,
      "note": "NCCC describes these as 'nominal rules' that may be modified on a weekly basis, and runs formal Ladder seasons interspersed with practice weeks. The 30-minute session slot itself is fixed.",
      "exchange": "Serial number + name + QTH (both callsigns required in the exchange)",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "nccc-ns-cw-20260123T0230@contestcal",
      "start_date": "2026-01-23",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "k1usn-sst",
      "name": "K1USN Slow Speed Test (SST)",
      "start": "2026-01-23T20:00:00Z",
      "end": "2026-01-23T21:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "",
      "sponsor": "K1USN Radio Club",
      "rules_url": "https://www.k1usn.com/sst_rules.html",
      "verified": true,
      "note": "No formal log submission -- participants post scores to 3830scores.com.",
      "exchange": "Name + state/province/DX country",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "k1usn-sst-20260123T2000@contestcal",
      "start_date": "2026-01-23",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "cq-160-cw",
      "name": "CQ 160-Meter Contest, CW",
      "start": "2026-01-23T22:00:00Z",
      "end": "2026-01-25T22:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 48,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m"
      ],
      "bands_note": "1810-2000 kHz in ITU Region 1; 1800-2000 kHz in ITU Regions 2 and 3",
      "sponsor": "CQ Magazine",
      "rules_url": "https://cq160.com/rules/index.htm",
      "verified": true,
      "note": "",
      "exchange": "RS(T) and state for U.S., province for Canada, and CQ Zone for DX",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-16",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": "2026-01-30T22:00:00Z",
      "uid": "cq-160-cw-20260123T2200@contestcal",
      "start_date": "2026-01-23",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m"
      ],
      "duration_bucket": "gte24"
    },
    {
      "contest_id": "ref-coupe-du-ref-cw",
      "name": "Coupe du REF, CW",
      "start": "2026-01-24T06:00:00Z",
      "end": "2026-01-25T18:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 36,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "",
      "sponsor": "REF",
      "rules_url": "https://concours.r-e-f.org/reglements/actuels/reg_cdfhf_fr_20260513.pdf",
      "verified": true,
      "note": "CONTRADICTION IN REF'S OWN DOCUMENT, RECORDED RATHER THAN RECONCILED: section 1(b) scopes these two parts to 'Bandes HF (80-10 m)' and the English rules list '80, 40, 20, 15, 10 m', but section 3(c) of the same PDF says 'Segments concours IARU des bandes 160, 80, 40, 20, 15 et 10 metres'. The document also governs the 160 m sub-part (REF 160 Metres, a separate record here), which is the likely reason the band is listed in 3(c); the 80-10 m reading is encoded because it is the one that scopes these parts specifically and the one the English rules repeat. REF's common HF rules ('Regles communes a tous les concours HF', 6A) state the deadline as '8 (huit) jours apres la fin du concours a minuit heure legale francaise', so the computed instant here is the end plus 8 days rather than French legal midnight.",
      "exchange": "French metropolitan stations send RS(T) + the number of the department where the antenna is located (e.g. 599 69); F6REF, the REF's official station, sends RS(T) + 00. DOM/TOM stations send RS(T) + the prefix of their entity (e.g. 599 FM). Foreign stations send RS(T) + a serial number starting at 001.",
      "country": "FR",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-18",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": "2026-02-02T18:00:00Z",
      "uid": "ref-coupe-du-ref-cw-20260124T0600@contestcal",
      "start_date": "2026-01-24",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "gte24"
    },
    {
      "contest_id": "bartg-sprint",
      "name": "BARTG January Sprint Contest",
      "start": "2026-01-24T12:00:00Z",
      "end": "2026-01-25T11:59:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 23.98,
      "modes": [
        "RTTY"
      ],
      "submodes": [],
      "bands": [
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "",
      "sponsor": "BARTG",
      "rules_url": "https://bartg.org.uk/bartg-sprint-contest/",
      "verified": true,
      "note": "January is the month where 'full weekend' bites hardest: 2032 has five January Saturdays but only four full weekends, and BARTG's own table gives 24 January 2032 -- the fourth full weekend, not the fourth Saturday.",
      "exchange": "Message number only (3 or 4 figures from 001) -- no RST, to shorten the QSO",
      "country": "GB",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-12",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": "2026-02-01T11:59:00Z",
      "uid": "bartg-sprint-20260124T1200@contestcal",
      "start_date": "2026-01-24",
      "mode_families": [
        "RTTY",
        "Digital"
      ],
      "band_families": [
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "12-24"
    },
    {
      "contest_id": "sarl-club-40m",
      "name": "SARL Saturday 40 m Club Contest",
      "start": "2026-01-24T15:00:00Z",
      "end": "2026-01-24T16:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "SSB",
        "CW",
        "RTTY"
      ],
      "submodes": [],
      "bands": [
        "40m"
      ],
      "bands_note": "Phone 7 063-7 100 and 7 130-7 200 kHz; CW 7 000-7 040 kHz; RTTY 7 040-7 060 kHz. The segment 7 101-7 129 kHz is contest free.",
      "sponsor": "SARL",
      "rules_url": "https://mysarl.org.za/wp-content/uploads/2025/12/2026-SARL-Contest-Manual-Version-1.1-2025-12-15.pdf",
      "verified": true,
      "note": "A club championship rather than an individual contest: operators' scores are added into a club total. The month list is SARL's own -- these run in four months of the year, not every month -- which is what monthly_nth_weekday's `months` field exists for. log_format and log_deadline_days are absent: this pass read each contest's Aim, Dates, Frequencies and Exchange sections and did not read its Log Sheets section, so neither is recorded rather than assumed from SARL's other contests.\n\nPROVENANCE RESTORED 2026-08-23. This record carried verified: true with an EMPTY source_note -- one of three the 2026-08-21 rule audit found, and a stricter defect than the thin ARRL notes beside them: an empty string is not weak evidence, it is none, and there was nothing in the record to check a rule against. The rule, the times, the bands and the exchange were all correct; only the evidence for them was missing. Re-read from the manual and quoted above, and SARL's own printed 2026 dates reproduce it.",
      "exchange": "Your name, your Abbreviated Club Callsign and your 4-character grid square (for example KG30).",
      "country": "ZA",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-23",
      "can_enter": false,
      "eligibility_scope": "entity_list",
      "eligibility_reason": "Entry limited to ZS. K stations may be worked but cannot submit an entry.",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "sarl-club-40m-20260124T1500@contestcal",
      "start_date": "2026-01-24",
      "mode_families": [
        "CW",
        "SSB",
        "RTTY",
        "Digital"
      ],
      "band_families": [
        "40m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "wia-australia-day",
      "name": "Australia Day Contest",
      "start": "2026-01-25T22:00:00Z",
      "end": "2026-01-26T10:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 12,
      "modes": [
        "SSB",
        "FM",
        "CW",
        "FT8/FT4"
      ],
      "submodes": [
        "AM"
      ],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "160, 80, 40, 20, 15 and 10 metre bands only.",
      "sponsor": "WIA",
      "rules_url": "https://www.wia.org.au/members/contests/australiaday/",
      "verified": true,
      "note": "ANCHORED ON A PUBLIC HOLIDAY AND STARTING THE DAY BEFORE IT. Australia Day is 26 January, and the contest opens at 2200 UTC on the 25th -- which is 0900 on the 26th in eastern Australia. So the record's anchor is the 26th with a day_offset of -1 on the start, exactly as WIA states it, rather than a rule about the 25th.\n\nModes: WIA's 'Phone' covers AM, FM and SSB and scores as one mode, so SSB and FM are both recorded -- both are permitted -- and AM sits in submodes because it has no token in this catalog. FT8/FT4 is a separate scored section.\n\nNo log deadline is stated on the page.",
      "exchange": "RS(T) or SNR followed by a four-character grid square.",
      "country": "AU",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-19",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "wia-australia-day-20260125T2200@contestcal",
      "start_date": "2026-01-25",
      "mode_families": [
        "CW",
        "SSB",
        "FM",
        "Digital",
        "FT8/FT4"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "12-24"
    },
    {
      "contest_id": "k1usn-sst",
      "name": "K1USN Slow Speed Test (SST)",
      "start": "2026-01-26T00:00:00Z",
      "end": "2026-01-26T01:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "",
      "sponsor": "K1USN Radio Club",
      "rules_url": "https://www.k1usn.com/sst_rules.html",
      "verified": true,
      "note": "No formal log submission -- participants post scores to 3830scores.com.",
      "exchange": "Name + state/province/DX country",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "k1usn-sst-20260126T0000@contestcal",
      "start_date": "2026-01-26",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "agcw-zap-merit",
      "name": "AGCW ZAP Merit Contest (ZMC)",
      "start": "2026-01-26T17:40:00Z",
      "end": "2026-01-26T18:30:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.83,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "80m"
      ],
      "bands_note": "",
      "sponsor": "AGCW-DL",
      "rules_url": "https://www.agcw.de/contest/tzap/",
      "verified": false,
      "note": "PARTLY UNVERIFIED. The recurrence (every Monday), the 1740 UTC pre-logging opening and the 1800 UTC telegram transmission are all quoted from AGCW. AGCW publishes NO closing time. The 1830 end stored here is a PLACEHOLDER so the record expands -- it is not a sponsor fact and must not be presented as one. Confirm the session length with the ZMC manager before shipping. Points accumulate over a calendar year; logs are due 31 January of the following year.",
      "exchange": "Callsign + date + time + RST (SWLs log RST of both stations in a QSO)",
      "country": "DE",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-12",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "agcw-zap-merit-20260126T1740@contestcal",
      "start_date": "2026-01-26",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "80m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "skcc-sks",
      "name": "SKCC Straight Key Sprint (SKS)",
      "start": "2026-01-28T00:00:00Z",
      "end": "2026-01-28T02:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 2,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m",
        "6m"
      ],
      "bands_note": "Suggested frequencies, one per band",
      "sponsor": "Straight Key Century Club",
      "rules_url": "https://www.skccgroup.com/operating_activities/weekday_sprint/",
      "verified": true,
      "note": "",
      "exchange": "RST + QTH + name + SKCC number",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "skcc-sks-20260128T0000@contestcal",
      "start_date": "2026-01-28",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m",
        "6m"
      ],
      "duration_bucket": "2-12"
    },
    {
      "contest_id": "cwops-cwt",
      "name": "CWops Test (CWT)",
      "start": "2026-01-28T13:00:00Z",
      "end": "2026-01-28T14:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "CWops",
      "rules_url": "https://cwops.org/cwops-tests/",
      "verified": true,
      "note": "",
      "exchange": "Members: name + CWops number. Non-members: name + state/province/DX prefix.",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "cwops-cwt-20260128T1300@contestcal",
      "start_date": "2026-01-28",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "cwops-cwt",
      "name": "CWops Test (CWT)",
      "start": "2026-01-28T19:00:00Z",
      "end": "2026-01-28T20:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "CWops",
      "rules_url": "https://cwops.org/cwops-tests/",
      "verified": true,
      "note": "",
      "exchange": "Members: name + CWops number. Non-members: name + state/province/DX prefix.",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "cwops-cwt-20260128T1900@contestcal",
      "start_date": "2026-01-28",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "cwops-cwt",
      "name": "CWops Test (CWT)",
      "start": "2026-01-29T03:00:00Z",
      "end": "2026-01-29T04:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "CWops",
      "rules_url": "https://cwops.org/cwops-tests/",
      "verified": true,
      "note": "",
      "exchange": "Members: name + CWops number. Non-members: name + state/province/DX prefix.",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "cwops-cwt-20260129T0300@contestcal",
      "start_date": "2026-01-29",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "cwops-cwt",
      "name": "CWops Test (CWT)",
      "start": "2026-01-29T07:00:00Z",
      "end": "2026-01-29T08:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "CWops",
      "rules_url": "https://cwops.org/cwops-tests/",
      "verified": true,
      "note": "",
      "exchange": "Members: name + CWops number. Non-members: name + state/province/DX prefix.",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "cwops-cwt-20260129T0700@contestcal",
      "start_date": "2026-01-29",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "nccc-ns-ft4",
      "name": "NCCC FT4 Sprint (FT4 NS)",
      "start": "2026-01-30T01:00:00Z",
      "end": "2026-01-30T01:30:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.5,
      "modes": [
        "FT8/FT4"
      ],
      "submodes": [
        "FT4"
      ],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "Northern California Contest Club (NCCC)",
      "rules_url": "https://www.ncccsprint.com/ft4ns.html",
      "verified": true,
      "note": "NCCC describes these as 'nominal rules' that may be modified on a weekly basis, and runs formal Ladder seasons interspersed with practice weeks. The 30-minute session slot itself is fixed.",
      "exchange": "Grid square (following NA VHF, WW Digi and ARRL IDC practice)",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "nccc-ns-ft4-20260130T0100@contestcal",
      "start_date": "2026-01-30",
      "mode_families": [
        "Digital",
        "FT8/FT4"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "nccc-ns-rtty",
      "name": "NCCC RTTY Sprint (RTTY NS)",
      "start": "2026-01-30T01:45:00Z",
      "end": "2026-01-30T02:15:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.5,
      "modes": [
        "RTTY"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m"
      ],
      "bands_note": "",
      "sponsor": "Northern California Contest Club (NCCC)",
      "rules_url": "https://ncccsprint.com/rttyns.html",
      "verified": true,
      "note": "NCCC describes these as 'nominal rules' that may be modified on a weekly basis, and runs formal Ladder seasons interspersed with practice weeks. The 30-minute session slot itself is fixed.",
      "exchange": "Serial number + name + QTH (both callsigns required in the exchange)",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "nccc-ns-rtty-20260130T0145@contestcal",
      "start_date": "2026-01-30",
      "mode_families": [
        "RTTY",
        "Digital"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "nccc-ns-cw",
      "name": "NCCC Sprint (NS)",
      "start": "2026-01-30T02:30:00Z",
      "end": "2026-01-30T03:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.5,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m"
      ],
      "bands_note": "",
      "sponsor": "Northern California Contest Club (NCCC)",
      "rules_url": "https://ncccsprint.com/rules.html",
      "verified": true,
      "note": "NCCC describes these as 'nominal rules' that may be modified on a weekly basis, and runs formal Ladder seasons interspersed with practice weeks. The 30-minute session slot itself is fixed.",
      "exchange": "Serial number + name + QTH (both callsigns required in the exchange)",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "nccc-ns-cw-20260130T0230@contestcal",
      "start_date": "2026-01-30",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "k1usn-sst",
      "name": "K1USN Slow Speed Test (SST)",
      "start": "2026-01-30T20:00:00Z",
      "end": "2026-01-30T21:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "",
      "sponsor": "K1USN Radio Club",
      "rules_url": "https://www.k1usn.com/sst_rules.html",
      "verified": true,
      "note": "No formal log submission -- participants post scores to 3830scores.com.",
      "exchange": "Name + state/province/DX country",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "k1usn-sst-20260130T2000@contestcal",
      "start_date": "2026-01-30",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "uba-dx-ssb",
      "name": "UBA DX Contest, SSB",
      "start": "2026-01-31T13:00:00Z",
      "end": "2026-02-01T13:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 24,
      "modes": [
        "SSB"
      ],
      "submodes": [],
      "bands": [
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "",
      "sponsor": "UBA",
      "rules_url": "https://www.uba.be/en/hf/contest-rules/uba-dx-contest",
      "verified": true,
      "note": "LAST SATURDAY, NOT LAST FULL WEEKEND, and UBA's own 2026 dates are what settle it: 31 January 2026 is a Saturday and 1 February is a Sunday, so the last full weekend of January 2026 would be 24-25 January. UBA published 31 January - 1 February, which only the last-Saturday reading produces. The QRP figure recorded here is the SSB one; UBA's rule is 'QRP SSB maximum 10 Watts output, CW maximum 5 Watts output.' The stated deadline instants (SSB 8 February 23:59 UTC, CW 8 March 23:59 UTC) are the right dates for a 7-day interval but 23:59 rather than the 13:00 that end-plus-7-days gives; the interval is what UBA states as the rule, so it is what is encoded.",
      "exchange": "Stations on Belgian territory send RS(T) + serial number starting with 001 + the abbreviation of their UBA section (e.g. 59001 ACC); non-members send XXX and the national stations send UBA. Stations outside Belgium send RS(T) + serial number starting from 001.",
      "country": "BE",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-18",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": "2026-02-08T13:00:00Z",
      "uid": "uba-dx-ssb-20260131T1300@contestcal",
      "start_date": "2026-01-31",
      "mode_families": [
        "SSB"
      ],
      "band_families": [
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "gte24"
    },
    {
      "contest_id": "awasa-cw-activity-day",
      "name": "Antique Wireless Association CW Activity Day",
      "start": "2026-02-01T13:00:00Z",
      "end": "2026-02-01T15:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 2,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "80m",
        "40m",
        "20m"
      ],
      "bands_note": "14 000-14 060 kHz, 7 000-7 040 kHz and 3 510-3 560 kHz.",
      "sponsor": "AWASA",
      "rules_url": "https://mysarl.org.za/wp-content/uploads/2025/12/2026-SARL-Contest-Manual-Version-1.1-2025-12-15.pdf",
      "verified": true,
      "note": "SOURCED FROM THE SARL CONTEST MANUAL, WHICH IS NOT AN AGGREGATOR. The manual carries this contest's FULL rules -- aim, dates, exchange, frequencies, scoring, log sheets -- and names its organising club, rather than summarising a calendar entry. It is the venue in which South African clubs publish their contest rules, the way DARC's Ausschreibungen or UBA's rules pages are, so it is a primary source for these contests and not a third-party listing. The distinction that matters: an aggregator republishes rules it found elsewhere, and this is where the rules appear.",
      "exchange": "RST, the operator's name and grid square locator.",
      "country": "ZA",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-19",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "awasa-cw-activity-day-20260201T1300@contestcal",
      "start_date": "2026-02-01",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "80m",
        "40m",
        "20m"
      ],
      "duration_bucket": "2-12"
    },
    {
      "contest_id": "k1usn-sst",
      "name": "K1USN Slow Speed Test (SST)",
      "start": "2026-02-02T00:00:00Z",
      "end": "2026-02-02T01:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "",
      "sponsor": "K1USN Radio Club",
      "rules_url": "https://www.k1usn.com/sst_rules.html",
      "verified": true,
      "note": "No formal log submission -- participants post scores to 3830scores.com.",
      "exchange": "Name + state/province/DX country",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "k1usn-sst-20260202T0000@contestcal",
      "start_date": "2026-02-02",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "agcw-zap-merit",
      "name": "AGCW ZAP Merit Contest (ZMC)",
      "start": "2026-02-02T17:40:00Z",
      "end": "2026-02-02T18:30:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.83,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "80m"
      ],
      "bands_note": "",
      "sponsor": "AGCW-DL",
      "rules_url": "https://www.agcw.de/contest/tzap/",
      "verified": false,
      "note": "PARTLY UNVERIFIED. The recurrence (every Monday), the 1740 UTC pre-logging opening and the 1800 UTC telegram transmission are all quoted from AGCW. AGCW publishes NO closing time. The 1830 end stored here is a PLACEHOLDER so the record expands -- it is not a sponsor fact and must not be presented as one. Confirm the session length with the ZMC manager before shipping. Points accumulate over a calendar year; logs are due 31 January of the following year.",
      "exchange": "Callsign + date + time + RST (SWLs log RST of both stations in a QSO)",
      "country": "DE",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-12",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "agcw-zap-merit-20260202T1740@contestcal",
      "start_date": "2026-02-02",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "80m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "rsgb-80mcc-ssb",
      "name": "RSGB 3.5 MHz Club Championship, SSB",
      "start": "2026-02-02T20:00:00Z",
      "end": "2026-02-02T21:30:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1.5,
      "modes": [
        "SSB"
      ],
      "submodes": [],
      "bands": [
        "80m"
      ],
      "bands_note": "3600-3775 kHz.",
      "sponsor": "RSGB Contest Committee",
      "rules_url": "https://www.rsgbcc.org/hf/rules/2026/r80mcc.shtml",
      "verified": true,
      "note": "THE DATES ARE NOT ON THE RULES PAGE. RSGB publishes the rules at rules/2026/r80mcc.shtml and the eighteen legs on a separate CGI calendar, and the rules page links to it in so many words. This record holds what that calendar prints; nothing is derived.\n\nTHE CLOCK MOVES IN APRIL and the record says so per date: February and March run 2000-2130 UTC, April to July run 1900-2030. The record's default is the April-July clock because four of each mode's six legs use it, and the two early legs carry their own times. Same mechanism as the Autumn Series, and the second contest to need it.\n\nMANUAL BECAUSE THE LEGS FOLLOW NO ORDINAL. They fall on Mondays, Wednesdays and Thursdays with the weekday rotating through the series, which is exactly the shape an ordinal must not be fitted to.\n\nNON-UK STATIONS MAY ENTER AS INDIVIDUALS -- RSGB states it, which is worth noting beside the AFS and Club Calls contests where entry really is UK&CD only.",
      "exchange": "RS(T) plus a serial number starting at 1 and incrementing by 1.",
      "country": "GB",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-23",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": "2026-02-03T21:30:00Z",
      "uid": "rsgb-80mcc-ssb-20260202T2000@contestcal",
      "start_date": "2026-02-02",
      "mode_families": [
        "SSB"
      ],
      "band_families": [
        "80m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "ars-spartan-sprint",
      "name": "ARS Spartan Sprint",
      "start": "2026-02-03T01:00:00Z",
      "end": "2026-02-03T03:00:00Z",
      "start_wall": "2026-02-02T20:00:00",
      "end_wall": "2026-02-02T22:00:00",
      "local_rolling": false,
      "timezone": "America/New_York",
      "duration_hours": 2,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "",
      "sponsor": "Adventure Radio Society",
      "rules_url": "https://ars-qrp.com/Spartan_Sprint/Spartan_Sprint.html",
      "verified": true,
      "note": "CORRECTION (anchor): previously encoded as the first TUESDAY of the month. The sponsor's rule is the first MONDAY US local, which lands on Tuesday UTC -- and those are different dates whenever the 1st falls on a Tuesday (Sep and Dec 2026). SPONSOR-ANCHORED LOCAL TIME: ARS publishes no UTC time and states the event 'is always at these Local Times', so the UTC instant is what moves -- 0100Z Tuesday under EST, 0000Z Tuesday under EDT. Resolved through America/New_York rather than hardcoded, so DST is handled. ARS lists Eastern, Central, Mountain and Pacific times that are the same instant in every zone that observes DST; Arizona, which does not, is the one place the sponsor's own table is inconsistent.",
      "exchange": "RST + state/province + power output",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "ars-spartan-sprint-20260203T0100@contestcal",
      "start_date": "2026-02-03",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "2-12"
    },
    {
      "contest_id": "cwops-cwt",
      "name": "CWops Test (CWT)",
      "start": "2026-02-04T13:00:00Z",
      "end": "2026-02-04T14:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "CWops",
      "rules_url": "https://cwops.org/cwops-tests/",
      "verified": true,
      "note": "",
      "exchange": "Members: name + CWops number. Non-members: name + state/province/DX prefix.",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "cwops-cwt-20260204T1300@contestcal",
      "start_date": "2026-02-04",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "cwops-cwt",
      "name": "CWops Test (CWT)",
      "start": "2026-02-04T19:00:00Z",
      "end": "2026-02-04T20:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "CWops",
      "rules_url": "https://cwops.org/cwops-tests/",
      "verified": true,
      "note": "",
      "exchange": "Members: name + CWops number. Non-members: name + state/province/DX prefix.",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "cwops-cwt-20260204T1900@contestcal",
      "start_date": "2026-02-04",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "cwops-cwt",
      "name": "CWops Test (CWT)",
      "start": "2026-02-05T03:00:00Z",
      "end": "2026-02-05T04:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "CWops",
      "rules_url": "https://cwops.org/cwops-tests/",
      "verified": true,
      "note": "",
      "exchange": "Members: name + CWops number. Non-members: name + state/province/DX prefix.",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "cwops-cwt-20260205T0300@contestcal",
      "start_date": "2026-02-05",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "cwops-cwt",
      "name": "CWops Test (CWT)",
      "start": "2026-02-05T07:00:00Z",
      "end": "2026-02-05T08:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "CWops",
      "rules_url": "https://cwops.org/cwops-tests/",
      "verified": true,
      "note": "",
      "exchange": "Members: name + CWops number. Non-members: name + state/province/DX prefix.",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "cwops-cwt-20260205T0700@contestcal",
      "start_date": "2026-02-05",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "skcc-skse",
      "name": "SKCC Straight Key Sprint Europe (SKSE)",
      "start": "2026-02-05T20:00:00Z",
      "end": "2026-02-05T22:00:00Z",
      "start_wall": "2026-02-05T21:00:00",
      "end_wall": "2026-02-05T23:00:00",
      "local_rolling": false,
      "timezone": "Europe/Berlin",
      "duration_hours": 2,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m",
        "6m"
      ],
      "bands_note": "160 through 6 m excluding the WARC bands -- SKCC names 60, 30, 17 and 12 m as excluded.",
      "sponsor": "Straight Key Century Club",
      "rules_url": "https://www.skccgroup.com/operating_activities/skse/",
      "verified": true,
      "note": "SKCC PRINTS TWO UTC TIMES AND THE CONTEST HAS ONE LOCAL TIME. 2000Z from November to March and 1900Z from April to October are both 2100 in central Europe: CET is UTC+1 and CEST is UTC+2. So this is not a contest that changes its hour twice a year, it is a contest at nine in the evening that Europe's clocks move around, and it is recorded the way the sponsor means it -- `timezone: Europe/Berlin` with wall_clock times, exactly as the ARS Spartan Sprint is recorded in New York.\n\nTHAT READING IS TESTABLE AND IT PASSES ON THE MONTHS THAT DECIDE IT. Europe changes clocks on the last Sunday of March and of October, and the first Thursday of both months falls on the near side of the change: March is still CET and resolves to 2000Z, April is CEST and resolves to 1900Z, October is still CEST at 1900Z, November is CET at 2000Z. All four match SKCC's own table, which is what makes this one rule rather than two.\n\nEncoding it as two records split by month -- winter and summer -- would have produced two entries with the same name and hidden the reason. Encoding one UTC time would have been wrong for five months of the year.\n\nStraight keys, sideswipers and bugs only: no keyer, no keyboard. That is the club's whole premise rather than a category.\n\nThe fifteen-minute QRS extensions at each end are not in the window: they are an invitation to slow operators rather than part of the scored period.",
      "exchange": "RST, QTH, the operator's name and the SKCC number. Non-members send 'none' for the number.",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-23",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": "2026-02-12T22:00:00Z",
      "uid": "skcc-skse-20260205T2000@contestcal",
      "start_date": "2026-02-05",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m",
        "6m"
      ],
      "duration_bucket": "2-12"
    },
    {
      "contest_id": "nccc-ns-ft4",
      "name": "NCCC FT4 Sprint (FT4 NS)",
      "start": "2026-02-06T01:00:00Z",
      "end": "2026-02-06T01:30:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.5,
      "modes": [
        "FT8/FT4"
      ],
      "submodes": [
        "FT4"
      ],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "Northern California Contest Club (NCCC)",
      "rules_url": "https://www.ncccsprint.com/ft4ns.html",
      "verified": true,
      "note": "NCCC describes these as 'nominal rules' that may be modified on a weekly basis, and runs formal Ladder seasons interspersed with practice weeks. The 30-minute session slot itself is fixed.",
      "exchange": "Grid square (following NA VHF, WW Digi and ARRL IDC practice)",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "nccc-ns-ft4-20260206T0100@contestcal",
      "start_date": "2026-02-06",
      "mode_families": [
        "Digital",
        "FT8/FT4"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "nccc-ns-rtty",
      "name": "NCCC RTTY Sprint (RTTY NS)",
      "start": "2026-02-06T01:45:00Z",
      "end": "2026-02-06T02:15:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.5,
      "modes": [
        "RTTY"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m"
      ],
      "bands_note": "",
      "sponsor": "Northern California Contest Club (NCCC)",
      "rules_url": "https://ncccsprint.com/rttyns.html",
      "verified": true,
      "note": "NCCC describes these as 'nominal rules' that may be modified on a weekly basis, and runs formal Ladder seasons interspersed with practice weeks. The 30-minute session slot itself is fixed.",
      "exchange": "Serial number + name + QTH (both callsigns required in the exchange)",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "nccc-ns-rtty-20260206T0145@contestcal",
      "start_date": "2026-02-06",
      "mode_families": [
        "RTTY",
        "Digital"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "nccc-ns-cw",
      "name": "NCCC Sprint (NS)",
      "start": "2026-02-06T02:30:00Z",
      "end": "2026-02-06T03:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.5,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m"
      ],
      "bands_note": "",
      "sponsor": "Northern California Contest Club (NCCC)",
      "rules_url": "https://ncccsprint.com/rules.html",
      "verified": true,
      "note": "NCCC describes these as 'nominal rules' that may be modified on a weekly basis, and runs formal Ladder seasons interspersed with practice weeks. The 30-minute session slot itself is fixed.",
      "exchange": "Serial number + name + QTH (both callsigns required in the exchange)",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "nccc-ns-cw-20260206T0230@contestcal",
      "start_date": "2026-02-06",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "k1usn-sst",
      "name": "K1USN Slow Speed Test (SST)",
      "start": "2026-02-06T20:00:00Z",
      "end": "2026-02-06T21:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "",
      "sponsor": "K1USN Radio Club",
      "rules_url": "https://www.k1usn.com/sst_rules.html",
      "verified": true,
      "note": "No formal log submission -- participants post scores to 3830scores.com.",
      "exchange": "Name + state/province/DX country",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "k1usn-sst-20260206T2000@contestcal",
      "start_date": "2026-02-06",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "tenten-winter-phone",
      "name": "10-10 International Winter QSO Party (Phone)",
      "start": "2026-02-07T00:01:00Z",
      "end": "2026-02-08T23:59:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 47.97,
      "modes": [
        "SSB"
      ],
      "submodes": [],
      "bands": [
        "10m"
      ],
      "bands_note": "",
      "sponsor": "10-10 International Net",
      "rules_url": "https://www.ten-ten.org/index.php/activity/qso-party-rules",
      "verified": true,
      "note": "The rules give the close as 2359 UTC Sunday; the schedule page says 'close at 2400 UTC on the second listed date'. One minute apart. Encoded as 2359 from the rules document, which is the authoritative text.",
      "exchange": "Call sign + name + 10-10 number + QTH (state, province or country). Record 0 if the other station has no 10-10 number.",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-12",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "Anyone may take part, but only members' logs are scored: 'logs will be accepted only from active members as of the date of the event ... Other logs received will be handled as check logs.'",
      "log_due": null,
      "uid": "tenten-winter-phone-20260207T0001@contestcal",
      "start_date": "2026-02-07",
      "mode_families": [
        "SSB"
      ],
      "band_families": [
        "10m"
      ],
      "duration_bucket": "gte24"
    },
    {
      "contest_id": "agcw-htp-80m",
      "name": "AGCW Handtastenparty 80m (HTP)",
      "start": "2026-02-07T16:00:00Z",
      "end": "2026-02-07T19:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 3,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "80m"
      ],
      "bands_note": "",
      "sponsor": "AGCW-DL",
      "rules_url": "https://www.agcw.de/contest/htp/",
      "verified": true,
      "note": "",
      "exchange": "RST + running 3-digit QSO number from 001 + class + name + age",
      "country": "DE",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-12",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "agcw-htp-80m-20260207T1600@contestcal",
      "start_date": "2026-02-07",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "80m"
      ],
      "duration_bucket": "2-12"
    },
    {
      "contest_id": "ncj-sprint-cw",
      "name": "North American Sprint, CW",
      "start": "2026-02-08T00:00:00Z",
      "end": "2026-02-08T03:59:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 3.98,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "80m",
        "40m",
        "20m"
      ],
      "bands_note": "",
      "sponsor": "National Contest Journal (NCJ)",
      "rules_url": "https://www.ncjweb.com/Sprint-Rules.pdf",
      "verified": true,
      "note": "Encoded as 'manual' deliberately. NCJ publishes explicit dates per year and flagged 2026 September with 'NOTE CW DATE SHIFT', so there is no stable derivable recurrence to encode. 2026 happens to land on the 2nd Sunday of February and the 2nd Sunday of September, but that pattern is NOT a rule NCJ states -- re-read the rules PDF each year.",
      "exchange": "Other station's call + your call + serial number + name + state/province/country ('DX' outside North America)",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": "2026-02-15T03:59:00Z",
      "uid": "ncj-sprint-cw-20260208T0000@contestcal",
      "start_date": "2026-02-08",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "80m",
        "40m",
        "20m"
      ],
      "duration_bucket": "2-12"
    },
    {
      "contest_id": "hamsat-sa-qo100-qso-party",
      "name": "HamSat-SA ZS QO-100 QSO Party",
      "start": "2026-02-08T13:00:00Z",
      "end": "2026-02-08T15:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 2,
      "modes": [
        "SSB"
      ],
      "submodes": [],
      "bands": [
        "3cm"
      ],
      "bands_note": "Through the QO-100 geostationary satellite: SSB on 10 489.870 to 10 489.990 MHz, which is the 3 cm band.",
      "sponsor": "HamSat-SA",
      "rules_url": "https://mysarl.org.za/wp-content/uploads/2025/12/2026-SARL-Contest-Manual-Version-1.1-2025-12-15.pdf",
      "verified": true,
      "note": "THE CATALOG'S FIRST SATELLITE CONTEST. Every contact is through QO-100, the geostationary amateur transponder, so the band recorded is 3 cm -- the 10 489 MHz downlink -- and a band filter will find it there. That is the honest token for the frequency in use, but it is worth knowing that this contest is nothing like the other 3 cm entries in the catalog: no terrestrial path is involved, and the equipment is a dish rather than a microwave rig. SOURCED FROM THE SARL CONTEST MANUAL, WHICH IS NOT AN AGGREGATOR. The manual carries this contest's FULL rules -- aim, dates, exchange, frequencies, scoring, log sheets -- and names its organising club, rather than summarising a calendar entry. It is the venue in which South African clubs publish their contest rules, the way DARC's Ausschreibungen or UBA's rules pages are, so it is a primary source for these contests and not a third-party listing. The distinction that matters: an aggregator republishes rules it found elsewhere, and this is where the rules appear.",
      "exchange": "RS and grid locator.",
      "country": "ZA",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-19",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "hamsat-sa-qo100-qso-party-20260208T1300@contestcal",
      "start_date": "2026-02-08",
      "mode_families": [
        "SSB"
      ],
      "band_families": [
        "VHF+"
      ],
      "duration_bucket": "2-12"
    },
    {
      "contest_id": "k1usn-sst",
      "name": "K1USN Slow Speed Test (SST)",
      "start": "2026-02-09T00:00:00Z",
      "end": "2026-02-09T01:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "",
      "sponsor": "K1USN Radio Club",
      "rules_url": "https://www.k1usn.com/sst_rules.html",
      "verified": true,
      "note": "No formal log submission -- participants post scores to 3830scores.com.",
      "exchange": "Name + state/province/DX country",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "k1usn-sst-20260209T0000@contestcal",
      "start_date": "2026-02-09",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "4sqrp-sss",
      "name": "4 States QRP Group Second Sunday Sprint (SSS)",
      "start": "2026-02-09T01:00:00Z",
      "end": "2026-02-09T03:00:00Z",
      "start_wall": "2026-02-08T19:00:00",
      "end_wall": "2026-02-08T21:00:00",
      "local_rolling": false,
      "timezone": "America/Chicago",
      "duration_hours": 2,
      "modes": [
        "CW",
        "SSB",
        "Digital"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "",
      "sponsor": "4 States QRP Group",
      "rules_url": "https://www.4sqrp.com/SSS/sss_rules_revised_02_2026.pdf",
      "verified": true,
      "note": "SPONSOR-ANCHORED LOCAL TIME. The anchor is the second SUNDAY and the sprint runs into Monday UTC. 4SQRP states the consequence itself: '7 PM until 9 PM central time (CST or CDT, whichever is in effect at the time). If you use UTC, that time changes when we switch from CST to CDT (or vice versa).' Resolved through America/Chicago, so it is 0100Z Monday in winter and 0000Z Monday in summer.",
      "exchange": "RST + state/province/country + 4SQRP member number (power if non-member)",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "4sqrp-sss-20260209T0100@contestcal",
      "start_date": "2026-02-09",
      "mode_families": [
        "CW",
        "SSB",
        "Digital"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "2-12"
    },
    {
      "contest_id": "agcw-zap-merit",
      "name": "AGCW ZAP Merit Contest (ZMC)",
      "start": "2026-02-09T17:40:00Z",
      "end": "2026-02-09T18:30:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.83,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "80m"
      ],
      "bands_note": "",
      "sponsor": "AGCW-DL",
      "rules_url": "https://www.agcw.de/contest/tzap/",
      "verified": false,
      "note": "PARTLY UNVERIFIED. The recurrence (every Monday), the 1740 UTC pre-logging opening and the 1800 UTC telegram transmission are all quoted from AGCW. AGCW publishes NO closing time. The 1830 end stored here is a PLACEHOLDER so the record expands -- it is not a sponsor fact and must not be presented as one. Confirm the session length with the ZMC manager before shipping. Points accumulate over a calendar year; logs are due 31 January of the following year.",
      "exchange": "Callsign + date + time + RST (SWLs log RST of both stations in a QSO)",
      "country": "DE",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-12",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "agcw-zap-merit-20260209T1740@contestcal",
      "start_date": "2026-02-09",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "80m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "darc-ft4",
      "name": "DARC FT4 Contest",
      "start": "2026-02-10T19:00:00Z",
      "end": "2026-02-10T20:29:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1.48,
      "modes": [
        "FT8/FT4"
      ],
      "submodes": [
        "FT4"
      ],
      "bands": [
        "80m",
        "40m"
      ],
      "bands_note": "80m 3576, 3579 and 3582 kHz USB; 40m 7047.5 kHz USB",
      "sponsor": "DARC",
      "rules_url": "https://www.darc.de/der-club/referate/conteste/ft4-contest/ft4-rules/",
      "verified": true,
      "note": "Four legs a year, one record. DARC heads its 2026 date list 'Termine 2025:' -- the heading is a year out, the dates under it are 2026 and match DARC's KW contest calendar, so the typo is in the heading only.",
      "exchange": "Signal report + four-character grid square (for example JN49, JO61).",
      "country": "DE",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-18",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": "2026-02-17T20:29:00Z",
      "uid": "darc-ft4-20260210T1900@contestcal",
      "start_date": "2026-02-10",
      "mode_families": [
        "Digital",
        "FT8/FT4"
      ],
      "band_families": [
        "80m",
        "40m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "cwops-cwt",
      "name": "CWops Test (CWT)",
      "start": "2026-02-11T13:00:00Z",
      "end": "2026-02-11T14:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "CWops",
      "rules_url": "https://cwops.org/cwops-tests/",
      "verified": true,
      "note": "",
      "exchange": "Members: name + CWops number. Non-members: name + state/province/DX prefix.",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "cwops-cwt-20260211T1300@contestcal",
      "start_date": "2026-02-11",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "cwops-cwt",
      "name": "CWops Test (CWT)",
      "start": "2026-02-11T19:00:00Z",
      "end": "2026-02-11T20:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "CWops",
      "rules_url": "https://cwops.org/cwops-tests/",
      "verified": true,
      "note": "",
      "exchange": "Members: name + CWops number. Non-members: name + state/province/DX prefix.",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "cwops-cwt-20260211T1900@contestcal",
      "start_date": "2026-02-11",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "rsgb-80mcc-data",
      "name": "RSGB 3.5 MHz Club Championship, Data",
      "start": "2026-02-11T20:00:00Z",
      "end": "2026-02-11T21:30:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1.5,
      "modes": [
        "RTTY",
        "Digital"
      ],
      "submodes": [
        "PSK63"
      ],
      "bands": [
        "80m"
      ],
      "bands_note": "PSK63 3580-3590 kHz; RTTY 3590-3620 kHz.",
      "sponsor": "RSGB Contest Committee",
      "rules_url": "https://www.rsgbcc.org/hf/rules/2026/r80mcc.shtml",
      "verified": true,
      "note": "THE DATES ARE NOT ON THE RULES PAGE. RSGB publishes the rules at rules/2026/r80mcc.shtml and the eighteen legs on a separate CGI calendar, and the rules page links to it in so many words. This record holds what that calendar prints; nothing is derived.\n\nTHE CLOCK MOVES IN APRIL and the record says so per date: February and March run 2000-2130 UTC, April to July run 1900-2030. The record's default is the April-July clock because four of each mode's six legs use it, and the two early legs carry their own times. Same mechanism as the Autumn Series, and the second contest to need it.\n\nMANUAL BECAUSE THE LEGS FOLLOW NO ORDINAL. They fall on Mondays, Wednesdays and Thursdays with the weekday rotating through the series, which is exactly the shape an ordinal must not be fitted to.\n\nNON-UK STATIONS MAY ENTER AS INDIVIDUALS -- RSGB states it, which is worth noting beside the AFS and Club Calls contests where entry really is UK&CD only.",
      "exchange": "RS(T) plus a serial number starting at 1 and incrementing by 1.",
      "country": "GB",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-23",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": "2026-02-12T21:30:00Z",
      "uid": "rsgb-80mcc-data-20260211T2000@contestcal",
      "start_date": "2026-02-11",
      "mode_families": [
        "RTTY",
        "Digital"
      ],
      "band_families": [
        "80m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "cwops-cwt",
      "name": "CWops Test (CWT)",
      "start": "2026-02-12T03:00:00Z",
      "end": "2026-02-12T04:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "CWops",
      "rules_url": "https://cwops.org/cwops-tests/",
      "verified": true,
      "note": "",
      "exchange": "Members: name + CWops number. Non-members: name + state/province/DX prefix.",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "cwops-cwt-20260212T0300@contestcal",
      "start_date": "2026-02-12",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "cwops-cwt",
      "name": "CWops Test (CWT)",
      "start": "2026-02-12T07:00:00Z",
      "end": "2026-02-12T08:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "CWops",
      "rules_url": "https://cwops.org/cwops-tests/",
      "verified": true,
      "note": "",
      "exchange": "Members: name + CWops number. Non-members: name + state/province/DX prefix.",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "cwops-cwt-20260212T0700@contestcal",
      "start_date": "2026-02-12",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "nccc-ns-ft4",
      "name": "NCCC FT4 Sprint (FT4 NS)",
      "start": "2026-02-13T01:00:00Z",
      "end": "2026-02-13T01:30:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.5,
      "modes": [
        "FT8/FT4"
      ],
      "submodes": [
        "FT4"
      ],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "Northern California Contest Club (NCCC)",
      "rules_url": "https://www.ncccsprint.com/ft4ns.html",
      "verified": true,
      "note": "NCCC describes these as 'nominal rules' that may be modified on a weekly basis, and runs formal Ladder seasons interspersed with practice weeks. The 30-minute session slot itself is fixed.",
      "exchange": "Grid square (following NA VHF, WW Digi and ARRL IDC practice)",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "nccc-ns-ft4-20260213T0100@contestcal",
      "start_date": "2026-02-13",
      "mode_families": [
        "Digital",
        "FT8/FT4"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "nccc-ns-rtty",
      "name": "NCCC RTTY Sprint (RTTY NS)",
      "start": "2026-02-13T01:45:00Z",
      "end": "2026-02-13T02:15:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.5,
      "modes": [
        "RTTY"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m"
      ],
      "bands_note": "",
      "sponsor": "Northern California Contest Club (NCCC)",
      "rules_url": "https://ncccsprint.com/rttyns.html",
      "verified": true,
      "note": "NCCC describes these as 'nominal rules' that may be modified on a weekly basis, and runs formal Ladder seasons interspersed with practice weeks. The 30-minute session slot itself is fixed.",
      "exchange": "Serial number + name + QTH (both callsigns required in the exchange)",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "nccc-ns-rtty-20260213T0145@contestcal",
      "start_date": "2026-02-13",
      "mode_families": [
        "RTTY",
        "Digital"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "nccc-ns-cw",
      "name": "NCCC Sprint (NS)",
      "start": "2026-02-13T02:30:00Z",
      "end": "2026-02-13T03:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.5,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m"
      ],
      "bands_note": "",
      "sponsor": "Northern California Contest Club (NCCC)",
      "rules_url": "https://ncccsprint.com/rules.html",
      "verified": true,
      "note": "NCCC describes these as 'nominal rules' that may be modified on a weekly basis, and runs formal Ladder seasons interspersed with practice weeks. The 30-minute session slot itself is fixed.",
      "exchange": "Serial number + name + QTH (both callsigns required in the exchange)",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "nccc-ns-cw-20260213T0230@contestcal",
      "start_date": "2026-02-13",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "k1usn-sst",
      "name": "K1USN Slow Speed Test (SST)",
      "start": "2026-02-13T20:00:00Z",
      "end": "2026-02-13T21:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "",
      "sponsor": "K1USN Radio Club",
      "rules_url": "https://www.k1usn.com/sst_rules.html",
      "verified": true,
      "note": "No formal log submission -- participants post scores to 3830scores.com.",
      "exchange": "Name + state/province/DX country",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "k1usn-sst-20260213T2000@contestcal",
      "start_date": "2026-02-13",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "cq-wpx-rtty",
      "name": "CQ WW RTTY WPX Contest",
      "start": "2026-02-14T00:00:00Z",
      "end": "2026-02-15T23:59:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 47.98,
      "modes": [
        "RTTY"
      ],
      "submodes": [],
      "bands": [
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "Only the 3.5, 7, 14, 21, and 28 MHz bands may be used",
      "sponsor": "CQ Magazine",
      "rules_url": "https://cqwpxrtty.com/rules.htm",
      "verified": true,
      "note": "CQ's own WPX_RTTY_Rules_2025_en.pdf is headed 'February 10-11, 2024' -- those were the 2024 dates. The same PDF's log deadline (2359 UTC February 14, 2025) puts the 2025 running on February 8-9, which is what this record generates.",
      "exchange": "RST report plus a progressive contact serial number starting with 001",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-16",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": "2026-02-17T23:59:00Z",
      "uid": "cq-wpx-rtty-20260214T0000@contestcal",
      "start_date": "2026-02-14",
      "mode_families": [
        "RTTY",
        "Digital"
      ],
      "band_families": [
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "gte24"
    },
    {
      "contest_id": "podxs-valentine-sprint",
      "name": "PODXS 070 Club Valentine Sprint",
      "start": "2026-02-14T00:00:00Z",
      "end": "2026-02-14T23:59:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 23.98,
      "modes": [
        "Digital"
      ],
      "submodes": [
        "PSK31"
      ],
      "bands": [
        "160m",
        "80m",
        "40m"
      ],
      "bands_note": "",
      "sponsor": "PODXS 070 Club",
      "rules_url": "https://www.podxs070.com/o7o-club-sponsored-contests/valentine-sprint",
      "verified": true,
      "note": "The 0000-2359 window is the sprint's outer bound, not its length: 'For scoring, your six hour block will begin with the hour that you select on the scorer page and continue for the next 6 hours.' Maximum operating time is six hours.",
      "exchange": "'OM' or 'YL' + state/province/country (SPC). Signal reports and 070 numbers not required.",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-12",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": "2026-02-21T23:59:00Z",
      "uid": "podxs-valentine-sprint-20260214T0000@contestcal",
      "start_date": "2026-02-14",
      "mode_families": [
        "Digital"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m"
      ],
      "duration_bucket": "12-24"
    },
    {
      "contest_id": "erau-es-ll-kv",
      "name": "Estonian HF Cup (ES LL KV)",
      "start": "2026-02-14T08:00:00Z",
      "end": "2026-02-14T08:59:00Z",
      "start_wall": "2026-02-14T10:00:00",
      "end_wall": "2026-02-14T10:59:00",
      "local_rolling": false,
      "timezone": "Europe/Tallinn",
      "duration_hours": 0.98,
      "modes": [
        "CW",
        "SSB"
      ],
      "submodes": [],
      "bands": [
        "80m"
      ],
      "bands_note": "CW below 3600 kHz and SSB above it; 3530-3560 kHz and 3600-3650 kHz are recommended.",
      "sponsor": "ERAU",
      "rules_url": "https://www.erau.ee/images/LL/ES%20LL%20KV%20reeglid.pdf",
      "verified": true,
      "note": "SPONSOR-ANCHORED LOCAL TIME, and ERAU's own calendar proves the reading: 10:00-10:59 Estonian time is 08:00-08:59 UTC in winter (EET) and 07:00-07:59 in summer (EEST), which is exactly the split ERAU prints across the nine stages. The rules give no date rule at all -- 4.2 defers to the calendar plan -- so the dates are manual and taken from ERAU's published 2026 calendar. Eight of the nine are the first Saturday of their month; February's is the second. The log deadline is 'the Thursday of the following week', which is not a fixed number of days from the end of each stage, so it is recorded here rather than as log_deadline_days. Stages 4.3 also splits each hour into four periods; that is a scoring device inside one continuous hour.",
      "exchange": "RS(T) and a continuous serial number from 001.",
      "country": "EE",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-19",
      "can_enter": false,
      "eligibility_scope": "entity_list",
      "eligibility_reason": "Entry limited to ES. K stations may be worked but cannot submit an entry.",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "erau-es-ll-kv-20260214T0800@contestcal",
      "start_date": "2026-02-14",
      "mode_families": [
        "CW",
        "SSB"
      ],
      "band_families": [
        "80m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "pacc",
      "name": "PACC Contest",
      "start": "2026-02-14T12:00:00Z",
      "end": "2026-02-15T12:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 24,
      "modes": [
        "CW",
        "SSB"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "",
      "sponsor": "VERON",
      "rules_url": "https://veron.nl/vereniging/commissies-en-werkgroepen/traffic-bureau/hf-contesten/pacc-contest/",
      "verified": true,
      "note": "The stated deadline instant (20 February 23:59 UTC) is the right date for the five-day period VERON states but 23:59 rather than the 12:00 that end-plus-5-days gives; the interval is what the rules call the rule, so the interval is encoded. As of 2026-08-18 veron.nl's rules link still served the 2026 edition while the site's front page advertised 2027.",
      "exchange": "Dutch (PA) stations send a signal report + their two-letter province code; all other stations send RST + a serial number.",
      "country": "NL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-18",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": "2026-02-20T12:00:00Z",
      "uid": "pacc-20260214T1200@contestcal",
      "start_date": "2026-02-14",
      "mode_families": [
        "CW",
        "SSB"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "gte24"
    },
    {
      "contest_id": "skcc-wes",
      "name": "SKCC Weekend Sprintathon (WES)",
      "start": "2026-02-14T12:00:00Z",
      "end": "2026-02-15T23:59:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 35.98,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "Straight Key Century Club",
      "rules_url": "https://www.skccgroup.com/operating_activities/weekend_sprintathon/",
      "verified": true,
      "note": "Older sources describe the anchor as 'the Saturday following the 6th', which differs from '2nd Saturday' in some months. SKCC's current page says 2nd Saturday; re-check if dates drift.",
      "exchange": "RST + state/province/country + name + SKCC number (C/T/S suffix for award holders)",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "skcc-wes-20260214T1200@contestcal",
      "start_date": "2026-02-14",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m",
        "6m"
      ],
      "duration_bucket": "gte24"
    },
    {
      "contest_id": "rsgb-1_8mhz-first",
      "name": "RSGB 1.8 MHz Contest, February",
      "start": "2026-02-14T20:00:00Z",
      "end": "2026-02-14T23:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 3,
      "modes": [
        "CW",
        "SSB"
      ],
      "submodes": [],
      "bands": [
        "160m"
      ],
      "bands_note": "1810-1850 kHz CW, 1840-1900 kHz SSB. Maximum legal power.",
      "sponsor": "RSGB Contest Committee",
      "rules_url": "https://www.rsgbcc.org/hf/rules/2026/r160m.shtml",
      "verified": true,
      "note": "THE HOURS CHANGED IN 2025 AND THE RULE DID NOT. RSGB ran 1900-2300 UTC in 2023 and 2024 and 2000-2300 from 2025, on the same second Saturday of February. The current three hours are encoded; the change is recorded here so a reader comparing an old result with this calendar is not misled. RSGB keeps a rules page per year, so its own dates check its own rule. Four years were read for this record -- 2023, 2024, 2025 and 2026 -- and the recurrence reproduces all of them.",
      "exchange": "RST plus a serial number starting at 1 and incrementing by 1.",
      "country": "GB",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-20",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "rsgb-1_8mhz-first-20260214T2000@contestcal",
      "start_date": "2026-02-14",
      "mode_families": [
        "CW",
        "SSB"
      ],
      "band_families": [
        "160m"
      ],
      "duration_bucket": "2-12"
    },
    {
      "contest_id": "k1usn-sst",
      "name": "K1USN Slow Speed Test (SST)",
      "start": "2026-02-16T00:00:00Z",
      "end": "2026-02-16T01:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "",
      "sponsor": "K1USN Radio Club",
      "rules_url": "https://www.k1usn.com/sst_rules.html",
      "verified": true,
      "note": "No formal log submission -- participants post scores to 3830scores.com.",
      "exchange": "Name + state/province/DX country",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "k1usn-sst-20260216T0000@contestcal",
      "start_date": "2026-02-16",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "agcw-zap-merit",
      "name": "AGCW ZAP Merit Contest (ZMC)",
      "start": "2026-02-16T17:40:00Z",
      "end": "2026-02-16T18:30:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.83,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "80m"
      ],
      "bands_note": "",
      "sponsor": "AGCW-DL",
      "rules_url": "https://www.agcw.de/contest/tzap/",
      "verified": false,
      "note": "PARTLY UNVERIFIED. The recurrence (every Monday), the 1740 UTC pre-logging opening and the 1800 UTC telegram transmission are all quoted from AGCW. AGCW publishes NO closing time. The 1830 end stored here is a PLACEHOLDER so the record expands -- it is not a sponsor fact and must not be presented as one. Confirm the session length with the ZMC manager before shipping. Points accumulate over a calendar year; logs are due 31 January of the following year.",
      "exchange": "Callsign + date + time + RST (SWLs log RST of both stations in a QSO)",
      "country": "DE",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-12",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "agcw-zap-merit-20260216T1740@contestcal",
      "start_date": "2026-02-16",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "80m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "darc-hell-kurz",
      "name": "DARC HELL-Kurzcontest",
      "start": "2026-02-17T18:00:00Z",
      "end": "2026-02-17T18:59:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.98,
      "modes": [
        "Digital"
      ],
      "submodes": [
        "Hell"
      ],
      "bands": [],
      "bands_note": "",
      "sponsor": "DARC",
      "rules_url": "https://www.darc.de/der-club/referate/conteste/darc-kw-conteste/kw-conteste/",
      "verified": false,
      "note": "VERIFIED FALSE, AND THE RECURRENCE IS STILL DERIVED FROM DARC'S OWN FOUR DATES. All four are the THIRD TUESDAY of the second month of each quarter -- 17 Feb, 19 May, 18 Aug, 17 Nov 2026 -- which is a clean pattern across four points and sits alongside the RTTY-Kurzcontest (2nd Tuesday, months 1/4/7/10) and the FT4 Contest (2nd Tuesday, months 2/5/8/11) that DARC already runs.\n\nWhat is missing is everything the rules page would give: BANDS ARE UNRECORDED, so every band filter excludes this record, and the exchange and deadline are absent. The mode is taken from the contest's own name. That is why it is unverified: the dates are DARC's, the rule is an inference from them, and the rest is a gap.\n\nWHERE THE BANDS WOULD HAVE BEEN: Not read: this series has no Ausschreibung linked from DARC's table. That sentence sits here rather than in bands_note, because bands_note is for a sponsor's own wording ABOUT a band list and must never stand in for one -- a test enforces it, and it caught this.",
      "exchange": "",
      "country": "DE",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-23",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "darc-hell-kurz-20260217T1800@contestcal",
      "start_date": "2026-02-17",
      "mode_families": [
        "Digital"
      ],
      "band_families": [],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "cwops-cwt",
      "name": "CWops Test (CWT)",
      "start": "2026-02-18T13:00:00Z",
      "end": "2026-02-18T14:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "CWops",
      "rules_url": "https://cwops.org/cwops-tests/",
      "verified": true,
      "note": "",
      "exchange": "Members: name + CWops number. Non-members: name + state/province/DX prefix.",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "cwops-cwt-20260218T1300@contestcal",
      "start_date": "2026-02-18",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "sarl-club-80m",
      "name": "SARL Wednesday 80 m Club Contest",
      "start": "2026-02-18T17:00:00Z",
      "end": "2026-02-18T18:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "SSB",
        "CW",
        "RTTY"
      ],
      "submodes": [],
      "bands": [
        "80m"
      ],
      "bands_note": "Phone 3 603-3 650 and 3 703-3 800 kHz; CW 3 510-3 560 kHz; RTTY 3 580-3 600 kHz. The segment 3 651-3 700 kHz is contest free.",
      "sponsor": "SARL",
      "rules_url": "https://mysarl.org.za/wp-content/uploads/2025/12/2026-SARL-Contest-Manual-Version-1.1-2025-12-15.pdf",
      "verified": true,
      "note": "A club championship rather than an individual contest: operators' scores are added into a club total. The month list is SARL's own -- these run in four months of the year, not every month -- which is what monthly_nth_weekday's `months` field exists for. log_format and log_deadline_days are absent: this pass read each contest's Aim, Dates, Frequencies and Exchange sections and did not read its Log Sheets section, so neither is recorded rather than assumed from SARL's other contests.\n\nPROVENANCE RESTORED 2026-08-23. This record carried verified: true with an EMPTY source_note -- one of three the 2026-08-21 rule audit found, and a stricter defect than the thin ARRL notes beside them: an empty string is not weak evidence, it is none, and there was nothing in the record to check a rule against. The rule, the times, the bands and the exchange were all correct; only the evidence for them was missing. Re-read from the manual and quoted above, and SARL's own printed 2026 dates reproduce it.",
      "exchange": "Your name, your Abbreviated Club Callsign and your 4-character grid square (for example KG30).",
      "country": "ZA",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-23",
      "can_enter": false,
      "eligibility_scope": "entity_list",
      "eligibility_reason": "Entry limited to ZS. K stations may be worked but cannot submit an entry.",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "sarl-club-80m-20260218T1700@contestcal",
      "start_date": "2026-02-18",
      "mode_families": [
        "CW",
        "SSB",
        "RTTY",
        "Digital"
      ],
      "band_families": [
        "80m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "agcw-sta",
      "name": "AGCW Schlackertastenabend (STA)",
      "start": "2026-02-18T19:00:00Z",
      "end": "2026-02-18T20:30:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1.5,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "80m",
        "40m"
      ],
      "bands_note": "",
      "sponsor": "AGCW-DL",
      "rules_url": "https://www.agcw.de/contest/sta/",
      "verified": true,
      "note": "AGCW's own 'nächster Termin: 21. Okt. 2026' is the independent check on the October leg -- the third Wednesday of October 2026 is indeed the 21st.",
      "exchange": "RST + running QSO number from 001 per year + type of bug used",
      "country": "DE",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-12",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "agcw-sta-20260218T1900@contestcal",
      "start_date": "2026-02-18",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "80m",
        "40m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "cwops-cwt",
      "name": "CWops Test (CWT)",
      "start": "2026-02-18T19:00:00Z",
      "end": "2026-02-18T20:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "CWops",
      "rules_url": "https://cwops.org/cwops-tests/",
      "verified": true,
      "note": "",
      "exchange": "Members: name + CWops number. Non-members: name + state/province/DX prefix.",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "cwops-cwt-20260218T1900@contestcal",
      "start_date": "2026-02-18",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "cwops-cwt",
      "name": "CWops Test (CWT)",
      "start": "2026-02-19T03:00:00Z",
      "end": "2026-02-19T04:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "CWops",
      "rules_url": "https://cwops.org/cwops-tests/",
      "verified": true,
      "note": "",
      "exchange": "Members: name + CWops number. Non-members: name + state/province/DX prefix.",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "cwops-cwt-20260219T0300@contestcal",
      "start_date": "2026-02-19",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "cwops-cwt",
      "name": "CWops Test (CWT)",
      "start": "2026-02-19T07:00:00Z",
      "end": "2026-02-19T08:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "CWops",
      "rules_url": "https://cwops.org/cwops-tests/",
      "verified": true,
      "note": "",
      "exchange": "Members: name + CWops number. Non-members: name + state/province/DX prefix.",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "cwops-cwt-20260219T0700@contestcal",
      "start_date": "2026-02-19",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "nccc-ns-ft4",
      "name": "NCCC FT4 Sprint (FT4 NS)",
      "start": "2026-02-20T01:00:00Z",
      "end": "2026-02-20T01:30:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.5,
      "modes": [
        "FT8/FT4"
      ],
      "submodes": [
        "FT4"
      ],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "Northern California Contest Club (NCCC)",
      "rules_url": "https://www.ncccsprint.com/ft4ns.html",
      "verified": true,
      "note": "NCCC describes these as 'nominal rules' that may be modified on a weekly basis, and runs formal Ladder seasons interspersed with practice weeks. The 30-minute session slot itself is fixed.",
      "exchange": "Grid square (following NA VHF, WW Digi and ARRL IDC practice)",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "nccc-ns-ft4-20260220T0100@contestcal",
      "start_date": "2026-02-20",
      "mode_families": [
        "Digital",
        "FT8/FT4"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "nccc-ns-rtty",
      "name": "NCCC RTTY Sprint (RTTY NS)",
      "start": "2026-02-20T01:45:00Z",
      "end": "2026-02-20T02:15:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.5,
      "modes": [
        "RTTY"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m"
      ],
      "bands_note": "",
      "sponsor": "Northern California Contest Club (NCCC)",
      "rules_url": "https://ncccsprint.com/rttyns.html",
      "verified": true,
      "note": "NCCC describes these as 'nominal rules' that may be modified on a weekly basis, and runs formal Ladder seasons interspersed with practice weeks. The 30-minute session slot itself is fixed.",
      "exchange": "Serial number + name + QTH (both callsigns required in the exchange)",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "nccc-ns-rtty-20260220T0145@contestcal",
      "start_date": "2026-02-20",
      "mode_families": [
        "RTTY",
        "Digital"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "nccc-ns-cw",
      "name": "NCCC Sprint (NS)",
      "start": "2026-02-20T02:30:00Z",
      "end": "2026-02-20T03:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.5,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m"
      ],
      "bands_note": "",
      "sponsor": "Northern California Contest Club (NCCC)",
      "rules_url": "https://ncccsprint.com/rules.html",
      "verified": true,
      "note": "NCCC describes these as 'nominal rules' that may be modified on a weekly basis, and runs formal Ladder seasons interspersed with practice weeks. The 30-minute session slot itself is fixed.",
      "exchange": "Serial number + name + QTH (both callsigns required in the exchange)",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "nccc-ns-cw-20260220T0230@contestcal",
      "start_date": "2026-02-20",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "k1usn-sst",
      "name": "K1USN Slow Speed Test (SST)",
      "start": "2026-02-20T20:00:00Z",
      "end": "2026-02-20T21:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "",
      "sponsor": "K1USN Radio Club",
      "rules_url": "https://www.k1usn.com/sst_rules.html",
      "verified": true,
      "note": "No formal log submission -- participants post scores to 3830scores.com.",
      "exchange": "Name + state/province/DX country",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "k1usn-sst-20260220T2000@contestcal",
      "start_date": "2026-02-20",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "arrl-dx-cw",
      "name": "ARRL International DX Contest, CW",
      "start": "2026-02-21T00:00:00Z",
      "end": "2026-02-22T23:59:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 47.98,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "",
      "sponsor": "ARRL",
      "rules_url": "http://www.arrl.org/arrl-dx",
      "verified": true,
      "note": "",
      "exchange": "",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-21",
      "can_enter": true,
      "eligibility_scope": "two_sided",
      "eligibility_reason": "K is in the 'W/VE' group.",
      "works": "works DX only",
      "practical": "",
      "log_due": null,
      "uid": "arrl-dx-cw-20260221T0000@contestcal",
      "start_date": "2026-02-21",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "gte24"
    },
    {
      "contest_id": "ref-coupe-du-ref-ssb",
      "name": "Coupe du REF, SSB",
      "start": "2026-02-21T06:00:00Z",
      "end": "2026-02-22T18:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 36,
      "modes": [
        "SSB"
      ],
      "submodes": [],
      "bands": [
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "",
      "sponsor": "REF",
      "rules_url": "https://concours.r-e-f.org/reglements/actuels/reg_cdfhf_fr_20260513.pdf",
      "verified": true,
      "note": "CONTRADICTION IN REF'S OWN DOCUMENT, RECORDED RATHER THAN RECONCILED: section 1(b) scopes these two parts to 'Bandes HF (80-10 m)' and the English rules list '80, 40, 20, 15, 10 m', but section 3(c) of the same PDF says 'Segments concours IARU des bandes 160, 80, 40, 20, 15 et 10 metres'. The document also governs the 160 m sub-part (REF 160 Metres, a separate record here), which is the likely reason the band is listed in 3(c); the 80-10 m reading is encoded because it is the one that scopes these parts specifically and the one the English rules repeat. REF's common HF rules ('Regles communes a tous les concours HF', 6A) state the deadline as '8 (huit) jours apres la fin du concours a minuit heure legale francaise', so the computed instant here is the end plus 8 days rather than French legal midnight.",
      "exchange": "French metropolitan stations send RS(T) + the number of the department where the antenna is located (e.g. 599 69); F6REF, the REF's official station, sends RS(T) + 00. DOM/TOM stations send RS(T) + the prefix of their entity (e.g. 599 FM). Foreign stations send RS(T) + a serial number starting at 001.",
      "country": "FR",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-18",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": "2026-03-02T18:00:00Z",
      "uid": "ref-coupe-du-ref-ssb-20260221T0600@contestcal",
      "start_date": "2026-02-21",
      "mode_families": [
        "SSB"
      ],
      "band_families": [
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "gte24"
    },
    {
      "contest_id": "k1usn-sst",
      "name": "K1USN Slow Speed Test (SST)",
      "start": "2026-02-23T00:00:00Z",
      "end": "2026-02-23T01:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "",
      "sponsor": "K1USN Radio Club",
      "rules_url": "https://www.k1usn.com/sst_rules.html",
      "verified": true,
      "note": "No formal log submission -- participants post scores to 3830scores.com.",
      "exchange": "Name + state/province/DX country",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "k1usn-sst-20260223T0000@contestcal",
      "start_date": "2026-02-23",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "agcw-zap-merit",
      "name": "AGCW ZAP Merit Contest (ZMC)",
      "start": "2026-02-23T17:40:00Z",
      "end": "2026-02-23T18:30:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.83,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "80m"
      ],
      "bands_note": "",
      "sponsor": "AGCW-DL",
      "rules_url": "https://www.agcw.de/contest/tzap/",
      "verified": false,
      "note": "PARTLY UNVERIFIED. The recurrence (every Monday), the 1740 UTC pre-logging opening and the 1800 UTC telegram transmission are all quoted from AGCW. AGCW publishes NO closing time. The 1830 end stored here is a PLACEHOLDER so the record expands -- it is not a sponsor fact and must not be presented as one. Confirm the session length with the ZMC manager before shipping. Points accumulate over a calendar year; logs are due 31 January of the following year.",
      "exchange": "Callsign + date + time + RST (SWLs log RST of both stations in a QSO)",
      "country": "DE",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-12",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "agcw-zap-merit-20260223T1740@contestcal",
      "start_date": "2026-02-23",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "80m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "rsgb-ft4-series",
      "name": "RSGB FT4 Contest Series",
      "start": "2026-02-23T20:00:00Z",
      "end": "2026-02-23T22:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 2,
      "modes": [
        "FT8/FT4"
      ],
      "submodes": [
        "FT4"
      ],
      "bands": [
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "80, 40, 20, 15 and 10 m.",
      "sponsor": "RSGB Contest Committee",
      "rules_url": "https://www.rsgbcc.org/hf/rules/2026/r80m_ft4.shtml",
      "verified": true,
      "note": "TWELVE MONDAY EVENINGS AND THE CLOCK SHIFTS FOR THE SUMMER: January to March and October to December run 2000-2200 UTC, April to September run 1900-2100. Six legs each way, so the record's default is the winter clock and the summer legs carry their own -- the third contest to need per-date times, after the Autumn Series and the 80m Club Championship.\n\nMANUAL BECAUSE THE DATES ARE NOT ON THE RULES PAGE and follow no ordinal: they are Mondays, but the third Monday in January, the fourth in February, the third in March. RSGB publishes them on its CGI calendar and this record holds what that prints.\n\nNot the same contest as the FT4 International Activity Day in April, which is 24 hours and has its own rules page.",
      "exchange": "A signal report. A serial number is not required.",
      "country": "GB",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-23",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": "2026-02-24T22:00:00Z",
      "uid": "rsgb-ft4-series-20260223T2000@contestcal",
      "start_date": "2026-02-23",
      "mode_families": [
        "Digital",
        "FT8/FT4"
      ],
      "band_families": [
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "2-12"
    },
    {
      "contest_id": "skcc-sks",
      "name": "SKCC Straight Key Sprint (SKS)",
      "start": "2026-02-25T00:00:00Z",
      "end": "2026-02-25T02:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 2,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m",
        "6m"
      ],
      "bands_note": "Suggested frequencies, one per band",
      "sponsor": "Straight Key Century Club",
      "rules_url": "https://www.skccgroup.com/operating_activities/weekday_sprint/",
      "verified": true,
      "note": "",
      "exchange": "RST + QTH + name + SKCC number",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "skcc-sks-20260225T0000@contestcal",
      "start_date": "2026-02-25",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m",
        "6m"
      ],
      "duration_bucket": "2-12"
    },
    {
      "contest_id": "cwops-cwt",
      "name": "CWops Test (CWT)",
      "start": "2026-02-25T13:00:00Z",
      "end": "2026-02-25T14:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "CWops",
      "rules_url": "https://cwops.org/cwops-tests/",
      "verified": true,
      "note": "",
      "exchange": "Members: name + CWops number. Non-members: name + state/province/DX prefix.",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "cwops-cwt-20260225T1300@contestcal",
      "start_date": "2026-02-25",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "cwops-cwt",
      "name": "CWops Test (CWT)",
      "start": "2026-02-25T19:00:00Z",
      "end": "2026-02-25T20:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "CWops",
      "rules_url": "https://cwops.org/cwops-tests/",
      "verified": true,
      "note": "",
      "exchange": "Members: name + CWops number. Non-members: name + state/province/DX prefix.",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "cwops-cwt-20260225T1900@contestcal",
      "start_date": "2026-02-25",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "cwops-cwt",
      "name": "CWops Test (CWT)",
      "start": "2026-02-26T03:00:00Z",
      "end": "2026-02-26T04:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "CWops",
      "rules_url": "https://cwops.org/cwops-tests/",
      "verified": true,
      "note": "",
      "exchange": "Members: name + CWops number. Non-members: name + state/province/DX prefix.",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "cwops-cwt-20260226T0300@contestcal",
      "start_date": "2026-02-26",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "cwops-cwt",
      "name": "CWops Test (CWT)",
      "start": "2026-02-26T07:00:00Z",
      "end": "2026-02-26T08:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "CWops",
      "rules_url": "https://cwops.org/cwops-tests/",
      "verified": true,
      "note": "",
      "exchange": "Members: name + CWops number. Non-members: name + state/province/DX prefix.",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "cwops-cwt-20260226T0700@contestcal",
      "start_date": "2026-02-26",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "rsgb-80mcc-cw",
      "name": "RSGB 3.5 MHz Club Championship, CW",
      "start": "2026-02-26T20:00:00Z",
      "end": "2026-02-26T21:30:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1.5,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "80m"
      ],
      "bands_note": "3510-3565 kHz at any speed, with 3565-3570 kHz reserved for 15 wpm maximum.",
      "sponsor": "RSGB Contest Committee",
      "rules_url": "https://www.rsgbcc.org/hf/rules/2026/r80mcc.shtml",
      "verified": true,
      "note": "THE DATES ARE NOT ON THE RULES PAGE. RSGB publishes the rules at rules/2026/r80mcc.shtml and the eighteen legs on a separate CGI calendar, and the rules page links to it in so many words. This record holds what that calendar prints; nothing is derived.\n\nTHE CLOCK MOVES IN APRIL and the record says so per date: February and March run 2000-2130 UTC, April to July run 1900-2030. The record's default is the April-July clock because four of each mode's six legs use it, and the two early legs carry their own times. Same mechanism as the Autumn Series, and the second contest to need it.\n\nMANUAL BECAUSE THE LEGS FOLLOW NO ORDINAL. They fall on Mondays, Wednesdays and Thursdays with the weekday rotating through the series, which is exactly the shape an ordinal must not be fitted to.\n\nNON-UK STATIONS MAY ENTER AS INDIVIDUALS -- RSGB states it, which is worth noting beside the AFS and Club Calls contests where entry really is UK&CD only.",
      "exchange": "RS(T) plus a serial number starting at 1 and incrementing by 1.",
      "country": "GB",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-23",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": "2026-02-27T21:30:00Z",
      "uid": "rsgb-80mcc-cw-20260226T2000@contestcal",
      "start_date": "2026-02-26",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "80m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "nccc-ns-ft4",
      "name": "NCCC FT4 Sprint (FT4 NS)",
      "start": "2026-02-27T01:00:00Z",
      "end": "2026-02-27T01:30:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.5,
      "modes": [
        "FT8/FT4"
      ],
      "submodes": [
        "FT4"
      ],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "Northern California Contest Club (NCCC)",
      "rules_url": "https://www.ncccsprint.com/ft4ns.html",
      "verified": true,
      "note": "NCCC describes these as 'nominal rules' that may be modified on a weekly basis, and runs formal Ladder seasons interspersed with practice weeks. The 30-minute session slot itself is fixed.",
      "exchange": "Grid square (following NA VHF, WW Digi and ARRL IDC practice)",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "nccc-ns-ft4-20260227T0100@contestcal",
      "start_date": "2026-02-27",
      "mode_families": [
        "Digital",
        "FT8/FT4"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "nccc-ns-rtty",
      "name": "NCCC RTTY Sprint (RTTY NS)",
      "start": "2026-02-27T01:45:00Z",
      "end": "2026-02-27T02:15:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.5,
      "modes": [
        "RTTY"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m"
      ],
      "bands_note": "",
      "sponsor": "Northern California Contest Club (NCCC)",
      "rules_url": "https://ncccsprint.com/rttyns.html",
      "verified": true,
      "note": "NCCC describes these as 'nominal rules' that may be modified on a weekly basis, and runs formal Ladder seasons interspersed with practice weeks. The 30-minute session slot itself is fixed.",
      "exchange": "Serial number + name + QTH (both callsigns required in the exchange)",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "nccc-ns-rtty-20260227T0145@contestcal",
      "start_date": "2026-02-27",
      "mode_families": [
        "RTTY",
        "Digital"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "nccc-ns-cw",
      "name": "NCCC Sprint (NS)",
      "start": "2026-02-27T02:30:00Z",
      "end": "2026-02-27T03:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.5,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m"
      ],
      "bands_note": "",
      "sponsor": "Northern California Contest Club (NCCC)",
      "rules_url": "https://ncccsprint.com/rules.html",
      "verified": true,
      "note": "NCCC describes these as 'nominal rules' that may be modified on a weekly basis, and runs formal Ladder seasons interspersed with practice weeks. The 30-minute session slot itself is fixed.",
      "exchange": "Serial number + name + QTH (both callsigns required in the exchange)",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "nccc-ns-cw-20260227T0230@contestcal",
      "start_date": "2026-02-27",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "k1usn-sst",
      "name": "K1USN Slow Speed Test (SST)",
      "start": "2026-02-27T20:00:00Z",
      "end": "2026-02-27T21:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "",
      "sponsor": "K1USN Radio Club",
      "rules_url": "https://www.k1usn.com/sst_rules.html",
      "verified": true,
      "note": "No formal log submission -- participants post scores to 3830scores.com.",
      "exchange": "Name + state/province/DX country",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "k1usn-sst-20260227T2000@contestcal",
      "start_date": "2026-02-27",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "cq-160-ssb",
      "name": "CQ 160-Meter Contest, SSB",
      "start": "2026-02-27T22:00:00Z",
      "end": "2026-03-01T22:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 48,
      "modes": [
        "SSB"
      ],
      "submodes": [],
      "bands": [
        "160m"
      ],
      "bands_note": "1810-2000 kHz in ITU Region 1; 1800-2000 kHz in ITU Regions 2 and 3",
      "sponsor": "CQ Magazine",
      "rules_url": "https://cq160.com/rules/index.htm",
      "verified": true,
      "note": "",
      "exchange": "RS(T) and state for U.S., province for Canada, and CQ Zone for DX",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-16",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": "2026-03-06T22:00:00Z",
      "uid": "cq-160-ssb-20260227T2200@contestcal",
      "start_date": "2026-02-27",
      "mode_families": [
        "SSB"
      ],
      "band_families": [
        "160m"
      ],
      "duration_bucket": "gte24"
    },
    {
      "contest_id": "nzart-jock-white-field-day",
      "name": "Jock White Memorial Field Day",
      "start": "2026-02-28T02:00:00Z",
      "end": "2026-02-28T11:00:00Z",
      "start_wall": "2026-02-28T15:00:00",
      "end_wall": "2026-03-01T00:00:00",
      "local_rolling": false,
      "timezone": "Pacific/Auckland",
      "duration_hours": 9,
      "modes": [
        "SSB",
        "CW"
      ],
      "submodes": [],
      "bands": [
        "80m",
        "40m"
      ],
      "bands_note": "",
      "sponsor": "NZART",
      "rules_url": "https://nzart.org.nz/activities/contests/jwfd/",
      "verified": true,
      "note": "NZART SETS THIS ONE BY THE NEW ZEALAND CLOCK, NOT BY UTC: 1500-2400 Saturday and 0600-1500 Sunday NZDT. The UTC instants shown here therefore move with New Zealand daylight saving, unlike almost every other contest in this calendar. The QRP category is '5 Watts CW/10 Watts SSB maximum'; the 100W figure is NZART's overall limit. The log deadline is 'the Saturday which is four weeks after the Field Day Saturday' -- anchored to the Saturday rather than to either session's end -- so no interval is computed.",
      "exchange": "RS(T), a serial number starting at 001, and an NZART branch number (home stations use 00)",
      "country": "NZ",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-17",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "nzart-jock-white-field-day-20260228T0200@contestcal",
      "start_date": "2026-02-28",
      "mode_families": [
        "CW",
        "SSB"
      ],
      "band_families": [
        "80m",
        "40m"
      ],
      "duration_bucket": "2-12"
    },
    {
      "contest_id": "uba-dx-cw",
      "name": "UBA DX Contest, CW",
      "start": "2026-02-28T13:00:00Z",
      "end": "2026-03-01T13:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 24,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "",
      "sponsor": "UBA",
      "rules_url": "https://www.uba.be/en/hf/contest-rules/uba-dx-contest",
      "verified": true,
      "note": "LAST SATURDAY, NOT LAST FULL WEEKEND, and UBA's own 2026 dates are what settle it: 31 January 2026 is a Saturday and 1 February is a Sunday, so the last full weekend of January 2026 would be 24-25 January. UBA published 31 January - 1 February, which only the last-Saturday reading produces. The QRP figure recorded here is the SSB one; UBA's rule is 'QRP SSB maximum 10 Watts output, CW maximum 5 Watts output.' The stated deadline instants (SSB 8 February 23:59 UTC, CW 8 March 23:59 UTC) are the right dates for a 7-day interval but 23:59 rather than the 13:00 that end-plus-7-days gives; the interval is what UBA states as the rule, so it is what is encoded.",
      "exchange": "Stations on Belgian territory send RS(T) + serial number starting with 001 + the abbreviation of their UBA section (e.g. 59001 ACC); non-members send XXX and the national stations send UBA. Stations outside Belgium send RS(T) + serial number starting from 001.",
      "country": "BE",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-18",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": "2026-03-08T13:00:00Z",
      "uid": "uba-dx-cw-20260228T1300@contestcal",
      "start_date": "2026-02-28",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "gte24"
    },
    {
      "contest_id": "nzart-jock-white-field-day",
      "name": "Jock White Memorial Field Day",
      "start": "2026-02-28T17:00:00Z",
      "end": "2026-03-01T02:00:00Z",
      "start_wall": "2026-03-01T06:00:00",
      "end_wall": "2026-03-01T15:00:00",
      "local_rolling": false,
      "timezone": "Pacific/Auckland",
      "duration_hours": 9,
      "modes": [
        "SSB",
        "CW"
      ],
      "submodes": [],
      "bands": [
        "80m",
        "40m"
      ],
      "bands_note": "",
      "sponsor": "NZART",
      "rules_url": "https://nzart.org.nz/activities/contests/jwfd/",
      "verified": true,
      "note": "NZART SETS THIS ONE BY THE NEW ZEALAND CLOCK, NOT BY UTC: 1500-2400 Saturday and 0600-1500 Sunday NZDT. The UTC instants shown here therefore move with New Zealand daylight saving, unlike almost every other contest in this calendar. The QRP category is '5 Watts CW/10 Watts SSB maximum'; the 100W figure is NZART's overall limit. The log deadline is 'the Saturday which is four weeks after the Field Day Saturday' -- anchored to the Saturday rather than to either session's end -- so no interval is computed.",
      "exchange": "RS(T), a serial number starting at 001, and an NZART branch number (home stations use 00)",
      "country": "NZ",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-17",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "nzart-jock-white-field-day-20260228T1700@contestcal",
      "start_date": "2026-02-28",
      "mode_families": [
        "CW",
        "SSB"
      ],
      "band_families": [
        "80m",
        "40m"
      ],
      "duration_bucket": "2-12"
    },
    {
      "contest_id": "naqp-rtty",
      "name": "North American QSO Party, RTTY",
      "start": "2026-02-28T18:00:00Z",
      "end": "2026-03-01T05:59:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 11.98,
      "modes": [
        "RTTY"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "",
      "sponsor": "National Contest Journal (NCJ)",
      "rules_url": "https://www.ncjweb.com/NAQP-Rules.pdf",
      "verified": true,
      "note": "Demonstrates that 'last Saturday' and 'last full weekend' are distinct rules. CQ 160 SSB turned out to need a third one again -- CQ's published dates fit neither, and that record is the fourth Saturday of February.",
      "exchange": "Name + state/province/country",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "naqp-rtty-20260228T1800@contestcal",
      "start_date": "2026-02-28",
      "mode_families": [
        "RTTY",
        "Digital"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "2-12"
    },
    {
      "contest_id": "uba-spring-2m",
      "name": "UBA Spring Contest, 2m",
      "start": "2026-03-01T07:00:00Z",
      "end": "2026-03-01T11:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 4,
      "modes": [
        "SSB",
        "CW"
      ],
      "submodes": [],
      "bands": [
        "2m"
      ],
      "bands_note": "",
      "sponsor": "UBA",
      "rules_url": "https://www.uba.be/en/hf/contest-rules/spring-contest-dst",
      "verified": true,
      "note": "MANUAL, DELIBERATELY: UBA states four dated legs and no recurrence rule anywhere on the page. All four 2026 dates are Sundays a week apart, but UBA never says 'every Sunday in March' or names an ordinal, so no rule is asserted on its behalf and the record simply ends after 2026 rather than guessing. The page also notes 'The order of the various competitions has been changed compared to previous years', which is a reason not to extrapolate.",
      "exchange": "Belgian stations send RS(T) + a serial number starting with 001 + their UBA section (XXX for non-members, UBA for the national stations); foreign stations send RS(T) + a serial number starting with 001.",
      "country": "BE",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-18",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": "2026-03-15T11:00:00Z",
      "uid": "uba-spring-2m-20260301T0700@contestcal",
      "start_date": "2026-03-01",
      "mode_families": [
        "CW",
        "SSB"
      ],
      "band_families": [
        "VHF+"
      ],
      "duration_bucket": "2-12"
    },
    {
      "contest_id": "sarl-hamnet-40m-sec",
      "name": "SARL HAMNET 40 m Simulated Emergency Contest",
      "start": "2026-03-01T12:00:00Z",
      "end": "2026-03-01T14:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 2,
      "modes": [
        "SSB"
      ],
      "submodes": [],
      "bands": [
        "40m"
      ],
      "bands_note": "A 40 m phone contest in 7 063-7 100 kHz and 7 130-7 200 kHz.",
      "sponsor": "SARL",
      "rules_url": "https://mysarl.org.za/wp-content/uploads/2025/12/2026-SARL-Contest-Manual-Version-1.1-2025-12-15.pdf",
      "verified": true,
      "note": "An emergency-preparedness exercise scored as a contest, with field-station and mobile categories. The entity list is SARL's own sentence rather than an inference, which is why this record's eligibility is verified while the club contests' is not. log_format and log_deadline_days are absent: this pass read each contest's Aim, Dates, Frequencies and Exchange sections and did not read its Log Sheets section, so neither is recorded rather than assumed from SARL's other contests.",
      "exchange": "",
      "country": "ZA",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-19",
      "can_enter": false,
      "eligibility_scope": "entity_list",
      "eligibility_reason": "Entry limited to 9 listed entities. K stations may be worked but cannot submit an entry.",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "sarl-hamnet-40m-sec-20260301T1200@contestcal",
      "start_date": "2026-03-01",
      "mode_families": [
        "SSB"
      ],
      "band_families": [
        "40m"
      ],
      "duration_bucket": "2-12"
    },
    {
      "contest_id": "k1usn-sst",
      "name": "K1USN Slow Speed Test (SST)",
      "start": "2026-03-02T00:00:00Z",
      "end": "2026-03-02T01:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "",
      "sponsor": "K1USN Radio Club",
      "rules_url": "https://www.k1usn.com/sst_rules.html",
      "verified": true,
      "note": "No formal log submission -- participants post scores to 3830scores.com.",
      "exchange": "Name + state/province/DX country",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "k1usn-sst-20260302T0000@contestcal",
      "start_date": "2026-03-02",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "agcw-zap-merit",
      "name": "AGCW ZAP Merit Contest (ZMC)",
      "start": "2026-03-02T17:40:00Z",
      "end": "2026-03-02T18:30:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.83,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "80m"
      ],
      "bands_note": "",
      "sponsor": "AGCW-DL",
      "rules_url": "https://www.agcw.de/contest/tzap/",
      "verified": false,
      "note": "PARTLY UNVERIFIED. The recurrence (every Monday), the 1740 UTC pre-logging opening and the 1800 UTC telegram transmission are all quoted from AGCW. AGCW publishes NO closing time. The 1830 end stored here is a PLACEHOLDER so the record expands -- it is not a sponsor fact and must not be presented as one. Confirm the session length with the ZMC manager before shipping. Points accumulate over a calendar year; logs are due 31 January of the following year.",
      "exchange": "Callsign + date + time + RST (SWLs log RST of both stations in a QSO)",
      "country": "DE",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-12",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "agcw-zap-merit-20260302T1740@contestcal",
      "start_date": "2026-03-02",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "80m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "rsgb-80mcc-data",
      "name": "RSGB 3.5 MHz Club Championship, Data",
      "start": "2026-03-02T20:00:00Z",
      "end": "2026-03-02T21:30:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1.5,
      "modes": [
        "RTTY",
        "Digital"
      ],
      "submodes": [
        "PSK63"
      ],
      "bands": [
        "80m"
      ],
      "bands_note": "PSK63 3580-3590 kHz; RTTY 3590-3620 kHz.",
      "sponsor": "RSGB Contest Committee",
      "rules_url": "https://www.rsgbcc.org/hf/rules/2026/r80mcc.shtml",
      "verified": true,
      "note": "THE DATES ARE NOT ON THE RULES PAGE. RSGB publishes the rules at rules/2026/r80mcc.shtml and the eighteen legs on a separate CGI calendar, and the rules page links to it in so many words. This record holds what that calendar prints; nothing is derived.\n\nTHE CLOCK MOVES IN APRIL and the record says so per date: February and March run 2000-2130 UTC, April to July run 1900-2030. The record's default is the April-July clock because four of each mode's six legs use it, and the two early legs carry their own times. Same mechanism as the Autumn Series, and the second contest to need it.\n\nMANUAL BECAUSE THE LEGS FOLLOW NO ORDINAL. They fall on Mondays, Wednesdays and Thursdays with the weekday rotating through the series, which is exactly the shape an ordinal must not be fitted to.\n\nNON-UK STATIONS MAY ENTER AS INDIVIDUALS -- RSGB states it, which is worth noting beside the AFS and Club Calls contests where entry really is UK&CD only.",
      "exchange": "RS(T) plus a serial number starting at 1 and incrementing by 1.",
      "country": "GB",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-23",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": "2026-03-03T21:30:00Z",
      "uid": "rsgb-80mcc-data-20260302T2000@contestcal",
      "start_date": "2026-03-02",
      "mode_families": [
        "RTTY",
        "Digital"
      ],
      "band_families": [
        "80m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "ars-spartan-sprint",
      "name": "ARS Spartan Sprint",
      "start": "2026-03-03T01:00:00Z",
      "end": "2026-03-03T03:00:00Z",
      "start_wall": "2026-03-02T20:00:00",
      "end_wall": "2026-03-02T22:00:00",
      "local_rolling": false,
      "timezone": "America/New_York",
      "duration_hours": 2,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "",
      "sponsor": "Adventure Radio Society",
      "rules_url": "https://ars-qrp.com/Spartan_Sprint/Spartan_Sprint.html",
      "verified": true,
      "note": "CORRECTION (anchor): previously encoded as the first TUESDAY of the month. The sponsor's rule is the first MONDAY US local, which lands on Tuesday UTC -- and those are different dates whenever the 1st falls on a Tuesday (Sep and Dec 2026). SPONSOR-ANCHORED LOCAL TIME: ARS publishes no UTC time and states the event 'is always at these Local Times', so the UTC instant is what moves -- 0100Z Tuesday under EST, 0000Z Tuesday under EDT. Resolved through America/New_York rather than hardcoded, so DST is handled. ARS lists Eastern, Central, Mountain and Pacific times that are the same instant in every zone that observes DST; Arizona, which does not, is the one place the sponsor's own table is inconsistent.",
      "exchange": "RST + state/province + power output",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "ars-spartan-sprint-20260303T0100@contestcal",
      "start_date": "2026-03-03",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "2-12"
    },
    {
      "contest_id": "agcw-yl-cw-party",
      "name": "AGCW YL-CW-Party",
      "start": "2026-03-03T19:00:00Z",
      "end": "2026-03-03T21:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 2,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "80m"
      ],
      "bands_note": "",
      "sponsor": "AGCW-DL",
      "rules_url": "https://www.agcw.de/contest/yl-cw-party/",
      "verified": true,
      "note": "AGCW's own 'Nächster Termin: 3. März 2026' is the independent check -- the first Tuesday of March 2026 is the 3rd. OM-to-OM QSOs score zero, so the contest is built around working YLs.",
      "exchange": "RST + running QSO number from 001 + 'YL' or 'OM' + first name",
      "country": "DE",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-12",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "agcw-yl-cw-party-20260303T1900@contestcal",
      "start_date": "2026-03-03",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "80m"
      ],
      "duration_bucket": "2-12"
    },
    {
      "contest_id": "cwops-cwt",
      "name": "CWops Test (CWT)",
      "start": "2026-03-04T13:00:00Z",
      "end": "2026-03-04T14:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "CWops",
      "rules_url": "https://cwops.org/cwops-tests/",
      "verified": true,
      "note": "",
      "exchange": "Members: name + CWops number. Non-members: name + state/province/DX prefix.",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "cwops-cwt-20260304T1300@contestcal",
      "start_date": "2026-03-04",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "cwops-cwt",
      "name": "CWops Test (CWT)",
      "start": "2026-03-04T19:00:00Z",
      "end": "2026-03-04T20:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "CWops",
      "rules_url": "https://cwops.org/cwops-tests/",
      "verified": true,
      "note": "",
      "exchange": "Members: name + CWops number. Non-members: name + state/province/DX prefix.",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "cwops-cwt-20260304T1900@contestcal",
      "start_date": "2026-03-04",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "cwops-cwt",
      "name": "CWops Test (CWT)",
      "start": "2026-03-05T03:00:00Z",
      "end": "2026-03-05T04:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "CWops",
      "rules_url": "https://cwops.org/cwops-tests/",
      "verified": true,
      "note": "",
      "exchange": "Members: name + CWops number. Non-members: name + state/province/DX prefix.",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "cwops-cwt-20260305T0300@contestcal",
      "start_date": "2026-03-05",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "cwops-cwt",
      "name": "CWops Test (CWT)",
      "start": "2026-03-05T07:00:00Z",
      "end": "2026-03-05T08:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "CWops",
      "rules_url": "https://cwops.org/cwops-tests/",
      "verified": true,
      "note": "",
      "exchange": "Members: name + CWops number. Non-members: name + state/province/DX prefix.",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "cwops-cwt-20260305T0700@contestcal",
      "start_date": "2026-03-05",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "skcc-skse",
      "name": "SKCC Straight Key Sprint Europe (SKSE)",
      "start": "2026-03-05T20:00:00Z",
      "end": "2026-03-05T22:00:00Z",
      "start_wall": "2026-03-05T21:00:00",
      "end_wall": "2026-03-05T23:00:00",
      "local_rolling": false,
      "timezone": "Europe/Berlin",
      "duration_hours": 2,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m",
        "6m"
      ],
      "bands_note": "160 through 6 m excluding the WARC bands -- SKCC names 60, 30, 17 and 12 m as excluded.",
      "sponsor": "Straight Key Century Club",
      "rules_url": "https://www.skccgroup.com/operating_activities/skse/",
      "verified": true,
      "note": "SKCC PRINTS TWO UTC TIMES AND THE CONTEST HAS ONE LOCAL TIME. 2000Z from November to March and 1900Z from April to October are both 2100 in central Europe: CET is UTC+1 and CEST is UTC+2. So this is not a contest that changes its hour twice a year, it is a contest at nine in the evening that Europe's clocks move around, and it is recorded the way the sponsor means it -- `timezone: Europe/Berlin` with wall_clock times, exactly as the ARS Spartan Sprint is recorded in New York.\n\nTHAT READING IS TESTABLE AND IT PASSES ON THE MONTHS THAT DECIDE IT. Europe changes clocks on the last Sunday of March and of October, and the first Thursday of both months falls on the near side of the change: March is still CET and resolves to 2000Z, April is CEST and resolves to 1900Z, October is still CEST at 1900Z, November is CET at 2000Z. All four match SKCC's own table, which is what makes this one rule rather than two.\n\nEncoding it as two records split by month -- winter and summer -- would have produced two entries with the same name and hidden the reason. Encoding one UTC time would have been wrong for five months of the year.\n\nStraight keys, sideswipers and bugs only: no keyer, no keyboard. That is the club's whole premise rather than a category.\n\nThe fifteen-minute QRS extensions at each end are not in the window: they are an invitation to slow operators rather than part of the scored period.",
      "exchange": "RST, QTH, the operator's name and the SKCC number. Non-members send 'none' for the number.",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-23",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": "2026-03-12T22:00:00Z",
      "uid": "skcc-skse-20260305T2000@contestcal",
      "start_date": "2026-03-05",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m",
        "6m"
      ],
      "duration_bucket": "2-12"
    },
    {
      "contest_id": "nccc-ns-ft4",
      "name": "NCCC FT4 Sprint (FT4 NS)",
      "start": "2026-03-06T01:00:00Z",
      "end": "2026-03-06T01:30:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.5,
      "modes": [
        "FT8/FT4"
      ],
      "submodes": [
        "FT4"
      ],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "Northern California Contest Club (NCCC)",
      "rules_url": "https://www.ncccsprint.com/ft4ns.html",
      "verified": true,
      "note": "NCCC describes these as 'nominal rules' that may be modified on a weekly basis, and runs formal Ladder seasons interspersed with practice weeks. The 30-minute session slot itself is fixed.",
      "exchange": "Grid square (following NA VHF, WW Digi and ARRL IDC practice)",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "nccc-ns-ft4-20260306T0100@contestcal",
      "start_date": "2026-03-06",
      "mode_families": [
        "Digital",
        "FT8/FT4"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "nccc-ns-rtty",
      "name": "NCCC RTTY Sprint (RTTY NS)",
      "start": "2026-03-06T01:45:00Z",
      "end": "2026-03-06T02:15:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.5,
      "modes": [
        "RTTY"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m"
      ],
      "bands_note": "",
      "sponsor": "Northern California Contest Club (NCCC)",
      "rules_url": "https://ncccsprint.com/rttyns.html",
      "verified": true,
      "note": "NCCC describes these as 'nominal rules' that may be modified on a weekly basis, and runs formal Ladder seasons interspersed with practice weeks. The 30-minute session slot itself is fixed.",
      "exchange": "Serial number + name + QTH (both callsigns required in the exchange)",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "nccc-ns-rtty-20260306T0145@contestcal",
      "start_date": "2026-03-06",
      "mode_families": [
        "RTTY",
        "Digital"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "nccc-ns-cw",
      "name": "NCCC Sprint (NS)",
      "start": "2026-03-06T02:30:00Z",
      "end": "2026-03-06T03:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.5,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m"
      ],
      "bands_note": "",
      "sponsor": "Northern California Contest Club (NCCC)",
      "rules_url": "https://ncccsprint.com/rules.html",
      "verified": true,
      "note": "NCCC describes these as 'nominal rules' that may be modified on a weekly basis, and runs formal Ladder seasons interspersed with practice weeks. The 30-minute session slot itself is fixed.",
      "exchange": "Serial number + name + QTH (both callsigns required in the exchange)",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "nccc-ns-cw-20260306T0230@contestcal",
      "start_date": "2026-03-06",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "k1usn-sst",
      "name": "K1USN Slow Speed Test (SST)",
      "start": "2026-03-06T20:00:00Z",
      "end": "2026-03-06T21:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "",
      "sponsor": "K1USN Radio Club",
      "rules_url": "https://www.k1usn.com/sst_rules.html",
      "verified": true,
      "note": "No formal log submission -- participants post scores to 3830scores.com.",
      "exchange": "Name + state/province/DX country",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "k1usn-sst-20260306T2000@contestcal",
      "start_date": "2026-03-06",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "arrl-dx-ssb",
      "name": "ARRL International DX Contest, Phone",
      "start": "2026-03-07T00:00:00Z",
      "end": "2026-03-08T23:59:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 47.98,
      "modes": [
        "SSB"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "",
      "sponsor": "ARRL",
      "rules_url": "http://www.arrl.org/arrl-dx",
      "verified": true,
      "note": "",
      "exchange": "",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-21",
      "can_enter": true,
      "eligibility_scope": "two_sided",
      "eligibility_reason": "K is in the 'W/VE' group.",
      "works": "works DX only",
      "practical": "",
      "log_due": null,
      "uid": "arrl-dx-ssb-20260307T0000@contestcal",
      "start_date": "2026-03-07",
      "mode_families": [
        "SSB"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "gte24"
    },
    {
      "contest_id": "erau-es-ll-kv",
      "name": "Estonian HF Cup (ES LL KV)",
      "start": "2026-03-07T08:00:00Z",
      "end": "2026-03-07T08:59:00Z",
      "start_wall": "2026-03-07T10:00:00",
      "end_wall": "2026-03-07T10:59:00",
      "local_rolling": false,
      "timezone": "Europe/Tallinn",
      "duration_hours": 0.98,
      "modes": [
        "CW",
        "SSB"
      ],
      "submodes": [],
      "bands": [
        "80m"
      ],
      "bands_note": "CW below 3600 kHz and SSB above it; 3530-3560 kHz and 3600-3650 kHz are recommended.",
      "sponsor": "ERAU",
      "rules_url": "https://www.erau.ee/images/LL/ES%20LL%20KV%20reeglid.pdf",
      "verified": true,
      "note": "SPONSOR-ANCHORED LOCAL TIME, and ERAU's own calendar proves the reading: 10:00-10:59 Estonian time is 08:00-08:59 UTC in winter (EET) and 07:00-07:59 in summer (EEST), which is exactly the split ERAU prints across the nine stages. The rules give no date rule at all -- 4.2 defers to the calendar plan -- so the dates are manual and taken from ERAU's published 2026 calendar. Eight of the nine are the first Saturday of their month; February's is the second. The log deadline is 'the Thursday of the following week', which is not a fixed number of days from the end of each stage, so it is recorded here rather than as log_deadline_days. Stages 4.3 also splits each hour into four periods; that is a scoring device inside one continuous hour.",
      "exchange": "RS(T) and a continuous serial number from 001.",
      "country": "EE",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-19",
      "can_enter": false,
      "eligibility_scope": "entity_list",
      "eligibility_reason": "Entry limited to ES. K stations may be worked but cannot submit an entry.",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "erau-es-ll-kv-20260307T0800@contestcal",
      "start_date": "2026-03-07",
      "mode_families": [
        "CW",
        "SSB"
      ],
      "band_families": [
        "80m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "sarl-yl-qso-party",
      "name": "SARL YL QSO Party",
      "start": "2026-03-07T14:00:00Z",
      "end": "2026-03-07T15:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW",
        "SSB"
      ],
      "submodes": [],
      "bands": [
        "40m"
      ],
      "bands_note": "Phone 7 063-7 100 and 7 130-7 200 kHz; CW 7 000-7 040 kHz.",
      "sponsor": "SARL",
      "rules_url": "https://mysarl.org.za/wp-content/uploads/2025/12/2026-SARL-Contest-Manual-Version-1.1-2025-12-15.pdf",
      "verified": true,
      "note": "The two legs anchor differently and that is the point: the March leg is the first Saturday nearest International Women's Day on 8 March, and the August leg is South Africa's National Women's Day, which is the FIXED DATE of 9 August. One record, two rule types, because both legs share the same hour. log_format and log_deadline_days are absent: this pass read each contest's Aim, Dates, Frequencies and Exchange sections and did not read its Log Sheets section, so neither is recorded rather than assumed from SARL's other contests.",
      "exchange": "An RS(T) report and YL or OM.",
      "country": "ZA",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-19",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "sarl-yl-qso-party-20260307T1400@contestcal",
      "start_date": "2026-03-07",
      "mode_families": [
        "CW",
        "SSB"
      ],
      "band_families": [
        "40m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "uarl-champ-rtty",
      "name": "Ukrainian HF Championship (RTTY)",
      "start": "2026-03-07T17:00:00Z",
      "end": "2026-03-07T18:59:00Z",
      "start_wall": "2026-03-07T19:00:00",
      "end_wall": "2026-03-07T20:59:00",
      "local_rolling": false,
      "timezone": "Europe/Kyiv",
      "duration_hours": 1.98,
      "modes": [
        "RTTY"
      ],
      "submodes": [],
      "bands": [
        "80m",
        "40m"
      ],
      "bands_note": "",
      "sponsor": "UARL",
      "rules_url": "http://uarl.org.ua/files/stories2026/Reglament_ChU-2026-or-040226.pdf",
      "verified": true,
      "note": "SPONSOR-ANCHORED LOCAL TIME: UARL states the schedule 'kyyivskoho chasu' -- Kyiv time -- so the record carries timezone Europe/Kyiv and wall_clock times. UARL publishes dates for the year, not a recurrence rule, so the record is manual and covers 2026 only. The four 30-minute rounds are contiguous and are encoded as one span. The deadline is stated as seven days from the end 'counting from the Monday', which is not a plain interval, so it is recorded here rather than as log_deadline_days. AGGREGATOR DECLINED: UARL republishes a monthly contest calendar that links contestcalendar.com; only UARL's own reglament was used.",
      "exchange": "The two-letter Ukrainian oblast code and a serial number from 001, numbered continuously across all four rounds -- ZP 001, KV 034.",
      "country": "UA",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-19",
      "can_enter": false,
      "eligibility_scope": "entity_list",
      "eligibility_reason": "Entry limited to UR. K stations may be worked but cannot submit an entry.",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "uarl-champ-rtty-20260307T1700@contestcal",
      "start_date": "2026-03-07",
      "mode_families": [
        "RTTY",
        "Digital"
      ],
      "band_families": [
        "80m",
        "40m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "uba-spring-80m-cw",
      "name": "UBA Spring Contest, 80m CW",
      "start": "2026-03-08T07:00:00Z",
      "end": "2026-03-08T11:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 4,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "80m"
      ],
      "bands_note": "",
      "sponsor": "UBA",
      "rules_url": "https://www.uba.be/en/hf/contest-rules/spring-contest-dst",
      "verified": true,
      "note": "MANUAL, DELIBERATELY: UBA states four dated legs and no recurrence rule anywhere on the page. All four 2026 dates are Sundays a week apart, but UBA never says 'every Sunday in March' or names an ordinal, so no rule is asserted on its behalf and the record simply ends after 2026 rather than guessing. The page also notes 'The order of the various competitions has been changed compared to previous years', which is a reason not to extrapolate.",
      "exchange": "Belgian stations send RS(T) + a serial number starting with 001 + their UBA section (XXX for non-members, UBA for the national stations); foreign stations send RS(T) + a serial number starting with 001.",
      "country": "BE",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-18",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": "2026-03-22T11:00:00Z",
      "uid": "uba-spring-80m-cw-20260308T0700@contestcal",
      "start_date": "2026-03-08",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "80m"
      ],
      "duration_bucket": "2-12"
    },
    {
      "contest_id": "mrasz-yl-om",
      "name": "HA YL-OM Contest",
      "start": "2026-03-08T13:30:00Z",
      "end": "2026-03-08T16:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 2.5,
      "modes": [
        "SSB",
        "FM"
      ],
      "submodes": [],
      "bands": [
        "80m",
        "2m"
      ],
      "bands_note": "VHF first, 13:30-14:30 UTC: 2m SSB 144.150-144.390 MHz and FM 145.250-145.575 MHz except 145.500. HF second, 14:30-16:00 UTC: 80m SSB 3.600-3.720 MHz.",
      "sponsor": "MRASZ",
      "rules_url": "https://ylom.mrasz.hu/yl-om-versenykiiras",
      "verified": true,
      "note": "MRASZ ties the date to International Women's Day: the weekend nearest 8 March, run on the Sunday. Encoded as the Sunday nearest 8 March, which gives 8 March 2026 -- the date MRASZ prints -- because 8 March 2026 is itself a Sunday. Only that one year is independently confirmed, so the rule is recorded as MRASZ's wording rather than as a tested multi-year pattern. The two halves are contiguous (VHF then HF with no gap), so they are one span rather than two sessions; the band split is in bands_note because a record cannot state bands per session. FM is in submodes because it is not in the catalog's mode vocabulary.",
      "exchange": "RS, the age of the licence in years and the operator's first name -- for example '59 01 Kata'.",
      "country": "HU",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-19",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": "2026-03-23T16:00:00Z",
      "uid": "mrasz-yl-om-20260308T1330@contestcal",
      "start_date": "2026-03-08",
      "mode_families": [
        "SSB",
        "FM"
      ],
      "band_families": [
        "80m",
        "VHF+"
      ],
      "duration_bucket": "2-12"
    },
    {
      "contest_id": "4sqrp-sss",
      "name": "4 States QRP Group Second Sunday Sprint (SSS)",
      "start": "2026-03-09T00:00:00Z",
      "end": "2026-03-09T02:00:00Z",
      "start_wall": "2026-03-08T19:00:00",
      "end_wall": "2026-03-08T21:00:00",
      "local_rolling": false,
      "timezone": "America/Chicago",
      "duration_hours": 2,
      "modes": [
        "CW",
        "SSB",
        "Digital"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "",
      "sponsor": "4 States QRP Group",
      "rules_url": "https://www.4sqrp.com/SSS/sss_rules_revised_02_2026.pdf",
      "verified": true,
      "note": "SPONSOR-ANCHORED LOCAL TIME. The anchor is the second SUNDAY and the sprint runs into Monday UTC. 4SQRP states the consequence itself: '7 PM until 9 PM central time (CST or CDT, whichever is in effect at the time). If you use UTC, that time changes when we switch from CST to CDT (or vice versa).' Resolved through America/Chicago, so it is 0100Z Monday in winter and 0000Z Monday in summer.",
      "exchange": "RST + state/province/country + 4SQRP member number (power if non-member)",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "4sqrp-sss-20260309T0000@contestcal",
      "start_date": "2026-03-09",
      "mode_families": [
        "CW",
        "SSB",
        "Digital"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "2-12"
    },
    {
      "contest_id": "k1usn-sst",
      "name": "K1USN Slow Speed Test (SST)",
      "start": "2026-03-09T00:00:00Z",
      "end": "2026-03-09T01:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "",
      "sponsor": "K1USN Radio Club",
      "rules_url": "https://www.k1usn.com/sst_rules.html",
      "verified": true,
      "note": "No formal log submission -- participants post scores to 3830scores.com.",
      "exchange": "Name + state/province/DX country",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "k1usn-sst-20260309T0000@contestcal",
      "start_date": "2026-03-09",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "agcw-zap-merit",
      "name": "AGCW ZAP Merit Contest (ZMC)",
      "start": "2026-03-09T17:40:00Z",
      "end": "2026-03-09T18:30:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.83,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "80m"
      ],
      "bands_note": "",
      "sponsor": "AGCW-DL",
      "rules_url": "https://www.agcw.de/contest/tzap/",
      "verified": false,
      "note": "PARTLY UNVERIFIED. The recurrence (every Monday), the 1740 UTC pre-logging opening and the 1800 UTC telegram transmission are all quoted from AGCW. AGCW publishes NO closing time. The 1830 end stored here is a PLACEHOLDER so the record expands -- it is not a sponsor fact and must not be presented as one. Confirm the session length with the ZMC manager before shipping. Points accumulate over a calendar year; logs are due 31 January of the following year.",
      "exchange": "Callsign + date + time + RST (SWLs log RST of both stations in a QSO)",
      "country": "DE",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-12",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "agcw-zap-merit-20260309T1740@contestcal",
      "start_date": "2026-03-09",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "80m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "darc-cw-ausbildungscontest",
      "name": "DARC CW-Ausbildungscontest",
      "start": "2026-03-10T18:00:00Z",
      "end": "2026-03-10T18:59:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.98,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [],
      "bands_note": "",
      "sponsor": "DARC",
      "rules_url": "https://www.darc.de/der-club/referate/conteste/cwa/darc-cw-ausbildungscontest/",
      "verified": false,
      "note": "IT COMPLETES A PATTERN DARC DESCRIBES BUT DOES NOT SPELL OUT. Their three short contests take one month of each quarter in turn, all on a Tuesday evening: the RTTY-Kurzcontest in months 1/4/7/10, the FT4 Contest in 2/5/8/11, and this one in 3/6/9/12. All four of DARC's published dates are the SECOND TUESDAY of those months. That is what 'reiht sich vom Termin her in die anderen ... ein' means, and the arithmetic confirms it rather than assuming it.\n\nVERIFIED FALSE because the page that describes the series is prose about teaching CW rather than an Ausschreibung: no bands, no exchange, no deadline. BANDS ARE UNRECORDED, so every band filter excludes this record.\n\nWHERE THE BANDS WOULD HAVE BEEN: Not stated on the page that describes the series. That sentence sits here rather than in bands_note, because bands_note is for a sponsor's own wording ABOUT a band list and must never stand in for one -- a test enforces it, and it caught this.",
      "exchange": "",
      "country": "DE",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-23",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "darc-cw-ausbildungscontest-20260310T1800@contestcal",
      "start_date": "2026-03-10",
      "mode_families": [
        "CW"
      ],
      "band_families": [],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "cwops-cwt",
      "name": "CWops Test (CWT)",
      "start": "2026-03-11T13:00:00Z",
      "end": "2026-03-11T14:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "CWops",
      "rules_url": "https://cwops.org/cwops-tests/",
      "verified": true,
      "note": "",
      "exchange": "Members: name + CWops number. Non-members: name + state/province/DX prefix.",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "cwops-cwt-20260311T1300@contestcal",
      "start_date": "2026-03-11",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "cwops-cwt",
      "name": "CWops Test (CWT)",
      "start": "2026-03-11T19:00:00Z",
      "end": "2026-03-11T20:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "CWops",
      "rules_url": "https://cwops.org/cwops-tests/",
      "verified": true,
      "note": "",
      "exchange": "Members: name + CWops number. Non-members: name + state/province/DX prefix.",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "cwops-cwt-20260311T1900@contestcal",
      "start_date": "2026-03-11",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "rsgb-80mcc-cw",
      "name": "RSGB 3.5 MHz Club Championship, CW",
      "start": "2026-03-11T20:00:00Z",
      "end": "2026-03-11T21:30:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1.5,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "80m"
      ],
      "bands_note": "3510-3565 kHz at any speed, with 3565-3570 kHz reserved for 15 wpm maximum.",
      "sponsor": "RSGB Contest Committee",
      "rules_url": "https://www.rsgbcc.org/hf/rules/2026/r80mcc.shtml",
      "verified": true,
      "note": "THE DATES ARE NOT ON THE RULES PAGE. RSGB publishes the rules at rules/2026/r80mcc.shtml and the eighteen legs on a separate CGI calendar, and the rules page links to it in so many words. This record holds what that calendar prints; nothing is derived.\n\nTHE CLOCK MOVES IN APRIL and the record says so per date: February and March run 2000-2130 UTC, April to July run 1900-2030. The record's default is the April-July clock because four of each mode's six legs use it, and the two early legs carry their own times. Same mechanism as the Autumn Series, and the second contest to need it.\n\nMANUAL BECAUSE THE LEGS FOLLOW NO ORDINAL. They fall on Mondays, Wednesdays and Thursdays with the weekday rotating through the series, which is exactly the shape an ordinal must not be fitted to.\n\nNON-UK STATIONS MAY ENTER AS INDIVIDUALS -- RSGB states it, which is worth noting beside the AFS and Club Calls contests where entry really is UK&CD only.",
      "exchange": "RS(T) plus a serial number starting at 1 and incrementing by 1.",
      "country": "GB",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-23",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": "2026-03-12T21:30:00Z",
      "uid": "rsgb-80mcc-cw-20260311T2000@contestcal",
      "start_date": "2026-03-11",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "80m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "cwops-cwt",
      "name": "CWops Test (CWT)",
      "start": "2026-03-12T03:00:00Z",
      "end": "2026-03-12T04:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "CWops",
      "rules_url": "https://cwops.org/cwops-tests/",
      "verified": true,
      "note": "",
      "exchange": "Members: name + CWops number. Non-members: name + state/province/DX prefix.",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "cwops-cwt-20260312T0300@contestcal",
      "start_date": "2026-03-12",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "cwops-cwt",
      "name": "CWops Test (CWT)",
      "start": "2026-03-12T07:00:00Z",
      "end": "2026-03-12T08:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "CWops",
      "rules_url": "https://cwops.org/cwops-tests/",
      "verified": true,
      "note": "",
      "exchange": "Members: name + CWops number. Non-members: name + state/province/DX prefix.",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "cwops-cwt-20260312T0700@contestcal",
      "start_date": "2026-03-12",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "nccc-ns-ft4",
      "name": "NCCC FT4 Sprint (FT4 NS)",
      "start": "2026-03-13T01:00:00Z",
      "end": "2026-03-13T01:30:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.5,
      "modes": [
        "FT8/FT4"
      ],
      "submodes": [
        "FT4"
      ],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "Northern California Contest Club (NCCC)",
      "rules_url": "https://www.ncccsprint.com/ft4ns.html",
      "verified": true,
      "note": "NCCC describes these as 'nominal rules' that may be modified on a weekly basis, and runs formal Ladder seasons interspersed with practice weeks. The 30-minute session slot itself is fixed.",
      "exchange": "Grid square (following NA VHF, WW Digi and ARRL IDC practice)",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "nccc-ns-ft4-20260313T0100@contestcal",
      "start_date": "2026-03-13",
      "mode_families": [
        "Digital",
        "FT8/FT4"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "nccc-ns-rtty",
      "name": "NCCC RTTY Sprint (RTTY NS)",
      "start": "2026-03-13T01:45:00Z",
      "end": "2026-03-13T02:15:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.5,
      "modes": [
        "RTTY"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m"
      ],
      "bands_note": "",
      "sponsor": "Northern California Contest Club (NCCC)",
      "rules_url": "https://ncccsprint.com/rttyns.html",
      "verified": true,
      "note": "NCCC describes these as 'nominal rules' that may be modified on a weekly basis, and runs formal Ladder seasons interspersed with practice weeks. The 30-minute session slot itself is fixed.",
      "exchange": "Serial number + name + QTH (both callsigns required in the exchange)",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "nccc-ns-rtty-20260313T0145@contestcal",
      "start_date": "2026-03-13",
      "mode_families": [
        "RTTY",
        "Digital"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "nccc-ns-cw",
      "name": "NCCC Sprint (NS)",
      "start": "2026-03-13T02:30:00Z",
      "end": "2026-03-13T03:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.5,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m"
      ],
      "bands_note": "",
      "sponsor": "Northern California Contest Club (NCCC)",
      "rules_url": "https://ncccsprint.com/rules.html",
      "verified": true,
      "note": "NCCC describes these as 'nominal rules' that may be modified on a weekly basis, and runs formal Ladder seasons interspersed with practice weeks. The 30-minute session slot itself is fixed.",
      "exchange": "Serial number + name + QTH (both callsigns required in the exchange)",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "nccc-ns-cw-20260313T0230@contestcal",
      "start_date": "2026-03-13",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "k1usn-sst",
      "name": "K1USN Slow Speed Test (SST)",
      "start": "2026-03-13T20:00:00Z",
      "end": "2026-03-13T21:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "",
      "sponsor": "K1USN Radio Club",
      "rules_url": "https://www.k1usn.com/sst_rules.html",
      "verified": true,
      "note": "No formal log submission -- participants post scores to 3830scores.com.",
      "exchange": "Name + state/province/DX country",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "k1usn-sst-20260313T2000@contestcal",
      "start_date": "2026-03-13",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "sarl-national-field-day",
      "name": "SARL National Field Day",
      "start": "2026-03-14T08:00:00Z",
      "end": "2026-03-15T10:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 26,
      "modes": [
        "SSB",
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "160, 80, 40, 20, 15 and 10 m, excluding the 60, 30, 17 and 12 m bands. The segments 7 100-7 130 and 3 651-3 699 kHz are contest free.",
      "sponsor": "SARL",
      "rules_url": "https://mysarl.org.za/wp-content/uploads/2025/11/2026-The-SARL-National-Field-Day-v1.1.pdf",
      "verified": true,
      "note": "Two legs a year off ONE record, because both share a start and end offset -- 0800 UTC Saturday to 1000 UTC Sunday -- and differ only in which weekend they anchor to. SARL states both readings itself, weekend AND date, and both agree for 2026. log_deadline_days is 5, which is the right DAY and not the right hour: SARL states 'by 21:59 UTC on Friday', and the contest ends at 10:00 UTC on the Sunday five days before, so the engine's derived log_due lands at 17:00 rather than 21:59. The day is exact in every year because both ends are tied to the same Sunday. The five hours are recorded here rather than papered over.",
      "exchange": "A contest-specific exchange; phone and CW on one band count as separate bands and a station may be worked once per band per mode.",
      "country": "ZA",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-19",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": "2026-03-20T10:00:00Z",
      "uid": "sarl-national-field-day-20260314T0800@contestcal",
      "start_date": "2026-03-14",
      "mode_families": [
        "CW",
        "SSB"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "gte24"
    },
    {
      "contest_id": "rsgb-commonwealth",
      "name": "Commonwealth Contest (BERU)",
      "start": "2026-03-14T10:00:00Z",
      "end": "2026-03-15T10:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 24,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "3.5, 7, 14, 21 and 28 MHz.",
      "sponsor": "RSGB Contest Committee",
      "rules_url": "https://www.rsgbcc.org/hf/rules/2026/rcwc.shtml",
      "verified": true,
      "note": "DEFERRED SINCE 2026-08-20 ON ELIGIBILITY, NOT ON READING, AND NOW RESOLVED. The recurrence and the running were never in doubt; what blocked it was that the rules restrict entry to 'the Commonwealth Call Area list' and the rules page does not print that list. Writing an entity_list from general knowledge of the Commonwealth would have been this catalog inventing a restriction and attributing it to RSGB, which is the one thing it must not do.\n\nRSGB DOES PUBLISH THE LIST -- at hf/information/codes.shtml, linked from the rules page. The 151 prefixes here are read from that page and are RSGB's own, not a reconstruction. The lesson generalises: the blocker was a link nobody had followed.\n\nTHE LIST IS PREFIXES, NOT DXCC ENTITIES, and they are not the same thing. RSGB splits Canada into VE1-VE9, Australia into VK0-VK9, New Zealand into ZL0-ZL9 and South Africa into ZS0-ZS8, because a 'call area' is the multiplier and there are several per country. It also treats England, Scotland, Wales, Northern Ireland, Jersey, Guernsey and the Isle of Man as seven separate areas whose contacts with each other score nothing.\n\nA K STATION CANNOT ENTER, and the page now says so in a sentence rather than a paragraph: listing 151 prefixes inline produced a wall of text instead of an answer, so eligibility_for summarises any list longer than eight.",
      "exchange": "RST plus a serial number starting at 1 and incrementing by 1, irrespective of band. Commonwealth society headquarters stations add 'HQ' after the serial.",
      "country": "GB",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-23",
      "can_enter": false,
      "eligibility_scope": "entity_list",
      "eligibility_reason": "Entry limited to 151 listed entities. K stations may be worked but cannot submit an entry.",
      "works": "everyone",
      "practical": "",
      "log_due": "2026-03-20T10:00:00Z",
      "uid": "rsgb-commonwealth-20260314T1000@contestcal",
      "start_date": "2026-03-14",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "gte24"
    },
    {
      "contest_id": "ure-eapsk63",
      "name": "EA PSK63 Contest",
      "start": "2026-03-14T12:00:00Z",
      "end": "2026-03-15T11:59:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 23.98,
      "modes": [
        "Digital"
      ],
      "submodes": [
        "BPSK63"
      ],
      "bands": [
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "",
      "sponsor": "URE",
      "rules_url": "https://concursos.ure.es/en/eapsk63/bases/",
      "verified": true,
      "note": "URE says 'segundo fin de semana', not 'segundo fin de semana completo'. The two readings cannot diverge at n = 2 -- the second Saturday of a month is at most the 14th, so its Sunday is always in the same month -- so no choice between them was needed.",
      "exchange": "Spanish stations send RSQ + their province abbreviation; the rest of the world sends RSQ + a serial number starting with 001.",
      "country": "ES",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-18",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": "2026-03-30T11:59:00Z",
      "uid": "ure-eapsk63-20260314T1200@contestcal",
      "start_date": "2026-03-14",
      "mode_families": [
        "Digital"
      ],
      "band_families": [
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "12-24"
    },
    {
      "contest_id": "skcc-wes",
      "name": "SKCC Weekend Sprintathon (WES)",
      "start": "2026-03-14T12:00:00Z",
      "end": "2026-03-15T23:59:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 35.98,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "Straight Key Century Club",
      "rules_url": "https://www.skccgroup.com/operating_activities/weekend_sprintathon/",
      "verified": true,
      "note": "Older sources describe the anchor as 'the Saturday following the 6th', which differs from '2nd Saturday' in some months. SKCC's current page says 2nd Saturday; re-check if dates drift.",
      "exchange": "RST + state/province/country + name + SKCC number (C/T/S suffix for award holders)",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "skcc-wes-20260314T1200@contestcal",
      "start_date": "2026-03-14",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m",
        "6m"
      ],
      "duration_bucket": "gte24"
    },
    {
      "contest_id": "agcw-qrp-contest",
      "name": "AGCW QRP Contest",
      "start": "2026-03-14T14:00:00Z",
      "end": "2026-03-14T20:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 6,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "",
      "sponsor": "AGCW-DL",
      "rules_url": "https://www.agcw.de/contest/qrp/",
      "verified": true,
      "note": "",
      "exchange": "RST + running number + class",
      "country": "DE",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-12",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "agcw-qrp-contest-20260314T1400@contestcal",
      "start_date": "2026-03-14",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "2-12"
    },
    {
      "contest_id": "stew-perry",
      "name": "Stew Perry Topband Challenge",
      "start": "2026-03-14T15:00:00Z",
      "end": "2026-03-15T14:59:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 23.98,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m"
      ],
      "bands_note": "160 metres only.",
      "sponsor": "Boring Amateur Radio Club",
      "rules_url": "https://www.kkn.net/stew/stew_rules.html",
      "verified": false,
      "note": "MANUAL, BECAUSE THE CLUB PUBLISHES DATES AND NOT A RULE. All four 2026 runnings fall on a Saturday, but no single ordinal describes them -- March's is the second Saturday, June's the third, October's the third and December's the fourth. The record holds exactly what the club published and produces nothing for 2027 until somebody reads their next list, which is the same treatment the NCJ Sprints get and for the same reason.\n\nMarked unverified because ONE year's dates cannot confirm a pattern that does not exist. It becomes verified when a second year's list is read and the record still only claims what was printed.\n\nThe grid-square exchange is the point of the contest: scoring is by distance, so a short haul into a rare square can outscore a long one.",
      "exchange": "A four-character grid square, for example CN85.",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-21",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": "2026-03-29T14:59:00Z",
      "uid": "stew-perry-20260314T1500@contestcal",
      "start_date": "2026-03-14",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m"
      ],
      "duration_bucket": "12-24"
    },
    {
      "contest_id": "srs-tesla-memorial-hf-cw",
      "name": "Tesla Memorial HF CW Contest",
      "start": "2026-03-14T18:00:00Z",
      "end": "2026-03-15T05:59:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 11.98,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "80m",
        "40m"
      ],
      "bands_note": "",
      "sponsor": "SRS",
      "rules_url": "https://www.radiosport.yu1srs.org.rs/HFTeslaMemorial/index.php/rules",
      "verified": true,
      "note": "'Second weekend in March' is encoded as the second FULL weekend, and SRS's own published dates settle it: 2019 09/10, 2020 14/15, 2021 13/14, 2022 12/13, 2023 11/12, 2024 09/10, 2025 08/09 and 2026 14/15 -- eight years, all reproduced. 2020 is the year that discriminates: 1 March 2020 was a Sunday, so counting weekends by their Sunday gives 7/8, but SRS published 14/15. The log deadline is a stated instant (19 March 2026, 23:59 UTC) rather than an interval from the contest end, so it is recorded here. BLOCKERS: yudx.org, the host in the registry, no longer resolves; SRS's own domestic schedule and rules pages ('Raspored takmicenja i pravila', 'Takmicenja') render only a JavaScript placeholder, and stari.yu1srs.org.rs returns HTTP 500 -- so KT Prvenstvo Srbije and KT Kup SRS could not be read and are not encoded.",
      "exchange": "RST, a serial number from 001 and a four-character locator -- 599 023 KN03.",
      "country": "RS",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-19",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "srs-tesla-memorial-hf-cw-20260314T1800@contestcal",
      "start_date": "2026-03-14",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "80m",
        "40m"
      ],
      "duration_bucket": "2-12"
    },
    {
      "contest_id": "ncj-sprint-rtty",
      "name": "North American Sprint, RTTY",
      "start": "2026-03-15T00:00:00Z",
      "end": "2026-03-15T03:59:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 3.98,
      "modes": [
        "RTTY"
      ],
      "submodes": [],
      "bands": [
        "80m",
        "40m",
        "20m"
      ],
      "bands_note": "",
      "sponsor": "National Contest Journal (NCJ)",
      "rules_url": "https://www.ncjweb.com/Sprint-Rules.pdf",
      "verified": true,
      "note": "Same 'manual' reasoning as the CW Sprint -- NCJ states dates, not a recurrence rule.",
      "exchange": "Other station's call + your call + serial number + name + state/province/country ('DX' outside North America)",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": "2026-03-22T03:59:00Z",
      "uid": "ncj-sprint-rtty-20260315T0000@contestcal",
      "start_date": "2026-03-15",
      "mode_families": [
        "RTTY",
        "Digital"
      ],
      "band_families": [
        "80m",
        "40m",
        "20m"
      ],
      "duration_bucket": "2-12"
    },
    {
      "contest_id": "uba-spring-6m",
      "name": "UBA Spring Contest, 6m",
      "start": "2026-03-15T07:00:00Z",
      "end": "2026-03-15T11:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 4,
      "modes": [
        "SSB",
        "CW"
      ],
      "submodes": [],
      "bands": [
        "6m"
      ],
      "bands_note": "",
      "sponsor": "UBA",
      "rules_url": "https://www.uba.be/en/hf/contest-rules/spring-contest-dst",
      "verified": true,
      "note": "MANUAL, DELIBERATELY: UBA states four dated legs and no recurrence rule anywhere on the page. All four 2026 dates are Sundays a week apart, but UBA never says 'every Sunday in March' or names an ordinal, so no rule is asserted on its behalf and the record simply ends after 2026 rather than guessing. The page also notes 'The order of the various competitions has been changed compared to previous years', which is a reason not to extrapolate.",
      "exchange": "Belgian stations send RS(T) + a serial number starting with 001 + their UBA section (XXX for non-members, UBA for the national stations); foreign stations send RS(T) + a serial number starting with 001.",
      "country": "BE",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-18",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": "2026-03-29T11:00:00Z",
      "uid": "uba-spring-6m-20260315T0700@contestcal",
      "start_date": "2026-03-15",
      "mode_families": [
        "CW",
        "SSB"
      ],
      "band_families": [
        "6m"
      ],
      "duration_bucket": "2-12"
    },
    {
      "contest_id": "uarl-champ-cw",
      "name": "Ukrainian HF Championship (CW)",
      "start": "2026-03-15T17:00:00Z",
      "end": "2026-03-15T18:59:00Z",
      "start_wall": "2026-03-15T19:00:00",
      "end_wall": "2026-03-15T20:59:00",
      "local_rolling": false,
      "timezone": "Europe/Kyiv",
      "duration_hours": 1.98,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "80m",
        "40m"
      ],
      "bands_note": "",
      "sponsor": "UARL",
      "rules_url": "http://uarl.org.ua/files/stories2026/Reglament_ChU-2026-or-040226.pdf",
      "verified": true,
      "note": "SPONSOR-ANCHORED LOCAL TIME: UARL states the schedule 'kyyivskoho chasu' -- Kyiv time -- so the record carries timezone Europe/Kyiv and wall_clock times. UARL publishes dates for the year, not a recurrence rule, so the record is manual and covers 2026 only. The four 30-minute rounds are contiguous and are encoded as one span. The deadline is stated as seven days from the end 'counting from the Monday', which is not a plain interval, so it is recorded here rather than as log_deadline_days. AGGREGATOR DECLINED: UARL republishes a monthly contest calendar that links contestcalendar.com; only UARL's own reglament was used.",
      "exchange": "The two-letter Ukrainian oblast code and a serial number from 001, numbered continuously across all four rounds -- ZP 001, KV 034.",
      "country": "UA",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-19",
      "can_enter": false,
      "eligibility_scope": "entity_list",
      "eligibility_reason": "Entry limited to UR. K stations may be worked but cannot submit an entry.",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "uarl-champ-cw-20260315T1700@contestcal",
      "start_date": "2026-03-15",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "80m",
        "40m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "k1usn-sst",
      "name": "K1USN Slow Speed Test (SST)",
      "start": "2026-03-16T00:00:00Z",
      "end": "2026-03-16T01:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "",
      "sponsor": "K1USN Radio Club",
      "rules_url": "https://www.k1usn.com/sst_rules.html",
      "verified": true,
      "note": "No formal log submission -- participants post scores to 3830scores.com.",
      "exchange": "Name + state/province/DX country",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "k1usn-sst-20260316T0000@contestcal",
      "start_date": "2026-03-16",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "sarl-equinox-6m-march",
      "name": "SARL Equinox 6m African DX Entity Challenge (March)",
      "start": "2026-03-16T00:01:00Z",
      "end": "2026-04-15T23:59:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 743.97,
      "modes": [
        "FT8/FT4"
      ],
      "submodes": [
        "FT8"
      ],
      "bands": [
        "6m"
      ],
      "bands_note": "",
      "sponsor": "SARL",
      "rules_url": "https://mysarl.org.za/wp-content/uploads/2025/11/2026-SARL-Equinox-6m-African-DX-Entity-Challenge-v1.1.pdf",
      "verified": true,
      "note": "A month-long challenge rather than a weekend contest, which is why it is the longest single occurrence in the catalog. 16 March to 15 April is 30 days. The two legs are separate records because their end offsets differ -- the March leg runs 30 days and the September leg 29 -- and one record carries one start/end pair. SARL's own calendar marks each leg with a start and an end event rather than one long block, and those markers confirm both instants.",
      "exchange": "Signal reports; contacts must be two-way point to point.",
      "country": "ZA",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-19",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "sarl-equinox-6m-march-20260316T0001@contestcal",
      "start_date": "2026-03-16",
      "mode_families": [
        "Digital",
        "FT8/FT4"
      ],
      "band_families": [
        "6m"
      ],
      "duration_bucket": "gte24"
    },
    {
      "contest_id": "agcw-zap-merit",
      "name": "AGCW ZAP Merit Contest (ZMC)",
      "start": "2026-03-16T17:40:00Z",
      "end": "2026-03-16T18:30:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.83,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "80m"
      ],
      "bands_note": "",
      "sponsor": "AGCW-DL",
      "rules_url": "https://www.agcw.de/contest/tzap/",
      "verified": false,
      "note": "PARTLY UNVERIFIED. The recurrence (every Monday), the 1740 UTC pre-logging opening and the 1800 UTC telegram transmission are all quoted from AGCW. AGCW publishes NO closing time. The 1830 end stored here is a PLACEHOLDER so the record expands -- it is not a sponsor fact and must not be presented as one. Confirm the session length with the ZMC manager before shipping. Points accumulate over a calendar year; logs are due 31 January of the following year.",
      "exchange": "Callsign + date + time + RST (SWLs log RST of both stations in a QSO)",
      "country": "DE",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-12",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "agcw-zap-merit-20260316T1740@contestcal",
      "start_date": "2026-03-16",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "80m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "rsgb-ft4-series",
      "name": "RSGB FT4 Contest Series",
      "start": "2026-03-16T20:00:00Z",
      "end": "2026-03-16T22:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 2,
      "modes": [
        "FT8/FT4"
      ],
      "submodes": [
        "FT4"
      ],
      "bands": [
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "80, 40, 20, 15 and 10 m.",
      "sponsor": "RSGB Contest Committee",
      "rules_url": "https://www.rsgbcc.org/hf/rules/2026/r80m_ft4.shtml",
      "verified": true,
      "note": "TWELVE MONDAY EVENINGS AND THE CLOCK SHIFTS FOR THE SUMMER: January to March and October to December run 2000-2200 UTC, April to September run 1900-2100. Six legs each way, so the record's default is the winter clock and the summer legs carry their own -- the third contest to need per-date times, after the Autumn Series and the 80m Club Championship.\n\nMANUAL BECAUSE THE DATES ARE NOT ON THE RULES PAGE and follow no ordinal: they are Mondays, but the third Monday in January, the fourth in February, the third in March. RSGB publishes them on its CGI calendar and this record holds what that prints.\n\nNot the same contest as the FT4 International Activity Day in April, which is 24 hours and has its own rules page.",
      "exchange": "A signal report. A serial number is not required.",
      "country": "GB",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-23",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": "2026-03-17T22:00:00Z",
      "uid": "rsgb-ft4-series-20260316T2000@contestcal",
      "start_date": "2026-03-16",
      "mode_families": [
        "Digital",
        "FT8/FT4"
      ],
      "band_families": [
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "2-12"
    },
    {
      "contest_id": "cwops-cwt",
      "name": "CWops Test (CWT)",
      "start": "2026-03-18T13:00:00Z",
      "end": "2026-03-18T14:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "CWops",
      "rules_url": "https://cwops.org/cwops-tests/",
      "verified": true,
      "note": "",
      "exchange": "Members: name + CWops number. Non-members: name + state/province/DX prefix.",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "cwops-cwt-20260318T1300@contestcal",
      "start_date": "2026-03-18",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "cwops-cwt",
      "name": "CWops Test (CWT)",
      "start": "2026-03-18T19:00:00Z",
      "end": "2026-03-18T20:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "CWops",
      "rules_url": "https://cwops.org/cwops-tests/",
      "verified": true,
      "note": "",
      "exchange": "Members: name + CWops number. Non-members: name + state/province/DX prefix.",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "cwops-cwt-20260318T1900@contestcal",
      "start_date": "2026-03-18",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "irts-80m-counties",
      "name": "IRTS 80m Counties Contest",
      "start": "2026-03-18T20:00:00Z",
      "end": "2026-03-18T21:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW",
        "SSB"
      ],
      "submodes": [],
      "bands": [
        "80m"
      ],
      "bands_note": "CW 3510-3560 kHz; SSB 3600-3650 and 3700-3775 kHz.",
      "sponsor": "IRTS",
      "rules_url": "https://www.irts.ie/cgi/st.cgi?r_hfcrules.html",
      "verified": true,
      "note": "THIS RECORD WAS WRONG IN EVERY FIELD THAT MATTERED AND IS REWRITTEN. It was carried as the third Sunday of June, 1300-1500 UTC, with NO source_note at all -- a stub whose rule, month, weekday, hour and duration were all invented. IRTS runs it three times a year for ONE HOUR each: 1 January, 18 March and 21 October in 2026. Nothing about the old record survived contact with the sponsor's own calendar.\n\nIt was flagged `verified: false` throughout, which is the only reason it was not a lie -- and it is exactly why the registry entry said 'that record is unverified; source it'. An unverified record is a promise to come back, and this is what coming back found.\n\nMANUAL, AND THE NEW YEAR ROUND KEEPS ITS OWN HOUR. The January running is at 1700 UTC and the other two at 2000, so the record's default is 2000 and 1 January carries an override. There is no ordinal to derive: a fixed New Year's Day round and two Wednesday evenings in March and October are not one pattern.",
      "exchange": "EI and GI stations send a signal report, a serial number starting at 001 and their county. Everyone else sends the report and serial only.",
      "country": "IE",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-23",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "irts-80m-counties-20260318T2000@contestcal",
      "start_date": "2026-03-18",
      "mode_families": [
        "CW",
        "SSB"
      ],
      "band_families": [
        "80m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "cwops-cwt",
      "name": "CWops Test (CWT)",
      "start": "2026-03-19T03:00:00Z",
      "end": "2026-03-19T04:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "CWops",
      "rules_url": "https://cwops.org/cwops-tests/",
      "verified": true,
      "note": "",
      "exchange": "Members: name + CWops number. Non-members: name + state/province/DX prefix.",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "cwops-cwt-20260319T0300@contestcal",
      "start_date": "2026-03-19",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "cwops-cwt",
      "name": "CWops Test (CWT)",
      "start": "2026-03-19T07:00:00Z",
      "end": "2026-03-19T08:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "CWops",
      "rules_url": "https://cwops.org/cwops-tests/",
      "verified": true,
      "note": "",
      "exchange": "Members: name + CWops number. Non-members: name + state/province/DX prefix.",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "cwops-cwt-20260319T0700@contestcal",
      "start_date": "2026-03-19",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "nccc-ns-ft4",
      "name": "NCCC FT4 Sprint (FT4 NS)",
      "start": "2026-03-20T01:00:00Z",
      "end": "2026-03-20T01:30:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.5,
      "modes": [
        "FT8/FT4"
      ],
      "submodes": [
        "FT4"
      ],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "Northern California Contest Club (NCCC)",
      "rules_url": "https://www.ncccsprint.com/ft4ns.html",
      "verified": true,
      "note": "NCCC describes these as 'nominal rules' that may be modified on a weekly basis, and runs formal Ladder seasons interspersed with practice weeks. The 30-minute session slot itself is fixed.",
      "exchange": "Grid square (following NA VHF, WW Digi and ARRL IDC practice)",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "nccc-ns-ft4-20260320T0100@contestcal",
      "start_date": "2026-03-20",
      "mode_families": [
        "Digital",
        "FT8/FT4"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "nccc-ns-rtty",
      "name": "NCCC RTTY Sprint (RTTY NS)",
      "start": "2026-03-20T01:45:00Z",
      "end": "2026-03-20T02:15:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.5,
      "modes": [
        "RTTY"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m"
      ],
      "bands_note": "",
      "sponsor": "Northern California Contest Club (NCCC)",
      "rules_url": "https://ncccsprint.com/rttyns.html",
      "verified": true,
      "note": "NCCC describes these as 'nominal rules' that may be modified on a weekly basis, and runs formal Ladder seasons interspersed with practice weeks. The 30-minute session slot itself is fixed.",
      "exchange": "Serial number + name + QTH (both callsigns required in the exchange)",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "nccc-ns-rtty-20260320T0145@contestcal",
      "start_date": "2026-03-20",
      "mode_families": [
        "RTTY",
        "Digital"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "nccc-ns-cw",
      "name": "NCCC Sprint (NS)",
      "start": "2026-03-20T02:30:00Z",
      "end": "2026-03-20T03:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.5,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m"
      ],
      "bands_note": "",
      "sponsor": "Northern California Contest Club (NCCC)",
      "rules_url": "https://ncccsprint.com/rules.html",
      "verified": true,
      "note": "NCCC describes these as 'nominal rules' that may be modified on a weekly basis, and runs formal Ladder seasons interspersed with practice weeks. The 30-minute session slot itself is fixed.",
      "exchange": "Serial number + name + QTH (both callsigns required in the exchange)",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "nccc-ns-cw-20260320T0230@contestcal",
      "start_date": "2026-03-20",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "k1usn-sst",
      "name": "K1USN Slow Speed Test (SST)",
      "start": "2026-03-20T20:00:00Z",
      "end": "2026-03-20T21:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "",
      "sponsor": "K1USN Radio Club",
      "rules_url": "https://www.k1usn.com/sst_rules.html",
      "verified": true,
      "note": "No formal log submission -- participants post scores to 3830scores.com.",
      "exchange": "Name + state/province/DX country",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "k1usn-sst-20260320T2000@contestcal",
      "start_date": "2026-03-20",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "podxs-st-patricks",
      "name": "PODXS 070 Club St. Patrick's Day Contest",
      "start": "2026-03-21T00:00:00Z",
      "end": "2026-03-21T23:59:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 23.98,
      "modes": [
        "Digital"
      ],
      "submodes": [
        "PSK31"
      ],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "PODXS 070 Club",
      "rules_url": "https://www.podxs070.com/o7o-club-sponsored-contests/saint-patrick-s-day-contest",
      "verified": true,
      "note": "",
      "exchange": "State/province/country (SPC)",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-12",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": "2026-03-28T23:59:00Z",
      "uid": "podxs-st-patricks-20260321T0000@contestcal",
      "start_date": "2026-03-21",
      "mode_families": [
        "Digital"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m",
        "6m"
      ],
      "duration_bucket": "12-24"
    },
    {
      "contest_id": "wia-john-moyle-field-day",
      "name": "John Moyle Memorial Field Day",
      "start": "2026-03-21T01:00:00Z",
      "end": "2026-03-22T01:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 24,
      "modes": [
        "SSB",
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m",
        "6m",
        "2m",
        "70cm",
        "23cm",
        "13cm",
        "3cm"
      ],
      "bands_note": "160, 80, 40, 20, 15, and 10 meters on HF and 50MHz to 241Ghz on VHF/UHF/SHF",
      "sponsor": "WIA",
      "rules_url": "https://www.wia.org.au/members/contests/johnmoyle/",
      "verified": true,
      "note": "A field day: WIA requires field stations to run from an independent power source, and 'Mains power operation of a portable station is expressly forbidden.' Power is not capped by the rules -- 'All entrants are to operate with power not to exceed their licence conditions for the mode and band of operation.'",
      "exchange": "Single-operator and multi-single stations send RS(T) and a serial number starting at 001, running consecutively across all bands; multi-operator stations start a new series at 001 on each band",
      "country": "AU",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-17",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": "2026-04-05T01:00:00Z",
      "uid": "wia-john-moyle-field-day-20260321T0100@contestcal",
      "start_date": "2026-03-21",
      "mode_families": [
        "CW",
        "SSB"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m",
        "6m",
        "VHF+"
      ],
      "duration_bucket": "gte24"
    },
    {
      "contest_id": "bartg-hf-rtty",
      "name": "BARTG HF RTTY Contest",
      "start": "2026-03-21T02:00:00Z",
      "end": "2026-03-23T01:59:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 47.98,
      "modes": [
        "RTTY"
      ],
      "submodes": [],
      "bands": [
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "",
      "sponsor": "BARTG",
      "rules_url": "https://bartg.org.uk/bartg-hf-rtty-contest/",
      "verified": true,
      "note": "",
      "exchange": "RST + message number (3 or 4 figures from 001) + time in UTC",
      "country": "GB",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-12",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": "2026-03-30T01:59:00Z",
      "uid": "bartg-hf-rtty-20260321T0200@contestcal",
      "start_date": "2026-03-21",
      "mode_families": [
        "RTTY",
        "Digital"
      ],
      "band_families": [
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "gte24"
    },
    {
      "contest_id": "sarl-club-20m",
      "name": "SARL Saturday 20 m Club Contest",
      "start": "2026-03-21T11:00:00Z",
      "end": "2026-03-21T12:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "SSB",
        "CW",
        "RTTY"
      ],
      "submodes": [],
      "bands": [
        "20m"
      ],
      "bands_note": "CW 14 000-14 060 kHz; SSB 14 125-14 300 kHz; RTTY 14 080-14 099 kHz.",
      "sponsor": "SARL",
      "rules_url": "https://mysarl.org.za/wp-content/uploads/2025/12/2026-SARL-Contest-Manual-Version-1.1-2025-12-15.pdf",
      "verified": true,
      "note": "A club championship rather than an individual contest: operators' scores are added into a club total. The month list is SARL's own -- these run in four months of the year, not every month -- which is what monthly_nth_weekday's `months` field exists for. log_format and log_deadline_days are absent: this pass read each contest's Aim, Dates, Frequencies and Exchange sections and did not read its Log Sheets section, so neither is recorded rather than assumed from SARL's other contests.\n\nPROVENANCE RESTORED 2026-08-23. This record carried verified: true with an EMPTY source_note -- one of three the 2026-08-21 rule audit found, and a stricter defect than the thin ARRL notes beside them: an empty string is not weak evidence, it is none, and there was nothing in the record to check a rule against. The rule, the times, the bands and the exchange were all correct; only the evidence for them was missing. Re-read from the manual and quoted above, and SARL's own printed 2026 dates reproduce it.",
      "exchange": "Your name, your Abbreviated Club Callsign and your 4-character grid square (for example KG30).",
      "country": "ZA",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-23",
      "can_enter": false,
      "eligibility_scope": "entity_list",
      "eligibility_reason": "Entry limited to ZS. K stations may be worked but cannot submit an entry.",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "sarl-club-20m-20260321T1100@contestcal",
      "start_date": "2026-03-21",
      "mode_families": [
        "CW",
        "SSB",
        "RTTY",
        "Digital"
      ],
      "band_families": [
        "20m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "agcw-vhf-uhf",
      "name": "AGCW VHF/UHF Contest",
      "start": "2026-03-21T14:00:00Z",
      "end": "2026-03-21T17:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 3,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "2m",
        "70cm"
      ],
      "bands_note": "",
      "sponsor": "AGCW-DL",
      "rules_url": "https://www.agcw.de/contest/vhf-uhf/",
      "verified": true,
      "note": "Four dates a year, each with two back-to-back sessions on different bands: the first session is 2 m only, the second 70 cm only. Encoded as two sessions off one anchor, so eight occurrences a year. The per-session band split is not expressible in the current schema -- both bands are listed at contest level.",
      "exchange": "RST + running number + locator",
      "country": "DE",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-12",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "agcw-vhf-uhf-20260321T1400@contestcal",
      "start_date": "2026-03-21",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "VHF+"
      ],
      "duration_bucket": "2-12"
    },
    {
      "contest_id": "arsi-40m-cq-vu-ssb",
      "name": "ARSI 40M CQ VU SSB Contest",
      "start": "2026-03-21T14:00:00Z",
      "end": "2026-03-22T13:59:00Z",
      "start_wall": "2026-03-21T19:30:00",
      "end_wall": "2026-03-22T19:29:00",
      "local_rolling": false,
      "timezone": "Asia/Kolkata",
      "duration_hours": 23.98,
      "modes": [
        "SSB"
      ],
      "submodes": [],
      "bands": [
        "40m"
      ],
      "bands_note": "",
      "sponsor": "ARSI",
      "rules_url": "https://arsi.info/cq-vu-ssb-40m-contest/",
      "verified": true,
      "note": "STATED IN IST ONLY, unlike ARSI's other contests, which give UTC. So this record carries Asia/Kolkata wall clock rather than a UTC time converted by hand -- India is a fixed +05:30 with no daylight saving, so 19:30 IST is 14:00 UTC and always will be, but the record says what the page said. The log deadline is one of the few here stated as a SPAN rather than a date: 'within a week', 'due in 7 days time from the date of contest'. ARSI PUBLISHES DATES, NOT A RECURRENCE. Every one of its contest pages opens with the year's dates and states no rule anywhere -- no 'annually on', no ordinal weekend. So all five records are manual and hold exactly the 2026 editions ARSI published. Fitting an ordinal to one date would be inventing a rule ARSI has not written, and Asia is thin enough that the temptation is worth naming.",
      "exchange": "A serial number starting at 001, with the signal report.",
      "country": "IN",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-19",
      "can_enter": false,
      "eligibility_scope": "entity_list",
      "eligibility_reason": "Entry limited to VU. K stations may be worked but cannot submit an entry.",
      "works": "everyone",
      "practical": "",
      "log_due": "2026-03-29T13:59:00Z",
      "uid": "arsi-40m-cq-vu-ssb-20260321T1400@contestcal",
      "start_date": "2026-03-21",
      "mode_families": [
        "SSB"
      ],
      "band_families": [
        "40m"
      ],
      "duration_bucket": "12-24"
    },
    {
      "contest_id": "agcw-vhf-uhf",
      "name": "AGCW VHF/UHF Contest",
      "start": "2026-03-21T17:00:00Z",
      "end": "2026-03-21T18:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "2m",
        "70cm"
      ],
      "bands_note": "",
      "sponsor": "AGCW-DL",
      "rules_url": "https://www.agcw.de/contest/vhf-uhf/",
      "verified": true,
      "note": "Four dates a year, each with two back-to-back sessions on different bands: the first session is 2 m only, the second 70 cm only. Encoded as two sessions off one anchor, so eight occurrences a year. The per-session band split is not expressible in the current schema -- both bands are listed at contest level.",
      "exchange": "RST + running number + locator",
      "country": "DE",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-12",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "agcw-vhf-uhf-20260321T1700@contestcal",
      "start_date": "2026-03-21",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "VHF+"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "uba-spring-80m-ssb",
      "name": "UBA Spring Contest, 80m Phone",
      "start": "2026-03-22T07:00:00Z",
      "end": "2026-03-22T11:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 4,
      "modes": [
        "SSB"
      ],
      "submodes": [],
      "bands": [
        "80m"
      ],
      "bands_note": "",
      "sponsor": "UBA",
      "rules_url": "https://www.uba.be/en/hf/contest-rules/spring-contest-dst",
      "verified": true,
      "note": "MANUAL, DELIBERATELY: UBA states four dated legs and no recurrence rule anywhere on the page. All four 2026 dates are Sundays a week apart, but UBA never says 'every Sunday in March' or names an ordinal, so no rule is asserted on its behalf and the record simply ends after 2026 rather than guessing. The page also notes 'The order of the various competitions has been changed compared to previous years', which is a reason not to extrapolate.",
      "exchange": "Belgian stations send RS(T) + a serial number starting with 001 + their UBA section (XXX for non-members, UBA for the national stations); foreign stations send RS(T) + a serial number starting with 001.",
      "country": "BE",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-18",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": "2026-04-05T11:00:00Z",
      "uid": "uba-spring-80m-ssb-20260322T0700@contestcal",
      "start_date": "2026-03-22",
      "mode_families": [
        "SSB"
      ],
      "band_families": [
        "80m"
      ],
      "duration_bucket": "2-12"
    },
    {
      "contest_id": "uarl-champ-ssb",
      "name": "Ukrainian HF Championship (SSB)",
      "start": "2026-03-22T17:00:00Z",
      "end": "2026-03-22T18:59:00Z",
      "start_wall": "2026-03-22T19:00:00",
      "end_wall": "2026-03-22T20:59:00",
      "local_rolling": false,
      "timezone": "Europe/Kyiv",
      "duration_hours": 1.98,
      "modes": [
        "SSB"
      ],
      "submodes": [],
      "bands": [
        "80m",
        "40m"
      ],
      "bands_note": "",
      "sponsor": "UARL",
      "rules_url": "http://uarl.org.ua/files/stories2026/Reglament_ChU-2026-or-040226.pdf",
      "verified": true,
      "note": "SPONSOR-ANCHORED LOCAL TIME: UARL states the schedule 'kyyivskoho chasu' -- Kyiv time -- so the record carries timezone Europe/Kyiv and wall_clock times. UARL publishes dates for the year, not a recurrence rule, so the record is manual and covers 2026 only. The four 30-minute rounds are contiguous and are encoded as one span. The deadline is stated as seven days from the end 'counting from the Monday', which is not a plain interval, so it is recorded here rather than as log_deadline_days. AGGREGATOR DECLINED: UARL republishes a monthly contest calendar that links contestcalendar.com; only UARL's own reglament was used.",
      "exchange": "The two-letter Ukrainian oblast code and a serial number from 001, numbered continuously across all four rounds -- ZP 001, KV 034.",
      "country": "UA",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-19",
      "can_enter": false,
      "eligibility_scope": "entity_list",
      "eligibility_reason": "Entry limited to UR. K stations may be worked but cannot submit an entry.",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "uarl-champ-ssb-20260322T1700@contestcal",
      "start_date": "2026-03-22",
      "mode_families": [
        "SSB"
      ],
      "band_families": [
        "80m",
        "40m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "k1usn-sst",
      "name": "K1USN Slow Speed Test (SST)",
      "start": "2026-03-23T00:00:00Z",
      "end": "2026-03-23T01:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "",
      "sponsor": "K1USN Radio Club",
      "rules_url": "https://www.k1usn.com/sst_rules.html",
      "verified": true,
      "note": "No formal log submission -- participants post scores to 3830scores.com.",
      "exchange": "Name + state/province/DX country",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "k1usn-sst-20260323T0000@contestcal",
      "start_date": "2026-03-23",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "agcw-zap-merit",
      "name": "AGCW ZAP Merit Contest (ZMC)",
      "start": "2026-03-23T17:40:00Z",
      "end": "2026-03-23T18:30:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.83,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "80m"
      ],
      "bands_note": "",
      "sponsor": "AGCW-DL",
      "rules_url": "https://www.agcw.de/contest/tzap/",
      "verified": false,
      "note": "PARTLY UNVERIFIED. The recurrence (every Monday), the 1740 UTC pre-logging opening and the 1800 UTC telegram transmission are all quoted from AGCW. AGCW publishes NO closing time. The 1830 end stored here is a PLACEHOLDER so the record expands -- it is not a sponsor fact and must not be presented as one. Confirm the session length with the ZMC manager before shipping. Points accumulate over a calendar year; logs are due 31 January of the following year.",
      "exchange": "Callsign + date + time + RST (SWLs log RST of both stations in a QSO)",
      "country": "DE",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-12",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "agcw-zap-merit-20260323T1740@contestcal",
      "start_date": "2026-03-23",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "80m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "skcc-sks",
      "name": "SKCC Straight Key Sprint (SKS)",
      "start": "2026-03-25T00:00:00Z",
      "end": "2026-03-25T02:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 2,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m",
        "6m"
      ],
      "bands_note": "Suggested frequencies, one per band",
      "sponsor": "Straight Key Century Club",
      "rules_url": "https://www.skccgroup.com/operating_activities/weekday_sprint/",
      "verified": true,
      "note": "",
      "exchange": "RST + QTH + name + SKCC number",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "skcc-sks-20260325T0000@contestcal",
      "start_date": "2026-03-25",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m",
        "6m"
      ],
      "duration_bucket": "2-12"
    },
    {
      "contest_id": "cwops-cwt",
      "name": "CWops Test (CWT)",
      "start": "2026-03-25T13:00:00Z",
      "end": "2026-03-25T14:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "CWops",
      "rules_url": "https://cwops.org/cwops-tests/",
      "verified": true,
      "note": "",
      "exchange": "Members: name + CWops number. Non-members: name + state/province/DX prefix.",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "cwops-cwt-20260325T1300@contestcal",
      "start_date": "2026-03-25",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "cwops-cwt",
      "name": "CWops Test (CWT)",
      "start": "2026-03-25T19:00:00Z",
      "end": "2026-03-25T20:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "CWops",
      "rules_url": "https://cwops.org/cwops-tests/",
      "verified": true,
      "note": "",
      "exchange": "Members: name + CWops number. Non-members: name + state/province/DX prefix.",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "cwops-cwt-20260325T1900@contestcal",
      "start_date": "2026-03-25",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "cwops-cwt",
      "name": "CWops Test (CWT)",
      "start": "2026-03-26T03:00:00Z",
      "end": "2026-03-26T04:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "CWops",
      "rules_url": "https://cwops.org/cwops-tests/",
      "verified": true,
      "note": "",
      "exchange": "Members: name + CWops number. Non-members: name + state/province/DX prefix.",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "cwops-cwt-20260326T0300@contestcal",
      "start_date": "2026-03-26",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "cwops-cwt",
      "name": "CWops Test (CWT)",
      "start": "2026-03-26T07:00:00Z",
      "end": "2026-03-26T08:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "CWops",
      "rules_url": "https://cwops.org/cwops-tests/",
      "verified": true,
      "note": "",
      "exchange": "Members: name + CWops number. Non-members: name + state/province/DX prefix.",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "cwops-cwt-20260326T0700@contestcal",
      "start_date": "2026-03-26",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "rsgb-80mcc-ssb",
      "name": "RSGB 3.5 MHz Club Championship, SSB",
      "start": "2026-03-26T20:00:00Z",
      "end": "2026-03-26T21:30:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1.5,
      "modes": [
        "SSB"
      ],
      "submodes": [],
      "bands": [
        "80m"
      ],
      "bands_note": "3600-3775 kHz.",
      "sponsor": "RSGB Contest Committee",
      "rules_url": "https://www.rsgbcc.org/hf/rules/2026/r80mcc.shtml",
      "verified": true,
      "note": "THE DATES ARE NOT ON THE RULES PAGE. RSGB publishes the rules at rules/2026/r80mcc.shtml and the eighteen legs on a separate CGI calendar, and the rules page links to it in so many words. This record holds what that calendar prints; nothing is derived.\n\nTHE CLOCK MOVES IN APRIL and the record says so per date: February and March run 2000-2130 UTC, April to July run 1900-2030. The record's default is the April-July clock because four of each mode's six legs use it, and the two early legs carry their own times. Same mechanism as the Autumn Series, and the second contest to need it.\n\nMANUAL BECAUSE THE LEGS FOLLOW NO ORDINAL. They fall on Mondays, Wednesdays and Thursdays with the weekday rotating through the series, which is exactly the shape an ordinal must not be fitted to.\n\nNON-UK STATIONS MAY ENTER AS INDIVIDUALS -- RSGB states it, which is worth noting beside the AFS and Club Calls contests where entry really is UK&CD only.",
      "exchange": "RS(T) plus a serial number starting at 1 and incrementing by 1.",
      "country": "GB",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-23",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": "2026-03-27T21:30:00Z",
      "uid": "rsgb-80mcc-ssb-20260326T2000@contestcal",
      "start_date": "2026-03-26",
      "mode_families": [
        "SSB"
      ],
      "band_families": [
        "80m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "nccc-ns-ft4",
      "name": "NCCC FT4 Sprint (FT4 NS)",
      "start": "2026-03-27T01:00:00Z",
      "end": "2026-03-27T01:30:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.5,
      "modes": [
        "FT8/FT4"
      ],
      "submodes": [
        "FT4"
      ],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "Northern California Contest Club (NCCC)",
      "rules_url": "https://www.ncccsprint.com/ft4ns.html",
      "verified": true,
      "note": "NCCC describes these as 'nominal rules' that may be modified on a weekly basis, and runs formal Ladder seasons interspersed with practice weeks. The 30-minute session slot itself is fixed.",
      "exchange": "Grid square (following NA VHF, WW Digi and ARRL IDC practice)",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "nccc-ns-ft4-20260327T0100@contestcal",
      "start_date": "2026-03-27",
      "mode_families": [
        "Digital",
        "FT8/FT4"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "nccc-ns-rtty",
      "name": "NCCC RTTY Sprint (RTTY NS)",
      "start": "2026-03-27T01:45:00Z",
      "end": "2026-03-27T02:15:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.5,
      "modes": [
        "RTTY"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m"
      ],
      "bands_note": "",
      "sponsor": "Northern California Contest Club (NCCC)",
      "rules_url": "https://ncccsprint.com/rttyns.html",
      "verified": true,
      "note": "NCCC describes these as 'nominal rules' that may be modified on a weekly basis, and runs formal Ladder seasons interspersed with practice weeks. The 30-minute session slot itself is fixed.",
      "exchange": "Serial number + name + QTH (both callsigns required in the exchange)",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "nccc-ns-rtty-20260327T0145@contestcal",
      "start_date": "2026-03-27",
      "mode_families": [
        "RTTY",
        "Digital"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "nccc-ns-cw",
      "name": "NCCC Sprint (NS)",
      "start": "2026-03-27T02:30:00Z",
      "end": "2026-03-27T03:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.5,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m"
      ],
      "bands_note": "",
      "sponsor": "Northern California Contest Club (NCCC)",
      "rules_url": "https://ncccsprint.com/rules.html",
      "verified": true,
      "note": "NCCC describes these as 'nominal rules' that may be modified on a weekly basis, and runs formal Ladder seasons interspersed with practice weeks. The 30-minute session slot itself is fixed.",
      "exchange": "Serial number + name + QTH (both callsigns required in the exchange)",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "nccc-ns-cw-20260327T0230@contestcal",
      "start_date": "2026-03-27",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "k1usn-sst",
      "name": "K1USN Slow Speed Test (SST)",
      "start": "2026-03-27T20:00:00Z",
      "end": "2026-03-27T21:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "",
      "sponsor": "K1USN Radio Club",
      "rules_url": "https://www.k1usn.com/sst_rules.html",
      "verified": true,
      "note": "No formal log submission -- participants post scores to 3830scores.com.",
      "exchange": "Name + state/province/DX country",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "k1usn-sst-20260327T2000@contestcal",
      "start_date": "2026-03-27",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "cq-wpx-ssb",
      "name": "CQ WW WPX Contest, SSB",
      "start": "2026-03-28T00:00:00Z",
      "end": "2026-03-29T23:59:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 47.98,
      "modes": [
        "SSB"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "Only the 1.8, 3.5, 7, 14, 21, and 28 MHz bands may be used",
      "sponsor": "CQ Magazine",
      "rules_url": "https://cqwpx.com/rules/",
      "verified": true,
      "note": "cqwpx.com's 2026 header reads 'SSB: March 28-29, 2025'; the year is a typo in CQ's own page. March 28-29 is a Saturday/Sunday pair only in 2026, and the same page's 2026 log deadline (2359 UTC 31 March 2026) confirms the 2026 weekend.",
      "exchange": "RS(T) report plus a progressive contact serial number starting with 001",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-16",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": "2026-03-31T23:59:00Z",
      "uid": "cq-wpx-ssb-20260328T0000@contestcal",
      "start_date": "2026-03-28",
      "mode_families": [
        "SSB"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "gte24"
    },
    {
      "contest_id": "sarl-africa-all-mode-dx",
      "name": "Africa All Mode International DX Contest",
      "start": "2026-03-28T12:00:00Z",
      "end": "2026-03-29T12:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 24,
      "modes": [
        "CW",
        "SSB"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "160, 80, 40, 20, 15 and 10 metres. No contest QSOs are allowed on 12, 17, 30 or 60 metres.",
      "sponsor": "SARL",
      "rules_url": "https://mysarl.org.za/wp-content/uploads/2025/11/2026-Africa-All-Mode-International-DX-Contest-v1.1.pdf",
      "verified": true,
      "note": "The log deadline is one of the few in this catalog stated BOTH ways by the sponsor -- '15 days after the contest' and 'Monday 13 April 2026' -- and the two agree exactly against a Sunday 12:00 UTC finish, so 15 is encoded with confidence rather than inferred from one year's date.",
      "exchange": "Signal report and a serial number.",
      "country": "ZA",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-19",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": "2026-04-13T12:00:00Z",
      "uid": "sarl-africa-all-mode-dx-20260328T1200@contestcal",
      "start_date": "2026-03-28",
      "mode_families": [
        "CW",
        "SSB"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "gte24"
    },
    {
      "contest_id": "k1usn-sst",
      "name": "K1USN Slow Speed Test (SST)",
      "start": "2026-03-30T00:00:00Z",
      "end": "2026-03-30T01:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "",
      "sponsor": "K1USN Radio Club",
      "rules_url": "https://www.k1usn.com/sst_rules.html",
      "verified": true,
      "note": "No formal log submission -- participants post scores to 3830scores.com.",
      "exchange": "Name + state/province/DX country",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "k1usn-sst-20260330T0000@contestcal",
      "start_date": "2026-03-30",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "agcw-zap-merit",
      "name": "AGCW ZAP Merit Contest (ZMC)",
      "start": "2026-03-30T17:40:00Z",
      "end": "2026-03-30T18:30:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.83,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "80m"
      ],
      "bands_note": "",
      "sponsor": "AGCW-DL",
      "rules_url": "https://www.agcw.de/contest/tzap/",
      "verified": false,
      "note": "PARTLY UNVERIFIED. The recurrence (every Monday), the 1740 UTC pre-logging opening and the 1800 UTC telegram transmission are all quoted from AGCW. AGCW publishes NO closing time. The 1830 end stored here is a PLACEHOLDER so the record expands -- it is not a sponsor fact and must not be presented as one. Confirm the session length with the ZMC manager before shipping. Points accumulate over a calendar year; logs are due 31 January of the following year.",
      "exchange": "Callsign + date + time + RST (SWLs log RST of both stations in a QSO)",
      "country": "DE",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-12",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "agcw-zap-merit-20260330T1740@contestcal",
      "start_date": "2026-03-30",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "80m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "cwops-cwt",
      "name": "CWops Test (CWT)",
      "start": "2026-04-01T13:00:00Z",
      "end": "2026-04-01T14:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "CWops",
      "rules_url": "https://cwops.org/cwops-tests/",
      "verified": true,
      "note": "",
      "exchange": "Members: name + CWops number. Non-members: name + state/province/DX prefix.",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "cwops-cwt-20260401T1300@contestcal",
      "start_date": "2026-04-01",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "cwops-cwt",
      "name": "CWops Test (CWT)",
      "start": "2026-04-01T19:00:00Z",
      "end": "2026-04-01T20:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "CWops",
      "rules_url": "https://cwops.org/cwops-tests/",
      "verified": true,
      "note": "",
      "exchange": "Members: name + CWops number. Non-members: name + state/province/DX prefix.",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "cwops-cwt-20260401T1900@contestcal",
      "start_date": "2026-04-01",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "cwops-cwt",
      "name": "CWops Test (CWT)",
      "start": "2026-04-02T03:00:00Z",
      "end": "2026-04-02T04:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "CWops",
      "rules_url": "https://cwops.org/cwops-tests/",
      "verified": true,
      "note": "",
      "exchange": "Members: name + CWops number. Non-members: name + state/province/DX prefix.",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "cwops-cwt-20260402T0300@contestcal",
      "start_date": "2026-04-02",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "cwops-cwt",
      "name": "CWops Test (CWT)",
      "start": "2026-04-02T07:00:00Z",
      "end": "2026-04-02T08:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "CWops",
      "rules_url": "https://cwops.org/cwops-tests/",
      "verified": true,
      "note": "",
      "exchange": "Members: name + CWops number. Non-members: name + state/province/DX prefix.",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "cwops-cwt-20260402T0700@contestcal",
      "start_date": "2026-04-02",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "sarl-80m-qso-party",
      "name": "SARL 80 m QSO Party",
      "start": "2026-04-02T17:00:00Z",
      "end": "2026-04-02T20:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 3,
      "modes": [
        "SSB"
      ],
      "submodes": [],
      "bands": [
        "80m"
      ],
      "bands_note": "Only 3 603-3 650 and 3 703-3 800 kHz may be used; 3 651-3 699 kHz is contest free.",
      "sponsor": "SARL",
      "rules_url": "https://mysarl.org.za/wp-content/uploads/2025/12/2026-SARL-Contest-Manual-Version-1.1-2025-12-15.pdf",
      "verified": true,
      "note": "Two legs on one record: both run 17:00-20:00 UTC on a first Thursday. A Thursday evening rather than a weekend, which is unusual enough to be worth stating. log_format and log_deadline_days are absent: this pass read each contest's Aim, Dates, Frequencies and Exchange sections and did not read its Log Sheets section, so neither is recorded rather than assumed from SARL's other contests.",
      "exchange": "Call sign, RS signal report and the operator's name.",
      "country": "ZA",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-19",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "sarl-80m-qso-party-20260402T1700@contestcal",
      "start_date": "2026-04-02",
      "mode_families": [
        "SSB"
      ],
      "band_families": [
        "80m"
      ],
      "duration_bucket": "2-12"
    },
    {
      "contest_id": "skcc-skse",
      "name": "SKCC Straight Key Sprint Europe (SKSE)",
      "start": "2026-04-02T19:00:00Z",
      "end": "2026-04-02T21:00:00Z",
      "start_wall": "2026-04-02T21:00:00",
      "end_wall": "2026-04-02T23:00:00",
      "local_rolling": false,
      "timezone": "Europe/Berlin",
      "duration_hours": 2,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m",
        "6m"
      ],
      "bands_note": "160 through 6 m excluding the WARC bands -- SKCC names 60, 30, 17 and 12 m as excluded.",
      "sponsor": "Straight Key Century Club",
      "rules_url": "https://www.skccgroup.com/operating_activities/skse/",
      "verified": true,
      "note": "SKCC PRINTS TWO UTC TIMES AND THE CONTEST HAS ONE LOCAL TIME. 2000Z from November to March and 1900Z from April to October are both 2100 in central Europe: CET is UTC+1 and CEST is UTC+2. So this is not a contest that changes its hour twice a year, it is a contest at nine in the evening that Europe's clocks move around, and it is recorded the way the sponsor means it -- `timezone: Europe/Berlin` with wall_clock times, exactly as the ARS Spartan Sprint is recorded in New York.\n\nTHAT READING IS TESTABLE AND IT PASSES ON THE MONTHS THAT DECIDE IT. Europe changes clocks on the last Sunday of March and of October, and the first Thursday of both months falls on the near side of the change: March is still CET and resolves to 2000Z, April is CEST and resolves to 1900Z, October is still CEST at 1900Z, November is CET at 2000Z. All four match SKCC's own table, which is what makes this one rule rather than two.\n\nEncoding it as two records split by month -- winter and summer -- would have produced two entries with the same name and hidden the reason. Encoding one UTC time would have been wrong for five months of the year.\n\nStraight keys, sideswipers and bugs only: no keyer, no keyboard. That is the club's whole premise rather than a category.\n\nThe fifteen-minute QRS extensions at each end are not in the window: they are an invitation to slow operators rather than part of the scored period.",
      "exchange": "RST, QTH, the operator's name and the SKCC number. Non-members send 'none' for the number.",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-23",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": "2026-04-09T21:00:00Z",
      "uid": "skcc-skse-20260402T1900@contestcal",
      "start_date": "2026-04-02",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m",
        "6m"
      ],
      "duration_bucket": "2-12"
    },
    {
      "contest_id": "nccc-ns-ft4",
      "name": "NCCC FT4 Sprint (FT4 NS)",
      "start": "2026-04-03T01:00:00Z",
      "end": "2026-04-03T01:30:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.5,
      "modes": [
        "FT8/FT4"
      ],
      "submodes": [
        "FT4"
      ],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "Northern California Contest Club (NCCC)",
      "rules_url": "https://www.ncccsprint.com/ft4ns.html",
      "verified": true,
      "note": "NCCC describes these as 'nominal rules' that may be modified on a weekly basis, and runs formal Ladder seasons interspersed with practice weeks. The 30-minute session slot itself is fixed.",
      "exchange": "Grid square (following NA VHF, WW Digi and ARRL IDC practice)",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "nccc-ns-ft4-20260403T0100@contestcal",
      "start_date": "2026-04-03",
      "mode_families": [
        "Digital",
        "FT8/FT4"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "nccc-ns-rtty",
      "name": "NCCC RTTY Sprint (RTTY NS)",
      "start": "2026-04-03T01:45:00Z",
      "end": "2026-04-03T02:15:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.5,
      "modes": [
        "RTTY"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m"
      ],
      "bands_note": "",
      "sponsor": "Northern California Contest Club (NCCC)",
      "rules_url": "https://ncccsprint.com/rttyns.html",
      "verified": true,
      "note": "NCCC describes these as 'nominal rules' that may be modified on a weekly basis, and runs formal Ladder seasons interspersed with practice weeks. The 30-minute session slot itself is fixed.",
      "exchange": "Serial number + name + QTH (both callsigns required in the exchange)",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "nccc-ns-rtty-20260403T0145@contestcal",
      "start_date": "2026-04-03",
      "mode_families": [
        "RTTY",
        "Digital"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "nccc-ns-cw",
      "name": "NCCC Sprint (NS)",
      "start": "2026-04-03T02:30:00Z",
      "end": "2026-04-03T03:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.5,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m"
      ],
      "bands_note": "",
      "sponsor": "Northern California Contest Club (NCCC)",
      "rules_url": "https://ncccsprint.com/rules.html",
      "verified": true,
      "note": "NCCC describes these as 'nominal rules' that may be modified on a weekly basis, and runs formal Ladder seasons interspersed with practice weeks. The 30-minute session slot itself is fixed.",
      "exchange": "Serial number + name + QTH (both callsigns required in the exchange)",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "nccc-ns-cw-20260403T0230@contestcal",
      "start_date": "2026-04-03",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "k1usn-sst",
      "name": "K1USN Slow Speed Test (SST)",
      "start": "2026-04-03T20:00:00Z",
      "end": "2026-04-03T21:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "",
      "sponsor": "K1USN Radio Club",
      "rules_url": "https://www.k1usn.com/sst_rules.html",
      "verified": true,
      "note": "No formal log submission -- participants post scores to 3830scores.com.",
      "exchange": "Name + state/province/DX country",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "k1usn-sst-20260403T2000@contestcal",
      "start_date": "2026-04-03",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "podxs-new-member-jamboree",
      "name": "PODXS 070 Club New Member Jamboree",
      "start": "2026-04-04T00:00:00Z",
      "end": "2026-04-04T23:59:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 23.98,
      "modes": [
        "Digital"
      ],
      "submodes": [
        "PSK31"
      ],
      "bands": [
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "",
      "sponsor": "PODXS 070 Club",
      "rules_url": "https://www.podxs070.com/o7o-club-sponsored-contests/nmj",
      "verified": true,
      "note": "",
      "exchange": "Members: 070 Club number + year joined. Non-members: no required exchange.",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-12",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": "2026-04-11T23:59:00Z",
      "uid": "podxs-new-member-jamboree-20260404T0000@contestcal",
      "start_date": "2026-04-04",
      "mode_families": [
        "Digital"
      ],
      "band_families": [
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "12-24"
    },
    {
      "contest_id": "erau-es-ll-kv",
      "name": "Estonian HF Cup (ES LL KV)",
      "start": "2026-04-04T07:00:00Z",
      "end": "2026-04-04T07:59:00Z",
      "start_wall": "2026-04-04T10:00:00",
      "end_wall": "2026-04-04T10:59:00",
      "local_rolling": false,
      "timezone": "Europe/Tallinn",
      "duration_hours": 0.98,
      "modes": [
        "CW",
        "SSB"
      ],
      "submodes": [],
      "bands": [
        "80m"
      ],
      "bands_note": "CW below 3600 kHz and SSB above it; 3530-3560 kHz and 3600-3650 kHz are recommended.",
      "sponsor": "ERAU",
      "rules_url": "https://www.erau.ee/images/LL/ES%20LL%20KV%20reeglid.pdf",
      "verified": true,
      "note": "SPONSOR-ANCHORED LOCAL TIME, and ERAU's own calendar proves the reading: 10:00-10:59 Estonian time is 08:00-08:59 UTC in winter (EET) and 07:00-07:59 in summer (EEST), which is exactly the split ERAU prints across the nine stages. The rules give no date rule at all -- 4.2 defers to the calendar plan -- so the dates are manual and taken from ERAU's published 2026 calendar. Eight of the nine are the first Saturday of their month; February's is the second. The log deadline is 'the Thursday of the following week', which is not a fixed number of days from the end of each stage, so it is recorded here rather than as log_deadline_days. Stages 4.3 also splits each hour into four periods; that is a scoring device inside one continuous hour.",
      "exchange": "RS(T) and a continuous serial number from 001.",
      "country": "EE",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-19",
      "can_enter": false,
      "eligibility_scope": "entity_list",
      "eligibility_reason": "Entry limited to ES. K stations may be worked but cannot submit an entry.",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "erau-es-ll-kv-20260404T0700@contestcal",
      "start_date": "2026-04-04",
      "mode_families": [
        "CW",
        "SSB"
      ],
      "band_families": [
        "80m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "ure-eartty",
      "name": "EA RTTY Contest",
      "start": "2026-04-04T12:00:00Z",
      "end": "2026-04-05T11:59:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 23.98,
      "modes": [
        "RTTY"
      ],
      "submodes": [
        "Baudot"
      ],
      "bands": [
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "",
      "sponsor": "URE",
      "rules_url": "https://concursos.ure.es/en/eartty/bases/",
      "verified": true,
      "note": "MANUAL, DELIBERATELY: URE states a date and no rule for this contest, in both the English and the Spanish version of the page -- unlike its five other HF contests, every one of which names an ordinal weekend. The 2026 dates happen to be the first full weekend of April, but no ordinal is asserted on URE's behalf, so the record ends after 2026 rather than guessing.",
      "exchange": "Spanish stations send RSQ + their province abbreviation; DX stations send RSQ + a serial number starting with 001. EA4URE sends HQ.",
      "country": "ES",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-18",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": "2026-04-20T11:59:00Z",
      "uid": "ure-eartty-20260404T1200@contestcal",
      "start_date": "2026-04-04",
      "mode_families": [
        "RTTY",
        "Digital"
      ],
      "band_families": [
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "12-24"
    },
    {
      "contest_id": "sarl-qrp-autumn",
      "name": "SARL QRP Contest (Autumn leg)",
      "start": "2026-04-04T13:30:00Z",
      "end": "2026-04-04T15:30:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 2,
      "modes": [
        "SSB",
        "CW"
      ],
      "submodes": [],
      "bands": [
        "40m",
        "20m",
        "10m"
      ],
      "bands_note": "40m, 20m and 10m, any of them at any time during the contest. QRP calling frequencies 7.090, 14.285 and 28.360 MHz are suggested.",
      "sponsor": "SARL",
      "rules_url": "https://mysarl.org.za/wp-content/uploads/2025/12/2026-SARL-Contest-Manual-Version-1.1-2025-12-15.pdf",
      "verified": true,
      "note": "The autumn leg is the April one -- the seasons are southern hemisphere, so January is summer. One of SARL's four named QRP legs. They are four records rather than one because SARL names four legs by season and they do not share a clock: the Summer and Winter legs run 07:00-09:00 UTC and the Autumn and Spring legs 13:30-15:30, so no single start/end pair covers them. Grouping the two pairs by their times would have been this catalog inventing a structure SARL does not use. log_format and log_deadline_days are absent: this pass read each contest's Aim, Dates, Frequencies and Exchange sections and did not read its Log Sheets section, so neither is recorded rather than assumed from SARL's other contests.",
      "exchange": "Realistic RS(T), 6-character grid square and transmit power in watts (for example 57, KG33uk, 10).",
      "country": "ZA",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-19",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "sarl-qrp-autumn-20260404T1330@contestcal",
      "start_date": "2026-04-04",
      "mode_families": [
        "CW",
        "SSB"
      ],
      "band_families": [
        "40m",
        "20m",
        "10m"
      ],
      "duration_bucket": "2-12"
    },
    {
      "contest_id": "sp-dx-contest",
      "name": "SP DX Contest",
      "start": "2026-04-04T15:00:00Z",
      "end": "2026-04-05T14:59:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 23.98,
      "modes": [
        "SSB",
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "",
      "sponsor": "PZK / SP DX Club",
      "rules_url": "https://spdxcontest.pzk.org.pl/2026/rules.php",
      "verified": true,
      "note": "The summary block on the same page prints the deadline as 12.04.2026 23:59 UTC, where the stated one-week interval from the 14:59 end gives 14:59 on the same day. The interval is the rule the organisers state, so the interval is encoded and the printed instant is recorded here.",
      "exchange": "SP stations send RS(T) + one letter identifying their province (B, C, D, F, G, J, K, L, M, O, P, R, S, U, W or Z); all other stations send RS(T) + a serial number starting from 001.",
      "country": "PL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-18",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": "2026-04-12T14:59:00Z",
      "uid": "sp-dx-contest-20260404T1500@contestcal",
      "start_date": "2026-04-04",
      "mode_families": [
        "CW",
        "SSB"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "12-24"
    },
    {
      "contest_id": "k1usn-sst",
      "name": "K1USN Slow Speed Test (SST)",
      "start": "2026-04-06T00:00:00Z",
      "end": "2026-04-06T01:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "",
      "sponsor": "K1USN Radio Club",
      "rules_url": "https://www.k1usn.com/sst_rules.html",
      "verified": true,
      "note": "No formal log submission -- participants post scores to 3830scores.com.",
      "exchange": "Name + state/province/DX country",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "k1usn-sst-20260406T0000@contestcal",
      "start_date": "2026-04-06",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "darc-ostercontest",
      "name": "DARC Ostercontest",
      "start": "2026-04-06T15:00:00Z",
      "end": "2026-04-06T17:29:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 2.48,
      "modes": [
        "CW",
        "SSB"
      ],
      "submodes": [],
      "bands": [
        "80m",
        "40m"
      ],
      "bands_note": "",
      "sponsor": "DARC",
      "rules_url": "https://www.darc.de/der-club/referate/conteste/darc-ostercontest/regeln/",
      "verified": true,
      "note": "MANUAL FOR A DATE THAT IS PERFECTLY COMPUTABLE, and that is a compromise rather than a judgement about DARC. They state the rule in words -- 'Ostermontag' -- and Easter is deterministic, so this SHOULD be a rule. This catalog has no Easter-anchored rule type, and adding one means changing both engines and the parity suite for a single record.\n\nSo it holds the published date and goes empty in 2027, and the cost is visible: it joins the expiry cliff for a date arithmetic could produce. If a second Easter-anchored contest turns up, that is the moment to add the rule type -- the same standard that added per-date times when the 3.5 MHz series became the second consumer rather than the first.\n\n6 April 2026 is Easter Monday, and matches DARC's own table.",
      "exchange": "RS(T) and the sender's DOK for DARC and VFDB members; German non-members send RS(T) and 'NM'; stations outside Germany send RS(T) and a serial from 001.",
      "country": "DE",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-23",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": "2026-04-13T17:29:00Z",
      "uid": "darc-ostercontest-20260406T1500@contestcal",
      "start_date": "2026-04-06",
      "mode_families": [
        "CW",
        "SSB"
      ],
      "band_families": [
        "80m",
        "40m"
      ],
      "duration_bucket": "2-12"
    },
    {
      "contest_id": "agcw-zap-merit",
      "name": "AGCW ZAP Merit Contest (ZMC)",
      "start": "2026-04-06T17:40:00Z",
      "end": "2026-04-06T18:30:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.83,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "80m"
      ],
      "bands_note": "",
      "sponsor": "AGCW-DL",
      "rules_url": "https://www.agcw.de/contest/tzap/",
      "verified": false,
      "note": "PARTLY UNVERIFIED. The recurrence (every Monday), the 1740 UTC pre-logging opening and the 1800 UTC telegram transmission are all quoted from AGCW. AGCW publishes NO closing time. The 1830 end stored here is a PLACEHOLDER so the record expands -- it is not a sponsor fact and must not be presented as one. Confirm the session length with the ZMC manager before shipping. Points accumulate over a calendar year; logs are due 31 January of the following year.",
      "exchange": "Callsign + date + time + RST (SWLs log RST of both stations in a QSO)",
      "country": "DE",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-12",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "agcw-zap-merit-20260406T1740@contestcal",
      "start_date": "2026-04-06",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "80m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "ars-spartan-sprint",
      "name": "ARS Spartan Sprint",
      "start": "2026-04-07T00:00:00Z",
      "end": "2026-04-07T02:00:00Z",
      "start_wall": "2026-04-06T20:00:00",
      "end_wall": "2026-04-06T22:00:00",
      "local_rolling": false,
      "timezone": "America/New_York",
      "duration_hours": 2,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "",
      "sponsor": "Adventure Radio Society",
      "rules_url": "https://ars-qrp.com/Spartan_Sprint/Spartan_Sprint.html",
      "verified": true,
      "note": "CORRECTION (anchor): previously encoded as the first TUESDAY of the month. The sponsor's rule is the first MONDAY US local, which lands on Tuesday UTC -- and those are different dates whenever the 1st falls on a Tuesday (Sep and Dec 2026). SPONSOR-ANCHORED LOCAL TIME: ARS publishes no UTC time and states the event 'is always at these Local Times', so the UTC instant is what moves -- 0100Z Tuesday under EST, 0000Z Tuesday under EDT. Resolved through America/New_York rather than hardcoded, so DST is handled. ARS lists Eastern, Central, Mountain and Pacific times that are the same instant in every zone that observes DST; Arizona, which does not, is the one place the sponsor's own table is inconsistent.",
      "exchange": "RST + state/province + power output",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "ars-spartan-sprint-20260407T0000@contestcal",
      "start_date": "2026-04-07",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "2-12"
    },
    {
      "contest_id": "nzart-sprint-cw",
      "name": "ZL Autumn and Winter Sprints, CW",
      "start": "2026-04-07T08:00:00Z",
      "end": "2026-04-07T08:29:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.48,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "80m"
      ],
      "bands_note": "Suggested frequencies CW 3520-3550 kHz",
      "sponsor": "NZART",
      "rules_url": "https://nzart.org.nz/activities/contests/sprints/",
      "verified": true,
      "note": "One of three back-to-back 29-minute sprints on the same evening, each in a different mode and each scored separately, which is why they are three records here rather than one. Logs are due 'within 24 hours of the end of the sprint' -- shorter than a day, so no deadline interval is computed; they go to markzl3ab@gmail.com.",
      "exchange": "RS(T) and the outside temperature to the nearest degree; on CW, 'm' denotes a minus sign",
      "country": "NZ",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-17",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "nzart-sprint-cw-20260407T0800@contestcal",
      "start_date": "2026-04-07",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "80m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "nzart-sprint-ssb",
      "name": "ZL Autumn and Winter Sprints, SSB",
      "start": "2026-04-07T08:30:00Z",
      "end": "2026-04-07T08:59:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.48,
      "modes": [
        "SSB"
      ],
      "submodes": [],
      "bands": [
        "80m"
      ],
      "bands_note": "Suggested frequencies SSB 3620-3670 kHz",
      "sponsor": "NZART",
      "rules_url": "https://nzart.org.nz/activities/contests/sprints/",
      "verified": true,
      "note": "One of three back-to-back 29-minute sprints on the same evening, each in a different mode and each scored separately, which is why they are three records here rather than one. Logs are due 'within 24 hours of the end of the sprint' -- shorter than a day, so no deadline interval is computed; they go to markzl3ab@gmail.com.",
      "exchange": "RS(T) and the outside temperature to the nearest degree",
      "country": "NZ",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-17",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "nzart-sprint-ssb-20260407T0830@contestcal",
      "start_date": "2026-04-07",
      "mode_families": [
        "SSB"
      ],
      "band_families": [
        "80m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "nzart-sprint-ft4",
      "name": "ZL Autumn and Winter Sprints, FT4",
      "start": "2026-04-07T09:00:00Z",
      "end": "2026-04-07T09:29:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.48,
      "modes": [
        "FT8/FT4"
      ],
      "submodes": [
        "FT4"
      ],
      "bands": [
        "80m"
      ],
      "bands_note": "Suggested frequency FT4 3575 kHz",
      "sponsor": "NZART",
      "rules_url": "https://nzart.org.nz/activities/contests/sprints/",
      "verified": true,
      "note": "One of three back-to-back 29-minute sprints on the same evening, each in a different mode and each scored separately, which is why they are three records here rather than one. Logs are due 'within 24 hours of the end of the sprint' -- shorter than a day, so no deadline interval is computed; they go to markzl3ab@gmail.com.",
      "exchange": "A four-digit Maidenhead grid-square locator",
      "country": "NZ",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-17",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "nzart-sprint-ft4-20260407T0900@contestcal",
      "start_date": "2026-04-07",
      "mode_families": [
        "Digital",
        "FT8/FT4"
      ],
      "band_families": [
        "80m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "cwops-cwt",
      "name": "CWops Test (CWT)",
      "start": "2026-04-08T13:00:00Z",
      "end": "2026-04-08T14:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "CWops",
      "rules_url": "https://cwops.org/cwops-tests/",
      "verified": true,
      "note": "",
      "exchange": "Members: name + CWops number. Non-members: name + state/province/DX prefix.",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "cwops-cwt-20260408T1300@contestcal",
      "start_date": "2026-04-08",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "cwops-cwt",
      "name": "CWops Test (CWT)",
      "start": "2026-04-08T19:00:00Z",
      "end": "2026-04-08T20:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "CWops",
      "rules_url": "https://cwops.org/cwops-tests/",
      "verified": true,
      "note": "",
      "exchange": "Members: name + CWops number. Non-members: name + state/province/DX prefix.",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "cwops-cwt-20260408T1900@contestcal",
      "start_date": "2026-04-08",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "cwops-cwt",
      "name": "CWops Test (CWT)",
      "start": "2026-04-09T03:00:00Z",
      "end": "2026-04-09T04:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "CWops",
      "rules_url": "https://cwops.org/cwops-tests/",
      "verified": true,
      "note": "",
      "exchange": "Members: name + CWops number. Non-members: name + state/province/DX prefix.",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "cwops-cwt-20260409T0300@contestcal",
      "start_date": "2026-04-09",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "cwops-cwt",
      "name": "CWops Test (CWT)",
      "start": "2026-04-09T07:00:00Z",
      "end": "2026-04-09T08:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "CWops",
      "rules_url": "https://cwops.org/cwops-tests/",
      "verified": true,
      "note": "",
      "exchange": "Members: name + CWops number. Non-members: name + state/province/DX prefix.",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "cwops-cwt-20260409T0700@contestcal",
      "start_date": "2026-04-09",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "nccc-ns-ft4",
      "name": "NCCC FT4 Sprint (FT4 NS)",
      "start": "2026-04-10T01:00:00Z",
      "end": "2026-04-10T01:30:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.5,
      "modes": [
        "FT8/FT4"
      ],
      "submodes": [
        "FT4"
      ],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "Northern California Contest Club (NCCC)",
      "rules_url": "https://www.ncccsprint.com/ft4ns.html",
      "verified": true,
      "note": "NCCC describes these as 'nominal rules' that may be modified on a weekly basis, and runs formal Ladder seasons interspersed with practice weeks. The 30-minute session slot itself is fixed.",
      "exchange": "Grid square (following NA VHF, WW Digi and ARRL IDC practice)",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "nccc-ns-ft4-20260410T0100@contestcal",
      "start_date": "2026-04-10",
      "mode_families": [
        "Digital",
        "FT8/FT4"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "nccc-ns-rtty",
      "name": "NCCC RTTY Sprint (RTTY NS)",
      "start": "2026-04-10T01:45:00Z",
      "end": "2026-04-10T02:15:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.5,
      "modes": [
        "RTTY"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m"
      ],
      "bands_note": "",
      "sponsor": "Northern California Contest Club (NCCC)",
      "rules_url": "https://ncccsprint.com/rttyns.html",
      "verified": true,
      "note": "NCCC describes these as 'nominal rules' that may be modified on a weekly basis, and runs formal Ladder seasons interspersed with practice weeks. The 30-minute session slot itself is fixed.",
      "exchange": "Serial number + name + QTH (both callsigns required in the exchange)",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "nccc-ns-rtty-20260410T0145@contestcal",
      "start_date": "2026-04-10",
      "mode_families": [
        "RTTY",
        "Digital"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "nccc-ns-cw",
      "name": "NCCC Sprint (NS)",
      "start": "2026-04-10T02:30:00Z",
      "end": "2026-04-10T03:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.5,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m"
      ],
      "bands_note": "",
      "sponsor": "Northern California Contest Club (NCCC)",
      "rules_url": "https://ncccsprint.com/rules.html",
      "verified": true,
      "note": "NCCC describes these as 'nominal rules' that may be modified on a weekly basis, and runs formal Ladder seasons interspersed with practice weeks. The 30-minute session slot itself is fixed.",
      "exchange": "Serial number + name + QTH (both callsigns required in the exchange)",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "nccc-ns-cw-20260410T0230@contestcal",
      "start_date": "2026-04-10",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "k1usn-sst",
      "name": "K1USN Slow Speed Test (SST)",
      "start": "2026-04-10T20:00:00Z",
      "end": "2026-04-10T21:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "",
      "sponsor": "K1USN Radio Club",
      "rules_url": "https://www.k1usn.com/sst_rules.html",
      "verified": true,
      "note": "No formal log submission -- participants post scores to 3830scores.com.",
      "exchange": "Name + state/province/DX country",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "k1usn-sst-20260410T2000@contestcal",
      "start_date": "2026-04-10",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "jidx-cw",
      "name": "Japan International DX Contest, CW",
      "start": "2026-04-11T07:00:00Z",
      "end": "2026-04-12T13:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 30,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "1.8, 3.5, 7, 14, 21 and 28 MHz.",
      "sponsor": "JIDX Contest Committee",
      "rules_url": "https://jidx.org/jidxrule-e.html",
      "verified": true,
      "note": "THE TWO LEGS ARE SIX MONTHS APART AND SHARE EVERYTHING ELSE -- same hours, same bands, same exchange, same second-full-weekend rule. CW runs in April and phone in November, which is the only reason these are two records.\n\nThirty hours rather than a round twenty-four: 0700 Saturday to 1300 Sunday.",
      "exchange": "Japanese stations send RST and their prefecture number, 01 to 50. Everyone else sends RST and their CQ zone.",
      "country": "JP",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-21",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": "2026-05-12T13:00:00Z",
      "uid": "jidx-cw-20260411T0700@contestcal",
      "start_date": "2026-04-11",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "gte24"
    },
    {
      "contest_id": "ok-om-dx-ssb",
      "name": "OK/OM DX Contest, SSB",
      "start": "2026-04-11T12:00:00Z",
      "end": "2026-04-12T11:59:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 23.98,
      "modes": [
        "SSB"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "1.8 through 28 MHz, WARC bands excluded",
      "sponsor": "CRK / SARA",
      "rules_url": "http://www.okomdx.crk.cz/index.php?page=SSB-rules-english",
      "verified": true,
      "note": "The parenthetical deadline (19 April 2026, 2359 UTC) is the right date for the seven-day interval but 23:59 rather than the 11:59 that end-plus-7-days gives; the interval is the stated rule, so the interval is encoded. WORDING DIFFERENCE, RECORDED RATHER THAN RECONCILED: the SSB rules say 'second weekend in April' where the CW rules say 'Second (full) weekend in November'. The two readings cannot diverge at n = 2 -- the second Saturday of a month is at most the 14th, so its Sunday is always in the same month -- so no choice between them was needed. BLOCKER RECORDED, NOT WORKED AROUND: okomdx.crk.cz serves a TLS certificate issued for default.web4u.cz, so HTTPS fails validation and the rules are reachable only over plain HTTP. rules_url is therefore http:// deliberately; it is not an oversight, and the link checker will keep reporting it as such until the Czech Radio Club fixes the host.",
      "exchange": "Non-Czech and Slovak stations send a signal report + a QSO number starting with 001; Czech and Slovak stations send a signal report + their three-letter county code.",
      "country": "CZ",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-18",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": "2026-04-19T11:59:00Z",
      "uid": "ok-om-dx-ssb-20260411T1200@contestcal",
      "start_date": "2026-04-11",
      "mode_families": [
        "SSB"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "12-24"
    },
    {
      "contest_id": "rsgb-ft4-activity-day",
      "name": "RSGB FT4 International Activity Day",
      "start": "2026-04-11T12:00:00Z",
      "end": "2026-04-12T12:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 24,
      "modes": [
        "FT8/FT4"
      ],
      "submodes": [
        "FT4"
      ],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "160m through 10m; recommended dial frequencies (all USB) 1843, 3576, 7047.5, 14080, 21140 and 28180 kHz.",
      "sponsor": "RSGB Contest Committee",
      "rules_url": "https://www.rsgbcc.org/hf/rules/2026/rallband_ft4.shtml",
      "verified": false,
      "note": "MANUAL, BECAUSE THE ONE PATTERN THAT FITS THREE YEARS BREAKS IN THE FOURTH. RSGB ran this on the FIRST Saturday of April in 2023, 2024 and 2025 -- and on the SECOND in 2026. So no ordinal describes it, and the record holds only the date RSGB published.\n\nThere is a plausible reason, and it is a hypothesis rather than a rule: Easter Sunday fell on 5 April 2026, which would put the first Saturday of April on Easter Saturday. Easter fell outside early April in the other three years. If RSGB confirms it avoids Easter, this becomes a rule with an exception; until then it is one year's deviation with a story attached, and a story is not a source.\n\nThe format also changed: 2023 was a single 12-hour day at 0800-2000 UTC, and from 2024 it has been 24 hours at 1200-1200.",
      "exchange": "A signal report. A serial number is not required.",
      "country": "GB",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-20",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "rsgb-ft4-activity-day-20260411T1200@contestcal",
      "start_date": "2026-04-11",
      "mode_families": [
        "Digital",
        "FT8/FT4"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "gte24"
    },
    {
      "contest_id": "skcc-wes",
      "name": "SKCC Weekend Sprintathon (WES)",
      "start": "2026-04-11T12:00:00Z",
      "end": "2026-04-12T23:59:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 35.98,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "Straight Key Century Club",
      "rules_url": "https://www.skccgroup.com/operating_activities/weekend_sprintathon/",
      "verified": true,
      "note": "Older sources describe the anchor as 'the Saturday following the 6th', which differs from '2nd Saturday' in some months. SKCC's current page says 2nd Saturday; re-check if dates drift.",
      "exchange": "RST + state/province/country + name + SKCC number (C/T/S suffix for award holders)",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "skcc-wes-20260411T1200@contestcal",
      "start_date": "2026-04-11",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m",
        "6m"
      ],
      "duration_bucket": "gte24"
    },
    {
      "contest_id": "sarl-africa-ft4",
      "name": "Africa FT4 DX Contest",
      "start": "2026-04-11T15:00:00Z",
      "end": "2026-04-11T18:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 3,
      "modes": [
        "FT8/FT4"
      ],
      "submodes": [
        "FT4"
      ],
      "bands": [
        "80m",
        "40m",
        "20m"
      ],
      "bands_note": "80m, 40m and 20m; recommended dial frequencies 3576 kHz, 7047.5 kHz and 14080 kHz (USB), the WSJT-X FT4 defaults.",
      "sponsor": "SARL",
      "rules_url": "https://mysarl.org.za/wp-content/uploads/2025/11/2026-Africa-FT4-DX-Contest-v1.1.pdf",
      "verified": true,
      "note": "Two legs off one record: both run 15:00-18:00 UTC and differ only in which second Saturday they anchor to. Power is capped at 100 W for everyone, so it is recorded as the single power category rather than as a set of entry classes. No log deadline is stated in the contest's own rules section.",
      "exchange": "A signal report and the four-digit Maidenhead grid locator, using the FT4 mode.",
      "country": "ZA",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-19",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "sarl-africa-ft4-20260411T1500@contestcal",
      "start_date": "2026-04-11",
      "mode_families": [
        "Digital",
        "FT8/FT4"
      ],
      "band_families": [
        "80m",
        "40m",
        "20m"
      ],
      "duration_bucket": "2-12"
    },
    {
      "contest_id": "zs4-qso-party",
      "name": "ZS4 QSO Party",
      "start": "2026-04-12T14:00:00Z",
      "end": "2026-04-12T15:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW",
        "SSB"
      ],
      "submodes": [],
      "bands": [
        "40m"
      ],
      "bands_note": "A phone and CW contest on 40 m: CW 7 000-7 040 kHz, SSB 7 063-7 100 and 7 130-7 200 kHz.",
      "sponsor": "Sasolburg Amateur Radio Club",
      "rules_url": "https://mysarl.org.za/wp-content/uploads/2025/12/2026-SARL-Contest-Manual-Version-1.1-2025-12-15.pdf",
      "verified": true,
      "note": "SOURCED FROM THE SARL CONTEST MANUAL, WHICH IS NOT AN AGGREGATOR. The manual carries this contest's FULL rules -- aim, dates, exchange, frequencies, scoring, log sheets -- and names its organising club, rather than summarising a calendar entry. It is the venue in which South African clubs publish their contest rules, the way DARC's Ausschreibungen or UBA's rules pages are, so it is a primary source for these contests and not a third-party listing. The distinction that matters: an aggregator republishes rules it found elsewhere, and this is where the rules appear.",
      "exchange": "RS(T) and the provincial or country abbreviation.",
      "country": "ZA",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-19",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "zs4-qso-party-20260412T1400@contestcal",
      "start_date": "2026-04-12",
      "mode_families": [
        "CW",
        "SSB"
      ],
      "band_families": [
        "40m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "4sqrp-sss",
      "name": "4 States QRP Group Second Sunday Sprint (SSS)",
      "start": "2026-04-13T00:00:00Z",
      "end": "2026-04-13T02:00:00Z",
      "start_wall": "2026-04-12T19:00:00",
      "end_wall": "2026-04-12T21:00:00",
      "local_rolling": false,
      "timezone": "America/Chicago",
      "duration_hours": 2,
      "modes": [
        "CW",
        "SSB",
        "Digital"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "",
      "sponsor": "4 States QRP Group",
      "rules_url": "https://www.4sqrp.com/SSS/sss_rules_revised_02_2026.pdf",
      "verified": true,
      "note": "SPONSOR-ANCHORED LOCAL TIME. The anchor is the second SUNDAY and the sprint runs into Monday UTC. 4SQRP states the consequence itself: '7 PM until 9 PM central time (CST or CDT, whichever is in effect at the time). If you use UTC, that time changes when we switch from CST to CDT (or vice versa).' Resolved through America/Chicago, so it is 0100Z Monday in winter and 0000Z Monday in summer.",
      "exchange": "RST + state/province/country + 4SQRP member number (power if non-member)",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "4sqrp-sss-20260413T0000@contestcal",
      "start_date": "2026-04-13",
      "mode_families": [
        "CW",
        "SSB",
        "Digital"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "2-12"
    },
    {
      "contest_id": "k1usn-sst",
      "name": "K1USN Slow Speed Test (SST)",
      "start": "2026-04-13T00:00:00Z",
      "end": "2026-04-13T01:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "",
      "sponsor": "K1USN Radio Club",
      "rules_url": "https://www.k1usn.com/sst_rules.html",
      "verified": true,
      "note": "No formal log submission -- participants post scores to 3830scores.com.",
      "exchange": "Name + state/province/DX country",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "k1usn-sst-20260413T0000@contestcal",
      "start_date": "2026-04-13",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "agcw-zap-merit",
      "name": "AGCW ZAP Merit Contest (ZMC)",
      "start": "2026-04-13T17:40:00Z",
      "end": "2026-04-13T18:30:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.83,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "80m"
      ],
      "bands_note": "",
      "sponsor": "AGCW-DL",
      "rules_url": "https://www.agcw.de/contest/tzap/",
      "verified": false,
      "note": "PARTLY UNVERIFIED. The recurrence (every Monday), the 1740 UTC pre-logging opening and the 1800 UTC telegram transmission are all quoted from AGCW. AGCW publishes NO closing time. The 1830 end stored here is a PLACEHOLDER so the record expands -- it is not a sponsor fact and must not be presented as one. Confirm the session length with the ZMC manager before shipping. Points accumulate over a calendar year; logs are due 31 January of the following year.",
      "exchange": "Callsign + date + time + RST (SWLs log RST of both stations in a QSO)",
      "country": "DE",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-12",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "agcw-zap-merit-20260413T1740@contestcal",
      "start_date": "2026-04-13",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "80m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "rsgb-80mcc-cw",
      "name": "RSGB 3.5 MHz Club Championship, CW",
      "start": "2026-04-13T19:00:00Z",
      "end": "2026-04-13T20:30:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1.5,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "80m"
      ],
      "bands_note": "3510-3565 kHz at any speed, with 3565-3570 kHz reserved for 15 wpm maximum.",
      "sponsor": "RSGB Contest Committee",
      "rules_url": "https://www.rsgbcc.org/hf/rules/2026/r80mcc.shtml",
      "verified": true,
      "note": "THE DATES ARE NOT ON THE RULES PAGE. RSGB publishes the rules at rules/2026/r80mcc.shtml and the eighteen legs on a separate CGI calendar, and the rules page links to it in so many words. This record holds what that calendar prints; nothing is derived.\n\nTHE CLOCK MOVES IN APRIL and the record says so per date: February and March run 2000-2130 UTC, April to July run 1900-2030. The record's default is the April-July clock because four of each mode's six legs use it, and the two early legs carry their own times. Same mechanism as the Autumn Series, and the second contest to need it.\n\nMANUAL BECAUSE THE LEGS FOLLOW NO ORDINAL. They fall on Mondays, Wednesdays and Thursdays with the weekday rotating through the series, which is exactly the shape an ordinal must not be fitted to.\n\nNON-UK STATIONS MAY ENTER AS INDIVIDUALS -- RSGB states it, which is worth noting beside the AFS and Club Calls contests where entry really is UK&CD only.",
      "exchange": "RS(T) plus a serial number starting at 1 and incrementing by 1.",
      "country": "GB",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-23",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": "2026-04-14T20:30:00Z",
      "uid": "rsgb-80mcc-cw-20260413T1900@contestcal",
      "start_date": "2026-04-13",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "80m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "nzart-sprint-cw",
      "name": "ZL Autumn and Winter Sprints, CW",
      "start": "2026-04-14T08:00:00Z",
      "end": "2026-04-14T08:29:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.48,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "80m"
      ],
      "bands_note": "Suggested frequencies CW 3520-3550 kHz",
      "sponsor": "NZART",
      "rules_url": "https://nzart.org.nz/activities/contests/sprints/",
      "verified": true,
      "note": "One of three back-to-back 29-minute sprints on the same evening, each in a different mode and each scored separately, which is why they are three records here rather than one. Logs are due 'within 24 hours of the end of the sprint' -- shorter than a day, so no deadline interval is computed; they go to markzl3ab@gmail.com.",
      "exchange": "RS(T) and the outside temperature to the nearest degree; on CW, 'm' denotes a minus sign",
      "country": "NZ",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-17",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "nzart-sprint-cw-20260414T0800@contestcal",
      "start_date": "2026-04-14",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "80m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "nzart-sprint-ssb",
      "name": "ZL Autumn and Winter Sprints, SSB",
      "start": "2026-04-14T08:30:00Z",
      "end": "2026-04-14T08:59:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.48,
      "modes": [
        "SSB"
      ],
      "submodes": [],
      "bands": [
        "80m"
      ],
      "bands_note": "Suggested frequencies SSB 3620-3670 kHz",
      "sponsor": "NZART",
      "rules_url": "https://nzart.org.nz/activities/contests/sprints/",
      "verified": true,
      "note": "One of three back-to-back 29-minute sprints on the same evening, each in a different mode and each scored separately, which is why they are three records here rather than one. Logs are due 'within 24 hours of the end of the sprint' -- shorter than a day, so no deadline interval is computed; they go to markzl3ab@gmail.com.",
      "exchange": "RS(T) and the outside temperature to the nearest degree",
      "country": "NZ",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-17",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "nzart-sprint-ssb-20260414T0830@contestcal",
      "start_date": "2026-04-14",
      "mode_families": [
        "SSB"
      ],
      "band_families": [
        "80m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "nzart-sprint-ft4",
      "name": "ZL Autumn and Winter Sprints, FT4",
      "start": "2026-04-14T09:00:00Z",
      "end": "2026-04-14T09:29:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.48,
      "modes": [
        "FT8/FT4"
      ],
      "submodes": [
        "FT4"
      ],
      "bands": [
        "80m"
      ],
      "bands_note": "Suggested frequency FT4 3575 kHz",
      "sponsor": "NZART",
      "rules_url": "https://nzart.org.nz/activities/contests/sprints/",
      "verified": true,
      "note": "One of three back-to-back 29-minute sprints on the same evening, each in a different mode and each scored separately, which is why they are three records here rather than one. Logs are due 'within 24 hours of the end of the sprint' -- shorter than a day, so no deadline interval is computed; they go to markzl3ab@gmail.com.",
      "exchange": "A four-digit Maidenhead grid-square locator",
      "country": "NZ",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-17",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "nzart-sprint-ft4-20260414T0900@contestcal",
      "start_date": "2026-04-14",
      "mode_families": [
        "Digital",
        "FT8/FT4"
      ],
      "band_families": [
        "80m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "darc-rtty-kurzcontest",
      "name": "DARC RTTY-Kurzcontest",
      "start": "2026-04-14T18:00:00Z",
      "end": "2026-04-14T19:29:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1.48,
      "modes": [
        "RTTY"
      ],
      "submodes": [
        "RTTY 45.45 baud"
      ],
      "bands": [
        "80m",
        "40m"
      ],
      "bands_note": "",
      "sponsor": "DARC",
      "rules_url": "https://www.darc.de/der-club/referate/conteste/rtty-kurz/rtty-rules/",
      "verified": true,
      "note": "Four legs a year, one record, offset one month from the FT4 contest: RTTY takes the first month of each quarter and FT4 the second, both on the second Tuesday.",
      "exchange": "RST + DOK; German non-members send 'NM'. Stations outside Germany send RST + serial from 001.",
      "country": "DE",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-18",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": "2026-04-21T19:29:00Z",
      "uid": "darc-rtty-kurzcontest-20260414T1800@contestcal",
      "start_date": "2026-04-14",
      "mode_families": [
        "RTTY",
        "Digital"
      ],
      "band_families": [
        "80m",
        "40m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "cwops-cwt",
      "name": "CWops Test (CWT)",
      "start": "2026-04-15T13:00:00Z",
      "end": "2026-04-15T14:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "CWops",
      "rules_url": "https://cwops.org/cwops-tests/",
      "verified": true,
      "note": "",
      "exchange": "Members: name + CWops number. Non-members: name + state/province/DX prefix.",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "cwops-cwt-20260415T1300@contestcal",
      "start_date": "2026-04-15",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "cwops-cwt",
      "name": "CWops Test (CWT)",
      "start": "2026-04-15T19:00:00Z",
      "end": "2026-04-15T20:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "CWops",
      "rules_url": "https://cwops.org/cwops-tests/",
      "verified": true,
      "note": "",
      "exchange": "Members: name + CWops number. Non-members: name + state/province/DX prefix.",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "cwops-cwt-20260415T1900@contestcal",
      "start_date": "2026-04-15",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "cwops-cwt",
      "name": "CWops Test (CWT)",
      "start": "2026-04-16T03:00:00Z",
      "end": "2026-04-16T04:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "CWops",
      "rules_url": "https://cwops.org/cwops-tests/",
      "verified": true,
      "note": "",
      "exchange": "Members: name + CWops number. Non-members: name + state/province/DX prefix.",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "cwops-cwt-20260416T0300@contestcal",
      "start_date": "2026-04-16",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "cwops-cwt",
      "name": "CWops Test (CWT)",
      "start": "2026-04-16T07:00:00Z",
      "end": "2026-04-16T08:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "CWops",
      "rules_url": "https://cwops.org/cwops-tests/",
      "verified": true,
      "note": "",
      "exchange": "Members: name + CWops number. Non-members: name + state/province/DX prefix.",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "cwops-cwt-20260416T0700@contestcal",
      "start_date": "2026-04-16",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "nccc-ns-ft4",
      "name": "NCCC FT4 Sprint (FT4 NS)",
      "start": "2026-04-17T01:00:00Z",
      "end": "2026-04-17T01:30:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.5,
      "modes": [
        "FT8/FT4"
      ],
      "submodes": [
        "FT4"
      ],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "Northern California Contest Club (NCCC)",
      "rules_url": "https://www.ncccsprint.com/ft4ns.html",
      "verified": true,
      "note": "NCCC describes these as 'nominal rules' that may be modified on a weekly basis, and runs formal Ladder seasons interspersed with practice weeks. The 30-minute session slot itself is fixed.",
      "exchange": "Grid square (following NA VHF, WW Digi and ARRL IDC practice)",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "nccc-ns-ft4-20260417T0100@contestcal",
      "start_date": "2026-04-17",
      "mode_families": [
        "Digital",
        "FT8/FT4"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "nccc-ns-rtty",
      "name": "NCCC RTTY Sprint (RTTY NS)",
      "start": "2026-04-17T01:45:00Z",
      "end": "2026-04-17T02:15:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.5,
      "modes": [
        "RTTY"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m"
      ],
      "bands_note": "",
      "sponsor": "Northern California Contest Club (NCCC)",
      "rules_url": "https://ncccsprint.com/rttyns.html",
      "verified": true,
      "note": "NCCC describes these as 'nominal rules' that may be modified on a weekly basis, and runs formal Ladder seasons interspersed with practice weeks. The 30-minute session slot itself is fixed.",
      "exchange": "Serial number + name + QTH (both callsigns required in the exchange)",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "nccc-ns-rtty-20260417T0145@contestcal",
      "start_date": "2026-04-17",
      "mode_families": [
        "RTTY",
        "Digital"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "nccc-ns-cw",
      "name": "NCCC Sprint (NS)",
      "start": "2026-04-17T02:30:00Z",
      "end": "2026-04-17T03:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.5,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m"
      ],
      "bands_note": "",
      "sponsor": "Northern California Contest Club (NCCC)",
      "rules_url": "https://ncccsprint.com/rules.html",
      "verified": true,
      "note": "NCCC describes these as 'nominal rules' that may be modified on a weekly basis, and runs formal Ladder seasons interspersed with practice weeks. The 30-minute session slot itself is fixed.",
      "exchange": "Serial number + name + QTH (both callsigns required in the exchange)",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "nccc-ns-cw-20260417T0230@contestcal",
      "start_date": "2026-04-17",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "k1usn-sst",
      "name": "K1USN Slow Speed Test (SST)",
      "start": "2026-04-17T20:00:00Z",
      "end": "2026-04-17T21:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "",
      "sponsor": "K1USN Radio Club",
      "rules_url": "https://www.k1usn.com/sst_rules.html",
      "verified": true,
      "note": "No formal log submission -- participants post scores to 3830scores.com.",
      "exchange": "Name + state/province/DX country",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "k1usn-sst-20260417T2000@contestcal",
      "start_date": "2026-04-17",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "erau-es-open",
      "name": "ES Open HF Championship",
      "start": "2026-04-18T05:00:00Z",
      "end": "2026-04-18T08:59:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 3.98,
      "modes": [
        "CW",
        "SSB"
      ],
      "submodes": [],
      "bands": [
        "80m",
        "40m"
      ],
      "bands_note": "CW 3510-3560 and 7010-7040 kHz; SSB 3600-3650, 3700-3750 and 7060-7100, 7130-7175 kHz.",
      "sponsor": "ERAU",
      "rules_url": "https://erau.ee/images/LL/ES-Open_rules.pdf",
      "verified": true,
      "note": "The third Saturday of April 2026 is the 18th, which is the date the rules print and the date ERAU's own 2026 calendar carries. Everyone may enter, but only ES stations can work everyone; that asymmetry is recorded in the eligibility note rather than as two_sided, because two_sided would tell a station in an unlisted entity it cannot enter, which is false here.",
      "exchange": "RS(T) and a continuous serial number from 001.",
      "country": "EE",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-19",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": "2026-04-25T08:59:00Z",
      "uid": "erau-es-open-20260418T0500@contestcal",
      "start_date": "2026-04-18",
      "mode_families": [
        "CW",
        "SSB"
      ],
      "band_families": [
        "80m",
        "40m"
      ],
      "duration_bucket": "2-12"
    },
    {
      "contest_id": "paccdigi",
      "name": "PACCdigi Contest",
      "start": "2026-04-18T12:00:00Z",
      "end": "2026-04-19T11:59:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 23.98,
      "modes": [
        "RTTY",
        "FT8/FT4"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "",
      "sponsor": "VERON",
      "rules_url": "https://veron.nl/vereniging/commissies-en-werkgroepen/traffic-bureau/hf-contesten/paccdigi-contest/",
      "verified": true,
      "note": "MANUAL, DELIBERATELY: VERON publishes two dated editions and no recurrence rule -- unlike the PACC, whose page says 'het tweede volle weekend van februari' in so many words. Both published dates happen to be the third Saturday of April, but VERON never says so, so no ordinal is asserted and the record ends after 2027 rather than guessing. log_deadline_days is unset for the same reason as agcw-hnyc: 'voor 26 april 2026 23:59 UTC' is a fixed calendar instant, not an interval. It happens to be seven days after the end date, but VERON does not say seven days.",
      "exchange": "Dutch stations send a signal report (RST) + their two-letter province abbreviation; the rest of the world sends RST + a serial number starting at 001.",
      "country": "NL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-18",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "paccdigi-20260418T1200@contestcal",
      "start_date": "2026-04-18",
      "mode_families": [
        "RTTY",
        "Digital",
        "FT8/FT4"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "12-24"
    },
    {
      "contest_id": "mrasz-rfwd-hf",
      "name": "World Amateur Radio Day Contest HF (RF-WD RH)",
      "start": "2026-04-18T16:00:00Z",
      "end": "2026-04-18T16:59:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.98,
      "modes": [
        "CW",
        "SSB"
      ],
      "submodes": [],
      "bands": [
        "80m"
      ],
      "bands_note": "3510-3750 kHz.",
      "sponsor": "MRASZ",
      "rules_url": "https://mrasz.hu/radioforgalmi-versenyek/16-szakagak/radioforgalom-rh/321-amator-radiozas-vilagnapja-rf-wd-rh-versenykiiras",
      "verified": true,
      "note": "Held on World Amateur Radio Day itself, 18 April, whatever weekday that falls on -- a fixed date, not a weekend rule. The six ten-minute periods are a scoring device inside one continuous hour, so the record is one span.",
      "exchange": "RS(T) and the operator's age.",
      "country": "HU",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-19",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": "2026-04-21T16:59:00Z",
      "uid": "mrasz-rfwd-hf-20260418T1600@contestcal",
      "start_date": "2026-04-18",
      "mode_families": [
        "CW",
        "SSB"
      ],
      "band_families": [
        "80m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "arrl-rookie-roundup-ssb",
      "name": "ARRL Rookie Roundup, SSB",
      "start": "2026-04-19T18:00:00Z",
      "end": "2026-04-19T23:59:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 5.98,
      "modes": [
        "SSB"
      ],
      "submodes": [],
      "bands": [
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "",
      "sponsor": "ARRL",
      "rules_url": "http://www.arrl.org/rookie-roundup",
      "verified": true,
      "note": "",
      "exchange": "",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-21",
      "can_enter": true,
      "eligibility_scope": "entity_list",
      "eligibility_reason": "Entry limited to K, VE, XE -- includes K.",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "arrl-rookie-roundup-ssb-20260419T1800@contestcal",
      "start_date": "2026-04-19",
      "mode_families": [
        "SSB"
      ],
      "band_families": [
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "2-12"
    },
    {
      "contest_id": "k1usn-sst",
      "name": "K1USN Slow Speed Test (SST)",
      "start": "2026-04-20T00:00:00Z",
      "end": "2026-04-20T01:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "",
      "sponsor": "K1USN Radio Club",
      "rules_url": "https://www.k1usn.com/sst_rules.html",
      "verified": true,
      "note": "No formal log submission -- participants post scores to 3830scores.com.",
      "exchange": "Name + state/province/DX country",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "k1usn-sst-20260420T0000@contestcal",
      "start_date": "2026-04-20",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "agcw-zap-merit",
      "name": "AGCW ZAP Merit Contest (ZMC)",
      "start": "2026-04-20T17:40:00Z",
      "end": "2026-04-20T18:30:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.83,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "80m"
      ],
      "bands_note": "",
      "sponsor": "AGCW-DL",
      "rules_url": "https://www.agcw.de/contest/tzap/",
      "verified": false,
      "note": "PARTLY UNVERIFIED. The recurrence (every Monday), the 1740 UTC pre-logging opening and the 1800 UTC telegram transmission are all quoted from AGCW. AGCW publishes NO closing time. The 1830 end stored here is a PLACEHOLDER so the record expands -- it is not a sponsor fact and must not be presented as one. Confirm the session length with the ZMC manager before shipping. Points accumulate over a calendar year; logs are due 31 January of the following year.",
      "exchange": "Callsign + date + time + RST (SWLs log RST of both stations in a QSO)",
      "country": "DE",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-12",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "agcw-zap-merit-20260420T1740@contestcal",
      "start_date": "2026-04-20",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "80m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "nzart-sprint-cw",
      "name": "ZL Autumn and Winter Sprints, CW",
      "start": "2026-04-21T08:00:00Z",
      "end": "2026-04-21T08:29:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.48,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "80m"
      ],
      "bands_note": "Suggested frequencies CW 3520-3550 kHz",
      "sponsor": "NZART",
      "rules_url": "https://nzart.org.nz/activities/contests/sprints/",
      "verified": true,
      "note": "One of three back-to-back 29-minute sprints on the same evening, each in a different mode and each scored separately, which is why they are three records here rather than one. Logs are due 'within 24 hours of the end of the sprint' -- shorter than a day, so no deadline interval is computed; they go to markzl3ab@gmail.com.",
      "exchange": "RS(T) and the outside temperature to the nearest degree; on CW, 'm' denotes a minus sign",
      "country": "NZ",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-17",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "nzart-sprint-cw-20260421T0800@contestcal",
      "start_date": "2026-04-21",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "80m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "nzart-sprint-ssb",
      "name": "ZL Autumn and Winter Sprints, SSB",
      "start": "2026-04-21T08:30:00Z",
      "end": "2026-04-21T08:59:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.48,
      "modes": [
        "SSB"
      ],
      "submodes": [],
      "bands": [
        "80m"
      ],
      "bands_note": "Suggested frequencies SSB 3620-3670 kHz",
      "sponsor": "NZART",
      "rules_url": "https://nzart.org.nz/activities/contests/sprints/",
      "verified": true,
      "note": "One of three back-to-back 29-minute sprints on the same evening, each in a different mode and each scored separately, which is why they are three records here rather than one. Logs are due 'within 24 hours of the end of the sprint' -- shorter than a day, so no deadline interval is computed; they go to markzl3ab@gmail.com.",
      "exchange": "RS(T) and the outside temperature to the nearest degree",
      "country": "NZ",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-17",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "nzart-sprint-ssb-20260421T0830@contestcal",
      "start_date": "2026-04-21",
      "mode_families": [
        "SSB"
      ],
      "band_families": [
        "80m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "nzart-sprint-ft4",
      "name": "ZL Autumn and Winter Sprints, FT4",
      "start": "2026-04-21T09:00:00Z",
      "end": "2026-04-21T09:29:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.48,
      "modes": [
        "FT8/FT4"
      ],
      "submodes": [
        "FT4"
      ],
      "bands": [
        "80m"
      ],
      "bands_note": "Suggested frequency FT4 3575 kHz",
      "sponsor": "NZART",
      "rules_url": "https://nzart.org.nz/activities/contests/sprints/",
      "verified": true,
      "note": "One of three back-to-back 29-minute sprints on the same evening, each in a different mode and each scored separately, which is why they are three records here rather than one. Logs are due 'within 24 hours of the end of the sprint' -- shorter than a day, so no deadline interval is computed; they go to markzl3ab@gmail.com.",
      "exchange": "A four-digit Maidenhead grid-square locator",
      "country": "NZ",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-17",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "nzart-sprint-ft4-20260421T0900@contestcal",
      "start_date": "2026-04-21",
      "mode_families": [
        "Digital",
        "FT8/FT4"
      ],
      "band_families": [
        "80m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "skcc-sks",
      "name": "SKCC Straight Key Sprint (SKS)",
      "start": "2026-04-22T00:00:00Z",
      "end": "2026-04-22T02:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 2,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m",
        "6m"
      ],
      "bands_note": "Suggested frequencies, one per band",
      "sponsor": "Straight Key Century Club",
      "rules_url": "https://www.skccgroup.com/operating_activities/weekday_sprint/",
      "verified": true,
      "note": "",
      "exchange": "RST + QTH + name + SKCC number",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "skcc-sks-20260422T0000@contestcal",
      "start_date": "2026-04-22",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m",
        "6m"
      ],
      "duration_bucket": "2-12"
    },
    {
      "contest_id": "cwops-cwt",
      "name": "CWops Test (CWT)",
      "start": "2026-04-22T13:00:00Z",
      "end": "2026-04-22T14:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "CWops",
      "rules_url": "https://cwops.org/cwops-tests/",
      "verified": true,
      "note": "",
      "exchange": "Members: name + CWops number. Non-members: name + state/province/DX prefix.",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "cwops-cwt-20260422T1300@contestcal",
      "start_date": "2026-04-22",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "cwops-cwt",
      "name": "CWops Test (CWT)",
      "start": "2026-04-22T19:00:00Z",
      "end": "2026-04-22T20:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "CWops",
      "rules_url": "https://cwops.org/cwops-tests/",
      "verified": true,
      "note": "",
      "exchange": "Members: name + CWops number. Non-members: name + state/province/DX prefix.",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "cwops-cwt-20260422T1900@contestcal",
      "start_date": "2026-04-22",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "rsgb-80mcc-ssb",
      "name": "RSGB 3.5 MHz Club Championship, SSB",
      "start": "2026-04-22T19:00:00Z",
      "end": "2026-04-22T20:30:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1.5,
      "modes": [
        "SSB"
      ],
      "submodes": [],
      "bands": [
        "80m"
      ],
      "bands_note": "3600-3775 kHz.",
      "sponsor": "RSGB Contest Committee",
      "rules_url": "https://www.rsgbcc.org/hf/rules/2026/r80mcc.shtml",
      "verified": true,
      "note": "THE DATES ARE NOT ON THE RULES PAGE. RSGB publishes the rules at rules/2026/r80mcc.shtml and the eighteen legs on a separate CGI calendar, and the rules page links to it in so many words. This record holds what that calendar prints; nothing is derived.\n\nTHE CLOCK MOVES IN APRIL and the record says so per date: February and March run 2000-2130 UTC, April to July run 1900-2030. The record's default is the April-July clock because four of each mode's six legs use it, and the two early legs carry their own times. Same mechanism as the Autumn Series, and the second contest to need it.\n\nMANUAL BECAUSE THE LEGS FOLLOW NO ORDINAL. They fall on Mondays, Wednesdays and Thursdays with the weekday rotating through the series, which is exactly the shape an ordinal must not be fitted to.\n\nNON-UK STATIONS MAY ENTER AS INDIVIDUALS -- RSGB states it, which is worth noting beside the AFS and Club Calls contests where entry really is UK&CD only.",
      "exchange": "RS(T) plus a serial number starting at 1 and incrementing by 1.",
      "country": "GB",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-23",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": "2026-04-23T20:30:00Z",
      "uid": "rsgb-80mcc-ssb-20260422T1900@contestcal",
      "start_date": "2026-04-22",
      "mode_families": [
        "SSB"
      ],
      "band_families": [
        "80m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "cwops-cwt",
      "name": "CWops Test (CWT)",
      "start": "2026-04-23T03:00:00Z",
      "end": "2026-04-23T04:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "CWops",
      "rules_url": "https://cwops.org/cwops-tests/",
      "verified": true,
      "note": "",
      "exchange": "Members: name + CWops number. Non-members: name + state/province/DX prefix.",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "cwops-cwt-20260423T0300@contestcal",
      "start_date": "2026-04-23",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "cwops-cwt",
      "name": "CWops Test (CWT)",
      "start": "2026-04-23T07:00:00Z",
      "end": "2026-04-23T08:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "CWops",
      "rules_url": "https://cwops.org/cwops-tests/",
      "verified": true,
      "note": "",
      "exchange": "Members: name + CWops number. Non-members: name + state/province/DX prefix.",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "cwops-cwt-20260423T0700@contestcal",
      "start_date": "2026-04-23",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "nccc-ns-ft4",
      "name": "NCCC FT4 Sprint (FT4 NS)",
      "start": "2026-04-24T01:00:00Z",
      "end": "2026-04-24T01:30:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.5,
      "modes": [
        "FT8/FT4"
      ],
      "submodes": [
        "FT4"
      ],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "Northern California Contest Club (NCCC)",
      "rules_url": "https://www.ncccsprint.com/ft4ns.html",
      "verified": true,
      "note": "NCCC describes these as 'nominal rules' that may be modified on a weekly basis, and runs formal Ladder seasons interspersed with practice weeks. The 30-minute session slot itself is fixed.",
      "exchange": "Grid square (following NA VHF, WW Digi and ARRL IDC practice)",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "nccc-ns-ft4-20260424T0100@contestcal",
      "start_date": "2026-04-24",
      "mode_families": [
        "Digital",
        "FT8/FT4"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "nccc-ns-rtty",
      "name": "NCCC RTTY Sprint (RTTY NS)",
      "start": "2026-04-24T01:45:00Z",
      "end": "2026-04-24T02:15:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.5,
      "modes": [
        "RTTY"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m"
      ],
      "bands_note": "",
      "sponsor": "Northern California Contest Club (NCCC)",
      "rules_url": "https://ncccsprint.com/rttyns.html",
      "verified": true,
      "note": "NCCC describes these as 'nominal rules' that may be modified on a weekly basis, and runs formal Ladder seasons interspersed with practice weeks. The 30-minute session slot itself is fixed.",
      "exchange": "Serial number + name + QTH (both callsigns required in the exchange)",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "nccc-ns-rtty-20260424T0145@contestcal",
      "start_date": "2026-04-24",
      "mode_families": [
        "RTTY",
        "Digital"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "nccc-ns-cw",
      "name": "NCCC Sprint (NS)",
      "start": "2026-04-24T02:30:00Z",
      "end": "2026-04-24T03:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.5,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m"
      ],
      "bands_note": "",
      "sponsor": "Northern California Contest Club (NCCC)",
      "rules_url": "https://ncccsprint.com/rules.html",
      "verified": true,
      "note": "NCCC describes these as 'nominal rules' that may be modified on a weekly basis, and runs formal Ladder seasons interspersed with practice weeks. The 30-minute session slot itself is fixed.",
      "exchange": "Serial number + name + QTH (both callsigns required in the exchange)",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "nccc-ns-cw-20260424T0230@contestcal",
      "start_date": "2026-04-24",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "k1usn-sst",
      "name": "K1USN Slow Speed Test (SST)",
      "start": "2026-04-24T20:00:00Z",
      "end": "2026-04-24T21:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "",
      "sponsor": "K1USN Radio Club",
      "rules_url": "https://www.k1usn.com/sst_rules.html",
      "verified": true,
      "note": "No formal log submission -- participants post scores to 3830scores.com.",
      "exchange": "Name + state/province/DX country",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "k1usn-sst-20260424T2000@contestcal",
      "start_date": "2026-04-24",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "jarl-all-ja",
      "name": "ALL JA Contest",
      "start": "2026-04-25T12:00:00Z",
      "end": "2026-04-26T12:00:00Z",
      "start_wall": "2026-04-25T21:00:00",
      "end_wall": "2026-04-26T21:00:00",
      "local_rolling": false,
      "timezone": "Asia/Tokyo",
      "duration_hours": 24,
      "modes": [
        "CW",
        "SSB",
        "FM"
      ],
      "submodes": [
        "AM"
      ],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m",
        "6m"
      ],
      "bands_note": "1.9, 3.5, 7, 14, 21, 28 and 50 MHz. The phone all-band category excludes 14 MHz; CW may use it. JARL's 電話 covers AM, SSB and FM, and 電信 is CW.",
      "sponsor": "JARL",
      "rules_url": "https://www.jarl.org/Japanese/1_Tanoshimo/1-1_Contest/allja_rules.html",
      "verified": true,
      "note": "The rule is anchored on the LAST SUNDAY and counts backwards to the Saturday, which is how JARL writes it. Checked rather than assumed: that is the same date as 'the last full weekend of April' in every year, and always will be -- April's last Sunday falls on the 24th at the earliest, so the Saturday before it is never outside the month. JARL's wording is encoded because it is JARL's, not because it changes an answer. Contrast ACAG, where the equivalent choice moves the contest a full week in 2028 and 2029. Encoded as wall_clock in Asia/Tokyo because that is how JARL states it -- 21時00分（JST） -- rather than converted to a fixed UTC time by hand. Japan has not observed daylight saving since 1952, so the two are identical in practice and will stay so; the record says what the sponsor said and lets the engine do the arithmetic. log_deadline_days is absent. JARL prints a dated deadline above the rules for the edition in hand -- ALL JA 2026 is '提出締切日 2026年5月6日（水）必着' -- and the numbered 規約 clauses that follow state the dates, eligibility, bands, categories and exchange but no submission span. All four of JARL's 2026 deadlines happen to fall exactly ten days after their contest ends, which is suggestive and is not a rule JARL wrote. The same reasoning already keeps a deadline off JARL's All Asian records.",
      "exchange": "RST, the prefecture or region number for where you are operating, and one letter for power -- H above 100 W, M to 100 W, L to 10 W (20 W on 50 MHz), P at 5 W or less. Tokyo at 10 watts on phone sends 5910L.",
      "country": "JP",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-19",
      "can_enter": false,
      "eligibility_scope": "entity_list",
      "eligibility_reason": "Entry limited to JA. K stations may be worked but cannot submit an entry.",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "jarl-all-ja-20260425T1200@contestcal",
      "start_date": "2026-04-25",
      "mode_families": [
        "CW",
        "SSB",
        "FM"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m",
        "6m"
      ],
      "duration_bucket": "gte24"
    },
    {
      "contest_id": "arsi-vu-rookie",
      "name": "ARSI VU Rookie Contest",
      "start": "2026-04-25T12:00:00Z",
      "end": "2026-04-26T11:59:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 23.98,
      "modes": [
        "SSB"
      ],
      "submodes": [],
      "bands": [
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "",
      "sponsor": "ARSI",
      "rules_url": "https://arsi.info/arsi-vu-rookie-contest/",
      "verified": true,
      "note": "A rookie is defined by licence age rather than by operator age -- first licence less than five years old -- and non-rookies are invited to work them. ARSI PUBLISHES DATES, NOT A RECURRENCE. Every one of its contest pages opens with the year's dates and states no rule anywhere -- no 'annually on', no ordinal weekend. So all five records are manual and hold exactly the 2026 editions ARSI published. Fitting an ordinal to one date would be inventing a rule ARSI has not written, and Asia is thin enough that the temptation is worth naming.",
      "exchange": "",
      "country": "IN",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-19",
      "can_enter": false,
      "eligibility_scope": "entity_list",
      "eligibility_reason": "Entry limited to VU. K stations may be worked but cannot submit an entry.",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "arsi-vu-rookie-20260425T1200@contestcal",
      "start_date": "2026-04-25",
      "mode_families": [
        "SSB"
      ],
      "band_families": [
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "12-24"
    },
    {
      "contest_id": "sp-dx-rtty",
      "name": "SP DX RTTY Contest",
      "start": "2026-04-25T12:00:00Z",
      "end": "2026-04-26T12:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 24,
      "modes": [
        "RTTY"
      ],
      "submodes": [],
      "bands": [
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "3.5-28 MHz, WARC bands excluded",
      "sponsor": "PK RVG",
      "rules_url": "https://pkrvg.org/strona,spdxrttyen.html",
      "verified": true,
      "note": "REGISTRY CORRECTION: this contest belongs to PK RVG (the Polish Radiovideography Club), not to the SP DX Club that runs the SP DX Contest. The sources registry previously grouped both under 'PZK / SP DX Club'. PZK is named as a co-sponsor ('Sponsored by PZK,PKRVG') but the organiser named in the rules is PK RVG.",
      "exchange": "Foreign stations send RST + a QSO number (599001); Polish stations send RST + the two letters denoting their poviat.",
      "country": "PL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-18",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": "2026-05-03T12:00:00Z",
      "uid": "sp-dx-rtty-20260425T1200@contestcal",
      "start_date": "2026-04-25",
      "mode_families": [
        "RTTY",
        "Digital"
      ],
      "band_families": [
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "gte24"
    },
    {
      "contest_id": "ukei-dx-cw",
      "name": "UK/EI DX Contest, CW",
      "start": "2026-04-25T12:00:00Z",
      "end": "2026-04-26T12:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 24,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "3.5, 7, 14, 21 and 28 MHz.",
      "sponsor": "UK/EI Contest Club",
      "rules_url": "https://www.ukeicc.com/dx-contest-rules.php",
      "verified": true,
      "note": "MANUAL, AND THE SSB LEG IS WHY BOTH ARE. UKEICC publishes three years of dates and states no recurrence anywhere: CW on 26 Apr 2025, 25 Apr 2026 and 24 Apr 2027; SSB on 1 Nov 2025, 31 Oct 2026 and 23 Oct 2027.\n\nThe CW dates happen to be the last Saturday of April in all three years. The SSB dates fit nothing at all -- the FIRST Saturday of November, then the FIFTH Saturday of October, then the FOURTH -- not even the same month twice running. So this organiser demonstrably does not schedule by ordinal, which is the strongest possible argument against fitting one to the CW leg because three years happen to agree. Both legs hold exactly the dates UKEICC printed and produce nothing for 2028 until it publishes them.\n\nFOUND THROUGH RSGB'S HF CHAMPIONSHIP TABLE, which lists the eleven contests that count towards it. That page is an award over other contests rather than a contest itself -- the same call already made about the WIA Contest Champion -- but it is an excellent index of what RSGB's season actually contains, and both UK/EI legs were on it.",
      "exchange": "RS(T) and a serial number from 1. Stations in the UK and Ireland add their two-character UK/EI District Code.",
      "country": "GB",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-23",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": "2026-04-27T12:00:00Z",
      "uid": "ukei-dx-cw-20260425T1200@contestcal",
      "start_date": "2026-04-25",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "gte24"
    },
    {
      "contest_id": "uska-helvetia",
      "name": "Helvetia Contest",
      "start": "2026-04-25T13:00:00Z",
      "end": "2026-04-26T12:59:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 23.98,
      "modes": [
        "CW",
        "SSB",
        "RTTY",
        "Digital",
        "FT8/FT4"
      ],
      "submodes": [
        "PSK31",
        "PSK63"
      ],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "",
      "sponsor": "USKA",
      "rules_url": "https://uska.ch/download/reglement-fuer-den-helvetia-wettbewerb-maerz-2026-de/",
      "verified": true,
      "note": "The last full weekend of April, encoded as n=-1: April 2026 has full weekends on the 4th/5th, 11th/12th, 18th/19th and 25th/26th, so the rule gives 25-26 April, which is what USKA's own KW-Contest page prints. USKA also prints 24-25 April 2027 there, and the rule reproduces that too. Operators must take a six-hour rest in at most two periods; the record carries the full 24-hour window because that is when the contest is on air.",
      "exchange": "Swiss stations send RS(T) and their canton abbreviation (59 ZH, 599 ZH); stations outside Switzerland send RS(T) and a serial number of at least three digits.",
      "country": "CH",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-19",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": "2026-05-04T12:59:00Z",
      "uid": "uska-helvetia-20260425T1300@contestcal",
      "start_date": "2026-04-25",
      "mode_families": [
        "CW",
        "SSB",
        "RTTY",
        "Digital",
        "FT8/FT4"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "12-24"
    },
    {
      "contest_id": "sarl-club-40m",
      "name": "SARL Saturday 40 m Club Contest",
      "start": "2026-04-25T15:00:00Z",
      "end": "2026-04-25T16:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "SSB",
        "CW",
        "RTTY"
      ],
      "submodes": [],
      "bands": [
        "40m"
      ],
      "bands_note": "Phone 7 063-7 100 and 7 130-7 200 kHz; CW 7 000-7 040 kHz; RTTY 7 040-7 060 kHz. The segment 7 101-7 129 kHz is contest free.",
      "sponsor": "SARL",
      "rules_url": "https://mysarl.org.za/wp-content/uploads/2025/12/2026-SARL-Contest-Manual-Version-1.1-2025-12-15.pdf",
      "verified": true,
      "note": "A club championship rather than an individual contest: operators' scores are added into a club total. The month list is SARL's own -- these run in four months of the year, not every month -- which is what monthly_nth_weekday's `months` field exists for. log_format and log_deadline_days are absent: this pass read each contest's Aim, Dates, Frequencies and Exchange sections and did not read its Log Sheets section, so neither is recorded rather than assumed from SARL's other contests.\n\nPROVENANCE RESTORED 2026-08-23. This record carried verified: true with an EMPTY source_note -- one of three the 2026-08-21 rule audit found, and a stricter defect than the thin ARRL notes beside them: an empty string is not weak evidence, it is none, and there was nothing in the record to check a rule against. The rule, the times, the bands and the exchange were all correct; only the evidence for them was missing. Re-read from the manual and quoted above, and SARL's own printed 2026 dates reproduce it.",
      "exchange": "Your name, your Abbreviated Club Callsign and your 4-character grid square (for example KG30).",
      "country": "ZA",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-23",
      "can_enter": false,
      "eligibility_scope": "entity_list",
      "eligibility_reason": "Entry limited to ZS. K stations may be worked but cannot submit an entry.",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "sarl-club-40m-20260425T1500@contestcal",
      "start_date": "2026-04-25",
      "mode_families": [
        "CW",
        "SSB",
        "RTTY",
        "Digital"
      ],
      "band_families": [
        "40m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "florida-qso-party",
      "name": "Florida QSO Party",
      "start": "2026-04-25T16:00:00Z",
      "end": "2026-04-26T01:59:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 9.98,
      "modes": [
        "SSB",
        "CW"
      ],
      "submodes": [],
      "bands": [
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "No 160 or 80 metres, no WARC bands and no VHF.",
      "sponsor": "Florida Contest Group",
      "rules_url": "https://www.floridaqsoparty.org/rules/",
      "verified": true,
      "note": "LAST SATURDAY, NOT LAST FULL WEEKEND -- the sponsor's own words are 'Starts the last Saturday of April', and the two readings diverge whenever 30 April is a Saturday. 2026 does not test it: the last Saturday is the 25th and the last full weekend is the same weekend. 2033 is the next year that separates them.\n\nTWO SESSIONS WITH A NIGHT BETWEEN THEM, which is why this record uses the sessions array: 1600Z Saturday to 0159Z Sunday, then 1200Z to 2159Z on the Sunday. A single block would put the contest on the air through a night it does not run.\n\nAND IT IS NOT A DIGITAL CONTEST. 'No digital QSOs are allowed in the FQP' -- worth stating because most state parties do allow them, and because an operator filtering for FT8 should not find this.",
      "exchange": "Florida stations send RS(T) and their county. Everyone else sends RS(T) and their state, Canadian province, or DXCC prefix.",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-21",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": "2026-05-06T01:59:00Z",
      "uid": "florida-qso-party-20260425T1600@contestcal",
      "start_date": "2026-04-25",
      "mode_families": [
        "CW",
        "SSB"
      ],
      "band_families": [
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "2-12"
    },
    {
      "contest_id": "florida-qso-party",
      "name": "Florida QSO Party",
      "start": "2026-04-26T12:00:00Z",
      "end": "2026-04-26T21:59:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 9.98,
      "modes": [
        "SSB",
        "CW"
      ],
      "submodes": [],
      "bands": [
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "No 160 or 80 metres, no WARC bands and no VHF.",
      "sponsor": "Florida Contest Group",
      "rules_url": "https://www.floridaqsoparty.org/rules/",
      "verified": true,
      "note": "LAST SATURDAY, NOT LAST FULL WEEKEND -- the sponsor's own words are 'Starts the last Saturday of April', and the two readings diverge whenever 30 April is a Saturday. 2026 does not test it: the last Saturday is the 25th and the last full weekend is the same weekend. 2033 is the next year that separates them.\n\nTWO SESSIONS WITH A NIGHT BETWEEN THEM, which is why this record uses the sessions array: 1600Z Saturday to 0159Z Sunday, then 1200Z to 2159Z on the Sunday. A single block would put the contest on the air through a night it does not run.\n\nAND IT IS NOT A DIGITAL CONTEST. 'No digital QSOs are allowed in the FQP' -- worth stating because most state parties do allow them, and because an operator filtering for FT8 should not find this.",
      "exchange": "Florida stations send RS(T) and their county. Everyone else sends RS(T) and their state, Canadian province, or DXCC prefix.",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-21",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": "2026-05-06T21:59:00Z",
      "uid": "florida-qso-party-20260426T1200@contestcal",
      "start_date": "2026-04-26",
      "mode_families": [
        "CW",
        "SSB"
      ],
      "band_families": [
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "2-12"
    },
    {
      "contest_id": "bartg-sprint75",
      "name": "BARTG Sprint75 Contest",
      "start": "2026-04-26T17:00:00Z",
      "end": "2026-04-26T20:59:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 3.98,
      "modes": [
        "RTTY"
      ],
      "submodes": [
        "RTTY 75 baud"
      ],
      "bands": [
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "",
      "sponsor": "BARTG",
      "rules_url": "https://bartg.org.uk/bartg-sprint75-contests/",
      "verified": true,
      "note": "'Fourth Sunday', not 'last Sunday': 2028 and 2029 both have five April Sundays and BARTG lists the fourth in each. Also note this is 75 baud RTTY, not the usual 45.45 baud.",
      "exchange": "Message number only (3 or 4 figures from 001)",
      "country": "GB",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-12",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": "2026-05-03T20:59:00Z",
      "uid": "bartg-sprint75-20260426T1700@contestcal",
      "start_date": "2026-04-26",
      "mode_families": [
        "RTTY",
        "Digital"
      ],
      "band_families": [
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "2-12"
    },
    {
      "contest_id": "k1usn-sst",
      "name": "K1USN Slow Speed Test (SST)",
      "start": "2026-04-27T00:00:00Z",
      "end": "2026-04-27T01:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "",
      "sponsor": "K1USN Radio Club",
      "rules_url": "https://www.k1usn.com/sst_rules.html",
      "verified": true,
      "note": "No formal log submission -- participants post scores to 3830scores.com.",
      "exchange": "Name + state/province/DX country",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "k1usn-sst-20260427T0000@contestcal",
      "start_date": "2026-04-27",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "agcw-zap-merit",
      "name": "AGCW ZAP Merit Contest (ZMC)",
      "start": "2026-04-27T17:40:00Z",
      "end": "2026-04-27T18:30:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.83,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "80m"
      ],
      "bands_note": "",
      "sponsor": "AGCW-DL",
      "rules_url": "https://www.agcw.de/contest/tzap/",
      "verified": false,
      "note": "PARTLY UNVERIFIED. The recurrence (every Monday), the 1740 UTC pre-logging opening and the 1800 UTC telegram transmission are all quoted from AGCW. AGCW publishes NO closing time. The 1830 end stored here is a PLACEHOLDER so the record expands -- it is not a sponsor fact and must not be presented as one. Confirm the session length with the ZMC manager before shipping. Points accumulate over a calendar year; logs are due 31 January of the following year.",
      "exchange": "Callsign + date + time + RST (SWLs log RST of both stations in a QSO)",
      "country": "DE",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-12",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "agcw-zap-merit-20260427T1740@contestcal",
      "start_date": "2026-04-27",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "80m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "rsgb-ft4-series",
      "name": "RSGB FT4 Contest Series",
      "start": "2026-04-27T19:00:00Z",
      "end": "2026-04-27T21:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 2,
      "modes": [
        "FT8/FT4"
      ],
      "submodes": [
        "FT4"
      ],
      "bands": [
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "80, 40, 20, 15 and 10 m.",
      "sponsor": "RSGB Contest Committee",
      "rules_url": "https://www.rsgbcc.org/hf/rules/2026/r80m_ft4.shtml",
      "verified": true,
      "note": "TWELVE MONDAY EVENINGS AND THE CLOCK SHIFTS FOR THE SUMMER: January to March and October to December run 2000-2200 UTC, April to September run 1900-2100. Six legs each way, so the record's default is the winter clock and the summer legs carry their own -- the third contest to need per-date times, after the Autumn Series and the 80m Club Championship.\n\nMANUAL BECAUSE THE DATES ARE NOT ON THE RULES PAGE and follow no ordinal: they are Mondays, but the third Monday in January, the fourth in February, the third in March. RSGB publishes them on its CGI calendar and this record holds what that prints.\n\nNot the same contest as the FT4 International Activity Day in April, which is 24 hours and has its own rules page.",
      "exchange": "A signal report. A serial number is not required.",
      "country": "GB",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-23",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": "2026-04-28T21:00:00Z",
      "uid": "rsgb-ft4-series-20260427T1900@contestcal",
      "start_date": "2026-04-27",
      "mode_families": [
        "Digital",
        "FT8/FT4"
      ],
      "band_families": [
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "2-12"
    },
    {
      "contest_id": "nzart-sprint-cw",
      "name": "ZL Autumn and Winter Sprints, CW",
      "start": "2026-04-28T08:00:00Z",
      "end": "2026-04-28T08:29:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.48,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "80m"
      ],
      "bands_note": "Suggested frequencies CW 3520-3550 kHz",
      "sponsor": "NZART",
      "rules_url": "https://nzart.org.nz/activities/contests/sprints/",
      "verified": true,
      "note": "One of three back-to-back 29-minute sprints on the same evening, each in a different mode and each scored separately, which is why they are three records here rather than one. Logs are due 'within 24 hours of the end of the sprint' -- shorter than a day, so no deadline interval is computed; they go to markzl3ab@gmail.com.",
      "exchange": "RS(T) and the outside temperature to the nearest degree; on CW, 'm' denotes a minus sign",
      "country": "NZ",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-17",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "nzart-sprint-cw-20260428T0800@contestcal",
      "start_date": "2026-04-28",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "80m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "nzart-sprint-ssb",
      "name": "ZL Autumn and Winter Sprints, SSB",
      "start": "2026-04-28T08:30:00Z",
      "end": "2026-04-28T08:59:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.48,
      "modes": [
        "SSB"
      ],
      "submodes": [],
      "bands": [
        "80m"
      ],
      "bands_note": "Suggested frequencies SSB 3620-3670 kHz",
      "sponsor": "NZART",
      "rules_url": "https://nzart.org.nz/activities/contests/sprints/",
      "verified": true,
      "note": "One of three back-to-back 29-minute sprints on the same evening, each in a different mode and each scored separately, which is why they are three records here rather than one. Logs are due 'within 24 hours of the end of the sprint' -- shorter than a day, so no deadline interval is computed; they go to markzl3ab@gmail.com.",
      "exchange": "RS(T) and the outside temperature to the nearest degree",
      "country": "NZ",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-17",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "nzart-sprint-ssb-20260428T0830@contestcal",
      "start_date": "2026-04-28",
      "mode_families": [
        "SSB"
      ],
      "band_families": [
        "80m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "nzart-sprint-ft4",
      "name": "ZL Autumn and Winter Sprints, FT4",
      "start": "2026-04-28T09:00:00Z",
      "end": "2026-04-28T09:29:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.48,
      "modes": [
        "FT8/FT4"
      ],
      "submodes": [
        "FT4"
      ],
      "bands": [
        "80m"
      ],
      "bands_note": "Suggested frequency FT4 3575 kHz",
      "sponsor": "NZART",
      "rules_url": "https://nzart.org.nz/activities/contests/sprints/",
      "verified": true,
      "note": "One of three back-to-back 29-minute sprints on the same evening, each in a different mode and each scored separately, which is why they are three records here rather than one. Logs are due 'within 24 hours of the end of the sprint' -- shorter than a day, so no deadline interval is computed; they go to markzl3ab@gmail.com.",
      "exchange": "A four-digit Maidenhead grid-square locator",
      "country": "NZ",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-17",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "nzart-sprint-ft4-20260428T0900@contestcal",
      "start_date": "2026-04-28",
      "mode_families": [
        "Digital",
        "FT8/FT4"
      ],
      "band_families": [
        "80m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "cwops-cwt",
      "name": "CWops Test (CWT)",
      "start": "2026-04-29T13:00:00Z",
      "end": "2026-04-29T14:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "CWops",
      "rules_url": "https://cwops.org/cwops-tests/",
      "verified": true,
      "note": "",
      "exchange": "Members: name + CWops number. Non-members: name + state/province/DX prefix.",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "cwops-cwt-20260429T1300@contestcal",
      "start_date": "2026-04-29",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "cwops-cwt",
      "name": "CWops Test (CWT)",
      "start": "2026-04-29T19:00:00Z",
      "end": "2026-04-29T20:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "CWops",
      "rules_url": "https://cwops.org/cwops-tests/",
      "verified": true,
      "note": "",
      "exchange": "Members: name + CWops number. Non-members: name + state/province/DX prefix.",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "cwops-cwt-20260429T1900@contestcal",
      "start_date": "2026-04-29",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "cwops-cwt",
      "name": "CWops Test (CWT)",
      "start": "2026-04-30T03:00:00Z",
      "end": "2026-04-30T04:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "CWops",
      "rules_url": "https://cwops.org/cwops-tests/",
      "verified": true,
      "note": "",
      "exchange": "Members: name + CWops number. Non-members: name + state/province/DX prefix.",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "cwops-cwt-20260430T0300@contestcal",
      "start_date": "2026-04-30",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "cwops-cwt",
      "name": "CWops Test (CWT)",
      "start": "2026-04-30T07:00:00Z",
      "end": "2026-04-30T08:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "CWops",
      "rules_url": "https://cwops.org/cwops-tests/",
      "verified": true,
      "note": "",
      "exchange": "Members: name + CWops number. Non-members: name + state/province/DX prefix.",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "cwops-cwt-20260430T0700@contestcal",
      "start_date": "2026-04-30",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "rsgb-80mcc-data",
      "name": "RSGB 3.5 MHz Club Championship, Data",
      "start": "2026-04-30T19:00:00Z",
      "end": "2026-04-30T20:30:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1.5,
      "modes": [
        "RTTY",
        "Digital"
      ],
      "submodes": [
        "PSK63"
      ],
      "bands": [
        "80m"
      ],
      "bands_note": "PSK63 3580-3590 kHz; RTTY 3590-3620 kHz.",
      "sponsor": "RSGB Contest Committee",
      "rules_url": "https://www.rsgbcc.org/hf/rules/2026/r80mcc.shtml",
      "verified": true,
      "note": "THE DATES ARE NOT ON THE RULES PAGE. RSGB publishes the rules at rules/2026/r80mcc.shtml and the eighteen legs on a separate CGI calendar, and the rules page links to it in so many words. This record holds what that calendar prints; nothing is derived.\n\nTHE CLOCK MOVES IN APRIL and the record says so per date: February and March run 2000-2130 UTC, April to July run 1900-2030. The record's default is the April-July clock because four of each mode's six legs use it, and the two early legs carry their own times. Same mechanism as the Autumn Series, and the second contest to need it.\n\nMANUAL BECAUSE THE LEGS FOLLOW NO ORDINAL. They fall on Mondays, Wednesdays and Thursdays with the weekday rotating through the series, which is exactly the shape an ordinal must not be fitted to.\n\nNON-UK STATIONS MAY ENTER AS INDIVIDUALS -- RSGB states it, which is worth noting beside the AFS and Club Calls contests where entry really is UK&CD only.",
      "exchange": "RS(T) plus a serial number starting at 1 and incrementing by 1.",
      "country": "GB",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-23",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": "2026-05-01T20:30:00Z",
      "uid": "rsgb-80mcc-data-20260430T1900@contestcal",
      "start_date": "2026-04-30",
      "mode_families": [
        "RTTY",
        "Digital"
      ],
      "band_families": [
        "80m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "nccc-ns-ft4",
      "name": "NCCC FT4 Sprint (FT4 NS)",
      "start": "2026-05-01T01:00:00Z",
      "end": "2026-05-01T01:30:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.5,
      "modes": [
        "FT8/FT4"
      ],
      "submodes": [
        "FT4"
      ],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "Northern California Contest Club (NCCC)",
      "rules_url": "https://www.ncccsprint.com/ft4ns.html",
      "verified": true,
      "note": "NCCC describes these as 'nominal rules' that may be modified on a weekly basis, and runs formal Ladder seasons interspersed with practice weeks. The 30-minute session slot itself is fixed.",
      "exchange": "Grid square (following NA VHF, WW Digi and ARRL IDC practice)",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "nccc-ns-ft4-20260501T0100@contestcal",
      "start_date": "2026-05-01",
      "mode_families": [
        "Digital",
        "FT8/FT4"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "nccc-ns-rtty",
      "name": "NCCC RTTY Sprint (RTTY NS)",
      "start": "2026-05-01T01:45:00Z",
      "end": "2026-05-01T02:15:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.5,
      "modes": [
        "RTTY"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m"
      ],
      "bands_note": "",
      "sponsor": "Northern California Contest Club (NCCC)",
      "rules_url": "https://ncccsprint.com/rttyns.html",
      "verified": true,
      "note": "NCCC describes these as 'nominal rules' that may be modified on a weekly basis, and runs formal Ladder seasons interspersed with practice weeks. The 30-minute session slot itself is fixed.",
      "exchange": "Serial number + name + QTH (both callsigns required in the exchange)",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "nccc-ns-rtty-20260501T0145@contestcal",
      "start_date": "2026-05-01",
      "mode_families": [
        "RTTY",
        "Digital"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "nccc-ns-cw",
      "name": "NCCC Sprint (NS)",
      "start": "2026-05-01T02:30:00Z",
      "end": "2026-05-01T03:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.5,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m"
      ],
      "bands_note": "",
      "sponsor": "Northern California Contest Club (NCCC)",
      "rules_url": "https://ncccsprint.com/rules.html",
      "verified": true,
      "note": "NCCC describes these as 'nominal rules' that may be modified on a weekly basis, and runs formal Ladder seasons interspersed with practice weeks. The 30-minute session slot itself is fixed.",
      "exchange": "Serial number + name + QTH (both callsigns required in the exchange)",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "nccc-ns-cw-20260501T0230@contestcal",
      "start_date": "2026-05-01",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "oevsv-aoee-80-40",
      "name": "All Austrian Exercise AOEE 80/40m",
      "start": "2026-05-01T05:00:00Z",
      "end": "2026-05-01T08:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 3,
      "modes": [
        "CW",
        "SSB"
      ],
      "submodes": [],
      "bands": [
        "80m",
        "40m"
      ],
      "bands_note": "CW 3.510-3.560 and 7.000-7.040 MHz; SSB 3.600-3.650 and 3.700-3.800 MHz, 7.060-7.100 and 7.130-7.200 MHz.",
      "sponsor": "ÖVSV",
      "rules_url": "https://www.oevsv.at/export/shared/.content/.galleries/Downloads_Referate/HF-Referat-Downloads/Regeln_AOEE_8040_2026.pdf",
      "verified": true,
      "note": "An emergency-communications exercise run as a contest, on a fixed calendar date rather than a weekend rule. Two periods with six hours between them, encoded as sessions. The log deadline is a stated instant -- 8 May 2026, 23:59 CEST -- and not an interval from the end of the contest (the second period ends 17:00 UTC, and seven days later is 19:00 CEST), so it is recorded here rather than as log_deadline_days.",
      "exchange": "RS(T) and the Austrian Bezirkskenner (district identifier).",
      "country": "AT",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-19",
      "can_enter": false,
      "eligibility_scope": "entity_list",
      "eligibility_reason": "Entry limited to OE. K stations may be worked but cannot submit an entry.",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "oevsv-aoee-80-40-20260501T0500@contestcal",
      "start_date": "2026-05-01",
      "mode_families": [
        "CW",
        "SSB"
      ],
      "band_families": [
        "80m",
        "40m"
      ],
      "duration_bucket": "2-12"
    },
    {
      "contest_id": "agcw-qrp-qrp-party",
      "name": "AGCW QRP/QRP Party",
      "start": "2026-05-01T13:00:00Z",
      "end": "2026-05-01T19:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 6,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "",
      "sponsor": "AGCW-DL",
      "rules_url": "https://www.agcw.de/contest/qrp-qrp/",
      "verified": true,
      "note": "",
      "exchange": "RST + running number + class",
      "country": "DE",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-12",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "agcw-qrp-qrp-party-20260501T1300@contestcal",
      "start_date": "2026-05-01",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "2-12"
    },
    {
      "contest_id": "oevsv-aoee-80-40",
      "name": "All Austrian Exercise AOEE 80/40m",
      "start": "2026-05-01T14:00:00Z",
      "end": "2026-05-01T17:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 3,
      "modes": [
        "CW",
        "SSB"
      ],
      "submodes": [],
      "bands": [
        "80m",
        "40m"
      ],
      "bands_note": "CW 3.510-3.560 and 7.000-7.040 MHz; SSB 3.600-3.650 and 3.700-3.800 MHz, 7.060-7.100 and 7.130-7.200 MHz.",
      "sponsor": "ÖVSV",
      "rules_url": "https://www.oevsv.at/export/shared/.content/.galleries/Downloads_Referate/HF-Referat-Downloads/Regeln_AOEE_8040_2026.pdf",
      "verified": true,
      "note": "An emergency-communications exercise run as a contest, on a fixed calendar date rather than a weekend rule. Two periods with six hours between them, encoded as sessions. The log deadline is a stated instant -- 8 May 2026, 23:59 CEST -- and not an interval from the end of the contest (the second period ends 17:00 UTC, and seven days later is 19:00 CEST), so it is recorded here rather than as log_deadline_days.",
      "exchange": "RS(T) and the Austrian Bezirkskenner (district identifier).",
      "country": "AT",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-19",
      "can_enter": false,
      "eligibility_scope": "entity_list",
      "eligibility_reason": "Entry limited to OE. K stations may be worked but cannot submit an entry.",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "oevsv-aoee-80-40-20260501T1400@contestcal",
      "start_date": "2026-05-01",
      "mode_families": [
        "CW",
        "SSB"
      ],
      "band_families": [
        "80m",
        "40m"
      ],
      "duration_bucket": "2-12"
    },
    {
      "contest_id": "k1usn-sst",
      "name": "K1USN Slow Speed Test (SST)",
      "start": "2026-05-01T20:00:00Z",
      "end": "2026-05-01T21:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "",
      "sponsor": "K1USN Radio Club",
      "rules_url": "https://www.k1usn.com/sst_rules.html",
      "verified": true,
      "note": "No formal log submission -- participants post scores to 3830scores.com.",
      "exchange": "Name + state/province/DX country",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "k1usn-sst-20260501T2000@contestcal",
      "start_date": "2026-05-01",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "erau-es-ll-kv",
      "name": "Estonian HF Cup (ES LL KV)",
      "start": "2026-05-02T07:00:00Z",
      "end": "2026-05-02T07:59:00Z",
      "start_wall": "2026-05-02T10:00:00",
      "end_wall": "2026-05-02T10:59:00",
      "local_rolling": false,
      "timezone": "Europe/Tallinn",
      "duration_hours": 0.98,
      "modes": [
        "CW",
        "SSB"
      ],
      "submodes": [],
      "bands": [
        "80m"
      ],
      "bands_note": "CW below 3600 kHz and SSB above it; 3530-3560 kHz and 3600-3650 kHz are recommended.",
      "sponsor": "ERAU",
      "rules_url": "https://www.erau.ee/images/LL/ES%20LL%20KV%20reeglid.pdf",
      "verified": true,
      "note": "SPONSOR-ANCHORED LOCAL TIME, and ERAU's own calendar proves the reading: 10:00-10:59 Estonian time is 08:00-08:59 UTC in winter (EET) and 07:00-07:59 in summer (EEST), which is exactly the split ERAU prints across the nine stages. The rules give no date rule at all -- 4.2 defers to the calendar plan -- so the dates are manual and taken from ERAU's published 2026 calendar. Eight of the nine are the first Saturday of their month; February's is the second. The log deadline is 'the Thursday of the following week', which is not a fixed number of days from the end of each stage, so it is recorded here rather than as log_deadline_days. Stages 4.3 also splits each hour into four periods; that is a scoring device inside one continuous hour.",
      "exchange": "RS(T) and a continuous serial number from 001.",
      "country": "EE",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-19",
      "can_enter": false,
      "eligibility_scope": "entity_list",
      "eligibility_reason": "Entry limited to ES. K stations may be worked but cannot submit an entry.",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "erau-es-ll-kv-20260502T0700@contestcal",
      "start_date": "2026-05-02",
      "mode_families": [
        "CW",
        "SSB"
      ],
      "band_families": [
        "80m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "wia-harry-angel-sprint",
      "name": "Harry Angel Memorial Sprint",
      "start": "2026-05-02T10:00:00Z",
      "end": "2026-05-02T11:46:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1.77,
      "modes": [
        "SSB",
        "CW"
      ],
      "submodes": [],
      "bands": [
        "80m"
      ],
      "bands_note": "CW 3500 - 3535 kHz. Phone 3535 - 3700 kHz",
      "sponsor": "WIA",
      "rules_url": "https://www.wia.org.au/members/contests/harryangel/",
      "verified": true,
      "note": "106 minutes, one for each year of Harry Angel's life. WIA's page also prints 'This would make the next Saturday May 3rd May 2027' -- May 3 2027 is a Monday, and the first Saturday in May 2027 is May 1. This calendar follows the rule WIA states three times on the same page, not that sentence.",
      "exchange": "Callsign, RS(T) and a serial number starting at 001",
      "country": "AU",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-17",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "wia-harry-angel-sprint-20260502T1000@contestcal",
      "start_date": "2026-05-02",
      "mode_families": [
        "CW",
        "SSB"
      ],
      "band_families": [
        "80m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "ari-international-dx",
      "name": "ARI International DX Contest",
      "start": "2026-05-02T12:00:00Z",
      "end": "2026-05-03T11:59:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 23.98,
      "modes": [
        "CW",
        "SSB",
        "RTTY"
      ],
      "submodes": [],
      "bands": [
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "10 m through 80 m, WARC bands excluded",
      "sponsor": "ARI",
      "rules_url": "https://contest.ari.it/hf_web/rules/aridxrule_dx.pdf",
      "verified": true,
      "note": "The rules PDF is the sponsor's own; ari.it/contest-hf/ari-international.html carries results rather than rules, and ARI's contest calendar page is an aggregator listing other sponsors' events, so neither was used as a source for anything beyond ARI's own contests.",
      "exchange": "Italian stations send RS(T) + their two-letter province code; all other stations send RS(T) + a serial number starting from 001.",
      "country": "IT",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-18",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": "2026-05-09T11:59:00Z",
      "uid": "ari-international-dx-20260502T1200@contestcal",
      "start_date": "2026-05-02",
      "mode_families": [
        "CW",
        "SSB",
        "RTTY",
        "Digital"
      ],
      "band_families": [
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "12-24"
    },
    {
      "contest_id": "awasa-valve-ssb-qso-party",
      "name": "AWA Valve SSB QSO Party",
      "start": "2026-05-03T13:00:00Z",
      "end": "2026-05-03T17:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 4,
      "modes": [
        "SSB"
      ],
      "submodes": [],
      "bands": [
        "80m",
        "40m"
      ],
      "bands_note": "40 m SSB 7 063-7 100 and 7 130-7 200 kHz, with 7 100-7 130 contest free; 80 m SSB 3 603-3 650 kHz, with 3 651-3 699 contest free.",
      "sponsor": "AWASA",
      "rules_url": "https://mysarl.org.za/wp-content/uploads/2025/12/2026-SARL-Contest-Manual-Version-1.1-2025-12-15.pdf",
      "verified": true,
      "note": "The exchange includes the RADIO you are using, and the four scoring classes are all-valve, hybrid, solid state pre-1970 and solid state post-1970 -- which is the point of the contest rather than a curiosity. No linear amplifiers, and the power limit bends for a rig that simply runs hotter than 100 W by design. Sourced from the SARL Contest Manual, which carries this contest's full rules and names its organising body -- the venue in which South African clubs publish their rules, not a listing of them. See data/sources.md, 'Nine South African clubs, one manual'.",
      "exchange": "Call sign, an RS report, a consecutive serial number starting at 001, and the type of radio used -- for example 'HT37 TX'.",
      "country": "ZA",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-19",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "awasa-valve-ssb-qso-party-20260503T1300@contestcal",
      "start_date": "2026-05-03",
      "mode_families": [
        "SSB"
      ],
      "band_families": [
        "80m",
        "40m"
      ],
      "duration_bucket": "2-12"
    },
    {
      "contest_id": "k1usn-sst",
      "name": "K1USN Slow Speed Test (SST)",
      "start": "2026-05-04T00:00:00Z",
      "end": "2026-05-04T01:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "",
      "sponsor": "K1USN Radio Club",
      "rules_url": "https://www.k1usn.com/sst_rules.html",
      "verified": true,
      "note": "No formal log submission -- participants post scores to 3830scores.com.",
      "exchange": "Name + state/province/DX country",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "k1usn-sst-20260504T0000@contestcal",
      "start_date": "2026-05-04",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "lral-4-may-80m",
      "name": "LRAL 4 May 80m Contest",
      "start": "2026-05-04T04:00:00Z",
      "end": "2026-05-04T05:59:00Z",
      "start_wall": "2026-05-04T07:00:00",
      "end_wall": "2026-05-04T08:59:00",
      "local_rolling": false,
      "timezone": "Europe/Riga",
      "duration_hours": 1.98,
      "modes": [
        "CW",
        "SSB",
        "FT8/FT4"
      ],
      "submodes": [],
      "bands": [
        "80m"
      ],
      "bands_note": "CW 3515-3580 kHz; SSB 3605-3650 kHz; FT8 3577 kHz.",
      "sponsor": "LRAL",
      "rules_url": "https://lral.lv/hf-80m-nolikums/",
      "verified": true,
      "note": "SPONSOR-ANCHORED LOCAL TIME. LRAL states the schedule 'pec vieteja laika' -- in local time -- and never in UTC, so the record carries timezone Europe/Riga and wall_clock times. The two blocks are encoded as sessions because LRAL puts a gap between them and says the FT8 rounds are a separate contest: 'FT8 tures ir atseviskas sacensibas, dalibnieki, kas starte FT8 darba veida, var startet ari kada no A, B, vai C klasem.' Both sessions carry the record's whole mode list, which the catalog cannot narrow per session; the split is stated here and in bands_note. One nolikums covers both dates, so both records cite the same URL.",
      "exchange": "A serial number and the two-letter Latvian or Riga district code (001 LM). RST may be sent but is not part of the number. The FT8 rounds use signal report and a four-character locator instead.",
      "country": "LV",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-19",
      "can_enter": false,
      "eligibility_scope": "entity_list",
      "eligibility_reason": "Entry limited to YL. K stations may be worked but cannot submit an entry.",
      "works": "everyone",
      "practical": "",
      "log_due": "2026-05-18T05:59:00Z",
      "uid": "lral-4-may-80m-20260504T0400@contestcal",
      "start_date": "2026-05-04",
      "mode_families": [
        "CW",
        "SSB",
        "Digital",
        "FT8/FT4"
      ],
      "band_families": [
        "80m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "lral-4-may-80m",
      "name": "LRAL 4 May 80m Contest",
      "start": "2026-05-04T06:15:00Z",
      "end": "2026-05-04T07:14:00Z",
      "start_wall": "2026-05-04T09:15:00",
      "end_wall": "2026-05-04T10:14:00",
      "local_rolling": false,
      "timezone": "Europe/Riga",
      "duration_hours": 0.98,
      "modes": [
        "CW",
        "SSB",
        "FT8/FT4"
      ],
      "submodes": [],
      "bands": [
        "80m"
      ],
      "bands_note": "CW 3515-3580 kHz; SSB 3605-3650 kHz; FT8 3577 kHz.",
      "sponsor": "LRAL",
      "rules_url": "https://lral.lv/hf-80m-nolikums/",
      "verified": true,
      "note": "SPONSOR-ANCHORED LOCAL TIME. LRAL states the schedule 'pec vieteja laika' -- in local time -- and never in UTC, so the record carries timezone Europe/Riga and wall_clock times. The two blocks are encoded as sessions because LRAL puts a gap between them and says the FT8 rounds are a separate contest: 'FT8 tures ir atseviskas sacensibas, dalibnieki, kas starte FT8 darba veida, var startet ari kada no A, B, vai C klasem.' Both sessions carry the record's whole mode list, which the catalog cannot narrow per session; the split is stated here and in bands_note. One nolikums covers both dates, so both records cite the same URL.",
      "exchange": "A serial number and the two-letter Latvian or Riga district code (001 LM). RST may be sent but is not part of the number. The FT8 rounds use signal report and a four-character locator instead.",
      "country": "LV",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-19",
      "can_enter": false,
      "eligibility_scope": "entity_list",
      "eligibility_reason": "Entry limited to YL. K stations may be worked but cannot submit an entry.",
      "works": "everyone",
      "practical": "",
      "log_due": "2026-05-18T07:14:00Z",
      "uid": "lral-4-may-80m-20260504T0615@contestcal",
      "start_date": "2026-05-04",
      "mode_families": [
        "CW",
        "SSB",
        "Digital",
        "FT8/FT4"
      ],
      "band_families": [
        "80m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "agcw-zap-merit",
      "name": "AGCW ZAP Merit Contest (ZMC)",
      "start": "2026-05-04T17:40:00Z",
      "end": "2026-05-04T18:30:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.83,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "80m"
      ],
      "bands_note": "",
      "sponsor": "AGCW-DL",
      "rules_url": "https://www.agcw.de/contest/tzap/",
      "verified": false,
      "note": "PARTLY UNVERIFIED. The recurrence (every Monday), the 1740 UTC pre-logging opening and the 1800 UTC telegram transmission are all quoted from AGCW. AGCW publishes NO closing time. The 1830 end stored here is a PLACEHOLDER so the record expands -- it is not a sponsor fact and must not be presented as one. Confirm the session length with the ZMC manager before shipping. Points accumulate over a calendar year; logs are due 31 January of the following year.",
      "exchange": "Callsign + date + time + RST (SWLs log RST of both stations in a QSO)",
      "country": "DE",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-12",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "agcw-zap-merit-20260504T1740@contestcal",
      "start_date": "2026-05-04",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "80m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "ars-spartan-sprint",
      "name": "ARS Spartan Sprint",
      "start": "2026-05-05T00:00:00Z",
      "end": "2026-05-05T02:00:00Z",
      "start_wall": "2026-05-04T20:00:00",
      "end_wall": "2026-05-04T22:00:00",
      "local_rolling": false,
      "timezone": "America/New_York",
      "duration_hours": 2,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "",
      "sponsor": "Adventure Radio Society",
      "rules_url": "https://ars-qrp.com/Spartan_Sprint/Spartan_Sprint.html",
      "verified": true,
      "note": "CORRECTION (anchor): previously encoded as the first TUESDAY of the month. The sponsor's rule is the first MONDAY US local, which lands on Tuesday UTC -- and those are different dates whenever the 1st falls on a Tuesday (Sep and Dec 2026). SPONSOR-ANCHORED LOCAL TIME: ARS publishes no UTC time and states the event 'is always at these Local Times', so the UTC instant is what moves -- 0100Z Tuesday under EST, 0000Z Tuesday under EDT. Resolved through America/New_York rather than hardcoded, so DST is handled. ARS lists Eastern, Central, Mountain and Pacific times that are the same instant in every zone that observes DST; Arizona, which does not, is the one place the sponsor's own table is inconsistent.",
      "exchange": "RST + state/province + power output",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "ars-spartan-sprint-20260505T0000@contestcal",
      "start_date": "2026-05-05",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "2-12"
    },
    {
      "contest_id": "cwops-cwt",
      "name": "CWops Test (CWT)",
      "start": "2026-05-06T13:00:00Z",
      "end": "2026-05-06T14:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "CWops",
      "rules_url": "https://cwops.org/cwops-tests/",
      "verified": true,
      "note": "",
      "exchange": "Members: name + CWops number. Non-members: name + state/province/DX prefix.",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "cwops-cwt-20260506T1300@contestcal",
      "start_date": "2026-05-06",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "cwops-cwt",
      "name": "CWops Test (CWT)",
      "start": "2026-05-06T19:00:00Z",
      "end": "2026-05-06T20:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "CWops",
      "rules_url": "https://cwops.org/cwops-tests/",
      "verified": true,
      "note": "",
      "exchange": "Members: name + CWops number. Non-members: name + state/province/DX prefix.",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "cwops-cwt-20260506T1900@contestcal",
      "start_date": "2026-05-06",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "cwops-cwt",
      "name": "CWops Test (CWT)",
      "start": "2026-05-07T03:00:00Z",
      "end": "2026-05-07T04:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "CWops",
      "rules_url": "https://cwops.org/cwops-tests/",
      "verified": true,
      "note": "",
      "exchange": "Members: name + CWops number. Non-members: name + state/province/DX prefix.",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "cwops-cwt-20260507T0300@contestcal",
      "start_date": "2026-05-07",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "cwops-cwt",
      "name": "CWops Test (CWT)",
      "start": "2026-05-07T07:00:00Z",
      "end": "2026-05-07T08:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "CWops",
      "rules_url": "https://cwops.org/cwops-tests/",
      "verified": true,
      "note": "",
      "exchange": "Members: name + CWops number. Non-members: name + state/province/DX prefix.",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "cwops-cwt-20260507T0700@contestcal",
      "start_date": "2026-05-07",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "skcc-skse",
      "name": "SKCC Straight Key Sprint Europe (SKSE)",
      "start": "2026-05-07T19:00:00Z",
      "end": "2026-05-07T21:00:00Z",
      "start_wall": "2026-05-07T21:00:00",
      "end_wall": "2026-05-07T23:00:00",
      "local_rolling": false,
      "timezone": "Europe/Berlin",
      "duration_hours": 2,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m",
        "6m"
      ],
      "bands_note": "160 through 6 m excluding the WARC bands -- SKCC names 60, 30, 17 and 12 m as excluded.",
      "sponsor": "Straight Key Century Club",
      "rules_url": "https://www.skccgroup.com/operating_activities/skse/",
      "verified": true,
      "note": "SKCC PRINTS TWO UTC TIMES AND THE CONTEST HAS ONE LOCAL TIME. 2000Z from November to March and 1900Z from April to October are both 2100 in central Europe: CET is UTC+1 and CEST is UTC+2. So this is not a contest that changes its hour twice a year, it is a contest at nine in the evening that Europe's clocks move around, and it is recorded the way the sponsor means it -- `timezone: Europe/Berlin` with wall_clock times, exactly as the ARS Spartan Sprint is recorded in New York.\n\nTHAT READING IS TESTABLE AND IT PASSES ON THE MONTHS THAT DECIDE IT. Europe changes clocks on the last Sunday of March and of October, and the first Thursday of both months falls on the near side of the change: March is still CET and resolves to 2000Z, April is CEST and resolves to 1900Z, October is still CEST at 1900Z, November is CET at 2000Z. All four match SKCC's own table, which is what makes this one rule rather than two.\n\nEncoding it as two records split by month -- winter and summer -- would have produced two entries with the same name and hidden the reason. Encoding one UTC time would have been wrong for five months of the year.\n\nStraight keys, sideswipers and bugs only: no keyer, no keyboard. That is the club's whole premise rather than a category.\n\nThe fifteen-minute QRS extensions at each end are not in the window: they are an invitation to slow operators rather than part of the scored period.",
      "exchange": "RST, QTH, the operator's name and the SKCC number. Non-members send 'none' for the number.",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-23",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": "2026-05-14T21:00:00Z",
      "uid": "skcc-skse-20260507T1900@contestcal",
      "start_date": "2026-05-07",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m",
        "6m"
      ],
      "duration_bucket": "2-12"
    },
    {
      "contest_id": "nccc-ns-ft4",
      "name": "NCCC FT4 Sprint (FT4 NS)",
      "start": "2026-05-08T01:00:00Z",
      "end": "2026-05-08T01:30:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.5,
      "modes": [
        "FT8/FT4"
      ],
      "submodes": [
        "FT4"
      ],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "Northern California Contest Club (NCCC)",
      "rules_url": "https://www.ncccsprint.com/ft4ns.html",
      "verified": true,
      "note": "NCCC describes these as 'nominal rules' that may be modified on a weekly basis, and runs formal Ladder seasons interspersed with practice weeks. The 30-minute session slot itself is fixed.",
      "exchange": "Grid square (following NA VHF, WW Digi and ARRL IDC practice)",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "nccc-ns-ft4-20260508T0100@contestcal",
      "start_date": "2026-05-08",
      "mode_families": [
        "Digital",
        "FT8/FT4"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "nccc-ns-rtty",
      "name": "NCCC RTTY Sprint (RTTY NS)",
      "start": "2026-05-08T01:45:00Z",
      "end": "2026-05-08T02:15:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.5,
      "modes": [
        "RTTY"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m"
      ],
      "bands_note": "",
      "sponsor": "Northern California Contest Club (NCCC)",
      "rules_url": "https://ncccsprint.com/rttyns.html",
      "verified": true,
      "note": "NCCC describes these as 'nominal rules' that may be modified on a weekly basis, and runs formal Ladder seasons interspersed with practice weeks. The 30-minute session slot itself is fixed.",
      "exchange": "Serial number + name + QTH (both callsigns required in the exchange)",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "nccc-ns-rtty-20260508T0145@contestcal",
      "start_date": "2026-05-08",
      "mode_families": [
        "RTTY",
        "Digital"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "nccc-ns-cw",
      "name": "NCCC Sprint (NS)",
      "start": "2026-05-08T02:30:00Z",
      "end": "2026-05-08T03:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.5,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m"
      ],
      "bands_note": "",
      "sponsor": "Northern California Contest Club (NCCC)",
      "rules_url": "https://ncccsprint.com/rules.html",
      "verified": true,
      "note": "NCCC describes these as 'nominal rules' that may be modified on a weekly basis, and runs formal Ladder seasons interspersed with practice weeks. The 30-minute session slot itself is fixed.",
      "exchange": "Serial number + name + QTH (both callsigns required in the exchange)",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "nccc-ns-cw-20260508T0230@contestcal",
      "start_date": "2026-05-08",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "k1usn-sst",
      "name": "K1USN Slow Speed Test (SST)",
      "start": "2026-05-08T20:00:00Z",
      "end": "2026-05-08T21:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "",
      "sponsor": "K1USN Radio Club",
      "rules_url": "https://www.k1usn.com/sst_rules.html",
      "verified": true,
      "note": "No formal log submission -- participants post scores to 3830scores.com.",
      "exchange": "Name + state/province/DX country",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "k1usn-sst-20260508T2000@contestcal",
      "start_date": "2026-05-08",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "skcc-wes",
      "name": "SKCC Weekend Sprintathon (WES)",
      "start": "2026-05-09T12:00:00Z",
      "end": "2026-05-10T23:59:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 35.98,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "Straight Key Century Club",
      "rules_url": "https://www.skccgroup.com/operating_activities/weekend_sprintathon/",
      "verified": true,
      "note": "Older sources describe the anchor as 'the Saturday following the 6th', which differs from '2nd Saturday' in some months. SKCC's current page says 2nd Saturday; re-check if dates drift.",
      "exchange": "RST + state/province/country + name + SKCC number (C/T/S suffix for award holders)",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "skcc-wes-20260509T1200@contestcal",
      "start_date": "2026-05-09",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m",
        "6m"
      ],
      "duration_bucket": "gte24"
    },
    {
      "contest_id": "uarl-lp-cup-cw",
      "name": "Ukrainian Low Power Cup (LP CUP CW)",
      "start": "2026-05-10T16:00:00Z",
      "end": "2026-05-10T17:59:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1.98,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "80m",
        "40m"
      ],
      "bands_note": "Recommended 3.510-3.560 and 7.010-7.040 MHz.",
      "sponsor": "UARL",
      "rules_url": "http://uarl.org.ua/index.php/sport/1235-reglament-kubku-ukrajini-z-radiozv-yazku-na-kkh-maloyu-potuzhnistyu-lp-cup-cw-2026",
      "verified": true,
      "note": "Unlike UARL's championships, this reglament states the times in UT first and gives Kyiv time in brackets, so the record is plain UTC with no wall_clock. The deadline is checkable against UARL's own arithmetic: 10 May plus seven days is 17 May 2026, which is the date the reglament prints. Manual dates for 2026 only -- UARL publishes a year at a time, not a rule.",
      "exchange": "The two-letter Ukrainian oblast code and a serial number from 001, numbered continuously across all four rounds.",
      "country": "UA",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-19",
      "can_enter": false,
      "eligibility_scope": "entity_list",
      "eligibility_reason": "Entry limited to UR. K stations may be worked but cannot submit an entry.",
      "works": "everyone",
      "practical": "",
      "log_due": "2026-05-17T17:59:00Z",
      "uid": "uarl-lp-cup-cw-20260510T1600@contestcal",
      "start_date": "2026-05-10",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "80m",
        "40m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "4sqrp-sss",
      "name": "4 States QRP Group Second Sunday Sprint (SSS)",
      "start": "2026-05-11T00:00:00Z",
      "end": "2026-05-11T02:00:00Z",
      "start_wall": "2026-05-10T19:00:00",
      "end_wall": "2026-05-10T21:00:00",
      "local_rolling": false,
      "timezone": "America/Chicago",
      "duration_hours": 2,
      "modes": [
        "CW",
        "SSB",
        "Digital"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "",
      "sponsor": "4 States QRP Group",
      "rules_url": "https://www.4sqrp.com/SSS/sss_rules_revised_02_2026.pdf",
      "verified": true,
      "note": "SPONSOR-ANCHORED LOCAL TIME. The anchor is the second SUNDAY and the sprint runs into Monday UTC. 4SQRP states the consequence itself: '7 PM until 9 PM central time (CST or CDT, whichever is in effect at the time). If you use UTC, that time changes when we switch from CST to CDT (or vice versa).' Resolved through America/Chicago, so it is 0100Z Monday in winter and 0000Z Monday in summer.",
      "exchange": "RST + state/province/country + 4SQRP member number (power if non-member)",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "4sqrp-sss-20260511T0000@contestcal",
      "start_date": "2026-05-11",
      "mode_families": [
        "CW",
        "SSB",
        "Digital"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "2-12"
    },
    {
      "contest_id": "k1usn-sst",
      "name": "K1USN Slow Speed Test (SST)",
      "start": "2026-05-11T00:00:00Z",
      "end": "2026-05-11T01:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "",
      "sponsor": "K1USN Radio Club",
      "rules_url": "https://www.k1usn.com/sst_rules.html",
      "verified": true,
      "note": "No formal log submission -- participants post scores to 3830scores.com.",
      "exchange": "Name + state/province/DX country",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "k1usn-sst-20260511T0000@contestcal",
      "start_date": "2026-05-11",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "agcw-zap-merit",
      "name": "AGCW ZAP Merit Contest (ZMC)",
      "start": "2026-05-11T17:40:00Z",
      "end": "2026-05-11T18:30:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.83,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "80m"
      ],
      "bands_note": "",
      "sponsor": "AGCW-DL",
      "rules_url": "https://www.agcw.de/contest/tzap/",
      "verified": false,
      "note": "PARTLY UNVERIFIED. The recurrence (every Monday), the 1740 UTC pre-logging opening and the 1800 UTC telegram transmission are all quoted from AGCW. AGCW publishes NO closing time. The 1830 end stored here is a PLACEHOLDER so the record expands -- it is not a sponsor fact and must not be presented as one. Confirm the session length with the ZMC manager before shipping. Points accumulate over a calendar year; logs are due 31 January of the following year.",
      "exchange": "Callsign + date + time + RST (SWLs log RST of both stations in a QSO)",
      "country": "DE",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-12",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "agcw-zap-merit-20260511T1740@contestcal",
      "start_date": "2026-05-11",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "80m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "rsgb-80mcc-ssb",
      "name": "RSGB 3.5 MHz Club Championship, SSB",
      "start": "2026-05-11T19:00:00Z",
      "end": "2026-05-11T20:30:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1.5,
      "modes": [
        "SSB"
      ],
      "submodes": [],
      "bands": [
        "80m"
      ],
      "bands_note": "3600-3775 kHz.",
      "sponsor": "RSGB Contest Committee",
      "rules_url": "https://www.rsgbcc.org/hf/rules/2026/r80mcc.shtml",
      "verified": true,
      "note": "THE DATES ARE NOT ON THE RULES PAGE. RSGB publishes the rules at rules/2026/r80mcc.shtml and the eighteen legs on a separate CGI calendar, and the rules page links to it in so many words. This record holds what that calendar prints; nothing is derived.\n\nTHE CLOCK MOVES IN APRIL and the record says so per date: February and March run 2000-2130 UTC, April to July run 1900-2030. The record's default is the April-July clock because four of each mode's six legs use it, and the two early legs carry their own times. Same mechanism as the Autumn Series, and the second contest to need it.\n\nMANUAL BECAUSE THE LEGS FOLLOW NO ORDINAL. They fall on Mondays, Wednesdays and Thursdays with the weekday rotating through the series, which is exactly the shape an ordinal must not be fitted to.\n\nNON-UK STATIONS MAY ENTER AS INDIVIDUALS -- RSGB states it, which is worth noting beside the AFS and Club Calls contests where entry really is UK&CD only.",
      "exchange": "RS(T) plus a serial number starting at 1 and incrementing by 1.",
      "country": "GB",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-23",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": "2026-05-12T20:30:00Z",
      "uid": "rsgb-80mcc-ssb-20260511T1900@contestcal",
      "start_date": "2026-05-11",
      "mode_families": [
        "SSB"
      ],
      "band_families": [
        "80m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "darc-ft4",
      "name": "DARC FT4 Contest",
      "start": "2026-05-12T19:00:00Z",
      "end": "2026-05-12T20:29:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1.48,
      "modes": [
        "FT8/FT4"
      ],
      "submodes": [
        "FT4"
      ],
      "bands": [
        "80m",
        "40m"
      ],
      "bands_note": "80m 3576, 3579 and 3582 kHz USB; 40m 7047.5 kHz USB",
      "sponsor": "DARC",
      "rules_url": "https://www.darc.de/der-club/referate/conteste/ft4-contest/ft4-rules/",
      "verified": true,
      "note": "Four legs a year, one record. DARC heads its 2026 date list 'Termine 2025:' -- the heading is a year out, the dates under it are 2026 and match DARC's KW contest calendar, so the typo is in the heading only.",
      "exchange": "Signal report + four-character grid square (for example JN49, JO61).",
      "country": "DE",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-18",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": "2026-05-19T20:29:00Z",
      "uid": "darc-ft4-20260512T1900@contestcal",
      "start_date": "2026-05-12",
      "mode_families": [
        "Digital",
        "FT8/FT4"
      ],
      "band_families": [
        "80m",
        "40m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "early-morning-coffee-qso-party",
      "name": "Early Morning Coffee QSO Party",
      "start": "2026-05-13T04:00:00Z",
      "end": "2026-05-13T05:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "SSB"
      ],
      "submodes": [],
      "bands": [
        "80m",
        "40m"
      ],
      "bands_note": "80 m: 3 603-3 650 and 3 703-3 800 kHz, with 3 651-3 699 kHz contest free. 40 m: 7 063-7 100 and 7 130-7 200 kHz, with 7 100-7 130 kHz contest free.",
      "sponsor": "Bo Karoo Amateur Radio Club",
      "rules_url": "https://mysarl.org.za/wp-content/uploads/2025/12/2026-SARL-Contest-Manual-Version-1.1-2025-12-15.pdf",
      "verified": true,
      "note": "An hour at 0400 UTC, which is 0600 local -- the earliest start of any contest in this catalog, and the point of it. Two months a year rather than monthly, which is what monthly_nth_weekday's `months` field carries. SOURCED FROM THE SARL CONTEST MANUAL, WHICH IS NOT AN AGGREGATOR. The manual carries this contest's FULL rules -- aim, dates, exchange, frequencies, scoring, log sheets -- and names its organising club, rather than summarising a calendar entry. It is the venue in which South African clubs publish their contest rules, the way DARC's Ausschreibungen or UBA's rules pages are, so it is a primary source for these contests and not a third-party listing. The distinction that matters: an aggregator republishes rules it found elsewhere, and this is where the rules appear.",
      "exchange": "Your call sign, an RS report, your grid square, your age category and your name.",
      "country": "ZA",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-19",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "early-morning-coffee-qso-party-20260513T0400@contestcal",
      "start_date": "2026-05-13",
      "mode_families": [
        "SSB"
      ],
      "band_families": [
        "80m",
        "40m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "cwops-cwt",
      "name": "CWops Test (CWT)",
      "start": "2026-05-13T13:00:00Z",
      "end": "2026-05-13T14:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "CWops",
      "rules_url": "https://cwops.org/cwops-tests/",
      "verified": true,
      "note": "",
      "exchange": "Members: name + CWops number. Non-members: name + state/province/DX prefix.",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "cwops-cwt-20260513T1300@contestcal",
      "start_date": "2026-05-13",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "cwops-cwt",
      "name": "CWops Test (CWT)",
      "start": "2026-05-13T19:00:00Z",
      "end": "2026-05-13T20:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "CWops",
      "rules_url": "https://cwops.org/cwops-tests/",
      "verified": true,
      "note": "",
      "exchange": "Members: name + CWops number. Non-members: name + state/province/DX prefix.",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "cwops-cwt-20260513T1900@contestcal",
      "start_date": "2026-05-13",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "cwops-cwt",
      "name": "CWops Test (CWT)",
      "start": "2026-05-14T03:00:00Z",
      "end": "2026-05-14T04:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "CWops",
      "rules_url": "https://cwops.org/cwops-tests/",
      "verified": true,
      "note": "",
      "exchange": "Members: name + CWops number. Non-members: name + state/province/DX prefix.",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "cwops-cwt-20260514T0300@contestcal",
      "start_date": "2026-05-14",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "cwops-cwt",
      "name": "CWops Test (CWT)",
      "start": "2026-05-14T07:00:00Z",
      "end": "2026-05-14T08:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "CWops",
      "rules_url": "https://cwops.org/cwops-tests/",
      "verified": true,
      "note": "",
      "exchange": "Members: name + CWops number. Non-members: name + state/province/DX prefix.",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "cwops-cwt-20260514T0700@contestcal",
      "start_date": "2026-05-14",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "nccc-ns-ft4",
      "name": "NCCC FT4 Sprint (FT4 NS)",
      "start": "2026-05-15T01:00:00Z",
      "end": "2026-05-15T01:30:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.5,
      "modes": [
        "FT8/FT4"
      ],
      "submodes": [
        "FT4"
      ],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "Northern California Contest Club (NCCC)",
      "rules_url": "https://www.ncccsprint.com/ft4ns.html",
      "verified": true,
      "note": "NCCC describes these as 'nominal rules' that may be modified on a weekly basis, and runs formal Ladder seasons interspersed with practice weeks. The 30-minute session slot itself is fixed.",
      "exchange": "Grid square (following NA VHF, WW Digi and ARRL IDC practice)",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "nccc-ns-ft4-20260515T0100@contestcal",
      "start_date": "2026-05-15",
      "mode_families": [
        "Digital",
        "FT8/FT4"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "nccc-ns-rtty",
      "name": "NCCC RTTY Sprint (RTTY NS)",
      "start": "2026-05-15T01:45:00Z",
      "end": "2026-05-15T02:15:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.5,
      "modes": [
        "RTTY"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m"
      ],
      "bands_note": "",
      "sponsor": "Northern California Contest Club (NCCC)",
      "rules_url": "https://ncccsprint.com/rttyns.html",
      "verified": true,
      "note": "NCCC describes these as 'nominal rules' that may be modified on a weekly basis, and runs formal Ladder seasons interspersed with practice weeks. The 30-minute session slot itself is fixed.",
      "exchange": "Serial number + name + QTH (both callsigns required in the exchange)",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "nccc-ns-rtty-20260515T0145@contestcal",
      "start_date": "2026-05-15",
      "mode_families": [
        "RTTY",
        "Digital"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "nccc-ns-cw",
      "name": "NCCC Sprint (NS)",
      "start": "2026-05-15T02:30:00Z",
      "end": "2026-05-15T03:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.5,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m"
      ],
      "bands_note": "",
      "sponsor": "Northern California Contest Club (NCCC)",
      "rules_url": "https://ncccsprint.com/rules.html",
      "verified": true,
      "note": "NCCC describes these as 'nominal rules' that may be modified on a weekly basis, and runs formal Ladder seasons interspersed with practice weeks. The 30-minute session slot itself is fixed.",
      "exchange": "Serial number + name + QTH (both callsigns required in the exchange)",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "nccc-ns-cw-20260515T0230@contestcal",
      "start_date": "2026-05-15",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "k1usn-sst",
      "name": "K1USN Slow Speed Test (SST)",
      "start": "2026-05-15T20:00:00Z",
      "end": "2026-05-15T21:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "",
      "sponsor": "K1USN Radio Club",
      "rules_url": "https://www.k1usn.com/sst_rules.html",
      "verified": true,
      "note": "No formal log submission -- participants post scores to 3830scores.com.",
      "exchange": "Name + state/province/DX country",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "k1usn-sst-20260515T2000@contestcal",
      "start_date": "2026-05-15",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "zs-sota-activity-weekend",
      "name": "ZS SOTA Activity Weekend",
      "start": "2026-05-16T00:00:00Z",
      "end": "2026-05-17T21:59:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 45.98,
      "modes": [
        "Mixed"
      ],
      "submodes": [],
      "bands": [],
      "bands_note": "",
      "sponsor": "SOTA SA",
      "rules_url": "https://mysarl.org.za/wp-content/uploads/2025/12/2026-SARL-Contest-Manual-Version-1.1-2025-12-15.pdf",
      "verified": true,
      "note": "THE CATALOG'S SECOND RECORD WITH NO BANDS, AND THE SECOND FOR A GOOD REASON. SARL states '2. Frequencies and modes All amateur bands and modes' -- there is no list to record, and writing one out would be this catalog inventing a restriction SARL did not state. Same treatment as JARL's New Year QSO Party. The consequence is real and the page says so: every band filter necessarily excludes this record.\n\nModes are 'Mixed' for the same sentence -- that is exactly what the token means.\n\nIt sits at the edge of what this catalog is for. It has dates, rules, an exchange and categories, so it is a scheduled operating event with a schedule worth publishing; but it is scored through the SOTA database rather than by a log submitted to the sponsor, and 'Activator' and 'Chaser' are roles rather than entry classes. Encoded on the same reasoning as UBA's Belgian Mills Award, which is also an award-shaped event with real dates. Sourced from the SARL Contest Manual, which carries this contest's full rules and names its organising body -- the venue in which South African clubs publish their rules, not a listing of them. See data/sources.md, 'Nine South African clubs, one manual'.",
      "exchange": "An RS, RST or RSQ report and the SOTA reference.",
      "country": "ZA",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-19",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "zs-sota-activity-weekend-20260516T0000@contestcal",
      "start_date": "2026-05-16",
      "mode_families": [
        "CW",
        "SSB",
        "FM",
        "RTTY",
        "Digital",
        "FT8/FT4",
        "Mixed"
      ],
      "band_families": [],
      "duration_bucket": "gte24"
    },
    {
      "contest_id": "nzart-sangster-shield",
      "name": "NZART Sangster Shield",
      "start": "2026-05-16T08:00:00Z",
      "end": "2026-05-16T11:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 3,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "80m"
      ],
      "bands_note": "",
      "sponsor": "NZART",
      "rules_url": "https://nzart.org.nz/activities/contests/sangster-shield/",
      "verified": true,
      "note": "A low-power contest by design, running since 1927: 'The output of the transmitter must not exceed 5 Watts PEP. Overseas contestants may use any power up to the maximum permitted by their license.' Three hours, worked as six half-hour periods. NZART moved to this one-night format for 2026.",
      "exchange": "New Zealand stations send RST, a serial number starting at 001 and their branch number; overseas stations send RST and a serial number",
      "country": "NZ",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-17",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": "2026-06-13T11:00:00Z",
      "uid": "nzart-sangster-shield-20260516T0800@contestcal",
      "start_date": "2026-05-16",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "80m"
      ],
      "duration_bucket": "2-12"
    },
    {
      "contest_id": "ure-rey-de-espana-cw",
      "name": "His Majesty the King of Spain Contest, CW",
      "start": "2026-05-16T12:00:00Z",
      "end": "2026-05-17T11:59:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 23.98,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "",
      "sponsor": "URE",
      "rules_url": "https://concursos.ure.es/en/s-m-el-rey-de-espana-cw/bases/",
      "verified": true,
      "note": "",
      "exchange": "Spanish stations send RST + their province abbreviation (EF0F sends SMR); DX stations send RST + a serial number starting with 001.",
      "country": "ES",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-18",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": "2026-06-01T11:59:00Z",
      "uid": "ure-rey-de-espana-cw-20260516T1200@contestcal",
      "start_date": "2026-05-16",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "12-24"
    },
    {
      "contest_id": "zs3-qso-party",
      "name": "ZS3 QSO Party",
      "start": "2026-05-17T14:00:00Z",
      "end": "2026-05-17T15:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW",
        "SSB"
      ],
      "submodes": [],
      "bands": [
        "40m"
      ],
      "bands_note": "A phone and CW contest on 40 m: CW 7 000-7 040 kHz, SSB 7 063-7 100 and 7 130-7 200 kHz.",
      "sponsor": "Northern Cape Amateur Radio Club",
      "rules_url": "https://mysarl.org.za/wp-content/uploads/2025/12/2026-SARL-Contest-Manual-Version-1.1-2025-12-15.pdf",
      "verified": true,
      "note": "SOURCED FROM THE SARL CONTEST MANUAL, WHICH IS NOT AN AGGREGATOR. The manual carries this contest's FULL rules -- aim, dates, exchange, frequencies, scoring, log sheets -- and names its organising club, rather than summarising a calendar entry. It is the venue in which South African clubs publish their contest rules, the way DARC's Ausschreibungen or UBA's rules pages are, so it is a primary source for these contests and not a third-party listing. The distinction that matters: an aggregator republishes rules it found elsewhere, and this is where the rules appear.",
      "exchange": "RS(T) and the provincial or country abbreviation.",
      "country": "ZA",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-19",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "zs3-qso-party-20260517T1400@contestcal",
      "start_date": "2026-05-17",
      "mode_families": [
        "CW",
        "SSB"
      ],
      "band_families": [
        "40m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "k1usn-sst",
      "name": "K1USN Slow Speed Test (SST)",
      "start": "2026-05-18T00:00:00Z",
      "end": "2026-05-18T01:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "",
      "sponsor": "K1USN Radio Club",
      "rules_url": "https://www.k1usn.com/sst_rules.html",
      "verified": true,
      "note": "No formal log submission -- participants post scores to 3830scores.com.",
      "exchange": "Name + state/province/DX country",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "k1usn-sst-20260518T0000@contestcal",
      "start_date": "2026-05-18",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "agcw-zap-merit",
      "name": "AGCW ZAP Merit Contest (ZMC)",
      "start": "2026-05-18T17:40:00Z",
      "end": "2026-05-18T18:30:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.83,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "80m"
      ],
      "bands_note": "",
      "sponsor": "AGCW-DL",
      "rules_url": "https://www.agcw.de/contest/tzap/",
      "verified": false,
      "note": "PARTLY UNVERIFIED. The recurrence (every Monday), the 1740 UTC pre-logging opening and the 1800 UTC telegram transmission are all quoted from AGCW. AGCW publishes NO closing time. The 1830 end stored here is a PLACEHOLDER so the record expands -- it is not a sponsor fact and must not be presented as one. Confirm the session length with the ZMC manager before shipping. Points accumulate over a calendar year; logs are due 31 January of the following year.",
      "exchange": "Callsign + date + time + RST (SWLs log RST of both stations in a QSO)",
      "country": "DE",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-12",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "agcw-zap-merit-20260518T1740@contestcal",
      "start_date": "2026-05-18",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "80m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "rsgb-ft4-series",
      "name": "RSGB FT4 Contest Series",
      "start": "2026-05-18T19:00:00Z",
      "end": "2026-05-18T21:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 2,
      "modes": [
        "FT8/FT4"
      ],
      "submodes": [
        "FT4"
      ],
      "bands": [
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "80, 40, 20, 15 and 10 m.",
      "sponsor": "RSGB Contest Committee",
      "rules_url": "https://www.rsgbcc.org/hf/rules/2026/r80m_ft4.shtml",
      "verified": true,
      "note": "TWELVE MONDAY EVENINGS AND THE CLOCK SHIFTS FOR THE SUMMER: January to March and October to December run 2000-2200 UTC, April to September run 1900-2100. Six legs each way, so the record's default is the winter clock and the summer legs carry their own -- the third contest to need per-date times, after the Autumn Series and the 80m Club Championship.\n\nMANUAL BECAUSE THE DATES ARE NOT ON THE RULES PAGE and follow no ordinal: they are Mondays, but the third Monday in January, the fourth in February, the third in March. RSGB publishes them on its CGI calendar and this record holds what that prints.\n\nNot the same contest as the FT4 International Activity Day in April, which is 24 hours and has its own rules page.",
      "exchange": "A signal report. A serial number is not required.",
      "country": "GB",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-23",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": "2026-05-19T21:00:00Z",
      "uid": "rsgb-ft4-series-20260518T1900@contestcal",
      "start_date": "2026-05-18",
      "mode_families": [
        "Digital",
        "FT8/FT4"
      ],
      "band_families": [
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "2-12"
    },
    {
      "contest_id": "darc-hell-kurz",
      "name": "DARC HELL-Kurzcontest",
      "start": "2026-05-19T18:00:00Z",
      "end": "2026-05-19T18:59:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.98,
      "modes": [
        "Digital"
      ],
      "submodes": [
        "Hell"
      ],
      "bands": [],
      "bands_note": "",
      "sponsor": "DARC",
      "rules_url": "https://www.darc.de/der-club/referate/conteste/darc-kw-conteste/kw-conteste/",
      "verified": false,
      "note": "VERIFIED FALSE, AND THE RECURRENCE IS STILL DERIVED FROM DARC'S OWN FOUR DATES. All four are the THIRD TUESDAY of the second month of each quarter -- 17 Feb, 19 May, 18 Aug, 17 Nov 2026 -- which is a clean pattern across four points and sits alongside the RTTY-Kurzcontest (2nd Tuesday, months 1/4/7/10) and the FT4 Contest (2nd Tuesday, months 2/5/8/11) that DARC already runs.\n\nWhat is missing is everything the rules page would give: BANDS ARE UNRECORDED, so every band filter excludes this record, and the exchange and deadline are absent. The mode is taken from the contest's own name. That is why it is unverified: the dates are DARC's, the rule is an inference from them, and the rest is a gap.\n\nWHERE THE BANDS WOULD HAVE BEEN: Not read: this series has no Ausschreibung linked from DARC's table. That sentence sits here rather than in bands_note, because bands_note is for a sponsor's own wording ABOUT a band list and must never stand in for one -- a test enforces it, and it caught this.",
      "exchange": "",
      "country": "DE",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-23",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "darc-hell-kurz-20260519T1800@contestcal",
      "start_date": "2026-05-19",
      "mode_families": [
        "Digital"
      ],
      "band_families": [],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "cwops-cwt",
      "name": "CWops Test (CWT)",
      "start": "2026-05-20T13:00:00Z",
      "end": "2026-05-20T14:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "CWops",
      "rules_url": "https://cwops.org/cwops-tests/",
      "verified": true,
      "note": "",
      "exchange": "Members: name + CWops number. Non-members: name + state/province/DX prefix.",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "cwops-cwt-20260520T1300@contestcal",
      "start_date": "2026-05-20",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "sarl-club-80m",
      "name": "SARL Wednesday 80 m Club Contest",
      "start": "2026-05-20T17:00:00Z",
      "end": "2026-05-20T18:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "SSB",
        "CW",
        "RTTY"
      ],
      "submodes": [],
      "bands": [
        "80m"
      ],
      "bands_note": "Phone 3 603-3 650 and 3 703-3 800 kHz; CW 3 510-3 560 kHz; RTTY 3 580-3 600 kHz. The segment 3 651-3 700 kHz is contest free.",
      "sponsor": "SARL",
      "rules_url": "https://mysarl.org.za/wp-content/uploads/2025/12/2026-SARL-Contest-Manual-Version-1.1-2025-12-15.pdf",
      "verified": true,
      "note": "A club championship rather than an individual contest: operators' scores are added into a club total. The month list is SARL's own -- these run in four months of the year, not every month -- which is what monthly_nth_weekday's `months` field exists for. log_format and log_deadline_days are absent: this pass read each contest's Aim, Dates, Frequencies and Exchange sections and did not read its Log Sheets section, so neither is recorded rather than assumed from SARL's other contests.\n\nPROVENANCE RESTORED 2026-08-23. This record carried verified: true with an EMPTY source_note -- one of three the 2026-08-21 rule audit found, and a stricter defect than the thin ARRL notes beside them: an empty string is not weak evidence, it is none, and there was nothing in the record to check a rule against. The rule, the times, the bands and the exchange were all correct; only the evidence for them was missing. Re-read from the manual and quoted above, and SARL's own printed 2026 dates reproduce it.",
      "exchange": "Your name, your Abbreviated Club Callsign and your 4-character grid square (for example KG30).",
      "country": "ZA",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-23",
      "can_enter": false,
      "eligibility_scope": "entity_list",
      "eligibility_reason": "Entry limited to ZS. K stations may be worked but cannot submit an entry.",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "sarl-club-80m-20260520T1700@contestcal",
      "start_date": "2026-05-20",
      "mode_families": [
        "CW",
        "SSB",
        "RTTY",
        "Digital"
      ],
      "band_families": [
        "80m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "cwops-cwt",
      "name": "CWops Test (CWT)",
      "start": "2026-05-20T19:00:00Z",
      "end": "2026-05-20T20:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "CWops",
      "rules_url": "https://cwops.org/cwops-tests/",
      "verified": true,
      "note": "",
      "exchange": "Members: name + CWops number. Non-members: name + state/province/DX prefix.",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "cwops-cwt-20260520T1900@contestcal",
      "start_date": "2026-05-20",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "rsgb-80mcc-data",
      "name": "RSGB 3.5 MHz Club Championship, Data",
      "start": "2026-05-20T19:00:00Z",
      "end": "2026-05-20T20:30:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1.5,
      "modes": [
        "RTTY",
        "Digital"
      ],
      "submodes": [
        "PSK63"
      ],
      "bands": [
        "80m"
      ],
      "bands_note": "PSK63 3580-3590 kHz; RTTY 3590-3620 kHz.",
      "sponsor": "RSGB Contest Committee",
      "rules_url": "https://www.rsgbcc.org/hf/rules/2026/r80mcc.shtml",
      "verified": true,
      "note": "THE DATES ARE NOT ON THE RULES PAGE. RSGB publishes the rules at rules/2026/r80mcc.shtml and the eighteen legs on a separate CGI calendar, and the rules page links to it in so many words. This record holds what that calendar prints; nothing is derived.\n\nTHE CLOCK MOVES IN APRIL and the record says so per date: February and March run 2000-2130 UTC, April to July run 1900-2030. The record's default is the April-July clock because four of each mode's six legs use it, and the two early legs carry their own times. Same mechanism as the Autumn Series, and the second contest to need it.\n\nMANUAL BECAUSE THE LEGS FOLLOW NO ORDINAL. They fall on Mondays, Wednesdays and Thursdays with the weekday rotating through the series, which is exactly the shape an ordinal must not be fitted to.\n\nNON-UK STATIONS MAY ENTER AS INDIVIDUALS -- RSGB states it, which is worth noting beside the AFS and Club Calls contests where entry really is UK&CD only.",
      "exchange": "RS(T) plus a serial number starting at 1 and incrementing by 1.",
      "country": "GB",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-23",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": "2026-05-21T20:30:00Z",
      "uid": "rsgb-80mcc-data-20260520T1900@contestcal",
      "start_date": "2026-05-20",
      "mode_families": [
        "RTTY",
        "Digital"
      ],
      "band_families": [
        "80m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "cwops-cwt",
      "name": "CWops Test (CWT)",
      "start": "2026-05-21T03:00:00Z",
      "end": "2026-05-21T04:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "CWops",
      "rules_url": "https://cwops.org/cwops-tests/",
      "verified": true,
      "note": "",
      "exchange": "Members: name + CWops number. Non-members: name + state/province/DX prefix.",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "cwops-cwt-20260521T0300@contestcal",
      "start_date": "2026-05-21",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "cwops-cwt",
      "name": "CWops Test (CWT)",
      "start": "2026-05-21T07:00:00Z",
      "end": "2026-05-21T08:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "CWops",
      "rules_url": "https://cwops.org/cwops-tests/",
      "verified": true,
      "note": "",
      "exchange": "Members: name + CWops number. Non-members: name + state/province/DX prefix.",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "cwops-cwt-20260521T0700@contestcal",
      "start_date": "2026-05-21",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "nccc-ns-ft4",
      "name": "NCCC FT4 Sprint (FT4 NS)",
      "start": "2026-05-22T01:00:00Z",
      "end": "2026-05-22T01:30:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.5,
      "modes": [
        "FT8/FT4"
      ],
      "submodes": [
        "FT4"
      ],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "Northern California Contest Club (NCCC)",
      "rules_url": "https://www.ncccsprint.com/ft4ns.html",
      "verified": true,
      "note": "NCCC describes these as 'nominal rules' that may be modified on a weekly basis, and runs formal Ladder seasons interspersed with practice weeks. The 30-minute session slot itself is fixed.",
      "exchange": "Grid square (following NA VHF, WW Digi and ARRL IDC practice)",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "nccc-ns-ft4-20260522T0100@contestcal",
      "start_date": "2026-05-22",
      "mode_families": [
        "Digital",
        "FT8/FT4"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "nccc-ns-rtty",
      "name": "NCCC RTTY Sprint (RTTY NS)",
      "start": "2026-05-22T01:45:00Z",
      "end": "2026-05-22T02:15:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.5,
      "modes": [
        "RTTY"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m"
      ],
      "bands_note": "",
      "sponsor": "Northern California Contest Club (NCCC)",
      "rules_url": "https://ncccsprint.com/rttyns.html",
      "verified": true,
      "note": "NCCC describes these as 'nominal rules' that may be modified on a weekly basis, and runs formal Ladder seasons interspersed with practice weeks. The 30-minute session slot itself is fixed.",
      "exchange": "Serial number + name + QTH (both callsigns required in the exchange)",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "nccc-ns-rtty-20260522T0145@contestcal",
      "start_date": "2026-05-22",
      "mode_families": [
        "RTTY",
        "Digital"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "nccc-ns-cw",
      "name": "NCCC Sprint (NS)",
      "start": "2026-05-22T02:30:00Z",
      "end": "2026-05-22T03:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.5,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m"
      ],
      "bands_note": "",
      "sponsor": "Northern California Contest Club (NCCC)",
      "rules_url": "https://ncccsprint.com/rules.html",
      "verified": true,
      "note": "NCCC describes these as 'nominal rules' that may be modified on a weekly basis, and runs formal Ladder seasons interspersed with practice weeks. The 30-minute session slot itself is fixed.",
      "exchange": "Serial number + name + QTH (both callsigns required in the exchange)",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "nccc-ns-cw-20260522T0230@contestcal",
      "start_date": "2026-05-22",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "k1usn-sst",
      "name": "K1USN Slow Speed Test (SST)",
      "start": "2026-05-22T20:00:00Z",
      "end": "2026-05-22T21:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "",
      "sponsor": "K1USN Radio Club",
      "rules_url": "https://www.k1usn.com/sst_rules.html",
      "verified": true,
      "note": "No formal log submission -- participants post scores to 3830scores.com.",
      "exchange": "Name + state/province/DX country",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "k1usn-sst-20260522T2000@contestcal",
      "start_date": "2026-05-22",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "k1usn-sst",
      "name": "K1USN Slow Speed Test (SST)",
      "start": "2026-05-25T00:00:00Z",
      "end": "2026-05-25T01:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "",
      "sponsor": "K1USN Radio Club",
      "rules_url": "https://www.k1usn.com/sst_rules.html",
      "verified": true,
      "note": "No formal log submission -- participants post scores to 3830scores.com.",
      "exchange": "Name + state/province/DX country",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "k1usn-sst-20260525T0000@contestcal",
      "start_date": "2026-05-25",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "agcw-zap-merit",
      "name": "AGCW ZAP Merit Contest (ZMC)",
      "start": "2026-05-25T17:40:00Z",
      "end": "2026-05-25T18:30:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.83,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "80m"
      ],
      "bands_note": "",
      "sponsor": "AGCW-DL",
      "rules_url": "https://www.agcw.de/contest/tzap/",
      "verified": false,
      "note": "PARTLY UNVERIFIED. The recurrence (every Monday), the 1740 UTC pre-logging opening and the 1800 UTC telegram transmission are all quoted from AGCW. AGCW publishes NO closing time. The 1830 end stored here is a PLACEHOLDER so the record expands -- it is not a sponsor fact and must not be presented as one. Confirm the session length with the ZMC manager before shipping. Points accumulate over a calendar year; logs are due 31 January of the following year.",
      "exchange": "Callsign + date + time + RST (SWLs log RST of both stations in a QSO)",
      "country": "DE",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-12",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "agcw-zap-merit-20260525T1740@contestcal",
      "start_date": "2026-05-25",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "80m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "skcc-sks",
      "name": "SKCC Straight Key Sprint (SKS)",
      "start": "2026-05-27T00:00:00Z",
      "end": "2026-05-27T02:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 2,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m",
        "6m"
      ],
      "bands_note": "Suggested frequencies, one per band",
      "sponsor": "Straight Key Century Club",
      "rules_url": "https://www.skccgroup.com/operating_activities/weekday_sprint/",
      "verified": true,
      "note": "",
      "exchange": "RST + QTH + name + SKCC number",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "skcc-sks-20260527T0000@contestcal",
      "start_date": "2026-05-27",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m",
        "6m"
      ],
      "duration_bucket": "2-12"
    },
    {
      "contest_id": "cwops-cwt",
      "name": "CWops Test (CWT)",
      "start": "2026-05-27T13:00:00Z",
      "end": "2026-05-27T14:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "CWops",
      "rules_url": "https://cwops.org/cwops-tests/",
      "verified": true,
      "note": "",
      "exchange": "Members: name + CWops number. Non-members: name + state/province/DX prefix.",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "cwops-cwt-20260527T1300@contestcal",
      "start_date": "2026-05-27",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "cwops-cwt",
      "name": "CWops Test (CWT)",
      "start": "2026-05-27T19:00:00Z",
      "end": "2026-05-27T20:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "CWops",
      "rules_url": "https://cwops.org/cwops-tests/",
      "verified": true,
      "note": "",
      "exchange": "Members: name + CWops number. Non-members: name + state/province/DX prefix.",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "cwops-cwt-20260527T1900@contestcal",
      "start_date": "2026-05-27",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "cwops-cwt",
      "name": "CWops Test (CWT)",
      "start": "2026-05-28T03:00:00Z",
      "end": "2026-05-28T04:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "CWops",
      "rules_url": "https://cwops.org/cwops-tests/",
      "verified": true,
      "note": "",
      "exchange": "Members: name + CWops number. Non-members: name + state/province/DX prefix.",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "cwops-cwt-20260528T0300@contestcal",
      "start_date": "2026-05-28",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "cwops-cwt",
      "name": "CWops Test (CWT)",
      "start": "2026-05-28T07:00:00Z",
      "end": "2026-05-28T08:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "CWops",
      "rules_url": "https://cwops.org/cwops-tests/",
      "verified": true,
      "note": "",
      "exchange": "Members: name + CWops number. Non-members: name + state/province/DX prefix.",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "cwops-cwt-20260528T0700@contestcal",
      "start_date": "2026-05-28",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "rsgb-80mcc-cw",
      "name": "RSGB 3.5 MHz Club Championship, CW",
      "start": "2026-05-28T19:00:00Z",
      "end": "2026-05-28T20:30:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1.5,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "80m"
      ],
      "bands_note": "3510-3565 kHz at any speed, with 3565-3570 kHz reserved for 15 wpm maximum.",
      "sponsor": "RSGB Contest Committee",
      "rules_url": "https://www.rsgbcc.org/hf/rules/2026/r80mcc.shtml",
      "verified": true,
      "note": "THE DATES ARE NOT ON THE RULES PAGE. RSGB publishes the rules at rules/2026/r80mcc.shtml and the eighteen legs on a separate CGI calendar, and the rules page links to it in so many words. This record holds what that calendar prints; nothing is derived.\n\nTHE CLOCK MOVES IN APRIL and the record says so per date: February and March run 2000-2130 UTC, April to July run 1900-2030. The record's default is the April-July clock because four of each mode's six legs use it, and the two early legs carry their own times. Same mechanism as the Autumn Series, and the second contest to need it.\n\nMANUAL BECAUSE THE LEGS FOLLOW NO ORDINAL. They fall on Mondays, Wednesdays and Thursdays with the weekday rotating through the series, which is exactly the shape an ordinal must not be fitted to.\n\nNON-UK STATIONS MAY ENTER AS INDIVIDUALS -- RSGB states it, which is worth noting beside the AFS and Club Calls contests where entry really is UK&CD only.",
      "exchange": "RS(T) plus a serial number starting at 1 and incrementing by 1.",
      "country": "GB",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-23",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": "2026-05-29T20:30:00Z",
      "uid": "rsgb-80mcc-cw-20260528T1900@contestcal",
      "start_date": "2026-05-28",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "80m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "nccc-ns-ft4",
      "name": "NCCC FT4 Sprint (FT4 NS)",
      "start": "2026-05-29T01:00:00Z",
      "end": "2026-05-29T01:30:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.5,
      "modes": [
        "FT8/FT4"
      ],
      "submodes": [
        "FT4"
      ],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "Northern California Contest Club (NCCC)",
      "rules_url": "https://www.ncccsprint.com/ft4ns.html",
      "verified": true,
      "note": "NCCC describes these as 'nominal rules' that may be modified on a weekly basis, and runs formal Ladder seasons interspersed with practice weeks. The 30-minute session slot itself is fixed.",
      "exchange": "Grid square (following NA VHF, WW Digi and ARRL IDC practice)",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "nccc-ns-ft4-20260529T0100@contestcal",
      "start_date": "2026-05-29",
      "mode_families": [
        "Digital",
        "FT8/FT4"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "nccc-ns-rtty",
      "name": "NCCC RTTY Sprint (RTTY NS)",
      "start": "2026-05-29T01:45:00Z",
      "end": "2026-05-29T02:15:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.5,
      "modes": [
        "RTTY"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m"
      ],
      "bands_note": "",
      "sponsor": "Northern California Contest Club (NCCC)",
      "rules_url": "https://ncccsprint.com/rttyns.html",
      "verified": true,
      "note": "NCCC describes these as 'nominal rules' that may be modified on a weekly basis, and runs formal Ladder seasons interspersed with practice weeks. The 30-minute session slot itself is fixed.",
      "exchange": "Serial number + name + QTH (both callsigns required in the exchange)",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "nccc-ns-rtty-20260529T0145@contestcal",
      "start_date": "2026-05-29",
      "mode_families": [
        "RTTY",
        "Digital"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "nccc-ns-cw",
      "name": "NCCC Sprint (NS)",
      "start": "2026-05-29T02:30:00Z",
      "end": "2026-05-29T03:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.5,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m"
      ],
      "bands_note": "",
      "sponsor": "Northern California Contest Club (NCCC)",
      "rules_url": "https://ncccsprint.com/rules.html",
      "verified": true,
      "note": "NCCC describes these as 'nominal rules' that may be modified on a weekly basis, and runs formal Ladder seasons interspersed with practice weeks. The 30-minute session slot itself is fixed.",
      "exchange": "Serial number + name + QTH (both callsigns required in the exchange)",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "nccc-ns-cw-20260529T0230@contestcal",
      "start_date": "2026-05-29",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "k1usn-sst",
      "name": "K1USN Slow Speed Test (SST)",
      "start": "2026-05-29T20:00:00Z",
      "end": "2026-05-29T21:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "",
      "sponsor": "K1USN Radio Club",
      "rules_url": "https://www.k1usn.com/sst_rules.html",
      "verified": true,
      "note": "No formal log submission -- participants post scores to 3830scores.com.",
      "exchange": "Name + state/province/DX country",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "k1usn-sst-20260529T2000@contestcal",
      "start_date": "2026-05-29",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "cq-wpx-cw",
      "name": "CQ WW WPX Contest, CW",
      "start": "2026-05-30T00:00:00Z",
      "end": "2026-05-31T23:59:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 47.98,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "Only the 1.8, 3.5, 7, 14, 21, and 28 MHz bands may be used",
      "sponsor": "CQ Magazine",
      "rules_url": "https://cqwpx.com/rules/",
      "verified": true,
      "note": "",
      "exchange": "RS(T) report plus a progressive contact serial number starting with 001",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-16",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": "2026-06-02T23:59:00Z",
      "uid": "cq-wpx-cw-20260530T0000@contestcal",
      "start_date": "2026-05-30",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "gte24"
    },
    {
      "contest_id": "k1usn-sst",
      "name": "K1USN Slow Speed Test (SST)",
      "start": "2026-06-01T00:00:00Z",
      "end": "2026-06-01T01:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "",
      "sponsor": "K1USN Radio Club",
      "rules_url": "https://www.k1usn.com/sst_rules.html",
      "verified": true,
      "note": "No formal log submission -- participants post scores to 3830scores.com.",
      "exchange": "Name + state/province/DX country",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "k1usn-sst-20260601T0000@contestcal",
      "start_date": "2026-06-01",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "agcw-zap-merit",
      "name": "AGCW ZAP Merit Contest (ZMC)",
      "start": "2026-06-01T17:40:00Z",
      "end": "2026-06-01T18:30:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.83,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "80m"
      ],
      "bands_note": "",
      "sponsor": "AGCW-DL",
      "rules_url": "https://www.agcw.de/contest/tzap/",
      "verified": false,
      "note": "PARTLY UNVERIFIED. The recurrence (every Monday), the 1740 UTC pre-logging opening and the 1800 UTC telegram transmission are all quoted from AGCW. AGCW publishes NO closing time. The 1830 end stored here is a PLACEHOLDER so the record expands -- it is not a sponsor fact and must not be presented as one. Confirm the session length with the ZMC manager before shipping. Points accumulate over a calendar year; logs are due 31 January of the following year.",
      "exchange": "Callsign + date + time + RST (SWLs log RST of both stations in a QSO)",
      "country": "DE",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-12",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "agcw-zap-merit-20260601T1740@contestcal",
      "start_date": "2026-06-01",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "80m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "rsgb-80mcc-data",
      "name": "RSGB 3.5 MHz Club Championship, Data",
      "start": "2026-06-01T19:00:00Z",
      "end": "2026-06-01T20:30:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1.5,
      "modes": [
        "RTTY",
        "Digital"
      ],
      "submodes": [
        "PSK63"
      ],
      "bands": [
        "80m"
      ],
      "bands_note": "PSK63 3580-3590 kHz; RTTY 3590-3620 kHz.",
      "sponsor": "RSGB Contest Committee",
      "rules_url": "https://www.rsgbcc.org/hf/rules/2026/r80mcc.shtml",
      "verified": true,
      "note": "THE DATES ARE NOT ON THE RULES PAGE. RSGB publishes the rules at rules/2026/r80mcc.shtml and the eighteen legs on a separate CGI calendar, and the rules page links to it in so many words. This record holds what that calendar prints; nothing is derived.\n\nTHE CLOCK MOVES IN APRIL and the record says so per date: February and March run 2000-2130 UTC, April to July run 1900-2030. The record's default is the April-July clock because four of each mode's six legs use it, and the two early legs carry their own times. Same mechanism as the Autumn Series, and the second contest to need it.\n\nMANUAL BECAUSE THE LEGS FOLLOW NO ORDINAL. They fall on Mondays, Wednesdays and Thursdays with the weekday rotating through the series, which is exactly the shape an ordinal must not be fitted to.\n\nNON-UK STATIONS MAY ENTER AS INDIVIDUALS -- RSGB states it, which is worth noting beside the AFS and Club Calls contests where entry really is UK&CD only.",
      "exchange": "RS(T) plus a serial number starting at 1 and incrementing by 1.",
      "country": "GB",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-23",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": "2026-06-02T20:30:00Z",
      "uid": "rsgb-80mcc-data-20260601T1900@contestcal",
      "start_date": "2026-06-01",
      "mode_families": [
        "RTTY",
        "Digital"
      ],
      "band_families": [
        "80m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "ars-spartan-sprint",
      "name": "ARS Spartan Sprint",
      "start": "2026-06-02T00:00:00Z",
      "end": "2026-06-02T02:00:00Z",
      "start_wall": "2026-06-01T20:00:00",
      "end_wall": "2026-06-01T22:00:00",
      "local_rolling": false,
      "timezone": "America/New_York",
      "duration_hours": 2,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "",
      "sponsor": "Adventure Radio Society",
      "rules_url": "https://ars-qrp.com/Spartan_Sprint/Spartan_Sprint.html",
      "verified": true,
      "note": "CORRECTION (anchor): previously encoded as the first TUESDAY of the month. The sponsor's rule is the first MONDAY US local, which lands on Tuesday UTC -- and those are different dates whenever the 1st falls on a Tuesday (Sep and Dec 2026). SPONSOR-ANCHORED LOCAL TIME: ARS publishes no UTC time and states the event 'is always at these Local Times', so the UTC instant is what moves -- 0100Z Tuesday under EST, 0000Z Tuesday under EDT. Resolved through America/New_York rather than hardcoded, so DST is handled. ARS lists Eastern, Central, Mountain and Pacific times that are the same instant in every zone that observes DST; Arizona, which does not, is the one place the sponsor's own table is inconsistent.",
      "exchange": "RST + state/province + power output",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "ars-spartan-sprint-20260602T0000@contestcal",
      "start_date": "2026-06-02",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "2-12"
    },
    {
      "contest_id": "cwops-cwt",
      "name": "CWops Test (CWT)",
      "start": "2026-06-03T13:00:00Z",
      "end": "2026-06-03T14:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "CWops",
      "rules_url": "https://cwops.org/cwops-tests/",
      "verified": true,
      "note": "",
      "exchange": "Members: name + CWops number. Non-members: name + state/province/DX prefix.",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "cwops-cwt-20260603T1300@contestcal",
      "start_date": "2026-06-03",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "cwops-cwt",
      "name": "CWops Test (CWT)",
      "start": "2026-06-03T19:00:00Z",
      "end": "2026-06-03T20:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "CWops",
      "rules_url": "https://cwops.org/cwops-tests/",
      "verified": true,
      "note": "",
      "exchange": "Members: name + CWops number. Non-members: name + state/province/DX prefix.",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "cwops-cwt-20260603T1900@contestcal",
      "start_date": "2026-06-03",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "sarl-top-band-qso",
      "name": "SARL Top Band QSO Contest",
      "start": "2026-06-03T22:01:00Z",
      "end": "2026-06-07T21:59:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 95.97,
      "modes": [
        "CW",
        "Digital",
        "SSB"
      ],
      "submodes": [],
      "bands": [
        "160m"
      ],
      "bands_note": "CW 1 810-1 838 kHz; Digital 1 838-1 843 kHz; Phone 1 844-2 000 kHz.",
      "sponsor": "SARL",
      "rules_url": "https://mysarl.org.za/wp-content/uploads/2025/12/2026-SARL-Contest-Manual-Version-1.1-2025-12-15.pdf",
      "verified": false,
      "note": "VERIFIED FALSE, AND ENCODED AS MANUAL, FOR TWO SEPARATE REASONS.\n\n(1) SARL'S OWN TWO PAGES DISAGREE. The rules section says the contest starts '22:01 UTC 4 June (00:01 CAT) Thursday 4 June', but 22:01 UTC on Thursday 4 June is 00:01 CAT on FRIDAY 5 June. SARL's Date Ordered List resolves it: the start is Wednesday 3 June at 22:01 UTC, which is 00:01 CAT on Thursday 4 June. The date table is self-consistent and the prose is not, so the table is what is encoded.\n\n(2) 'THE FIRST FULL WEEK OF JUNE' HAS TWO READINGS THAT DIVERGE NEXT YEAR. If a full week is a Monday-to-Sunday wholly inside June, then in 2027 -- when 1 June is a Tuesday -- the first full week is 7-13 June and the Thursday is the 10th. If it means the first week containing the whole Thursday-to-Sunday block, the Thursday is the 3rd. The two agree in 2026 and differ in 2027, so no ordinal rule is encoded: only the date SARL published. Years SARL has not announced are absent rather than guessed. Ask SARL which reading is intended and this becomes a rule.\n\nlog_format and log_deadline_days are absent: this pass read each contest's Aim, Dates, Frequencies and Exchange sections and did not read its Log Sheets section, so neither is recorded rather than assumed from SARL's other contests.",
      "exchange": "RS, RSQ or RST report and your 4-character grid square (for example KG30). In digital modes the counterparty's grid square is not mandatory.",
      "country": "ZA",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-19",
      "can_enter": false,
      "eligibility_scope": "entity_list",
      "eligibility_reason": "Entry limited to ZS, V5, A2, Z2, 3DA, C9, 7P. K stations may be worked but cannot submit an entry.",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "sarl-top-band-qso-20260603T2201@contestcal",
      "start_date": "2026-06-03",
      "mode_families": [
        "CW",
        "SSB",
        "Digital"
      ],
      "band_families": [
        "160m"
      ],
      "duration_bucket": "gte24"
    },
    {
      "contest_id": "cwops-cwt",
      "name": "CWops Test (CWT)",
      "start": "2026-06-04T03:00:00Z",
      "end": "2026-06-04T04:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "CWops",
      "rules_url": "https://cwops.org/cwops-tests/",
      "verified": true,
      "note": "",
      "exchange": "Members: name + CWops number. Non-members: name + state/province/DX prefix.",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "cwops-cwt-20260604T0300@contestcal",
      "start_date": "2026-06-04",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "cwops-cwt",
      "name": "CWops Test (CWT)",
      "start": "2026-06-04T07:00:00Z",
      "end": "2026-06-04T08:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "CWops",
      "rules_url": "https://cwops.org/cwops-tests/",
      "verified": true,
      "note": "",
      "exchange": "Members: name + CWops number. Non-members: name + state/province/DX prefix.",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "cwops-cwt-20260604T0700@contestcal",
      "start_date": "2026-06-04",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "skcc-skse",
      "name": "SKCC Straight Key Sprint Europe (SKSE)",
      "start": "2026-06-04T19:00:00Z",
      "end": "2026-06-04T21:00:00Z",
      "start_wall": "2026-06-04T21:00:00",
      "end_wall": "2026-06-04T23:00:00",
      "local_rolling": false,
      "timezone": "Europe/Berlin",
      "duration_hours": 2,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m",
        "6m"
      ],
      "bands_note": "160 through 6 m excluding the WARC bands -- SKCC names 60, 30, 17 and 12 m as excluded.",
      "sponsor": "Straight Key Century Club",
      "rules_url": "https://www.skccgroup.com/operating_activities/skse/",
      "verified": true,
      "note": "SKCC PRINTS TWO UTC TIMES AND THE CONTEST HAS ONE LOCAL TIME. 2000Z from November to March and 1900Z from April to October are both 2100 in central Europe: CET is UTC+1 and CEST is UTC+2. So this is not a contest that changes its hour twice a year, it is a contest at nine in the evening that Europe's clocks move around, and it is recorded the way the sponsor means it -- `timezone: Europe/Berlin` with wall_clock times, exactly as the ARS Spartan Sprint is recorded in New York.\n\nTHAT READING IS TESTABLE AND IT PASSES ON THE MONTHS THAT DECIDE IT. Europe changes clocks on the last Sunday of March and of October, and the first Thursday of both months falls on the near side of the change: March is still CET and resolves to 2000Z, April is CEST and resolves to 1900Z, October is still CEST at 1900Z, November is CET at 2000Z. All four match SKCC's own table, which is what makes this one rule rather than two.\n\nEncoding it as two records split by month -- winter and summer -- would have produced two entries with the same name and hidden the reason. Encoding one UTC time would have been wrong for five months of the year.\n\nStraight keys, sideswipers and bugs only: no keyer, no keyboard. That is the club's whole premise rather than a category.\n\nThe fifteen-minute QRS extensions at each end are not in the window: they are an invitation to slow operators rather than part of the scored period.",
      "exchange": "RST, QTH, the operator's name and the SKCC number. Non-members send 'none' for the number.",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-23",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": "2026-06-11T21:00:00Z",
      "uid": "skcc-skse-20260604T1900@contestcal",
      "start_date": "2026-06-04",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m",
        "6m"
      ],
      "duration_bucket": "2-12"
    },
    {
      "contest_id": "podxs-tdw",
      "name": "PODXS 070 Club Three Day Weekend (TDW)",
      "start": "2026-06-05T00:00:00Z",
      "end": "2026-06-07T23:59:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 71.98,
      "modes": [
        "Digital"
      ],
      "submodes": [
        "PSK31"
      ],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "PODXS 070 Club",
      "rules_url": "https://www.podxs070.com/o7o-club-sponsored-contests/three-day-weekend",
      "verified": true,
      "note": "'First weekend ENDING in June' is why this anchors on the first SUNDAY of June and counts backwards to the Friday, rather than anchoring on a Friday in June. The club's own table proves the distinction matters: it lists 31-May-30 and 30-May-31, where the contest starts in May.",
      "exchange": "Members: 070 Club number. Non-members: 0000 in place of a club number.",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-12",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": "2026-06-14T23:59:00Z",
      "uid": "podxs-tdw-20260605T0000@contestcal",
      "start_date": "2026-06-05",
      "mode_families": [
        "Digital"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m",
        "6m"
      ],
      "duration_bucket": "gte24"
    },
    {
      "contest_id": "nccc-ns-ft4",
      "name": "NCCC FT4 Sprint (FT4 NS)",
      "start": "2026-06-05T01:00:00Z",
      "end": "2026-06-05T01:30:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.5,
      "modes": [
        "FT8/FT4"
      ],
      "submodes": [
        "FT4"
      ],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "Northern California Contest Club (NCCC)",
      "rules_url": "https://www.ncccsprint.com/ft4ns.html",
      "verified": true,
      "note": "NCCC describes these as 'nominal rules' that may be modified on a weekly basis, and runs formal Ladder seasons interspersed with practice weeks. The 30-minute session slot itself is fixed.",
      "exchange": "Grid square (following NA VHF, WW Digi and ARRL IDC practice)",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "nccc-ns-ft4-20260605T0100@contestcal",
      "start_date": "2026-06-05",
      "mode_families": [
        "Digital",
        "FT8/FT4"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "nccc-ns-rtty",
      "name": "NCCC RTTY Sprint (RTTY NS)",
      "start": "2026-06-05T01:45:00Z",
      "end": "2026-06-05T02:15:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.5,
      "modes": [
        "RTTY"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m"
      ],
      "bands_note": "",
      "sponsor": "Northern California Contest Club (NCCC)",
      "rules_url": "https://ncccsprint.com/rttyns.html",
      "verified": true,
      "note": "NCCC describes these as 'nominal rules' that may be modified on a weekly basis, and runs formal Ladder seasons interspersed with practice weeks. The 30-minute session slot itself is fixed.",
      "exchange": "Serial number + name + QTH (both callsigns required in the exchange)",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "nccc-ns-rtty-20260605T0145@contestcal",
      "start_date": "2026-06-05",
      "mode_families": [
        "RTTY",
        "Digital"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "nccc-ns-cw",
      "name": "NCCC Sprint (NS)",
      "start": "2026-06-05T02:30:00Z",
      "end": "2026-06-05T03:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.5,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m"
      ],
      "bands_note": "",
      "sponsor": "Northern California Contest Club (NCCC)",
      "rules_url": "https://ncccsprint.com/rules.html",
      "verified": true,
      "note": "NCCC describes these as 'nominal rules' that may be modified on a weekly basis, and runs formal Ladder seasons interspersed with practice weeks. The 30-minute session slot itself is fixed.",
      "exchange": "Serial number + name + QTH (both callsigns required in the exchange)",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "nccc-ns-cw-20260605T0230@contestcal",
      "start_date": "2026-06-05",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "k1usn-sst",
      "name": "K1USN Slow Speed Test (SST)",
      "start": "2026-06-05T20:00:00Z",
      "end": "2026-06-05T21:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "",
      "sponsor": "K1USN Radio Club",
      "rules_url": "https://www.k1usn.com/sst_rules.html",
      "verified": true,
      "note": "No formal log submission -- participants post scores to 3830scores.com.",
      "exchange": "Name + state/province/DX country",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "k1usn-sst-20260605T2000@contestcal",
      "start_date": "2026-06-05",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "wia-vk-shires",
      "name": "VK Shires Contest",
      "start": "2026-06-06T00:00:00Z",
      "end": "2026-06-07T00:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 24,
      "modes": [
        "SSB",
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "160 Metres, 80 Metres, 40 Metres, 20 Metres 15 Metres, 10 Metres. Please note there is 75m DX window permitted for VK stations",
      "sponsor": "WIA",
      "rules_url": "https://www.wia.org.au/members/contests/wavks/",
      "verified": true,
      "note": "The recurrence is anchored to the second Monday of June -- a public holiday in most of Australia -- and the contest runs on the Saturday and Sunday before it, which is why the offsets are negative. Foundation and other QRP entrants have their own category at 10 watts.",
      "exchange": "VK stations send RS(T) and their VK shire abbreviation; stations outside VK send RS(T) and their CQ zone",
      "country": "AU",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-17",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": "2026-06-21T00:00:00Z",
      "uid": "wia-vk-shires-20260606T0000@contestcal",
      "start_date": "2026-06-06",
      "mode_families": [
        "CW",
        "SSB"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "gte24"
    },
    {
      "contest_id": "lrmd-wal",
      "name": "Lithuanian Mobile and Portable Championship (WAL Contest)",
      "start": "2026-06-06T06:00:00Z",
      "end": "2026-06-06T08:59:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 2.98,
      "modes": [
        "CW",
        "SSB"
      ],
      "submodes": [],
      "bands": [
        "80m"
      ],
      "bands_note": "3530-3600 kHz CW and 3600-3700 kHz SSB/CW; 3600-3610 kHz is reserved as the mobile calling segment.",
      "sponsor": "LRMD",
      "rules_url": "https://lrmd.lt/mobiliuju-portabiliuju/",
      "verified": true,
      "note": "LRMD states this one as a date, not a rule -- 'Laikas: 2026 m. birzelio 06 d. (sestadieni)' -- so the record is manual and covers 2026 only. The times are given in UTC first with Lithuanian local time in brackets, so there is no wall-clock question here, unlike the neighbouring Baltic contests. The three hourly rounds are a scoring device inside one continuous span.",
      "exchange": "Stations in Lithuania send RS(T) and their WAL square (599A18); stations elsewhere send RS(T) and the letters DX (599DX).",
      "country": "LT",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-19",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": "2026-06-20T08:59:00Z",
      "uid": "lrmd-wal-20260606T0600@contestcal",
      "start_date": "2026-06-06",
      "mode_families": [
        "CW",
        "SSB"
      ],
      "band_families": [
        "80m"
      ],
      "duration_bucket": "2-12"
    },
    {
      "contest_id": "irts-cw-field-day",
      "name": "IRTS CW Field Day",
      "start": "2026-06-06T15:00:00Z",
      "end": "2026-06-07T15:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 24,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "1.8, 3.5, 7, 14, 21 and 28 MHz.",
      "sponsor": "IRTS",
      "rules_url": "https://www.irts.ie/cgi/st.cgi?r_hffdrules.html",
      "verified": true,
      "note": "IT FALLS ON THE SAME WEEKEND AS RSGB'S, AND THAT IS NOT A COINCIDENCE. Both societies run their leg of the IARU Region 1 Field Day: RSGB's National Field Day is the first Saturday of June and IRTS's CW Field Day is the first full weekend, and the same pairing repeats in September. They are separate contests with separate rules, separate logs and separate results -- which is why both are here rather than one.\n\nThe pairing also settles what the IARU Region 1 Field Day IS: a framework each member society runs its own contest inside, not a contest IARU publishes rules for. DARC lists it on their calendar and says it is IARU's; UBA lists it too; IARU Region 1's own site publishes rules for the HF Championship and nothing else. Nobody claims it, so there is nothing to encode under IARU's name.\n\nENTRY IS EI ONLY AND PORTABLE ONLY: 'Any individual or group operating in EI complying with Rule 3.6 of the General Rules and operating portable on a site'. Stations elsewhere may be worked but cannot enter.",
      "exchange": "A signal report and a serial number starting at 001.",
      "country": "IE",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-23",
      "can_enter": false,
      "eligibility_scope": "entity_list",
      "eligibility_reason": "Entry limited to EI. K stations may be worked but cannot submit an entry.",
      "works": "everyone",
      "practical": "",
      "log_due": "2026-06-21T15:00:00Z",
      "uid": "irts-cw-field-day-20260606T1500@contestcal",
      "start_date": "2026-06-06",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "gte24"
    },
    {
      "contest_id": "rsgb-nfd-cw",
      "name": "RSGB National Field Day (CW)",
      "start": "2026-06-06T15:00:00Z",
      "end": "2026-06-07T15:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 24,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "160, 80, 40, 20, 15 and 10 m, CW only.",
      "sponsor": "RSGB Contest Committee",
      "rules_url": "https://www.rsgbcc.org/hf/rules/2026/rnfd.shtml",
      "verified": true,
      "note": "2024 IS THE YEAR THAT SETTLES THE RULE. 1 June 2024 was itself a Saturday and RSGB used it, so this contest has NO first-of-the-month exception -- unlike the RSGB AFS contests, where 1 January 2022 was a Saturday and the contest moved a week. Two contests from the same committee, two different answers, and only the published dates distinguish them. RSGB keeps a rules page per year, so its own dates check its own rule. Four years were read for this record -- 2023, 2024, 2025 and 2026 -- and the recurrence reproduces all of them.",
      "exchange": "RS(T) plus a serial number starting at 1 and incrementing by 1, irrespective of band.",
      "country": "GB",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-20",
      "can_enter": false,
      "eligibility_scope": "entity_list",
      "eligibility_reason": "Entry limited to G. K stations may be worked but cannot submit an entry.",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "rsgb-nfd-cw-20260606T1500@contestcal",
      "start_date": "2026-06-06",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "gte24"
    },
    {
      "contest_id": "uska-field-day-cw",
      "name": "USKA Field Day (CW)",
      "start": "2026-06-06T15:00:00Z",
      "end": "2026-06-07T14:59:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 23.98,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "",
      "sponsor": "USKA",
      "rules_url": "https://uska.ch/wp-content/uploads/2026/05/2026-02-Reglement-fuer-den-Field-Day-Ausgabe-Mai-2026-DE.pdf",
      "verified": true,
      "note": "One of USKA's two Field Day legs; they share a Reglement and differ only in month, mode and start time, so they are two records. The first full weekend of June 2026 is 6-7 June and of September 2026 is 5-6 September, both of which USKA's KW-Contest page prints.",
      "exchange": "RS(T) and a serial number of at least three digits. With fixed stations the report alone is enough.",
      "country": "CH",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-19",
      "can_enter": false,
      "eligibility_scope": "entity_list",
      "eligibility_reason": "Entry limited to HB. K stations may be worked but cannot submit an entry.",
      "works": "everyone",
      "practical": "",
      "log_due": "2026-06-15T14:59:00Z",
      "uid": "uska-field-day-cw-20260606T1500@contestcal",
      "start_date": "2026-06-06",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "12-24"
    },
    {
      "contest_id": "arrl-digital",
      "name": "ARRL International Digital Contest",
      "start": "2026-06-06T18:00:00Z",
      "end": "2026-06-07T23:59:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 29.98,
      "modes": [
        "Digital"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m",
        "6m"
      ],
      "bands_note": "Technicians are limited by FCC rules to 10 m and 6 m",
      "sponsor": "ARRL",
      "rules_url": "http://www.arrl.org/arrl-digital-contest",
      "verified": true,
      "note": "",
      "exchange": "",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-21",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "arrl-digital-20260606T1800@contestcal",
      "start_date": "2026-06-06",
      "mode_families": [
        "Digital"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m",
        "6m"
      ],
      "duration_bucket": "gte24"
    },
    {
      "contest_id": "k1usn-sst",
      "name": "K1USN Slow Speed Test (SST)",
      "start": "2026-06-08T00:00:00Z",
      "end": "2026-06-08T01:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "",
      "sponsor": "K1USN Radio Club",
      "rules_url": "https://www.k1usn.com/sst_rules.html",
      "verified": true,
      "note": "No formal log submission -- participants post scores to 3830scores.com.",
      "exchange": "Name + state/province/DX country",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "k1usn-sst-20260608T0000@contestcal",
      "start_date": "2026-06-08",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "agcw-zap-merit",
      "name": "AGCW ZAP Merit Contest (ZMC)",
      "start": "2026-06-08T17:40:00Z",
      "end": "2026-06-08T18:30:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.83,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "80m"
      ],
      "bands_note": "",
      "sponsor": "AGCW-DL",
      "rules_url": "https://www.agcw.de/contest/tzap/",
      "verified": false,
      "note": "PARTLY UNVERIFIED. The recurrence (every Monday), the 1740 UTC pre-logging opening and the 1800 UTC telegram transmission are all quoted from AGCW. AGCW publishes NO closing time. The 1830 end stored here is a PLACEHOLDER so the record expands -- it is not a sponsor fact and must not be presented as one. Confirm the session length with the ZMC manager before shipping. Points accumulate over a calendar year; logs are due 31 January of the following year.",
      "exchange": "Callsign + date + time + RST (SWLs log RST of both stations in a QSO)",
      "country": "DE",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-12",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "agcw-zap-merit-20260608T1740@contestcal",
      "start_date": "2026-06-08",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "80m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "darc-cw-ausbildungscontest",
      "name": "DARC CW-Ausbildungscontest",
      "start": "2026-06-09T18:00:00Z",
      "end": "2026-06-09T18:59:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.98,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [],
      "bands_note": "",
      "sponsor": "DARC",
      "rules_url": "https://www.darc.de/der-club/referate/conteste/cwa/darc-cw-ausbildungscontest/",
      "verified": false,
      "note": "IT COMPLETES A PATTERN DARC DESCRIBES BUT DOES NOT SPELL OUT. Their three short contests take one month of each quarter in turn, all on a Tuesday evening: the RTTY-Kurzcontest in months 1/4/7/10, the FT4 Contest in 2/5/8/11, and this one in 3/6/9/12. All four of DARC's published dates are the SECOND TUESDAY of those months. That is what 'reiht sich vom Termin her in die anderen ... ein' means, and the arithmetic confirms it rather than assuming it.\n\nVERIFIED FALSE because the page that describes the series is prose about teaching CW rather than an Ausschreibung: no bands, no exchange, no deadline. BANDS ARE UNRECORDED, so every band filter excludes this record.\n\nWHERE THE BANDS WOULD HAVE BEEN: Not stated on the page that describes the series. That sentence sits here rather than in bands_note, because bands_note is for a sponsor's own wording ABOUT a band list and must never stand in for one -- a test enforces it, and it caught this.",
      "exchange": "",
      "country": "DE",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-23",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "darc-cw-ausbildungscontest-20260609T1800@contestcal",
      "start_date": "2026-06-09",
      "mode_families": [
        "CW"
      ],
      "band_families": [],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "rep-portugal-day-vhf-uhf",
      "name": "Concurso Dia de Portugal VHF/UHF",
      "start": "2026-06-10T12:00:00Z",
      "end": "2026-06-10T18:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 6,
      "modes": [
        "SSB",
        "CW"
      ],
      "submodes": [],
      "bands": [
        "2m",
        "70cm",
        "23cm",
        "13cm"
      ],
      "bands_note": "As recomendadas nos planos de banda da IARU, Região 1, (2m=144MHz; 4m=70 MHz; 70cm=432MHz; 23cm=1200MHz e 13cm=2300 MHz) -- the IARU Region 1 band plans. REP's list includes 4m (70 MHz), which is not in this catalog's band vocabulary and so is recorded here rather than in bands.",
      "sponsor": "REP",
      "rules_url": "https://concursos.rep.pt/concurso-dia-de-portugal-vhf-uhf/",
      "verified": true,
      "note": "REP PUBLISHES TWO CONTRADICTORY RULES FOR THIS CONTEST AND BOTH ARE LIVE. concursos.rep.pt, the portal linked from rep.pt's own front page, says 10 June every year, lists 2m/4m/70cm/23cm/13cm, weights points per band and sets the log deadline at 20 June. portugaldaycontest.rep.pt/regras_vhf_uhf.php still says 'no 2º Sábado do mês de junho de cada ano, (8 de Junho de 2024)', lists only 2m/70cm/23cm, and sets the deadline at 30 June. The two disagree about the date in every year where 10 June is not the second Saturday. The fixed date is encoded because it is the one REP actually ran: 10 June 2025 was a Tuesday and REP's logs-received post for the 2025 running is dated that day, whereas the second Saturday of June 2025 was the 14th. The superseded page is recorded here rather than silently ignored. Because both the contest and the deadline are fixed dates, log_deadline_days is exactly 10 in every year -- unlike REP's two other contests, whose deadlines are calendar dates that do not sit a constant span after the contest. Modes: REP writes 'Fonia' (phone) rather than SSB specifically; SSB is the catalog's only phone token.",
      "exchange": "Callsign, RS(T), a number beginning 001 and the full QTH locator (for example IM58is). The log must also carry the UTC time and the date of each contact.",
      "country": "PT",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-19",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": "2026-06-20T18:00:00Z",
      "uid": "rep-portugal-day-vhf-uhf-20260610T1200@contestcal",
      "start_date": "2026-06-10",
      "mode_families": [
        "CW",
        "SSB"
      ],
      "band_families": [
        "VHF+"
      ],
      "duration_bucket": "2-12"
    },
    {
      "contest_id": "cwops-cwt",
      "name": "CWops Test (CWT)",
      "start": "2026-06-10T13:00:00Z",
      "end": "2026-06-10T14:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "CWops",
      "rules_url": "https://cwops.org/cwops-tests/",
      "verified": true,
      "note": "",
      "exchange": "Members: name + CWops number. Non-members: name + state/province/DX prefix.",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "cwops-cwt-20260610T1300@contestcal",
      "start_date": "2026-06-10",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "cwops-cwt",
      "name": "CWops Test (CWT)",
      "start": "2026-06-10T19:00:00Z",
      "end": "2026-06-10T20:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "CWops",
      "rules_url": "https://cwops.org/cwops-tests/",
      "verified": true,
      "note": "",
      "exchange": "Members: name + CWops number. Non-members: name + state/province/DX prefix.",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "cwops-cwt-20260610T1900@contestcal",
      "start_date": "2026-06-10",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "rsgb-80mcc-cw",
      "name": "RSGB 3.5 MHz Club Championship, CW",
      "start": "2026-06-10T19:00:00Z",
      "end": "2026-06-10T20:30:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1.5,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "80m"
      ],
      "bands_note": "3510-3565 kHz at any speed, with 3565-3570 kHz reserved for 15 wpm maximum.",
      "sponsor": "RSGB Contest Committee",
      "rules_url": "https://www.rsgbcc.org/hf/rules/2026/r80mcc.shtml",
      "verified": true,
      "note": "THE DATES ARE NOT ON THE RULES PAGE. RSGB publishes the rules at rules/2026/r80mcc.shtml and the eighteen legs on a separate CGI calendar, and the rules page links to it in so many words. This record holds what that calendar prints; nothing is derived.\n\nTHE CLOCK MOVES IN APRIL and the record says so per date: February and March run 2000-2130 UTC, April to July run 1900-2030. The record's default is the April-July clock because four of each mode's six legs use it, and the two early legs carry their own times. Same mechanism as the Autumn Series, and the second contest to need it.\n\nMANUAL BECAUSE THE LEGS FOLLOW NO ORDINAL. They fall on Mondays, Wednesdays and Thursdays with the weekday rotating through the series, which is exactly the shape an ordinal must not be fitted to.\n\nNON-UK STATIONS MAY ENTER AS INDIVIDUALS -- RSGB states it, which is worth noting beside the AFS and Club Calls contests where entry really is UK&CD only.",
      "exchange": "RS(T) plus a serial number starting at 1 and incrementing by 1.",
      "country": "GB",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-23",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": "2026-06-11T20:30:00Z",
      "uid": "rsgb-80mcc-cw-20260610T1900@contestcal",
      "start_date": "2026-06-10",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "80m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "cwops-cwt",
      "name": "CWops Test (CWT)",
      "start": "2026-06-11T03:00:00Z",
      "end": "2026-06-11T04:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "CWops",
      "rules_url": "https://cwops.org/cwops-tests/",
      "verified": true,
      "note": "",
      "exchange": "Members: name + CWops number. Non-members: name + state/province/DX prefix.",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "cwops-cwt-20260611T0300@contestcal",
      "start_date": "2026-06-11",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "cwops-cwt",
      "name": "CWops Test (CWT)",
      "start": "2026-06-11T07:00:00Z",
      "end": "2026-06-11T08:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "CWops",
      "rules_url": "https://cwops.org/cwops-tests/",
      "verified": true,
      "note": "",
      "exchange": "Members: name + CWops number. Non-members: name + state/province/DX prefix.",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "cwops-cwt-20260611T0700@contestcal",
      "start_date": "2026-06-11",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "nccc-ns-ft4",
      "name": "NCCC FT4 Sprint (FT4 NS)",
      "start": "2026-06-12T01:00:00Z",
      "end": "2026-06-12T01:30:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.5,
      "modes": [
        "FT8/FT4"
      ],
      "submodes": [
        "FT4"
      ],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "Northern California Contest Club (NCCC)",
      "rules_url": "https://www.ncccsprint.com/ft4ns.html",
      "verified": true,
      "note": "NCCC describes these as 'nominal rules' that may be modified on a weekly basis, and runs formal Ladder seasons interspersed with practice weeks. The 30-minute session slot itself is fixed.",
      "exchange": "Grid square (following NA VHF, WW Digi and ARRL IDC practice)",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "nccc-ns-ft4-20260612T0100@contestcal",
      "start_date": "2026-06-12",
      "mode_families": [
        "Digital",
        "FT8/FT4"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "nccc-ns-rtty",
      "name": "NCCC RTTY Sprint (RTTY NS)",
      "start": "2026-06-12T01:45:00Z",
      "end": "2026-06-12T02:15:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.5,
      "modes": [
        "RTTY"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m"
      ],
      "bands_note": "",
      "sponsor": "Northern California Contest Club (NCCC)",
      "rules_url": "https://ncccsprint.com/rttyns.html",
      "verified": true,
      "note": "NCCC describes these as 'nominal rules' that may be modified on a weekly basis, and runs formal Ladder seasons interspersed with practice weeks. The 30-minute session slot itself is fixed.",
      "exchange": "Serial number + name + QTH (both callsigns required in the exchange)",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "nccc-ns-rtty-20260612T0145@contestcal",
      "start_date": "2026-06-12",
      "mode_families": [
        "RTTY",
        "Digital"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "nccc-ns-cw",
      "name": "NCCC Sprint (NS)",
      "start": "2026-06-12T02:30:00Z",
      "end": "2026-06-12T03:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.5,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m"
      ],
      "bands_note": "",
      "sponsor": "Northern California Contest Club (NCCC)",
      "rules_url": "https://ncccsprint.com/rules.html",
      "verified": true,
      "note": "NCCC describes these as 'nominal rules' that may be modified on a weekly basis, and runs formal Ladder seasons interspersed with practice weeks. The 30-minute session slot itself is fixed.",
      "exchange": "Serial number + name + QTH (both callsigns required in the exchange)",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "nccc-ns-cw-20260612T0230@contestcal",
      "start_date": "2026-06-12",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "k1usn-sst",
      "name": "K1USN Slow Speed Test (SST)",
      "start": "2026-06-12T20:00:00Z",
      "end": "2026-06-12T21:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "",
      "sponsor": "K1USN Radio Club",
      "rules_url": "https://www.k1usn.com/sst_rules.html",
      "verified": true,
      "note": "No formal log submission -- participants post scores to 3830scores.com.",
      "exchange": "Name + state/province/DX country",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "k1usn-sst-20260612T2000@contestcal",
      "start_date": "2026-06-12",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "orari-north-jakarta-dx",
      "name": "North Jakarta ORARI DX Contest",
      "start": "2026-06-13T00:00:00Z",
      "end": "2026-06-13T23:59:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 23.98,
      "modes": [
        "SSB"
      ],
      "submodes": [],
      "bands": [
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "Contact should made on 3.5, 7, 14, 21 and 28 MHz. No WARC bands.",
      "sponsor": "ORARI",
      "rules_url": "https://www.oraricontest.id/rules/",
      "verified": true,
      "note": "Run by ORARI Lokal Jakarta Utara to mark ORARI's anniversary. There is one entry category, 'Single Operator All Band Any Power', with 'Power maximal depend on the regulations in each Country', so no power ladder is recorded.",
      "exchange": "Indonesian stations send 5/9 and ORARI; stations outside Indonesia send 5/9 and DX",
      "country": "ID",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-17",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": "2026-06-20T23:59:00Z",
      "uid": "orari-north-jakarta-dx-20260613T0000@contestcal",
      "start_date": "2026-06-13",
      "mode_families": [
        "SSB"
      ],
      "band_families": [
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "12-24"
    },
    {
      "contest_id": "sarl-vhf-uhf-fm",
      "name": "SARL VHF/UHF FM Mode Contest",
      "start": "2026-06-13T10:00:00Z",
      "end": "2026-06-13T13:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 3,
      "modes": [
        "FM"
      ],
      "submodes": [],
      "bands": [
        "6m",
        "2m",
        "70cm"
      ],
      "bands_note": "FM mode on the 6m, 2m and 70cm bands.",
      "sponsor": "SARL",
      "rules_url": "https://mysarl.org.za/wp-content/uploads/2025/12/2026-SARL-Contest-Manual-Version-1.1-2025-12-15.pdf",
      "verified": true,
      "note": "THE RECORD THAT PUT FM IN THE MODE VOCABULARY. This contest is FM ONLY, and until 2026-08-19 this catalog had no FM token -- it used SSB as a general phone token, which was serviceable while every phone contest also allowed SSB. Recording an FM-only contest as SSB would have stated something SARL does not permit, which is precisely the overstatement the mode rules exist to prevent, so FM was added to CATALOG_MODES in both engines and to the filter families instead. Ten records that had been carrying FM in submodes moved it into modes in the same commit.\n\nTwo legs on one record: both run 10:00-13:00 UTC and differ only in their anchor, and the anchors are different SHAPES -- the second Saturday of June and the LAST Saturday of October -- which a composite holds without trouble.\n\nSARL explains the timing: 'The dates are three weeks after the RAE Radio Amateur Examination', which is why the contest is aimed at newly licensed amateurs. That is context rather than a rule; the ordinals are what is encoded.\n\nNo log deadline was read in this pass, so none is recorded.",
      "exchange": "A signal report and your full six-character Maidenhead locator. When working a mobile station the contesting station must obtain its grid position.",
      "country": "ZA",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-19",
      "can_enter": false,
      "eligibility_scope": "entity_list",
      "eligibility_reason": "Entry limited to ZS, V5, A2, Z2, C9, 7P, 3DA. K stations may be worked but cannot submit an entry.",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "sarl-vhf-uhf-fm-20260613T1000@contestcal",
      "start_date": "2026-06-13",
      "mode_families": [
        "FM"
      ],
      "band_families": [
        "6m",
        "VHF+"
      ],
      "duration_bucket": "2-12"
    },
    {
      "contest_id": "ari-contest-sezioni-hf",
      "name": "ARI Contest delle Sezioni HF",
      "start": "2026-06-13T12:00:00Z",
      "end": "2026-06-14T11:59:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 23.98,
      "modes": [
        "CW",
        "SSB",
        "RTTY"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "10 to 160 m (10-80 m on RTTY), WARC bands excluded",
      "sponsor": "ARI",
      "rules_url": "https://contest.ari.it/hf_web/rules/arisezionihf_it.pdf",
      "verified": true,
      "note": "CONTRADICTION IN ARI'S OWN PDF, RECORDED RATHER THAN RECONCILED: the document still carries a 'Per il 2018' clause alongside its own '20 Giugno 2026' reference, so parts of it have not been revised. The recurrence and times quoted above are stated as standing rules, not as one edition's dates, and reproduce ARI's own 13-14 June 2026.",
      "exchange": "RS(T) + the ASC code of the entrant's ARI section.",
      "country": "IT",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-18",
      "can_enter": false,
      "eligibility_scope": "entity_list",
      "eligibility_reason": "Entry limited to I. K stations may be worked but cannot submit an entry.",
      "works": "everyone",
      "practical": "",
      "log_due": "2026-06-20T11:59:00Z",
      "uid": "ari-contest-sezioni-hf-20260613T1200@contestcal",
      "start_date": "2026-06-13",
      "mode_families": [
        "CW",
        "SSB",
        "RTTY",
        "Digital"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "12-24"
    },
    {
      "contest_id": "rep-portugal-day-hf",
      "name": "Portugal Day Contest (HF)",
      "start": "2026-06-13T12:00:00Z",
      "end": "2026-06-14T11:59:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 23.98,
      "modes": [
        "SSB",
        "CW"
      ],
      "submodes": [],
      "bands": [
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "10, 15, 20, 40 and 80 meter bands, fully respecting licensing rules of each country. Observance of established band plans is strongly encouraged.",
      "sponsor": "REP",
      "rules_url": "https://concursos.rep.pt/portugal-day-contest-hf/",
      "verified": true,
      "note": "log_deadline_days is deliberately absent. REP states a fixed calendar deadline -- 'no later than June 30th of the same year' -- not a span, and June 30 is 15 days after the 2025 running but 16 after the 2026 one, so any single number would be wrong in most years. REP's 2030 date is what pins the recurrence, and it rules out the reading that would otherwise be tempting: 1 June 2030 is itself a Saturday, so a reader who did not count a weekend opening on the 1st would make 8-9 June the first and 15-16 the second. REP publishes 8-9 June, so the weekend opening on the 1st counts. Nothing turns on full weekend versus second Saturday here -- the two readings give the same date in every year from 2025 to 2060, because only a Saturday falling on a month's LAST day fails to open a full weekend, which a second Saturday never is. The full-weekend type is encoded because 'fim de semana' is REP's own wording, not because it changes an answer. 'Mixed' is one of REP's three entry categories rather than a fourth mode -- the contest permits SSB and CW, which is what modes records. Logs go to rep-concursos@rep.pt by e-mail; there is no submission website, so log_submit_url is absent.",
      "exchange": "DX stations send RST and a sequential number beginning 001; Portuguese stations, including the Azores and Madeira, send RST and the letters identifying their district (or county in the Azores and Madeira).",
      "country": "PT",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-19",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "rep-portugal-day-hf-20260613T1200@contestcal",
      "start_date": "2026-06-13",
      "mode_families": [
        "CW",
        "SSB"
      ],
      "band_families": [
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "12-24"
    },
    {
      "contest_id": "skcc-wes",
      "name": "SKCC Weekend Sprintathon (WES)",
      "start": "2026-06-13T12:00:00Z",
      "end": "2026-06-14T23:59:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 35.98,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "Straight Key Century Club",
      "rules_url": "https://www.skccgroup.com/operating_activities/weekend_sprintathon/",
      "verified": true,
      "note": "Older sources describe the anchor as 'the Saturday following the 6th', which differs from '2nd Saturday' in some months. SKCC's current page says 2nd Saturday; re-check if dates drift.",
      "exchange": "RST + state/province/country + name + SKCC number (C/T/S suffix for award holders)",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "skcc-wes-20260613T1200@contestcal",
      "start_date": "2026-06-13",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m",
        "6m"
      ],
      "duration_bucket": "gte24"
    },
    {
      "contest_id": "agcw-vhf-uhf",
      "name": "AGCW VHF/UHF Contest",
      "start": "2026-06-13T14:00:00Z",
      "end": "2026-06-13T17:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 3,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "2m",
        "70cm"
      ],
      "bands_note": "",
      "sponsor": "AGCW-DL",
      "rules_url": "https://www.agcw.de/contest/vhf-uhf/",
      "verified": true,
      "note": "Four dates a year, each with two back-to-back sessions on different bands: the first session is 2 m only, the second 70 cm only. Encoded as two sessions off one anchor, so eight occurrences a year. The per-session band split is not expressible in the current schema -- both bands are listed at contest level.",
      "exchange": "RST + running number + locator",
      "country": "DE",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-12",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "agcw-vhf-uhf-20260613T1400@contestcal",
      "start_date": "2026-06-13",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "VHF+"
      ],
      "duration_bucket": "2-12"
    },
    {
      "contest_id": "ref-ddfm-50mhz",
      "name": "DDFM 50 MHz",
      "start": "2026-06-13T14:00:00Z",
      "end": "2026-06-14T14:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 24,
      "modes": [
        "SSB",
        "CW",
        "FM"
      ],
      "submodes": [],
      "bands": [
        "6m"
      ],
      "bands_note": "",
      "sponsor": "REF",
      "rules_url": "https://concours.r-e-f.org/reglements/actuels/reg_ddfm50_fr_20250312.pdf",
      "verified": true,
      "note": "FM is recorded as a submode because the catalog's mode vocabulary has no FM token; REF lists 'SSB, CW, FM' as the permitted modes and all three are worked on the same 6 m band. log_deadline_days is derived from 'le premier mercredi qui suit le concours': the contest ends 1400 UTC Sunday and the following Wednesday is exactly three days later, in every year. CONTRADICTION RECORDED RATHER THAN RECONCILED: REF's 2025 contest calendar listed this contest with a 15:00 start, while this rules PDF and REF's 2026 calendar both say 14:00. The rules are encoded. Separately, REF's 2026 calendar prints the 'Coupe du REF - OM complet' row with its end before its start (27/06/2026 06:00 to 07/06/2026 14:00); no record here depends on it.",
      "exchange": "French metropolitan stations send RS(T) + department + a six-character locator (e.g. 59 75 JN18DU); all other stations send RS(T) + serial number + locator (e.g. 59 001 KN04FG).",
      "country": "FR",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-18",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": "2026-06-17T14:00:00Z",
      "uid": "ref-ddfm-50mhz-20260613T1400@contestcal",
      "start_date": "2026-06-13",
      "mode_families": [
        "CW",
        "SSB",
        "FM"
      ],
      "band_families": [
        "6m"
      ],
      "duration_bucket": "gte24"
    },
    {
      "contest_id": "agcw-vhf-uhf",
      "name": "AGCW VHF/UHF Contest",
      "start": "2026-06-13T17:00:00Z",
      "end": "2026-06-13T18:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "2m",
        "70cm"
      ],
      "bands_note": "",
      "sponsor": "AGCW-DL",
      "rules_url": "https://www.agcw.de/contest/vhf-uhf/",
      "verified": true,
      "note": "Four dates a year, each with two back-to-back sessions on different bands: the first session is 2 m only, the second 70 cm only. Encoded as two sessions off one anchor, so eight occurrences a year. The per-session band split is not expressible in the current schema -- both bands are listed at contest level.",
      "exchange": "RST + running number + locator",
      "country": "DE",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-12",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "agcw-vhf-uhf-20260613T1700@contestcal",
      "start_date": "2026-06-13",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "VHF+"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "arrl-june-vhf",
      "name": "ARRL June VHF Contest",
      "start": "2026-06-13T18:00:00Z",
      "end": "2026-06-15T02:59:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 32.98,
      "modes": [
        "Mixed"
      ],
      "submodes": [],
      "bands": [
        "6m",
        "2m",
        "1.25m",
        "70cm",
        "33cm",
        "23cm",
        "13cm",
        "3cm"
      ],
      "bands_note": "All authorized frequencies above 50 MHz",
      "sponsor": "ARRL",
      "rules_url": "http://www.arrl.org/june-vhf",
      "verified": true,
      "note": "",
      "exchange": "",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-21",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "June VHF benefits from sporadic-E, historically the best VHF month from Florida.",
      "log_due": null,
      "uid": "arrl-june-vhf-20260613T1800@contestcal",
      "start_date": "2026-06-13",
      "mode_families": [
        "CW",
        "SSB",
        "FM",
        "RTTY",
        "Digital",
        "FT8/FT4",
        "Mixed"
      ],
      "band_families": [
        "6m",
        "VHF+"
      ],
      "duration_bucket": "gte24"
    },
    {
      "contest_id": "rca-nacional-80m",
      "name": "Concurso Nacional de 3,5 MHz",
      "start": "2026-06-13T22:00:00Z",
      "end": "2026-06-13T23:59:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1.98,
      "modes": [
        "SSB"
      ],
      "submodes": [
        "LSB"
      ],
      "bands": [
        "80m"
      ],
      "bands_note": "80 metres, in the segment between 3.550 and 3.700 kHz.",
      "sponsor": "RCA",
      "rules_url": "https://www.lu4aa.org/wp/concurso-nacional-80m/",
      "verified": true,
      "note": "RCA PUBLISHES ONE EDITION AT A TIME, NOT A RULE. The bases page states a single dated running and no recurrence, so this is a manual record holding exactly what RCA published and nothing more. Both of RCA's national contests are in that state, and both of the dates on offer as of 2026-08-19 have already passed, so neither puts anything on a forward calendar today. That is the honest position: a plausible ordinal fitted to one date would be a rule RCA has not written. When RCA announces the next edition it is one line each. The times are stated by RCA in UTC alongside local Argentine time, so no zone resolution is involved.",
      "exchange": "RS report followed by the last two digits of the year in which the operator obtained their first amateur licence -- a licence obtained in 1998 is sent as '59 98'.",
      "country": "AR",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-19",
      "can_enter": false,
      "eligibility_scope": "entity_list",
      "eligibility_reason": "Entry limited to LU, CE, CP, ZP, PY, CX. K stations may be worked but cannot submit an entry.",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "rca-nacional-80m-20260613T2200@contestcal",
      "start_date": "2026-06-13",
      "mode_families": [
        "SSB"
      ],
      "band_families": [
        "80m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "hammies-qso-party",
      "name": "Hammies QSO Party",
      "start": "2026-06-14T14:00:00Z",
      "end": "2026-06-14T15:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "SSB"
      ],
      "submodes": [],
      "bands": [
        "40m"
      ],
      "bands_note": "A phone contest on 40 m: 7 063-7 100 and 7 130-7 200 kHz. 7 100-7 130 kHz is contest free.",
      "sponsor": "Hammies Amateur Radio Club",
      "rules_url": "https://mysarl.org.za/wp-content/uploads/2025/12/2026-SARL-Contest-Manual-Version-1.1-2025-12-15.pdf",
      "verified": true,
      "note": "SOURCED FROM THE SARL CONTEST MANUAL, WHICH IS NOT AN AGGREGATOR. The manual carries this contest's FULL rules -- aim, dates, exchange, frequencies, scoring, log sheets -- and names its organising club, rather than summarising a calendar entry. It is the venue in which South African clubs publish their contest rules, the way DARC's Ausschreibungen or UBA's rules pages are, so it is a primary source for these contests and not a third-party listing. The distinction that matters: an aggregator republishes rules it found elsewhere, and this is where the rules appear.",
      "exchange": "RS and the provincial abbreviation; stations outside South Africa send DX.",
      "country": "ZA",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-19",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "hammies-qso-party-20260614T1400@contestcal",
      "start_date": "2026-06-14",
      "mode_families": [
        "SSB"
      ],
      "band_families": [
        "40m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "4sqrp-sss",
      "name": "4 States QRP Group Second Sunday Sprint (SSS)",
      "start": "2026-06-15T00:00:00Z",
      "end": "2026-06-15T02:00:00Z",
      "start_wall": "2026-06-14T19:00:00",
      "end_wall": "2026-06-14T21:00:00",
      "local_rolling": false,
      "timezone": "America/Chicago",
      "duration_hours": 2,
      "modes": [
        "CW",
        "SSB",
        "Digital"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "",
      "sponsor": "4 States QRP Group",
      "rules_url": "https://www.4sqrp.com/SSS/sss_rules_revised_02_2026.pdf",
      "verified": true,
      "note": "SPONSOR-ANCHORED LOCAL TIME. The anchor is the second SUNDAY and the sprint runs into Monday UTC. 4SQRP states the consequence itself: '7 PM until 9 PM central time (CST or CDT, whichever is in effect at the time). If you use UTC, that time changes when we switch from CST to CDT (or vice versa).' Resolved through America/Chicago, so it is 0100Z Monday in winter and 0000Z Monday in summer.",
      "exchange": "RST + state/province/country + 4SQRP member number (power if non-member)",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "4sqrp-sss-20260615T0000@contestcal",
      "start_date": "2026-06-15",
      "mode_families": [
        "CW",
        "SSB",
        "Digital"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "2-12"
    },
    {
      "contest_id": "k1usn-sst",
      "name": "K1USN Slow Speed Test (SST)",
      "start": "2026-06-15T00:00:00Z",
      "end": "2026-06-15T01:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "",
      "sponsor": "K1USN Radio Club",
      "rules_url": "https://www.k1usn.com/sst_rules.html",
      "verified": true,
      "note": "No formal log submission -- participants post scores to 3830scores.com.",
      "exchange": "Name + state/province/DX country",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "k1usn-sst-20260615T0000@contestcal",
      "start_date": "2026-06-15",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "agcw-zap-merit",
      "name": "AGCW ZAP Merit Contest (ZMC)",
      "start": "2026-06-15T17:40:00Z",
      "end": "2026-06-15T18:30:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.83,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "80m"
      ],
      "bands_note": "",
      "sponsor": "AGCW-DL",
      "rules_url": "https://www.agcw.de/contest/tzap/",
      "verified": false,
      "note": "PARTLY UNVERIFIED. The recurrence (every Monday), the 1740 UTC pre-logging opening and the 1800 UTC telegram transmission are all quoted from AGCW. AGCW publishes NO closing time. The 1830 end stored here is a PLACEHOLDER so the record expands -- it is not a sponsor fact and must not be presented as one. Confirm the session length with the ZMC manager before shipping. Points accumulate over a calendar year; logs are due 31 January of the following year.",
      "exchange": "Callsign + date + time + RST (SWLs log RST of both stations in a QSO)",
      "country": "DE",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-12",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "agcw-zap-merit-20260615T1740@contestcal",
      "start_date": "2026-06-15",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "80m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "rsgb-ft4-series",
      "name": "RSGB FT4 Contest Series",
      "start": "2026-06-15T19:00:00Z",
      "end": "2026-06-15T21:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 2,
      "modes": [
        "FT8/FT4"
      ],
      "submodes": [
        "FT4"
      ],
      "bands": [
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "80, 40, 20, 15 and 10 m.",
      "sponsor": "RSGB Contest Committee",
      "rules_url": "https://www.rsgbcc.org/hf/rules/2026/r80m_ft4.shtml",
      "verified": true,
      "note": "TWELVE MONDAY EVENINGS AND THE CLOCK SHIFTS FOR THE SUMMER: January to March and October to December run 2000-2200 UTC, April to September run 1900-2100. Six legs each way, so the record's default is the winter clock and the summer legs carry their own -- the third contest to need per-date times, after the Autumn Series and the 80m Club Championship.\n\nMANUAL BECAUSE THE DATES ARE NOT ON THE RULES PAGE and follow no ordinal: they are Mondays, but the third Monday in January, the fourth in February, the third in March. RSGB publishes them on its CGI calendar and this record holds what that prints.\n\nNot the same contest as the FT4 International Activity Day in April, which is 24 hours and has its own rules page.",
      "exchange": "A signal report. A serial number is not required.",
      "country": "GB",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-23",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": "2026-06-16T21:00:00Z",
      "uid": "rsgb-ft4-series-20260615T1900@contestcal",
      "start_date": "2026-06-15",
      "mode_families": [
        "Digital",
        "FT8/FT4"
      ],
      "band_families": [
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "2-12"
    },
    {
      "contest_id": "sarl-youth-qso-party",
      "name": "SARL Youth QSO Party",
      "start": "2026-06-16T12:00:00Z",
      "end": "2026-06-16T13:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW",
        "SSB"
      ],
      "submodes": [],
      "bands": [
        "40m"
      ],
      "bands_note": "Phone 7 063-7 100 and 7 130-7 200 kHz; CW 7 000-7 040 kHz.",
      "sponsor": "SARL",
      "rules_url": "https://mysarl.org.za/wp-content/uploads/2025/12/2026-SARL-Contest-Manual-Version-1.1-2025-12-15.pdf",
      "verified": true,
      "note": "Like the YL party, two legs with two different rule shapes on one clock: 16 June is South Africa's National Youth Day and is fixed, while the August leg is the third Saturday. log_format and log_deadline_days are absent: this pass read each contest's Aim, Dates, Frequencies and Exchange sections and did not read its Log Sheets section, so neither is recorded rather than assumed from SARL's other contests.",
      "exchange": "An RS(T) report and the operator's age.",
      "country": "ZA",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-19",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "sarl-youth-qso-party-20260616T1200@contestcal",
      "start_date": "2026-06-16",
      "mode_families": [
        "CW",
        "SSB"
      ],
      "band_families": [
        "40m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "cwops-cwt",
      "name": "CWops Test (CWT)",
      "start": "2026-06-17T13:00:00Z",
      "end": "2026-06-17T14:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "CWops",
      "rules_url": "https://cwops.org/cwops-tests/",
      "verified": true,
      "note": "",
      "exchange": "Members: name + CWops number. Non-members: name + state/province/DX prefix.",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "cwops-cwt-20260617T1300@contestcal",
      "start_date": "2026-06-17",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "cwops-cwt",
      "name": "CWops Test (CWT)",
      "start": "2026-06-17T19:00:00Z",
      "end": "2026-06-17T20:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "CWops",
      "rules_url": "https://cwops.org/cwops-tests/",
      "verified": true,
      "note": "",
      "exchange": "Members: name + CWops number. Non-members: name + state/province/DX prefix.",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "cwops-cwt-20260617T1900@contestcal",
      "start_date": "2026-06-17",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "cwops-cwt",
      "name": "CWops Test (CWT)",
      "start": "2026-06-18T03:00:00Z",
      "end": "2026-06-18T04:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "CWops",
      "rules_url": "https://cwops.org/cwops-tests/",
      "verified": true,
      "note": "",
      "exchange": "Members: name + CWops number. Non-members: name + state/province/DX prefix.",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "cwops-cwt-20260618T0300@contestcal",
      "start_date": "2026-06-18",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "cwops-cwt",
      "name": "CWops Test (CWT)",
      "start": "2026-06-18T07:00:00Z",
      "end": "2026-06-18T08:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "CWops",
      "rules_url": "https://cwops.org/cwops-tests/",
      "verified": true,
      "note": "",
      "exchange": "Members: name + CWops number. Non-members: name + state/province/DX prefix.",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "cwops-cwt-20260618T0700@contestcal",
      "start_date": "2026-06-18",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "nccc-ns-ft4",
      "name": "NCCC FT4 Sprint (FT4 NS)",
      "start": "2026-06-19T01:00:00Z",
      "end": "2026-06-19T01:30:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.5,
      "modes": [
        "FT8/FT4"
      ],
      "submodes": [
        "FT4"
      ],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "Northern California Contest Club (NCCC)",
      "rules_url": "https://www.ncccsprint.com/ft4ns.html",
      "verified": true,
      "note": "NCCC describes these as 'nominal rules' that may be modified on a weekly basis, and runs formal Ladder seasons interspersed with practice weeks. The 30-minute session slot itself is fixed.",
      "exchange": "Grid square (following NA VHF, WW Digi and ARRL IDC practice)",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "nccc-ns-ft4-20260619T0100@contestcal",
      "start_date": "2026-06-19",
      "mode_families": [
        "Digital",
        "FT8/FT4"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "nccc-ns-rtty",
      "name": "NCCC RTTY Sprint (RTTY NS)",
      "start": "2026-06-19T01:45:00Z",
      "end": "2026-06-19T02:15:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.5,
      "modes": [
        "RTTY"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m"
      ],
      "bands_note": "",
      "sponsor": "Northern California Contest Club (NCCC)",
      "rules_url": "https://ncccsprint.com/rttyns.html",
      "verified": true,
      "note": "NCCC describes these as 'nominal rules' that may be modified on a weekly basis, and runs formal Ladder seasons interspersed with practice weeks. The 30-minute session slot itself is fixed.",
      "exchange": "Serial number + name + QTH (both callsigns required in the exchange)",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "nccc-ns-rtty-20260619T0145@contestcal",
      "start_date": "2026-06-19",
      "mode_families": [
        "RTTY",
        "Digital"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "nccc-ns-cw",
      "name": "NCCC Sprint (NS)",
      "start": "2026-06-19T02:30:00Z",
      "end": "2026-06-19T03:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.5,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m"
      ],
      "bands_note": "",
      "sponsor": "Northern California Contest Club (NCCC)",
      "rules_url": "https://ncccsprint.com/rules.html",
      "verified": true,
      "note": "NCCC describes these as 'nominal rules' that may be modified on a weekly basis, and runs formal Ladder seasons interspersed with practice weeks. The 30-minute session slot itself is fixed.",
      "exchange": "Serial number + name + QTH (both callsigns required in the exchange)",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "nccc-ns-cw-20260619T0230@contestcal",
      "start_date": "2026-06-19",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "k1usn-sst",
      "name": "K1USN Slow Speed Test (SST)",
      "start": "2026-06-19T20:00:00Z",
      "end": "2026-06-19T21:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "",
      "sponsor": "K1USN Radio Club",
      "rules_url": "https://www.k1usn.com/sst_rules.html",
      "verified": true,
      "note": "No formal log submission -- participants post scores to 3830scores.com.",
      "exchange": "Name + state/province/DX country",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "k1usn-sst-20260619T2000@contestcal",
      "start_date": "2026-06-19",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "jarl-aa-dx-cw",
      "name": "All Asian DX Contest, CW",
      "start": "2026-06-20T00:00:00Z",
      "end": "2026-06-22T00:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 48,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "",
      "sponsor": "JARL",
      "rules_url": "https://www.jarl.org/English/4_Library/A-4-3_Contests/aadx_eng.html",
      "verified": true,
      "note": "",
      "exchange": "RS(T) and the operator's age. An operator who does not want to send an age sends 01. Multi-operator stations send the average age of the operators at the start of the contest.",
      "country": "JP",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-17",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "jarl-aa-dx-cw-20260620T0000@contestcal",
      "start_date": "2026-06-20",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "gte24"
    },
    {
      "contest_id": "sarl-club-20m",
      "name": "SARL Saturday 20 m Club Contest",
      "start": "2026-06-20T11:00:00Z",
      "end": "2026-06-20T12:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "SSB",
        "CW",
        "RTTY"
      ],
      "submodes": [],
      "bands": [
        "20m"
      ],
      "bands_note": "CW 14 000-14 060 kHz; SSB 14 125-14 300 kHz; RTTY 14 080-14 099 kHz.",
      "sponsor": "SARL",
      "rules_url": "https://mysarl.org.za/wp-content/uploads/2025/12/2026-SARL-Contest-Manual-Version-1.1-2025-12-15.pdf",
      "verified": true,
      "note": "A club championship rather than an individual contest: operators' scores are added into a club total. The month list is SARL's own -- these run in four months of the year, not every month -- which is what monthly_nth_weekday's `months` field exists for. log_format and log_deadline_days are absent: this pass read each contest's Aim, Dates, Frequencies and Exchange sections and did not read its Log Sheets section, so neither is recorded rather than assumed from SARL's other contests.\n\nPROVENANCE RESTORED 2026-08-23. This record carried verified: true with an EMPTY source_note -- one of three the 2026-08-21 rule audit found, and a stricter defect than the thin ARRL notes beside them: an empty string is not weak evidence, it is none, and there was nothing in the record to check a rule against. The rule, the times, the bands and the exchange were all correct; only the evidence for them was missing. Re-read from the manual and quoted above, and SARL's own printed 2026 dates reproduce it.",
      "exchange": "Your name, your Abbreviated Club Callsign and your 4-character grid square (for example KG30).",
      "country": "ZA",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-23",
      "can_enter": false,
      "eligibility_scope": "entity_list",
      "eligibility_reason": "Entry limited to ZS. K stations may be worked but cannot submit an entry.",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "sarl-club-20m-20260620T1100@contestcal",
      "start_date": "2026-06-20",
      "mode_families": [
        "CW",
        "SSB",
        "RTTY",
        "Digital"
      ],
      "band_families": [
        "20m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "skcc-qso-party",
      "name": "SKCC QSO Party",
      "start": "2026-06-20T12:00:00Z",
      "end": "2026-06-21T23:59:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 35.98,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m",
        "6m"
      ],
      "bands_note": "160 through 6 m excluding the WARC bands -- SKCC names 60, 30, 17 and 12 m as excluded.",
      "sponsor": "Straight Key Century Club",
      "rules_url": "https://www.skccgroup.com/operating_activities/QSO_Party/",
      "verified": true,
      "note": "THIRTY-SIX HOURS, NOT A WEEKEND: 1200 UTC Saturday to 2359 UTC Sunday, so it starts at midday and runs to the end of the second day.\n\nStraight keys, sideswipers and bugs only: no keyer, no keyboard. That is the club's whole premise rather than a category.\n\nThe log deadline is eight days because SKCC states it as a WEEKDAY rather than an interval -- 'the Sunday following the event' -- and the contest ends on a Sunday, so the next Sunday is eight days after the Saturday it started.",
      "exchange": "RST, QTH, the operator's name, a four-character grid square and the SKCC number. Non-members send 'none' for the number.",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-23",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": "2026-06-29T23:59:00Z",
      "uid": "skcc-qso-party-20260620T1200@contestcal",
      "start_date": "2026-06-20",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m",
        "6m"
      ],
      "duration_bucket": "gte24"
    },
    {
      "contest_id": "stew-perry",
      "name": "Stew Perry Topband Challenge",
      "start": "2026-06-20T15:00:00Z",
      "end": "2026-06-21T14:59:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 23.98,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m"
      ],
      "bands_note": "160 metres only.",
      "sponsor": "Boring Amateur Radio Club",
      "rules_url": "https://www.kkn.net/stew/stew_rules.html",
      "verified": false,
      "note": "MANUAL, BECAUSE THE CLUB PUBLISHES DATES AND NOT A RULE. All four 2026 runnings fall on a Saturday, but no single ordinal describes them -- March's is the second Saturday, June's the third, October's the third and December's the fourth. The record holds exactly what the club published and produces nothing for 2027 until somebody reads their next list, which is the same treatment the NCJ Sprints get and for the same reason.\n\nMarked unverified because ONE year's dates cannot confirm a pattern that does not exist. It becomes verified when a second year's list is read and the record still only claims what was printed.\n\nThe grid-square exchange is the point of the contest: scoring is by distance, so a short haul into a rare square can outscore a long one.",
      "exchange": "A four-character grid square, for example CN85.",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-21",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": "2026-07-05T14:59:00Z",
      "uid": "stew-perry-20260620T1500@contestcal",
      "start_date": "2026-06-20",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m"
      ],
      "duration_bucket": "12-24"
    },
    {
      "contest_id": "arrl-kids-day-jun",
      "name": "ARRL Kids Day (June)",
      "start": "2026-06-20T18:00:00Z",
      "end": "2026-06-20T23:59:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 5.98,
      "modes": [
        "SSB"
      ],
      "submodes": [],
      "bands": [
        "80m",
        "40m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m"
      ],
      "bands_note": "Suggested frequencies; repeaters may also be used with the sponsor's permission",
      "sponsor": "ARRL",
      "rules_url": "http://www.arrl.org/kids-day",
      "verified": true,
      "note": "",
      "exchange": "",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-21",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "arrl-kids-day-jun-20260620T1800@contestcal",
      "start_date": "2026-06-20",
      "mode_families": [
        "SSB"
      ],
      "band_families": [
        "80m",
        "40m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m"
      ],
      "duration_bucket": "2-12"
    },
    {
      "contest_id": "k1usn-sst",
      "name": "K1USN Slow Speed Test (SST)",
      "start": "2026-06-22T00:00:00Z",
      "end": "2026-06-22T01:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "",
      "sponsor": "K1USN Radio Club",
      "rules_url": "https://www.k1usn.com/sst_rules.html",
      "verified": true,
      "note": "No formal log submission -- participants post scores to 3830scores.com.",
      "exchange": "Name + state/province/DX country",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "k1usn-sst-20260622T0000@contestcal",
      "start_date": "2026-06-22",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "agcw-zap-merit",
      "name": "AGCW ZAP Merit Contest (ZMC)",
      "start": "2026-06-22T17:40:00Z",
      "end": "2026-06-22T18:30:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.83,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "80m"
      ],
      "bands_note": "",
      "sponsor": "AGCW-DL",
      "rules_url": "https://www.agcw.de/contest/tzap/",
      "verified": false,
      "note": "PARTLY UNVERIFIED. The recurrence (every Monday), the 1740 UTC pre-logging opening and the 1800 UTC telegram transmission are all quoted from AGCW. AGCW publishes NO closing time. The 1830 end stored here is a PLACEHOLDER so the record expands -- it is not a sponsor fact and must not be presented as one. Confirm the session length with the ZMC manager before shipping. Points accumulate over a calendar year; logs are due 31 January of the following year.",
      "exchange": "Callsign + date + time + RST (SWLs log RST of both stations in a QSO)",
      "country": "DE",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-12",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "agcw-zap-merit-20260622T1740@contestcal",
      "start_date": "2026-06-22",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "80m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "skcc-sks",
      "name": "SKCC Straight Key Sprint (SKS)",
      "start": "2026-06-24T00:00:00Z",
      "end": "2026-06-24T02:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 2,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m",
        "6m"
      ],
      "bands_note": "Suggested frequencies, one per band",
      "sponsor": "Straight Key Century Club",
      "rules_url": "https://www.skccgroup.com/operating_activities/weekday_sprint/",
      "verified": true,
      "note": "",
      "exchange": "RST + QTH + name + SKCC number",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "skcc-sks-20260624T0000@contestcal",
      "start_date": "2026-06-24",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m",
        "6m"
      ],
      "duration_bucket": "2-12"
    },
    {
      "contest_id": "cwops-cwt",
      "name": "CWops Test (CWT)",
      "start": "2026-06-24T13:00:00Z",
      "end": "2026-06-24T14:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "CWops",
      "rules_url": "https://cwops.org/cwops-tests/",
      "verified": true,
      "note": "",
      "exchange": "Members: name + CWops number. Non-members: name + state/province/DX prefix.",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "cwops-cwt-20260624T1300@contestcal",
      "start_date": "2026-06-24",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "cwops-cwt",
      "name": "CWops Test (CWT)",
      "start": "2026-06-24T19:00:00Z",
      "end": "2026-06-24T20:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "CWops",
      "rules_url": "https://cwops.org/cwops-tests/",
      "verified": true,
      "note": "",
      "exchange": "Members: name + CWops number. Non-members: name + state/province/DX prefix.",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "cwops-cwt-20260624T1900@contestcal",
      "start_date": "2026-06-24",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "cwops-cwt",
      "name": "CWops Test (CWT)",
      "start": "2026-06-25T03:00:00Z",
      "end": "2026-06-25T04:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "CWops",
      "rules_url": "https://cwops.org/cwops-tests/",
      "verified": true,
      "note": "",
      "exchange": "Members: name + CWops number. Non-members: name + state/province/DX prefix.",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "cwops-cwt-20260625T0300@contestcal",
      "start_date": "2026-06-25",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "cwops-cwt",
      "name": "CWops Test (CWT)",
      "start": "2026-06-25T07:00:00Z",
      "end": "2026-06-25T08:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "CWops",
      "rules_url": "https://cwops.org/cwops-tests/",
      "verified": true,
      "note": "",
      "exchange": "Members: name + CWops number. Non-members: name + state/province/DX prefix.",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "cwops-cwt-20260625T0700@contestcal",
      "start_date": "2026-06-25",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "rsgb-80mcc-ssb",
      "name": "RSGB 3.5 MHz Club Championship, SSB",
      "start": "2026-06-25T19:00:00Z",
      "end": "2026-06-25T20:30:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1.5,
      "modes": [
        "SSB"
      ],
      "submodes": [],
      "bands": [
        "80m"
      ],
      "bands_note": "3600-3775 kHz.",
      "sponsor": "RSGB Contest Committee",
      "rules_url": "https://www.rsgbcc.org/hf/rules/2026/r80mcc.shtml",
      "verified": true,
      "note": "THE DATES ARE NOT ON THE RULES PAGE. RSGB publishes the rules at rules/2026/r80mcc.shtml and the eighteen legs on a separate CGI calendar, and the rules page links to it in so many words. This record holds what that calendar prints; nothing is derived.\n\nTHE CLOCK MOVES IN APRIL and the record says so per date: February and March run 2000-2130 UTC, April to July run 1900-2030. The record's default is the April-July clock because four of each mode's six legs use it, and the two early legs carry their own times. Same mechanism as the Autumn Series, and the second contest to need it.\n\nMANUAL BECAUSE THE LEGS FOLLOW NO ORDINAL. They fall on Mondays, Wednesdays and Thursdays with the weekday rotating through the series, which is exactly the shape an ordinal must not be fitted to.\n\nNON-UK STATIONS MAY ENTER AS INDIVIDUALS -- RSGB states it, which is worth noting beside the AFS and Club Calls contests where entry really is UK&CD only.",
      "exchange": "RS(T) plus a serial number starting at 1 and incrementing by 1.",
      "country": "GB",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-23",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": "2026-06-26T20:30:00Z",
      "uid": "rsgb-80mcc-ssb-20260625T1900@contestcal",
      "start_date": "2026-06-25",
      "mode_families": [
        "SSB"
      ],
      "band_families": [
        "80m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "nccc-ns-ft4",
      "name": "NCCC FT4 Sprint (FT4 NS)",
      "start": "2026-06-26T01:00:00Z",
      "end": "2026-06-26T01:30:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.5,
      "modes": [
        "FT8/FT4"
      ],
      "submodes": [
        "FT4"
      ],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "Northern California Contest Club (NCCC)",
      "rules_url": "https://www.ncccsprint.com/ft4ns.html",
      "verified": true,
      "note": "NCCC describes these as 'nominal rules' that may be modified on a weekly basis, and runs formal Ladder seasons interspersed with practice weeks. The 30-minute session slot itself is fixed.",
      "exchange": "Grid square (following NA VHF, WW Digi and ARRL IDC practice)",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "nccc-ns-ft4-20260626T0100@contestcal",
      "start_date": "2026-06-26",
      "mode_families": [
        "Digital",
        "FT8/FT4"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "nccc-ns-rtty",
      "name": "NCCC RTTY Sprint (RTTY NS)",
      "start": "2026-06-26T01:45:00Z",
      "end": "2026-06-26T02:15:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.5,
      "modes": [
        "RTTY"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m"
      ],
      "bands_note": "",
      "sponsor": "Northern California Contest Club (NCCC)",
      "rules_url": "https://ncccsprint.com/rttyns.html",
      "verified": true,
      "note": "NCCC describes these as 'nominal rules' that may be modified on a weekly basis, and runs formal Ladder seasons interspersed with practice weeks. The 30-minute session slot itself is fixed.",
      "exchange": "Serial number + name + QTH (both callsigns required in the exchange)",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "nccc-ns-rtty-20260626T0145@contestcal",
      "start_date": "2026-06-26",
      "mode_families": [
        "RTTY",
        "Digital"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "nccc-ns-cw",
      "name": "NCCC Sprint (NS)",
      "start": "2026-06-26T02:30:00Z",
      "end": "2026-06-26T03:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.5,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m"
      ],
      "bands_note": "",
      "sponsor": "Northern California Contest Club (NCCC)",
      "rules_url": "https://ncccsprint.com/rules.html",
      "verified": true,
      "note": "NCCC describes these as 'nominal rules' that may be modified on a weekly basis, and runs formal Ladder seasons interspersed with practice weeks. The 30-minute session slot itself is fixed.",
      "exchange": "Serial number + name + QTH (both callsigns required in the exchange)",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "nccc-ns-cw-20260626T0230@contestcal",
      "start_date": "2026-06-26",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "k1usn-sst",
      "name": "K1USN Slow Speed Test (SST)",
      "start": "2026-06-26T20:00:00Z",
      "end": "2026-06-26T21:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "",
      "sponsor": "K1USN Radio Club",
      "rules_url": "https://www.k1usn.com/sst_rules.html",
      "verified": true,
      "note": "No formal log submission -- participants post scores to 3830scores.com.",
      "exchange": "Name + state/province/DX country",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "k1usn-sst-20260626T2000@contestcal",
      "start_date": "2026-06-26",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "arsi-qrp-day",
      "name": "ARSI QRP-Day Contest",
      "start": "2026-06-27T05:30:00Z",
      "end": "2026-06-28T11:59:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 30.48,
      "modes": [
        "CW",
        "SSB",
        "Digital"
      ],
      "submodes": [],
      "bands": [
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "",
      "sponsor": "ARSI",
      "rules_url": "https://arsi.info/qrp-contest/",
      "verified": true,
      "note": "Thirty and a half hours, which is unusual: it opens 05:30 UTC on the Saturday and closes 11:59 UTC on the Sunday. ARSI states both UTC and IST and they agree. The power ceiling differs by mode -- 5 W, or 10 W on SSB -- so both are recorded as categories. ARSI PUBLISHES DATES, NOT A RECURRENCE. Every one of its contest pages opens with the year's dates and states no rule anywhere -- no 'annually on', no ordinal weekend. So all five records are manual and hold exactly the 2026 editions ARSI published. Fitting an ordinal to one date would be inventing a rule ARSI has not written, and Asia is thin enough that the temptation is worth naming.",
      "exchange": "",
      "country": "IN",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-19",
      "can_enter": false,
      "eligibility_scope": "entity_list",
      "eligibility_reason": "Entry limited to VU. K stations may be worked but cannot submit an entry.",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "arsi-qrp-day-20260627T0530@contestcal",
      "start_date": "2026-06-27",
      "mode_families": [
        "CW",
        "SSB",
        "Digital"
      ],
      "band_families": [
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "gte24"
    },
    {
      "contest_id": "ure-rey-de-espana-ssb",
      "name": "His Majesty the King of Spain Contest, SSB",
      "start": "2026-06-27T12:00:00Z",
      "end": "2026-06-28T11:59:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 23.98,
      "modes": [
        "SSB"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "",
      "sponsor": "URE",
      "rules_url": "https://concursos.ure.es/en/s-m-el-rey-de-espana-ssb/bases/",
      "verified": true,
      "note": "The fourth full weekend of June 2026 is 27-28 June, which is the date URE prints beside the rule, so the '4rd' typo does not leave the ordinal in doubt.",
      "exchange": "Spanish stations send RST + their province abbreviation (EF0F sends SMR); DX stations send RST + a serial number starting with 001.",
      "country": "ES",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-18",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": "2026-07-13T11:59:00Z",
      "uid": "ure-rey-de-espana-ssb-20260627T1200@contestcal",
      "start_date": "2026-06-27",
      "mode_families": [
        "SSB"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "12-24"
    },
    {
      "contest_id": "arrl-field-day",
      "name": "ARRL Field Day",
      "start": "2026-06-27T18:00:00Z",
      "end": "2026-06-28T20:59:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 26.98,
      "modes": [
        "Mixed"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m",
        "6m",
        "2m",
        "1.25m",
        "70cm",
        "33cm",
        "23cm",
        "13cm",
        "3cm"
      ],
      "bands_note": "160-10 m excluding the 60, 30, 17 and 12 m bands, plus all bands 50 MHz and above",
      "sponsor": "ARRL",
      "rules_url": "http://www.arrl.org/field-day",
      "verified": true,
      "note": "",
      "exchange": "",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-21",
      "can_enter": true,
      "eligibility_scope": "entity_list",
      "eligibility_reason": "Entry limited to K, VE -- includes K.",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "arrl-field-day-20260627T1800@contestcal",
      "start_date": "2026-06-27",
      "mode_families": [
        "CW",
        "SSB",
        "FM",
        "RTTY",
        "Digital",
        "FT8/FT4",
        "Mixed"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m",
        "6m",
        "VHF+"
      ],
      "duration_bucket": "gte24"
    },
    {
      "contest_id": "k1usn-sst",
      "name": "K1USN Slow Speed Test (SST)",
      "start": "2026-06-29T00:00:00Z",
      "end": "2026-06-29T01:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "",
      "sponsor": "K1USN Radio Club",
      "rules_url": "https://www.k1usn.com/sst_rules.html",
      "verified": true,
      "note": "No formal log submission -- participants post scores to 3830scores.com.",
      "exchange": "Name + state/province/DX country",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "k1usn-sst-20260629T0000@contestcal",
      "start_date": "2026-06-29",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "agcw-zap-merit",
      "name": "AGCW ZAP Merit Contest (ZMC)",
      "start": "2026-06-29T17:40:00Z",
      "end": "2026-06-29T18:30:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.83,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "80m"
      ],
      "bands_note": "",
      "sponsor": "AGCW-DL",
      "rules_url": "https://www.agcw.de/contest/tzap/",
      "verified": false,
      "note": "PARTLY UNVERIFIED. The recurrence (every Monday), the 1740 UTC pre-logging opening and the 1800 UTC telegram transmission are all quoted from AGCW. AGCW publishes NO closing time. The 1830 end stored here is a PLACEHOLDER so the record expands -- it is not a sponsor fact and must not be presented as one. Confirm the session length with the ZMC manager before shipping. Points accumulate over a calendar year; logs are due 31 January of the following year.",
      "exchange": "Callsign + date + time + RST (SWLs log RST of both stations in a QSO)",
      "country": "DE",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-12",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "agcw-zap-merit-20260629T1740@contestcal",
      "start_date": "2026-06-29",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "80m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "rac-canada-day",
      "name": "RAC Canada Day Contest",
      "start": "2026-07-01T00:00:00Z",
      "end": "2026-07-01T23:59:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 23.98,
      "modes": [
        "CW",
        "SSB"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m",
        "6m",
        "2m"
      ],
      "bands_note": "160, 80, 40, 20, 15, 10, 6 and 2 metres, CW and phone (SSB, FM, AM, etc.)",
      "sponsor": "RAC",
      "rules_url": "https://www.rac.ca/contesting-results/",
      "verified": true,
      "note": "",
      "exchange": "Stations in Canada send RS(T) and province or territory; stations outside Canada, and Canadian maritime mobiles, send RS(T) and a serial number",
      "country": "CA",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-17",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": "2026-07-15T23:59:00Z",
      "uid": "rac-canada-day-20260701T0000@contestcal",
      "start_date": "2026-07-01",
      "mode_families": [
        "CW",
        "SSB"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m",
        "6m",
        "VHF+"
      ],
      "duration_bucket": "12-24"
    },
    {
      "contest_id": "cwops-cwt",
      "name": "CWops Test (CWT)",
      "start": "2026-07-01T13:00:00Z",
      "end": "2026-07-01T14:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "CWops",
      "rules_url": "https://cwops.org/cwops-tests/",
      "verified": true,
      "note": "",
      "exchange": "Members: name + CWops number. Non-members: name + state/province/DX prefix.",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "cwops-cwt-20260701T1300@contestcal",
      "start_date": "2026-07-01",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "cwops-cwt",
      "name": "CWops Test (CWT)",
      "start": "2026-07-01T19:00:00Z",
      "end": "2026-07-01T20:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "CWops",
      "rules_url": "https://cwops.org/cwops-tests/",
      "verified": true,
      "note": "",
      "exchange": "Members: name + CWops number. Non-members: name + state/province/DX prefix.",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "cwops-cwt-20260701T1900@contestcal",
      "start_date": "2026-07-01",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "cwops-cwt",
      "name": "CWops Test (CWT)",
      "start": "2026-07-02T03:00:00Z",
      "end": "2026-07-02T04:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "CWops",
      "rules_url": "https://cwops.org/cwops-tests/",
      "verified": true,
      "note": "",
      "exchange": "Members: name + CWops number. Non-members: name + state/province/DX prefix.",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "cwops-cwt-20260702T0300@contestcal",
      "start_date": "2026-07-02",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "cwops-cwt",
      "name": "CWops Test (CWT)",
      "start": "2026-07-02T07:00:00Z",
      "end": "2026-07-02T08:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "CWops",
      "rules_url": "https://cwops.org/cwops-tests/",
      "verified": true,
      "note": "",
      "exchange": "Members: name + CWops number. Non-members: name + state/province/DX prefix.",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "cwops-cwt-20260702T0700@contestcal",
      "start_date": "2026-07-02",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "skcc-skse",
      "name": "SKCC Straight Key Sprint Europe (SKSE)",
      "start": "2026-07-02T19:00:00Z",
      "end": "2026-07-02T21:00:00Z",
      "start_wall": "2026-07-02T21:00:00",
      "end_wall": "2026-07-02T23:00:00",
      "local_rolling": false,
      "timezone": "Europe/Berlin",
      "duration_hours": 2,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m",
        "6m"
      ],
      "bands_note": "160 through 6 m excluding the WARC bands -- SKCC names 60, 30, 17 and 12 m as excluded.",
      "sponsor": "Straight Key Century Club",
      "rules_url": "https://www.skccgroup.com/operating_activities/skse/",
      "verified": true,
      "note": "SKCC PRINTS TWO UTC TIMES AND THE CONTEST HAS ONE LOCAL TIME. 2000Z from November to March and 1900Z from April to October are both 2100 in central Europe: CET is UTC+1 and CEST is UTC+2. So this is not a contest that changes its hour twice a year, it is a contest at nine in the evening that Europe's clocks move around, and it is recorded the way the sponsor means it -- `timezone: Europe/Berlin` with wall_clock times, exactly as the ARS Spartan Sprint is recorded in New York.\n\nTHAT READING IS TESTABLE AND IT PASSES ON THE MONTHS THAT DECIDE IT. Europe changes clocks on the last Sunday of March and of October, and the first Thursday of both months falls on the near side of the change: March is still CET and resolves to 2000Z, April is CEST and resolves to 1900Z, October is still CEST at 1900Z, November is CET at 2000Z. All four match SKCC's own table, which is what makes this one rule rather than two.\n\nEncoding it as two records split by month -- winter and summer -- would have produced two entries with the same name and hidden the reason. Encoding one UTC time would have been wrong for five months of the year.\n\nStraight keys, sideswipers and bugs only: no keyer, no keyboard. That is the club's whole premise rather than a category.\n\nThe fifteen-minute QRS extensions at each end are not in the window: they are an invitation to slow operators rather than part of the scored period.",
      "exchange": "RST, QTH, the operator's name and the SKCC number. Non-members send 'none' for the number.",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-23",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": "2026-07-09T21:00:00Z",
      "uid": "skcc-skse-20260702T1900@contestcal",
      "start_date": "2026-07-02",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m",
        "6m"
      ],
      "duration_bucket": "2-12"
    },
    {
      "contest_id": "nccc-ns-ft4",
      "name": "NCCC FT4 Sprint (FT4 NS)",
      "start": "2026-07-03T01:00:00Z",
      "end": "2026-07-03T01:30:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.5,
      "modes": [
        "FT8/FT4"
      ],
      "submodes": [
        "FT4"
      ],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "Northern California Contest Club (NCCC)",
      "rules_url": "https://www.ncccsprint.com/ft4ns.html",
      "verified": true,
      "note": "NCCC describes these as 'nominal rules' that may be modified on a weekly basis, and runs formal Ladder seasons interspersed with practice weeks. The 30-minute session slot itself is fixed.",
      "exchange": "Grid square (following NA VHF, WW Digi and ARRL IDC practice)",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "nccc-ns-ft4-20260703T0100@contestcal",
      "start_date": "2026-07-03",
      "mode_families": [
        "Digital",
        "FT8/FT4"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "nccc-ns-rtty",
      "name": "NCCC RTTY Sprint (RTTY NS)",
      "start": "2026-07-03T01:45:00Z",
      "end": "2026-07-03T02:15:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.5,
      "modes": [
        "RTTY"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m"
      ],
      "bands_note": "",
      "sponsor": "Northern California Contest Club (NCCC)",
      "rules_url": "https://ncccsprint.com/rttyns.html",
      "verified": true,
      "note": "NCCC describes these as 'nominal rules' that may be modified on a weekly basis, and runs formal Ladder seasons interspersed with practice weeks. The 30-minute session slot itself is fixed.",
      "exchange": "Serial number + name + QTH (both callsigns required in the exchange)",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "nccc-ns-rtty-20260703T0145@contestcal",
      "start_date": "2026-07-03",
      "mode_families": [
        "RTTY",
        "Digital"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "nccc-ns-cw",
      "name": "NCCC Sprint (NS)",
      "start": "2026-07-03T02:30:00Z",
      "end": "2026-07-03T03:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.5,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m"
      ],
      "bands_note": "",
      "sponsor": "Northern California Contest Club (NCCC)",
      "rules_url": "https://ncccsprint.com/rules.html",
      "verified": true,
      "note": "NCCC describes these as 'nominal rules' that may be modified on a weekly basis, and runs formal Ladder seasons interspersed with practice weeks. The 30-minute session slot itself is fixed.",
      "exchange": "Serial number + name + QTH (both callsigns required in the exchange)",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "nccc-ns-cw-20260703T0230@contestcal",
      "start_date": "2026-07-03",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "k1usn-sst",
      "name": "K1USN Slow Speed Test (SST)",
      "start": "2026-07-03T20:00:00Z",
      "end": "2026-07-03T21:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "",
      "sponsor": "K1USN Radio Club",
      "rules_url": "https://www.k1usn.com/sst_rules.html",
      "verified": true,
      "note": "No formal log submission -- participants post scores to 3830scores.com.",
      "exchange": "Name + state/province/DX country",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "k1usn-sst-20260703T2000@contestcal",
      "start_date": "2026-07-03",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "nzart-memorial-contest",
      "name": "NZART Memorial Contest",
      "start": "2026-07-04T08:00:00Z",
      "end": "2026-07-04T11:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 3,
      "modes": [
        "SSB",
        "CW"
      ],
      "submodes": [],
      "bands": [
        "80m"
      ],
      "bands_note": "Suggested frequencies CW 3520-3550 kHz, SSB 3610-3660 kHz",
      "sponsor": "NZART",
      "rules_url": "https://nzart.org.nz/activities/contests/memorial-contest/",
      "verified": true,
      "note": "Held every year since 1946 for the New Zealand amateurs who died in the Second World War. Three one-hour periods; a station may be worked once per period on each of SSB and CW. The QRP category is '5W CW/10W SSB maximum'. The log deadline is a fixed date, 'Logs must arrive no later than 31 July', not an interval, so none is computed; logs go to contests@nzart.org.nz.",
      "exchange": "RS(T) and a three-digit serial number starting at 001",
      "country": "NZ",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-17",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "nzart-memorial-contest-20260704T0800@contestcal",
      "start_date": "2026-07-04",
      "mode_families": [
        "CW",
        "SSB"
      ],
      "band_families": [
        "80m"
      ],
      "duration_bucket": "2-12"
    },
    {
      "contest_id": "sarl-newbie-qso-party",
      "name": "SARL Newbie QSO Party",
      "start": "2026-07-04T11:00:00Z",
      "end": "2026-07-04T16:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 5,
      "modes": [
        "SSB"
      ],
      "submodes": [],
      "bands": [
        "40m",
        "20m"
      ],
      "bands_note": "SSB only: 14 125-14 300 kHz from 11:00 to 13:00 UTC, then 7 063-7 100 and 7 130-7 200 kHz from 13:00 to 16:00 UTC.",
      "sponsor": "SARL",
      "rules_url": "https://mysarl.org.za/wp-content/uploads/2025/12/2026-SARL-Contest-Manual-Version-1.1-2025-12-15.pdf",
      "verified": true,
      "note": "The band changes partway through: 20 m for the first two hours, then 40 m for the last three. Both are recorded, because a band filter should find this contest either way; the split itself is in bands_note, which is where a time-varying detail belongs when the field is a flat list. log_format and log_deadline_days are absent: this pass read each contest's Aim, Dates, Frequencies and Exchange sections and did not read its Log Sheets section, so neither is recorded rather than assumed from SARL's other contests.",
      "exchange": "RS, a four-character grid square and the phonetic License Age Exchange from the manual's table -- Alpha for under six months, and so on.",
      "country": "ZA",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-19",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "sarl-newbie-qso-party-20260704T1100@contestcal",
      "start_date": "2026-07-04",
      "mode_families": [
        "SSB"
      ],
      "band_families": [
        "40m",
        "20m"
      ],
      "duration_bucket": "2-12"
    },
    {
      "contest_id": "jarl-6m-and-down",
      "name": "6m AND DOWN Contest",
      "start": "2026-07-04T12:00:00Z",
      "end": "2026-07-05T06:00:00Z",
      "start_wall": "2026-07-04T21:00:00",
      "end_wall": "2026-07-05T15:00:00",
      "local_rolling": false,
      "timezone": "Asia/Tokyo",
      "duration_hours": 18,
      "modes": [
        "CW",
        "SSB",
        "FM"
      ],
      "submodes": [
        "AM"
      ],
      "bands": [
        "6m",
        "2m",
        "70cm",
        "23cm",
        "13cm",
        "3cm"
      ],
      "bands_note": "50, 144 and 430 MHz plus every amateur band at 1200 MHz and above -- JARL's categories run 1200, 2400 and 5600 MHz and 10.1 GHz and up. The 5600 MHz band has no token in this catalog's band vocabulary and is recorded only here.",
      "sponsor": "JARL",
      "rules_url": "https://www.jarl.org/Japanese/1_Tanoshimo/1-1_Contest/6d_rules.html",
      "verified": true,
      "note": "Eighteen hours, not a full day: it opens at 2100 and closes at 1500, so the overnight VHF opening is the point of it. Encoded as wall_clock in Asia/Tokyo because that is how JARL states it -- 21時00分（JST） -- rather than converted to a fixed UTC time by hand. Japan has not observed daylight saving since 1952, so the two are identical in practice and will stay so; the record says what the sponsor said and lets the engine do the arithmetic. log_deadline_days is absent. JARL prints a dated deadline above the rules for the edition in hand -- ALL JA 2026 is '提出締切日 2026年5月6日（水）必着' -- and the numbered 規約 clauses that follow state the dates, eligibility, bands, categories and exchange but no submission span. All four of JARL's 2026 deadlines happen to fall exactly ten days after their contest ends, which is suggestive and is not a rule JARL wrote. The same reasoning already keeps a deadline off JARL's All Asian records.",
      "exchange": "On 50 MHz to 1200 MHz: RST, the prefecture or region number, and the power letter. On 2400 MHz and above: RST, the city, county or ward number, and the power letter.",
      "country": "JP",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-19",
      "can_enter": false,
      "eligibility_scope": "entity_list",
      "eligibility_reason": "Entry limited to JA. K stations may be worked but cannot submit an entry.",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "jarl-6m-and-down-20260704T1200@contestcal",
      "start_date": "2026-07-04",
      "mode_families": [
        "CW",
        "SSB",
        "FM"
      ],
      "band_families": [
        "6m",
        "VHF+"
      ],
      "duration_bucket": "12-24"
    },
    {
      "contest_id": "trac-ta-vhf-uhf",
      "name": "TA VHF-UHF Contest",
      "start": "2026-07-04T12:00:00Z",
      "end": "2026-07-05T12:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 24,
      "modes": [
        "SSB",
        "CW",
        "FM"
      ],
      "submodes": [],
      "bands": [
        "6m",
        "2m",
        "70cm"
      ],
      "bands_note": "6m: 50-52 MHz, 2m: 144-146 MHz, 70cm: 430-440 MHz, per the IARU Region 1 band plan. Phone is SSB or FM. Digital modes such as FT8 and JT65 and digital radios such as DMR and C4FM are forbidden -- 'Tüm QSO'lar analog olmalıdır', all QSOs must be analogue.",
      "sponsor": "TRAC",
      "rules_url": "https://trac.org.tr/tr/ta-vhf-uhf-contest-2026",
      "verified": false,
      "note": "VERIFIED FALSE, AND THE EXCEPTION IS THIS CATALOG'S INFERENCE RATHER THAN TRAC'S WORDING.\n\nTRAC states 'Temmuz ayının ilk hafta sonu' -- the first weekend of July -- and that reproduces its own published dates for 2024, 2025 and 2026. It does NOT reproduce 2023: 1 July 2023 was itself a Saturday, so the rule gives 1-2 July, and TRAC ran the contest on 8-9 July, a week later.\n\n`exclude_dates: [[7, 1]]` is what makes all FOUR published dates come out right, and it is the same shape as ARRL RTTY Roundup's 'first full weekend of January but never 1 January'. The difference is that ARRL states its exception and TRAC does not, so this is one year's evidence fitted into a rule rather than a rule read off a page.\n\nIt only matters when 1 July is a Saturday, which next happens in 2028, then 2034 and 2045. In every other year the exception is inert and the record is simply TRAC's own sentence. Ask TRAC what happens when the month opens on a Saturday and this becomes verified either way.\n\nModes: TRAC permits SSB, CW and FM. SSB is this catalog's only phone token, so FM is recorded in submodes and the ban on digital modes is in bands_note.",
      "exchange": "RST, a serial number starting at 001, and a six-character Maidenhead locator -- for example '59 123 KN90UX'.",
      "country": "TR",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-19",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "trac-ta-vhf-uhf-20260704T1200@contestcal",
      "start_date": "2026-07-04",
      "mode_families": [
        "CW",
        "SSB",
        "FM"
      ],
      "band_families": [
        "6m",
        "VHF+"
      ],
      "duration_bucket": "gte24"
    },
    {
      "contest_id": "podxs-40m-firecracker",
      "name": "PODXS 070 Club 40M Firecracker Sprint",
      "start": "2026-07-04T20:00:00Z",
      "end": "2026-07-05T19:59:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 23.98,
      "modes": [
        "Digital"
      ],
      "submodes": [
        "PSK31"
      ],
      "bands": [
        "40m"
      ],
      "bands_note": "",
      "sponsor": "PODXS 070 Club",
      "rules_url": "https://www.podxs070.com/o7o-club-sponsored-contests/40m-firecracker-sprint",
      "verified": true,
      "note": "The 24-hour window is the outer bound; maximum operating time is a six-hour block chosen by the entrant.",
      "exchange": "State/province/country (SPC)",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-12",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": "2026-07-12T19:59:00Z",
      "uid": "podxs-40m-firecracker-20260704T2000@contestcal",
      "start_date": "2026-07-04",
      "mode_families": [
        "Digital"
      ],
      "band_families": [
        "40m"
      ],
      "duration_bucket": "12-24"
    },
    {
      "contest_id": "zs5-qso-party",
      "name": "ZS5 QSO Party",
      "start": "2026-07-05T14:00:00Z",
      "end": "2026-07-05T15:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW",
        "SSB"
      ],
      "submodes": [],
      "bands": [
        "40m"
      ],
      "bands_note": "A phone and CW contest on 40 m: CW 7 000-7 040 kHz, SSB 7 063-7 100 and 7 130-7 200 kHz.",
      "sponsor": "Highway Amateur Radio Club",
      "rules_url": "https://mysarl.org.za/wp-content/uploads/2025/12/2026-SARL-Contest-Manual-Version-1.1-2025-12-15.pdf",
      "verified": true,
      "note": "SOURCED FROM THE SARL CONTEST MANUAL, WHICH IS NOT AN AGGREGATOR. The manual carries this contest's FULL rules -- aim, dates, exchange, frequencies, scoring, log sheets -- and names its organising club, rather than summarising a calendar entry. It is the venue in which South African clubs publish their contest rules, the way DARC's Ausschreibungen or UBA's rules pages are, so it is a primary source for these contests and not a third-party listing. The distinction that matters: an aggregator republishes rules it found elsewhere, and this is where the rules appear.",
      "exchange": "ZS5 stations send RS(T) and their town name or abbreviation; everyone else sends RS(T) and the provincial or country abbreviation.",
      "country": "ZA",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-19",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "zs5-qso-party-20260705T1400@contestcal",
      "start_date": "2026-07-05",
      "mode_families": [
        "CW",
        "SSB"
      ],
      "band_families": [
        "40m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "k1usn-sst",
      "name": "K1USN Slow Speed Test (SST)",
      "start": "2026-07-06T00:00:00Z",
      "end": "2026-07-06T01:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "",
      "sponsor": "K1USN Radio Club",
      "rules_url": "https://www.k1usn.com/sst_rules.html",
      "verified": true,
      "note": "No formal log submission -- participants post scores to 3830scores.com.",
      "exchange": "Name + state/province/DX country",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "k1usn-sst-20260706T0000@contestcal",
      "start_date": "2026-07-06",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "agcw-zap-merit",
      "name": "AGCW ZAP Merit Contest (ZMC)",
      "start": "2026-07-06T17:40:00Z",
      "end": "2026-07-06T18:30:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.83,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "80m"
      ],
      "bands_note": "",
      "sponsor": "AGCW-DL",
      "rules_url": "https://www.agcw.de/contest/tzap/",
      "verified": false,
      "note": "PARTLY UNVERIFIED. The recurrence (every Monday), the 1740 UTC pre-logging opening and the 1800 UTC telegram transmission are all quoted from AGCW. AGCW publishes NO closing time. The 1830 end stored here is a PLACEHOLDER so the record expands -- it is not a sponsor fact and must not be presented as one. Confirm the session length with the ZMC manager before shipping. Points accumulate over a calendar year; logs are due 31 January of the following year.",
      "exchange": "Callsign + date + time + RST (SWLs log RST of both stations in a QSO)",
      "country": "DE",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-12",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "agcw-zap-merit-20260706T1740@contestcal",
      "start_date": "2026-07-06",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "80m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "rsgb-80mcc-cw",
      "name": "RSGB 3.5 MHz Club Championship, CW",
      "start": "2026-07-06T19:00:00Z",
      "end": "2026-07-06T20:30:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1.5,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "80m"
      ],
      "bands_note": "3510-3565 kHz at any speed, with 3565-3570 kHz reserved for 15 wpm maximum.",
      "sponsor": "RSGB Contest Committee",
      "rules_url": "https://www.rsgbcc.org/hf/rules/2026/r80mcc.shtml",
      "verified": true,
      "note": "THE DATES ARE NOT ON THE RULES PAGE. RSGB publishes the rules at rules/2026/r80mcc.shtml and the eighteen legs on a separate CGI calendar, and the rules page links to it in so many words. This record holds what that calendar prints; nothing is derived.\n\nTHE CLOCK MOVES IN APRIL and the record says so per date: February and March run 2000-2130 UTC, April to July run 1900-2030. The record's default is the April-July clock because four of each mode's six legs use it, and the two early legs carry their own times. Same mechanism as the Autumn Series, and the second contest to need it.\n\nMANUAL BECAUSE THE LEGS FOLLOW NO ORDINAL. They fall on Mondays, Wednesdays and Thursdays with the weekday rotating through the series, which is exactly the shape an ordinal must not be fitted to.\n\nNON-UK STATIONS MAY ENTER AS INDIVIDUALS -- RSGB states it, which is worth noting beside the AFS and Club Calls contests where entry really is UK&CD only.",
      "exchange": "RS(T) plus a serial number starting at 1 and incrementing by 1.",
      "country": "GB",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-23",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": "2026-07-07T20:30:00Z",
      "uid": "rsgb-80mcc-cw-20260706T1900@contestcal",
      "start_date": "2026-07-06",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "80m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "ars-spartan-sprint",
      "name": "ARS Spartan Sprint",
      "start": "2026-07-07T00:00:00Z",
      "end": "2026-07-07T02:00:00Z",
      "start_wall": "2026-07-06T20:00:00",
      "end_wall": "2026-07-06T22:00:00",
      "local_rolling": false,
      "timezone": "America/New_York",
      "duration_hours": 2,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "",
      "sponsor": "Adventure Radio Society",
      "rules_url": "https://ars-qrp.com/Spartan_Sprint/Spartan_Sprint.html",
      "verified": true,
      "note": "CORRECTION (anchor): previously encoded as the first TUESDAY of the month. The sponsor's rule is the first MONDAY US local, which lands on Tuesday UTC -- and those are different dates whenever the 1st falls on a Tuesday (Sep and Dec 2026). SPONSOR-ANCHORED LOCAL TIME: ARS publishes no UTC time and states the event 'is always at these Local Times', so the UTC instant is what moves -- 0100Z Tuesday under EST, 0000Z Tuesday under EDT. Resolved through America/New_York rather than hardcoded, so DST is handled. ARS lists Eastern, Central, Mountain and Pacific times that are the same instant in every zone that observes DST; Arizona, which does not, is the one place the sponsor's own table is inconsistent.",
      "exchange": "RST + state/province + power output",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "ars-spartan-sprint-20260707T0000@contestcal",
      "start_date": "2026-07-07",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "2-12"
    },
    {
      "contest_id": "cwops-cwt",
      "name": "CWops Test (CWT)",
      "start": "2026-07-08T13:00:00Z",
      "end": "2026-07-08T14:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "CWops",
      "rules_url": "https://cwops.org/cwops-tests/",
      "verified": true,
      "note": "",
      "exchange": "Members: name + CWops number. Non-members: name + state/province/DX prefix.",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "cwops-cwt-20260708T1300@contestcal",
      "start_date": "2026-07-08",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "cwops-cwt",
      "name": "CWops Test (CWT)",
      "start": "2026-07-08T19:00:00Z",
      "end": "2026-07-08T20:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "CWops",
      "rules_url": "https://cwops.org/cwops-tests/",
      "verified": true,
      "note": "",
      "exchange": "Members: name + CWops number. Non-members: name + state/province/DX prefix.",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "cwops-cwt-20260708T1900@contestcal",
      "start_date": "2026-07-08",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "cwops-cwt",
      "name": "CWops Test (CWT)",
      "start": "2026-07-09T03:00:00Z",
      "end": "2026-07-09T04:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "CWops",
      "rules_url": "https://cwops.org/cwops-tests/",
      "verified": true,
      "note": "",
      "exchange": "Members: name + CWops number. Non-members: name + state/province/DX prefix.",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "cwops-cwt-20260709T0300@contestcal",
      "start_date": "2026-07-09",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "cwops-cwt",
      "name": "CWops Test (CWT)",
      "start": "2026-07-09T07:00:00Z",
      "end": "2026-07-09T08:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "CWops",
      "rules_url": "https://cwops.org/cwops-tests/",
      "verified": true,
      "note": "",
      "exchange": "Members: name + CWops number. Non-members: name + state/province/DX prefix.",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "cwops-cwt-20260709T0700@contestcal",
      "start_date": "2026-07-09",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "nccc-ns-ft4",
      "name": "NCCC FT4 Sprint (FT4 NS)",
      "start": "2026-07-10T01:00:00Z",
      "end": "2026-07-10T01:30:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.5,
      "modes": [
        "FT8/FT4"
      ],
      "submodes": [
        "FT4"
      ],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "Northern California Contest Club (NCCC)",
      "rules_url": "https://www.ncccsprint.com/ft4ns.html",
      "verified": true,
      "note": "NCCC describes these as 'nominal rules' that may be modified on a weekly basis, and runs formal Ladder seasons interspersed with practice weeks. The 30-minute session slot itself is fixed.",
      "exchange": "Grid square (following NA VHF, WW Digi and ARRL IDC practice)",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "nccc-ns-ft4-20260710T0100@contestcal",
      "start_date": "2026-07-10",
      "mode_families": [
        "Digital",
        "FT8/FT4"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "nccc-ns-rtty",
      "name": "NCCC RTTY Sprint (RTTY NS)",
      "start": "2026-07-10T01:45:00Z",
      "end": "2026-07-10T02:15:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.5,
      "modes": [
        "RTTY"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m"
      ],
      "bands_note": "",
      "sponsor": "Northern California Contest Club (NCCC)",
      "rules_url": "https://ncccsprint.com/rttyns.html",
      "verified": true,
      "note": "NCCC describes these as 'nominal rules' that may be modified on a weekly basis, and runs formal Ladder seasons interspersed with practice weeks. The 30-minute session slot itself is fixed.",
      "exchange": "Serial number + name + QTH (both callsigns required in the exchange)",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "nccc-ns-rtty-20260710T0145@contestcal",
      "start_date": "2026-07-10",
      "mode_families": [
        "RTTY",
        "Digital"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "nccc-ns-cw",
      "name": "NCCC Sprint (NS)",
      "start": "2026-07-10T02:30:00Z",
      "end": "2026-07-10T03:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.5,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m"
      ],
      "bands_note": "",
      "sponsor": "Northern California Contest Club (NCCC)",
      "rules_url": "https://ncccsprint.com/rules.html",
      "verified": true,
      "note": "NCCC describes these as 'nominal rules' that may be modified on a weekly basis, and runs formal Ladder seasons interspersed with practice weeks. The 30-minute session slot itself is fixed.",
      "exchange": "Serial number + name + QTH (both callsigns required in the exchange)",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "nccc-ns-cw-20260710T0230@contestcal",
      "start_date": "2026-07-10",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "k1usn-sst",
      "name": "K1USN Slow Speed Test (SST)",
      "start": "2026-07-10T20:00:00Z",
      "end": "2026-07-10T21:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "",
      "sponsor": "K1USN Radio Club",
      "rules_url": "https://www.k1usn.com/sst_rules.html",
      "verified": true,
      "note": "No formal log submission -- participants post scores to 3830scores.com.",
      "exchange": "Name + state/province/DX country",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "k1usn-sst-20260710T2000@contestcal",
      "start_date": "2026-07-10",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "arrl-iaru-hf",
      "name": "IARU HF World Championship",
      "start": "2026-07-11T12:00:00Z",
      "end": "2026-07-12T11:59:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 23.98,
      "modes": [
        "CW",
        "SSB"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "",
      "sponsor": "ARRL / IARU",
      "rules_url": "http://www.arrl.org/iaru-hf-world-championship",
      "verified": true,
      "note": "",
      "exchange": "",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-21",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "arrl-iaru-hf-20260711T1200@contestcal",
      "start_date": "2026-07-11",
      "mode_families": [
        "CW",
        "SSB"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "12-24"
    },
    {
      "contest_id": "skcc-wes",
      "name": "SKCC Weekend Sprintathon (WES)",
      "start": "2026-07-11T12:00:00Z",
      "end": "2026-07-12T23:59:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 35.98,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "Straight Key Century Club",
      "rules_url": "https://www.skccgroup.com/operating_activities/weekend_sprintathon/",
      "verified": true,
      "note": "Older sources describe the anchor as 'the Saturday following the 6th', which differs from '2nd Saturday' in some months. SKCC's current page says 2nd Saturday; re-check if dates drift.",
      "exchange": "RST + state/province/country + name + SKCC number (C/T/S suffix for award holders)",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "skcc-wes-20260711T1200@contestcal",
      "start_date": "2026-07-11",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m",
        "6m"
      ],
      "duration_bucket": "gte24"
    },
    {
      "contest_id": "4sqrp-sss",
      "name": "4 States QRP Group Second Sunday Sprint (SSS)",
      "start": "2026-07-13T00:00:00Z",
      "end": "2026-07-13T02:00:00Z",
      "start_wall": "2026-07-12T19:00:00",
      "end_wall": "2026-07-12T21:00:00",
      "local_rolling": false,
      "timezone": "America/Chicago",
      "duration_hours": 2,
      "modes": [
        "CW",
        "SSB",
        "Digital"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "",
      "sponsor": "4 States QRP Group",
      "rules_url": "https://www.4sqrp.com/SSS/sss_rules_revised_02_2026.pdf",
      "verified": true,
      "note": "SPONSOR-ANCHORED LOCAL TIME. The anchor is the second SUNDAY and the sprint runs into Monday UTC. 4SQRP states the consequence itself: '7 PM until 9 PM central time (CST or CDT, whichever is in effect at the time). If you use UTC, that time changes when we switch from CST to CDT (or vice versa).' Resolved through America/Chicago, so it is 0100Z Monday in winter and 0000Z Monday in summer.",
      "exchange": "RST + state/province/country + 4SQRP member number (power if non-member)",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "4sqrp-sss-20260713T0000@contestcal",
      "start_date": "2026-07-13",
      "mode_families": [
        "CW",
        "SSB",
        "Digital"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "2-12"
    },
    {
      "contest_id": "k1usn-sst",
      "name": "K1USN Slow Speed Test (SST)",
      "start": "2026-07-13T00:00:00Z",
      "end": "2026-07-13T01:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "",
      "sponsor": "K1USN Radio Club",
      "rules_url": "https://www.k1usn.com/sst_rules.html",
      "verified": true,
      "note": "No formal log submission -- participants post scores to 3830scores.com.",
      "exchange": "Name + state/province/DX country",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "k1usn-sst-20260713T0000@contestcal",
      "start_date": "2026-07-13",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "agcw-zap-merit",
      "name": "AGCW ZAP Merit Contest (ZMC)",
      "start": "2026-07-13T17:40:00Z",
      "end": "2026-07-13T18:30:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.83,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "80m"
      ],
      "bands_note": "",
      "sponsor": "AGCW-DL",
      "rules_url": "https://www.agcw.de/contest/tzap/",
      "verified": false,
      "note": "PARTLY UNVERIFIED. The recurrence (every Monday), the 1740 UTC pre-logging opening and the 1800 UTC telegram transmission are all quoted from AGCW. AGCW publishes NO closing time. The 1830 end stored here is a PLACEHOLDER so the record expands -- it is not a sponsor fact and must not be presented as one. Confirm the session length with the ZMC manager before shipping. Points accumulate over a calendar year; logs are due 31 January of the following year.",
      "exchange": "Callsign + date + time + RST (SWLs log RST of both stations in a QSO)",
      "country": "DE",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-12",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "agcw-zap-merit-20260713T1740@contestcal",
      "start_date": "2026-07-13",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "80m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "darc-rtty-kurzcontest",
      "name": "DARC RTTY-Kurzcontest",
      "start": "2026-07-14T18:00:00Z",
      "end": "2026-07-14T19:29:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1.48,
      "modes": [
        "RTTY"
      ],
      "submodes": [
        "RTTY 45.45 baud"
      ],
      "bands": [
        "80m",
        "40m"
      ],
      "bands_note": "",
      "sponsor": "DARC",
      "rules_url": "https://www.darc.de/der-club/referate/conteste/rtty-kurz/rtty-rules/",
      "verified": true,
      "note": "Four legs a year, one record, offset one month from the FT4 contest: RTTY takes the first month of each quarter and FT4 the second, both on the second Tuesday.",
      "exchange": "RST + DOK; German non-members send 'NM'. Stations outside Germany send RST + serial from 001.",
      "country": "DE",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-18",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": "2026-07-21T19:29:00Z",
      "uid": "darc-rtty-kurzcontest-20260714T1800@contestcal",
      "start_date": "2026-07-14",
      "mode_families": [
        "RTTY",
        "Digital"
      ],
      "band_families": [
        "80m",
        "40m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "cwops-cwt",
      "name": "CWops Test (CWT)",
      "start": "2026-07-15T13:00:00Z",
      "end": "2026-07-15T14:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "CWops",
      "rules_url": "https://cwops.org/cwops-tests/",
      "verified": true,
      "note": "",
      "exchange": "Members: name + CWops number. Non-members: name + state/province/DX prefix.",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "cwops-cwt-20260715T1300@contestcal",
      "start_date": "2026-07-15",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "cwops-cwt",
      "name": "CWops Test (CWT)",
      "start": "2026-07-15T19:00:00Z",
      "end": "2026-07-15T20:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "CWops",
      "rules_url": "https://cwops.org/cwops-tests/",
      "verified": true,
      "note": "",
      "exchange": "Members: name + CWops number. Non-members: name + state/province/DX prefix.",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "cwops-cwt-20260715T1900@contestcal",
      "start_date": "2026-07-15",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "rsgb-80mcc-ssb",
      "name": "RSGB 3.5 MHz Club Championship, SSB",
      "start": "2026-07-15T19:00:00Z",
      "end": "2026-07-15T20:30:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1.5,
      "modes": [
        "SSB"
      ],
      "submodes": [],
      "bands": [
        "80m"
      ],
      "bands_note": "3600-3775 kHz.",
      "sponsor": "RSGB Contest Committee",
      "rules_url": "https://www.rsgbcc.org/hf/rules/2026/r80mcc.shtml",
      "verified": true,
      "note": "THE DATES ARE NOT ON THE RULES PAGE. RSGB publishes the rules at rules/2026/r80mcc.shtml and the eighteen legs on a separate CGI calendar, and the rules page links to it in so many words. This record holds what that calendar prints; nothing is derived.\n\nTHE CLOCK MOVES IN APRIL and the record says so per date: February and March run 2000-2130 UTC, April to July run 1900-2030. The record's default is the April-July clock because four of each mode's six legs use it, and the two early legs carry their own times. Same mechanism as the Autumn Series, and the second contest to need it.\n\nMANUAL BECAUSE THE LEGS FOLLOW NO ORDINAL. They fall on Mondays, Wednesdays and Thursdays with the weekday rotating through the series, which is exactly the shape an ordinal must not be fitted to.\n\nNON-UK STATIONS MAY ENTER AS INDIVIDUALS -- RSGB states it, which is worth noting beside the AFS and Club Calls contests where entry really is UK&CD only.",
      "exchange": "RS(T) plus a serial number starting at 1 and incrementing by 1.",
      "country": "GB",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-23",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": "2026-07-16T20:30:00Z",
      "uid": "rsgb-80mcc-ssb-20260715T1900@contestcal",
      "start_date": "2026-07-15",
      "mode_families": [
        "SSB"
      ],
      "band_families": [
        "80m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "cwops-cwt",
      "name": "CWops Test (CWT)",
      "start": "2026-07-16T03:00:00Z",
      "end": "2026-07-16T04:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "CWops",
      "rules_url": "https://cwops.org/cwops-tests/",
      "verified": true,
      "note": "",
      "exchange": "Members: name + CWops number. Non-members: name + state/province/DX prefix.",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "cwops-cwt-20260716T0300@contestcal",
      "start_date": "2026-07-16",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "cwops-cwt",
      "name": "CWops Test (CWT)",
      "start": "2026-07-16T07:00:00Z",
      "end": "2026-07-16T08:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "CWops",
      "rules_url": "https://cwops.org/cwops-tests/",
      "verified": true,
      "note": "",
      "exchange": "Members: name + CWops number. Non-members: name + state/province/DX prefix.",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "cwops-cwt-20260716T0700@contestcal",
      "start_date": "2026-07-16",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "nccc-ns-ft4",
      "name": "NCCC FT4 Sprint (FT4 NS)",
      "start": "2026-07-17T01:00:00Z",
      "end": "2026-07-17T01:30:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.5,
      "modes": [
        "FT8/FT4"
      ],
      "submodes": [
        "FT4"
      ],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "Northern California Contest Club (NCCC)",
      "rules_url": "https://www.ncccsprint.com/ft4ns.html",
      "verified": true,
      "note": "NCCC describes these as 'nominal rules' that may be modified on a weekly basis, and runs formal Ladder seasons interspersed with practice weeks. The 30-minute session slot itself is fixed.",
      "exchange": "Grid square (following NA VHF, WW Digi and ARRL IDC practice)",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "nccc-ns-ft4-20260717T0100@contestcal",
      "start_date": "2026-07-17",
      "mode_families": [
        "Digital",
        "FT8/FT4"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "nccc-ns-rtty",
      "name": "NCCC RTTY Sprint (RTTY NS)",
      "start": "2026-07-17T01:45:00Z",
      "end": "2026-07-17T02:15:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.5,
      "modes": [
        "RTTY"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m"
      ],
      "bands_note": "",
      "sponsor": "Northern California Contest Club (NCCC)",
      "rules_url": "https://ncccsprint.com/rttyns.html",
      "verified": true,
      "note": "NCCC describes these as 'nominal rules' that may be modified on a weekly basis, and runs formal Ladder seasons interspersed with practice weeks. The 30-minute session slot itself is fixed.",
      "exchange": "Serial number + name + QTH (both callsigns required in the exchange)",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "nccc-ns-rtty-20260717T0145@contestcal",
      "start_date": "2026-07-17",
      "mode_families": [
        "RTTY",
        "Digital"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "nccc-ns-cw",
      "name": "NCCC Sprint (NS)",
      "start": "2026-07-17T02:30:00Z",
      "end": "2026-07-17T03:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.5,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m"
      ],
      "bands_note": "",
      "sponsor": "Northern California Contest Club (NCCC)",
      "rules_url": "https://ncccsprint.com/rules.html",
      "verified": true,
      "note": "NCCC describes these as 'nominal rules' that may be modified on a weekly basis, and runs formal Ladder seasons interspersed with practice weeks. The 30-minute session slot itself is fixed.",
      "exchange": "Serial number + name + QTH (both callsigns required in the exchange)",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "nccc-ns-cw-20260717T0230@contestcal",
      "start_date": "2026-07-17",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "k1usn-sst",
      "name": "K1USN Slow Speed Test (SST)",
      "start": "2026-07-17T20:00:00Z",
      "end": "2026-07-17T21:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "",
      "sponsor": "K1USN Radio Club",
      "rules_url": "https://www.k1usn.com/sst_rules.html",
      "verified": true,
      "note": "No formal log submission -- participants post scores to 3830scores.com.",
      "exchange": "Name + state/province/DX country",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "k1usn-sst-20260717T2000@contestcal",
      "start_date": "2026-07-17",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "labre-dx",
      "name": "LABRE DX Contest",
      "start": "2026-07-18T00:00:00Z",
      "end": "2026-07-19T23:59:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 47.98,
      "modes": [
        "SSB",
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "Only the 1.8, 3.5, 7, 14, 21, and 28 MHz bands may be used",
      "sponsor": "LABRE",
      "rules_url": "https://www.labre.org.br/contest/",
      "verified": true,
      "note": "LABRE prints a log submission link, https://www.labre.org.br/sendlog, which returned 404 when this record was checked; entries can also be raised with contest@labre.org.br. No log_submit_url is recorded rather than one that does not resolve.",
      "exchange": "Brazilian stations send RS(T) and their two-letter state abbreviation; stations outside Brazil send RS(T) and a two-letter continent code",
      "country": "BR",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-17",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": "2026-07-24T23:59:00Z",
      "uid": "labre-dx-20260718T0000@contestcal",
      "start_date": "2026-07-18",
      "mode_families": [
        "CW",
        "SSB"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "gte24"
    },
    {
      "contest_id": "sarl-qrp-winter",
      "name": "SARL QRP Contest (Winter leg)",
      "start": "2026-07-18T07:00:00Z",
      "end": "2026-07-18T09:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 2,
      "modes": [
        "SSB",
        "CW"
      ],
      "submodes": [],
      "bands": [
        "40m",
        "20m",
        "10m"
      ],
      "bands_note": "40m, 20m and 10m, any of them at any time during the contest. QRP calling frequencies 7.090, 14.285 and 28.360 MHz are suggested.",
      "sponsor": "SARL",
      "rules_url": "https://mysarl.org.za/wp-content/uploads/2025/12/2026-SARL-Contest-Manual-Version-1.1-2025-12-15.pdf",
      "verified": true,
      "note": "The winter leg is the July one -- the seasons are southern hemisphere, so January is summer. One of SARL's four named QRP legs. They are four records rather than one because SARL names four legs by season and they do not share a clock: the Summer and Winter legs run 07:00-09:00 UTC and the Autumn and Spring legs 13:30-15:30, so no single start/end pair covers them. Grouping the two pairs by their times would have been this catalog inventing a structure SARL does not use. log_format and log_deadline_days are absent: this pass read each contest's Aim, Dates, Frequencies and Exchange sections and did not read its Log Sheets section, so neither is recorded rather than assumed from SARL's other contests.",
      "exchange": "Realistic RS(T), 6-character grid square and transmit power in watts (for example 57, KG33uk, 10).",
      "country": "ZA",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-19",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "sarl-qrp-winter-20260718T0700@contestcal",
      "start_date": "2026-07-18",
      "mode_families": [
        "CW",
        "SSB"
      ],
      "band_families": [
        "40m",
        "20m",
        "10m"
      ],
      "duration_bucket": "2-12"
    },
    {
      "contest_id": "wia-trans-tasman",
      "name": "Trans-Tasman Low-Band Contest",
      "start": "2026-07-18T08:00:00Z",
      "end": "2026-07-18T14:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 6,
      "modes": [
        "SSB",
        "CW",
        "Digital",
        "RTTY"
      ],
      "submodes": [
        "PSK"
      ],
      "bands": [
        "160m",
        "80m",
        "40m"
      ],
      "bands_note": "SSB voice transmission should be within 1843-1875, 3535-3570 and 3600-3700, 7080-7300KHz. Do not use voice in the digital section 3570-3600KHz",
      "sponsor": "WIA",
      "rules_url": "https://www.wia.org.au/members/contests/transtasman/",
      "verified": true,
      "note": "WIA runs one digital section covering PSK and RTTY, scored together. Both Digital and RTTY are recorded as modes because both are named in the rules, and a band-and-mode filter for either one should find this contest; PSK has no token in this catalog's vocabulary, so it sits in submodes.",
      "exchange": "RS(T) and a serial number starting at 001",
      "country": "AU",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-17",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": "2026-07-26T14:00:00Z",
      "uid": "wia-trans-tasman-20260718T0800@contestcal",
      "start_date": "2026-07-18",
      "mode_families": [
        "CW",
        "SSB",
        "RTTY",
        "Digital"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m"
      ],
      "duration_bucket": "2-12"
    },
    {
      "contest_id": "ure-cncw",
      "name": "Concurso Nacional CW (CNCW)",
      "start": "2026-07-18T12:00:00Z",
      "end": "2026-07-18T22:59:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 10.98,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "",
      "sponsor": "URE",
      "rules_url": "https://concursos.ure.es/en/cncw/bases/",
      "verified": true,
      "note": "Two sessions with an overnight break, encoded in the sessions array; the top-level start/end repeat the first session, as elsewhere in this catalog. URE states one deadline for the contest as a whole and it is the second session's end plus 15 days exactly. The engine applies log_deadline_days to each session separately, so the first session's computed deadline falls a day before URE's printed one. Dropping the interval to quote a fixed date instead would lose the arithmetic URE actually states, so the interval is kept and the artefact recorded here.",
      "exchange": "RST + the provincial abbreviation. EA4URE sends RST and HQ; URE members operating from outside Spain send RST and SU.",
      "country": "ES",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-18",
      "can_enter": false,
      "eligibility_scope": "entity_list",
      "eligibility_reason": "Entry limited to EA, EA6, EA8, EA9. K stations may be worked but cannot submit an entry.",
      "works": "everyone",
      "practical": "",
      "log_due": "2026-08-02T22:59:00Z",
      "uid": "ure-cncw-20260718T1200@contestcal",
      "start_date": "2026-07-18",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "2-12"
    },
    {
      "contest_id": "naqp-rtty",
      "name": "North American QSO Party, RTTY",
      "start": "2026-07-18T18:00:00Z",
      "end": "2026-07-19T05:59:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 11.98,
      "modes": [
        "RTTY"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "",
      "sponsor": "National Contest Journal (NCJ)",
      "rules_url": "https://www.ncjweb.com/NAQP-Rules.pdf",
      "verified": true,
      "note": "Demonstrates that 'last Saturday' and 'last full weekend' are distinct rules. CQ 160 SSB turned out to need a third one again -- CQ's published dates fit neither, and that record is the fourth Saturday of February.",
      "exchange": "Name + state/province/country",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "naqp-rtty-20260718T1800@contestcal",
      "start_date": "2026-07-18",
      "mode_families": [
        "RTTY",
        "Digital"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "2-12"
    },
    {
      "contest_id": "ure-cncw",
      "name": "Concurso Nacional CW (CNCW)",
      "start": "2026-07-19T05:00:00Z",
      "end": "2026-07-19T11:59:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 6.98,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "",
      "sponsor": "URE",
      "rules_url": "https://concursos.ure.es/en/cncw/bases/",
      "verified": true,
      "note": "Two sessions with an overnight break, encoded in the sessions array; the top-level start/end repeat the first session, as elsewhere in this catalog. URE states one deadline for the contest as a whole and it is the second session's end plus 15 days exactly. The engine applies log_deadline_days to each session separately, so the first session's computed deadline falls a day before URE's printed one. Dropping the interval to quote a fixed date instead would lose the arithmetic URE actually states, so the interval is kept and the artefact recorded here.",
      "exchange": "RST + the provincial abbreviation. EA4URE sends RST and HQ; URE members operating from outside Spain send RST and SU.",
      "country": "ES",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-18",
      "can_enter": false,
      "eligibility_scope": "entity_list",
      "eligibility_reason": "Entry limited to EA, EA6, EA8, EA9. K stations may be worked but cannot submit an entry.",
      "works": "everyone",
      "practical": "",
      "log_due": "2026-08-03T11:59:00Z",
      "uid": "ure-cncw-20260719T0500@contestcal",
      "start_date": "2026-07-19",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "2-12"
    },
    {
      "contest_id": "uska-nmd",
      "name": "USKA National Mountain Day (NMD)",
      "start": "2026-07-19T06:00:00Z",
      "end": "2026-07-19T09:59:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 3.98,
      "modes": [
        "CW",
        "SSB"
      ],
      "submodes": [],
      "bands": [
        "80m"
      ],
      "bands_note": "CW in 3510-3560 kHz and SSB in 3600-3650 kHz.",
      "sponsor": "USKA",
      "rules_url": "https://uska.ch/download/reglement-fuer-den-national-mountain-day-ausgabe-mai-2026-d/",
      "verified": true,
      "note": "USKA splits the four hours into halves (06:00-07:59 and 08:00-09:59) only to allow one repeat QSO per mode with each NMD station; it is one continuous contest and is encoded as one span. The third Sunday of July 2026 is the 19th, which is the date USKA's KW-Contest page prints.",
      "exchange": "Between NMD stations, RS(T) and a text of at least 15 characters that may be used only once. With everyone else, the report alone.",
      "country": "CH",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-19",
      "can_enter": false,
      "eligibility_scope": "entity_list",
      "eligibility_reason": "Entry limited to HB. K stations may be worked but cannot submit an entry.",
      "works": "everyone",
      "practical": "",
      "log_due": "2026-07-27T09:59:00Z",
      "uid": "uska-nmd-20260719T0600@contestcal",
      "start_date": "2026-07-19",
      "mode_families": [
        "CW",
        "SSB"
      ],
      "band_families": [
        "80m"
      ],
      "duration_bucket": "2-12"
    },
    {
      "contest_id": "rsgb-low-power",
      "name": "RSGB Low Power Contest",
      "start": "2026-07-19T09:00:00Z",
      "end": "2026-07-19T12:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 3,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "80m",
        "40m",
        "20m"
      ],
      "bands_note": "CW only: 3510-3580 kHz (3540-3560 recommended), 7000-7040 kHz (7020-7040 recommended), 14000-14060 kHz (14040-14060 recommended).",
      "sponsor": "RSGB Contest Committee",
      "rules_url": "https://www.rsgbcc.org/hf/rules/2026/rqrp.shtml",
      "verified": true,
      "note": "TWO SESSIONS WITH AN HOUR'S BREAK FOR LUNCH, which is why this record uses the sessions array: 0900-1200 and 1300-1600. Encoding it as a single seven-hour block would put a contest on the calendar during an hour RSGB does not run one.\n\nThe exchange includes your transmitted power, which is how a low-power contest scores itself.\n\nELIGIBILITY IS THE ONE UNVERIFIED THING HERE. RSGB says 'UK&CD entrants must be RSGB members' and says nothing about anyone else, which reads as open but is an absence rather than a statement. RSGB also runs a separately-named 'International Low Power Contest' in its results archive, which suggests this one may be the domestic one. Worth one question. RSGB keeps a rules page per year, so its own dates check its own rule. Four years were read for this record -- 2023, 2024, 2025 and 2026 -- and the recurrence reproduces all of them.\n\nPART OF THIS IS NOW ANSWERED, 2026-08-23. The open question was whether the July contest encoded here is RSGB's domestic low-power event or the 'International Low Power Contest' that appears separately in their results archive. RSGB's own HF Championship page lists the eleven contests counting towards it, and the July entry is named 'International Low Power Contest' -- there is exactly one low-power contest in RSGB's season and it is this one. So the two names are the same contest.\n\nThat does NOT by itself prove non-UK stations may enter, which is why the record stays verified: false: the championship's own entry clause is 'single operators who at the time of each contest are RSGB members and are operating in the UK&CD', and that is the CHAMPIONSHIP's restriction rather than the contest's. What has gone is the possibility that we encoded the wrong one of two contests.",
      "exchange": "RS(T) plus a serial number starting at 1 and incrementing by 1, plus your transmitted power.",
      "country": "GB",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-20",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "rsgb-low-power-20260719T0900@contestcal",
      "start_date": "2026-07-19",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "80m",
        "40m",
        "20m"
      ],
      "duration_bucket": "2-12"
    },
    {
      "contest_id": "rsgb-low-power",
      "name": "RSGB Low Power Contest",
      "start": "2026-07-19T13:00:00Z",
      "end": "2026-07-19T16:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 3,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "80m",
        "40m",
        "20m"
      ],
      "bands_note": "CW only: 3510-3580 kHz (3540-3560 recommended), 7000-7040 kHz (7020-7040 recommended), 14000-14060 kHz (14040-14060 recommended).",
      "sponsor": "RSGB Contest Committee",
      "rules_url": "https://www.rsgbcc.org/hf/rules/2026/rqrp.shtml",
      "verified": true,
      "note": "TWO SESSIONS WITH AN HOUR'S BREAK FOR LUNCH, which is why this record uses the sessions array: 0900-1200 and 1300-1600. Encoding it as a single seven-hour block would put a contest on the calendar during an hour RSGB does not run one.\n\nThe exchange includes your transmitted power, which is how a low-power contest scores itself.\n\nELIGIBILITY IS THE ONE UNVERIFIED THING HERE. RSGB says 'UK&CD entrants must be RSGB members' and says nothing about anyone else, which reads as open but is an absence rather than a statement. RSGB also runs a separately-named 'International Low Power Contest' in its results archive, which suggests this one may be the domestic one. Worth one question. RSGB keeps a rules page per year, so its own dates check its own rule. Four years were read for this record -- 2023, 2024, 2025 and 2026 -- and the recurrence reproduces all of them.\n\nPART OF THIS IS NOW ANSWERED, 2026-08-23. The open question was whether the July contest encoded here is RSGB's domestic low-power event or the 'International Low Power Contest' that appears separately in their results archive. RSGB's own HF Championship page lists the eleven contests counting towards it, and the July entry is named 'International Low Power Contest' -- there is exactly one low-power contest in RSGB's season and it is this one. So the two names are the same contest.\n\nThat does NOT by itself prove non-UK stations may enter, which is why the record stays verified: false: the championship's own entry clause is 'single operators who at the time of each contest are RSGB members and are operating in the UK&CD', and that is the CHAMPIONSHIP's restriction rather than the contest's. What has gone is the possibility that we encoded the wrong one of two contests.",
      "exchange": "RS(T) plus a serial number starting at 1 and incrementing by 1, plus your transmitted power.",
      "country": "GB",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-20",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "rsgb-low-power-20260719T1300@contestcal",
      "start_date": "2026-07-19",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "80m",
        "40m",
        "20m"
      ],
      "duration_bucket": "2-12"
    },
    {
      "contest_id": "zs2-qso-party",
      "name": "ZS2 QSO Party",
      "start": "2026-07-19T14:00:00Z",
      "end": "2026-07-19T15:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW",
        "SSB"
      ],
      "submodes": [],
      "bands": [
        "40m"
      ],
      "bands_note": "A phone and CW contest on 40 m: CW 7 000-7 040 kHz, SSB 7 063-7 100 and 7 130-7 200 kHz.",
      "sponsor": "Port Elizabeth Amateur Radio Society (PEARS)",
      "rules_url": "https://mysarl.org.za/wp-content/uploads/2025/12/2026-SARL-Contest-Manual-Version-1.1-2025-12-15.pdf",
      "verified": true,
      "note": "SOURCED FROM THE SARL CONTEST MANUAL, WHICH IS NOT AN AGGREGATOR. The manual carries this contest's FULL rules -- aim, dates, exchange, frequencies, scoring, log sheets -- and names its organising club, rather than summarising a calendar entry. It is the venue in which South African clubs publish their contest rules, the way DARC's Ausschreibungen or UBA's rules pages are, so it is a primary source for these contests and not a third-party listing. The distinction that matters: an aggregator republishes rules it found elsewhere, and this is where the rules appear.",
      "exchange": "RS(T) and the provincial or country abbreviation.",
      "country": "ZA",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-19",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "zs2-qso-party-20260719T1400@contestcal",
      "start_date": "2026-07-19",
      "mode_families": [
        "CW",
        "SSB"
      ],
      "band_families": [
        "40m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "k1usn-sst",
      "name": "K1USN Slow Speed Test (SST)",
      "start": "2026-07-20T00:00:00Z",
      "end": "2026-07-20T01:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "",
      "sponsor": "K1USN Radio Club",
      "rules_url": "https://www.k1usn.com/sst_rules.html",
      "verified": true,
      "note": "No formal log submission -- participants post scores to 3830scores.com.",
      "exchange": "Name + state/province/DX country",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "k1usn-sst-20260720T0000@contestcal",
      "start_date": "2026-07-20",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "agcw-zap-merit",
      "name": "AGCW ZAP Merit Contest (ZMC)",
      "start": "2026-07-20T17:40:00Z",
      "end": "2026-07-20T18:30:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.83,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "80m"
      ],
      "bands_note": "",
      "sponsor": "AGCW-DL",
      "rules_url": "https://www.agcw.de/contest/tzap/",
      "verified": false,
      "note": "PARTLY UNVERIFIED. The recurrence (every Monday), the 1740 UTC pre-logging opening and the 1800 UTC telegram transmission are all quoted from AGCW. AGCW publishes NO closing time. The 1830 end stored here is a PLACEHOLDER so the record expands -- it is not a sponsor fact and must not be presented as one. Confirm the session length with the ZMC manager before shipping. Points accumulate over a calendar year; logs are due 31 January of the following year.",
      "exchange": "Callsign + date + time + RST (SWLs log RST of both stations in a QSO)",
      "country": "DE",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-12",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "agcw-zap-merit-20260720T1740@contestcal",
      "start_date": "2026-07-20",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "80m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "skcc-sks",
      "name": "SKCC Straight Key Sprint (SKS)",
      "start": "2026-07-22T00:00:00Z",
      "end": "2026-07-22T02:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 2,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m",
        "6m"
      ],
      "bands_note": "Suggested frequencies, one per band",
      "sponsor": "Straight Key Century Club",
      "rules_url": "https://www.skccgroup.com/operating_activities/weekday_sprint/",
      "verified": true,
      "note": "",
      "exchange": "RST + QTH + name + SKCC number",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "skcc-sks-20260722T0000@contestcal",
      "start_date": "2026-07-22",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m",
        "6m"
      ],
      "duration_bucket": "2-12"
    },
    {
      "contest_id": "cwops-cwt",
      "name": "CWops Test (CWT)",
      "start": "2026-07-22T13:00:00Z",
      "end": "2026-07-22T14:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "CWops",
      "rules_url": "https://cwops.org/cwops-tests/",
      "verified": true,
      "note": "",
      "exchange": "Members: name + CWops number. Non-members: name + state/province/DX prefix.",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "cwops-cwt-20260722T1300@contestcal",
      "start_date": "2026-07-22",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "cwops-cwt",
      "name": "CWops Test (CWT)",
      "start": "2026-07-22T19:00:00Z",
      "end": "2026-07-22T20:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "CWops",
      "rules_url": "https://cwops.org/cwops-tests/",
      "verified": true,
      "note": "",
      "exchange": "Members: name + CWops number. Non-members: name + state/province/DX prefix.",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "cwops-cwt-20260722T1900@contestcal",
      "start_date": "2026-07-22",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "cwops-cwt",
      "name": "CWops Test (CWT)",
      "start": "2026-07-23T03:00:00Z",
      "end": "2026-07-23T04:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "CWops",
      "rules_url": "https://cwops.org/cwops-tests/",
      "verified": true,
      "note": "",
      "exchange": "Members: name + CWops number. Non-members: name + state/province/DX prefix.",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "cwops-cwt-20260723T0300@contestcal",
      "start_date": "2026-07-23",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "cwops-cwt",
      "name": "CWops Test (CWT)",
      "start": "2026-07-23T07:00:00Z",
      "end": "2026-07-23T08:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "CWops",
      "rules_url": "https://cwops.org/cwops-tests/",
      "verified": true,
      "note": "",
      "exchange": "Members: name + CWops number. Non-members: name + state/province/DX prefix.",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "cwops-cwt-20260723T0700@contestcal",
      "start_date": "2026-07-23",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "rsgb-80mcc-data",
      "name": "RSGB 3.5 MHz Club Championship, Data",
      "start": "2026-07-23T19:00:00Z",
      "end": "2026-07-23T20:30:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1.5,
      "modes": [
        "RTTY",
        "Digital"
      ],
      "submodes": [
        "PSK63"
      ],
      "bands": [
        "80m"
      ],
      "bands_note": "PSK63 3580-3590 kHz; RTTY 3590-3620 kHz.",
      "sponsor": "RSGB Contest Committee",
      "rules_url": "https://www.rsgbcc.org/hf/rules/2026/r80mcc.shtml",
      "verified": true,
      "note": "THE DATES ARE NOT ON THE RULES PAGE. RSGB publishes the rules at rules/2026/r80mcc.shtml and the eighteen legs on a separate CGI calendar, and the rules page links to it in so many words. This record holds what that calendar prints; nothing is derived.\n\nTHE CLOCK MOVES IN APRIL and the record says so per date: February and March run 2000-2130 UTC, April to July run 1900-2030. The record's default is the April-July clock because four of each mode's six legs use it, and the two early legs carry their own times. Same mechanism as the Autumn Series, and the second contest to need it.\n\nMANUAL BECAUSE THE LEGS FOLLOW NO ORDINAL. They fall on Mondays, Wednesdays and Thursdays with the weekday rotating through the series, which is exactly the shape an ordinal must not be fitted to.\n\nNON-UK STATIONS MAY ENTER AS INDIVIDUALS -- RSGB states it, which is worth noting beside the AFS and Club Calls contests where entry really is UK&CD only.",
      "exchange": "RS(T) plus a serial number starting at 1 and incrementing by 1.",
      "country": "GB",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-23",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": "2026-07-24T20:30:00Z",
      "uid": "rsgb-80mcc-data-20260723T1900@contestcal",
      "start_date": "2026-07-23",
      "mode_families": [
        "RTTY",
        "Digital"
      ],
      "band_families": [
        "80m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "nccc-ns-ft4",
      "name": "NCCC FT4 Sprint (FT4 NS)",
      "start": "2026-07-24T01:00:00Z",
      "end": "2026-07-24T01:30:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.5,
      "modes": [
        "FT8/FT4"
      ],
      "submodes": [
        "FT4"
      ],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "Northern California Contest Club (NCCC)",
      "rules_url": "https://www.ncccsprint.com/ft4ns.html",
      "verified": true,
      "note": "NCCC describes these as 'nominal rules' that may be modified on a weekly basis, and runs formal Ladder seasons interspersed with practice weeks. The 30-minute session slot itself is fixed.",
      "exchange": "Grid square (following NA VHF, WW Digi and ARRL IDC practice)",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "nccc-ns-ft4-20260724T0100@contestcal",
      "start_date": "2026-07-24",
      "mode_families": [
        "Digital",
        "FT8/FT4"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "nccc-ns-rtty",
      "name": "NCCC RTTY Sprint (RTTY NS)",
      "start": "2026-07-24T01:45:00Z",
      "end": "2026-07-24T02:15:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.5,
      "modes": [
        "RTTY"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m"
      ],
      "bands_note": "",
      "sponsor": "Northern California Contest Club (NCCC)",
      "rules_url": "https://ncccsprint.com/rttyns.html",
      "verified": true,
      "note": "NCCC describes these as 'nominal rules' that may be modified on a weekly basis, and runs formal Ladder seasons interspersed with practice weeks. The 30-minute session slot itself is fixed.",
      "exchange": "Serial number + name + QTH (both callsigns required in the exchange)",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "nccc-ns-rtty-20260724T0145@contestcal",
      "start_date": "2026-07-24",
      "mode_families": [
        "RTTY",
        "Digital"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "nccc-ns-cw",
      "name": "NCCC Sprint (NS)",
      "start": "2026-07-24T02:30:00Z",
      "end": "2026-07-24T03:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.5,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m"
      ],
      "bands_note": "",
      "sponsor": "Northern California Contest Club (NCCC)",
      "rules_url": "https://ncccsprint.com/rules.html",
      "verified": true,
      "note": "NCCC describes these as 'nominal rules' that may be modified on a weekly basis, and runs formal Ladder seasons interspersed with practice weeks. The 30-minute session slot itself is fixed.",
      "exchange": "Serial number + name + QTH (both callsigns required in the exchange)",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "nccc-ns-cw-20260724T0230@contestcal",
      "start_date": "2026-07-24",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "k1usn-sst",
      "name": "K1USN Slow Speed Test (SST)",
      "start": "2026-07-24T20:00:00Z",
      "end": "2026-07-24T21:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "",
      "sponsor": "K1USN Radio Club",
      "rules_url": "https://www.k1usn.com/sst_rules.html",
      "verified": true,
      "note": "No formal log submission -- participants post scores to 3830scores.com.",
      "exchange": "Name + state/province/DX country",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "k1usn-sst-20260724T2000@contestcal",
      "start_date": "2026-07-24",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "rsgb-iota",
      "name": "RSGB IOTA Contest",
      "start": "2026-07-25T12:00:00Z",
      "end": "2026-07-26T12:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 24,
      "modes": [
        "CW",
        "SSB"
      ],
      "submodes": [],
      "bands": [
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "",
      "sponsor": "RSGB Contest Committee",
      "rules_url": "https://www.rsgbcc.org/hf/rules/2026/riota.shtml",
      "verified": true,
      "note": "",
      "exchange": "RST + serial; island stations add IOTA reference",
      "country": "GB",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": "2026-07-31T12:00:00Z",
      "uid": "rsgb-iota-20260725T1200@contestcal",
      "start_date": "2026-07-25",
      "mode_families": [
        "CW",
        "SSB"
      ],
      "band_families": [
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "gte24"
    },
    {
      "contest_id": "sarl-club-40m",
      "name": "SARL Saturday 40 m Club Contest",
      "start": "2026-07-25T15:00:00Z",
      "end": "2026-07-25T16:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "SSB",
        "CW",
        "RTTY"
      ],
      "submodes": [],
      "bands": [
        "40m"
      ],
      "bands_note": "Phone 7 063-7 100 and 7 130-7 200 kHz; CW 7 000-7 040 kHz; RTTY 7 040-7 060 kHz. The segment 7 101-7 129 kHz is contest free.",
      "sponsor": "SARL",
      "rules_url": "https://mysarl.org.za/wp-content/uploads/2025/12/2026-SARL-Contest-Manual-Version-1.1-2025-12-15.pdf",
      "verified": true,
      "note": "A club championship rather than an individual contest: operators' scores are added into a club total. The month list is SARL's own -- these run in four months of the year, not every month -- which is what monthly_nth_weekday's `months` field exists for. log_format and log_deadline_days are absent: this pass read each contest's Aim, Dates, Frequencies and Exchange sections and did not read its Log Sheets section, so neither is recorded rather than assumed from SARL's other contests.\n\nPROVENANCE RESTORED 2026-08-23. This record carried verified: true with an EMPTY source_note -- one of three the 2026-08-21 rule audit found, and a stricter defect than the thin ARRL notes beside them: an empty string is not weak evidence, it is none, and there was nothing in the record to check a rule against. The rule, the times, the bands and the exchange were all correct; only the evidence for them was missing. Re-read from the manual and quoted above, and SARL's own printed 2026 dates reproduce it.",
      "exchange": "Your name, your Abbreviated Club Callsign and your 4-character grid square (for example KG30).",
      "country": "ZA",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-23",
      "can_enter": false,
      "eligibility_scope": "entity_list",
      "eligibility_reason": "Entry limited to ZS. K stations may be worked but cannot submit an entry.",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "sarl-club-40m-20260725T1500@contestcal",
      "start_date": "2026-07-25",
      "mode_families": [
        "CW",
        "SSB",
        "RTTY",
        "Digital"
      ],
      "band_families": [
        "40m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "zs1-qso-party",
      "name": "ZS1 QSO Party",
      "start": "2026-07-26T16:00:00Z",
      "end": "2026-07-26T17:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW",
        "SSB"
      ],
      "submodes": [],
      "bands": [
        "40m"
      ],
      "bands_note": "A phone and CW contest on 40 m: CW 7 000-7 040 kHz, SSB 7 063-7 100 and 7 130-7 200 kHz.",
      "sponsor": "Cape Town Amateur Radio Club",
      "rules_url": "https://mysarl.org.za/wp-content/uploads/2025/12/2026-SARL-Contest-Manual-Version-1.1-2025-12-15.pdf",
      "verified": true,
      "note": "SOURCED FROM THE SARL CONTEST MANUAL, WHICH IS NOT AN AGGREGATOR. The manual carries this contest's FULL rules -- aim, dates, exchange, frequencies, scoring, log sheets -- and names its organising club, rather than summarising a calendar entry. It is the venue in which South African clubs publish their contest rules, the way DARC's Ausschreibungen or UBA's rules pages are, so it is a primary source for these contests and not a third-party listing. The distinction that matters: an aggregator republishes rules it found elsewhere, and this is where the rules appear.",
      "exchange": "RS(T) and the provincial or country abbreviation.",
      "country": "ZA",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-19",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "zs1-qso-party-20260726T1600@contestcal",
      "start_date": "2026-07-26",
      "mode_families": [
        "CW",
        "SSB"
      ],
      "band_families": [
        "40m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "k1usn-sst",
      "name": "K1USN Slow Speed Test (SST)",
      "start": "2026-07-27T00:00:00Z",
      "end": "2026-07-27T01:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "",
      "sponsor": "K1USN Radio Club",
      "rules_url": "https://www.k1usn.com/sst_rules.html",
      "verified": true,
      "note": "No formal log submission -- participants post scores to 3830scores.com.",
      "exchange": "Name + state/province/DX country",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "k1usn-sst-20260727T0000@contestcal",
      "start_date": "2026-07-27",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "agcw-zap-merit",
      "name": "AGCW ZAP Merit Contest (ZMC)",
      "start": "2026-07-27T17:40:00Z",
      "end": "2026-07-27T18:30:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.83,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "80m"
      ],
      "bands_note": "",
      "sponsor": "AGCW-DL",
      "rules_url": "https://www.agcw.de/contest/tzap/",
      "verified": false,
      "note": "PARTLY UNVERIFIED. The recurrence (every Monday), the 1740 UTC pre-logging opening and the 1800 UTC telegram transmission are all quoted from AGCW. AGCW publishes NO closing time. The 1830 end stored here is a PLACEHOLDER so the record expands -- it is not a sponsor fact and must not be presented as one. Confirm the session length with the ZMC manager before shipping. Points accumulate over a calendar year; logs are due 31 January of the following year.",
      "exchange": "Callsign + date + time + RST (SWLs log RST of both stations in a QSO)",
      "country": "DE",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-12",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "agcw-zap-merit-20260727T1740@contestcal",
      "start_date": "2026-07-27",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "80m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "rsgb-ft4-series",
      "name": "RSGB FT4 Contest Series",
      "start": "2026-07-27T19:00:00Z",
      "end": "2026-07-27T21:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 2,
      "modes": [
        "FT8/FT4"
      ],
      "submodes": [
        "FT4"
      ],
      "bands": [
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "80, 40, 20, 15 and 10 m.",
      "sponsor": "RSGB Contest Committee",
      "rules_url": "https://www.rsgbcc.org/hf/rules/2026/r80m_ft4.shtml",
      "verified": true,
      "note": "TWELVE MONDAY EVENINGS AND THE CLOCK SHIFTS FOR THE SUMMER: January to March and October to December run 2000-2200 UTC, April to September run 1900-2100. Six legs each way, so the record's default is the winter clock and the summer legs carry their own -- the third contest to need per-date times, after the Autumn Series and the 80m Club Championship.\n\nMANUAL BECAUSE THE DATES ARE NOT ON THE RULES PAGE and follow no ordinal: they are Mondays, but the third Monday in January, the fourth in February, the third in March. RSGB publishes them on its CGI calendar and this record holds what that prints.\n\nNot the same contest as the FT4 International Activity Day in April, which is 24 hours and has its own rules page.",
      "exchange": "A signal report. A serial number is not required.",
      "country": "GB",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-23",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": "2026-07-28T21:00:00Z",
      "uid": "rsgb-ft4-series-20260727T1900@contestcal",
      "start_date": "2026-07-27",
      "mode_families": [
        "Digital",
        "FT8/FT4"
      ],
      "band_families": [
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "2-12"
    },
    {
      "contest_id": "cwops-cwt",
      "name": "CWops Test (CWT)",
      "start": "2026-07-29T13:00:00Z",
      "end": "2026-07-29T14:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "CWops",
      "rules_url": "https://cwops.org/cwops-tests/",
      "verified": true,
      "note": "",
      "exchange": "Members: name + CWops number. Non-members: name + state/province/DX prefix.",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "cwops-cwt-20260729T1300@contestcal",
      "start_date": "2026-07-29",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "cwops-cwt",
      "name": "CWops Test (CWT)",
      "start": "2026-07-29T19:00:00Z",
      "end": "2026-07-29T20:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "CWops",
      "rules_url": "https://cwops.org/cwops-tests/",
      "verified": true,
      "note": "",
      "exchange": "Members: name + CWops number. Non-members: name + state/province/DX prefix.",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "cwops-cwt-20260729T1900@contestcal",
      "start_date": "2026-07-29",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "cwops-cwt",
      "name": "CWops Test (CWT)",
      "start": "2026-07-30T03:00:00Z",
      "end": "2026-07-30T04:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "CWops",
      "rules_url": "https://cwops.org/cwops-tests/",
      "verified": true,
      "note": "",
      "exchange": "Members: name + CWops number. Non-members: name + state/province/DX prefix.",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "cwops-cwt-20260730T0300@contestcal",
      "start_date": "2026-07-30",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "cwops-cwt",
      "name": "CWops Test (CWT)",
      "start": "2026-07-30T07:00:00Z",
      "end": "2026-07-30T08:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "CWops",
      "rules_url": "https://cwops.org/cwops-tests/",
      "verified": true,
      "note": "",
      "exchange": "Members: name + CWops number. Non-members: name + state/province/DX prefix.",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "cwops-cwt-20260730T0700@contestcal",
      "start_date": "2026-07-30",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "nccc-ns-ft4",
      "name": "NCCC FT4 Sprint (FT4 NS)",
      "start": "2026-07-31T01:00:00Z",
      "end": "2026-07-31T01:30:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.5,
      "modes": [
        "FT8/FT4"
      ],
      "submodes": [
        "FT4"
      ],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "Northern California Contest Club (NCCC)",
      "rules_url": "https://www.ncccsprint.com/ft4ns.html",
      "verified": true,
      "note": "NCCC describes these as 'nominal rules' that may be modified on a weekly basis, and runs formal Ladder seasons interspersed with practice weeks. The 30-minute session slot itself is fixed.",
      "exchange": "Grid square (following NA VHF, WW Digi and ARRL IDC practice)",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "nccc-ns-ft4-20260731T0100@contestcal",
      "start_date": "2026-07-31",
      "mode_families": [
        "Digital",
        "FT8/FT4"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "nccc-ns-rtty",
      "name": "NCCC RTTY Sprint (RTTY NS)",
      "start": "2026-07-31T01:45:00Z",
      "end": "2026-07-31T02:15:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.5,
      "modes": [
        "RTTY"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m"
      ],
      "bands_note": "",
      "sponsor": "Northern California Contest Club (NCCC)",
      "rules_url": "https://ncccsprint.com/rttyns.html",
      "verified": true,
      "note": "NCCC describes these as 'nominal rules' that may be modified on a weekly basis, and runs formal Ladder seasons interspersed with practice weeks. The 30-minute session slot itself is fixed.",
      "exchange": "Serial number + name + QTH (both callsigns required in the exchange)",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "nccc-ns-rtty-20260731T0145@contestcal",
      "start_date": "2026-07-31",
      "mode_families": [
        "RTTY",
        "Digital"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "nccc-ns-cw",
      "name": "NCCC Sprint (NS)",
      "start": "2026-07-31T02:30:00Z",
      "end": "2026-07-31T03:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.5,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m"
      ],
      "bands_note": "",
      "sponsor": "Northern California Contest Club (NCCC)",
      "rules_url": "https://ncccsprint.com/rules.html",
      "verified": true,
      "note": "NCCC describes these as 'nominal rules' that may be modified on a weekly basis, and runs formal Ladder seasons interspersed with practice weeks. The 30-minute session slot itself is fixed.",
      "exchange": "Serial number + name + QTH (both callsigns required in the exchange)",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "nccc-ns-cw-20260731T0230@contestcal",
      "start_date": "2026-07-31",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "k1usn-sst",
      "name": "K1USN Slow Speed Test (SST)",
      "start": "2026-07-31T20:00:00Z",
      "end": "2026-07-31T21:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "",
      "sponsor": "K1USN Radio Club",
      "rules_url": "https://www.k1usn.com/sst_rules.html",
      "verified": true,
      "note": "No formal log submission -- participants post scores to 3830scores.com.",
      "exchange": "Name + state/province/DX country",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "k1usn-sst-20260731T2000@contestcal",
      "start_date": "2026-07-31",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "tenten-summer-phone",
      "name": "10-10 International Summer QSO Party (Phone)",
      "start": "2026-08-01T00:01:00Z",
      "end": "2026-08-02T23:59:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 47.97,
      "modes": [
        "SSB"
      ],
      "submodes": [],
      "bands": [
        "10m"
      ],
      "bands_note": "",
      "sponsor": "10-10 International Net",
      "rules_url": "https://www.ten-ten.org/index.php/activity/qso-party-rules",
      "verified": true,
      "note": "",
      "exchange": "Call sign + name + 10-10 number + QTH (state, province or country). Record 0 if the other station has no 10-10 number.",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-12",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "Anyone may take part, but only members' logs are scored: 'logs will be accepted only from active members as of the date of the event ... Other logs received will be handled as check logs.'",
      "log_due": null,
      "uid": "tenten-summer-phone-20260801T0001@contestcal",
      "start_date": "2026-08-01",
      "mode_families": [
        "SSB"
      ],
      "band_families": [
        "10m"
      ],
      "duration_bucket": "gte24"
    },
    {
      "contest_id": "jarl-field-day",
      "name": "JARL Field Day Contest",
      "start": "2026-08-01T12:00:00Z",
      "end": "2026-08-02T06:00:00Z",
      "start_wall": "2026-08-01T21:00:00",
      "end_wall": "2026-08-02T15:00:00",
      "local_rolling": false,
      "timezone": "Asia/Tokyo",
      "duration_hours": 18,
      "modes": [
        "CW",
        "SSB",
        "FM"
      ],
      "submodes": [
        "AM"
      ],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m",
        "6m",
        "2m",
        "70cm",
        "23cm"
      ],
      "bands_note": "1.9 through 430 MHz plus every amateur band at 1200 MHz and above. The phone all-band categories exclude 14 MHz.",
      "sponsor": "JARL",
      "rules_url": "https://www.jarl.org/Japanese/1_Tanoshimo/1-1_Contest/fd_rules.html",
      "verified": true,
      "note": "Same eighteen-hour shape as 6m AND DOWN a month earlier, and on all bands rather than VHF up. Encoded as wall_clock in Asia/Tokyo because that is how JARL states it -- 21時00分（JST） -- rather than converted to a fixed UTC time by hand. Japan has not observed daylight saving since 1952, so the two are identical in practice and will stay so; the record says what the sponsor said and lets the engine do the arithmetic. log_deadline_days is absent. JARL prints a dated deadline above the rules for the edition in hand -- ALL JA 2026 is '提出締切日 2026年5月6日（水）必着' -- and the numbered 規約 clauses that follow state the dates, eligibility, bands, categories and exchange but no submission span. All four of JARL's 2026 deadlines happen to fall exactly ten days after their contest ends, which is suggestive and is not a rule JARL wrote. The same reasoning already keeps a deadline off JARL's All Asian records.",
      "exchange": "On 1.9 MHz to 1200 MHz: RST, the prefecture or region number, and the power letter. On 2400 MHz and above: RST, the city, county or ward number, and the power letter.",
      "country": "JP",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-19",
      "can_enter": false,
      "eligibility_scope": "entity_list",
      "eligibility_reason": "Entry limited to JA. K stations may be worked but cannot submit an entry.",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "jarl-field-day-20260801T1200@contestcal",
      "start_date": "2026-08-01",
      "mode_families": [
        "CW",
        "SSB",
        "FM"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m",
        "6m",
        "VHF+"
      ],
      "duration_bucket": "12-24"
    },
    {
      "contest_id": "rep-50mhz",
      "name": "Concurso REP 50 MHz",
      "start": "2026-08-01T14:00:00Z",
      "end": "2026-08-02T14:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 24,
      "modes": [
        "SSB",
        "CW",
        "FM"
      ],
      "submodes": [
        "AM"
      ],
      "bands": [
        "6m"
      ],
      "bands_note": "6 m (50 MHz), de acordo com os planos de frequência recomendados pela IARU para cada região -- 6m per the IARU band plans for each region.",
      "sponsor": "REP",
      "rules_url": "https://concursos.rep.pt/concurso-rep-50-mhz/",
      "verified": true,
      "note": "REP writes 'fim de semana completo' -- complete weekend -- which is exactly the distinction this engine models: a Saturday/Sunday pair with both days inside the month. It is encoded because it is REP's wording, NOT because it changes a date: checked rather than assumed, the full-weekend and first-Saturday readings agree for the first weekend of August in every year from 2025 to 2060, because the only Saturday that can fail to open a full weekend is one falling on the month's last day. The distinction bites on 'last weekend' rules, not on this one. log_deadline_days is absent because REP states a dated deadline for the edition ('até às 23:59 (UTC) do dia 8 de Agosto de 2025') rather than a span, and 8 August is 5 days after the 2025 running but would be 6 after the 2026 one. Modes: REP allows phone as AM, SSB or FM; SSB is the catalog's only phone token, so AM and FM are recorded in submodes. REP has published no 2026 edition on concursos.rep.pt as of 2026-08-19, and the first full weekend of August 2026 has passed; the rule is encoded as REP states it and no suspension is inferred from a missing post.",
      "exchange": "RS(T), a sequential QSO number beginning 001 and the QTH locator of both stations (for example IM58is). The contact time need not be exchanged but must be logged in UTC.",
      "country": "PT",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-19",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "rep-50mhz-20260801T1400@contestcal",
      "start_date": "2026-08-01",
      "mode_families": [
        "CW",
        "SSB",
        "FM"
      ],
      "band_families": [
        "6m"
      ],
      "duration_bucket": "gte24"
    },
    {
      "contest_id": "arrl-222-and-up",
      "name": "ARRL 222 MHz and Up Distance Contest",
      "start": "2026-08-01T18:00:00Z",
      "end": "2026-08-02T18:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 24,
      "modes": [
        "Mixed"
      ],
      "submodes": [],
      "bands": [
        "1.25m",
        "70cm",
        "33cm",
        "23cm",
        "13cm",
        "3cm"
      ],
      "bands_note": "222 MHz through 241 GHz",
      "sponsor": "ARRL",
      "rules_url": "http://www.arrl.org/222-mhz-and-up-distance-contest",
      "verified": false,
      "note": "Not listed in ARRL generic calendar. Rule inferred from published 2026 dates -- confirm.",
      "exchange": "",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "222 MHz and up. Needs microwave gear and nearby activity.",
      "log_due": null,
      "uid": "arrl-222-and-up-20260801T1800@contestcal",
      "start_date": "2026-08-01",
      "mode_families": [
        "CW",
        "SSB",
        "FM",
        "RTTY",
        "Digital",
        "FT8/FT4",
        "Mixed"
      ],
      "band_families": [
        "VHF+"
      ],
      "duration_bucket": "gte24"
    },
    {
      "contest_id": "naqp-cw",
      "name": "North American QSO Party, CW",
      "start": "2026-08-01T18:00:00Z",
      "end": "2026-08-02T05:59:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 11.98,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "",
      "sponsor": "National Contest Journal (NCJ)",
      "rules_url": "https://www.ncjweb.com/NAQP-Rules.pdf",
      "verified": true,
      "note": "",
      "exchange": "Name + state/province/country",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "naqp-cw-20260801T1800@contestcal",
      "start_date": "2026-08-01",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "2-12"
    },
    {
      "contest_id": "sarl-hf-phone",
      "name": "SARL HF Phone Contest",
      "start": "2026-08-02T14:00:00Z",
      "end": "2026-08-02T17:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 3,
      "modes": [
        "SSB"
      ],
      "submodes": [],
      "bands": [
        "80m",
        "40m",
        "20m"
      ],
      "bands_note": "20, 40 and 80 m. SSB 14 125-14 350, 7 063-7 100 and 7 130-7 200, 3 603-3 650 and 3 700-3 800 kHz; CW 14 020-14 030, 7 000-7 040, 3 510-3 560 kHz. The segments 7 100-7 130 and 3 651-3 699 kHz are contest free.",
      "sponsor": "SARL",
      "rules_url": "https://mysarl.org.za/wp-content/uploads/2025/11/2026-The-SARL-HF-Phone-Digital-and-CW-Contests-v1.1.pdf",
      "verified": true,
      "note": "PREVIOUSLY UNVERIFIED, AND THE FLAG WAS DOING ITS JOB. This record was carried with bands: [] and eligibility guessed as ZS-only 'Confirm', because sarl.org.za served an expired certificate. SARL has since moved to mysarl.org.za and the rules are now readable: the recurrence and times the record already held were right, the bands are 20/40/80 m, and the eligibility guess was WRONG -- the scoring table's Area 9 is 'Stations in the rest of the world'. log_deadline_days is 5, which is the right DAY and not the right hour: SARL states 'by 21:59 UTC on Friday', and the contest ends at 17:00 UTC on the Sunday five days before, so the engine's derived log_due lands at 17:00 rather than 21:59. The day is exact in every year because both ends are tied to the same Sunday. The five hours are recorded here rather than papered over.",
      "exchange": "RS, RSQ or RST report and a consecutive serial number starting at 001.",
      "country": "ZA",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-19",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": "2026-08-07T17:00:00Z",
      "uid": "sarl-hf-phone-20260802T1400@contestcal",
      "start_date": "2026-08-02",
      "mode_families": [
        "SSB"
      ],
      "band_families": [
        "80m",
        "40m",
        "20m"
      ],
      "duration_bucket": "2-12"
    },
    {
      "contest_id": "k1usn-sst",
      "name": "K1USN Slow Speed Test (SST)",
      "start": "2026-08-03T00:00:00Z",
      "end": "2026-08-03T01:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "",
      "sponsor": "K1USN Radio Club",
      "rules_url": "https://www.k1usn.com/sst_rules.html",
      "verified": true,
      "note": "No formal log submission -- participants post scores to 3830scores.com.",
      "exchange": "Name + state/province/DX country",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "k1usn-sst-20260803T0000@contestcal",
      "start_date": "2026-08-03",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "agcw-zap-merit",
      "name": "AGCW ZAP Merit Contest (ZMC)",
      "start": "2026-08-03T17:40:00Z",
      "end": "2026-08-03T18:30:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.83,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "80m"
      ],
      "bands_note": "",
      "sponsor": "AGCW-DL",
      "rules_url": "https://www.agcw.de/contest/tzap/",
      "verified": false,
      "note": "PARTLY UNVERIFIED. The recurrence (every Monday), the 1740 UTC pre-logging opening and the 1800 UTC telegram transmission are all quoted from AGCW. AGCW publishes NO closing time. The 1830 end stored here is a PLACEHOLDER so the record expands -- it is not a sponsor fact and must not be presented as one. Confirm the session length with the ZMC manager before shipping. Points accumulate over a calendar year; logs are due 31 January of the following year.",
      "exchange": "Callsign + date + time + RST (SWLs log RST of both stations in a QSO)",
      "country": "DE",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-12",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "agcw-zap-merit-20260803T1740@contestcal",
      "start_date": "2026-08-03",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "80m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "ars-spartan-sprint",
      "name": "ARS Spartan Sprint",
      "start": "2026-08-04T00:00:00Z",
      "end": "2026-08-04T02:00:00Z",
      "start_wall": "2026-08-03T20:00:00",
      "end_wall": "2026-08-03T22:00:00",
      "local_rolling": false,
      "timezone": "America/New_York",
      "duration_hours": 2,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "",
      "sponsor": "Adventure Radio Society",
      "rules_url": "https://ars-qrp.com/Spartan_Sprint/Spartan_Sprint.html",
      "verified": true,
      "note": "CORRECTION (anchor): previously encoded as the first TUESDAY of the month. The sponsor's rule is the first MONDAY US local, which lands on Tuesday UTC -- and those are different dates whenever the 1st falls on a Tuesday (Sep and Dec 2026). SPONSOR-ANCHORED LOCAL TIME: ARS publishes no UTC time and states the event 'is always at these Local Times', so the UTC instant is what moves -- 0100Z Tuesday under EST, 0000Z Tuesday under EDT. Resolved through America/New_York rather than hardcoded, so DST is handled. ARS lists Eastern, Central, Mountain and Pacific times that are the same instant in every zone that observes DST; Arizona, which does not, is the one place the sponsor's own table is inconsistent.",
      "exchange": "RST + state/province + power output",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "ars-spartan-sprint-20260804T0000@contestcal",
      "start_date": "2026-08-04",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "2-12"
    },
    {
      "contest_id": "nzart-sprint-cw",
      "name": "ZL Autumn and Winter Sprints, CW",
      "start": "2026-08-04T08:00:00Z",
      "end": "2026-08-04T08:29:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.48,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "80m"
      ],
      "bands_note": "Suggested frequencies CW 3520-3550 kHz",
      "sponsor": "NZART",
      "rules_url": "https://nzart.org.nz/activities/contests/sprints/",
      "verified": true,
      "note": "One of three back-to-back 29-minute sprints on the same evening, each in a different mode and each scored separately, which is why they are three records here rather than one. Logs are due 'within 24 hours of the end of the sprint' -- shorter than a day, so no deadline interval is computed; they go to markzl3ab@gmail.com.",
      "exchange": "RS(T) and the outside temperature to the nearest degree; on CW, 'm' denotes a minus sign",
      "country": "NZ",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-17",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "nzart-sprint-cw-20260804T0800@contestcal",
      "start_date": "2026-08-04",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "80m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "nzart-sprint-ssb",
      "name": "ZL Autumn and Winter Sprints, SSB",
      "start": "2026-08-04T08:30:00Z",
      "end": "2026-08-04T08:59:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.48,
      "modes": [
        "SSB"
      ],
      "submodes": [],
      "bands": [
        "80m"
      ],
      "bands_note": "Suggested frequencies SSB 3620-3670 kHz",
      "sponsor": "NZART",
      "rules_url": "https://nzart.org.nz/activities/contests/sprints/",
      "verified": true,
      "note": "One of three back-to-back 29-minute sprints on the same evening, each in a different mode and each scored separately, which is why they are three records here rather than one. Logs are due 'within 24 hours of the end of the sprint' -- shorter than a day, so no deadline interval is computed; they go to markzl3ab@gmail.com.",
      "exchange": "RS(T) and the outside temperature to the nearest degree",
      "country": "NZ",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-17",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "nzart-sprint-ssb-20260804T0830@contestcal",
      "start_date": "2026-08-04",
      "mode_families": [
        "SSB"
      ],
      "band_families": [
        "80m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "nzart-sprint-ft4",
      "name": "ZL Autumn and Winter Sprints, FT4",
      "start": "2026-08-04T09:00:00Z",
      "end": "2026-08-04T09:29:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.48,
      "modes": [
        "FT8/FT4"
      ],
      "submodes": [
        "FT4"
      ],
      "bands": [
        "80m"
      ],
      "bands_note": "Suggested frequency FT4 3575 kHz",
      "sponsor": "NZART",
      "rules_url": "https://nzart.org.nz/activities/contests/sprints/",
      "verified": true,
      "note": "One of three back-to-back 29-minute sprints on the same evening, each in a different mode and each scored separately, which is why they are three records here rather than one. Logs are due 'within 24 hours of the end of the sprint' -- shorter than a day, so no deadline interval is computed; they go to markzl3ab@gmail.com.",
      "exchange": "A four-digit Maidenhead grid-square locator",
      "country": "NZ",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-17",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "nzart-sprint-ft4-20260804T0900@contestcal",
      "start_date": "2026-08-04",
      "mode_families": [
        "Digital",
        "FT8/FT4"
      ],
      "band_families": [
        "80m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "cwops-cwt",
      "name": "CWops Test (CWT)",
      "start": "2026-08-05T13:00:00Z",
      "end": "2026-08-05T14:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "CWops",
      "rules_url": "https://cwops.org/cwops-tests/",
      "verified": true,
      "note": "",
      "exchange": "Members: name + CWops number. Non-members: name + state/province/DX prefix.",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "cwops-cwt-20260805T1300@contestcal",
      "start_date": "2026-08-05",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "cwops-cwt",
      "name": "CWops Test (CWT)",
      "start": "2026-08-05T19:00:00Z",
      "end": "2026-08-05T20:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "CWops",
      "rules_url": "https://cwops.org/cwops-tests/",
      "verified": true,
      "note": "",
      "exchange": "Members: name + CWops number. Non-members: name + state/province/DX prefix.",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "cwops-cwt-20260805T1900@contestcal",
      "start_date": "2026-08-05",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "cwops-cwt",
      "name": "CWops Test (CWT)",
      "start": "2026-08-06T03:00:00Z",
      "end": "2026-08-06T04:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "CWops",
      "rules_url": "https://cwops.org/cwops-tests/",
      "verified": true,
      "note": "",
      "exchange": "Members: name + CWops number. Non-members: name + state/province/DX prefix.",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "cwops-cwt-20260806T0300@contestcal",
      "start_date": "2026-08-06",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "cwops-cwt",
      "name": "CWops Test (CWT)",
      "start": "2026-08-06T07:00:00Z",
      "end": "2026-08-06T08:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "CWops",
      "rules_url": "https://cwops.org/cwops-tests/",
      "verified": true,
      "note": "",
      "exchange": "Members: name + CWops number. Non-members: name + state/province/DX prefix.",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "cwops-cwt-20260806T0700@contestcal",
      "start_date": "2026-08-06",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "skcc-skse",
      "name": "SKCC Straight Key Sprint Europe (SKSE)",
      "start": "2026-08-06T19:00:00Z",
      "end": "2026-08-06T21:00:00Z",
      "start_wall": "2026-08-06T21:00:00",
      "end_wall": "2026-08-06T23:00:00",
      "local_rolling": false,
      "timezone": "Europe/Berlin",
      "duration_hours": 2,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m",
        "6m"
      ],
      "bands_note": "160 through 6 m excluding the WARC bands -- SKCC names 60, 30, 17 and 12 m as excluded.",
      "sponsor": "Straight Key Century Club",
      "rules_url": "https://www.skccgroup.com/operating_activities/skse/",
      "verified": true,
      "note": "SKCC PRINTS TWO UTC TIMES AND THE CONTEST HAS ONE LOCAL TIME. 2000Z from November to March and 1900Z from April to October are both 2100 in central Europe: CET is UTC+1 and CEST is UTC+2. So this is not a contest that changes its hour twice a year, it is a contest at nine in the evening that Europe's clocks move around, and it is recorded the way the sponsor means it -- `timezone: Europe/Berlin` with wall_clock times, exactly as the ARS Spartan Sprint is recorded in New York.\n\nTHAT READING IS TESTABLE AND IT PASSES ON THE MONTHS THAT DECIDE IT. Europe changes clocks on the last Sunday of March and of October, and the first Thursday of both months falls on the near side of the change: March is still CET and resolves to 2000Z, April is CEST and resolves to 1900Z, October is still CEST at 1900Z, November is CET at 2000Z. All four match SKCC's own table, which is what makes this one rule rather than two.\n\nEncoding it as two records split by month -- winter and summer -- would have produced two entries with the same name and hidden the reason. Encoding one UTC time would have been wrong for five months of the year.\n\nStraight keys, sideswipers and bugs only: no keyer, no keyboard. That is the club's whole premise rather than a category.\n\nThe fifteen-minute QRS extensions at each end are not in the window: they are an invitation to slow operators rather than part of the scored period.",
      "exchange": "RST, QTH, the operator's name and the SKCC number. Non-members send 'none' for the number.",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-23",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": "2026-08-13T21:00:00Z",
      "uid": "skcc-skse-20260806T1900@contestcal",
      "start_date": "2026-08-06",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m",
        "6m"
      ],
      "duration_bucket": "2-12"
    },
    {
      "contest_id": "nccc-ns-ft4",
      "name": "NCCC FT4 Sprint (FT4 NS)",
      "start": "2026-08-07T01:00:00Z",
      "end": "2026-08-07T01:30:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.5,
      "modes": [
        "FT8/FT4"
      ],
      "submodes": [
        "FT4"
      ],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "Northern California Contest Club (NCCC)",
      "rules_url": "https://www.ncccsprint.com/ft4ns.html",
      "verified": true,
      "note": "NCCC describes these as 'nominal rules' that may be modified on a weekly basis, and runs formal Ladder seasons interspersed with practice weeks. The 30-minute session slot itself is fixed.",
      "exchange": "Grid square (following NA VHF, WW Digi and ARRL IDC practice)",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "nccc-ns-ft4-20260807T0100@contestcal",
      "start_date": "2026-08-07",
      "mode_families": [
        "Digital",
        "FT8/FT4"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "nccc-ns-rtty",
      "name": "NCCC RTTY Sprint (RTTY NS)",
      "start": "2026-08-07T01:45:00Z",
      "end": "2026-08-07T02:15:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.5,
      "modes": [
        "RTTY"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m"
      ],
      "bands_note": "",
      "sponsor": "Northern California Contest Club (NCCC)",
      "rules_url": "https://ncccsprint.com/rttyns.html",
      "verified": true,
      "note": "NCCC describes these as 'nominal rules' that may be modified on a weekly basis, and runs formal Ladder seasons interspersed with practice weeks. The 30-minute session slot itself is fixed.",
      "exchange": "Serial number + name + QTH (both callsigns required in the exchange)",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "nccc-ns-rtty-20260807T0145@contestcal",
      "start_date": "2026-08-07",
      "mode_families": [
        "RTTY",
        "Digital"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "nccc-ns-cw",
      "name": "NCCC Sprint (NS)",
      "start": "2026-08-07T02:30:00Z",
      "end": "2026-08-07T03:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.5,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m"
      ],
      "bands_note": "",
      "sponsor": "Northern California Contest Club (NCCC)",
      "rules_url": "https://ncccsprint.com/rules.html",
      "verified": true,
      "note": "NCCC describes these as 'nominal rules' that may be modified on a weekly basis, and runs formal Ladder seasons interspersed with practice weeks. The 30-minute session slot itself is fixed.",
      "exchange": "Serial number + name + QTH (both callsigns required in the exchange)",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "nccc-ns-cw-20260807T0230@contestcal",
      "start_date": "2026-08-07",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "k1usn-sst",
      "name": "K1USN Slow Speed Test (SST)",
      "start": "2026-08-07T20:00:00Z",
      "end": "2026-08-07T21:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "",
      "sponsor": "K1USN Radio Club",
      "rules_url": "https://www.k1usn.com/sst_rules.html",
      "verified": true,
      "note": "No formal log submission -- participants post scores to 3830scores.com.",
      "exchange": "Name + state/province/DX country",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "k1usn-sst-20260807T2000@contestcal",
      "start_date": "2026-08-07",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "wae-dx-cw",
      "name": "WAE DX Contest CW",
      "start": "2026-08-08T00:00:00Z",
      "end": "2026-08-09T23:59:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 47.98,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "",
      "sponsor": "DARC",
      "rules_url": "https://www.darc.de/der-club/referate/conteste/wae-dx-contest/regeln/",
      "verified": true,
      "note": "DARC states the deadline twice as an interval and once as an instant, and for the CW leg the instant disagrees. Rule 13 says 'immer 7 Tage nach dem Contest' and the general contest rules say the same; seven days from this leg's end is 16 August 2026, which is the date DARC's own KW contest calendar prints. The per-leg line on the same rules page reads 'Einsendeschluss CW: 17.08.2026, 23:59 UTC', a day later. The interval is what is encoded -- it is stated twice, and it reproduces the printed instants of the SSB and RTTY legs exactly. Both statements are recorded here rather than reconciled.",
      "exchange": "RS/RST + serial from 001. QTC traffic scores additional points: a QSO already logged is reported back to a European station as time, callsign and serial, at most 10 between any two stations, and each correctly passed QTC counts a point to both ends.",
      "country": "DE",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-18",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": "2026-08-16T23:59:00Z",
      "uid": "wae-dx-cw-20260808T0000@contestcal",
      "start_date": "2026-08-08",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "gte24"
    },
    {
      "contest_id": "ure-cme",
      "name": "Concurso Municipios Espanoles (CME)",
      "start": "2026-08-08T12:00:00Z",
      "end": "2026-08-08T22:59:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 10.98,
      "modes": [
        "SSB"
      ],
      "submodes": [],
      "bands": [
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "",
      "sponsor": "URE",
      "rules_url": "https://concursos.ure.es/en/cme/bases/",
      "verified": true,
      "note": "Two sessions with an overnight break, encoded in the sessions array; the top-level start/end repeat the first session, as elsewhere in this catalog. URE states one deadline for the contest as a whole and it is the second session's end plus 15 days exactly. The engine applies log_deadline_days to each session separately, so the first session's computed deadline falls a day before URE's printed one. Dropping the interval to quote a fixed date instead would lose the arithmetic URE actually states, so the interval is kept and the artefact recorded here.",
      "exchange": "Spanish stations send RS(T) + the number of their municipality (EA4URE sends HQ); DX stations send RS(T) + a serial number beginning with 001.",
      "country": "ES",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-18",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": "2026-08-23T22:59:00Z",
      "uid": "ure-cme-20260808T1200@contestcal",
      "start_date": "2026-08-08",
      "mode_families": [
        "SSB"
      ],
      "band_families": [
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "2-12"
    },
    {
      "contest_id": "skcc-wes",
      "name": "SKCC Weekend Sprintathon (WES)",
      "start": "2026-08-08T12:00:00Z",
      "end": "2026-08-09T23:59:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 35.98,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "Straight Key Century Club",
      "rules_url": "https://www.skccgroup.com/operating_activities/weekend_sprintathon/",
      "verified": true,
      "note": "Older sources describe the anchor as 'the Saturday following the 6th', which differs from '2nd Saturday' in some months. SKCC's current page says 2nd Saturday; re-check if dates drift.",
      "exchange": "RST + state/province/country + name + SKCC number (C/T/S suffix for award holders)",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "skcc-wes-20260808T1200@contestcal",
      "start_date": "2026-08-08",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m",
        "6m"
      ],
      "duration_bucket": "gte24"
    },
    {
      "contest_id": "ure-cme",
      "name": "Concurso Municipios Espanoles (CME)",
      "start": "2026-08-09T05:00:00Z",
      "end": "2026-08-09T11:59:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 6.98,
      "modes": [
        "SSB"
      ],
      "submodes": [],
      "bands": [
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "",
      "sponsor": "URE",
      "rules_url": "https://concursos.ure.es/en/cme/bases/",
      "verified": true,
      "note": "Two sessions with an overnight break, encoded in the sessions array; the top-level start/end repeat the first session, as elsewhere in this catalog. URE states one deadline for the contest as a whole and it is the second session's end plus 15 days exactly. The engine applies log_deadline_days to each session separately, so the first session's computed deadline falls a day before URE's printed one. Dropping the interval to quote a fixed date instead would lose the arithmetic URE actually states, so the interval is kept and the artefact recorded here.",
      "exchange": "Spanish stations send RS(T) + the number of their municipality (EA4URE sends HQ); DX stations send RS(T) + a serial number beginning with 001.",
      "country": "ES",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-18",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": "2026-08-24T11:59:00Z",
      "uid": "ure-cme-20260809T0500@contestcal",
      "start_date": "2026-08-09",
      "mode_families": [
        "SSB"
      ],
      "band_families": [
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "2-12"
    },
    {
      "contest_id": "sarl-hf-digital",
      "name": "SARL HF Digital Contest",
      "start": "2026-08-09T13:00:00Z",
      "end": "2026-08-09T16:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 3,
      "modes": [
        "FT8/FT4"
      ],
      "submodes": [
        "FT4",
        "FT8"
      ],
      "bands": [
        "80m",
        "40m",
        "20m"
      ],
      "bands_note": "20, 40 and 80 m. SSB 14 125-14 350, 7 063-7 100 and 7 130-7 200, 3 603-3 650 and 3 700-3 800 kHz; CW 14 020-14 030, 7 000-7 040, 3 510-3 560 kHz. The segments 7 100-7 130 and 3 651-3 699 kHz are contest free.",
      "sponsor": "SARL",
      "rules_url": "https://mysarl.org.za/wp-content/uploads/2025/11/2026-The-SARL-HF-Phone-Digital-and-CW-Contests-v1.1.pdf",
      "verified": true,
      "note": "Starts an hour earlier than the Phone and CW legs -- 13:00 UTC, not 14:00 -- which is SARL's own wording and not a transcription slip. log_deadline_days is 5, which is the right DAY and not the right hour: SARL states 'by 21:59 UTC on Friday', and the contest ends at 17:00 UTC on the Sunday five days before, so the engine's derived log_due lands at 17:00 rather than 21:59. The day is exact in every year because both ends are tied to the same Sunday. The five hours are recorded here rather than papered over.",
      "exchange": "Minimally a signal strength report and RRR/73/RRR73 and a serial number in each direction between the two parties.",
      "country": "ZA",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-19",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": "2026-08-14T16:00:00Z",
      "uid": "sarl-hf-digital-20260809T1300@contestcal",
      "start_date": "2026-08-09",
      "mode_families": [
        "Digital",
        "FT8/FT4"
      ],
      "band_families": [
        "80m",
        "40m",
        "20m"
      ],
      "duration_bucket": "2-12"
    },
    {
      "contest_id": "sarl-yl-qso-party",
      "name": "SARL YL QSO Party",
      "start": "2026-08-09T14:00:00Z",
      "end": "2026-08-09T15:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW",
        "SSB"
      ],
      "submodes": [],
      "bands": [
        "40m"
      ],
      "bands_note": "Phone 7 063-7 100 and 7 130-7 200 kHz; CW 7 000-7 040 kHz.",
      "sponsor": "SARL",
      "rules_url": "https://mysarl.org.za/wp-content/uploads/2025/12/2026-SARL-Contest-Manual-Version-1.1-2025-12-15.pdf",
      "verified": true,
      "note": "The two legs anchor differently and that is the point: the March leg is the first Saturday nearest International Women's Day on 8 March, and the August leg is South Africa's National Women's Day, which is the FIXED DATE of 9 August. One record, two rule types, because both legs share the same hour. log_format and log_deadline_days are absent: this pass read each contest's Aim, Dates, Frequencies and Exchange sections and did not read its Log Sheets section, so neither is recorded rather than assumed from SARL's other contests.",
      "exchange": "An RS(T) report and YL or OM.",
      "country": "ZA",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-19",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "sarl-yl-qso-party-20260809T1400@contestcal",
      "start_date": "2026-08-09",
      "mode_families": [
        "CW",
        "SSB"
      ],
      "band_families": [
        "40m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "4sqrp-sss",
      "name": "4 States QRP Group Second Sunday Sprint (SSS)",
      "start": "2026-08-10T00:00:00Z",
      "end": "2026-08-10T02:00:00Z",
      "start_wall": "2026-08-09T19:00:00",
      "end_wall": "2026-08-09T21:00:00",
      "local_rolling": false,
      "timezone": "America/Chicago",
      "duration_hours": 2,
      "modes": [
        "CW",
        "SSB",
        "Digital"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "",
      "sponsor": "4 States QRP Group",
      "rules_url": "https://www.4sqrp.com/SSS/sss_rules_revised_02_2026.pdf",
      "verified": true,
      "note": "SPONSOR-ANCHORED LOCAL TIME. The anchor is the second SUNDAY and the sprint runs into Monday UTC. 4SQRP states the consequence itself: '7 PM until 9 PM central time (CST or CDT, whichever is in effect at the time). If you use UTC, that time changes when we switch from CST to CDT (or vice versa).' Resolved through America/Chicago, so it is 0100Z Monday in winter and 0000Z Monday in summer.",
      "exchange": "RST + state/province/country + 4SQRP member number (power if non-member)",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "4sqrp-sss-20260810T0000@contestcal",
      "start_date": "2026-08-10",
      "mode_families": [
        "CW",
        "SSB",
        "Digital"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "2-12"
    },
    {
      "contest_id": "k1usn-sst",
      "name": "K1USN Slow Speed Test (SST)",
      "start": "2026-08-10T00:00:00Z",
      "end": "2026-08-10T01:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "",
      "sponsor": "K1USN Radio Club",
      "rules_url": "https://www.k1usn.com/sst_rules.html",
      "verified": true,
      "note": "No formal log submission -- participants post scores to 3830scores.com.",
      "exchange": "Name + state/province/DX country",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "k1usn-sst-20260810T0000@contestcal",
      "start_date": "2026-08-10",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "agcw-zap-merit",
      "name": "AGCW ZAP Merit Contest (ZMC)",
      "start": "2026-08-10T17:40:00Z",
      "end": "2026-08-10T18:30:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.83,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "80m"
      ],
      "bands_note": "",
      "sponsor": "AGCW-DL",
      "rules_url": "https://www.agcw.de/contest/tzap/",
      "verified": false,
      "note": "PARTLY UNVERIFIED. The recurrence (every Monday), the 1740 UTC pre-logging opening and the 1800 UTC telegram transmission are all quoted from AGCW. AGCW publishes NO closing time. The 1830 end stored here is a PLACEHOLDER so the record expands -- it is not a sponsor fact and must not be presented as one. Confirm the session length with the ZMC manager before shipping. Points accumulate over a calendar year; logs are due 31 January of the following year.",
      "exchange": "Callsign + date + time + RST (SWLs log RST of both stations in a QSO)",
      "country": "DE",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-12",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "agcw-zap-merit-20260810T1740@contestcal",
      "start_date": "2026-08-10",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "80m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "nzart-sprint-cw",
      "name": "ZL Autumn and Winter Sprints, CW",
      "start": "2026-08-11T08:00:00Z",
      "end": "2026-08-11T08:29:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.48,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "80m"
      ],
      "bands_note": "Suggested frequencies CW 3520-3550 kHz",
      "sponsor": "NZART",
      "rules_url": "https://nzart.org.nz/activities/contests/sprints/",
      "verified": true,
      "note": "One of three back-to-back 29-minute sprints on the same evening, each in a different mode and each scored separately, which is why they are three records here rather than one. Logs are due 'within 24 hours of the end of the sprint' -- shorter than a day, so no deadline interval is computed; they go to markzl3ab@gmail.com.",
      "exchange": "RS(T) and the outside temperature to the nearest degree; on CW, 'm' denotes a minus sign",
      "country": "NZ",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-17",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "nzart-sprint-cw-20260811T0800@contestcal",
      "start_date": "2026-08-11",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "80m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "nzart-sprint-ssb",
      "name": "ZL Autumn and Winter Sprints, SSB",
      "start": "2026-08-11T08:30:00Z",
      "end": "2026-08-11T08:59:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.48,
      "modes": [
        "SSB"
      ],
      "submodes": [],
      "bands": [
        "80m"
      ],
      "bands_note": "Suggested frequencies SSB 3620-3670 kHz",
      "sponsor": "NZART",
      "rules_url": "https://nzart.org.nz/activities/contests/sprints/",
      "verified": true,
      "note": "One of three back-to-back 29-minute sprints on the same evening, each in a different mode and each scored separately, which is why they are three records here rather than one. Logs are due 'within 24 hours of the end of the sprint' -- shorter than a day, so no deadline interval is computed; they go to markzl3ab@gmail.com.",
      "exchange": "RS(T) and the outside temperature to the nearest degree",
      "country": "NZ",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-17",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "nzart-sprint-ssb-20260811T0830@contestcal",
      "start_date": "2026-08-11",
      "mode_families": [
        "SSB"
      ],
      "band_families": [
        "80m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "nzart-sprint-ft4",
      "name": "ZL Autumn and Winter Sprints, FT4",
      "start": "2026-08-11T09:00:00Z",
      "end": "2026-08-11T09:29:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.48,
      "modes": [
        "FT8/FT4"
      ],
      "submodes": [
        "FT4"
      ],
      "bands": [
        "80m"
      ],
      "bands_note": "Suggested frequency FT4 3575 kHz",
      "sponsor": "NZART",
      "rules_url": "https://nzart.org.nz/activities/contests/sprints/",
      "verified": true,
      "note": "One of three back-to-back 29-minute sprints on the same evening, each in a different mode and each scored separately, which is why they are three records here rather than one. Logs are due 'within 24 hours of the end of the sprint' -- shorter than a day, so no deadline interval is computed; they go to markzl3ab@gmail.com.",
      "exchange": "A four-digit Maidenhead grid-square locator",
      "country": "NZ",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-17",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "nzart-sprint-ft4-20260811T0900@contestcal",
      "start_date": "2026-08-11",
      "mode_families": [
        "Digital",
        "FT8/FT4"
      ],
      "band_families": [
        "80m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "darc-ft4",
      "name": "DARC FT4 Contest",
      "start": "2026-08-11T19:00:00Z",
      "end": "2026-08-11T20:29:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1.48,
      "modes": [
        "FT8/FT4"
      ],
      "submodes": [
        "FT4"
      ],
      "bands": [
        "80m",
        "40m"
      ],
      "bands_note": "80m 3576, 3579 and 3582 kHz USB; 40m 7047.5 kHz USB",
      "sponsor": "DARC",
      "rules_url": "https://www.darc.de/der-club/referate/conteste/ft4-contest/ft4-rules/",
      "verified": true,
      "note": "Four legs a year, one record. DARC heads its 2026 date list 'Termine 2025:' -- the heading is a year out, the dates under it are 2026 and match DARC's KW contest calendar, so the typo is in the heading only.",
      "exchange": "Signal report + four-character grid square (for example JN49, JO61).",
      "country": "DE",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-18",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": "2026-08-18T20:29:00Z",
      "uid": "darc-ft4-20260811T1900@contestcal",
      "start_date": "2026-08-11",
      "mode_families": [
        "Digital",
        "FT8/FT4"
      ],
      "band_families": [
        "80m",
        "40m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "cwops-cwt",
      "name": "CWops Test (CWT)",
      "start": "2026-08-12T13:00:00Z",
      "end": "2026-08-12T14:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "CWops",
      "rules_url": "https://cwops.org/cwops-tests/",
      "verified": true,
      "note": "",
      "exchange": "Members: name + CWops number. Non-members: name + state/province/DX prefix.",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "cwops-cwt-20260812T1300@contestcal",
      "start_date": "2026-08-12",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "rsgb-eclipse-cw",
      "name": "RSGB Eclipse 3.5 MHz CW Contest",
      "start": "2026-08-12T16:30:00Z",
      "end": "2026-08-12T19:30:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 3,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "80m"
      ],
      "bands_note": "3510-3570 kHz.",
      "sponsor": "RSGB Contest Committee",
      "rules_url": "http://www.rsgbcc.org/hf/rules/2026/r_eclipse_cw.shtml",
      "verified": true,
      "note": "A ONE-OFF, TIED TO ONE ECLIPSE, AND CLOSED RATHER THAN EXPIRED. RSGB ran this for the total solar eclipse of 12 August 2026 and describes it as a one-time opportunity tied to that event. So it carries active_until: 2026 -- which is the field's real meaning, 'the sponsor stopped running it', and NOT the same state as the thirty-odd manual records waiting for next year's dates. The detail page will say the record is closed rather than missing, and it stays off the expiry cliff because there is nothing to re-check.\n\nIf RSGB runs an eclipse contest for a future eclipse it will be a different contest with different propagation to study, and it gets its own record.",
      "exchange": "RS(T) plus a serial number starting at 1 and incrementing by 1.",
      "country": "GB",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-23",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": "2026-08-13T19:30:00Z",
      "uid": "rsgb-eclipse-cw-20260812T1630@contestcal",
      "start_date": "2026-08-12",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "80m"
      ],
      "duration_bucket": "2-12"
    },
    {
      "contest_id": "rsgb-eclipse-ft8",
      "name": "RSGB Eclipse FT8 Contest",
      "start": "2026-08-12T16:30:00Z",
      "end": "2026-08-12T19:30:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 3,
      "modes": [
        "FT8/FT4"
      ],
      "submodes": [
        "FT8"
      ],
      "bands": [
        "40m"
      ],
      "bands_note": "40 m, 7074 kHz.",
      "sponsor": "RSGB Contest Committee",
      "rules_url": "https://www.rsgbcc.org/hf/rules/2026/r_eclipse_ft8.shtml",
      "verified": true,
      "note": "A ONE-OFF, TIED TO ONE ECLIPSE, AND CLOSED RATHER THAN EXPIRED. RSGB ran this for the total solar eclipse of 12 August 2026 and describes it as a one-time opportunity tied to that event. So it carries active_until: 2026 -- which is the field's real meaning, 'the sponsor stopped running it', and NOT the same state as the thirty-odd manual records waiting for next year's dates. The detail page will say the record is closed rather than missing, and it stays off the expiry cliff because there is nothing to re-check.\n\nIf RSGB runs an eclipse contest for a future eclipse it will be a different contest with different propagation to study, and it gets its own record.\n\nRAN ALONGSIDE THE CW ECLIPSE CONTEST, same three hours, different band: CW on 80 m and FT8 on 40 m. Two bands watched at once during the same eclipse is the point of running two.",
      "exchange": "A signal report. No serial number and no locator.",
      "country": "GB",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-23",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": "2026-08-13T19:30:00Z",
      "uid": "rsgb-eclipse-ft8-20260812T1630@contestcal",
      "start_date": "2026-08-12",
      "mode_families": [
        "Digital",
        "FT8/FT4"
      ],
      "band_families": [
        "40m"
      ],
      "duration_bucket": "2-12"
    },
    {
      "contest_id": "cwops-cwt",
      "name": "CWops Test (CWT)",
      "start": "2026-08-12T19:00:00Z",
      "end": "2026-08-12T20:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "CWops",
      "rules_url": "https://cwops.org/cwops-tests/",
      "verified": true,
      "note": "",
      "exchange": "Members: name + CWops number. Non-members: name + state/province/DX prefix.",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "cwops-cwt-20260812T1900@contestcal",
      "start_date": "2026-08-12",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "cwops-cwt",
      "name": "CWops Test (CWT)",
      "start": "2026-08-13T03:00:00Z",
      "end": "2026-08-13T04:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "CWops",
      "rules_url": "https://cwops.org/cwops-tests/",
      "verified": true,
      "note": "",
      "exchange": "Members: name + CWops number. Non-members: name + state/province/DX prefix.",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "cwops-cwt-20260813T0300@contestcal",
      "start_date": "2026-08-13",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "cwops-cwt",
      "name": "CWops Test (CWT)",
      "start": "2026-08-13T07:00:00Z",
      "end": "2026-08-13T08:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "CWops",
      "rules_url": "https://cwops.org/cwops-tests/",
      "verified": true,
      "note": "",
      "exchange": "Members: name + CWops number. Non-members: name + state/province/DX prefix.",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "cwops-cwt-20260813T0700@contestcal",
      "start_date": "2026-08-13",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "nccc-ns-ft4",
      "name": "NCCC FT4 Sprint (FT4 NS)",
      "start": "2026-08-14T01:00:00Z",
      "end": "2026-08-14T01:30:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.5,
      "modes": [
        "FT8/FT4"
      ],
      "submodes": [
        "FT4"
      ],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "Northern California Contest Club (NCCC)",
      "rules_url": "https://www.ncccsprint.com/ft4ns.html",
      "verified": true,
      "note": "NCCC describes these as 'nominal rules' that may be modified on a weekly basis, and runs formal Ladder seasons interspersed with practice weeks. The 30-minute session slot itself is fixed.",
      "exchange": "Grid square (following NA VHF, WW Digi and ARRL IDC practice)",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "nccc-ns-ft4-20260814T0100@contestcal",
      "start_date": "2026-08-14",
      "mode_families": [
        "Digital",
        "FT8/FT4"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "nccc-ns-rtty",
      "name": "NCCC RTTY Sprint (RTTY NS)",
      "start": "2026-08-14T01:45:00Z",
      "end": "2026-08-14T02:15:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.5,
      "modes": [
        "RTTY"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m"
      ],
      "bands_note": "",
      "sponsor": "Northern California Contest Club (NCCC)",
      "rules_url": "https://ncccsprint.com/rttyns.html",
      "verified": true,
      "note": "NCCC describes these as 'nominal rules' that may be modified on a weekly basis, and runs formal Ladder seasons interspersed with practice weeks. The 30-minute session slot itself is fixed.",
      "exchange": "Serial number + name + QTH (both callsigns required in the exchange)",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "nccc-ns-rtty-20260814T0145@contestcal",
      "start_date": "2026-08-14",
      "mode_families": [
        "RTTY",
        "Digital"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "nccc-ns-cw",
      "name": "NCCC Sprint (NS)",
      "start": "2026-08-14T02:30:00Z",
      "end": "2026-08-14T03:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.5,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m"
      ],
      "bands_note": "",
      "sponsor": "Northern California Contest Club (NCCC)",
      "rules_url": "https://ncccsprint.com/rules.html",
      "verified": true,
      "note": "NCCC describes these as 'nominal rules' that may be modified on a weekly basis, and runs formal Ladder seasons interspersed with practice weeks. The 30-minute session slot itself is fixed.",
      "exchange": "Serial number + name + QTH (both callsigns required in the exchange)",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "nccc-ns-cw-20260814T0230@contestcal",
      "start_date": "2026-08-14",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "k1usn-sst",
      "name": "K1USN Slow Speed Test (SST)",
      "start": "2026-08-14T20:00:00Z",
      "end": "2026-08-14T21:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "",
      "sponsor": "K1USN Radio Club",
      "rules_url": "https://www.k1usn.com/sst_rules.html",
      "verified": true,
      "note": "No formal log submission -- participants post scores to 3830scores.com.",
      "exchange": "Name + state/province/DX country",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "k1usn-sst-20260814T2000@contestcal",
      "start_date": "2026-08-14",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "sartg-ww-rtty",
      "name": "SARTG WW RTTY Contest",
      "start": "2026-08-15T00:00:00Z",
      "end": "2026-08-15T08:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 8,
      "modes": [
        "RTTY"
      ],
      "submodes": [],
      "bands": [
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "",
      "sponsor": "SARTG (Scandinavian Amateur Radio Teleprinter Group)",
      "rules_url": "https://www.sartg.com/contest/wwrules.htm",
      "verified": true,
      "note": "Three separate eight-hour periods with gaps between them, not one continuous 48-hour run -- encoded as three sessions off the Saturday anchor. SARTG's own '15 - 16 August 2026' is the independent check on the third-full-weekend rule.",
      "exchange": "RST + QSO number starting with 001",
      "country": "SE",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-12",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "sartg-ww-rtty-20260815T0000@contestcal",
      "start_date": "2026-08-15",
      "mode_families": [
        "RTTY",
        "Digital"
      ],
      "band_families": [
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "2-12"
    },
    {
      "contest_id": "wia-remembrance-day",
      "name": "Remembrance Day Contest",
      "start": "2026-08-15T03:00:00Z",
      "end": "2026-08-16T03:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 24,
      "modes": [
        "SSB",
        "CW",
        "RTTY"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m",
        "6m",
        "2m",
        "70cm",
        "23cm",
        "13cm",
        "3cm"
      ],
      "bands_note": "Contacts may be made on MF (160M), HF and VHF & above bands except for WARC bands (10, 18 & 24MHZ) which are excluded by IARU agreement from all contest operations",
      "sponsor": "WIA",
      "rules_url": "https://www.wia.org.au/members/contests/rdcontest/",
      "verified": true,
      "note": "QRP entrants are limited to 5 watts average (CW/RTTY) or PEP (SSB) at the transmitter output. The band list is this catalog's reading of WIA's prose: the six HF/MF bands come from WIA's own SSB frequency list, 23cm/13cm/3cm from 'On 23cm or higher bands two points per completed valid contact', and 6m/2m/70cm from 'VHF & above'. 1.25m and 33cm are omitted because they are not Australian allocations.",
      "exchange": "RS(T) and a serial number",
      "country": "AU",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-17",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": "2026-08-30T03:00:00Z",
      "uid": "wia-remembrance-day-20260815T0300@contestcal",
      "start_date": "2026-08-15",
      "mode_families": [
        "CW",
        "SSB",
        "RTTY",
        "Digital"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m",
        "6m",
        "VHF+"
      ],
      "duration_bucket": "gte24"
    },
    {
      "contest_id": "arrl-10ghz-leg1",
      "name": "ARRL 10 GHz and Up Contest, Round 1",
      "start": "2026-08-15T09:00:00Z",
      "end": "2026-08-17T07:59:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 46.98,
      "modes": [
        "Mixed"
      ],
      "submodes": [],
      "bands": [
        "3cm"
      ],
      "bands_note": "10 GHz through light",
      "sponsor": "ARRL",
      "rules_url": "http://www.arrl.org/10-ghz-up",
      "verified": true,
      "note": "CORRECTION: this was stored as a local-time contest running 0600 local Saturday to 2359 local Sunday. ARRL has since moved it to fixed UTC and says so explicitly in the rules. It is now a plain UTC record -- 0900Z Saturday to 0759Z Monday -- and carries no timezone or local_rolling flag. Operating time is capped at 42 hours inside that 47-hour window. Log deadline is stated once for the whole contest -- 'no later than THIRTY (30) days after the second weekend' -- so it is recorded on Round 2 only; counting 30 days from Round 1's own end would be wrong.",
      "exchange": "",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-12",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "10 GHz+ microwave, rover-oriented. Very small participant pool.",
      "log_due": null,
      "uid": "arrl-10ghz-leg1-20260815T0900@contestcal",
      "start_date": "2026-08-15",
      "mode_families": [
        "CW",
        "SSB",
        "FM",
        "RTTY",
        "Digital",
        "FT8/FT4",
        "Mixed"
      ],
      "band_families": [
        "VHF+"
      ],
      "duration_bucket": "gte24"
    },
    {
      "contest_id": "sarl-youth-qso-party",
      "name": "SARL Youth QSO Party",
      "start": "2026-08-15T12:00:00Z",
      "end": "2026-08-15T13:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW",
        "SSB"
      ],
      "submodes": [],
      "bands": [
        "40m"
      ],
      "bands_note": "Phone 7 063-7 100 and 7 130-7 200 kHz; CW 7 000-7 040 kHz.",
      "sponsor": "SARL",
      "rules_url": "https://mysarl.org.za/wp-content/uploads/2025/12/2026-SARL-Contest-Manual-Version-1.1-2025-12-15.pdf",
      "verified": true,
      "note": "Like the YL party, two legs with two different rule shapes on one clock: 16 June is South Africa's National Youth Day and is fixed, while the August leg is the third Saturday. log_format and log_deadline_days are absent: this pass read each contest's Aim, Dates, Frequencies and Exchange sections and did not read its Log Sheets section, so neither is recorded rather than assumed from SARL's other contests.",
      "exchange": "An RS(T) report and the operator's age.",
      "country": "ZA",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-19",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "sarl-youth-qso-party-20260815T1200@contestcal",
      "start_date": "2026-08-15",
      "mode_families": [
        "CW",
        "SSB"
      ],
      "band_families": [
        "40m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "sartg-ww-rtty",
      "name": "SARTG WW RTTY Contest",
      "start": "2026-08-15T16:00:00Z",
      "end": "2026-08-16T00:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 8,
      "modes": [
        "RTTY"
      ],
      "submodes": [],
      "bands": [
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "",
      "sponsor": "SARTG (Scandinavian Amateur Radio Teleprinter Group)",
      "rules_url": "https://www.sartg.com/contest/wwrules.htm",
      "verified": true,
      "note": "Three separate eight-hour periods with gaps between them, not one continuous 48-hour run -- encoded as three sessions off the Saturday anchor. SARTG's own '15 - 16 August 2026' is the independent check on the third-full-weekend rule.",
      "exchange": "RST + QSO number starting with 001",
      "country": "SE",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-12",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "sartg-ww-rtty-20260815T1600@contestcal",
      "start_date": "2026-08-15",
      "mode_families": [
        "RTTY",
        "Digital"
      ],
      "band_families": [
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "2-12"
    },
    {
      "contest_id": "naqp-ssb",
      "name": "North American QSO Party, SSB",
      "start": "2026-08-15T18:00:00Z",
      "end": "2026-08-16T05:59:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 11.98,
      "modes": [
        "SSB"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "",
      "sponsor": "National Contest Journal (NCJ)",
      "rules_url": "https://www.ncjweb.com/NAQP-Rules.pdf",
      "verified": true,
      "note": "",
      "exchange": "Name + state/province/country",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "naqp-ssb-20260815T1800@contestcal",
      "start_date": "2026-08-15",
      "mode_families": [
        "SSB"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "2-12"
    },
    {
      "contest_id": "sartg-ww-rtty",
      "name": "SARTG WW RTTY Contest",
      "start": "2026-08-16T08:00:00Z",
      "end": "2026-08-16T16:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 8,
      "modes": [
        "RTTY"
      ],
      "submodes": [],
      "bands": [
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "",
      "sponsor": "SARTG (Scandinavian Amateur Radio Teleprinter Group)",
      "rules_url": "https://www.sartg.com/contest/wwrules.htm",
      "verified": true,
      "note": "Three separate eight-hour periods with gaps between them, not one continuous 48-hour run -- encoded as three sessions off the Saturday anchor. SARTG's own '15 - 16 August 2026' is the independent check on the third-full-weekend rule.",
      "exchange": "RST + QSO number starting with 001",
      "country": "SE",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-12",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "sartg-ww-rtty-20260816T0800@contestcal",
      "start_date": "2026-08-16",
      "mode_families": [
        "RTTY",
        "Digital"
      ],
      "band_families": [
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "2-12"
    },
    {
      "contest_id": "arrl-rookie-roundup-rtty",
      "name": "ARRL Rookie Roundup, RTTY",
      "start": "2026-08-16T18:00:00Z",
      "end": "2026-08-16T23:59:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 5.98,
      "modes": [
        "RTTY"
      ],
      "submodes": [],
      "bands": [
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "",
      "sponsor": "ARRL",
      "rules_url": "http://www.arrl.org/rookie-roundup",
      "verified": true,
      "note": "",
      "exchange": "",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-21",
      "can_enter": true,
      "eligibility_scope": "entity_list",
      "eligibility_reason": "Entry limited to K, VE, XE -- includes K.",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "arrl-rookie-roundup-rtty-20260816T1800@contestcal",
      "start_date": "2026-08-16",
      "mode_families": [
        "RTTY",
        "Digital"
      ],
      "band_families": [
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "2-12"
    },
    {
      "contest_id": "k1usn-sst",
      "name": "K1USN Slow Speed Test (SST)",
      "start": "2026-08-17T00:00:00Z",
      "end": "2026-08-17T01:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "",
      "sponsor": "K1USN Radio Club",
      "rules_url": "https://www.k1usn.com/sst_rules.html",
      "verified": true,
      "note": "No formal log submission -- participants post scores to 3830scores.com.",
      "exchange": "Name + state/province/DX country",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "k1usn-sst-20260817T0000@contestcal",
      "start_date": "2026-08-17",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "agcw-zap-merit",
      "name": "AGCW ZAP Merit Contest (ZMC)",
      "start": "2026-08-17T17:40:00Z",
      "end": "2026-08-17T18:30:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.83,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "80m"
      ],
      "bands_note": "",
      "sponsor": "AGCW-DL",
      "rules_url": "https://www.agcw.de/contest/tzap/",
      "verified": false,
      "note": "PARTLY UNVERIFIED. The recurrence (every Monday), the 1740 UTC pre-logging opening and the 1800 UTC telegram transmission are all quoted from AGCW. AGCW publishes NO closing time. The 1830 end stored here is a PLACEHOLDER so the record expands -- it is not a sponsor fact and must not be presented as one. Confirm the session length with the ZMC manager before shipping. Points accumulate over a calendar year; logs are due 31 January of the following year.",
      "exchange": "Callsign + date + time + RST (SWLs log RST of both stations in a QSO)",
      "country": "DE",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-12",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "agcw-zap-merit-20260817T1740@contestcal",
      "start_date": "2026-08-17",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "80m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "rsgb-ft4-series",
      "name": "RSGB FT4 Contest Series",
      "start": "2026-08-17T19:00:00Z",
      "end": "2026-08-17T21:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 2,
      "modes": [
        "FT8/FT4"
      ],
      "submodes": [
        "FT4"
      ],
      "bands": [
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "80, 40, 20, 15 and 10 m.",
      "sponsor": "RSGB Contest Committee",
      "rules_url": "https://www.rsgbcc.org/hf/rules/2026/r80m_ft4.shtml",
      "verified": true,
      "note": "TWELVE MONDAY EVENINGS AND THE CLOCK SHIFTS FOR THE SUMMER: January to March and October to December run 2000-2200 UTC, April to September run 1900-2100. Six legs each way, so the record's default is the winter clock and the summer legs carry their own -- the third contest to need per-date times, after the Autumn Series and the 80m Club Championship.\n\nMANUAL BECAUSE THE DATES ARE NOT ON THE RULES PAGE and follow no ordinal: they are Mondays, but the third Monday in January, the fourth in February, the third in March. RSGB publishes them on its CGI calendar and this record holds what that prints.\n\nNot the same contest as the FT4 International Activity Day in April, which is 24 hours and has its own rules page.",
      "exchange": "A signal report. A serial number is not required.",
      "country": "GB",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-23",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": "2026-08-18T21:00:00Z",
      "uid": "rsgb-ft4-series-20260817T1900@contestcal",
      "start_date": "2026-08-17",
      "mode_families": [
        "Digital",
        "FT8/FT4"
      ],
      "band_families": [
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "2-12"
    },
    {
      "contest_id": "nzart-sprint-cw",
      "name": "ZL Autumn and Winter Sprints, CW",
      "start": "2026-08-18T08:00:00Z",
      "end": "2026-08-18T08:29:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.48,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "80m"
      ],
      "bands_note": "Suggested frequencies CW 3520-3550 kHz",
      "sponsor": "NZART",
      "rules_url": "https://nzart.org.nz/activities/contests/sprints/",
      "verified": true,
      "note": "One of three back-to-back 29-minute sprints on the same evening, each in a different mode and each scored separately, which is why they are three records here rather than one. Logs are due 'within 24 hours of the end of the sprint' -- shorter than a day, so no deadline interval is computed; they go to markzl3ab@gmail.com.",
      "exchange": "RS(T) and the outside temperature to the nearest degree; on CW, 'm' denotes a minus sign",
      "country": "NZ",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-17",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "nzart-sprint-cw-20260818T0800@contestcal",
      "start_date": "2026-08-18",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "80m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "nzart-sprint-ssb",
      "name": "ZL Autumn and Winter Sprints, SSB",
      "start": "2026-08-18T08:30:00Z",
      "end": "2026-08-18T08:59:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.48,
      "modes": [
        "SSB"
      ],
      "submodes": [],
      "bands": [
        "80m"
      ],
      "bands_note": "Suggested frequencies SSB 3620-3670 kHz",
      "sponsor": "NZART",
      "rules_url": "https://nzart.org.nz/activities/contests/sprints/",
      "verified": true,
      "note": "One of three back-to-back 29-minute sprints on the same evening, each in a different mode and each scored separately, which is why they are three records here rather than one. Logs are due 'within 24 hours of the end of the sprint' -- shorter than a day, so no deadline interval is computed; they go to markzl3ab@gmail.com.",
      "exchange": "RS(T) and the outside temperature to the nearest degree",
      "country": "NZ",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-17",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "nzart-sprint-ssb-20260818T0830@contestcal",
      "start_date": "2026-08-18",
      "mode_families": [
        "SSB"
      ],
      "band_families": [
        "80m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "nzart-sprint-ft4",
      "name": "ZL Autumn and Winter Sprints, FT4",
      "start": "2026-08-18T09:00:00Z",
      "end": "2026-08-18T09:29:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.48,
      "modes": [
        "FT8/FT4"
      ],
      "submodes": [
        "FT4"
      ],
      "bands": [
        "80m"
      ],
      "bands_note": "Suggested frequency FT4 3575 kHz",
      "sponsor": "NZART",
      "rules_url": "https://nzart.org.nz/activities/contests/sprints/",
      "verified": true,
      "note": "One of three back-to-back 29-minute sprints on the same evening, each in a different mode and each scored separately, which is why they are three records here rather than one. Logs are due 'within 24 hours of the end of the sprint' -- shorter than a day, so no deadline interval is computed; they go to markzl3ab@gmail.com.",
      "exchange": "A four-digit Maidenhead grid-square locator",
      "country": "NZ",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-17",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "nzart-sprint-ft4-20260818T0900@contestcal",
      "start_date": "2026-08-18",
      "mode_families": [
        "Digital",
        "FT8/FT4"
      ],
      "band_families": [
        "80m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "darc-hell-kurz",
      "name": "DARC HELL-Kurzcontest",
      "start": "2026-08-18T18:00:00Z",
      "end": "2026-08-18T18:59:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.98,
      "modes": [
        "Digital"
      ],
      "submodes": [
        "Hell"
      ],
      "bands": [],
      "bands_note": "",
      "sponsor": "DARC",
      "rules_url": "https://www.darc.de/der-club/referate/conteste/darc-kw-conteste/kw-conteste/",
      "verified": false,
      "note": "VERIFIED FALSE, AND THE RECURRENCE IS STILL DERIVED FROM DARC'S OWN FOUR DATES. All four are the THIRD TUESDAY of the second month of each quarter -- 17 Feb, 19 May, 18 Aug, 17 Nov 2026 -- which is a clean pattern across four points and sits alongside the RTTY-Kurzcontest (2nd Tuesday, months 1/4/7/10) and the FT4 Contest (2nd Tuesday, months 2/5/8/11) that DARC already runs.\n\nWhat is missing is everything the rules page would give: BANDS ARE UNRECORDED, so every band filter excludes this record, and the exchange and deadline are absent. The mode is taken from the contest's own name. That is why it is unverified: the dates are DARC's, the rule is an inference from them, and the rest is a gap.\n\nWHERE THE BANDS WOULD HAVE BEEN: Not read: this series has no Ausschreibung linked from DARC's table. That sentence sits here rather than in bands_note, because bands_note is for a sponsor's own wording ABOUT a band list and must never stand in for one -- a test enforces it, and it caught this.",
      "exchange": "",
      "country": "DE",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-23",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "darc-hell-kurz-20260818T1800@contestcal",
      "start_date": "2026-08-18",
      "mode_families": [
        "Digital"
      ],
      "band_families": [],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "cwops-cwt",
      "name": "CWops Test (CWT)",
      "start": "2026-08-19T13:00:00Z",
      "end": "2026-08-19T14:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "CWops",
      "rules_url": "https://cwops.org/cwops-tests/",
      "verified": true,
      "note": "",
      "exchange": "Members: name + CWops number. Non-members: name + state/province/DX prefix.",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "cwops-cwt-20260819T1300@contestcal",
      "start_date": "2026-08-19",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "sarl-club-80m",
      "name": "SARL Wednesday 80 m Club Contest",
      "start": "2026-08-19T17:00:00Z",
      "end": "2026-08-19T18:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "SSB",
        "CW",
        "RTTY"
      ],
      "submodes": [],
      "bands": [
        "80m"
      ],
      "bands_note": "Phone 3 603-3 650 and 3 703-3 800 kHz; CW 3 510-3 560 kHz; RTTY 3 580-3 600 kHz. The segment 3 651-3 700 kHz is contest free.",
      "sponsor": "SARL",
      "rules_url": "https://mysarl.org.za/wp-content/uploads/2025/12/2026-SARL-Contest-Manual-Version-1.1-2025-12-15.pdf",
      "verified": true,
      "note": "A club championship rather than an individual contest: operators' scores are added into a club total. The month list is SARL's own -- these run in four months of the year, not every month -- which is what monthly_nth_weekday's `months` field exists for. log_format and log_deadline_days are absent: this pass read each contest's Aim, Dates, Frequencies and Exchange sections and did not read its Log Sheets section, so neither is recorded rather than assumed from SARL's other contests.\n\nPROVENANCE RESTORED 2026-08-23. This record carried verified: true with an EMPTY source_note -- one of three the 2026-08-21 rule audit found, and a stricter defect than the thin ARRL notes beside them: an empty string is not weak evidence, it is none, and there was nothing in the record to check a rule against. The rule, the times, the bands and the exchange were all correct; only the evidence for them was missing. Re-read from the manual and quoted above, and SARL's own printed 2026 dates reproduce it.",
      "exchange": "Your name, your Abbreviated Club Callsign and your 4-character grid square (for example KG30).",
      "country": "ZA",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-23",
      "can_enter": false,
      "eligibility_scope": "entity_list",
      "eligibility_reason": "Entry limited to ZS. K stations may be worked but cannot submit an entry.",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "sarl-club-80m-20260819T1700@contestcal",
      "start_date": "2026-08-19",
      "mode_families": [
        "CW",
        "SSB",
        "RTTY",
        "Digital"
      ],
      "band_families": [
        "80m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "cwops-cwt",
      "name": "CWops Test (CWT)",
      "start": "2026-08-19T19:00:00Z",
      "end": "2026-08-19T20:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "CWops",
      "rules_url": "https://cwops.org/cwops-tests/",
      "verified": true,
      "note": "",
      "exchange": "Members: name + CWops number. Non-members: name + state/province/DX prefix.",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "cwops-cwt-20260819T1900@contestcal",
      "start_date": "2026-08-19",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "cwops-cwt",
      "name": "CWops Test (CWT)",
      "start": "2026-08-20T03:00:00Z",
      "end": "2026-08-20T04:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "CWops",
      "rules_url": "https://cwops.org/cwops-tests/",
      "verified": true,
      "note": "",
      "exchange": "Members: name + CWops number. Non-members: name + state/province/DX prefix.",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "cwops-cwt-20260820T0300@contestcal",
      "start_date": "2026-08-20",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "cwops-cwt",
      "name": "CWops Test (CWT)",
      "start": "2026-08-20T07:00:00Z",
      "end": "2026-08-20T08:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "CWops",
      "rules_url": "https://cwops.org/cwops-tests/",
      "verified": true,
      "note": "",
      "exchange": "Members: name + CWops number. Non-members: name + state/province/DX prefix.",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "cwops-cwt-20260820T0700@contestcal",
      "start_date": "2026-08-20",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "nccc-ns-ft4",
      "name": "NCCC FT4 Sprint (FT4 NS)",
      "start": "2026-08-21T01:00:00Z",
      "end": "2026-08-21T01:30:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.5,
      "modes": [
        "FT8/FT4"
      ],
      "submodes": [
        "FT4"
      ],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "Northern California Contest Club (NCCC)",
      "rules_url": "https://www.ncccsprint.com/ft4ns.html",
      "verified": true,
      "note": "NCCC describes these as 'nominal rules' that may be modified on a weekly basis, and runs formal Ladder seasons interspersed with practice weeks. The 30-minute session slot itself is fixed.",
      "exchange": "Grid square (following NA VHF, WW Digi and ARRL IDC practice)",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "nccc-ns-ft4-20260821T0100@contestcal",
      "start_date": "2026-08-21",
      "mode_families": [
        "Digital",
        "FT8/FT4"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "nccc-ns-rtty",
      "name": "NCCC RTTY Sprint (RTTY NS)",
      "start": "2026-08-21T01:45:00Z",
      "end": "2026-08-21T02:15:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.5,
      "modes": [
        "RTTY"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m"
      ],
      "bands_note": "",
      "sponsor": "Northern California Contest Club (NCCC)",
      "rules_url": "https://ncccsprint.com/rttyns.html",
      "verified": true,
      "note": "NCCC describes these as 'nominal rules' that may be modified on a weekly basis, and runs formal Ladder seasons interspersed with practice weeks. The 30-minute session slot itself is fixed.",
      "exchange": "Serial number + name + QTH (both callsigns required in the exchange)",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "nccc-ns-rtty-20260821T0145@contestcal",
      "start_date": "2026-08-21",
      "mode_families": [
        "RTTY",
        "Digital"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "nccc-ns-cw",
      "name": "NCCC Sprint (NS)",
      "start": "2026-08-21T02:30:00Z",
      "end": "2026-08-21T03:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.5,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m"
      ],
      "bands_note": "",
      "sponsor": "Northern California Contest Club (NCCC)",
      "rules_url": "https://ncccsprint.com/rules.html",
      "verified": true,
      "note": "NCCC describes these as 'nominal rules' that may be modified on a weekly basis, and runs formal Ladder seasons interspersed with practice weeks. The 30-minute session slot itself is fixed.",
      "exchange": "Serial number + name + QTH (both callsigns required in the exchange)",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "nccc-ns-cw-20260821T0230@contestcal",
      "start_date": "2026-08-21",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "k1usn-sst",
      "name": "K1USN Slow Speed Test (SST)",
      "start": "2026-08-21T20:00:00Z",
      "end": "2026-08-21T21:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "",
      "sponsor": "K1USN Radio Club",
      "rules_url": "https://www.k1usn.com/sst_rules.html",
      "verified": true,
      "note": "No formal log submission -- participants post scores to 3830scores.com.",
      "exchange": "Name + state/province/DX country",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "k1usn-sst-20260821T2000@contestcal",
      "start_date": "2026-08-21",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "arsi-vu-dx",
      "name": "ARSI VU-DX Contest",
      "start": "2026-08-22T12:00:00Z",
      "end": "2026-08-23T11:59:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 23.98,
      "modes": [
        "SSB",
        "CW"
      ],
      "submodes": [],
      "bands": [
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "",
      "sponsor": "ARSI",
      "rules_url": "https://arsi.info/dxcontest/",
      "verified": true,
      "note": "Mixed is one of ARSI's entry categories rather than a third mode; the contest permits SSB and CW, which is what modes records. ARSI PUBLISHES DATES, NOT A RECURRENCE. Every one of its contest pages opens with the year's dates and states no rule anywhere -- no 'annually on', no ordinal weekend. So all five records are manual and hold exactly the 2026 editions ARSI published. Fitting an ordinal to one date would be inventing a rule ARSI has not written, and Asia is thin enough that the temptation is worth naming.",
      "exchange": "VU stations send RS(T) and their two-letter State or Union Territory code; non-VU stations send RS(T) and a serial number.",
      "country": "IN",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-19",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "arsi-vu-dx-20260822T1200@contestcal",
      "start_date": "2026-08-22",
      "mode_families": [
        "CW",
        "SSB"
      ],
      "band_families": [
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "12-24"
    },
    {
      "contest_id": "frr-yo-dx-hf",
      "name": "YO DX HF Contest",
      "start": "2026-08-22T12:00:00Z",
      "end": "2026-08-23T11:59:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 23.98,
      "modes": [
        "CW",
        "SSB"
      ],
      "submodes": [],
      "bands": [
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "3.5-28 MHz, WARC bands excluded.",
      "sponsor": "FRR",
      "rules_url": "https://www.yodx.ro/rules.php",
      "verified": true,
      "note": "August 2026 is the year that separates the readings: 1 August is a Saturday, so the month has five full weekends (1-2, 8-9, 15-16, 22-23, 29-30) and the fourth is 22-23 August while the last is 29-30. The organisers' own 2026 announcement says 22-23, which is the fourth. CONTRADICTION, recorded not reconciled: an older FRR rules PDF on hamradio.ro says 'Ultimul weekend intreg al lunii August' (the LAST full weekend of August), which would give 29-30. The current yodx.ro rules and FRR's own 2026 announcement agree on the fourth, so that is what is encoded. Observation: the Romanian page leaks '[cite: 9]' markers into its text, which suggests it was assembled by a tool; the wording still matches the English edition.",
      "exchange": "Stations outside Romania send RS(T) and a serial from 001; YO stations send RS(T) and their county abbreviation.",
      "country": "RO",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-19",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": "2026-08-30T11:59:00Z",
      "uid": "frr-yo-dx-hf-20260822T1200@contestcal",
      "start_date": "2026-08-22",
      "mode_families": [
        "CW",
        "SSB"
      ],
      "band_families": [
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "12-24"
    },
    {
      "contest_id": "sarl-hf-cw",
      "name": "SARL HF CW Contest",
      "start": "2026-08-23T14:00:00Z",
      "end": "2026-08-23T17:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 3,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "80m",
        "40m",
        "20m"
      ],
      "bands_note": "20, 40 and 80 m. SSB 14 125-14 350, 7 063-7 100 and 7 130-7 200, 3 603-3 650 and 3 700-3 800 kHz; CW 14 020-14 030, 7 000-7 040, 3 510-3 560 kHz. The segments 7 100-7 130 and 3 651-3 699 kHz are contest free.",
      "sponsor": "SARL",
      "rules_url": "https://mysarl.org.za/wp-content/uploads/2025/11/2026-The-SARL-HF-Phone-Digital-and-CW-Contests-v1.1.pdf",
      "verified": true,
      "note": "FOURTH Sunday, not last: in a five-Sunday August the two differ, and SARL writes '(4th Sunday)'. log_deadline_days is 5, which is the right DAY and not the right hour: SARL states 'by 21:59 UTC on Friday', and the contest ends at 17:00 UTC on the Sunday five days before, so the engine's derived log_due lands at 17:00 rather than 21:59. The day is exact in every year because both ends are tied to the same Sunday. The five hours are recorded here rather than papered over.",
      "exchange": "RS, RSQ or RST report and a consecutive serial number starting at 001.",
      "country": "ZA",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-19",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": "2026-08-28T17:00:00Z",
      "uid": "sarl-hf-cw-20260823T1400@contestcal",
      "start_date": "2026-08-23",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "80m",
        "40m",
        "20m"
      ],
      "duration_bucket": "2-12"
    },
    {
      "contest_id": "k1usn-sst",
      "name": "K1USN Slow Speed Test (SST)",
      "start": "2026-08-24T00:00:00Z",
      "end": "2026-08-24T01:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "",
      "sponsor": "K1USN Radio Club",
      "rules_url": "https://www.k1usn.com/sst_rules.html",
      "verified": true,
      "note": "No formal log submission -- participants post scores to 3830scores.com.",
      "exchange": "Name + state/province/DX country",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "k1usn-sst-20260824T0000@contestcal",
      "start_date": "2026-08-24",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "agcw-zap-merit",
      "name": "AGCW ZAP Merit Contest (ZMC)",
      "start": "2026-08-24T17:40:00Z",
      "end": "2026-08-24T18:30:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.83,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "80m"
      ],
      "bands_note": "",
      "sponsor": "AGCW-DL",
      "rules_url": "https://www.agcw.de/contest/tzap/",
      "verified": false,
      "note": "PARTLY UNVERIFIED. The recurrence (every Monday), the 1740 UTC pre-logging opening and the 1800 UTC telegram transmission are all quoted from AGCW. AGCW publishes NO closing time. The 1830 end stored here is a PLACEHOLDER so the record expands -- it is not a sponsor fact and must not be presented as one. Confirm the session length with the ZMC manager before shipping. Points accumulate over a calendar year; logs are due 31 January of the following year.",
      "exchange": "Callsign + date + time + RST (SWLs log RST of both stations in a QSO)",
      "country": "DE",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-12",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "agcw-zap-merit-20260824T1740@contestcal",
      "start_date": "2026-08-24",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "80m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "nzart-sprint-cw",
      "name": "ZL Autumn and Winter Sprints, CW",
      "start": "2026-08-25T08:00:00Z",
      "end": "2026-08-25T08:29:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.48,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "80m"
      ],
      "bands_note": "Suggested frequencies CW 3520-3550 kHz",
      "sponsor": "NZART",
      "rules_url": "https://nzart.org.nz/activities/contests/sprints/",
      "verified": true,
      "note": "One of three back-to-back 29-minute sprints on the same evening, each in a different mode and each scored separately, which is why they are three records here rather than one. Logs are due 'within 24 hours of the end of the sprint' -- shorter than a day, so no deadline interval is computed; they go to markzl3ab@gmail.com.",
      "exchange": "RS(T) and the outside temperature to the nearest degree; on CW, 'm' denotes a minus sign",
      "country": "NZ",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-17",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "nzart-sprint-cw-20260825T0800@contestcal",
      "start_date": "2026-08-25",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "80m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "nzart-sprint-ssb",
      "name": "ZL Autumn and Winter Sprints, SSB",
      "start": "2026-08-25T08:30:00Z",
      "end": "2026-08-25T08:59:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.48,
      "modes": [
        "SSB"
      ],
      "submodes": [],
      "bands": [
        "80m"
      ],
      "bands_note": "Suggested frequencies SSB 3620-3670 kHz",
      "sponsor": "NZART",
      "rules_url": "https://nzart.org.nz/activities/contests/sprints/",
      "verified": true,
      "note": "One of three back-to-back 29-minute sprints on the same evening, each in a different mode and each scored separately, which is why they are three records here rather than one. Logs are due 'within 24 hours of the end of the sprint' -- shorter than a day, so no deadline interval is computed; they go to markzl3ab@gmail.com.",
      "exchange": "RS(T) and the outside temperature to the nearest degree",
      "country": "NZ",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-17",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "nzart-sprint-ssb-20260825T0830@contestcal",
      "start_date": "2026-08-25",
      "mode_families": [
        "SSB"
      ],
      "band_families": [
        "80m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "nzart-sprint-ft4",
      "name": "ZL Autumn and Winter Sprints, FT4",
      "start": "2026-08-25T09:00:00Z",
      "end": "2026-08-25T09:29:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.48,
      "modes": [
        "FT8/FT4"
      ],
      "submodes": [
        "FT4"
      ],
      "bands": [
        "80m"
      ],
      "bands_note": "Suggested frequency FT4 3575 kHz",
      "sponsor": "NZART",
      "rules_url": "https://nzart.org.nz/activities/contests/sprints/",
      "verified": true,
      "note": "One of three back-to-back 29-minute sprints on the same evening, each in a different mode and each scored separately, which is why they are three records here rather than one. Logs are due 'within 24 hours of the end of the sprint' -- shorter than a day, so no deadline interval is computed; they go to markzl3ab@gmail.com.",
      "exchange": "A four-digit Maidenhead grid-square locator",
      "country": "NZ",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-17",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "nzart-sprint-ft4-20260825T0900@contestcal",
      "start_date": "2026-08-25",
      "mode_families": [
        "Digital",
        "FT8/FT4"
      ],
      "band_families": [
        "80m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "skcc-sks",
      "name": "SKCC Straight Key Sprint (SKS)",
      "start": "2026-08-26T00:00:00Z",
      "end": "2026-08-26T02:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 2,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m",
        "6m"
      ],
      "bands_note": "Suggested frequencies, one per band",
      "sponsor": "Straight Key Century Club",
      "rules_url": "https://www.skccgroup.com/operating_activities/weekday_sprint/",
      "verified": true,
      "note": "",
      "exchange": "RST + QTH + name + SKCC number",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "skcc-sks-20260826T0000@contestcal",
      "start_date": "2026-08-26",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m",
        "6m"
      ],
      "duration_bucket": "2-12"
    },
    {
      "contest_id": "cwops-cwt",
      "name": "CWops Test (CWT)",
      "start": "2026-08-26T13:00:00Z",
      "end": "2026-08-26T14:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "CWops",
      "rules_url": "https://cwops.org/cwops-tests/",
      "verified": true,
      "note": "",
      "exchange": "Members: name + CWops number. Non-members: name + state/province/DX prefix.",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "cwops-cwt-20260826T1300@contestcal",
      "start_date": "2026-08-26",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "cwops-cwt",
      "name": "CWops Test (CWT)",
      "start": "2026-08-26T19:00:00Z",
      "end": "2026-08-26T20:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "CWops",
      "rules_url": "https://cwops.org/cwops-tests/",
      "verified": true,
      "note": "",
      "exchange": "Members: name + CWops number. Non-members: name + state/province/DX prefix.",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "cwops-cwt-20260826T1900@contestcal",
      "start_date": "2026-08-26",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "cwops-cwt",
      "name": "CWops Test (CWT)",
      "start": "2026-08-27T03:00:00Z",
      "end": "2026-08-27T04:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "CWops",
      "rules_url": "https://cwops.org/cwops-tests/",
      "verified": true,
      "note": "",
      "exchange": "Members: name + CWops number. Non-members: name + state/province/DX prefix.",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "cwops-cwt-20260827T0300@contestcal",
      "start_date": "2026-08-27",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "cwops-cwt",
      "name": "CWops Test (CWT)",
      "start": "2026-08-27T07:00:00Z",
      "end": "2026-08-27T08:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "CWops",
      "rules_url": "https://cwops.org/cwops-tests/",
      "verified": true,
      "note": "",
      "exchange": "Members: name + CWops number. Non-members: name + state/province/DX prefix.",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "cwops-cwt-20260827T0700@contestcal",
      "start_date": "2026-08-27",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "nccc-ns-ft4",
      "name": "NCCC FT4 Sprint (FT4 NS)",
      "start": "2026-08-28T01:00:00Z",
      "end": "2026-08-28T01:30:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.5,
      "modes": [
        "FT8/FT4"
      ],
      "submodes": [
        "FT4"
      ],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "Northern California Contest Club (NCCC)",
      "rules_url": "https://www.ncccsprint.com/ft4ns.html",
      "verified": true,
      "note": "NCCC describes these as 'nominal rules' that may be modified on a weekly basis, and runs formal Ladder seasons interspersed with practice weeks. The 30-minute session slot itself is fixed.",
      "exchange": "Grid square (following NA VHF, WW Digi and ARRL IDC practice)",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "nccc-ns-ft4-20260828T0100@contestcal",
      "start_date": "2026-08-28",
      "mode_families": [
        "Digital",
        "FT8/FT4"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "nccc-ns-rtty",
      "name": "NCCC RTTY Sprint (RTTY NS)",
      "start": "2026-08-28T01:45:00Z",
      "end": "2026-08-28T02:15:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.5,
      "modes": [
        "RTTY"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m"
      ],
      "bands_note": "",
      "sponsor": "Northern California Contest Club (NCCC)",
      "rules_url": "https://ncccsprint.com/rttyns.html",
      "verified": true,
      "note": "NCCC describes these as 'nominal rules' that may be modified on a weekly basis, and runs formal Ladder seasons interspersed with practice weeks. The 30-minute session slot itself is fixed.",
      "exchange": "Serial number + name + QTH (both callsigns required in the exchange)",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "nccc-ns-rtty-20260828T0145@contestcal",
      "start_date": "2026-08-28",
      "mode_families": [
        "RTTY",
        "Digital"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "nccc-ns-cw",
      "name": "NCCC Sprint (NS)",
      "start": "2026-08-28T02:30:00Z",
      "end": "2026-08-28T03:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.5,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m"
      ],
      "bands_note": "",
      "sponsor": "Northern California Contest Club (NCCC)",
      "rules_url": "https://ncccsprint.com/rules.html",
      "verified": true,
      "note": "NCCC describes these as 'nominal rules' that may be modified on a weekly basis, and runs formal Ladder seasons interspersed with practice weeks. The 30-minute session slot itself is fixed.",
      "exchange": "Serial number + name + QTH (both callsigns required in the exchange)",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "nccc-ns-cw-20260828T0230@contestcal",
      "start_date": "2026-08-28",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "k1usn-sst",
      "name": "K1USN Slow Speed Test (SST)",
      "start": "2026-08-28T20:00:00Z",
      "end": "2026-08-28T21:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "",
      "sponsor": "K1USN Radio Club",
      "rules_url": "https://www.k1usn.com/sst_rules.html",
      "verified": true,
      "note": "No formal log submission -- participants post scores to 3830scores.com.",
      "exchange": "Name + state/province/DX country",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "k1usn-sst-20260828T2000@contestcal",
      "start_date": "2026-08-28",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "ww-digi",
      "name": "World Wide Digi DX Contest",
      "start": "2026-08-29T12:00:00Z",
      "end": "2026-08-30T11:59:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 23.98,
      "modes": [
        "FT8/FT4"
      ],
      "submodes": [
        "FT4",
        "FT8"
      ],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "Six bands only: 1.8, 3.5, 7, 14, 21 and 28 MHz.",
      "sponsor": "WWROF / Slovenia Contest Club",
      "rules_url": "https://ww-digi.com/rules/",
      "verified": true,
      "note": "THE RECURRENCE IS THE SPONSOR'S OWN WORDS AND IT SURVIVES THE YEAR THAT TESTS IT. 'Last full weekend of August' and 'last Saturday of August' are different rules, and they diverge whenever 31 August is a Saturday -- the Sunday then falls in September, so that weekend is not full. 2024 was such a year. The sponsor's own 2024 rules PDF (ww-digi.com/rules/wwdigi24_eng.pdf) reads '2024 World Wide Digi DX Contest Starts: Saturday August 24 12:00:00 UTC Ends: Sunday August 25 11:59:59 UTC' -- the 24th, not the 31st. So the full-weekend reading is what WWROF actually runs, and nth_full_weekend with n = -1 is right.\n\nChecked against five dates the sponsor published itself: 24 Aug 2024, 29 Aug 2026, 28 Aug 2027, 26 Aug 2028 and 25 Aug 2029. All five are reproduced.\n\nTHE LOG DEADLINE CHANGED FOR 2026, from five days to 48 hours. The 2024 rules said 'WITHIN FIVE (5) DAYS'; the current rules say 'WITHIN 48 HOURS'. log_deadline_days is 2 and this note exists so a reader comparing against an older edition is not misled.\n\nALSO NEW AND WORTH READING BEFORE ENTERING: autonomous operation is prohibited. 'A human operator must initiate calling each QSO partner. Autonomous systems or robots that emulate this action are prohibited.' That is a rule about unattended FT8, which is how a lot of stations run this mode.",
      "exchange": "A four-character Maidenhead grid square.",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-21",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": "2026-09-01T11:59:00Z",
      "uid": "ww-digi-20260829T1200@contestcal",
      "start_date": "2026-08-29",
      "mode_families": [
        "Digital",
        "FT8/FT4"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "12-24"
    },
    {
      "contest_id": "k1usn-sst",
      "name": "K1USN Slow Speed Test (SST)",
      "start": "2026-08-31T00:00:00Z",
      "end": "2026-08-31T01:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "",
      "sponsor": "K1USN Radio Club",
      "rules_url": "https://www.k1usn.com/sst_rules.html",
      "verified": true,
      "note": "No formal log submission -- participants post scores to 3830scores.com.",
      "exchange": "Name + state/province/DX country",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "k1usn-sst-20260831T0000@contestcal",
      "start_date": "2026-08-31",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "agcw-zap-merit",
      "name": "AGCW ZAP Merit Contest (ZMC)",
      "start": "2026-08-31T17:40:00Z",
      "end": "2026-08-31T18:30:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.83,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "80m"
      ],
      "bands_note": "",
      "sponsor": "AGCW-DL",
      "rules_url": "https://www.agcw.de/contest/tzap/",
      "verified": false,
      "note": "PARTLY UNVERIFIED. The recurrence (every Monday), the 1740 UTC pre-logging opening and the 1800 UTC telegram transmission are all quoted from AGCW. AGCW publishes NO closing time. The 1830 end stored here is a PLACEHOLDER so the record expands -- it is not a sponsor fact and must not be presented as one. Confirm the session length with the ZMC manager before shipping. Points accumulate over a calendar year; logs are due 31 January of the following year.",
      "exchange": "Callsign + date + time + RST (SWLs log RST of both stations in a QSO)",
      "country": "DE",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-12",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "agcw-zap-merit-20260831T1740@contestcal",
      "start_date": "2026-08-31",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "80m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "cwops-cwt",
      "name": "CWops Test (CWT)",
      "start": "2026-09-02T13:00:00Z",
      "end": "2026-09-02T14:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "CWops",
      "rules_url": "https://cwops.org/cwops-tests/",
      "verified": true,
      "note": "",
      "exchange": "Members: name + CWops number. Non-members: name + state/province/DX prefix.",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "cwops-cwt-20260902T1300@contestcal",
      "start_date": "2026-09-02",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "cwops-cwt",
      "name": "CWops Test (CWT)",
      "start": "2026-09-02T19:00:00Z",
      "end": "2026-09-02T20:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "CWops",
      "rules_url": "https://cwops.org/cwops-tests/",
      "verified": true,
      "note": "",
      "exchange": "Members: name + CWops number. Non-members: name + state/province/DX prefix.",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "cwops-cwt-20260902T1900@contestcal",
      "start_date": "2026-09-02",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "cwops-cwt",
      "name": "CWops Test (CWT)",
      "start": "2026-09-03T03:00:00Z",
      "end": "2026-09-03T04:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "CWops",
      "rules_url": "https://cwops.org/cwops-tests/",
      "verified": true,
      "note": "",
      "exchange": "Members: name + CWops number. Non-members: name + state/province/DX prefix.",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "cwops-cwt-20260903T0300@contestcal",
      "start_date": "2026-09-03",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "cwops-cwt",
      "name": "CWops Test (CWT)",
      "start": "2026-09-03T07:00:00Z",
      "end": "2026-09-03T08:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "CWops",
      "rules_url": "https://cwops.org/cwops-tests/",
      "verified": true,
      "note": "",
      "exchange": "Members: name + CWops number. Non-members: name + state/province/DX prefix.",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "cwops-cwt-20260903T0700@contestcal",
      "start_date": "2026-09-03",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "skcc-skse",
      "name": "SKCC Straight Key Sprint Europe (SKSE)",
      "start": "2026-09-03T19:00:00Z",
      "end": "2026-09-03T21:00:00Z",
      "start_wall": "2026-09-03T21:00:00",
      "end_wall": "2026-09-03T23:00:00",
      "local_rolling": false,
      "timezone": "Europe/Berlin",
      "duration_hours": 2,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m",
        "6m"
      ],
      "bands_note": "160 through 6 m excluding the WARC bands -- SKCC names 60, 30, 17 and 12 m as excluded.",
      "sponsor": "Straight Key Century Club",
      "rules_url": "https://www.skccgroup.com/operating_activities/skse/",
      "verified": true,
      "note": "SKCC PRINTS TWO UTC TIMES AND THE CONTEST HAS ONE LOCAL TIME. 2000Z from November to March and 1900Z from April to October are both 2100 in central Europe: CET is UTC+1 and CEST is UTC+2. So this is not a contest that changes its hour twice a year, it is a contest at nine in the evening that Europe's clocks move around, and it is recorded the way the sponsor means it -- `timezone: Europe/Berlin` with wall_clock times, exactly as the ARS Spartan Sprint is recorded in New York.\n\nTHAT READING IS TESTABLE AND IT PASSES ON THE MONTHS THAT DECIDE IT. Europe changes clocks on the last Sunday of March and of October, and the first Thursday of both months falls on the near side of the change: March is still CET and resolves to 2000Z, April is CEST and resolves to 1900Z, October is still CEST at 1900Z, November is CET at 2000Z. All four match SKCC's own table, which is what makes this one rule rather than two.\n\nEncoding it as two records split by month -- winter and summer -- would have produced two entries with the same name and hidden the reason. Encoding one UTC time would have been wrong for five months of the year.\n\nStraight keys, sideswipers and bugs only: no keyer, no keyboard. That is the club's whole premise rather than a category.\n\nThe fifteen-minute QRS extensions at each end are not in the window: they are an invitation to slow operators rather than part of the scored period.",
      "exchange": "RST, QTH, the operator's name and the SKCC number. Non-members send 'none' for the number.",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-23",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": "2026-09-10T21:00:00Z",
      "uid": "skcc-skse-20260903T1900@contestcal",
      "start_date": "2026-09-03",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m",
        "6m"
      ],
      "duration_bucket": "2-12"
    },
    {
      "contest_id": "nccc-ns-ft4",
      "name": "NCCC FT4 Sprint (FT4 NS)",
      "start": "2026-09-04T01:00:00Z",
      "end": "2026-09-04T01:30:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.5,
      "modes": [
        "FT8/FT4"
      ],
      "submodes": [
        "FT4"
      ],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "Northern California Contest Club (NCCC)",
      "rules_url": "https://www.ncccsprint.com/ft4ns.html",
      "verified": true,
      "note": "NCCC describes these as 'nominal rules' that may be modified on a weekly basis, and runs formal Ladder seasons interspersed with practice weeks. The 30-minute session slot itself is fixed.",
      "exchange": "Grid square (following NA VHF, WW Digi and ARRL IDC practice)",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "nccc-ns-ft4-20260904T0100@contestcal",
      "start_date": "2026-09-04",
      "mode_families": [
        "Digital",
        "FT8/FT4"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "nccc-ns-rtty",
      "name": "NCCC RTTY Sprint (RTTY NS)",
      "start": "2026-09-04T01:45:00Z",
      "end": "2026-09-04T02:15:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.5,
      "modes": [
        "RTTY"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m"
      ],
      "bands_note": "",
      "sponsor": "Northern California Contest Club (NCCC)",
      "rules_url": "https://ncccsprint.com/rttyns.html",
      "verified": true,
      "note": "NCCC describes these as 'nominal rules' that may be modified on a weekly basis, and runs formal Ladder seasons interspersed with practice weeks. The 30-minute session slot itself is fixed.",
      "exchange": "Serial number + name + QTH (both callsigns required in the exchange)",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "nccc-ns-rtty-20260904T0145@contestcal",
      "start_date": "2026-09-04",
      "mode_families": [
        "RTTY",
        "Digital"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "nccc-ns-cw",
      "name": "NCCC Sprint (NS)",
      "start": "2026-09-04T02:30:00Z",
      "end": "2026-09-04T03:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.5,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m"
      ],
      "bands_note": "",
      "sponsor": "Northern California Contest Club (NCCC)",
      "rules_url": "https://ncccsprint.com/rules.html",
      "verified": true,
      "note": "NCCC describes these as 'nominal rules' that may be modified on a weekly basis, and runs formal Ladder seasons interspersed with practice weeks. The 30-minute session slot itself is fixed.",
      "exchange": "Serial number + name + QTH (both callsigns required in the exchange)",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "nccc-ns-cw-20260904T0230@contestcal",
      "start_date": "2026-09-04",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "k1usn-sst",
      "name": "K1USN Slow Speed Test (SST)",
      "start": "2026-09-04T20:00:00Z",
      "end": "2026-09-04T21:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "",
      "sponsor": "K1USN Radio Club",
      "rules_url": "https://www.k1usn.com/sst_rules.html",
      "verified": true,
      "note": "No formal log submission -- participants post scores to 3830scores.com.",
      "exchange": "Name + state/province/DX country",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "k1usn-sst-20260904T2000@contestcal",
      "start_date": "2026-09-04",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "jarl-aa-dx-phone",
      "name": "All Asian DX Contest, Phone",
      "start": "2026-09-05T00:00:00Z",
      "end": "2026-09-07T00:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 48,
      "modes": [
        "SSB"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "",
      "sponsor": "JARL",
      "rules_url": "https://www.jarl.org/English/4_Library/A-4-3_Contests/aadx_eng.html",
      "verified": true,
      "note": "",
      "exchange": "RS(T) and the operator's age. An operator who does not want to send an age sends 01. Multi-operator stations send the average age of the operators at the start of the contest.",
      "country": "JP",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-17",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "jarl-aa-dx-phone-20260905T0000@contestcal",
      "start_date": "2026-09-05",
      "mode_families": [
        "SSB"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "gte24"
    },
    {
      "contest_id": "cwops-cw-open",
      "name": "CWops CW Open",
      "start": "2026-09-05T00:00:00Z",
      "end": "2026-09-05T03:59:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 3.98,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "160, 80, 40, 20, 15 and 10 metres.",
      "sponsor": "CWops",
      "rules_url": "https://cwops.org/cwops-tests/cw-open/",
      "verified": false,
      "note": "THREE SEPARATE COMPETITIONS ON ONE DAY, not one twelve-hour contest with breaks -- CWops scores each session on its own, which is why this record uses the sessions array rather than a single window.\n\nMANUAL AND UNVERIFIED BECAUSE ONE PUBLISHED DATE IS NOT A RULE. September 5 2026 is the first Saturday of September, and that is an observation about one year rather than a recurrence CWops states. Fitting an ordinal to a single date is the mistake this catalog spends most of its effort not making. A second year's announcement settles it.",
      "exchange": "A serial number and your name.",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-21",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "cwops-cw-open-20260905T0000@contestcal",
      "start_date": "2026-09-05",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "2-12"
    },
    {
      "contest_id": "erau-es-ll-kv",
      "name": "Estonian HF Cup (ES LL KV)",
      "start": "2026-09-05T07:00:00Z",
      "end": "2026-09-05T07:59:00Z",
      "start_wall": "2026-09-05T10:00:00",
      "end_wall": "2026-09-05T10:59:00",
      "local_rolling": false,
      "timezone": "Europe/Tallinn",
      "duration_hours": 0.98,
      "modes": [
        "CW",
        "SSB"
      ],
      "submodes": [],
      "bands": [
        "80m"
      ],
      "bands_note": "CW below 3600 kHz and SSB above it; 3530-3560 kHz and 3600-3650 kHz are recommended.",
      "sponsor": "ERAU",
      "rules_url": "https://www.erau.ee/images/LL/ES%20LL%20KV%20reeglid.pdf",
      "verified": true,
      "note": "SPONSOR-ANCHORED LOCAL TIME, and ERAU's own calendar proves the reading: 10:00-10:59 Estonian time is 08:00-08:59 UTC in winter (EET) and 07:00-07:59 in summer (EEST), which is exactly the split ERAU prints across the nine stages. The rules give no date rule at all -- 4.2 defers to the calendar plan -- so the dates are manual and taken from ERAU's published 2026 calendar. Eight of the nine are the first Saturday of their month; February's is the second. The log deadline is 'the Thursday of the following week', which is not a fixed number of days from the end of each stage, so it is recorded here rather than as log_deadline_days. Stages 4.3 also splits each hour into four periods; that is a scoring device inside one continuous hour.",
      "exchange": "RS(T) and a continuous serial number from 001.",
      "country": "EE",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-19",
      "can_enter": false,
      "eligibility_scope": "entity_list",
      "eligibility_reason": "Entry limited to ES. K stations may be worked but cannot submit an entry.",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "erau-es-ll-kv-20260905T0700@contestcal",
      "start_date": "2026-09-05",
      "mode_families": [
        "CW",
        "SSB"
      ],
      "band_families": [
        "80m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "sarl-national-field-day",
      "name": "SARL National Field Day",
      "start": "2026-09-05T08:00:00Z",
      "end": "2026-09-06T10:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 26,
      "modes": [
        "SSB",
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "160, 80, 40, 20, 15 and 10 m, excluding the 60, 30, 17 and 12 m bands. The segments 7 100-7 130 and 3 651-3 699 kHz are contest free.",
      "sponsor": "SARL",
      "rules_url": "https://mysarl.org.za/wp-content/uploads/2025/11/2026-The-SARL-National-Field-Day-v1.1.pdf",
      "verified": true,
      "note": "Two legs a year off ONE record, because both share a start and end offset -- 0800 UTC Saturday to 1000 UTC Sunday -- and differ only in which weekend they anchor to. SARL states both readings itself, weekend AND date, and both agree for 2026. log_deadline_days is 5, which is the right DAY and not the right hour: SARL states 'by 21:59 UTC on Friday', and the contest ends at 10:00 UTC on the Sunday five days before, so the engine's derived log_due lands at 17:00 rather than 21:59. The day is exact in every year because both ends are tied to the same Sunday. The five hours are recorded here rather than papered over.",
      "exchange": "A contest-specific exchange; phone and CW on one band count as separate bands and a station may be worked once per band per mode.",
      "country": "ZA",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-19",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": "2026-09-11T10:00:00Z",
      "uid": "sarl-national-field-day-20260905T0800@contestcal",
      "start_date": "2026-09-05",
      "mode_families": [
        "CW",
        "SSB"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "gte24"
    },
    {
      "contest_id": "cwops-cw-open",
      "name": "CWops CW Open",
      "start": "2026-09-05T12:00:00Z",
      "end": "2026-09-05T15:59:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 3.98,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "160, 80, 40, 20, 15 and 10 metres.",
      "sponsor": "CWops",
      "rules_url": "https://cwops.org/cwops-tests/cw-open/",
      "verified": false,
      "note": "THREE SEPARATE COMPETITIONS ON ONE DAY, not one twelve-hour contest with breaks -- CWops scores each session on its own, which is why this record uses the sessions array rather than a single window.\n\nMANUAL AND UNVERIFIED BECAUSE ONE PUBLISHED DATE IS NOT A RULE. September 5 2026 is the first Saturday of September, and that is an observation about one year rather than a recurrence CWops states. Fitting an ordinal to a single date is the mistake this catalog spends most of its effort not making. A second year's announcement settles it.",
      "exchange": "A serial number and your name.",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-21",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "cwops-cw-open-20260905T1200@contestcal",
      "start_date": "2026-09-05",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "2-12"
    },
    {
      "contest_id": "agcw-htp-40m",
      "name": "AGCW Handtastenparty 40m (HTP)",
      "start": "2026-09-05T13:00:00Z",
      "end": "2026-09-05T16:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 3,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "40m"
      ],
      "bands_note": "",
      "sponsor": "AGCW-DL",
      "rules_url": "https://www.agcw.de/contest/htp/",
      "verified": true,
      "note": "",
      "exchange": "RST + running 3-digit QSO number from 001 + class + name + age",
      "country": "DE",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-12",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "agcw-htp-40m-20260905T1300@contestcal",
      "start_date": "2026-09-05",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "40m"
      ],
      "duration_bucket": "2-12"
    },
    {
      "contest_id": "irts-ssb-field-day",
      "name": "IRTS SSB Field Day",
      "start": "2026-09-05T13:00:00Z",
      "end": "2026-09-06T13:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 24,
      "modes": [
        "SSB"
      ],
      "submodes": [],
      "bands": [
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "3.5, 7, 14, 21 and 28 MHz -- no 160 m, unlike the CW field day.",
      "sponsor": "IRTS",
      "rules_url": "https://www.irts.ie/cgi/st.cgi?r_hffdrules.html",
      "verified": true,
      "note": "IT FALLS ON THE SAME WEEKEND AS RSGB'S, AND THAT IS NOT A COINCIDENCE. Both societies run their leg of the IARU Region 1 Field Day: RSGB's National Field Day is the first Saturday of June and IRTS's CW Field Day is the first full weekend, and the same pairing repeats in September. They are separate contests with separate rules, separate logs and separate results -- which is why both are here rather than one.\n\nThe pairing also settles what the IARU Region 1 Field Day IS: a framework each member society runs its own contest inside, not a contest IARU publishes rules for. DARC lists it on their calendar and says it is IARU's; UBA lists it too; IARU Region 1's own site publishes rules for the HF Championship and nothing else. Nobody claims it, so there is nothing to encode under IARU's name.\n\nENTRY IS EI ONLY AND PORTABLE ONLY: 'Any individual or group operating in EI complying with Rule 3.6 of the General Rules and operating portable on a site'. Stations elsewhere may be worked but cannot enter.\n\nTwo differences from the CW field day, both IRTS's own and both matching RSGB's pair exactly: it starts at 1300 rather than 1500, and it drops 160 m.",
      "exchange": "A signal report and a serial number starting at 001.",
      "country": "IE",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-23",
      "can_enter": false,
      "eligibility_scope": "entity_list",
      "eligibility_reason": "Entry limited to EI. K stations may be worked but cannot submit an entry.",
      "works": "everyone",
      "practical": "",
      "log_due": "2026-09-20T13:00:00Z",
      "uid": "irts-ssb-field-day-20260905T1300@contestcal",
      "start_date": "2026-09-05",
      "mode_families": [
        "SSB"
      ],
      "band_families": [
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "gte24"
    },
    {
      "contest_id": "rsgb-ssb-field-day",
      "name": "RSGB SSB Field Day",
      "start": "2026-09-05T13:00:00Z",
      "end": "2026-09-06T13:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 24,
      "modes": [
        "SSB"
      ],
      "submodes": [],
      "bands": [
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "80, 40, 20, 15 and 10 m, SSB only -- no 160 m, unlike the CW field day.",
      "sponsor": "RSGB Contest Committee",
      "rules_url": "https://www.rsgbcc.org/hf/rules/2026/rnfd.shtml",
      "verified": true,
      "note": "Two differences from the CW field day in June, both the sponsor's: it starts at 1300 rather than 1500, and it drops 160 m. Same rules page, same 24 hours. RSGB keeps a rules page per year, so its own dates check its own rule. Four years were read for this record -- 2023, 2024, 2025 and 2026 -- and the recurrence reproduces all of them.",
      "exchange": "RS(T) plus a serial number starting at 1 and incrementing by 1, irrespective of band.",
      "country": "GB",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-20",
      "can_enter": false,
      "eligibility_scope": "entity_list",
      "eligibility_reason": "Entry limited to G. K stations may be worked but cannot submit an entry.",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "rsgb-ssb-field-day-20260905T1300@contestcal",
      "start_date": "2026-09-05",
      "mode_families": [
        "SSB"
      ],
      "band_families": [
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "gte24"
    },
    {
      "contest_id": "uska-field-day-ssb",
      "name": "USKA Field Day (SSB)",
      "start": "2026-09-05T13:00:00Z",
      "end": "2026-09-06T12:59:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 23.98,
      "modes": [
        "SSB"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "",
      "sponsor": "USKA",
      "rules_url": "https://uska.ch/wp-content/uploads/2026/05/2026-02-Reglement-fuer-den-Field-Day-Ausgabe-Mai-2026-DE.pdf",
      "verified": true,
      "note": "One of USKA's two Field Day legs; they share a Reglement and differ only in month, mode and start time, so they are two records. The first full weekend of June 2026 is 6-7 June and of September 2026 is 5-6 September, both of which USKA's KW-Contest page prints.",
      "exchange": "RS(T) and a serial number of at least three digits. With fixed stations the report alone is enough.",
      "country": "CH",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-19",
      "can_enter": false,
      "eligibility_scope": "entity_list",
      "eligibility_reason": "Entry limited to HB. K stations may be worked but cannot submit an entry.",
      "works": "everyone",
      "practical": "",
      "log_due": "2026-09-14T12:59:00Z",
      "uid": "uska-field-day-ssb-20260905T1300@contestcal",
      "start_date": "2026-09-05",
      "mode_families": [
        "SSB"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "12-24"
    },
    {
      "contest_id": "cwops-cw-open",
      "name": "CWops CW Open",
      "start": "2026-09-05T20:00:00Z",
      "end": "2026-09-05T23:59:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 3.98,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "160, 80, 40, 20, 15 and 10 metres.",
      "sponsor": "CWops",
      "rules_url": "https://cwops.org/cwops-tests/cw-open/",
      "verified": false,
      "note": "THREE SEPARATE COMPETITIONS ON ONE DAY, not one twelve-hour contest with breaks -- CWops scores each session on its own, which is why this record uses the sessions array rather than a single window.\n\nMANUAL AND UNVERIFIED BECAUSE ONE PUBLISHED DATE IS NOT A RULE. September 5 2026 is the first Saturday of September, and that is an observation about one year rather than a recurrence CWops states. Fitting an ordinal to a single date is the mistake this catalog spends most of its effort not making. A second year's announcement settles it.",
      "exchange": "A serial number and your name.",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-21",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "cwops-cw-open-20260905T2000@contestcal",
      "start_date": "2026-09-05",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "2-12"
    },
    {
      "contest_id": "podxs-jay-hudak-80m",
      "name": "PODXS 070 Club Jay Hudak Memorial 80M Sprint",
      "start": "2026-09-05T20:00:00Z",
      "end": "2026-09-06T19:59:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 23.98,
      "modes": [
        "Digital"
      ],
      "submodes": [
        "PSK31"
      ],
      "bands": [
        "80m"
      ],
      "bands_note": "",
      "sponsor": "PODXS 070 Club",
      "rules_url": "https://www.podxs070.com/o7o-club-sponsored-contests/jay-hudak-memorial-80m-sprint",
      "verified": true,
      "note": "Six-hour operating limit inside a 24-hour window. Dedicated to Jay Hudak KA3X, 070 #001.",
      "exchange": "State/province/country (SPC)",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-12",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": "2026-09-13T19:59:00Z",
      "uid": "podxs-jay-hudak-80m-20260905T2000@contestcal",
      "start_date": "2026-09-05",
      "mode_families": [
        "Digital"
      ],
      "band_families": [
        "80m"
      ],
      "duration_bucket": "12-24"
    },
    {
      "contest_id": "k1usn-sst",
      "name": "K1USN Slow Speed Test (SST)",
      "start": "2026-09-07T00:00:00Z",
      "end": "2026-09-07T01:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "",
      "sponsor": "K1USN Radio Club",
      "rules_url": "https://www.k1usn.com/sst_rules.html",
      "verified": true,
      "note": "No formal log submission -- participants post scores to 3830scores.com.",
      "exchange": "Name + state/province/DX country",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "k1usn-sst-20260907T0000@contestcal",
      "start_date": "2026-09-07",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "agcw-zap-merit",
      "name": "AGCW ZAP Merit Contest (ZMC)",
      "start": "2026-09-07T17:40:00Z",
      "end": "2026-09-07T18:30:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.83,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "80m"
      ],
      "bands_note": "",
      "sponsor": "AGCW-DL",
      "rules_url": "https://www.agcw.de/contest/tzap/",
      "verified": false,
      "note": "PARTLY UNVERIFIED. The recurrence (every Monday), the 1740 UTC pre-logging opening and the 1800 UTC telegram transmission are all quoted from AGCW. AGCW publishes NO closing time. The 1830 end stored here is a PLACEHOLDER so the record expands -- it is not a sponsor fact and must not be presented as one. Confirm the session length with the ZMC manager before shipping. Points accumulate over a calendar year; logs are due 31 January of the following year.",
      "exchange": "Callsign + date + time + RST (SWLs log RST of both stations in a QSO)",
      "country": "DE",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-12",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "agcw-zap-merit-20260907T1740@contestcal",
      "start_date": "2026-09-07",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "80m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "rsgb-autumn-ssb",
      "name": "RSGB 3.5 MHz Autumn Series, SSB",
      "start": "2026-09-07T19:00:00Z",
      "end": "2026-09-07T20:30:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1.5,
      "modes": [
        "SSB"
      ],
      "submodes": [],
      "bands": [
        "80m"
      ],
      "bands_note": "3600-3775 kHz.",
      "sponsor": "RSGB Contest Committee",
      "rules_url": "https://www.rsgbcc.org/hf/rules/2026/rautumn.shtml",
      "verified": true,
      "note": "THE CLOCK MOVES IN NOVEMBER AND THE RECORD SAYS SO PER DATE. September and October run 1900-2030 UTC; November runs 2000-2130. Every leg of this series sits on one side or the other of that change, so a single stored time would put two of the three runnings on the calendar an hour wrong.\n\nThis is the first use of PER-DATE TIMES in a manual rule, a schema question NEEDS_A_HUMAN had been carrying since the REP FT4 series hit the same wall. The alternative was one record per clock time -- six records for a nine-leg series the sponsor treats as one -- or one record per leg, which is nine. Splitting by MODE is the split a reader actually wants, because the mode filter is what they reach for, and per-date times are what make that split possible without lying about an hour.\n\nMANUAL BECAUSE RSGB PUBLISHES DATES AND NO RULE for this series. The legs fall on Mondays, Wednesdays and Thursdays with no discernible ordinal, which is exactly the shape an ordinal must not be fitted to.\n\nNON-UK STATIONS MAY ENTER AS INDIVIDUALS -- RSGB states it outright, which is worth noting beside the AFS and Club Calls contests where entry really is UK&CD only.",
      "exchange": "RS(T) plus a serial number starting at 1 and incrementing by 1.",
      "country": "GB",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-23",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": "2026-09-10T20:30:00Z",
      "uid": "rsgb-autumn-ssb-20260907T1900@contestcal",
      "start_date": "2026-09-07",
      "mode_families": [
        "SSB"
      ],
      "band_families": [
        "80m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "ars-spartan-sprint",
      "name": "ARS Spartan Sprint",
      "start": "2026-09-08T00:00:00Z",
      "end": "2026-09-08T02:00:00Z",
      "start_wall": "2026-09-07T20:00:00",
      "end_wall": "2026-09-07T22:00:00",
      "local_rolling": false,
      "timezone": "America/New_York",
      "duration_hours": 2,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "",
      "sponsor": "Adventure Radio Society",
      "rules_url": "https://ars-qrp.com/Spartan_Sprint/Spartan_Sprint.html",
      "verified": true,
      "note": "CORRECTION (anchor): previously encoded as the first TUESDAY of the month. The sponsor's rule is the first MONDAY US local, which lands on Tuesday UTC -- and those are different dates whenever the 1st falls on a Tuesday (Sep and Dec 2026). SPONSOR-ANCHORED LOCAL TIME: ARS publishes no UTC time and states the event 'is always at these Local Times', so the UTC instant is what moves -- 0100Z Tuesday under EST, 0000Z Tuesday under EDT. Resolved through America/New_York rather than hardcoded, so DST is handled. ARS lists Eastern, Central, Mountain and Pacific times that are the same instant in every zone that observes DST; Arizona, which does not, is the one place the sponsor's own table is inconsistent.",
      "exchange": "RST + state/province + power output",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "ars-spartan-sprint-20260908T0000@contestcal",
      "start_date": "2026-09-08",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "2-12"
    },
    {
      "contest_id": "darc-cw-ausbildungscontest",
      "name": "DARC CW-Ausbildungscontest",
      "start": "2026-09-08T18:00:00Z",
      "end": "2026-09-08T18:59:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.98,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [],
      "bands_note": "",
      "sponsor": "DARC",
      "rules_url": "https://www.darc.de/der-club/referate/conteste/cwa/darc-cw-ausbildungscontest/",
      "verified": false,
      "note": "IT COMPLETES A PATTERN DARC DESCRIBES BUT DOES NOT SPELL OUT. Their three short contests take one month of each quarter in turn, all on a Tuesday evening: the RTTY-Kurzcontest in months 1/4/7/10, the FT4 Contest in 2/5/8/11, and this one in 3/6/9/12. All four of DARC's published dates are the SECOND TUESDAY of those months. That is what 'reiht sich vom Termin her in die anderen ... ein' means, and the arithmetic confirms it rather than assuming it.\n\nVERIFIED FALSE because the page that describes the series is prose about teaching CW rather than an Ausschreibung: no bands, no exchange, no deadline. BANDS ARE UNRECORDED, so every band filter excludes this record.\n\nWHERE THE BANDS WOULD HAVE BEEN: Not stated on the page that describes the series. That sentence sits here rather than in bands_note, because bands_note is for a sponsor's own wording ABOUT a band list and must never stand in for one -- a test enforces it, and it caught this.",
      "exchange": "",
      "country": "DE",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-23",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "darc-cw-ausbildungscontest-20260908T1800@contestcal",
      "start_date": "2026-09-08",
      "mode_families": [
        "CW"
      ],
      "band_families": [],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "cwops-cwt",
      "name": "CWops Test (CWT)",
      "start": "2026-09-09T13:00:00Z",
      "end": "2026-09-09T14:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "CWops",
      "rules_url": "https://cwops.org/cwops-tests/",
      "verified": true,
      "note": "",
      "exchange": "Members: name + CWops number. Non-members: name + state/province/DX prefix.",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "cwops-cwt-20260909T1300@contestcal",
      "start_date": "2026-09-09",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "cwops-cwt",
      "name": "CWops Test (CWT)",
      "start": "2026-09-09T19:00:00Z",
      "end": "2026-09-09T20:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "CWops",
      "rules_url": "https://cwops.org/cwops-tests/",
      "verified": true,
      "note": "",
      "exchange": "Members: name + CWops number. Non-members: name + state/province/DX prefix.",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "cwops-cwt-20260909T1900@contestcal",
      "start_date": "2026-09-09",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "cwops-cwt",
      "name": "CWops Test (CWT)",
      "start": "2026-09-10T03:00:00Z",
      "end": "2026-09-10T04:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "CWops",
      "rules_url": "https://cwops.org/cwops-tests/",
      "verified": true,
      "note": "",
      "exchange": "Members: name + CWops number. Non-members: name + state/province/DX prefix.",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "cwops-cwt-20260910T0300@contestcal",
      "start_date": "2026-09-10",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "cwops-cwt",
      "name": "CWops Test (CWT)",
      "start": "2026-09-10T07:00:00Z",
      "end": "2026-09-10T08:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "CWops",
      "rules_url": "https://cwops.org/cwops-tests/",
      "verified": true,
      "note": "",
      "exchange": "Members: name + CWops number. Non-members: name + state/province/DX prefix.",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "cwops-cwt-20260910T0700@contestcal",
      "start_date": "2026-09-10",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "nccc-ns-ft4",
      "name": "NCCC FT4 Sprint (FT4 NS)",
      "start": "2026-09-11T01:00:00Z",
      "end": "2026-09-11T01:30:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.5,
      "modes": [
        "FT8/FT4"
      ],
      "submodes": [
        "FT4"
      ],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "Northern California Contest Club (NCCC)",
      "rules_url": "https://www.ncccsprint.com/ft4ns.html",
      "verified": true,
      "note": "NCCC describes these as 'nominal rules' that may be modified on a weekly basis, and runs formal Ladder seasons interspersed with practice weeks. The 30-minute session slot itself is fixed.",
      "exchange": "Grid square (following NA VHF, WW Digi and ARRL IDC practice)",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "nccc-ns-ft4-20260911T0100@contestcal",
      "start_date": "2026-09-11",
      "mode_families": [
        "Digital",
        "FT8/FT4"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "nccc-ns-rtty",
      "name": "NCCC RTTY Sprint (RTTY NS)",
      "start": "2026-09-11T01:45:00Z",
      "end": "2026-09-11T02:15:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.5,
      "modes": [
        "RTTY"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m"
      ],
      "bands_note": "",
      "sponsor": "Northern California Contest Club (NCCC)",
      "rules_url": "https://ncccsprint.com/rttyns.html",
      "verified": true,
      "note": "NCCC describes these as 'nominal rules' that may be modified on a weekly basis, and runs formal Ladder seasons interspersed with practice weeks. The 30-minute session slot itself is fixed.",
      "exchange": "Serial number + name + QTH (both callsigns required in the exchange)",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "nccc-ns-rtty-20260911T0145@contestcal",
      "start_date": "2026-09-11",
      "mode_families": [
        "RTTY",
        "Digital"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "nccc-ns-cw",
      "name": "NCCC Sprint (NS)",
      "start": "2026-09-11T02:30:00Z",
      "end": "2026-09-11T03:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.5,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m"
      ],
      "bands_note": "",
      "sponsor": "Northern California Contest Club (NCCC)",
      "rules_url": "https://ncccsprint.com/rules.html",
      "verified": true,
      "note": "NCCC describes these as 'nominal rules' that may be modified on a weekly basis, and runs formal Ladder seasons interspersed with practice weeks. The 30-minute session slot itself is fixed.",
      "exchange": "Serial number + name + QTH (both callsigns required in the exchange)",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "nccc-ns-cw-20260911T0230@contestcal",
      "start_date": "2026-09-11",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "k1usn-sst",
      "name": "K1USN Slow Speed Test (SST)",
      "start": "2026-09-11T20:00:00Z",
      "end": "2026-09-11T21:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "",
      "sponsor": "K1USN Radio Club",
      "rules_url": "https://www.k1usn.com/sst_rules.html",
      "verified": true,
      "note": "No formal log submission -- participants post scores to 3830scores.com.",
      "exchange": "Name + state/province/DX country",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "k1usn-sst-20260911T2000@contestcal",
      "start_date": "2026-09-11",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "wae-dx-ssb",
      "name": "WAE DX Contest SSB",
      "start": "2026-09-12T00:00:00Z",
      "end": "2026-09-13T23:59:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 47.98,
      "modes": [
        "SSB"
      ],
      "submodes": [],
      "bands": [
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "",
      "sponsor": "DARC",
      "rules_url": "https://www.darc.de/der-club/referate/conteste/wae-dx-contest/regeln/",
      "verified": true,
      "note": "",
      "exchange": "RS/RST + serial from 001. QTC traffic scores additional points: a QSO already logged is reported back to a European station as time, callsign and serial, at most 10 between any two stations, and each correctly passed QTC counts a point to both ends.",
      "country": "DE",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-18",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": "2026-09-20T23:59:00Z",
      "uid": "wae-dx-ssb-20260912T0000@contestcal",
      "start_date": "2026-09-12",
      "mode_families": [
        "SSB"
      ],
      "band_families": [
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "gte24"
    },
    {
      "contest_id": "skcc-wes",
      "name": "SKCC Weekend Sprintathon (WES)",
      "start": "2026-09-12T12:00:00Z",
      "end": "2026-09-13T23:59:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 35.98,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "Straight Key Century Club",
      "rules_url": "https://www.skccgroup.com/operating_activities/weekend_sprintathon/",
      "verified": true,
      "note": "Older sources describe the anchor as 'the Saturday following the 6th', which differs from '2nd Saturday' in some months. SKCC's current page says 2nd Saturday; re-check if dates drift.",
      "exchange": "RST + state/province/country + name + SKCC number (C/T/S suffix for award holders)",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "skcc-wes-20260912T1200@contestcal",
      "start_date": "2026-09-12",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m",
        "6m"
      ],
      "duration_bucket": "gte24"
    },
    {
      "contest_id": "sarl-africa-ft4",
      "name": "Africa FT4 DX Contest",
      "start": "2026-09-12T15:00:00Z",
      "end": "2026-09-12T18:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 3,
      "modes": [
        "FT8/FT4"
      ],
      "submodes": [
        "FT4"
      ],
      "bands": [
        "80m",
        "40m",
        "20m"
      ],
      "bands_note": "80m, 40m and 20m; recommended dial frequencies 3576 kHz, 7047.5 kHz and 14080 kHz (USB), the WSJT-X FT4 defaults.",
      "sponsor": "SARL",
      "rules_url": "https://mysarl.org.za/wp-content/uploads/2025/11/2026-Africa-FT4-DX-Contest-v1.1.pdf",
      "verified": true,
      "note": "Two legs off one record: both run 15:00-18:00 UTC and differ only in which second Saturday they anchor to. Power is capped at 100 W for everyone, so it is recorded as the single power category rather than as a set of entry classes. No log deadline is stated in the contest's own rules section.",
      "exchange": "A signal report and the four-digit Maidenhead grid locator, using the FT4 mode.",
      "country": "ZA",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-19",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "sarl-africa-ft4-20260912T1500@contestcal",
      "start_date": "2026-09-12",
      "mode_families": [
        "Digital",
        "FT8/FT4"
      ],
      "band_families": [
        "80m",
        "40m",
        "20m"
      ],
      "duration_bucket": "2-12"
    },
    {
      "contest_id": "arrl-september-vhf",
      "name": "ARRL September VHF Contest",
      "start": "2026-09-12T18:00:00Z",
      "end": "2026-09-14T02:59:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 32.98,
      "modes": [
        "Mixed"
      ],
      "submodes": [],
      "bands": [
        "6m",
        "2m",
        "1.25m",
        "70cm",
        "33cm",
        "23cm",
        "13cm",
        "3cm"
      ],
      "bands_note": "All authorized frequencies above 50 MHz",
      "sponsor": "ARRL",
      "rules_url": "http://www.arrl.org/september-vhf",
      "verified": true,
      "note": "",
      "exchange": "",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-21",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "VHF+ contest.",
      "log_due": null,
      "uid": "arrl-september-vhf-20260912T1800@contestcal",
      "start_date": "2026-09-12",
      "mode_families": [
        "CW",
        "SSB",
        "FM",
        "RTTY",
        "Digital",
        "FT8/FT4",
        "Mixed"
      ],
      "band_families": [
        "6m",
        "VHF+"
      ],
      "duration_bucket": "gte24"
    },
    {
      "contest_id": "ncj-sprint-cw",
      "name": "North American Sprint, CW",
      "start": "2026-09-13T00:00:00Z",
      "end": "2026-09-13T03:59:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 3.98,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "80m",
        "40m",
        "20m"
      ],
      "bands_note": "",
      "sponsor": "National Contest Journal (NCJ)",
      "rules_url": "https://www.ncjweb.com/Sprint-Rules.pdf",
      "verified": true,
      "note": "Encoded as 'manual' deliberately. NCJ publishes explicit dates per year and flagged 2026 September with 'NOTE CW DATE SHIFT', so there is no stable derivable recurrence to encode. 2026 happens to land on the 2nd Sunday of February and the 2nd Sunday of September, but that pattern is NOT a rule NCJ states -- re-read the rules PDF each year.",
      "exchange": "Other station's call + your call + serial number + name + state/province/country ('DX' outside North America)",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": "2026-09-20T03:59:00Z",
      "uid": "ncj-sprint-cw-20260913T0000@contestcal",
      "start_date": "2026-09-13",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "80m",
        "40m",
        "20m"
      ],
      "duration_bucket": "2-12"
    },
    {
      "contest_id": "4sqrp-sss",
      "name": "4 States QRP Group Second Sunday Sprint (SSS)",
      "start": "2026-09-14T00:00:00Z",
      "end": "2026-09-14T02:00:00Z",
      "start_wall": "2026-09-13T19:00:00",
      "end_wall": "2026-09-13T21:00:00",
      "local_rolling": false,
      "timezone": "America/Chicago",
      "duration_hours": 2,
      "modes": [
        "CW",
        "SSB",
        "Digital"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "",
      "sponsor": "4 States QRP Group",
      "rules_url": "https://www.4sqrp.com/SSS/sss_rules_revised_02_2026.pdf",
      "verified": true,
      "note": "SPONSOR-ANCHORED LOCAL TIME. The anchor is the second SUNDAY and the sprint runs into Monday UTC. 4SQRP states the consequence itself: '7 PM until 9 PM central time (CST or CDT, whichever is in effect at the time). If you use UTC, that time changes when we switch from CST to CDT (or vice versa).' Resolved through America/Chicago, so it is 0100Z Monday in winter and 0000Z Monday in summer.",
      "exchange": "RST + state/province/country + 4SQRP member number (power if non-member)",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "4sqrp-sss-20260914T0000@contestcal",
      "start_date": "2026-09-14",
      "mode_families": [
        "CW",
        "SSB",
        "Digital"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "2-12"
    },
    {
      "contest_id": "k1usn-sst",
      "name": "K1USN Slow Speed Test (SST)",
      "start": "2026-09-14T00:00:00Z",
      "end": "2026-09-14T01:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "",
      "sponsor": "K1USN Radio Club",
      "rules_url": "https://www.k1usn.com/sst_rules.html",
      "verified": true,
      "note": "No formal log submission -- participants post scores to 3830scores.com.",
      "exchange": "Name + state/province/DX country",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "k1usn-sst-20260914T0000@contestcal",
      "start_date": "2026-09-14",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "agcw-zap-merit",
      "name": "AGCW ZAP Merit Contest (ZMC)",
      "start": "2026-09-14T17:40:00Z",
      "end": "2026-09-14T18:30:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.83,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "80m"
      ],
      "bands_note": "",
      "sponsor": "AGCW-DL",
      "rules_url": "https://www.agcw.de/contest/tzap/",
      "verified": false,
      "note": "PARTLY UNVERIFIED. The recurrence (every Monday), the 1740 UTC pre-logging opening and the 1800 UTC telegram transmission are all quoted from AGCW. AGCW publishes NO closing time. The 1830 end stored here is a PLACEHOLDER so the record expands -- it is not a sponsor fact and must not be presented as one. Confirm the session length with the ZMC manager before shipping. Points accumulate over a calendar year; logs are due 31 January of the following year.",
      "exchange": "Callsign + date + time + RST (SWLs log RST of both stations in a QSO)",
      "country": "DE",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-12",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "agcw-zap-merit-20260914T1740@contestcal",
      "start_date": "2026-09-14",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "80m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "sarl-equinox-6m-september",
      "name": "SARL Equinox 6m African DX Entity Challenge (September)",
      "start": "2026-09-16T00:01:00Z",
      "end": "2026-10-15T23:59:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 719.97,
      "modes": [
        "FT8/FT4"
      ],
      "submodes": [
        "FT8"
      ],
      "bands": [
        "6m"
      ],
      "bands_note": "",
      "sponsor": "SARL",
      "rules_url": "https://mysarl.org.za/wp-content/uploads/2025/11/2026-SARL-Equinox-6m-African-DX-Entity-Challenge-v1.1.pdf",
      "verified": true,
      "note": "A month-long challenge rather than a weekend contest, which is why it is the longest single occurrence in the catalog. 16 September to 15 October is 29 days. The two legs are separate records because their end offsets differ -- the March leg runs 30 days and the September leg 29 -- and one record carries one start/end pair. SARL's own calendar marks each leg with a start and an end event rather than one long block, and those markers confirm both instants.",
      "exchange": "Signal reports; contacts must be two-way point to point.",
      "country": "ZA",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-19",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "sarl-equinox-6m-september-20260916T0001@contestcal",
      "start_date": "2026-09-16",
      "mode_families": [
        "Digital",
        "FT8/FT4"
      ],
      "band_families": [
        "6m"
      ],
      "duration_bucket": "gte24"
    },
    {
      "contest_id": "cwops-cwt",
      "name": "CWops Test (CWT)",
      "start": "2026-09-16T13:00:00Z",
      "end": "2026-09-16T14:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "CWops",
      "rules_url": "https://cwops.org/cwops-tests/",
      "verified": true,
      "note": "",
      "exchange": "Members: name + CWops number. Non-members: name + state/province/DX prefix.",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "cwops-cwt-20260916T1300@contestcal",
      "start_date": "2026-09-16",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "cwops-cwt",
      "name": "CWops Test (CWT)",
      "start": "2026-09-16T19:00:00Z",
      "end": "2026-09-16T20:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "CWops",
      "rules_url": "https://cwops.org/cwops-tests/",
      "verified": true,
      "note": "",
      "exchange": "Members: name + CWops number. Non-members: name + state/province/DX prefix.",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "cwops-cwt-20260916T1900@contestcal",
      "start_date": "2026-09-16",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "rsgb-autumn-cw",
      "name": "RSGB 3.5 MHz Autumn Series, CW",
      "start": "2026-09-16T19:00:00Z",
      "end": "2026-09-16T20:30:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1.5,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "80m"
      ],
      "bands_note": "3510-3565 kHz at any speed, with 3565-3570 kHz reserved for 15 wpm maximum.",
      "sponsor": "RSGB Contest Committee",
      "rules_url": "https://www.rsgbcc.org/hf/rules/2026/rautumn.shtml",
      "verified": true,
      "note": "THE CLOCK MOVES IN NOVEMBER AND THE RECORD SAYS SO PER DATE. September and October run 1900-2030 UTC; November runs 2000-2130. Every leg of this series sits on one side or the other of that change, so a single stored time would put two of the three runnings on the calendar an hour wrong.\n\nThis is the first use of PER-DATE TIMES in a manual rule, a schema question NEEDS_A_HUMAN had been carrying since the REP FT4 series hit the same wall. The alternative was one record per clock time -- six records for a nine-leg series the sponsor treats as one -- or one record per leg, which is nine. Splitting by MODE is the split a reader actually wants, because the mode filter is what they reach for, and per-date times are what make that split possible without lying about an hour.\n\nMANUAL BECAUSE RSGB PUBLISHES DATES AND NO RULE for this series. The legs fall on Mondays, Wednesdays and Thursdays with no discernible ordinal, which is exactly the shape an ordinal must not be fitted to.\n\nNON-UK STATIONS MAY ENTER AS INDIVIDUALS -- RSGB states it outright, which is worth noting beside the AFS and Club Calls contests where entry really is UK&CD only.",
      "exchange": "RS(T) plus a serial number starting at 1 and incrementing by 1.",
      "country": "GB",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-23",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": "2026-09-19T20:30:00Z",
      "uid": "rsgb-autumn-cw-20260916T1900@contestcal",
      "start_date": "2026-09-16",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "80m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "cwops-cwt",
      "name": "CWops Test (CWT)",
      "start": "2026-09-17T03:00:00Z",
      "end": "2026-09-17T04:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "CWops",
      "rules_url": "https://cwops.org/cwops-tests/",
      "verified": true,
      "note": "",
      "exchange": "Members: name + CWops number. Non-members: name + state/province/DX prefix.",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "cwops-cwt-20260917T0300@contestcal",
      "start_date": "2026-09-17",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "cwops-cwt",
      "name": "CWops Test (CWT)",
      "start": "2026-09-17T07:00:00Z",
      "end": "2026-09-17T08:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "CWops",
      "rules_url": "https://cwops.org/cwops-tests/",
      "verified": true,
      "note": "",
      "exchange": "Members: name + CWops number. Non-members: name + state/province/DX prefix.",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "cwops-cwt-20260917T0700@contestcal",
      "start_date": "2026-09-17",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "nccc-ns-ft4",
      "name": "NCCC FT4 Sprint (FT4 NS)",
      "start": "2026-09-18T01:00:00Z",
      "end": "2026-09-18T01:30:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.5,
      "modes": [
        "FT8/FT4"
      ],
      "submodes": [
        "FT4"
      ],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "Northern California Contest Club (NCCC)",
      "rules_url": "https://www.ncccsprint.com/ft4ns.html",
      "verified": true,
      "note": "NCCC describes these as 'nominal rules' that may be modified on a weekly basis, and runs formal Ladder seasons interspersed with practice weeks. The 30-minute session slot itself is fixed.",
      "exchange": "Grid square (following NA VHF, WW Digi and ARRL IDC practice)",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "nccc-ns-ft4-20260918T0100@contestcal",
      "start_date": "2026-09-18",
      "mode_families": [
        "Digital",
        "FT8/FT4"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "nccc-ns-rtty",
      "name": "NCCC RTTY Sprint (RTTY NS)",
      "start": "2026-09-18T01:45:00Z",
      "end": "2026-09-18T02:15:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.5,
      "modes": [
        "RTTY"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m"
      ],
      "bands_note": "",
      "sponsor": "Northern California Contest Club (NCCC)",
      "rules_url": "https://ncccsprint.com/rttyns.html",
      "verified": true,
      "note": "NCCC describes these as 'nominal rules' that may be modified on a weekly basis, and runs formal Ladder seasons interspersed with practice weeks. The 30-minute session slot itself is fixed.",
      "exchange": "Serial number + name + QTH (both callsigns required in the exchange)",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "nccc-ns-rtty-20260918T0145@contestcal",
      "start_date": "2026-09-18",
      "mode_families": [
        "RTTY",
        "Digital"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "nccc-ns-cw",
      "name": "NCCC Sprint (NS)",
      "start": "2026-09-18T02:30:00Z",
      "end": "2026-09-18T03:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.5,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m"
      ],
      "bands_note": "",
      "sponsor": "Northern California Contest Club (NCCC)",
      "rules_url": "https://ncccsprint.com/rules.html",
      "verified": true,
      "note": "NCCC describes these as 'nominal rules' that may be modified on a weekly basis, and runs formal Ladder seasons interspersed with practice weeks. The 30-minute session slot itself is fixed.",
      "exchange": "Serial number + name + QTH (both callsigns required in the exchange)",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "nccc-ns-cw-20260918T0230@contestcal",
      "start_date": "2026-09-18",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "k1usn-sst",
      "name": "K1USN Slow Speed Test (SST)",
      "start": "2026-09-18T20:00:00Z",
      "end": "2026-09-18T21:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "",
      "sponsor": "K1USN Radio Club",
      "rules_url": "https://www.k1usn.com/sst_rules.html",
      "verified": true,
      "note": "No formal log submission -- participants post scores to 3830scores.com.",
      "exchange": "Name + state/province/DX country",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "k1usn-sst-20260918T2000@contestcal",
      "start_date": "2026-09-18",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "zs-sota-activity-weekend",
      "name": "ZS SOTA Activity Weekend",
      "start": "2026-09-19T00:00:00Z",
      "end": "2026-09-20T21:59:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 45.98,
      "modes": [
        "Mixed"
      ],
      "submodes": [],
      "bands": [],
      "bands_note": "",
      "sponsor": "SOTA SA",
      "rules_url": "https://mysarl.org.za/wp-content/uploads/2025/12/2026-SARL-Contest-Manual-Version-1.1-2025-12-15.pdf",
      "verified": true,
      "note": "THE CATALOG'S SECOND RECORD WITH NO BANDS, AND THE SECOND FOR A GOOD REASON. SARL states '2. Frequencies and modes All amateur bands and modes' -- there is no list to record, and writing one out would be this catalog inventing a restriction SARL did not state. Same treatment as JARL's New Year QSO Party. The consequence is real and the page says so: every band filter necessarily excludes this record.\n\nModes are 'Mixed' for the same sentence -- that is exactly what the token means.\n\nIt sits at the edge of what this catalog is for. It has dates, rules, an exchange and categories, so it is a scheduled operating event with a schedule worth publishing; but it is scored through the SOTA database rather than by a log submitted to the sponsor, and 'Activator' and 'Chaser' are roles rather than entry classes. Encoded on the same reasoning as UBA's Belgian Mills Award, which is also an award-shaped event with real dates. Sourced from the SARL Contest Manual, which carries this contest's full rules and names its organising body -- the venue in which South African clubs publish their rules, not a listing of them. See data/sources.md, 'Nine South African clubs, one manual'.",
      "exchange": "An RS, RST or RSQ report and the SOTA reference.",
      "country": "ZA",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-19",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "zs-sota-activity-weekend-20260919T0000@contestcal",
      "start_date": "2026-09-19",
      "mode_families": [
        "CW",
        "SSB",
        "FM",
        "RTTY",
        "Digital",
        "FT8/FT4",
        "Mixed"
      ],
      "band_families": [],
      "duration_bucket": "gte24"
    },
    {
      "contest_id": "arrl-10ghz-leg2",
      "name": "ARRL 10 GHz and Up Contest, Round 2",
      "start": "2026-09-19T09:00:00Z",
      "end": "2026-09-21T07:59:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 46.98,
      "modes": [
        "Mixed"
      ],
      "submodes": [],
      "bands": [
        "3cm"
      ],
      "bands_note": "10 GHz through light",
      "sponsor": "ARRL",
      "rules_url": "http://www.arrl.org/10-ghz-up",
      "verified": true,
      "note": "CORRECTION: this was stored as a local-time contest running 0600 local Saturday to 2359 local Sunday. ARRL has since moved it to fixed UTC and says so explicitly in the rules. It is now a plain UTC record -- 0900Z Saturday to 0759Z Monday -- and carries no timezone or local_rolling flag. Operating time is capped at 42 hours inside that 47-hour window. Also resolves the suspected typo flagged earlier: ARRL's rule reads 'Third full weekend of August AND SEPTEMBER', so a single rule covers both rounds and the September anchor was right all along.",
      "exchange": "",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-12",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "10 GHz+ microwave, rover-oriented. Very small participant pool.",
      "log_due": "2026-10-21T07:59:00Z",
      "uid": "arrl-10ghz-leg2-20260919T0900@contestcal",
      "start_date": "2026-09-19",
      "mode_families": [
        "CW",
        "SSB",
        "FM",
        "RTTY",
        "Digital",
        "FT8/FT4",
        "Mixed"
      ],
      "band_families": [
        "VHF+"
      ],
      "duration_bucket": "gte24"
    },
    {
      "contest_id": "sac-cw",
      "name": "Scandinavian Activity Contest, CW",
      "start": "2026-09-19T12:00:00Z",
      "end": "2026-09-20T11:59:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 23.98,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "3510-3560, 7000-7040, 14000-14060, 21000-21070, 28000-28070 kHz",
      "sponsor": "NRAU",
      "rules_url": "https://www.sactest.net/blog/rules/",
      "verified": true,
      "note": "FOUND BECAUSE A BLOCKED ORGANISATION STOPPED BEING ASKED WHAT ELSE IT RUNS. NRAU is recorded in this registry as blocked, correctly: nrau.net says its contest information is under revision and publishes no rules for NRAU-Baltic or the Nordic Activity Contests. But NRAU also organises this, its flagship, and it publishes complete rules at a domain of its own. SAC appeared nowhere in the registry at all until the 2026-08-21 gap audit.\n\nTHE PAGE IS HEADED 2023 AND THE RULE IS STATED AS STANDING. The recurrence sentences say 'each year', which is the form this catalog trusts -- the same form ARRL's generic calendar uses -- and they reproduce that page's own 2023 dates. Re-read when NRAU publishes a newer edition.",
      "exchange": "RS(T) plus a serial number starting at 001.",
      "country": "SE",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-21",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": "2026-09-25T11:59:00Z",
      "uid": "sac-cw-20260919T1200@contestcal",
      "start_date": "2026-09-19",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "12-24"
    },
    {
      "contest_id": "ncj-sprint-rtty",
      "name": "North American Sprint, RTTY",
      "start": "2026-09-20T00:00:00Z",
      "end": "2026-09-20T03:59:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 3.98,
      "modes": [
        "RTTY"
      ],
      "submodes": [],
      "bands": [
        "80m",
        "40m",
        "20m"
      ],
      "bands_note": "",
      "sponsor": "National Contest Journal (NCJ)",
      "rules_url": "https://www.ncjweb.com/Sprint-Rules.pdf",
      "verified": true,
      "note": "Same 'manual' reasoning as the CW Sprint -- NCJ states dates, not a recurrence rule.",
      "exchange": "Other station's call + your call + serial number + name + state/province/country ('DX' outside North America)",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": "2026-09-27T03:59:00Z",
      "uid": "ncj-sprint-rtty-20260920T0000@contestcal",
      "start_date": "2026-09-20",
      "mode_families": [
        "RTTY",
        "Digital"
      ],
      "band_families": [
        "80m",
        "40m",
        "20m"
      ],
      "duration_bucket": "2-12"
    },
    {
      "contest_id": "uba-bma",
      "name": "Belgian Mills Award (BMA) Contest",
      "start": "2026-09-20T06:00:00Z",
      "end": "2026-09-20T10:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 4,
      "modes": [
        "SSB",
        "FM"
      ],
      "submodes": [],
      "bands": [
        "80m",
        "2m"
      ],
      "bands_note": "80m SSB 3600-3650 and 3700-3775 kHz; 2m SSB and FM",
      "sponsor": "UBA",
      "rules_url": "https://www.uba.be/en/node/2457",
      "verified": true,
      "note": "MANUAL, DELIBERATELY, AND UBA'S PAGE IS STALE: the rules page still carries the 2025 date while UBA's contest calendar lists 20/09/2026. Both dates are the third Sunday of September, but 'the Sunday nearest 21 September' fits them equally and UBA states no rule at all, so neither ordinal is asserted and both published dates are recorded as given. The page also says 'Voor het volledig reglement consulteer de BMA website' -- the complete rules live at belgianmillaward.be, off UBA's site; everything encoded here comes from UBA's own page. log_deadline_days is unset: UBA gives a fixed calendar date ('tenlaatste op 5 oktober'), not an interval.",
      "exchange": "RST + a QSO serial number starting with 001 + the Belgian province (AN, BW, HT, LB, LG, NM, LU, OV, VB, WV or BR for Brussels) + the mill reference if operating from one.",
      "country": "BE",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-18",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "uba-bma-20260920T0600@contestcal",
      "start_date": "2026-09-20",
      "mode_families": [
        "SSB",
        "FM"
      ],
      "band_families": [
        "80m",
        "VHF+"
      ],
      "duration_bucket": "2-12"
    },
    {
      "contest_id": "bartg-sprint-psk63",
      "name": "BARTG Sprint PSK63 Contest",
      "start": "2026-09-20T17:00:00Z",
      "end": "2026-09-20T20:59:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 3.98,
      "modes": [
        "Digital"
      ],
      "submodes": [
        "PSK63"
      ],
      "bands": [
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "",
      "sponsor": "BARTG",
      "rules_url": "https://bartg.org.uk/bartg-sprint-psk63-contest/",
      "verified": true,
      "note": "",
      "exchange": "Message number only (3 or 4 figures from 001)",
      "country": "GB",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-12",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": "2026-09-27T20:59:00Z",
      "uid": "bartg-sprint-psk63-20260920T1700@contestcal",
      "start_date": "2026-09-20",
      "mode_families": [
        "Digital"
      ],
      "band_families": [
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "2-12"
    },
    {
      "contest_id": "k1usn-sst",
      "name": "K1USN Slow Speed Test (SST)",
      "start": "2026-09-21T00:00:00Z",
      "end": "2026-09-21T01:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "",
      "sponsor": "K1USN Radio Club",
      "rules_url": "https://www.k1usn.com/sst_rules.html",
      "verified": true,
      "note": "No formal log submission -- participants post scores to 3830scores.com.",
      "exchange": "Name + state/province/DX country",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "k1usn-sst-20260921T0000@contestcal",
      "start_date": "2026-09-21",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "agcw-zap-merit",
      "name": "AGCW ZAP Merit Contest (ZMC)",
      "start": "2026-09-21T17:40:00Z",
      "end": "2026-09-21T18:30:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.83,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "80m"
      ],
      "bands_note": "",
      "sponsor": "AGCW-DL",
      "rules_url": "https://www.agcw.de/contest/tzap/",
      "verified": false,
      "note": "PARTLY UNVERIFIED. The recurrence (every Monday), the 1740 UTC pre-logging opening and the 1800 UTC telegram transmission are all quoted from AGCW. AGCW publishes NO closing time. The 1830 end stored here is a PLACEHOLDER so the record expands -- it is not a sponsor fact and must not be presented as one. Confirm the session length with the ZMC manager before shipping. Points accumulate over a calendar year; logs are due 31 January of the following year.",
      "exchange": "Callsign + date + time + RST (SWLs log RST of both stations in a QSO)",
      "country": "DE",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-12",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "agcw-zap-merit-20260921T1740@contestcal",
      "start_date": "2026-09-21",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "80m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "skcc-sks",
      "name": "SKCC Straight Key Sprint (SKS)",
      "start": "2026-09-23T00:00:00Z",
      "end": "2026-09-23T02:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 2,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m",
        "6m"
      ],
      "bands_note": "Suggested frequencies, one per band",
      "sponsor": "Straight Key Century Club",
      "rules_url": "https://www.skccgroup.com/operating_activities/weekday_sprint/",
      "verified": true,
      "note": "",
      "exchange": "RST + QTH + name + SKCC number",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "skcc-sks-20260923T0000@contestcal",
      "start_date": "2026-09-23",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m",
        "6m"
      ],
      "duration_bucket": "2-12"
    },
    {
      "contest_id": "cwops-cwt",
      "name": "CWops Test (CWT)",
      "start": "2026-09-23T13:00:00Z",
      "end": "2026-09-23T14:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "CWops",
      "rules_url": "https://cwops.org/cwops-tests/",
      "verified": true,
      "note": "",
      "exchange": "Members: name + CWops number. Non-members: name + state/province/DX prefix.",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "cwops-cwt-20260923T1300@contestcal",
      "start_date": "2026-09-23",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "cwops-cwt",
      "name": "CWops Test (CWT)",
      "start": "2026-09-23T19:00:00Z",
      "end": "2026-09-23T20:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "CWops",
      "rules_url": "https://cwops.org/cwops-tests/",
      "verified": true,
      "note": "",
      "exchange": "Members: name + CWops number. Non-members: name + state/province/DX prefix.",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "cwops-cwt-20260923T1900@contestcal",
      "start_date": "2026-09-23",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "cwops-cwt",
      "name": "CWops Test (CWT)",
      "start": "2026-09-24T03:00:00Z",
      "end": "2026-09-24T04:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "CWops",
      "rules_url": "https://cwops.org/cwops-tests/",
      "verified": true,
      "note": "",
      "exchange": "Members: name + CWops number. Non-members: name + state/province/DX prefix.",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "cwops-cwt-20260924T0300@contestcal",
      "start_date": "2026-09-24",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "cwops-cwt",
      "name": "CWops Test (CWT)",
      "start": "2026-09-24T07:00:00Z",
      "end": "2026-09-24T08:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "CWops",
      "rules_url": "https://cwops.org/cwops-tests/",
      "verified": true,
      "note": "",
      "exchange": "Members: name + CWops number. Non-members: name + state/province/DX prefix.",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "cwops-cwt-20260924T0700@contestcal",
      "start_date": "2026-09-24",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "rsgb-autumn-data",
      "name": "RSGB 3.5 MHz Autumn Series, Data",
      "start": "2026-09-24T19:00:00Z",
      "end": "2026-09-24T20:30:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1.5,
      "modes": [
        "RTTY",
        "Digital"
      ],
      "submodes": [
        "PSK63"
      ],
      "bands": [
        "80m"
      ],
      "bands_note": "PSK63 3580-3590 kHz; RTTY 3590-3620 kHz.",
      "sponsor": "RSGB Contest Committee",
      "rules_url": "https://www.rsgbcc.org/hf/rules/2026/rautumn.shtml",
      "verified": true,
      "note": "THE CLOCK MOVES IN NOVEMBER AND THE RECORD SAYS SO PER DATE. September and October run 1900-2030 UTC; November runs 2000-2130. Every leg of this series sits on one side or the other of that change, so a single stored time would put two of the three runnings on the calendar an hour wrong.\n\nThis is the first use of PER-DATE TIMES in a manual rule, a schema question NEEDS_A_HUMAN had been carrying since the REP FT4 series hit the same wall. The alternative was one record per clock time -- six records for a nine-leg series the sponsor treats as one -- or one record per leg, which is nine. Splitting by MODE is the split a reader actually wants, because the mode filter is what they reach for, and per-date times are what make that split possible without lying about an hour.\n\nMANUAL BECAUSE RSGB PUBLISHES DATES AND NO RULE for this series. The legs fall on Mondays, Wednesdays and Thursdays with no discernible ordinal, which is exactly the shape an ordinal must not be fitted to.\n\nNON-UK STATIONS MAY ENTER AS INDIVIDUALS -- RSGB states it outright, which is worth noting beside the AFS and Club Calls contests where entry really is UK&CD only.",
      "exchange": "RS(T) plus a serial number starting at 1 and incrementing by 1.",
      "country": "GB",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-23",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": "2026-09-27T20:30:00Z",
      "uid": "rsgb-autumn-data-20260924T1900@contestcal",
      "start_date": "2026-09-24",
      "mode_families": [
        "RTTY",
        "Digital"
      ],
      "band_families": [
        "80m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "nccc-ns-ft4",
      "name": "NCCC FT4 Sprint (FT4 NS)",
      "start": "2026-09-25T01:00:00Z",
      "end": "2026-09-25T01:30:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.5,
      "modes": [
        "FT8/FT4"
      ],
      "submodes": [
        "FT4"
      ],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "Northern California Contest Club (NCCC)",
      "rules_url": "https://www.ncccsprint.com/ft4ns.html",
      "verified": true,
      "note": "NCCC describes these as 'nominal rules' that may be modified on a weekly basis, and runs formal Ladder seasons interspersed with practice weeks. The 30-minute session slot itself is fixed.",
      "exchange": "Grid square (following NA VHF, WW Digi and ARRL IDC practice)",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "nccc-ns-ft4-20260925T0100@contestcal",
      "start_date": "2026-09-25",
      "mode_families": [
        "Digital",
        "FT8/FT4"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "nccc-ns-rtty",
      "name": "NCCC RTTY Sprint (RTTY NS)",
      "start": "2026-09-25T01:45:00Z",
      "end": "2026-09-25T02:15:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.5,
      "modes": [
        "RTTY"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m"
      ],
      "bands_note": "",
      "sponsor": "Northern California Contest Club (NCCC)",
      "rules_url": "https://ncccsprint.com/rttyns.html",
      "verified": true,
      "note": "NCCC describes these as 'nominal rules' that may be modified on a weekly basis, and runs formal Ladder seasons interspersed with practice weeks. The 30-minute session slot itself is fixed.",
      "exchange": "Serial number + name + QTH (both callsigns required in the exchange)",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "nccc-ns-rtty-20260925T0145@contestcal",
      "start_date": "2026-09-25",
      "mode_families": [
        "RTTY",
        "Digital"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "nccc-ns-cw",
      "name": "NCCC Sprint (NS)",
      "start": "2026-09-25T02:30:00Z",
      "end": "2026-09-25T03:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.5,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m"
      ],
      "bands_note": "",
      "sponsor": "Northern California Contest Club (NCCC)",
      "rules_url": "https://ncccsprint.com/rules.html",
      "verified": true,
      "note": "NCCC describes these as 'nominal rules' that may be modified on a weekly basis, and runs formal Ladder seasons interspersed with practice weeks. The 30-minute session slot itself is fixed.",
      "exchange": "Serial number + name + QTH (both callsigns required in the exchange)",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "nccc-ns-cw-20260925T0230@contestcal",
      "start_date": "2026-09-25",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "k1usn-sst",
      "name": "K1USN Slow Speed Test (SST)",
      "start": "2026-09-25T20:00:00Z",
      "end": "2026-09-25T21:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "",
      "sponsor": "K1USN Radio Club",
      "rules_url": "https://www.k1usn.com/sst_rules.html",
      "verified": true,
      "note": "No formal log submission -- participants post scores to 3830scores.com.",
      "exchange": "Name + state/province/DX country",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "k1usn-sst-20260925T2000@contestcal",
      "start_date": "2026-09-25",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "cq-ww-rtty",
      "name": "CQ Worldwide DX Contest, RTTY",
      "start": "2026-09-26T00:00:00Z",
      "end": "2026-09-27T23:59:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 47.98,
      "modes": [
        "RTTY"
      ],
      "submodes": [],
      "bands": [
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "Five bands only: 3.5, 7, 14, 21 and 28 MHz",
      "sponsor": "CQ Magazine",
      "rules_url": "https://cqwwrtty.com/rules.htm",
      "verified": true,
      "note": "",
      "exchange": "RST report plus CQ zone number; continental USA and Canada also send state or province",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-16",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": "2026-09-29T23:59:00Z",
      "uid": "cq-ww-rtty-20260926T0000@contestcal",
      "start_date": "2026-09-26",
      "mode_families": [
        "RTTY",
        "Digital"
      ],
      "band_families": [
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "gte24"
    },
    {
      "contest_id": "agcw-vhf-uhf",
      "name": "AGCW VHF/UHF Contest",
      "start": "2026-09-26T14:00:00Z",
      "end": "2026-09-26T17:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 3,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "2m",
        "70cm"
      ],
      "bands_note": "",
      "sponsor": "AGCW-DL",
      "rules_url": "https://www.agcw.de/contest/vhf-uhf/",
      "verified": true,
      "note": "Four dates a year, each with two back-to-back sessions on different bands: the first session is 2 m only, the second 70 cm only. Encoded as two sessions off one anchor, so eight occurrences a year. The per-session band split is not expressible in the current schema -- both bands are listed at contest level.",
      "exchange": "RST + running number + locator",
      "country": "DE",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-12",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "agcw-vhf-uhf-20260926T1400@contestcal",
      "start_date": "2026-09-26",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "VHF+"
      ],
      "duration_bucket": "2-12"
    },
    {
      "contest_id": "agcw-vhf-uhf",
      "name": "AGCW VHF/UHF Contest",
      "start": "2026-09-26T17:00:00Z",
      "end": "2026-09-26T18:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "2m",
        "70cm"
      ],
      "bands_note": "",
      "sponsor": "AGCW-DL",
      "rules_url": "https://www.agcw.de/contest/vhf-uhf/",
      "verified": true,
      "note": "Four dates a year, each with two back-to-back sessions on different bands: the first session is 2 m only, the second 70 cm only. Encoded as two sessions off one anchor, so eight occurrences a year. The per-session band split is not expressible in the current schema -- both bands are listed at contest level.",
      "exchange": "RST + running number + locator",
      "country": "DE",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-12",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "agcw-vhf-uhf-20260926T1700@contestcal",
      "start_date": "2026-09-26",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "VHF+"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "uba-on-6m",
      "name": "UBA ON Contest, 6m",
      "start": "2026-09-27T07:00:00Z",
      "end": "2026-09-27T10:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 3,
      "modes": [
        "SSB",
        "CW"
      ],
      "submodes": [],
      "bands": [
        "6m"
      ],
      "bands_note": "",
      "sponsor": "UBA",
      "rules_url": "https://www.uba.be/en/hf/contest-rules/on-contest",
      "verified": true,
      "note": "MANUAL, DELIBERATELY: UBA gives four dated legs and no recurrence rule -- the page identifies the event only as 'the 46th edition'. The 2026 legs fall on consecutive Sundays from the last Sunday of September, but UBA states no ordinal, so none is asserted here. log_deadline_days is exact: UBA prints a deadline date beside each leg and all four are the leg's date plus five days.",
      "exchange": "Stations in Belgium send RS(T) + a QSO number from 001 + their UBA section (non-members give XXX, the national club stations give UBA); stations outside Belgium send RS(T) + a QSO number from 001.",
      "country": "BE",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-18",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": "2026-10-02T10:00:00Z",
      "uid": "uba-on-6m-20260927T0700@contestcal",
      "start_date": "2026-09-27",
      "mode_families": [
        "CW",
        "SSB"
      ],
      "band_families": [
        "6m"
      ],
      "duration_bucket": "2-12"
    },
    {
      "contest_id": "k1usn-sst",
      "name": "K1USN Slow Speed Test (SST)",
      "start": "2026-09-28T00:00:00Z",
      "end": "2026-09-28T01:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "",
      "sponsor": "K1USN Radio Club",
      "rules_url": "https://www.k1usn.com/sst_rules.html",
      "verified": true,
      "note": "No formal log submission -- participants post scores to 3830scores.com.",
      "exchange": "Name + state/province/DX country",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "k1usn-sst-20260928T0000@contestcal",
      "start_date": "2026-09-28",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "agcw-zap-merit",
      "name": "AGCW ZAP Merit Contest (ZMC)",
      "start": "2026-09-28T17:40:00Z",
      "end": "2026-09-28T18:30:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.83,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "80m"
      ],
      "bands_note": "",
      "sponsor": "AGCW-DL",
      "rules_url": "https://www.agcw.de/contest/tzap/",
      "verified": false,
      "note": "PARTLY UNVERIFIED. The recurrence (every Monday), the 1740 UTC pre-logging opening and the 1800 UTC telegram transmission are all quoted from AGCW. AGCW publishes NO closing time. The 1830 end stored here is a PLACEHOLDER so the record expands -- it is not a sponsor fact and must not be presented as one. Confirm the session length with the ZMC manager before shipping. Points accumulate over a calendar year; logs are due 31 January of the following year.",
      "exchange": "Callsign + date + time + RST (SWLs log RST of both stations in a QSO)",
      "country": "DE",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-12",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "agcw-zap-merit-20260928T1740@contestcal",
      "start_date": "2026-09-28",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "80m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "rsgb-ft4-series",
      "name": "RSGB FT4 Contest Series",
      "start": "2026-09-28T19:00:00Z",
      "end": "2026-09-28T21:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 2,
      "modes": [
        "FT8/FT4"
      ],
      "submodes": [
        "FT4"
      ],
      "bands": [
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "80, 40, 20, 15 and 10 m.",
      "sponsor": "RSGB Contest Committee",
      "rules_url": "https://www.rsgbcc.org/hf/rules/2026/r80m_ft4.shtml",
      "verified": true,
      "note": "TWELVE MONDAY EVENINGS AND THE CLOCK SHIFTS FOR THE SUMMER: January to March and October to December run 2000-2200 UTC, April to September run 1900-2100. Six legs each way, so the record's default is the winter clock and the summer legs carry their own -- the third contest to need per-date times, after the Autumn Series and the 80m Club Championship.\n\nMANUAL BECAUSE THE DATES ARE NOT ON THE RULES PAGE and follow no ordinal: they are Mondays, but the third Monday in January, the fourth in February, the third in March. RSGB publishes them on its CGI calendar and this record holds what that prints.\n\nNot the same contest as the FT4 International Activity Day in April, which is 24 hours and has its own rules page.",
      "exchange": "A signal report. A serial number is not required.",
      "country": "GB",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-23",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": "2026-09-29T21:00:00Z",
      "uid": "rsgb-ft4-series-20260928T1900@contestcal",
      "start_date": "2026-09-28",
      "mode_families": [
        "Digital",
        "FT8/FT4"
      ],
      "band_families": [
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "2-12"
    },
    {
      "contest_id": "cwops-cwt",
      "name": "CWops Test (CWT)",
      "start": "2026-09-30T13:00:00Z",
      "end": "2026-09-30T14:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "CWops",
      "rules_url": "https://cwops.org/cwops-tests/",
      "verified": true,
      "note": "",
      "exchange": "Members: name + CWops number. Non-members: name + state/province/DX prefix.",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "cwops-cwt-20260930T1300@contestcal",
      "start_date": "2026-09-30",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "cwops-cwt",
      "name": "CWops Test (CWT)",
      "start": "2026-09-30T19:00:00Z",
      "end": "2026-09-30T20:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "CWops",
      "rules_url": "https://cwops.org/cwops-tests/",
      "verified": true,
      "note": "",
      "exchange": "Members: name + CWops number. Non-members: name + state/province/DX prefix.",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "cwops-cwt-20260930T1900@contestcal",
      "start_date": "2026-09-30",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "cwops-cwt",
      "name": "CWops Test (CWT)",
      "start": "2026-10-01T03:00:00Z",
      "end": "2026-10-01T04:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "CWops",
      "rules_url": "https://cwops.org/cwops-tests/",
      "verified": true,
      "note": "",
      "exchange": "Members: name + CWops number. Non-members: name + state/province/DX prefix.",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "cwops-cwt-20261001T0300@contestcal",
      "start_date": "2026-10-01",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "cwops-cwt",
      "name": "CWops Test (CWT)",
      "start": "2026-10-01T07:00:00Z",
      "end": "2026-10-01T08:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "CWops",
      "rules_url": "https://cwops.org/cwops-tests/",
      "verified": true,
      "note": "",
      "exchange": "Members: name + CWops number. Non-members: name + state/province/DX prefix.",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "cwops-cwt-20261001T0700@contestcal",
      "start_date": "2026-10-01",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "sarl-80m-qso-party",
      "name": "SARL 80 m QSO Party",
      "start": "2026-10-01T17:00:00Z",
      "end": "2026-10-01T20:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 3,
      "modes": [
        "SSB"
      ],
      "submodes": [],
      "bands": [
        "80m"
      ],
      "bands_note": "Only 3 603-3 650 and 3 703-3 800 kHz may be used; 3 651-3 699 kHz is contest free.",
      "sponsor": "SARL",
      "rules_url": "https://mysarl.org.za/wp-content/uploads/2025/12/2026-SARL-Contest-Manual-Version-1.1-2025-12-15.pdf",
      "verified": true,
      "note": "Two legs on one record: both run 17:00-20:00 UTC on a first Thursday. A Thursday evening rather than a weekend, which is unusual enough to be worth stating. log_format and log_deadline_days are absent: this pass read each contest's Aim, Dates, Frequencies and Exchange sections and did not read its Log Sheets section, so neither is recorded rather than assumed from SARL's other contests.",
      "exchange": "Call sign, RS signal report and the operator's name.",
      "country": "ZA",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-19",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "sarl-80m-qso-party-20261001T1700@contestcal",
      "start_date": "2026-10-01",
      "mode_families": [
        "SSB"
      ],
      "band_families": [
        "80m"
      ],
      "duration_bucket": "2-12"
    },
    {
      "contest_id": "skcc-skse",
      "name": "SKCC Straight Key Sprint Europe (SKSE)",
      "start": "2026-10-01T19:00:00Z",
      "end": "2026-10-01T21:00:00Z",
      "start_wall": "2026-10-01T21:00:00",
      "end_wall": "2026-10-01T23:00:00",
      "local_rolling": false,
      "timezone": "Europe/Berlin",
      "duration_hours": 2,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m",
        "6m"
      ],
      "bands_note": "160 through 6 m excluding the WARC bands -- SKCC names 60, 30, 17 and 12 m as excluded.",
      "sponsor": "Straight Key Century Club",
      "rules_url": "https://www.skccgroup.com/operating_activities/skse/",
      "verified": true,
      "note": "SKCC PRINTS TWO UTC TIMES AND THE CONTEST HAS ONE LOCAL TIME. 2000Z from November to March and 1900Z from April to October are both 2100 in central Europe: CET is UTC+1 and CEST is UTC+2. So this is not a contest that changes its hour twice a year, it is a contest at nine in the evening that Europe's clocks move around, and it is recorded the way the sponsor means it -- `timezone: Europe/Berlin` with wall_clock times, exactly as the ARS Spartan Sprint is recorded in New York.\n\nTHAT READING IS TESTABLE AND IT PASSES ON THE MONTHS THAT DECIDE IT. Europe changes clocks on the last Sunday of March and of October, and the first Thursday of both months falls on the near side of the change: March is still CET and resolves to 2000Z, April is CEST and resolves to 1900Z, October is still CEST at 1900Z, November is CET at 2000Z. All four match SKCC's own table, which is what makes this one rule rather than two.\n\nEncoding it as two records split by month -- winter and summer -- would have produced two entries with the same name and hidden the reason. Encoding one UTC time would have been wrong for five months of the year.\n\nStraight keys, sideswipers and bugs only: no keyer, no keyboard. That is the club's whole premise rather than a category.\n\nThe fifteen-minute QRS extensions at each end are not in the window: they are an invitation to slow operators rather than part of the scored period.",
      "exchange": "RST, QTH, the operator's name and the SKCC number. Non-members send 'none' for the number.",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-23",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": "2026-10-08T21:00:00Z",
      "uid": "skcc-skse-20261001T1900@contestcal",
      "start_date": "2026-10-01",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m",
        "6m"
      ],
      "duration_bucket": "2-12"
    },
    {
      "contest_id": "nccc-ns-ft4",
      "name": "NCCC FT4 Sprint (FT4 NS)",
      "start": "2026-10-02T01:00:00Z",
      "end": "2026-10-02T01:30:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.5,
      "modes": [
        "FT8/FT4"
      ],
      "submodes": [
        "FT4"
      ],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "Northern California Contest Club (NCCC)",
      "rules_url": "https://www.ncccsprint.com/ft4ns.html",
      "verified": true,
      "note": "NCCC describes these as 'nominal rules' that may be modified on a weekly basis, and runs formal Ladder seasons interspersed with practice weeks. The 30-minute session slot itself is fixed.",
      "exchange": "Grid square (following NA VHF, WW Digi and ARRL IDC practice)",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "nccc-ns-ft4-20261002T0100@contestcal",
      "start_date": "2026-10-02",
      "mode_families": [
        "Digital",
        "FT8/FT4"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "nccc-ns-rtty",
      "name": "NCCC RTTY Sprint (RTTY NS)",
      "start": "2026-10-02T01:45:00Z",
      "end": "2026-10-02T02:15:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.5,
      "modes": [
        "RTTY"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m"
      ],
      "bands_note": "",
      "sponsor": "Northern California Contest Club (NCCC)",
      "rules_url": "https://ncccsprint.com/rttyns.html",
      "verified": true,
      "note": "NCCC describes these as 'nominal rules' that may be modified on a weekly basis, and runs formal Ladder seasons interspersed with practice weeks. The 30-minute session slot itself is fixed.",
      "exchange": "Serial number + name + QTH (both callsigns required in the exchange)",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "nccc-ns-rtty-20261002T0145@contestcal",
      "start_date": "2026-10-02",
      "mode_families": [
        "RTTY",
        "Digital"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "nccc-ns-cw",
      "name": "NCCC Sprint (NS)",
      "start": "2026-10-02T02:30:00Z",
      "end": "2026-10-02T03:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.5,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m"
      ],
      "bands_note": "",
      "sponsor": "Northern California Contest Club (NCCC)",
      "rules_url": "https://ncccsprint.com/rules.html",
      "verified": true,
      "note": "NCCC describes these as 'nominal rules' that may be modified on a weekly basis, and runs formal Ladder seasons interspersed with practice weeks. The 30-minute session slot itself is fixed.",
      "exchange": "Serial number + name + QTH (both callsigns required in the exchange)",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "nccc-ns-cw-20261002T0230@contestcal",
      "start_date": "2026-10-02",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "k1usn-sst",
      "name": "K1USN Slow Speed Test (SST)",
      "start": "2026-10-02T20:00:00Z",
      "end": "2026-10-02T21:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "",
      "sponsor": "K1USN Radio Club",
      "rules_url": "https://www.k1usn.com/sst_rules.html",
      "verified": true,
      "note": "No formal log submission -- participants post scores to 3830scores.com.",
      "exchange": "Name + state/province/DX country",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "k1usn-sst-20261002T2000@contestcal",
      "start_date": "2026-10-02",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "ocdx-phone",
      "name": "Oceania DX Contest, Phone",
      "start": "2026-10-03T06:00:00Z",
      "end": "2026-10-04T06:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 24,
      "modes": [
        "SSB"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "160M, 80M, 40M, 20M, 15M and 10M (no WARC bands)",
      "sponsor": "Oceania DX Contest Committee",
      "rules_url": "https://www.oceaniadxcontest.com/rules",
      "verified": true,
      "note": "The log deadline is announced each year rather than set as an interval -- 25 October in 2026, 31 October in earlier years -- so this calendar does not compute one. country is 'OC' because the sponsor is a joint VK/ZL committee rather than a national society; see data/sources.md.",
      "exchange": "RS(T) and a progressive serial number starting at 001",
      "country": "OC",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-17",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "ocdx-phone-20261003T0600@contestcal",
      "start_date": "2026-10-03",
      "mode_families": [
        "SSB"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "gte24"
    },
    {
      "contest_id": "agcw-dtc",
      "name": "Deutscher Telegrafie Contest (DTC)",
      "start": "2026-10-03T07:00:00Z",
      "end": "2026-10-03T10:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 3,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "80m",
        "40m"
      ],
      "bands_note": "",
      "sponsor": "AGCW-DL / High Speed Club (HSC)",
      "rules_url": "https://www.agcw.de/contest/dtc/",
      "verified": true,
      "note": "Anchored on German Unity Day, a fixed calendar date, so it moves through the week rather than sitting on a weekend. 'Seit einigen Jahren' -- for some years now -- is AGCW hedging its own history, not the current rule.",
      "exchange": "German stations: RST + LDK (district vehicle registration code). All others: RST only.",
      "country": "DE",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-12",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "Every QSO must involve a German station: 'Mindestens eine der an einem QSO beteiligten Stationen muss sich in Deutschland befinden.' Non-DL entrants can therefore work only DL stations.",
      "log_due": null,
      "uid": "agcw-dtc-20261003T0700@contestcal",
      "start_date": "2026-10-03",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "80m",
        "40m"
      ],
      "duration_bucket": "2-12"
    },
    {
      "contest_id": "erau-es-ll-kv",
      "name": "Estonian HF Cup (ES LL KV)",
      "start": "2026-10-03T07:00:00Z",
      "end": "2026-10-03T07:59:00Z",
      "start_wall": "2026-10-03T10:00:00",
      "end_wall": "2026-10-03T10:59:00",
      "local_rolling": false,
      "timezone": "Europe/Tallinn",
      "duration_hours": 0.98,
      "modes": [
        "CW",
        "SSB"
      ],
      "submodes": [],
      "bands": [
        "80m"
      ],
      "bands_note": "CW below 3600 kHz and SSB above it; 3530-3560 kHz and 3600-3650 kHz are recommended.",
      "sponsor": "ERAU",
      "rules_url": "https://www.erau.ee/images/LL/ES%20LL%20KV%20reeglid.pdf",
      "verified": true,
      "note": "SPONSOR-ANCHORED LOCAL TIME, and ERAU's own calendar proves the reading: 10:00-10:59 Estonian time is 08:00-08:59 UTC in winter (EET) and 07:00-07:59 in summer (EEST), which is exactly the split ERAU prints across the nine stages. The rules give no date rule at all -- 4.2 defers to the calendar plan -- so the dates are manual and taken from ERAU's published 2026 calendar. Eight of the nine are the first Saturday of their month; February's is the second. The log deadline is 'the Thursday of the following week', which is not a fixed number of days from the end of each stage, so it is recorded here rather than as log_deadline_days. Stages 4.3 also splits each hour into four periods; that is a scoring device inside one continuous hour.",
      "exchange": "RS(T) and a continuous serial number from 001.",
      "country": "EE",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-19",
      "can_enter": false,
      "eligibility_scope": "entity_list",
      "eligibility_reason": "Entry limited to ES. K stations may be worked but cannot submit an entry.",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "erau-es-ll-kv-20261003T0700@contestcal",
      "start_date": "2026-10-03",
      "mode_families": [
        "CW",
        "SSB"
      ],
      "band_families": [
        "80m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "darc-hell",
      "name": "DARC Hell Contest",
      "start": "2026-10-03T16:00:00Z",
      "end": "2026-10-04T10:59:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 18.98,
      "modes": [
        "Digital"
      ],
      "submodes": [
        "Hell"
      ],
      "bands": [
        "80m",
        "40m"
      ],
      "bands_note": "80 m: 3.580-3.600 MHz; 40 m: 7.040-7.050 MHz.",
      "sponsor": "DARC",
      "rules_url": "https://www.darc.de/der-club/referate/conteste/hell-contest/ausschreibung/",
      "verified": true,
      "note": "THE RULE IS STATED AND THE TABLE AGREES: the first full weekend of October 2026 is the 3rd-4th, which is what DARC prints. So this is a recurrence rather than a date.\n\nFeld-Hell is a facsimile mode from the 1930s and has no token in this catalog's vocabulary, so the record is Digital with 'Hell' in submodes -- the same treatment PSK63 and FT4 get. Anyone filtering Digital finds it; nobody is told it is RTTY.",
      "exchange": "RST plus a serial number from 001.",
      "country": "DE",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-23",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": "2026-10-11T10:59:00Z",
      "uid": "darc-hell-20261003T1600@contestcal",
      "start_date": "2026-10-03",
      "mode_families": [
        "Digital"
      ],
      "band_families": [
        "80m",
        "40m"
      ],
      "duration_bucket": "12-24"
    },
    {
      "contest_id": "uba-on-80-40-ssb",
      "name": "UBA ON Contest, 80m/40m SSB",
      "start": "2026-10-04T06:00:00Z",
      "end": "2026-10-04T10:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 4,
      "modes": [
        "SSB"
      ],
      "submodes": [],
      "bands": [
        "80m",
        "40m"
      ],
      "bands_note": "",
      "sponsor": "UBA",
      "rules_url": "https://www.uba.be/en/hf/contest-rules/on-contest",
      "verified": true,
      "note": "MANUAL, DELIBERATELY: UBA gives four dated legs and no recurrence rule -- the page identifies the event only as 'the 46th edition'. The 2026 legs fall on consecutive Sundays from the last Sunday of September, but UBA states no ordinal, so none is asserted here. log_deadline_days is exact: UBA prints a deadline date beside each leg and all four are the leg's date plus five days.",
      "exchange": "Stations in Belgium send RS(T) + a QSO number from 001 + their UBA section (non-members give XXX, the national club stations give UBA); stations outside Belgium send RS(T) + a QSO number from 001.",
      "country": "BE",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-18",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": "2026-10-09T10:00:00Z",
      "uid": "uba-on-80-40-ssb-20261004T0600@contestcal",
      "start_date": "2026-10-04",
      "mode_families": [
        "SSB"
      ],
      "band_families": [
        "80m",
        "40m"
      ],
      "duration_bucket": "2-12"
    },
    {
      "contest_id": "awasa-valve-ssb-qso-party",
      "name": "AWA Valve SSB QSO Party",
      "start": "2026-10-04T13:00:00Z",
      "end": "2026-10-04T17:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 4,
      "modes": [
        "SSB"
      ],
      "submodes": [],
      "bands": [
        "80m",
        "40m"
      ],
      "bands_note": "40 m SSB 7 063-7 100 and 7 130-7 200 kHz, with 7 100-7 130 contest free; 80 m SSB 3 603-3 650 kHz, with 3 651-3 699 contest free.",
      "sponsor": "AWASA",
      "rules_url": "https://mysarl.org.za/wp-content/uploads/2025/12/2026-SARL-Contest-Manual-Version-1.1-2025-12-15.pdf",
      "verified": true,
      "note": "The exchange includes the RADIO you are using, and the four scoring classes are all-valve, hybrid, solid state pre-1970 and solid state post-1970 -- which is the point of the contest rather than a curiosity. No linear amplifiers, and the power limit bends for a rig that simply runs hotter than 100 W by design. Sourced from the SARL Contest Manual, which carries this contest's full rules and names its organising body -- the venue in which South African clubs publish their rules, not a listing of them. See data/sources.md, 'Nine South African clubs, one manual'.",
      "exchange": "Call sign, an RS report, a consecutive serial number starting at 001, and the type of radio used -- for example 'HT37 TX'.",
      "country": "ZA",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-19",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "awasa-valve-ssb-qso-party-20261004T1300@contestcal",
      "start_date": "2026-10-04",
      "mode_families": [
        "SSB"
      ],
      "band_families": [
        "80m",
        "40m"
      ],
      "duration_bucket": "2-12"
    },
    {
      "contest_id": "k1usn-sst",
      "name": "K1USN Slow Speed Test (SST)",
      "start": "2026-10-05T00:00:00Z",
      "end": "2026-10-05T01:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "",
      "sponsor": "K1USN Radio Club",
      "rules_url": "https://www.k1usn.com/sst_rules.html",
      "verified": true,
      "note": "No formal log submission -- participants post scores to 3830scores.com.",
      "exchange": "Name + state/province/DX country",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "k1usn-sst-20261005T0000@contestcal",
      "start_date": "2026-10-05",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "agcw-zap-merit",
      "name": "AGCW ZAP Merit Contest (ZMC)",
      "start": "2026-10-05T17:40:00Z",
      "end": "2026-10-05T18:30:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.83,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "80m"
      ],
      "bands_note": "",
      "sponsor": "AGCW-DL",
      "rules_url": "https://www.agcw.de/contest/tzap/",
      "verified": false,
      "note": "PARTLY UNVERIFIED. The recurrence (every Monday), the 1740 UTC pre-logging opening and the 1800 UTC telegram transmission are all quoted from AGCW. AGCW publishes NO closing time. The 1830 end stored here is a PLACEHOLDER so the record expands -- it is not a sponsor fact and must not be presented as one. Confirm the session length with the ZMC manager before shipping. Points accumulate over a calendar year; logs are due 31 January of the following year.",
      "exchange": "Callsign + date + time + RST (SWLs log RST of both stations in a QSO)",
      "country": "DE",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-12",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "agcw-zap-merit-20261005T1740@contestcal",
      "start_date": "2026-10-05",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "80m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "rsgb-autumn-cw",
      "name": "RSGB 3.5 MHz Autumn Series, CW",
      "start": "2026-10-05T19:00:00Z",
      "end": "2026-10-05T20:30:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1.5,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "80m"
      ],
      "bands_note": "3510-3565 kHz at any speed, with 3565-3570 kHz reserved for 15 wpm maximum.",
      "sponsor": "RSGB Contest Committee",
      "rules_url": "https://www.rsgbcc.org/hf/rules/2026/rautumn.shtml",
      "verified": true,
      "note": "THE CLOCK MOVES IN NOVEMBER AND THE RECORD SAYS SO PER DATE. September and October run 1900-2030 UTC; November runs 2000-2130. Every leg of this series sits on one side or the other of that change, so a single stored time would put two of the three runnings on the calendar an hour wrong.\n\nThis is the first use of PER-DATE TIMES in a manual rule, a schema question NEEDS_A_HUMAN had been carrying since the REP FT4 series hit the same wall. The alternative was one record per clock time -- six records for a nine-leg series the sponsor treats as one -- or one record per leg, which is nine. Splitting by MODE is the split a reader actually wants, because the mode filter is what they reach for, and per-date times are what make that split possible without lying about an hour.\n\nMANUAL BECAUSE RSGB PUBLISHES DATES AND NO RULE for this series. The legs fall on Mondays, Wednesdays and Thursdays with no discernible ordinal, which is exactly the shape an ordinal must not be fitted to.\n\nNON-UK STATIONS MAY ENTER AS INDIVIDUALS -- RSGB states it outright, which is worth noting beside the AFS and Club Calls contests where entry really is UK&CD only.",
      "exchange": "RS(T) plus a serial number starting at 1 and incrementing by 1.",
      "country": "GB",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-23",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": "2026-10-08T20:30:00Z",
      "uid": "rsgb-autumn-cw-20261005T1900@contestcal",
      "start_date": "2026-10-05",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "80m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "ars-spartan-sprint",
      "name": "ARS Spartan Sprint",
      "start": "2026-10-06T00:00:00Z",
      "end": "2026-10-06T02:00:00Z",
      "start_wall": "2026-10-05T20:00:00",
      "end_wall": "2026-10-05T22:00:00",
      "local_rolling": false,
      "timezone": "America/New_York",
      "duration_hours": 2,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "",
      "sponsor": "Adventure Radio Society",
      "rules_url": "https://ars-qrp.com/Spartan_Sprint/Spartan_Sprint.html",
      "verified": true,
      "note": "CORRECTION (anchor): previously encoded as the first TUESDAY of the month. The sponsor's rule is the first MONDAY US local, which lands on Tuesday UTC -- and those are different dates whenever the 1st falls on a Tuesday (Sep and Dec 2026). SPONSOR-ANCHORED LOCAL TIME: ARS publishes no UTC time and states the event 'is always at these Local Times', so the UTC instant is what moves -- 0100Z Tuesday under EST, 0000Z Tuesday under EDT. Resolved through America/New_York rather than hardcoded, so DST is handled. ARS lists Eastern, Central, Mountain and Pacific times that are the same instant in every zone that observes DST; Arizona, which does not, is the one place the sponsor's own table is inconsistent.",
      "exchange": "RST + state/province + power output",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "ars-spartan-sprint-20261006T0000@contestcal",
      "start_date": "2026-10-06",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "2-12"
    },
    {
      "contest_id": "cwops-cwt",
      "name": "CWops Test (CWT)",
      "start": "2026-10-07T13:00:00Z",
      "end": "2026-10-07T14:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "CWops",
      "rules_url": "https://cwops.org/cwops-tests/",
      "verified": true,
      "note": "",
      "exchange": "Members: name + CWops number. Non-members: name + state/province/DX prefix.",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "cwops-cwt-20261007T1300@contestcal",
      "start_date": "2026-10-07",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "cwops-cwt",
      "name": "CWops Test (CWT)",
      "start": "2026-10-07T19:00:00Z",
      "end": "2026-10-07T20:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "CWops",
      "rules_url": "https://cwops.org/cwops-tests/",
      "verified": true,
      "note": "",
      "exchange": "Members: name + CWops number. Non-members: name + state/province/DX prefix.",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "cwops-cwt-20261007T1900@contestcal",
      "start_date": "2026-10-07",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "cwops-cwt",
      "name": "CWops Test (CWT)",
      "start": "2026-10-08T03:00:00Z",
      "end": "2026-10-08T04:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "CWops",
      "rules_url": "https://cwops.org/cwops-tests/",
      "verified": true,
      "note": "",
      "exchange": "Members: name + CWops number. Non-members: name + state/province/DX prefix.",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "cwops-cwt-20261008T0300@contestcal",
      "start_date": "2026-10-08",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "cwops-cwt",
      "name": "CWops Test (CWT)",
      "start": "2026-10-08T07:00:00Z",
      "end": "2026-10-08T08:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "CWops",
      "rules_url": "https://cwops.org/cwops-tests/",
      "verified": true,
      "note": "",
      "exchange": "Members: name + CWops number. Non-members: name + state/province/DX prefix.",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "cwops-cwt-20261008T0700@contestcal",
      "start_date": "2026-10-08",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "nccc-ns-ft4",
      "name": "NCCC FT4 Sprint (FT4 NS)",
      "start": "2026-10-09T01:00:00Z",
      "end": "2026-10-09T01:30:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.5,
      "modes": [
        "FT8/FT4"
      ],
      "submodes": [
        "FT4"
      ],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "Northern California Contest Club (NCCC)",
      "rules_url": "https://www.ncccsprint.com/ft4ns.html",
      "verified": true,
      "note": "NCCC describes these as 'nominal rules' that may be modified on a weekly basis, and runs formal Ladder seasons interspersed with practice weeks. The 30-minute session slot itself is fixed.",
      "exchange": "Grid square (following NA VHF, WW Digi and ARRL IDC practice)",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "nccc-ns-ft4-20261009T0100@contestcal",
      "start_date": "2026-10-09",
      "mode_families": [
        "Digital",
        "FT8/FT4"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "nccc-ns-rtty",
      "name": "NCCC RTTY Sprint (RTTY NS)",
      "start": "2026-10-09T01:45:00Z",
      "end": "2026-10-09T02:15:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.5,
      "modes": [
        "RTTY"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m"
      ],
      "bands_note": "",
      "sponsor": "Northern California Contest Club (NCCC)",
      "rules_url": "https://ncccsprint.com/rttyns.html",
      "verified": true,
      "note": "NCCC describes these as 'nominal rules' that may be modified on a weekly basis, and runs formal Ladder seasons interspersed with practice weeks. The 30-minute session slot itself is fixed.",
      "exchange": "Serial number + name + QTH (both callsigns required in the exchange)",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "nccc-ns-rtty-20261009T0145@contestcal",
      "start_date": "2026-10-09",
      "mode_families": [
        "RTTY",
        "Digital"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "nccc-ns-cw",
      "name": "NCCC Sprint (NS)",
      "start": "2026-10-09T02:30:00Z",
      "end": "2026-10-09T03:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.5,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m"
      ],
      "bands_note": "",
      "sponsor": "Northern California Contest Club (NCCC)",
      "rules_url": "https://ncccsprint.com/rules.html",
      "verified": true,
      "note": "NCCC describes these as 'nominal rules' that may be modified on a weekly basis, and runs formal Ladder seasons interspersed with practice weeks. The 30-minute session slot itself is fixed.",
      "exchange": "Serial number + name + QTH (both callsigns required in the exchange)",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "nccc-ns-cw-20261009T0230@contestcal",
      "start_date": "2026-10-09",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "k1usn-sst",
      "name": "K1USN Slow Speed Test (SST)",
      "start": "2026-10-09T20:00:00Z",
      "end": "2026-10-09T21:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "",
      "sponsor": "K1USN Radio Club",
      "rules_url": "https://www.k1usn.com/sst_rules.html",
      "verified": true,
      "note": "No formal log submission -- participants post scores to 3830scores.com.",
      "exchange": "Name + state/province/DX country",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "k1usn-sst-20261009T2000@contestcal",
      "start_date": "2026-10-09",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "tenten-day-sprint",
      "name": "10-10 International 10-10 Day Sprint",
      "start": "2026-10-10T00:01:00Z",
      "end": "2026-10-10T23:59:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 23.97,
      "modes": [
        "SSB",
        "CW",
        "Digital",
        "RTTY"
      ],
      "submodes": [],
      "bands": [
        "10m"
      ],
      "bands_note": "",
      "sponsor": "10-10 International Net",
      "rules_url": "https://www.ten-ten.org/index.php/activity/qso-party-rules",
      "verified": true,
      "note": "All modes, unlike the two phone-only QSO Parties. Chapter scores may not be assigned for the Sprint.",
      "exchange": "Call sign + name + 10-10 number + QTH (state, province or country). Record 0 if the other station has no 10-10 number.",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-12",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "Anyone may take part, but only members' logs are scored: 'logs will be accepted only from active members as of the date of the event ... Other logs received will be handled as check logs.'",
      "log_due": null,
      "uid": "tenten-day-sprint-20261010T0001@contestcal",
      "start_date": "2026-10-10",
      "mode_families": [
        "CW",
        "SSB",
        "RTTY",
        "Digital"
      ],
      "band_families": [
        "10m"
      ],
      "duration_bucket": "12-24"
    },
    {
      "contest_id": "ocdx-cw",
      "name": "Oceania DX Contest, CW",
      "start": "2026-10-10T06:00:00Z",
      "end": "2026-10-11T06:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 24,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "160M, 80M, 40M, 20M, 15M and 10M (no WARC bands)",
      "sponsor": "Oceania DX Contest Committee",
      "rules_url": "https://www.oceaniadxcontest.com/rules",
      "verified": true,
      "note": "The log deadline is announced each year rather than set as an interval -- 25 October in 2026, 31 October in earlier years -- so this calendar does not compute one. country is 'OC' because the sponsor is a joint VK/ZL committee rather than a national society; see data/sources.md.",
      "exchange": "RS(T) and a progressive serial number starting at 001",
      "country": "OC",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-17",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "ocdx-cw-20261010T0600@contestcal",
      "start_date": "2026-10-10",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "gte24"
    },
    {
      "contest_id": "jarl-acag",
      "name": "All Cities All Counties Contest (ACAG)",
      "start": "2026-10-10T12:00:00Z",
      "end": "2026-10-11T12:00:00Z",
      "start_wall": "2026-10-10T21:00:00",
      "end_wall": "2026-10-11T21:00:00",
      "local_rolling": false,
      "timezone": "Asia/Tokyo",
      "duration_hours": 24,
      "modes": [
        "CW",
        "SSB",
        "FM"
      ],
      "submodes": [
        "AM"
      ],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m",
        "6m",
        "2m",
        "70cm"
      ],
      "bands_note": "1.9 through 430 MHz. The phone all-band category excludes 14 MHz; CW may use it.",
      "sponsor": "JARL",
      "rules_url": "https://www.jarl.org/Japanese/1_Tanoshimo/1-1_Contest/acag_rules.html",
      "verified": true,
      "note": "THE ONLY RULE IN THE CATALOG ANCHORED ON A PUBLIC HOLIDAY AND COUNTED BACKWARDS. Japan's Sports Day is the second Monday of October, and JARL hangs the contest on the weekend before it -- 前々日 and 前日, two days before and one day before. It is encoded exactly that way, with negative day offsets from a Monday anchor, rather than as 'the second full weekend of October', which would be a different rule that happens to agree in some years. Encoded as wall_clock in Asia/Tokyo because that is how JARL states it -- 21時00分（JST） -- rather than converted to a fixed UTC time by hand. Japan has not observed daylight saving since 1952, so the two are identical in practice and will stay so; the record says what the sponsor said and lets the engine do the arithmetic. log_deadline_days is absent. JARL prints a dated deadline above the rules for the edition in hand -- ALL JA 2026 is '提出締切日 2026年5月6日（水）必着' -- and the numbered 規約 clauses that follow state the dates, eligibility, bands, categories and exchange but no submission span. All four of JARL's 2026 deadlines happen to fall exactly ten days after their contest ends, which is suggestive and is not a rule JARL wrote. The same reasoning already keeps a deadline off JARL's All Asian records.",
      "exchange": "RST, the city, county or ward number for where you are operating, and one letter for power. Tokyo's Toshima ward at high power sends 59 100116 H.",
      "country": "JP",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-19",
      "can_enter": false,
      "eligibility_scope": "entity_list",
      "eligibility_reason": "Entry limited to JA. K stations may be worked but cannot submit an entry.",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "jarl-acag-20261010T1200@contestcal",
      "start_date": "2026-10-10",
      "mode_families": [
        "CW",
        "SSB",
        "FM"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m",
        "6m",
        "VHF+"
      ],
      "duration_bucket": "gte24"
    },
    {
      "contest_id": "skcc-wes",
      "name": "SKCC Weekend Sprintathon (WES)",
      "start": "2026-10-10T12:00:00Z",
      "end": "2026-10-11T23:59:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 35.98,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "Straight Key Century Club",
      "rules_url": "https://www.skccgroup.com/operating_activities/weekend_sprintathon/",
      "verified": true,
      "note": "Older sources describe the anchor as 'the Saturday following the 6th', which differs from '2nd Saturday' in some months. SKCC's current page says 2nd Saturday; re-check if dates drift.",
      "exchange": "RST + state/province/country + name + SKCC number (C/T/S suffix for award holders)",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "skcc-wes-20261010T1200@contestcal",
      "start_date": "2026-10-10",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m",
        "6m"
      ],
      "duration_bucket": "gte24"
    },
    {
      "contest_id": "sac-ssb",
      "name": "Scandinavian Activity Contest, SSB",
      "start": "2026-10-10T12:00:00Z",
      "end": "2026-10-11T11:59:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 23.98,
      "modes": [
        "SSB"
      ],
      "submodes": [],
      "bands": [
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "3600-3650, 3700-3800, 7060-7100, 7130-7200, 14125-14300, 21151-21450, 28320-29000 kHz",
      "sponsor": "NRAU",
      "rules_url": "https://www.sactest.net/blog/rules/",
      "verified": true,
      "note": "FOUND BECAUSE A BLOCKED ORGANISATION STOPPED BEING ASKED WHAT ELSE IT RUNS. NRAU is recorded in this registry as blocked, correctly: nrau.net says its contest information is under revision and publishes no rules for NRAU-Baltic or the Nordic Activity Contests. But NRAU also organises this, its flagship, and it publishes complete rules at a domain of its own. SAC appeared nowhere in the registry at all until the 2026-08-21 gap audit.\n\nTHE PAGE IS HEADED 2023 AND THE RULE IS STATED AS STANDING. The recurrence sentences say 'each year', which is the form this catalog trusts -- the same form ARRL's generic calendar uses -- and they reproduce that page's own 2023 dates. Re-read when NRAU publishes a newer edition.",
      "exchange": "RS(T) plus a serial number starting at 001.",
      "country": "SE",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-21",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": "2026-10-16T11:59:00Z",
      "uid": "sac-ssb-20261010T1200@contestcal",
      "start_date": "2026-10-10",
      "mode_families": [
        "SSB"
      ],
      "band_families": [
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "12-24"
    },
    {
      "contest_id": "podxs-160m-great-pumpkin",
      "name": "PODXS 070 Club 160M Great Pumpkin Sprint",
      "start": "2026-10-10T20:00:00Z",
      "end": "2026-10-11T19:59:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 23.98,
      "modes": [
        "Digital"
      ],
      "submodes": [
        "PSK31"
      ],
      "bands": [
        "160m"
      ],
      "bands_note": "",
      "sponsor": "PODXS 070 Club",
      "rules_url": "https://www.podxs070.com/o7o-club-sponsored-contests/160m-great-pumpkin-sprint",
      "verified": true,
      "note": "The rules page writes the close as '2000 UTC' while the club's contest calendar gives 'Ends 1959 UTC 11-Oct-2026'. Encoded as 1959, matching the calendar and the identical wording used for the 40 m and 80 m sprints. One minute; flagged rather than silently reconciled.",
      "exchange": "State/province/country (SPC)",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-12",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": "2026-10-18T19:59:00Z",
      "uid": "podxs-160m-great-pumpkin-20261010T2000@contestcal",
      "start_date": "2026-10-10",
      "mode_families": [
        "Digital"
      ],
      "band_families": [
        "160m"
      ],
      "duration_bucket": "12-24"
    },
    {
      "contest_id": "uba-on-80-40-cw",
      "name": "UBA ON Contest, 80m/40m CW",
      "start": "2026-10-11T06:00:00Z",
      "end": "2026-10-11T10:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 4,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "80m",
        "40m"
      ],
      "bands_note": "",
      "sponsor": "UBA",
      "rules_url": "https://www.uba.be/en/hf/contest-rules/on-contest",
      "verified": true,
      "note": "MANUAL, DELIBERATELY: UBA gives four dated legs and no recurrence rule -- the page identifies the event only as 'the 46th edition'. The 2026 legs fall on consecutive Sundays from the last Sunday of September, but UBA states no ordinal, so none is asserted here. log_deadline_days is exact: UBA prints a deadline date beside each leg and all four are the leg's date plus five days.",
      "exchange": "Stations in Belgium send RS(T) + a QSO number from 001 + their UBA section (non-members give XXX, the national club stations give UBA); stations outside Belgium send RS(T) + a QSO number from 001.",
      "country": "BE",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-18",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": "2026-10-16T10:00:00Z",
      "uid": "uba-on-80-40-cw-20261011T0600@contestcal",
      "start_date": "2026-10-11",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "80m",
        "40m"
      ],
      "duration_bucket": "2-12"
    },
    {
      "contest_id": "4sqrp-sss",
      "name": "4 States QRP Group Second Sunday Sprint (SSS)",
      "start": "2026-10-12T00:00:00Z",
      "end": "2026-10-12T02:00:00Z",
      "start_wall": "2026-10-11T19:00:00",
      "end_wall": "2026-10-11T21:00:00",
      "local_rolling": false,
      "timezone": "America/Chicago",
      "duration_hours": 2,
      "modes": [
        "CW",
        "SSB",
        "Digital"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "",
      "sponsor": "4 States QRP Group",
      "rules_url": "https://www.4sqrp.com/SSS/sss_rules_revised_02_2026.pdf",
      "verified": true,
      "note": "SPONSOR-ANCHORED LOCAL TIME. The anchor is the second SUNDAY and the sprint runs into Monday UTC. 4SQRP states the consequence itself: '7 PM until 9 PM central time (CST or CDT, whichever is in effect at the time). If you use UTC, that time changes when we switch from CST to CDT (or vice versa).' Resolved through America/Chicago, so it is 0100Z Monday in winter and 0000Z Monday in summer.",
      "exchange": "RST + state/province/country + 4SQRP member number (power if non-member)",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "4sqrp-sss-20261012T0000@contestcal",
      "start_date": "2026-10-12",
      "mode_families": [
        "CW",
        "SSB",
        "Digital"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "2-12"
    },
    {
      "contest_id": "k1usn-sst",
      "name": "K1USN Slow Speed Test (SST)",
      "start": "2026-10-12T00:00:00Z",
      "end": "2026-10-12T01:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "",
      "sponsor": "K1USN Radio Club",
      "rules_url": "https://www.k1usn.com/sst_rules.html",
      "verified": true,
      "note": "No formal log submission -- participants post scores to 3830scores.com.",
      "exchange": "Name + state/province/DX country",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "k1usn-sst-20261012T0000@contestcal",
      "start_date": "2026-10-12",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "agcw-zap-merit",
      "name": "AGCW ZAP Merit Contest (ZMC)",
      "start": "2026-10-12T17:40:00Z",
      "end": "2026-10-12T18:30:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.83,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "80m"
      ],
      "bands_note": "",
      "sponsor": "AGCW-DL",
      "rules_url": "https://www.agcw.de/contest/tzap/",
      "verified": false,
      "note": "PARTLY UNVERIFIED. The recurrence (every Monday), the 1740 UTC pre-logging opening and the 1800 UTC telegram transmission are all quoted from AGCW. AGCW publishes NO closing time. The 1830 end stored here is a PLACEHOLDER so the record expands -- it is not a sponsor fact and must not be presented as one. Confirm the session length with the ZMC manager before shipping. Points accumulate over a calendar year; logs are due 31 January of the following year.",
      "exchange": "Callsign + date + time + RST (SWLs log RST of both stations in a QSO)",
      "country": "DE",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-12",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "agcw-zap-merit-20261012T1740@contestcal",
      "start_date": "2026-10-12",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "80m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "darc-rtty-kurzcontest",
      "name": "DARC RTTY-Kurzcontest",
      "start": "2026-10-13T18:00:00Z",
      "end": "2026-10-13T19:29:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1.48,
      "modes": [
        "RTTY"
      ],
      "submodes": [
        "RTTY 45.45 baud"
      ],
      "bands": [
        "80m",
        "40m"
      ],
      "bands_note": "",
      "sponsor": "DARC",
      "rules_url": "https://www.darc.de/der-club/referate/conteste/rtty-kurz/rtty-rules/",
      "verified": true,
      "note": "Four legs a year, one record, offset one month from the FT4 contest: RTTY takes the first month of each quarter and FT4 the second, both on the second Tuesday.",
      "exchange": "RST + DOK; German non-members send 'NM'. Stations outside Germany send RST + serial from 001.",
      "country": "DE",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-18",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": "2026-10-20T19:29:00Z",
      "uid": "darc-rtty-kurzcontest-20261013T1800@contestcal",
      "start_date": "2026-10-13",
      "mode_families": [
        "RTTY",
        "Digital"
      ],
      "band_families": [
        "80m",
        "40m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "early-morning-coffee-qso-party",
      "name": "Early Morning Coffee QSO Party",
      "start": "2026-10-14T04:00:00Z",
      "end": "2026-10-14T05:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "SSB"
      ],
      "submodes": [],
      "bands": [
        "80m",
        "40m"
      ],
      "bands_note": "80 m: 3 603-3 650 and 3 703-3 800 kHz, with 3 651-3 699 kHz contest free. 40 m: 7 063-7 100 and 7 130-7 200 kHz, with 7 100-7 130 kHz contest free.",
      "sponsor": "Bo Karoo Amateur Radio Club",
      "rules_url": "https://mysarl.org.za/wp-content/uploads/2025/12/2026-SARL-Contest-Manual-Version-1.1-2025-12-15.pdf",
      "verified": true,
      "note": "An hour at 0400 UTC, which is 0600 local -- the earliest start of any contest in this catalog, and the point of it. Two months a year rather than monthly, which is what monthly_nth_weekday's `months` field carries. SOURCED FROM THE SARL CONTEST MANUAL, WHICH IS NOT AN AGGREGATOR. The manual carries this contest's FULL rules -- aim, dates, exchange, frequencies, scoring, log sheets -- and names its organising club, rather than summarising a calendar entry. It is the venue in which South African clubs publish their contest rules, the way DARC's Ausschreibungen or UBA's rules pages are, so it is a primary source for these contests and not a third-party listing. The distinction that matters: an aggregator republishes rules it found elsewhere, and this is where the rules appear.",
      "exchange": "Your call sign, an RS report, your grid square, your age category and your name.",
      "country": "ZA",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-19",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "early-morning-coffee-qso-party-20261014T0400@contestcal",
      "start_date": "2026-10-14",
      "mode_families": [
        "SSB"
      ],
      "band_families": [
        "80m",
        "40m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "cwops-cwt",
      "name": "CWops Test (CWT)",
      "start": "2026-10-14T13:00:00Z",
      "end": "2026-10-14T14:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "CWops",
      "rules_url": "https://cwops.org/cwops-tests/",
      "verified": true,
      "note": "",
      "exchange": "Members: name + CWops number. Non-members: name + state/province/DX prefix.",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "cwops-cwt-20261014T1300@contestcal",
      "start_date": "2026-10-14",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "cwops-cwt",
      "name": "CWops Test (CWT)",
      "start": "2026-10-14T19:00:00Z",
      "end": "2026-10-14T20:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "CWops",
      "rules_url": "https://cwops.org/cwops-tests/",
      "verified": true,
      "note": "",
      "exchange": "Members: name + CWops number. Non-members: name + state/province/DX prefix.",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "cwops-cwt-20261014T1900@contestcal",
      "start_date": "2026-10-14",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "rsgb-autumn-data",
      "name": "RSGB 3.5 MHz Autumn Series, Data",
      "start": "2026-10-14T19:00:00Z",
      "end": "2026-10-14T20:30:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1.5,
      "modes": [
        "RTTY",
        "Digital"
      ],
      "submodes": [
        "PSK63"
      ],
      "bands": [
        "80m"
      ],
      "bands_note": "PSK63 3580-3590 kHz; RTTY 3590-3620 kHz.",
      "sponsor": "RSGB Contest Committee",
      "rules_url": "https://www.rsgbcc.org/hf/rules/2026/rautumn.shtml",
      "verified": true,
      "note": "THE CLOCK MOVES IN NOVEMBER AND THE RECORD SAYS SO PER DATE. September and October run 1900-2030 UTC; November runs 2000-2130. Every leg of this series sits on one side or the other of that change, so a single stored time would put two of the three runnings on the calendar an hour wrong.\n\nThis is the first use of PER-DATE TIMES in a manual rule, a schema question NEEDS_A_HUMAN had been carrying since the REP FT4 series hit the same wall. The alternative was one record per clock time -- six records for a nine-leg series the sponsor treats as one -- or one record per leg, which is nine. Splitting by MODE is the split a reader actually wants, because the mode filter is what they reach for, and per-date times are what make that split possible without lying about an hour.\n\nMANUAL BECAUSE RSGB PUBLISHES DATES AND NO RULE for this series. The legs fall on Mondays, Wednesdays and Thursdays with no discernible ordinal, which is exactly the shape an ordinal must not be fitted to.\n\nNON-UK STATIONS MAY ENTER AS INDIVIDUALS -- RSGB states it outright, which is worth noting beside the AFS and Club Calls contests where entry really is UK&CD only.",
      "exchange": "RS(T) plus a serial number starting at 1 and incrementing by 1.",
      "country": "GB",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-23",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": "2026-10-17T20:30:00Z",
      "uid": "rsgb-autumn-data-20261014T1900@contestcal",
      "start_date": "2026-10-14",
      "mode_families": [
        "RTTY",
        "Digital"
      ],
      "band_families": [
        "80m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "cwops-cwt",
      "name": "CWops Test (CWT)",
      "start": "2026-10-15T03:00:00Z",
      "end": "2026-10-15T04:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "CWops",
      "rules_url": "https://cwops.org/cwops-tests/",
      "verified": true,
      "note": "",
      "exchange": "Members: name + CWops number. Non-members: name + state/province/DX prefix.",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "cwops-cwt-20261015T0300@contestcal",
      "start_date": "2026-10-15",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "cwops-cwt",
      "name": "CWops Test (CWT)",
      "start": "2026-10-15T07:00:00Z",
      "end": "2026-10-15T08:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "CWops",
      "rules_url": "https://cwops.org/cwops-tests/",
      "verified": true,
      "note": "",
      "exchange": "Members: name + CWops number. Non-members: name + state/province/DX prefix.",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "cwops-cwt-20261015T0700@contestcal",
      "start_date": "2026-10-15",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "nccc-ns-ft4",
      "name": "NCCC FT4 Sprint (FT4 NS)",
      "start": "2026-10-16T01:00:00Z",
      "end": "2026-10-16T01:30:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.5,
      "modes": [
        "FT8/FT4"
      ],
      "submodes": [
        "FT4"
      ],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "Northern California Contest Club (NCCC)",
      "rules_url": "https://www.ncccsprint.com/ft4ns.html",
      "verified": true,
      "note": "NCCC describes these as 'nominal rules' that may be modified on a weekly basis, and runs formal Ladder seasons interspersed with practice weeks. The 30-minute session slot itself is fixed.",
      "exchange": "Grid square (following NA VHF, WW Digi and ARRL IDC practice)",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "nccc-ns-ft4-20261016T0100@contestcal",
      "start_date": "2026-10-16",
      "mode_families": [
        "Digital",
        "FT8/FT4"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "nccc-ns-rtty",
      "name": "NCCC RTTY Sprint (RTTY NS)",
      "start": "2026-10-16T01:45:00Z",
      "end": "2026-10-16T02:15:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.5,
      "modes": [
        "RTTY"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m"
      ],
      "bands_note": "",
      "sponsor": "Northern California Contest Club (NCCC)",
      "rules_url": "https://ncccsprint.com/rttyns.html",
      "verified": true,
      "note": "NCCC describes these as 'nominal rules' that may be modified on a weekly basis, and runs formal Ladder seasons interspersed with practice weeks. The 30-minute session slot itself is fixed.",
      "exchange": "Serial number + name + QTH (both callsigns required in the exchange)",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "nccc-ns-rtty-20261016T0145@contestcal",
      "start_date": "2026-10-16",
      "mode_families": [
        "RTTY",
        "Digital"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "nccc-ns-cw",
      "name": "NCCC Sprint (NS)",
      "start": "2026-10-16T02:30:00Z",
      "end": "2026-10-16T03:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.5,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m"
      ],
      "bands_note": "",
      "sponsor": "Northern California Contest Club (NCCC)",
      "rules_url": "https://ncccsprint.com/rules.html",
      "verified": true,
      "note": "NCCC describes these as 'nominal rules' that may be modified on a weekly basis, and runs formal Ladder seasons interspersed with practice weeks. The 30-minute session slot itself is fixed.",
      "exchange": "Serial number + name + QTH (both callsigns required in the exchange)",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "nccc-ns-cw-20261016T0230@contestcal",
      "start_date": "2026-10-16",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "k1usn-sst",
      "name": "K1USN Slow Speed Test (SST)",
      "start": "2026-10-16T20:00:00Z",
      "end": "2026-10-16T21:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "",
      "sponsor": "K1USN Radio Club",
      "rules_url": "https://www.k1usn.com/sst_rules.html",
      "verified": true,
      "note": "No formal log submission -- participants post scores to 3830scores.com.",
      "exchange": "Name + state/province/DX country",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "k1usn-sst-20261016T2000@contestcal",
      "start_date": "2026-10-16",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "jarl-ww-rtty",
      "name": "JARL World Wide RTTY Contest",
      "start": "2026-10-17T00:00:00Z",
      "end": "2026-10-19T00:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 48,
      "modes": [
        "RTTY"
      ],
      "submodes": [
        "Baudot"
      ],
      "bands": [
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "3.5, 7, 14, 21 and 28 MHz",
      "sponsor": "JARL",
      "rules_url": "https://www.jarl.org/English/4_Library/A-4-3_Contests/rtty_rules_en.html",
      "verified": true,
      "note": "",
      "exchange": "RST and the operator's age; 01 (or 00 or 99) may be sent instead. Multi-operator stations send the average age of the operators.",
      "country": "JP",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-17",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": "2026-10-29T00:00:00Z",
      "uid": "jarl-ww-rtty-20261017T0000@contestcal",
      "start_date": "2026-10-17",
      "mode_families": [
        "RTTY",
        "Digital"
      ],
      "band_families": [
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "gte24"
    },
    {
      "contest_id": "darc-ausbildungscontest",
      "name": "DARC Ausbildungscontest",
      "start": "2026-10-17T12:00:00Z",
      "end": "2026-10-17T14:29:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 2.48,
      "modes": [
        "SSB",
        "CW"
      ],
      "submodes": [],
      "bands": [
        "80m",
        "40m"
      ],
      "bands_note": "",
      "sponsor": "DARC",
      "rules_url": "https://www.darc.de/der-club/referate/conteste/ausbildungscontest/ac-ausschreibung/",
      "verified": true,
      "note": "A TRAINING CONTEST, AND THE CATEGORIES ARE THE POINT: newcomers on training callsigns are placed against each other rather than against experienced stations, and everyone else is there to give them contacts.\n\nMANUAL BECAUSE DARC STATES NO RECURRENCE for it. 17 October 2026 is the third Saturday, which is the kind of coincidence that invites an ordinal, and one date cannot support one. A second year's table settles it.",
      "exchange": "RS(T) and the sender's DOK for DARC and VFDB members; German non-members send RS(T) and 'NM'; stations outside Germany send RS(T) and a serial from 001.",
      "country": "DE",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-23",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "darc-ausbildungscontest-20261017T1200@contestcal",
      "start_date": "2026-10-17",
      "mode_families": [
        "CW",
        "SSB"
      ],
      "band_families": [
        "80m",
        "40m"
      ],
      "duration_bucket": "2-12"
    },
    {
      "contest_id": "stew-perry",
      "name": "Stew Perry Topband Challenge",
      "start": "2026-10-17T15:00:00Z",
      "end": "2026-10-18T14:59:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 23.98,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m"
      ],
      "bands_note": "160 metres only.",
      "sponsor": "Boring Amateur Radio Club",
      "rules_url": "https://www.kkn.net/stew/stew_rules.html",
      "verified": false,
      "note": "MANUAL, BECAUSE THE CLUB PUBLISHES DATES AND NOT A RULE. All four 2026 runnings fall on a Saturday, but no single ordinal describes them -- March's is the second Saturday, June's the third, October's the third and December's the fourth. The record holds exactly what the club published and produces nothing for 2027 until somebody reads their next list, which is the same treatment the NCJ Sprints get and for the same reason.\n\nMarked unverified because ONE year's dates cannot confirm a pattern that does not exist. It becomes verified when a second year's list is read and the record still only claims what was printed.\n\nThe grid-square exchange is the point of the contest: scoring is by distance, so a short haul into a rare square can outscore a long one.",
      "exchange": "A four-character grid square, for example CN85.",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-21",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": "2026-11-01T14:59:00Z",
      "uid": "stew-perry-20261017T1500@contestcal",
      "start_date": "2026-10-17",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m"
      ],
      "duration_bucket": "12-24"
    },
    {
      "contest_id": "darc-wag",
      "name": "Worked All Germany Contest (WAG)",
      "start": "2026-10-17T15:00:00Z",
      "end": "2026-10-18T14:59:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 23.98,
      "modes": [
        "SSB",
        "CW"
      ],
      "submodes": [],
      "bands": [
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "",
      "sponsor": "DARC",
      "rules_url": "https://www.darc.de/der-club/referate/conteste/wag-contest/regeln/",
      "verified": true,
      "note": "DARC's English-language pages call this 'this contest on the third weekend of October'; the Ausschreibung says 'drittes volles Wochenende', and the full-weekend reading is what is encoded. DARC's printed deadline is a German local-time instant -- 25.10.26, 23.59 ME(S)Z -- while the stored interval lands on the same date at the contest's own end time.",
      "exchange": "German stations send RS(T) + their DOK, or 'NM' if they are not a DARC or VFDB member. Stations outside Germany send RS(T) + serial number.",
      "country": "DE",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-18",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": "2026-10-25T14:59:00Z",
      "uid": "darc-wag-20261017T1500@contestcal",
      "start_date": "2026-10-17",
      "mode_families": [
        "CW",
        "SSB"
      ],
      "band_families": [
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "12-24"
    },
    {
      "contest_id": "uba-on-2m",
      "name": "UBA ON Contest, 2m",
      "start": "2026-10-18T07:00:00Z",
      "end": "2026-10-18T10:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 3,
      "modes": [
        "SSB",
        "CW"
      ],
      "submodes": [],
      "bands": [
        "2m"
      ],
      "bands_note": "",
      "sponsor": "UBA",
      "rules_url": "https://www.uba.be/en/hf/contest-rules/on-contest",
      "verified": true,
      "note": "MANUAL, DELIBERATELY: UBA gives four dated legs and no recurrence rule -- the page identifies the event only as 'the 46th edition'. The 2026 legs fall on consecutive Sundays from the last Sunday of September, but UBA states no ordinal, so none is asserted here. log_deadline_days is exact: UBA prints a deadline date beside each leg and all four are the leg's date plus five days.",
      "exchange": "Stations in Belgium send RS(T) + a QSO number from 001 + their UBA section (non-members give XXX, the national club stations give UBA); stations outside Belgium send RS(T) + a QSO number from 001.",
      "country": "BE",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-18",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": "2026-10-23T10:00:00Z",
      "uid": "uba-on-2m-20261018T0700@contestcal",
      "start_date": "2026-10-18",
      "mode_families": [
        "CW",
        "SSB"
      ],
      "band_families": [
        "VHF+"
      ],
      "duration_bucket": "2-12"
    },
    {
      "contest_id": "k1usn-sst",
      "name": "K1USN Slow Speed Test (SST)",
      "start": "2026-10-19T00:00:00Z",
      "end": "2026-10-19T01:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "",
      "sponsor": "K1USN Radio Club",
      "rules_url": "https://www.k1usn.com/sst_rules.html",
      "verified": true,
      "note": "No formal log submission -- participants post scores to 3830scores.com.",
      "exchange": "Name + state/province/DX country",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "k1usn-sst-20261019T0000@contestcal",
      "start_date": "2026-10-19",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "agcw-zap-merit",
      "name": "AGCW ZAP Merit Contest (ZMC)",
      "start": "2026-10-19T17:40:00Z",
      "end": "2026-10-19T18:30:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.83,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "80m"
      ],
      "bands_note": "",
      "sponsor": "AGCW-DL",
      "rules_url": "https://www.agcw.de/contest/tzap/",
      "verified": false,
      "note": "PARTLY UNVERIFIED. The recurrence (every Monday), the 1740 UTC pre-logging opening and the 1800 UTC telegram transmission are all quoted from AGCW. AGCW publishes NO closing time. The 1830 end stored here is a PLACEHOLDER so the record expands -- it is not a sponsor fact and must not be presented as one. Confirm the session length with the ZMC manager before shipping. Points accumulate over a calendar year; logs are due 31 January of the following year.",
      "exchange": "Callsign + date + time + RST (SWLs log RST of both stations in a QSO)",
      "country": "DE",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-12",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "agcw-zap-merit-20261019T1740@contestcal",
      "start_date": "2026-10-19",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "80m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "cwops-cwt",
      "name": "CWops Test (CWT)",
      "start": "2026-10-21T13:00:00Z",
      "end": "2026-10-21T14:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "CWops",
      "rules_url": "https://cwops.org/cwops-tests/",
      "verified": true,
      "note": "",
      "exchange": "Members: name + CWops number. Non-members: name + state/province/DX prefix.",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "cwops-cwt-20261021T1300@contestcal",
      "start_date": "2026-10-21",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "sarl-club-80m",
      "name": "SARL Wednesday 80 m Club Contest",
      "start": "2026-10-21T17:00:00Z",
      "end": "2026-10-21T18:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "SSB",
        "CW",
        "RTTY"
      ],
      "submodes": [],
      "bands": [
        "80m"
      ],
      "bands_note": "Phone 3 603-3 650 and 3 703-3 800 kHz; CW 3 510-3 560 kHz; RTTY 3 580-3 600 kHz. The segment 3 651-3 700 kHz is contest free.",
      "sponsor": "SARL",
      "rules_url": "https://mysarl.org.za/wp-content/uploads/2025/12/2026-SARL-Contest-Manual-Version-1.1-2025-12-15.pdf",
      "verified": true,
      "note": "A club championship rather than an individual contest: operators' scores are added into a club total. The month list is SARL's own -- these run in four months of the year, not every month -- which is what monthly_nth_weekday's `months` field exists for. log_format and log_deadline_days are absent: this pass read each contest's Aim, Dates, Frequencies and Exchange sections and did not read its Log Sheets section, so neither is recorded rather than assumed from SARL's other contests.\n\nPROVENANCE RESTORED 2026-08-23. This record carried verified: true with an EMPTY source_note -- one of three the 2026-08-21 rule audit found, and a stricter defect than the thin ARRL notes beside them: an empty string is not weak evidence, it is none, and there was nothing in the record to check a rule against. The rule, the times, the bands and the exchange were all correct; only the evidence for them was missing. Re-read from the manual and quoted above, and SARL's own printed 2026 dates reproduce it.",
      "exchange": "Your name, your Abbreviated Club Callsign and your 4-character grid square (for example KG30).",
      "country": "ZA",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-23",
      "can_enter": false,
      "eligibility_scope": "entity_list",
      "eligibility_reason": "Entry limited to ZS. K stations may be worked but cannot submit an entry.",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "sarl-club-80m-20261021T1700@contestcal",
      "start_date": "2026-10-21",
      "mode_families": [
        "CW",
        "SSB",
        "RTTY",
        "Digital"
      ],
      "band_families": [
        "80m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "agcw-sta",
      "name": "AGCW Schlackertastenabend (STA)",
      "start": "2026-10-21T19:00:00Z",
      "end": "2026-10-21T20:30:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1.5,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "80m",
        "40m"
      ],
      "bands_note": "",
      "sponsor": "AGCW-DL",
      "rules_url": "https://www.agcw.de/contest/sta/",
      "verified": true,
      "note": "AGCW's own 'nächster Termin: 21. Okt. 2026' is the independent check on the October leg -- the third Wednesday of October 2026 is indeed the 21st.",
      "exchange": "RST + running QSO number from 001 per year + type of bug used",
      "country": "DE",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-12",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "agcw-sta-20261021T1900@contestcal",
      "start_date": "2026-10-21",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "80m",
        "40m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "cwops-cwt",
      "name": "CWops Test (CWT)",
      "start": "2026-10-21T19:00:00Z",
      "end": "2026-10-21T20:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "CWops",
      "rules_url": "https://cwops.org/cwops-tests/",
      "verified": true,
      "note": "",
      "exchange": "Members: name + CWops number. Non-members: name + state/province/DX prefix.",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "cwops-cwt-20261021T1900@contestcal",
      "start_date": "2026-10-21",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "irts-80m-counties",
      "name": "IRTS 80m Counties Contest",
      "start": "2026-10-21T20:00:00Z",
      "end": "2026-10-21T21:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW",
        "SSB"
      ],
      "submodes": [],
      "bands": [
        "80m"
      ],
      "bands_note": "CW 3510-3560 kHz; SSB 3600-3650 and 3700-3775 kHz.",
      "sponsor": "IRTS",
      "rules_url": "https://www.irts.ie/cgi/st.cgi?r_hfcrules.html",
      "verified": true,
      "note": "THIS RECORD WAS WRONG IN EVERY FIELD THAT MATTERED AND IS REWRITTEN. It was carried as the third Sunday of June, 1300-1500 UTC, with NO source_note at all -- a stub whose rule, month, weekday, hour and duration were all invented. IRTS runs it three times a year for ONE HOUR each: 1 January, 18 March and 21 October in 2026. Nothing about the old record survived contact with the sponsor's own calendar.\n\nIt was flagged `verified: false` throughout, which is the only reason it was not a lie -- and it is exactly why the registry entry said 'that record is unverified; source it'. An unverified record is a promise to come back, and this is what coming back found.\n\nMANUAL, AND THE NEW YEAR ROUND KEEPS ITS OWN HOUR. The January running is at 1700 UTC and the other two at 2000, so the record's default is 2000 and 1 January carries an override. There is no ordinal to derive: a fixed New Year's Day round and two Wednesday evenings in March and October are not one pattern.",
      "exchange": "EI and GI stations send a signal report, a serial number starting at 001 and their county. Everyone else sends the report and serial only.",
      "country": "IE",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-23",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "irts-80m-counties-20261021T2000@contestcal",
      "start_date": "2026-10-21",
      "mode_families": [
        "CW",
        "SSB"
      ],
      "band_families": [
        "80m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "cwops-cwt",
      "name": "CWops Test (CWT)",
      "start": "2026-10-22T03:00:00Z",
      "end": "2026-10-22T04:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "CWops",
      "rules_url": "https://cwops.org/cwops-tests/",
      "verified": true,
      "note": "",
      "exchange": "Members: name + CWops number. Non-members: name + state/province/DX prefix.",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "cwops-cwt-20261022T0300@contestcal",
      "start_date": "2026-10-22",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "cwops-cwt",
      "name": "CWops Test (CWT)",
      "start": "2026-10-22T07:00:00Z",
      "end": "2026-10-22T08:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "CWops",
      "rules_url": "https://cwops.org/cwops-tests/",
      "verified": true,
      "note": "",
      "exchange": "Members: name + CWops number. Non-members: name + state/province/DX prefix.",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "cwops-cwt-20261022T0700@contestcal",
      "start_date": "2026-10-22",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "rsgb-autumn-ssb",
      "name": "RSGB 3.5 MHz Autumn Series, SSB",
      "start": "2026-10-22T19:00:00Z",
      "end": "2026-10-22T20:30:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1.5,
      "modes": [
        "SSB"
      ],
      "submodes": [],
      "bands": [
        "80m"
      ],
      "bands_note": "3600-3775 kHz.",
      "sponsor": "RSGB Contest Committee",
      "rules_url": "https://www.rsgbcc.org/hf/rules/2026/rautumn.shtml",
      "verified": true,
      "note": "THE CLOCK MOVES IN NOVEMBER AND THE RECORD SAYS SO PER DATE. September and October run 1900-2030 UTC; November runs 2000-2130. Every leg of this series sits on one side or the other of that change, so a single stored time would put two of the three runnings on the calendar an hour wrong.\n\nThis is the first use of PER-DATE TIMES in a manual rule, a schema question NEEDS_A_HUMAN had been carrying since the REP FT4 series hit the same wall. The alternative was one record per clock time -- six records for a nine-leg series the sponsor treats as one -- or one record per leg, which is nine. Splitting by MODE is the split a reader actually wants, because the mode filter is what they reach for, and per-date times are what make that split possible without lying about an hour.\n\nMANUAL BECAUSE RSGB PUBLISHES DATES AND NO RULE for this series. The legs fall on Mondays, Wednesdays and Thursdays with no discernible ordinal, which is exactly the shape an ordinal must not be fitted to.\n\nNON-UK STATIONS MAY ENTER AS INDIVIDUALS -- RSGB states it outright, which is worth noting beside the AFS and Club Calls contests where entry really is UK&CD only.",
      "exchange": "RS(T) plus a serial number starting at 1 and incrementing by 1.",
      "country": "GB",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-23",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": "2026-10-25T20:30:00Z",
      "uid": "rsgb-autumn-ssb-20261022T1900@contestcal",
      "start_date": "2026-10-22",
      "mode_families": [
        "SSB"
      ],
      "band_families": [
        "80m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "nccc-ns-ft4",
      "name": "NCCC FT4 Sprint (FT4 NS)",
      "start": "2026-10-23T01:00:00Z",
      "end": "2026-10-23T01:30:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.5,
      "modes": [
        "FT8/FT4"
      ],
      "submodes": [
        "FT4"
      ],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "Northern California Contest Club (NCCC)",
      "rules_url": "https://www.ncccsprint.com/ft4ns.html",
      "verified": true,
      "note": "NCCC describes these as 'nominal rules' that may be modified on a weekly basis, and runs formal Ladder seasons interspersed with practice weeks. The 30-minute session slot itself is fixed.",
      "exchange": "Grid square (following NA VHF, WW Digi and ARRL IDC practice)",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "nccc-ns-ft4-20261023T0100@contestcal",
      "start_date": "2026-10-23",
      "mode_families": [
        "Digital",
        "FT8/FT4"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "nccc-ns-rtty",
      "name": "NCCC RTTY Sprint (RTTY NS)",
      "start": "2026-10-23T01:45:00Z",
      "end": "2026-10-23T02:15:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.5,
      "modes": [
        "RTTY"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m"
      ],
      "bands_note": "",
      "sponsor": "Northern California Contest Club (NCCC)",
      "rules_url": "https://ncccsprint.com/rttyns.html",
      "verified": true,
      "note": "NCCC describes these as 'nominal rules' that may be modified on a weekly basis, and runs formal Ladder seasons interspersed with practice weeks. The 30-minute session slot itself is fixed.",
      "exchange": "Serial number + name + QTH (both callsigns required in the exchange)",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "nccc-ns-rtty-20261023T0145@contestcal",
      "start_date": "2026-10-23",
      "mode_families": [
        "RTTY",
        "Digital"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "nccc-ns-cw",
      "name": "NCCC Sprint (NS)",
      "start": "2026-10-23T02:30:00Z",
      "end": "2026-10-23T03:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.5,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m"
      ],
      "bands_note": "",
      "sponsor": "Northern California Contest Club (NCCC)",
      "rules_url": "https://ncccsprint.com/rules.html",
      "verified": true,
      "note": "NCCC describes these as 'nominal rules' that may be modified on a weekly basis, and runs formal Ladder seasons interspersed with practice weeks. The 30-minute session slot itself is fixed.",
      "exchange": "Serial number + name + QTH (both callsigns required in the exchange)",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "nccc-ns-cw-20261023T0230@contestcal",
      "start_date": "2026-10-23",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "k1usn-sst",
      "name": "K1USN Slow Speed Test (SST)",
      "start": "2026-10-23T20:00:00Z",
      "end": "2026-10-23T21:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "",
      "sponsor": "K1USN Radio Club",
      "rules_url": "https://www.k1usn.com/sst_rules.html",
      "verified": true,
      "note": "No formal log submission -- participants post scores to 3830scores.com.",
      "exchange": "Name + state/province/DX country",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "k1usn-sst-20261023T2000@contestcal",
      "start_date": "2026-10-23",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "cq-ww-ssb",
      "name": "CQ Worldwide DX Contest, SSB",
      "start": "2026-10-24T00:00:00Z",
      "end": "2026-10-25T23:59:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 47.98,
      "modes": [
        "SSB"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "Six bands only: 1.8, 3.5, 7, 14, 21 and 28 MHz",
      "sponsor": "CQ Magazine",
      "rules_url": "https://cqww.com/rules.htm",
      "verified": true,
      "note": "CQ has not published 2026 CQ WW rules: cqww.com/rules.htm still serves the 2025 rules and cqww.com/rules/2026_rules_cqww.pdf is a 404. log_deadline_days is the 5 days those 2025 rules state; CQ WPX, CQ WPX RTTY and CQ WW RTTY all moved to 48 hours for 2026, so recheck this when the 2026 rules appear.",
      "exchange": "RS report plus CQ Zone number of the station location",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-16",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": "2026-10-30T23:59:00Z",
      "uid": "cq-ww-ssb-20261024T0000@contestcal",
      "start_date": "2026-10-24",
      "mode_families": [
        "SSB"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "gte24"
    },
    {
      "contest_id": "k1usn-sst",
      "name": "K1USN Slow Speed Test (SST)",
      "start": "2026-10-26T00:00:00Z",
      "end": "2026-10-26T01:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "",
      "sponsor": "K1USN Radio Club",
      "rules_url": "https://www.k1usn.com/sst_rules.html",
      "verified": true,
      "note": "No formal log submission -- participants post scores to 3830scores.com.",
      "exchange": "Name + state/province/DX country",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "k1usn-sst-20261026T0000@contestcal",
      "start_date": "2026-10-26",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "agcw-zap-merit",
      "name": "AGCW ZAP Merit Contest (ZMC)",
      "start": "2026-10-26T17:40:00Z",
      "end": "2026-10-26T18:30:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.83,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "80m"
      ],
      "bands_note": "",
      "sponsor": "AGCW-DL",
      "rules_url": "https://www.agcw.de/contest/tzap/",
      "verified": false,
      "note": "PARTLY UNVERIFIED. The recurrence (every Monday), the 1740 UTC pre-logging opening and the 1800 UTC telegram transmission are all quoted from AGCW. AGCW publishes NO closing time. The 1830 end stored here is a PLACEHOLDER so the record expands -- it is not a sponsor fact and must not be presented as one. Confirm the session length with the ZMC manager before shipping. Points accumulate over a calendar year; logs are due 31 January of the following year.",
      "exchange": "Callsign + date + time + RST (SWLs log RST of both stations in a QSO)",
      "country": "DE",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-12",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "agcw-zap-merit-20261026T1740@contestcal",
      "start_date": "2026-10-26",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "80m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "rsgb-ft4-series",
      "name": "RSGB FT4 Contest Series",
      "start": "2026-10-26T20:00:00Z",
      "end": "2026-10-26T22:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 2,
      "modes": [
        "FT8/FT4"
      ],
      "submodes": [
        "FT4"
      ],
      "bands": [
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "80, 40, 20, 15 and 10 m.",
      "sponsor": "RSGB Contest Committee",
      "rules_url": "https://www.rsgbcc.org/hf/rules/2026/r80m_ft4.shtml",
      "verified": true,
      "note": "TWELVE MONDAY EVENINGS AND THE CLOCK SHIFTS FOR THE SUMMER: January to March and October to December run 2000-2200 UTC, April to September run 1900-2100. Six legs each way, so the record's default is the winter clock and the summer legs carry their own -- the third contest to need per-date times, after the Autumn Series and the 80m Club Championship.\n\nMANUAL BECAUSE THE DATES ARE NOT ON THE RULES PAGE and follow no ordinal: they are Mondays, but the third Monday in January, the fourth in February, the third in March. RSGB publishes them on its CGI calendar and this record holds what that prints.\n\nNot the same contest as the FT4 International Activity Day in April, which is 24 hours and has its own rules page.",
      "exchange": "A signal report. A serial number is not required.",
      "country": "GB",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-23",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": "2026-10-27T22:00:00Z",
      "uid": "rsgb-ft4-series-20261026T2000@contestcal",
      "start_date": "2026-10-26",
      "mode_families": [
        "Digital",
        "FT8/FT4"
      ],
      "band_families": [
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "2-12"
    },
    {
      "contest_id": "skcc-sks",
      "name": "SKCC Straight Key Sprint (SKS)",
      "start": "2026-10-28T00:00:00Z",
      "end": "2026-10-28T02:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 2,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m",
        "6m"
      ],
      "bands_note": "Suggested frequencies, one per band",
      "sponsor": "Straight Key Century Club",
      "rules_url": "https://www.skccgroup.com/operating_activities/weekday_sprint/",
      "verified": true,
      "note": "",
      "exchange": "RST + QTH + name + SKCC number",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "skcc-sks-20261028T0000@contestcal",
      "start_date": "2026-10-28",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m",
        "6m"
      ],
      "duration_bucket": "2-12"
    },
    {
      "contest_id": "cwops-cwt",
      "name": "CWops Test (CWT)",
      "start": "2026-10-28T13:00:00Z",
      "end": "2026-10-28T14:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "CWops",
      "rules_url": "https://cwops.org/cwops-tests/",
      "verified": true,
      "note": "",
      "exchange": "Members: name + CWops number. Non-members: name + state/province/DX prefix.",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "cwops-cwt-20261028T1300@contestcal",
      "start_date": "2026-10-28",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "cwops-cwt",
      "name": "CWops Test (CWT)",
      "start": "2026-10-28T19:00:00Z",
      "end": "2026-10-28T20:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "CWops",
      "rules_url": "https://cwops.org/cwops-tests/",
      "verified": true,
      "note": "",
      "exchange": "Members: name + CWops number. Non-members: name + state/province/DX prefix.",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "cwops-cwt-20261028T1900@contestcal",
      "start_date": "2026-10-28",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "cwops-cwt",
      "name": "CWops Test (CWT)",
      "start": "2026-10-29T03:00:00Z",
      "end": "2026-10-29T04:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "CWops",
      "rules_url": "https://cwops.org/cwops-tests/",
      "verified": true,
      "note": "",
      "exchange": "Members: name + CWops number. Non-members: name + state/province/DX prefix.",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "cwops-cwt-20261029T0300@contestcal",
      "start_date": "2026-10-29",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "cwops-cwt",
      "name": "CWops Test (CWT)",
      "start": "2026-10-29T07:00:00Z",
      "end": "2026-10-29T08:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "CWops",
      "rules_url": "https://cwops.org/cwops-tests/",
      "verified": true,
      "note": "",
      "exchange": "Members: name + CWops number. Non-members: name + state/province/DX prefix.",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "cwops-cwt-20261029T0700@contestcal",
      "start_date": "2026-10-29",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "nccc-ns-ft4",
      "name": "NCCC FT4 Sprint (FT4 NS)",
      "start": "2026-10-30T01:00:00Z",
      "end": "2026-10-30T01:30:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.5,
      "modes": [
        "FT8/FT4"
      ],
      "submodes": [
        "FT4"
      ],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "Northern California Contest Club (NCCC)",
      "rules_url": "https://www.ncccsprint.com/ft4ns.html",
      "verified": true,
      "note": "NCCC describes these as 'nominal rules' that may be modified on a weekly basis, and runs formal Ladder seasons interspersed with practice weeks. The 30-minute session slot itself is fixed.",
      "exchange": "Grid square (following NA VHF, WW Digi and ARRL IDC practice)",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "nccc-ns-ft4-20261030T0100@contestcal",
      "start_date": "2026-10-30",
      "mode_families": [
        "Digital",
        "FT8/FT4"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "nccc-ns-rtty",
      "name": "NCCC RTTY Sprint (RTTY NS)",
      "start": "2026-10-30T01:45:00Z",
      "end": "2026-10-30T02:15:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.5,
      "modes": [
        "RTTY"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m"
      ],
      "bands_note": "",
      "sponsor": "Northern California Contest Club (NCCC)",
      "rules_url": "https://ncccsprint.com/rttyns.html",
      "verified": true,
      "note": "NCCC describes these as 'nominal rules' that may be modified on a weekly basis, and runs formal Ladder seasons interspersed with practice weeks. The 30-minute session slot itself is fixed.",
      "exchange": "Serial number + name + QTH (both callsigns required in the exchange)",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "nccc-ns-rtty-20261030T0145@contestcal",
      "start_date": "2026-10-30",
      "mode_families": [
        "RTTY",
        "Digital"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "nccc-ns-cw",
      "name": "NCCC Sprint (NS)",
      "start": "2026-10-30T02:30:00Z",
      "end": "2026-10-30T03:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.5,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m"
      ],
      "bands_note": "",
      "sponsor": "Northern California Contest Club (NCCC)",
      "rules_url": "https://ncccsprint.com/rules.html",
      "verified": true,
      "note": "NCCC describes these as 'nominal rules' that may be modified on a weekly basis, and runs formal Ladder seasons interspersed with practice weeks. The 30-minute session slot itself is fixed.",
      "exchange": "Serial number + name + QTH (both callsigns required in the exchange)",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "nccc-ns-cw-20261030T0230@contestcal",
      "start_date": "2026-10-30",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "k1usn-sst",
      "name": "K1USN Slow Speed Test (SST)",
      "start": "2026-10-30T20:00:00Z",
      "end": "2026-10-30T21:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "",
      "sponsor": "K1USN Radio Club",
      "rules_url": "https://www.k1usn.com/sst_rules.html",
      "verified": true,
      "note": "No formal log submission -- participants post scores to 3830scores.com.",
      "exchange": "Name + state/province/DX country",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "k1usn-sst-20261030T2000@contestcal",
      "start_date": "2026-10-30",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "sarl-vhf-uhf-fm",
      "name": "SARL VHF/UHF FM Mode Contest",
      "start": "2026-10-31T10:00:00Z",
      "end": "2026-10-31T13:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 3,
      "modes": [
        "FM"
      ],
      "submodes": [],
      "bands": [
        "6m",
        "2m",
        "70cm"
      ],
      "bands_note": "FM mode on the 6m, 2m and 70cm bands.",
      "sponsor": "SARL",
      "rules_url": "https://mysarl.org.za/wp-content/uploads/2025/12/2026-SARL-Contest-Manual-Version-1.1-2025-12-15.pdf",
      "verified": true,
      "note": "THE RECORD THAT PUT FM IN THE MODE VOCABULARY. This contest is FM ONLY, and until 2026-08-19 this catalog had no FM token -- it used SSB as a general phone token, which was serviceable while every phone contest also allowed SSB. Recording an FM-only contest as SSB would have stated something SARL does not permit, which is precisely the overstatement the mode rules exist to prevent, so FM was added to CATALOG_MODES in both engines and to the filter families instead. Ten records that had been carrying FM in submodes moved it into modes in the same commit.\n\nTwo legs on one record: both run 10:00-13:00 UTC and differ only in their anchor, and the anchors are different SHAPES -- the second Saturday of June and the LAST Saturday of October -- which a composite holds without trouble.\n\nSARL explains the timing: 'The dates are three weeks after the RAE Radio Amateur Examination', which is why the contest is aimed at newly licensed amateurs. That is context rather than a rule; the ordinals are what is encoded.\n\nNo log deadline was read in this pass, so none is recorded.",
      "exchange": "A signal report and your full six-character Maidenhead locator. When working a mobile station the contesting station must obtain its grid position.",
      "country": "ZA",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-19",
      "can_enter": false,
      "eligibility_scope": "entity_list",
      "eligibility_reason": "Entry limited to ZS, V5, A2, Z2, C9, 7P, 3DA. K stations may be worked but cannot submit an entry.",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "sarl-vhf-uhf-fm-20261031T1000@contestcal",
      "start_date": "2026-10-31",
      "mode_families": [
        "FM"
      ],
      "band_families": [
        "6m",
        "VHF+"
      ],
      "duration_bucket": "2-12"
    },
    {
      "contest_id": "ukei-dx-ssb",
      "name": "UK/EI DX Contest, SSB",
      "start": "2026-10-31T12:00:00Z",
      "end": "2026-11-01T12:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 24,
      "modes": [
        "SSB"
      ],
      "submodes": [],
      "bands": [
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "3.5, 7, 14, 21 and 28 MHz.",
      "sponsor": "UK/EI Contest Club",
      "rules_url": "https://www.ukeicc.com/dx-contest-rules.php",
      "verified": true,
      "note": "MANUAL, AND THE SSB LEG IS WHY BOTH ARE. UKEICC publishes three years of dates and states no recurrence anywhere: CW on 26 Apr 2025, 25 Apr 2026 and 24 Apr 2027; SSB on 1 Nov 2025, 31 Oct 2026 and 23 Oct 2027.\n\nThe CW dates happen to be the last Saturday of April in all three years. The SSB dates fit nothing at all -- the FIRST Saturday of November, then the FIFTH Saturday of October, then the FOURTH -- not even the same month twice running. So this organiser demonstrably does not schedule by ordinal, which is the strongest possible argument against fitting one to the CW leg because three years happen to agree. Both legs hold exactly the dates UKEICC printed and produce nothing for 2028 until it publishes them.\n\nFOUND THROUGH RSGB'S HF CHAMPIONSHIP TABLE, which lists the eleven contests that count towards it. That page is an award over other contests rather than a contest itself -- the same call already made about the WIA Contest Champion -- but it is an excellent index of what RSGB's season actually contains, and both UK/EI legs were on it.",
      "exchange": "RS(T) and a serial number from 1. Stations in the UK and Ireland add their two-character UK/EI District Code.",
      "country": "GB",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-23",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": "2026-11-02T12:00:00Z",
      "uid": "ukei-dx-ssb-20261031T1200@contestcal",
      "start_date": "2026-10-31",
      "mode_families": [
        "SSB"
      ],
      "band_families": [
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "gte24"
    },
    {
      "contest_id": "k1usn-sst",
      "name": "K1USN Slow Speed Test (SST)",
      "start": "2026-11-02T00:00:00Z",
      "end": "2026-11-02T01:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "",
      "sponsor": "K1USN Radio Club",
      "rules_url": "https://www.k1usn.com/sst_rules.html",
      "verified": true,
      "note": "No formal log submission -- participants post scores to 3830scores.com.",
      "exchange": "Name + state/province/DX country",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "k1usn-sst-20261102T0000@contestcal",
      "start_date": "2026-11-02",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "agcw-zap-merit",
      "name": "AGCW ZAP Merit Contest (ZMC)",
      "start": "2026-11-02T17:40:00Z",
      "end": "2026-11-02T18:30:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.83,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "80m"
      ],
      "bands_note": "",
      "sponsor": "AGCW-DL",
      "rules_url": "https://www.agcw.de/contest/tzap/",
      "verified": false,
      "note": "PARTLY UNVERIFIED. The recurrence (every Monday), the 1740 UTC pre-logging opening and the 1800 UTC telegram transmission are all quoted from AGCW. AGCW publishes NO closing time. The 1830 end stored here is a PLACEHOLDER so the record expands -- it is not a sponsor fact and must not be presented as one. Confirm the session length with the ZMC manager before shipping. Points accumulate over a calendar year; logs are due 31 January of the following year.",
      "exchange": "Callsign + date + time + RST (SWLs log RST of both stations in a QSO)",
      "country": "DE",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-12",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "agcw-zap-merit-20261102T1740@contestcal",
      "start_date": "2026-11-02",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "80m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "rsgb-autumn-data",
      "name": "RSGB 3.5 MHz Autumn Series, Data",
      "start": "2026-11-02T20:00:00Z",
      "end": "2026-11-02T21:30:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1.5,
      "modes": [
        "RTTY",
        "Digital"
      ],
      "submodes": [
        "PSK63"
      ],
      "bands": [
        "80m"
      ],
      "bands_note": "PSK63 3580-3590 kHz; RTTY 3590-3620 kHz.",
      "sponsor": "RSGB Contest Committee",
      "rules_url": "https://www.rsgbcc.org/hf/rules/2026/rautumn.shtml",
      "verified": true,
      "note": "THE CLOCK MOVES IN NOVEMBER AND THE RECORD SAYS SO PER DATE. September and October run 1900-2030 UTC; November runs 2000-2130. Every leg of this series sits on one side or the other of that change, so a single stored time would put two of the three runnings on the calendar an hour wrong.\n\nThis is the first use of PER-DATE TIMES in a manual rule, a schema question NEEDS_A_HUMAN had been carrying since the REP FT4 series hit the same wall. The alternative was one record per clock time -- six records for a nine-leg series the sponsor treats as one -- or one record per leg, which is nine. Splitting by MODE is the split a reader actually wants, because the mode filter is what they reach for, and per-date times are what make that split possible without lying about an hour.\n\nMANUAL BECAUSE RSGB PUBLISHES DATES AND NO RULE for this series. The legs fall on Mondays, Wednesdays and Thursdays with no discernible ordinal, which is exactly the shape an ordinal must not be fitted to.\n\nNON-UK STATIONS MAY ENTER AS INDIVIDUALS -- RSGB states it outright, which is worth noting beside the AFS and Club Calls contests where entry really is UK&CD only.",
      "exchange": "RS(T) plus a serial number starting at 1 and incrementing by 1.",
      "country": "GB",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-23",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": "2026-11-05T21:30:00Z",
      "uid": "rsgb-autumn-data-20261102T2000@contestcal",
      "start_date": "2026-11-02",
      "mode_families": [
        "RTTY",
        "Digital"
      ],
      "band_families": [
        "80m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "ars-spartan-sprint",
      "name": "ARS Spartan Sprint",
      "start": "2026-11-03T01:00:00Z",
      "end": "2026-11-03T03:00:00Z",
      "start_wall": "2026-11-02T20:00:00",
      "end_wall": "2026-11-02T22:00:00",
      "local_rolling": false,
      "timezone": "America/New_York",
      "duration_hours": 2,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "",
      "sponsor": "Adventure Radio Society",
      "rules_url": "https://ars-qrp.com/Spartan_Sprint/Spartan_Sprint.html",
      "verified": true,
      "note": "CORRECTION (anchor): previously encoded as the first TUESDAY of the month. The sponsor's rule is the first MONDAY US local, which lands on Tuesday UTC -- and those are different dates whenever the 1st falls on a Tuesday (Sep and Dec 2026). SPONSOR-ANCHORED LOCAL TIME: ARS publishes no UTC time and states the event 'is always at these Local Times', so the UTC instant is what moves -- 0100Z Tuesday under EST, 0000Z Tuesday under EDT. Resolved through America/New_York rather than hardcoded, so DST is handled. ARS lists Eastern, Central, Mountain and Pacific times that are the same instant in every zone that observes DST; Arizona, which does not, is the one place the sponsor's own table is inconsistent.",
      "exchange": "RST + state/province + power output",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "ars-spartan-sprint-20261103T0100@contestcal",
      "start_date": "2026-11-03",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "2-12"
    },
    {
      "contest_id": "cwops-cwt",
      "name": "CWops Test (CWT)",
      "start": "2026-11-04T13:00:00Z",
      "end": "2026-11-04T14:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "CWops",
      "rules_url": "https://cwops.org/cwops-tests/",
      "verified": true,
      "note": "",
      "exchange": "Members: name + CWops number. Non-members: name + state/province/DX prefix.",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "cwops-cwt-20261104T1300@contestcal",
      "start_date": "2026-11-04",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "cwops-cwt",
      "name": "CWops Test (CWT)",
      "start": "2026-11-04T19:00:00Z",
      "end": "2026-11-04T20:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "CWops",
      "rules_url": "https://cwops.org/cwops-tests/",
      "verified": true,
      "note": "",
      "exchange": "Members: name + CWops number. Non-members: name + state/province/DX prefix.",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "cwops-cwt-20261104T1900@contestcal",
      "start_date": "2026-11-04",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "cwops-cwt",
      "name": "CWops Test (CWT)",
      "start": "2026-11-05T03:00:00Z",
      "end": "2026-11-05T04:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "CWops",
      "rules_url": "https://cwops.org/cwops-tests/",
      "verified": true,
      "note": "",
      "exchange": "Members: name + CWops number. Non-members: name + state/province/DX prefix.",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "cwops-cwt-20261105T0300@contestcal",
      "start_date": "2026-11-05",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "cwops-cwt",
      "name": "CWops Test (CWT)",
      "start": "2026-11-05T07:00:00Z",
      "end": "2026-11-05T08:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "CWops",
      "rules_url": "https://cwops.org/cwops-tests/",
      "verified": true,
      "note": "",
      "exchange": "Members: name + CWops number. Non-members: name + state/province/DX prefix.",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "cwops-cwt-20261105T0700@contestcal",
      "start_date": "2026-11-05",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "skcc-skse",
      "name": "SKCC Straight Key Sprint Europe (SKSE)",
      "start": "2026-11-05T20:00:00Z",
      "end": "2026-11-05T22:00:00Z",
      "start_wall": "2026-11-05T21:00:00",
      "end_wall": "2026-11-05T23:00:00",
      "local_rolling": false,
      "timezone": "Europe/Berlin",
      "duration_hours": 2,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m",
        "6m"
      ],
      "bands_note": "160 through 6 m excluding the WARC bands -- SKCC names 60, 30, 17 and 12 m as excluded.",
      "sponsor": "Straight Key Century Club",
      "rules_url": "https://www.skccgroup.com/operating_activities/skse/",
      "verified": true,
      "note": "SKCC PRINTS TWO UTC TIMES AND THE CONTEST HAS ONE LOCAL TIME. 2000Z from November to March and 1900Z from April to October are both 2100 in central Europe: CET is UTC+1 and CEST is UTC+2. So this is not a contest that changes its hour twice a year, it is a contest at nine in the evening that Europe's clocks move around, and it is recorded the way the sponsor means it -- `timezone: Europe/Berlin` with wall_clock times, exactly as the ARS Spartan Sprint is recorded in New York.\n\nTHAT READING IS TESTABLE AND IT PASSES ON THE MONTHS THAT DECIDE IT. Europe changes clocks on the last Sunday of March and of October, and the first Thursday of both months falls on the near side of the change: March is still CET and resolves to 2000Z, April is CEST and resolves to 1900Z, October is still CEST at 1900Z, November is CET at 2000Z. All four match SKCC's own table, which is what makes this one rule rather than two.\n\nEncoding it as two records split by month -- winter and summer -- would have produced two entries with the same name and hidden the reason. Encoding one UTC time would have been wrong for five months of the year.\n\nStraight keys, sideswipers and bugs only: no keyer, no keyboard. That is the club's whole premise rather than a category.\n\nThe fifteen-minute QRS extensions at each end are not in the window: they are an invitation to slow operators rather than part of the scored period.",
      "exchange": "RST, QTH, the operator's name and the SKCC number. Non-members send 'none' for the number.",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-23",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": "2026-11-12T22:00:00Z",
      "uid": "skcc-skse-20261105T2000@contestcal",
      "start_date": "2026-11-05",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m",
        "6m"
      ],
      "duration_bucket": "2-12"
    },
    {
      "contest_id": "nccc-ns-ft4",
      "name": "NCCC FT4 Sprint (FT4 NS)",
      "start": "2026-11-06T01:00:00Z",
      "end": "2026-11-06T01:30:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.5,
      "modes": [
        "FT8/FT4"
      ],
      "submodes": [
        "FT4"
      ],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "Northern California Contest Club (NCCC)",
      "rules_url": "https://www.ncccsprint.com/ft4ns.html",
      "verified": true,
      "note": "NCCC describes these as 'nominal rules' that may be modified on a weekly basis, and runs formal Ladder seasons interspersed with practice weeks. The 30-minute session slot itself is fixed.",
      "exchange": "Grid square (following NA VHF, WW Digi and ARRL IDC practice)",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "nccc-ns-ft4-20261106T0100@contestcal",
      "start_date": "2026-11-06",
      "mode_families": [
        "Digital",
        "FT8/FT4"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "nccc-ns-rtty",
      "name": "NCCC RTTY Sprint (RTTY NS)",
      "start": "2026-11-06T01:45:00Z",
      "end": "2026-11-06T02:15:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.5,
      "modes": [
        "RTTY"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m"
      ],
      "bands_note": "",
      "sponsor": "Northern California Contest Club (NCCC)",
      "rules_url": "https://ncccsprint.com/rttyns.html",
      "verified": true,
      "note": "NCCC describes these as 'nominal rules' that may be modified on a weekly basis, and runs formal Ladder seasons interspersed with practice weeks. The 30-minute session slot itself is fixed.",
      "exchange": "Serial number + name + QTH (both callsigns required in the exchange)",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "nccc-ns-rtty-20261106T0145@contestcal",
      "start_date": "2026-11-06",
      "mode_families": [
        "RTTY",
        "Digital"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "nccc-ns-cw",
      "name": "NCCC Sprint (NS)",
      "start": "2026-11-06T02:30:00Z",
      "end": "2026-11-06T03:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.5,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m"
      ],
      "bands_note": "",
      "sponsor": "Northern California Contest Club (NCCC)",
      "rules_url": "https://ncccsprint.com/rules.html",
      "verified": true,
      "note": "NCCC describes these as 'nominal rules' that may be modified on a weekly basis, and runs formal Ladder seasons interspersed with practice weeks. The 30-minute session slot itself is fixed.",
      "exchange": "Serial number + name + QTH (both callsigns required in the exchange)",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "nccc-ns-cw-20261106T0230@contestcal",
      "start_date": "2026-11-06",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "k1usn-sst",
      "name": "K1USN Slow Speed Test (SST)",
      "start": "2026-11-06T20:00:00Z",
      "end": "2026-11-06T21:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "",
      "sponsor": "K1USN Radio Club",
      "rules_url": "https://www.k1usn.com/sst_rules.html",
      "verified": true,
      "note": "No formal log submission -- participants post scores to 3830scores.com.",
      "exchange": "Name + state/province/DX country",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "k1usn-sst-20261106T2000@contestcal",
      "start_date": "2026-11-06",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "erau-es-ll-kv",
      "name": "Estonian HF Cup (ES LL KV)",
      "start": "2026-11-07T08:00:00Z",
      "end": "2026-11-07T08:59:00Z",
      "start_wall": "2026-11-07T10:00:00",
      "end_wall": "2026-11-07T10:59:00",
      "local_rolling": false,
      "timezone": "Europe/Tallinn",
      "duration_hours": 0.98,
      "modes": [
        "CW",
        "SSB"
      ],
      "submodes": [],
      "bands": [
        "80m"
      ],
      "bands_note": "CW below 3600 kHz and SSB above it; 3530-3560 kHz and 3600-3650 kHz are recommended.",
      "sponsor": "ERAU",
      "rules_url": "https://www.erau.ee/images/LL/ES%20LL%20KV%20reeglid.pdf",
      "verified": true,
      "note": "SPONSOR-ANCHORED LOCAL TIME, and ERAU's own calendar proves the reading: 10:00-10:59 Estonian time is 08:00-08:59 UTC in winter (EET) and 07:00-07:59 in summer (EEST), which is exactly the split ERAU prints across the nine stages. The rules give no date rule at all -- 4.2 defers to the calendar plan -- so the dates are manual and taken from ERAU's published 2026 calendar. Eight of the nine are the first Saturday of their month; February's is the second. The log deadline is 'the Thursday of the following week', which is not a fixed number of days from the end of each stage, so it is recorded here rather than as log_deadline_days. Stages 4.3 also splits each hour into four periods; that is a scoring device inside one continuous hour.",
      "exchange": "RS(T) and a continuous serial number from 001.",
      "country": "EE",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-19",
      "can_enter": false,
      "eligibility_scope": "entity_list",
      "eligibility_reason": "Entry limited to ES. K stations may be worked but cannot submit an entry.",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "erau-es-ll-kv-20261107T0800@contestcal",
      "start_date": "2026-11-07",
      "mode_families": [
        "CW",
        "SSB"
      ],
      "band_families": [
        "80m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "sarl-qrp-spring",
      "name": "SARL QRP Contest (Spring leg)",
      "start": "2026-11-07T13:30:00Z",
      "end": "2026-11-07T15:30:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 2,
      "modes": [
        "SSB",
        "CW"
      ],
      "submodes": [],
      "bands": [
        "40m",
        "20m",
        "10m"
      ],
      "bands_note": "40m, 20m and 10m, any of them at any time during the contest. QRP calling frequencies 7.090, 14.285 and 28.360 MHz are suggested.",
      "sponsor": "SARL",
      "rules_url": "https://mysarl.org.za/wp-content/uploads/2025/12/2026-SARL-Contest-Manual-Version-1.1-2025-12-15.pdf",
      "verified": true,
      "note": "The spring leg is the November one -- the seasons are southern hemisphere, so January is summer. One of SARL's four named QRP legs. They are four records rather than one because SARL names four legs by season and they do not share a clock: the Summer and Winter legs run 07:00-09:00 UTC and the Autumn and Spring legs 13:30-15:30, so no single start/end pair covers them. Grouping the two pairs by their times would have been this catalog inventing a structure SARL does not use. log_format and log_deadline_days are absent: this pass read each contest's Aim, Dates, Frequencies and Exchange sections and did not read its Log Sheets section, so neither is recorded rather than assumed from SARL's other contests.",
      "exchange": "Realistic RS(T), 6-character grid square and transmit power in watts (for example 57, KG33uk, 10).",
      "country": "ZA",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-19",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "sarl-qrp-spring-20261107T1330@contestcal",
      "start_date": "2026-11-07",
      "mode_families": [
        "CW",
        "SSB"
      ],
      "band_families": [
        "40m",
        "20m",
        "10m"
      ],
      "duration_bucket": "2-12"
    },
    {
      "contest_id": "arrl-sweepstakes-cw",
      "name": "ARRL November Sweepstakes, CW",
      "start": "2026-11-07T21:00:00Z",
      "end": "2026-11-09T02:59:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 29.98,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "",
      "sponsor": "ARRL",
      "rules_url": "http://www.arrl.org/sweepstakes",
      "verified": true,
      "note": "",
      "exchange": "",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-21",
      "can_enter": true,
      "eligibility_scope": "entity_list",
      "eligibility_reason": "Entry limited to K, VE -- includes K.",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "arrl-sweepstakes-cw-20261107T2100@contestcal",
      "start_date": "2026-11-07",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "gte24"
    },
    {
      "contest_id": "k1usn-sst",
      "name": "K1USN Slow Speed Test (SST)",
      "start": "2026-11-09T00:00:00Z",
      "end": "2026-11-09T01:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "",
      "sponsor": "K1USN Radio Club",
      "rules_url": "https://www.k1usn.com/sst_rules.html",
      "verified": true,
      "note": "No formal log submission -- participants post scores to 3830scores.com.",
      "exchange": "Name + state/province/DX country",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "k1usn-sst-20261109T0000@contestcal",
      "start_date": "2026-11-09",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "4sqrp-sss",
      "name": "4 States QRP Group Second Sunday Sprint (SSS)",
      "start": "2026-11-09T01:00:00Z",
      "end": "2026-11-09T03:00:00Z",
      "start_wall": "2026-11-08T19:00:00",
      "end_wall": "2026-11-08T21:00:00",
      "local_rolling": false,
      "timezone": "America/Chicago",
      "duration_hours": 2,
      "modes": [
        "CW",
        "SSB",
        "Digital"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "",
      "sponsor": "4 States QRP Group",
      "rules_url": "https://www.4sqrp.com/SSS/sss_rules_revised_02_2026.pdf",
      "verified": true,
      "note": "SPONSOR-ANCHORED LOCAL TIME. The anchor is the second SUNDAY and the sprint runs into Monday UTC. 4SQRP states the consequence itself: '7 PM until 9 PM central time (CST or CDT, whichever is in effect at the time). If you use UTC, that time changes when we switch from CST to CDT (or vice versa).' Resolved through America/Chicago, so it is 0100Z Monday in winter and 0000Z Monday in summer.",
      "exchange": "RST + state/province/country + 4SQRP member number (power if non-member)",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "4sqrp-sss-20261109T0100@contestcal",
      "start_date": "2026-11-09",
      "mode_families": [
        "CW",
        "SSB",
        "Digital"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "2-12"
    },
    {
      "contest_id": "agcw-zap-merit",
      "name": "AGCW ZAP Merit Contest (ZMC)",
      "start": "2026-11-09T17:40:00Z",
      "end": "2026-11-09T18:30:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.83,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "80m"
      ],
      "bands_note": "",
      "sponsor": "AGCW-DL",
      "rules_url": "https://www.agcw.de/contest/tzap/",
      "verified": false,
      "note": "PARTLY UNVERIFIED. The recurrence (every Monday), the 1740 UTC pre-logging opening and the 1800 UTC telegram transmission are all quoted from AGCW. AGCW publishes NO closing time. The 1830 end stored here is a PLACEHOLDER so the record expands -- it is not a sponsor fact and must not be presented as one. Confirm the session length with the ZMC manager before shipping. Points accumulate over a calendar year; logs are due 31 January of the following year.",
      "exchange": "Callsign + date + time + RST (SWLs log RST of both stations in a QSO)",
      "country": "DE",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-12",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "agcw-zap-merit-20261109T1740@contestcal",
      "start_date": "2026-11-09",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "80m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "darc-ft4",
      "name": "DARC FT4 Contest",
      "start": "2026-11-10T19:00:00Z",
      "end": "2026-11-10T20:29:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1.48,
      "modes": [
        "FT8/FT4"
      ],
      "submodes": [
        "FT4"
      ],
      "bands": [
        "80m",
        "40m"
      ],
      "bands_note": "80m 3576, 3579 and 3582 kHz USB; 40m 7047.5 kHz USB",
      "sponsor": "DARC",
      "rules_url": "https://www.darc.de/der-club/referate/conteste/ft4-contest/ft4-rules/",
      "verified": true,
      "note": "Four legs a year, one record. DARC heads its 2026 date list 'Termine 2025:' -- the heading is a year out, the dates under it are 2026 and match DARC's KW contest calendar, so the typo is in the heading only.",
      "exchange": "Signal report + four-character grid square (for example JN49, JO61).",
      "country": "DE",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-18",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": "2026-11-17T20:29:00Z",
      "uid": "darc-ft4-20261110T1900@contestcal",
      "start_date": "2026-11-10",
      "mode_families": [
        "Digital",
        "FT8/FT4"
      ],
      "band_families": [
        "80m",
        "40m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "cwops-cwt",
      "name": "CWops Test (CWT)",
      "start": "2026-11-11T13:00:00Z",
      "end": "2026-11-11T14:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "CWops",
      "rules_url": "https://cwops.org/cwops-tests/",
      "verified": true,
      "note": "",
      "exchange": "Members: name + CWops number. Non-members: name + state/province/DX prefix.",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "cwops-cwt-20261111T1300@contestcal",
      "start_date": "2026-11-11",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "cwops-cwt",
      "name": "CWops Test (CWT)",
      "start": "2026-11-11T19:00:00Z",
      "end": "2026-11-11T20:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "CWops",
      "rules_url": "https://cwops.org/cwops-tests/",
      "verified": true,
      "note": "",
      "exchange": "Members: name + CWops number. Non-members: name + state/province/DX prefix.",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "cwops-cwt-20261111T1900@contestcal",
      "start_date": "2026-11-11",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "rsgb-autumn-ssb",
      "name": "RSGB 3.5 MHz Autumn Series, SSB",
      "start": "2026-11-11T20:00:00Z",
      "end": "2026-11-11T21:30:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1.5,
      "modes": [
        "SSB"
      ],
      "submodes": [],
      "bands": [
        "80m"
      ],
      "bands_note": "3600-3775 kHz.",
      "sponsor": "RSGB Contest Committee",
      "rules_url": "https://www.rsgbcc.org/hf/rules/2026/rautumn.shtml",
      "verified": true,
      "note": "THE CLOCK MOVES IN NOVEMBER AND THE RECORD SAYS SO PER DATE. September and October run 1900-2030 UTC; November runs 2000-2130. Every leg of this series sits on one side or the other of that change, so a single stored time would put two of the three runnings on the calendar an hour wrong.\n\nThis is the first use of PER-DATE TIMES in a manual rule, a schema question NEEDS_A_HUMAN had been carrying since the REP FT4 series hit the same wall. The alternative was one record per clock time -- six records for a nine-leg series the sponsor treats as one -- or one record per leg, which is nine. Splitting by MODE is the split a reader actually wants, because the mode filter is what they reach for, and per-date times are what make that split possible without lying about an hour.\n\nMANUAL BECAUSE RSGB PUBLISHES DATES AND NO RULE for this series. The legs fall on Mondays, Wednesdays and Thursdays with no discernible ordinal, which is exactly the shape an ordinal must not be fitted to.\n\nNON-UK STATIONS MAY ENTER AS INDIVIDUALS -- RSGB states it outright, which is worth noting beside the AFS and Club Calls contests where entry really is UK&CD only.",
      "exchange": "RS(T) plus a serial number starting at 1 and incrementing by 1.",
      "country": "GB",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-23",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": "2026-11-14T21:30:00Z",
      "uid": "rsgb-autumn-ssb-20261111T2000@contestcal",
      "start_date": "2026-11-11",
      "mode_families": [
        "SSB"
      ],
      "band_families": [
        "80m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "cwops-cwt",
      "name": "CWops Test (CWT)",
      "start": "2026-11-12T03:00:00Z",
      "end": "2026-11-12T04:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "CWops",
      "rules_url": "https://cwops.org/cwops-tests/",
      "verified": true,
      "note": "",
      "exchange": "Members: name + CWops number. Non-members: name + state/province/DX prefix.",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "cwops-cwt-20261112T0300@contestcal",
      "start_date": "2026-11-12",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "cwops-cwt",
      "name": "CWops Test (CWT)",
      "start": "2026-11-12T07:00:00Z",
      "end": "2026-11-12T08:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "CWops",
      "rules_url": "https://cwops.org/cwops-tests/",
      "verified": true,
      "note": "",
      "exchange": "Members: name + CWops number. Non-members: name + state/province/DX prefix.",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "cwops-cwt-20261112T0700@contestcal",
      "start_date": "2026-11-12",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "nccc-ns-ft4",
      "name": "NCCC FT4 Sprint (FT4 NS)",
      "start": "2026-11-13T01:00:00Z",
      "end": "2026-11-13T01:30:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.5,
      "modes": [
        "FT8/FT4"
      ],
      "submodes": [
        "FT4"
      ],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "Northern California Contest Club (NCCC)",
      "rules_url": "https://www.ncccsprint.com/ft4ns.html",
      "verified": true,
      "note": "NCCC describes these as 'nominal rules' that may be modified on a weekly basis, and runs formal Ladder seasons interspersed with practice weeks. The 30-minute session slot itself is fixed.",
      "exchange": "Grid square (following NA VHF, WW Digi and ARRL IDC practice)",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "nccc-ns-ft4-20261113T0100@contestcal",
      "start_date": "2026-11-13",
      "mode_families": [
        "Digital",
        "FT8/FT4"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "nccc-ns-rtty",
      "name": "NCCC RTTY Sprint (RTTY NS)",
      "start": "2026-11-13T01:45:00Z",
      "end": "2026-11-13T02:15:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.5,
      "modes": [
        "RTTY"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m"
      ],
      "bands_note": "",
      "sponsor": "Northern California Contest Club (NCCC)",
      "rules_url": "https://ncccsprint.com/rttyns.html",
      "verified": true,
      "note": "NCCC describes these as 'nominal rules' that may be modified on a weekly basis, and runs formal Ladder seasons interspersed with practice weeks. The 30-minute session slot itself is fixed.",
      "exchange": "Serial number + name + QTH (both callsigns required in the exchange)",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "nccc-ns-rtty-20261113T0145@contestcal",
      "start_date": "2026-11-13",
      "mode_families": [
        "RTTY",
        "Digital"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "nccc-ns-cw",
      "name": "NCCC Sprint (NS)",
      "start": "2026-11-13T02:30:00Z",
      "end": "2026-11-13T03:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.5,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m"
      ],
      "bands_note": "",
      "sponsor": "Northern California Contest Club (NCCC)",
      "rules_url": "https://ncccsprint.com/rules.html",
      "verified": true,
      "note": "NCCC describes these as 'nominal rules' that may be modified on a weekly basis, and runs formal Ladder seasons interspersed with practice weeks. The 30-minute session slot itself is fixed.",
      "exchange": "Serial number + name + QTH (both callsigns required in the exchange)",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "nccc-ns-cw-20261113T0230@contestcal",
      "start_date": "2026-11-13",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "k1usn-sst",
      "name": "K1USN Slow Speed Test (SST)",
      "start": "2026-11-13T20:00:00Z",
      "end": "2026-11-13T21:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "",
      "sponsor": "K1USN Radio Club",
      "rules_url": "https://www.k1usn.com/sst_rules.html",
      "verified": true,
      "note": "No formal log submission -- participants post scores to 3830scores.com.",
      "exchange": "Name + state/province/DX country",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "k1usn-sst-20261113T2000@contestcal",
      "start_date": "2026-11-13",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "podxs-triple-play",
      "name": "PODXS 070 Club Triple Play Low Band Sprint",
      "start": "2026-11-14T00:00:00Z",
      "end": "2026-11-16T23:59:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 71.98,
      "modes": [
        "Digital"
      ],
      "submodes": [
        "PSK31"
      ],
      "bands": [
        "160m",
        "80m",
        "40m"
      ],
      "bands_note": "",
      "sponsor": "PODXS 070 Club",
      "rules_url": "https://www.podxs070.com/o7o-club-sponsored-contests/triple-play-low-band-sprint",
      "verified": true,
      "note": "Three UTC days, one six-hour block per day -- so 18 hours of operating inside a 72-hour window.",
      "exchange": "State/province/country (SPC)",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-12",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": "2026-11-23T23:59:00Z",
      "uid": "podxs-triple-play-20261114T0000@contestcal",
      "start_date": "2026-11-14",
      "mode_families": [
        "Digital"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m"
      ],
      "duration_bucket": "gte24"
    },
    {
      "contest_id": "wae-dx-rtty",
      "name": "WAE DX Contest RTTY",
      "start": "2026-11-14T00:00:00Z",
      "end": "2026-11-15T23:59:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 47.98,
      "modes": [
        "RTTY"
      ],
      "submodes": [],
      "bands": [
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "",
      "sponsor": "DARC",
      "rules_url": "https://www.darc.de/der-club/referate/conteste/wae-dx-contest/regeln/",
      "verified": true,
      "note": "DARC writes 'zweites Wochenende', not 'zweites volles Wochenende', and November 2026 is the year that separates the two readings: 1 November is a Sunday whose Saturday belongs to October. Counting that orphan Sunday would put the contest on 7-8 November; DARC publishes 14-15 November, so the rule is encoded as the second full weekend.",
      "exchange": "RS/RST + serial from 001. QTC traffic scores additional points; in the RTTY leg every station may send and receive QTCs, at most 10 between any two stations, but the QTC exchange itself must cross continents.",
      "country": "DE",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-18",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": "2026-11-22T23:59:00Z",
      "uid": "wae-dx-rtty-20261114T0000@contestcal",
      "start_date": "2026-11-14",
      "mode_families": [
        "RTTY",
        "Digital"
      ],
      "band_families": [
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "gte24"
    },
    {
      "contest_id": "jidx-phone",
      "name": "Japan International DX Contest, Phone",
      "start": "2026-11-14T07:00:00Z",
      "end": "2026-11-15T13:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 30,
      "modes": [
        "SSB"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "1.8, 3.5, 7, 14, 21 and 28 MHz.",
      "sponsor": "JIDX Contest Committee",
      "rules_url": "https://jidx.org/jidxrule-e.html",
      "verified": true,
      "note": "THE TWO LEGS ARE SIX MONTHS APART AND SHARE EVERYTHING ELSE -- same hours, same bands, same exchange, same second-full-weekend rule. CW runs in April and phone in November, which is the only reason these are two records.\n\nThirty hours rather than a round twenty-four: 0700 Saturday to 1300 Sunday.",
      "exchange": "Japanese stations send RST and their prefecture number, 01 to 50. Everyone else sends RST and their CQ zone.",
      "country": "JP",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-21",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": "2026-12-15T13:00:00Z",
      "uid": "jidx-phone-20261114T0700@contestcal",
      "start_date": "2026-11-14",
      "mode_families": [
        "SSB"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "gte24"
    },
    {
      "contest_id": "ok-om-dx-cw",
      "name": "OK/OM DX Contest, CW",
      "start": "2026-11-14T12:00:00Z",
      "end": "2026-11-15T11:59:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 23.98,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "1.8 through 28 MHz, WARC bands excluded",
      "sponsor": "CRK / SARA",
      "rules_url": "http://www.okomdx.crk.cz/index.php?page=CW-rules-english",
      "verified": true,
      "note": "The parenthetical deadline (22 November 2026, 2359 UTC) is the right date for the seven-day interval but 23:59 rather than the 11:59 that end-plus-7-days gives; the interval is the stated rule, so the interval is encoded. BLOCKER RECORDED, NOT WORKED AROUND: okomdx.crk.cz serves a TLS certificate issued for default.web4u.cz, so HTTPS fails validation and the rules are reachable only over plain HTTP. rules_url is therefore http:// deliberately; it is not an oversight, and the link checker will keep reporting it as such until the Czech Radio Club fixes the host.",
      "exchange": "Non-Czech and Slovak stations send a signal report + a QSO number starting with 001; Czech and Slovak stations send a signal report + their three-letter county code.",
      "country": "CZ",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-18",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": "2026-11-22T11:59:00Z",
      "uid": "ok-om-dx-cw-20261114T1200@contestcal",
      "start_date": "2026-11-14",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "12-24"
    },
    {
      "contest_id": "skcc-wes",
      "name": "SKCC Weekend Sprintathon (WES)",
      "start": "2026-11-14T12:00:00Z",
      "end": "2026-11-15T23:59:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 35.98,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "Straight Key Century Club",
      "rules_url": "https://www.skccgroup.com/operating_activities/weekend_sprintathon/",
      "verified": true,
      "note": "Older sources describe the anchor as 'the Saturday following the 6th', which differs from '2nd Saturday' in some months. SKCC's current page says 2nd Saturday; re-check if dates drift.",
      "exchange": "RST + state/province/country + name + SKCC number (C/T/S suffix for award holders)",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "skcc-wes-20261114T1200@contestcal",
      "start_date": "2026-11-14",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m",
        "6m"
      ],
      "duration_bucket": "gte24"
    },
    {
      "contest_id": "rsgb-club-calls",
      "name": "RSGB Club Calls",
      "start": "2026-11-14T20:00:00Z",
      "end": "2026-11-14T23:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 3,
      "modes": [
        "CW",
        "SSB"
      ],
      "submodes": [],
      "bands": [
        "160m"
      ],
      "bands_note": "CW 1870-1890 kHz, SSB 1892-1990 kHz.",
      "sponsor": "RSGB Contest Committee",
      "rules_url": "https://www.rsgbcc.org/hf/rules/2026/rclubcalls.shtml",
      "verified": true,
      "note": "THIRTY-TWO WATTS, capping the whole contest rather than defining an entry class, which is the point of it rather than a footnote. Every other single-ceiling record here sits at 5 W or 100 W, so 32 is the sort of odd number that invites tidying to 30 -- a test holds it. It shares a top-band weekend neighbourhood with the November 1.8 MHz contest a week later, and the two are different contests with different rules pages. RSGB keeps a rules page per year, so its own dates check its own rule. Four years were read for this record -- 2023, 2024, 2025 and 2026 -- and the recurrence reproduces all of them.",
      "exchange": "RS(T) plus a serial number starting at 1 and incrementing by 1.",
      "country": "GB",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-20",
      "can_enter": false,
      "eligibility_scope": "entity_list",
      "eligibility_reason": "Entry limited to G. K stations may be worked but cannot submit an entry.",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "rsgb-club-calls-20261114T2000@contestcal",
      "start_date": "2026-11-14",
      "mode_families": [
        "CW",
        "SSB"
      ],
      "band_families": [
        "160m"
      ],
      "duration_bucket": "2-12"
    },
    {
      "contest_id": "k1usn-sst",
      "name": "K1USN Slow Speed Test (SST)",
      "start": "2026-11-16T00:00:00Z",
      "end": "2026-11-16T01:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "",
      "sponsor": "K1USN Radio Club",
      "rules_url": "https://www.k1usn.com/sst_rules.html",
      "verified": true,
      "note": "No formal log submission -- participants post scores to 3830scores.com.",
      "exchange": "Name + state/province/DX country",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "k1usn-sst-20261116T0000@contestcal",
      "start_date": "2026-11-16",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "agcw-zap-merit",
      "name": "AGCW ZAP Merit Contest (ZMC)",
      "start": "2026-11-16T17:40:00Z",
      "end": "2026-11-16T18:30:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.83,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "80m"
      ],
      "bands_note": "",
      "sponsor": "AGCW-DL",
      "rules_url": "https://www.agcw.de/contest/tzap/",
      "verified": false,
      "note": "PARTLY UNVERIFIED. The recurrence (every Monday), the 1740 UTC pre-logging opening and the 1800 UTC telegram transmission are all quoted from AGCW. AGCW publishes NO closing time. The 1830 end stored here is a PLACEHOLDER so the record expands -- it is not a sponsor fact and must not be presented as one. Confirm the session length with the ZMC manager before shipping. Points accumulate over a calendar year; logs are due 31 January of the following year.",
      "exchange": "Callsign + date + time + RST (SWLs log RST of both stations in a QSO)",
      "country": "DE",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-12",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "agcw-zap-merit-20261116T1740@contestcal",
      "start_date": "2026-11-16",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "80m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "rsgb-ft4-series",
      "name": "RSGB FT4 Contest Series",
      "start": "2026-11-16T20:00:00Z",
      "end": "2026-11-16T22:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 2,
      "modes": [
        "FT8/FT4"
      ],
      "submodes": [
        "FT4"
      ],
      "bands": [
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "80, 40, 20, 15 and 10 m.",
      "sponsor": "RSGB Contest Committee",
      "rules_url": "https://www.rsgbcc.org/hf/rules/2026/r80m_ft4.shtml",
      "verified": true,
      "note": "TWELVE MONDAY EVENINGS AND THE CLOCK SHIFTS FOR THE SUMMER: January to March and October to December run 2000-2200 UTC, April to September run 1900-2100. Six legs each way, so the record's default is the winter clock and the summer legs carry their own -- the third contest to need per-date times, after the Autumn Series and the 80m Club Championship.\n\nMANUAL BECAUSE THE DATES ARE NOT ON THE RULES PAGE and follow no ordinal: they are Mondays, but the third Monday in January, the fourth in February, the third in March. RSGB publishes them on its CGI calendar and this record holds what that prints.\n\nNot the same contest as the FT4 International Activity Day in April, which is 24 hours and has its own rules page.",
      "exchange": "A signal report. A serial number is not required.",
      "country": "GB",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-23",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": "2026-11-17T22:00:00Z",
      "uid": "rsgb-ft4-series-20261116T2000@contestcal",
      "start_date": "2026-11-16",
      "mode_families": [
        "Digital",
        "FT8/FT4"
      ],
      "band_families": [
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "2-12"
    },
    {
      "contest_id": "darc-hell-kurz",
      "name": "DARC HELL-Kurzcontest",
      "start": "2026-11-17T18:00:00Z",
      "end": "2026-11-17T18:59:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.98,
      "modes": [
        "Digital"
      ],
      "submodes": [
        "Hell"
      ],
      "bands": [],
      "bands_note": "",
      "sponsor": "DARC",
      "rules_url": "https://www.darc.de/der-club/referate/conteste/darc-kw-conteste/kw-conteste/",
      "verified": false,
      "note": "VERIFIED FALSE, AND THE RECURRENCE IS STILL DERIVED FROM DARC'S OWN FOUR DATES. All four are the THIRD TUESDAY of the second month of each quarter -- 17 Feb, 19 May, 18 Aug, 17 Nov 2026 -- which is a clean pattern across four points and sits alongside the RTTY-Kurzcontest (2nd Tuesday, months 1/4/7/10) and the FT4 Contest (2nd Tuesday, months 2/5/8/11) that DARC already runs.\n\nWhat is missing is everything the rules page would give: BANDS ARE UNRECORDED, so every band filter excludes this record, and the exchange and deadline are absent. The mode is taken from the contest's own name. That is why it is unverified: the dates are DARC's, the rule is an inference from them, and the rest is a gap.\n\nWHERE THE BANDS WOULD HAVE BEEN: Not read: this series has no Ausschreibung linked from DARC's table. That sentence sits here rather than in bands_note, because bands_note is for a sponsor's own wording ABOUT a band list and must never stand in for one -- a test enforces it, and it caught this.",
      "exchange": "",
      "country": "DE",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-23",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "darc-hell-kurz-20261117T1800@contestcal",
      "start_date": "2026-11-17",
      "mode_families": [
        "Digital"
      ],
      "band_families": [],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "lral-18-november-80m",
      "name": "LRAL 18 November 80m Contest",
      "start": "2026-11-18T06:00:00Z",
      "end": "2026-11-18T07:59:00Z",
      "start_wall": "2026-11-18T08:00:00",
      "end_wall": "2026-11-18T09:59:00",
      "local_rolling": false,
      "timezone": "Europe/Riga",
      "duration_hours": 1.98,
      "modes": [
        "CW",
        "SSB",
        "FT8/FT4"
      ],
      "submodes": [],
      "bands": [
        "80m"
      ],
      "bands_note": "CW 3515-3580 kHz; SSB 3605-3650 kHz; FT8 3577 kHz.",
      "sponsor": "LRAL",
      "rules_url": "https://lral.lv/hf-80m-nolikums/",
      "verified": true,
      "note": "SPONSOR-ANCHORED LOCAL TIME. LRAL states the schedule 'pec vieteja laika' -- in local time -- and never in UTC, so the record carries timezone Europe/Riga and wall_clock times. The two blocks are encoded as sessions because LRAL puts a gap between them and says the FT8 rounds are a separate contest: 'FT8 tures ir atseviskas sacensibas, dalibnieki, kas starte FT8 darba veida, var startet ari kada no A, B, vai C klasem.' Both sessions carry the record's whole mode list, which the catalog cannot narrow per session; the split is stated here and in bands_note. One nolikums covers both dates, so both records cite the same URL.",
      "exchange": "A serial number and the two-letter Latvian or Riga district code (001 LM). RST may be sent but is not part of the number. The FT8 rounds use signal report and a four-character locator instead.",
      "country": "LV",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-19",
      "can_enter": false,
      "eligibility_scope": "entity_list",
      "eligibility_reason": "Entry limited to YL. K stations may be worked but cannot submit an entry.",
      "works": "everyone",
      "practical": "",
      "log_due": "2026-12-02T07:59:00Z",
      "uid": "lral-18-november-80m-20261118T0600@contestcal",
      "start_date": "2026-11-18",
      "mode_families": [
        "CW",
        "SSB",
        "Digital",
        "FT8/FT4"
      ],
      "band_families": [
        "80m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "lral-18-november-80m",
      "name": "LRAL 18 November 80m Contest",
      "start": "2026-11-18T08:15:00Z",
      "end": "2026-11-18T09:14:00Z",
      "start_wall": "2026-11-18T10:15:00",
      "end_wall": "2026-11-18T11:14:00",
      "local_rolling": false,
      "timezone": "Europe/Riga",
      "duration_hours": 0.98,
      "modes": [
        "CW",
        "SSB",
        "FT8/FT4"
      ],
      "submodes": [],
      "bands": [
        "80m"
      ],
      "bands_note": "CW 3515-3580 kHz; SSB 3605-3650 kHz; FT8 3577 kHz.",
      "sponsor": "LRAL",
      "rules_url": "https://lral.lv/hf-80m-nolikums/",
      "verified": true,
      "note": "SPONSOR-ANCHORED LOCAL TIME. LRAL states the schedule 'pec vieteja laika' -- in local time -- and never in UTC, so the record carries timezone Europe/Riga and wall_clock times. The two blocks are encoded as sessions because LRAL puts a gap between them and says the FT8 rounds are a separate contest: 'FT8 tures ir atseviskas sacensibas, dalibnieki, kas starte FT8 darba veida, var startet ari kada no A, B, vai C klasem.' Both sessions carry the record's whole mode list, which the catalog cannot narrow per session; the split is stated here and in bands_note. One nolikums covers both dates, so both records cite the same URL.",
      "exchange": "A serial number and the two-letter Latvian or Riga district code (001 LM). RST may be sent but is not part of the number. The FT8 rounds use signal report and a four-character locator instead.",
      "country": "LV",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-19",
      "can_enter": false,
      "eligibility_scope": "entity_list",
      "eligibility_reason": "Entry limited to YL. K stations may be worked but cannot submit an entry.",
      "works": "everyone",
      "practical": "",
      "log_due": "2026-12-02T09:14:00Z",
      "uid": "lral-18-november-80m-20261118T0815@contestcal",
      "start_date": "2026-11-18",
      "mode_families": [
        "CW",
        "SSB",
        "Digital",
        "FT8/FT4"
      ],
      "band_families": [
        "80m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "cwops-cwt",
      "name": "CWops Test (CWT)",
      "start": "2026-11-18T13:00:00Z",
      "end": "2026-11-18T14:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "CWops",
      "rules_url": "https://cwops.org/cwops-tests/",
      "verified": true,
      "note": "",
      "exchange": "Members: name + CWops number. Non-members: name + state/province/DX prefix.",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "cwops-cwt-20261118T1300@contestcal",
      "start_date": "2026-11-18",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "cwops-cwt",
      "name": "CWops Test (CWT)",
      "start": "2026-11-18T19:00:00Z",
      "end": "2026-11-18T20:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "CWops",
      "rules_url": "https://cwops.org/cwops-tests/",
      "verified": true,
      "note": "",
      "exchange": "Members: name + CWops number. Non-members: name + state/province/DX prefix.",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "cwops-cwt-20261118T1900@contestcal",
      "start_date": "2026-11-18",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "cwops-cwt",
      "name": "CWops Test (CWT)",
      "start": "2026-11-19T03:00:00Z",
      "end": "2026-11-19T04:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "CWops",
      "rules_url": "https://cwops.org/cwops-tests/",
      "verified": true,
      "note": "",
      "exchange": "Members: name + CWops number. Non-members: name + state/province/DX prefix.",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "cwops-cwt-20261119T0300@contestcal",
      "start_date": "2026-11-19",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "cwops-cwt",
      "name": "CWops Test (CWT)",
      "start": "2026-11-19T07:00:00Z",
      "end": "2026-11-19T08:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "CWops",
      "rules_url": "https://cwops.org/cwops-tests/",
      "verified": true,
      "note": "",
      "exchange": "Members: name + CWops number. Non-members: name + state/province/DX prefix.",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "cwops-cwt-20261119T0700@contestcal",
      "start_date": "2026-11-19",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "nccc-ns-ft4",
      "name": "NCCC FT4 Sprint (FT4 NS)",
      "start": "2026-11-20T01:00:00Z",
      "end": "2026-11-20T01:30:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.5,
      "modes": [
        "FT8/FT4"
      ],
      "submodes": [
        "FT4"
      ],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "Northern California Contest Club (NCCC)",
      "rules_url": "https://www.ncccsprint.com/ft4ns.html",
      "verified": true,
      "note": "NCCC describes these as 'nominal rules' that may be modified on a weekly basis, and runs formal Ladder seasons interspersed with practice weeks. The 30-minute session slot itself is fixed.",
      "exchange": "Grid square (following NA VHF, WW Digi and ARRL IDC practice)",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "nccc-ns-ft4-20261120T0100@contestcal",
      "start_date": "2026-11-20",
      "mode_families": [
        "Digital",
        "FT8/FT4"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "nccc-ns-rtty",
      "name": "NCCC RTTY Sprint (RTTY NS)",
      "start": "2026-11-20T01:45:00Z",
      "end": "2026-11-20T02:15:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.5,
      "modes": [
        "RTTY"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m"
      ],
      "bands_note": "",
      "sponsor": "Northern California Contest Club (NCCC)",
      "rules_url": "https://ncccsprint.com/rttyns.html",
      "verified": true,
      "note": "NCCC describes these as 'nominal rules' that may be modified on a weekly basis, and runs formal Ladder seasons interspersed with practice weeks. The 30-minute session slot itself is fixed.",
      "exchange": "Serial number + name + QTH (both callsigns required in the exchange)",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "nccc-ns-rtty-20261120T0145@contestcal",
      "start_date": "2026-11-20",
      "mode_families": [
        "RTTY",
        "Digital"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "nccc-ns-cw",
      "name": "NCCC Sprint (NS)",
      "start": "2026-11-20T02:30:00Z",
      "end": "2026-11-20T03:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.5,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m"
      ],
      "bands_note": "",
      "sponsor": "Northern California Contest Club (NCCC)",
      "rules_url": "https://ncccsprint.com/rules.html",
      "verified": true,
      "note": "NCCC describes these as 'nominal rules' that may be modified on a weekly basis, and runs formal Ladder seasons interspersed with practice weeks. The 30-minute session slot itself is fixed.",
      "exchange": "Serial number + name + QTH (both callsigns required in the exchange)",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "nccc-ns-cw-20261120T0230@contestcal",
      "start_date": "2026-11-20",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "k1usn-sst",
      "name": "K1USN Slow Speed Test (SST)",
      "start": "2026-11-20T20:00:00Z",
      "end": "2026-11-20T21:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "",
      "sponsor": "K1USN Radio Club",
      "rules_url": "https://www.k1usn.com/sst_rules.html",
      "verified": true,
      "note": "No formal log submission -- participants post scores to 3830scores.com.",
      "exchange": "Name + state/province/DX country",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "k1usn-sst-20261120T2000@contestcal",
      "start_date": "2026-11-20",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "sarl-newbie-qso-party",
      "name": "SARL Newbie QSO Party",
      "start": "2026-11-21T11:00:00Z",
      "end": "2026-11-21T16:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 5,
      "modes": [
        "SSB"
      ],
      "submodes": [],
      "bands": [
        "40m",
        "20m"
      ],
      "bands_note": "SSB only: 14 125-14 300 kHz from 11:00 to 13:00 UTC, then 7 063-7 100 and 7 130-7 200 kHz from 13:00 to 16:00 UTC.",
      "sponsor": "SARL",
      "rules_url": "https://mysarl.org.za/wp-content/uploads/2025/12/2026-SARL-Contest-Manual-Version-1.1-2025-12-15.pdf",
      "verified": true,
      "note": "The band changes partway through: 20 m for the first two hours, then 40 m for the last three. Both are recorded, because a band filter should find this contest either way; the split itself is in bands_note, which is where a time-varying detail belongs when the field is a flat list. log_format and log_deadline_days are absent: this pass read each contest's Aim, Dates, Frequencies and Exchange sections and did not read its Log Sheets section, so neither is recorded rather than assumed from SARL's other contests.",
      "exchange": "RS, a four-character grid square and the phonetic License Age Exchange from the manual's table -- Alpha for under six months, and so on.",
      "country": "ZA",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-19",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "sarl-newbie-qso-party-20261121T1100@contestcal",
      "start_date": "2026-11-21",
      "mode_families": [
        "SSB"
      ],
      "band_families": [
        "40m",
        "20m"
      ],
      "duration_bucket": "2-12"
    },
    {
      "contest_id": "bfra-lz-dx",
      "name": "LZ DX Contest",
      "start": "2026-11-21T12:00:00Z",
      "end": "2026-11-22T11:59:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 23.98,
      "modes": [
        "CW",
        "SSB"
      ],
      "submodes": [],
      "bands": [
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "",
      "sponsor": "BFRA",
      "rules_url": "https://lzdx.bfra.bg/rulesen.html",
      "verified": true,
      "note": "'The weekend before the last full weekend of November' is a rule, not an annual announcement -- BFRA anchors it to CQ WW CW, which sits on the last one -- so it is encoded as n=-2 and this is the record that made the engine count backwards past 'last'. November 2025's full weekends are the 1st/2nd, 8th/9th, 15th/16th, 22nd/23rd and 29th/30th, so n=-2 gives 22-23 November, the date BFRA prints. For 2026 it gives 21-22 November. The log deadline is a stated instant (0000Z on 7 December 2025) and not the contest end plus a whole number of days, so it is recorded here rather than as log_deadline_days. REGISTRY CORRECTION: BFRA is at bfra.bg; the lzdx.bfra.org host that the sponsor's own news page cites does not resolve.",
      "exchange": "Stations outside Bulgaria send RS(T) and their ITU zone; LZ stations send RS(T) and a two-letter district abbreviation.",
      "country": "BG",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-19",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "bfra-lz-dx-20261121T1200@contestcal",
      "start_date": "2026-11-21",
      "mode_families": [
        "CW",
        "SSB"
      ],
      "band_families": [
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "12-24"
    },
    {
      "contest_id": "oevsv-aoec-160m",
      "name": "All Austrian 160m Contest (AOEC 160m)",
      "start": "2026-11-21T16:00:00Z",
      "end": "2026-11-21T23:59:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 7.98,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m"
      ],
      "bands_note": "1810-2000 kHz in the German rules; the English rules say 1810-1950 kHz. Both are OEVSV's own statements and neither has been withdrawn.",
      "sponsor": "ÖVSV",
      "rules_url": "https://www.oevsv.at/export/shared/.content/.galleries/Downloads_Referate/HF-Referat-Downloads/Regeln_Aoec_160m_2025.pdf",
      "verified": true,
      "note": "The third full weekend of November is a rule OEVSV states twice, in German and in English, and it reproduces the date the German edition prints for itself: November 2025's full weekends are the 1st/2nd, 8th/9th and 15th/16th, so the third is Saturday 15 November 2025. For 2026 the 1st is a Sunday whose Saturday belongs to October, so the full weekends start on the 7th/8th and the rule gives Saturday 21 November 2026. CONTRADICTIONS, recorded not reconciled: the German rules say 1810-2000 kHz and the English 1810-1950 kHz; the German rules take logs at aoec-auswertung.oevsv.at and the English at contestrobot.aoec160m.oevsv.at, so neither is encoded as the log_submit_url. The deadline is a fixed date (30 November), not an interval. BLOCKER: OEVSV's HF-Referat page still offers only the 2025 Ausschreibung, so this is the current published document and it is on the pending list to re-read.",
      "exchange": "RST and a serial number; Austrian stations add their OE district identifier.",
      "country": "AT",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-19",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "oevsv-aoec-160m-20261121T1600@contestcal",
      "start_date": "2026-11-21",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m"
      ],
      "duration_bucket": "2-12"
    },
    {
      "contest_id": "ref-160m",
      "name": "REF 160 Metres",
      "start": "2026-11-21T17:00:00Z",
      "end": "2026-11-22T00:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 7,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m"
      ],
      "bands_note": "1810 to 1850 kHz",
      "sponsor": "REF",
      "rules_url": "https://concours.r-e-f.org/reglements/actuels/reg_ref160_fr_20260421.pdf",
      "verified": true,
      "note": "log_deadline_days is derived, not quoted: REF words the deadline as 'le deuxieme lundi apres le concours' and states no hour. The contest ends at 0000 UTC on the Sunday, and that Sunday plus 8 days is the second Monday after the contest in every year, so 8 is exact for the date and silent about the time of day. WORDING DIFFERENCE, RECORDED RATHER THAN RECONCILED: this PDF says 'Troisieme week-end de novembre' while the Coupe du REF PDF, describing the same sub-part in section 1(a), says 'Troisieme week-end entier du mois de novembre'. The two readings cannot diverge -- the third Saturday of November is at most the 21st, so its Sunday is always in November -- so no choice between them was needed.",
      "exchange": "RST + the French department number. French stations record only the serial number given by foreign stations.",
      "country": "FR",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-18",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": "2026-11-30T00:00:00Z",
      "uid": "ref-160m-20261121T1700@contestcal",
      "start_date": "2026-11-21",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m"
      ],
      "duration_bucket": "2-12"
    },
    {
      "contest_id": "rsgb-1_8mhz-second",
      "name": "RSGB 1.8 MHz Contest, November",
      "start": "2026-11-21T20:00:00Z",
      "end": "2026-11-21T23:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 3,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m"
      ],
      "bands_note": "1810-1850 kHz CW. Maximum legal power.",
      "sponsor": "RSGB Contest Committee",
      "rules_url": "https://www.rsgbcc.org/hf/rules/2026/r160m.shtml",
      "verified": true,
      "note": "THE NOVEMBER LEG IS CW ONLY WHILE FEBRUARY'S IS CW AND SSB, which is why these are two records off one rules page rather than one record with two legs: they do not share a mode, and a reader filtering SSB should not be shown this one. The hours moved from 1900-2300 to 2000-2300 in 2025, same as the February leg. RSGB keeps a rules page per year, so its own dates check its own rule. Four years were read for this record -- 2023, 2024, 2025 and 2026 -- and the recurrence reproduces all of them.",
      "exchange": "RST plus a serial number starting at 1 and incrementing by 1.",
      "country": "GB",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-20",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "rsgb-1_8mhz-second-20261121T2000@contestcal",
      "start_date": "2026-11-21",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m"
      ],
      "duration_bucket": "2-12"
    },
    {
      "contest_id": "arrl-sweepstakes-ssb",
      "name": "ARRL November Sweepstakes, Phone",
      "start": "2026-11-21T21:00:00Z",
      "end": "2026-11-23T02:59:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 29.98,
      "modes": [
        "SSB"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "",
      "sponsor": "ARRL",
      "rules_url": "http://www.arrl.org/sweepstakes",
      "verified": true,
      "note": "",
      "exchange": "",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-21",
      "can_enter": true,
      "eligibility_scope": "entity_list",
      "eligibility_reason": "Entry limited to K, VE -- includes K.",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "arrl-sweepstakes-ssb-20261121T2100@contestcal",
      "start_date": "2026-11-21",
      "mode_families": [
        "SSB"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "gte24"
    },
    {
      "contest_id": "k1usn-sst",
      "name": "K1USN Slow Speed Test (SST)",
      "start": "2026-11-23T00:00:00Z",
      "end": "2026-11-23T01:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "",
      "sponsor": "K1USN Radio Club",
      "rules_url": "https://www.k1usn.com/sst_rules.html",
      "verified": true,
      "note": "No formal log submission -- participants post scores to 3830scores.com.",
      "exchange": "Name + state/province/DX country",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "k1usn-sst-20261123T0000@contestcal",
      "start_date": "2026-11-23",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "agcw-zap-merit",
      "name": "AGCW ZAP Merit Contest (ZMC)",
      "start": "2026-11-23T17:40:00Z",
      "end": "2026-11-23T18:30:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.83,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "80m"
      ],
      "bands_note": "",
      "sponsor": "AGCW-DL",
      "rules_url": "https://www.agcw.de/contest/tzap/",
      "verified": false,
      "note": "PARTLY UNVERIFIED. The recurrence (every Monday), the 1740 UTC pre-logging opening and the 1800 UTC telegram transmission are all quoted from AGCW. AGCW publishes NO closing time. The 1830 end stored here is a PLACEHOLDER so the record expands -- it is not a sponsor fact and must not be presented as one. Confirm the session length with the ZMC manager before shipping. Points accumulate over a calendar year; logs are due 31 January of the following year.",
      "exchange": "Callsign + date + time + RST (SWLs log RST of both stations in a QSO)",
      "country": "DE",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-12",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "agcw-zap-merit-20261123T1740@contestcal",
      "start_date": "2026-11-23",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "80m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "skcc-sks",
      "name": "SKCC Straight Key Sprint (SKS)",
      "start": "2026-11-25T00:00:00Z",
      "end": "2026-11-25T02:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 2,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m",
        "6m"
      ],
      "bands_note": "Suggested frequencies, one per band",
      "sponsor": "Straight Key Century Club",
      "rules_url": "https://www.skccgroup.com/operating_activities/weekday_sprint/",
      "verified": true,
      "note": "",
      "exchange": "RST + QTH + name + SKCC number",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "skcc-sks-20261125T0000@contestcal",
      "start_date": "2026-11-25",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m",
        "6m"
      ],
      "duration_bucket": "2-12"
    },
    {
      "contest_id": "cwops-cwt",
      "name": "CWops Test (CWT)",
      "start": "2026-11-25T13:00:00Z",
      "end": "2026-11-25T14:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "CWops",
      "rules_url": "https://cwops.org/cwops-tests/",
      "verified": true,
      "note": "",
      "exchange": "Members: name + CWops number. Non-members: name + state/province/DX prefix.",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "cwops-cwt-20261125T1300@contestcal",
      "start_date": "2026-11-25",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "cwops-cwt",
      "name": "CWops Test (CWT)",
      "start": "2026-11-25T19:00:00Z",
      "end": "2026-11-25T20:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "CWops",
      "rules_url": "https://cwops.org/cwops-tests/",
      "verified": true,
      "note": "",
      "exchange": "Members: name + CWops number. Non-members: name + state/province/DX prefix.",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "cwops-cwt-20261125T1900@contestcal",
      "start_date": "2026-11-25",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "cwops-cwt",
      "name": "CWops Test (CWT)",
      "start": "2026-11-26T03:00:00Z",
      "end": "2026-11-26T04:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "CWops",
      "rules_url": "https://cwops.org/cwops-tests/",
      "verified": true,
      "note": "",
      "exchange": "Members: name + CWops number. Non-members: name + state/province/DX prefix.",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "cwops-cwt-20261126T0300@contestcal",
      "start_date": "2026-11-26",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "cwops-cwt",
      "name": "CWops Test (CWT)",
      "start": "2026-11-26T07:00:00Z",
      "end": "2026-11-26T08:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "CWops",
      "rules_url": "https://cwops.org/cwops-tests/",
      "verified": true,
      "note": "",
      "exchange": "Members: name + CWops number. Non-members: name + state/province/DX prefix.",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "cwops-cwt-20261126T0700@contestcal",
      "start_date": "2026-11-26",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "rsgb-autumn-cw",
      "name": "RSGB 3.5 MHz Autumn Series, CW",
      "start": "2026-11-26T20:00:00Z",
      "end": "2026-11-26T21:30:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1.5,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "80m"
      ],
      "bands_note": "3510-3565 kHz at any speed, with 3565-3570 kHz reserved for 15 wpm maximum.",
      "sponsor": "RSGB Contest Committee",
      "rules_url": "https://www.rsgbcc.org/hf/rules/2026/rautumn.shtml",
      "verified": true,
      "note": "THE CLOCK MOVES IN NOVEMBER AND THE RECORD SAYS SO PER DATE. September and October run 1900-2030 UTC; November runs 2000-2130. Every leg of this series sits on one side or the other of that change, so a single stored time would put two of the three runnings on the calendar an hour wrong.\n\nThis is the first use of PER-DATE TIMES in a manual rule, a schema question NEEDS_A_HUMAN had been carrying since the REP FT4 series hit the same wall. The alternative was one record per clock time -- six records for a nine-leg series the sponsor treats as one -- or one record per leg, which is nine. Splitting by MODE is the split a reader actually wants, because the mode filter is what they reach for, and per-date times are what make that split possible without lying about an hour.\n\nMANUAL BECAUSE RSGB PUBLISHES DATES AND NO RULE for this series. The legs fall on Mondays, Wednesdays and Thursdays with no discernible ordinal, which is exactly the shape an ordinal must not be fitted to.\n\nNON-UK STATIONS MAY ENTER AS INDIVIDUALS -- RSGB states it outright, which is worth noting beside the AFS and Club Calls contests where entry really is UK&CD only.",
      "exchange": "RS(T) plus a serial number starting at 1 and incrementing by 1.",
      "country": "GB",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-23",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": "2026-11-29T21:30:00Z",
      "uid": "rsgb-autumn-cw-20261126T2000@contestcal",
      "start_date": "2026-11-26",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "80m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "nccc-ns-ft4",
      "name": "NCCC FT4 Sprint (FT4 NS)",
      "start": "2026-11-27T01:00:00Z",
      "end": "2026-11-27T01:30:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.5,
      "modes": [
        "FT8/FT4"
      ],
      "submodes": [
        "FT4"
      ],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "Northern California Contest Club (NCCC)",
      "rules_url": "https://www.ncccsprint.com/ft4ns.html",
      "verified": true,
      "note": "NCCC describes these as 'nominal rules' that may be modified on a weekly basis, and runs formal Ladder seasons interspersed with practice weeks. The 30-minute session slot itself is fixed.",
      "exchange": "Grid square (following NA VHF, WW Digi and ARRL IDC practice)",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "nccc-ns-ft4-20261127T0100@contestcal",
      "start_date": "2026-11-27",
      "mode_families": [
        "Digital",
        "FT8/FT4"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "nccc-ns-rtty",
      "name": "NCCC RTTY Sprint (RTTY NS)",
      "start": "2026-11-27T01:45:00Z",
      "end": "2026-11-27T02:15:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.5,
      "modes": [
        "RTTY"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m"
      ],
      "bands_note": "",
      "sponsor": "Northern California Contest Club (NCCC)",
      "rules_url": "https://ncccsprint.com/rttyns.html",
      "verified": true,
      "note": "NCCC describes these as 'nominal rules' that may be modified on a weekly basis, and runs formal Ladder seasons interspersed with practice weeks. The 30-minute session slot itself is fixed.",
      "exchange": "Serial number + name + QTH (both callsigns required in the exchange)",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "nccc-ns-rtty-20261127T0145@contestcal",
      "start_date": "2026-11-27",
      "mode_families": [
        "RTTY",
        "Digital"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "nccc-ns-cw",
      "name": "NCCC Sprint (NS)",
      "start": "2026-11-27T02:30:00Z",
      "end": "2026-11-27T03:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.5,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m"
      ],
      "bands_note": "",
      "sponsor": "Northern California Contest Club (NCCC)",
      "rules_url": "https://ncccsprint.com/rules.html",
      "verified": true,
      "note": "NCCC describes these as 'nominal rules' that may be modified on a weekly basis, and runs formal Ladder seasons interspersed with practice weeks. The 30-minute session slot itself is fixed.",
      "exchange": "Serial number + name + QTH (both callsigns required in the exchange)",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "nccc-ns-cw-20261127T0230@contestcal",
      "start_date": "2026-11-27",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "k1usn-sst",
      "name": "K1USN Slow Speed Test (SST)",
      "start": "2026-11-27T20:00:00Z",
      "end": "2026-11-27T21:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "",
      "sponsor": "K1USN Radio Club",
      "rules_url": "https://www.k1usn.com/sst_rules.html",
      "verified": true,
      "note": "No formal log submission -- participants post scores to 3830scores.com.",
      "exchange": "Name + state/province/DX country",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "k1usn-sst-20261127T2000@contestcal",
      "start_date": "2026-11-27",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "cq-ww-cw",
      "name": "CQ Worldwide DX Contest, CW",
      "start": "2026-11-28T00:00:00Z",
      "end": "2026-11-29T23:59:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 47.98,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "Six bands only: 1.8, 3.5, 7, 14, 21 and 28 MHz",
      "sponsor": "CQ Magazine",
      "rules_url": "https://cqww.com/rules.htm",
      "verified": true,
      "note": "CQ has not published 2026 CQ WW rules: cqww.com/rules.htm still serves the 2025 rules and cqww.com/rules/2026_rules_cqww.pdf is a 404. log_deadline_days is the 5 days those 2025 rules state; CQ WPX, CQ WPX RTTY and CQ WW RTTY all moved to 48 hours for 2026, so recheck this when the 2026 rules appear.",
      "exchange": "RST report plus CQ Zone number of the station location",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-16",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": "2026-12-04T23:59:00Z",
      "uid": "cq-ww-cw-20261128T0000@contestcal",
      "start_date": "2026-11-28",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "gte24"
    },
    {
      "contest_id": "sarl-club-40m",
      "name": "SARL Saturday 40 m Club Contest",
      "start": "2026-11-28T15:00:00Z",
      "end": "2026-11-28T16:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "SSB",
        "CW",
        "RTTY"
      ],
      "submodes": [],
      "bands": [
        "40m"
      ],
      "bands_note": "Phone 7 063-7 100 and 7 130-7 200 kHz; CW 7 000-7 040 kHz; RTTY 7 040-7 060 kHz. The segment 7 101-7 129 kHz is contest free.",
      "sponsor": "SARL",
      "rules_url": "https://mysarl.org.za/wp-content/uploads/2025/12/2026-SARL-Contest-Manual-Version-1.1-2025-12-15.pdf",
      "verified": true,
      "note": "A club championship rather than an individual contest: operators' scores are added into a club total. The month list is SARL's own -- these run in four months of the year, not every month -- which is what monthly_nth_weekday's `months` field exists for. log_format and log_deadline_days are absent: this pass read each contest's Aim, Dates, Frequencies and Exchange sections and did not read its Log Sheets section, so neither is recorded rather than assumed from SARL's other contests.\n\nPROVENANCE RESTORED 2026-08-23. This record carried verified: true with an EMPTY source_note -- one of three the 2026-08-21 rule audit found, and a stricter defect than the thin ARRL notes beside them: an empty string is not weak evidence, it is none, and there was nothing in the record to check a rule against. The rule, the times, the bands and the exchange were all correct; only the evidence for them was missing. Re-read from the manual and quoted above, and SARL's own printed 2026 dates reproduce it.",
      "exchange": "Your name, your Abbreviated Club Callsign and your 4-character grid square (for example KG30).",
      "country": "ZA",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-23",
      "can_enter": false,
      "eligibility_scope": "entity_list",
      "eligibility_reason": "Entry limited to ZS. K stations may be worked but cannot submit an entry.",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "sarl-club-40m-20261128T1500@contestcal",
      "start_date": "2026-11-28",
      "mode_families": [
        "CW",
        "SSB",
        "RTTY",
        "Digital"
      ],
      "band_families": [
        "40m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "k1usn-sst",
      "name": "K1USN Slow Speed Test (SST)",
      "start": "2026-11-30T00:00:00Z",
      "end": "2026-11-30T01:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "",
      "sponsor": "K1USN Radio Club",
      "rules_url": "https://www.k1usn.com/sst_rules.html",
      "verified": true,
      "note": "No formal log submission -- participants post scores to 3830scores.com.",
      "exchange": "Name + state/province/DX country",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "k1usn-sst-20261130T0000@contestcal",
      "start_date": "2026-11-30",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "agcw-zap-merit",
      "name": "AGCW ZAP Merit Contest (ZMC)",
      "start": "2026-11-30T17:40:00Z",
      "end": "2026-11-30T18:30:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.83,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "80m"
      ],
      "bands_note": "",
      "sponsor": "AGCW-DL",
      "rules_url": "https://www.agcw.de/contest/tzap/",
      "verified": false,
      "note": "PARTLY UNVERIFIED. The recurrence (every Monday), the 1740 UTC pre-logging opening and the 1800 UTC telegram transmission are all quoted from AGCW. AGCW publishes NO closing time. The 1830 end stored here is a PLACEHOLDER so the record expands -- it is not a sponsor fact and must not be presented as one. Confirm the session length with the ZMC manager before shipping. Points accumulate over a calendar year; logs are due 31 January of the following year.",
      "exchange": "Callsign + date + time + RST (SWLs log RST of both stations in a QSO)",
      "country": "DE",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-12",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "agcw-zap-merit-20261130T1740@contestcal",
      "start_date": "2026-11-30",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "80m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "cwops-cwt",
      "name": "CWops Test (CWT)",
      "start": "2026-12-02T13:00:00Z",
      "end": "2026-12-02T14:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "CWops",
      "rules_url": "https://cwops.org/cwops-tests/",
      "verified": true,
      "note": "",
      "exchange": "Members: name + CWops number. Non-members: name + state/province/DX prefix.",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "cwops-cwt-20261202T1300@contestcal",
      "start_date": "2026-12-02",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "cwops-cwt",
      "name": "CWops Test (CWT)",
      "start": "2026-12-02T19:00:00Z",
      "end": "2026-12-02T20:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "CWops",
      "rules_url": "https://cwops.org/cwops-tests/",
      "verified": true,
      "note": "",
      "exchange": "Members: name + CWops number. Non-members: name + state/province/DX prefix.",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "cwops-cwt-20261202T1900@contestcal",
      "start_date": "2026-12-02",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "cwops-cwt",
      "name": "CWops Test (CWT)",
      "start": "2026-12-03T03:00:00Z",
      "end": "2026-12-03T04:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "CWops",
      "rules_url": "https://cwops.org/cwops-tests/",
      "verified": true,
      "note": "",
      "exchange": "Members: name + CWops number. Non-members: name + state/province/DX prefix.",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "cwops-cwt-20261203T0300@contestcal",
      "start_date": "2026-12-03",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "cwops-cwt",
      "name": "CWops Test (CWT)",
      "start": "2026-12-03T07:00:00Z",
      "end": "2026-12-03T08:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "CWops",
      "rules_url": "https://cwops.org/cwops-tests/",
      "verified": true,
      "note": "",
      "exchange": "Members: name + CWops number. Non-members: name + state/province/DX prefix.",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "cwops-cwt-20261203T0700@contestcal",
      "start_date": "2026-12-03",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "skcc-skse",
      "name": "SKCC Straight Key Sprint Europe (SKSE)",
      "start": "2026-12-03T20:00:00Z",
      "end": "2026-12-03T22:00:00Z",
      "start_wall": "2026-12-03T21:00:00",
      "end_wall": "2026-12-03T23:00:00",
      "local_rolling": false,
      "timezone": "Europe/Berlin",
      "duration_hours": 2,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m",
        "6m"
      ],
      "bands_note": "160 through 6 m excluding the WARC bands -- SKCC names 60, 30, 17 and 12 m as excluded.",
      "sponsor": "Straight Key Century Club",
      "rules_url": "https://www.skccgroup.com/operating_activities/skse/",
      "verified": true,
      "note": "SKCC PRINTS TWO UTC TIMES AND THE CONTEST HAS ONE LOCAL TIME. 2000Z from November to March and 1900Z from April to October are both 2100 in central Europe: CET is UTC+1 and CEST is UTC+2. So this is not a contest that changes its hour twice a year, it is a contest at nine in the evening that Europe's clocks move around, and it is recorded the way the sponsor means it -- `timezone: Europe/Berlin` with wall_clock times, exactly as the ARS Spartan Sprint is recorded in New York.\n\nTHAT READING IS TESTABLE AND IT PASSES ON THE MONTHS THAT DECIDE IT. Europe changes clocks on the last Sunday of March and of October, and the first Thursday of both months falls on the near side of the change: March is still CET and resolves to 2000Z, April is CEST and resolves to 1900Z, October is still CEST at 1900Z, November is CET at 2000Z. All four match SKCC's own table, which is what makes this one rule rather than two.\n\nEncoding it as two records split by month -- winter and summer -- would have produced two entries with the same name and hidden the reason. Encoding one UTC time would have been wrong for five months of the year.\n\nStraight keys, sideswipers and bugs only: no keyer, no keyboard. That is the club's whole premise rather than a category.\n\nThe fifteen-minute QRS extensions at each end are not in the window: they are an invitation to slow operators rather than part of the scored period.",
      "exchange": "RST, QTH, the operator's name and the SKCC number. Non-members send 'none' for the number.",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-23",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": "2026-12-10T22:00:00Z",
      "uid": "skcc-skse-20261203T2000@contestcal",
      "start_date": "2026-12-03",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m",
        "6m"
      ],
      "duration_bucket": "2-12"
    },
    {
      "contest_id": "nccc-ns-ft4",
      "name": "NCCC FT4 Sprint (FT4 NS)",
      "start": "2026-12-04T01:00:00Z",
      "end": "2026-12-04T01:30:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.5,
      "modes": [
        "FT8/FT4"
      ],
      "submodes": [
        "FT4"
      ],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "Northern California Contest Club (NCCC)",
      "rules_url": "https://www.ncccsprint.com/ft4ns.html",
      "verified": true,
      "note": "NCCC describes these as 'nominal rules' that may be modified on a weekly basis, and runs formal Ladder seasons interspersed with practice weeks. The 30-minute session slot itself is fixed.",
      "exchange": "Grid square (following NA VHF, WW Digi and ARRL IDC practice)",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "nccc-ns-ft4-20261204T0100@contestcal",
      "start_date": "2026-12-04",
      "mode_families": [
        "Digital",
        "FT8/FT4"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "nccc-ns-rtty",
      "name": "NCCC RTTY Sprint (RTTY NS)",
      "start": "2026-12-04T01:45:00Z",
      "end": "2026-12-04T02:15:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.5,
      "modes": [
        "RTTY"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m"
      ],
      "bands_note": "",
      "sponsor": "Northern California Contest Club (NCCC)",
      "rules_url": "https://ncccsprint.com/rttyns.html",
      "verified": true,
      "note": "NCCC describes these as 'nominal rules' that may be modified on a weekly basis, and runs formal Ladder seasons interspersed with practice weeks. The 30-minute session slot itself is fixed.",
      "exchange": "Serial number + name + QTH (both callsigns required in the exchange)",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "nccc-ns-rtty-20261204T0145@contestcal",
      "start_date": "2026-12-04",
      "mode_families": [
        "RTTY",
        "Digital"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "nccc-ns-cw",
      "name": "NCCC Sprint (NS)",
      "start": "2026-12-04T02:30:00Z",
      "end": "2026-12-04T03:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.5,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m"
      ],
      "bands_note": "",
      "sponsor": "Northern California Contest Club (NCCC)",
      "rules_url": "https://ncccsprint.com/rules.html",
      "verified": true,
      "note": "NCCC describes these as 'nominal rules' that may be modified on a weekly basis, and runs formal Ladder seasons interspersed with practice weeks. The 30-minute session slot itself is fixed.",
      "exchange": "Serial number + name + QTH (both callsigns required in the exchange)",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "nccc-ns-cw-20261204T0230@contestcal",
      "start_date": "2026-12-04",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "k1usn-sst",
      "name": "K1USN Slow Speed Test (SST)",
      "start": "2026-12-04T20:00:00Z",
      "end": "2026-12-04T21:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "",
      "sponsor": "K1USN Radio Club",
      "rules_url": "https://www.k1usn.com/sst_rules.html",
      "verified": true,
      "note": "No formal log submission -- participants post scores to 3830scores.com.",
      "exchange": "Name + state/province/DX country",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "k1usn-sst-20261204T2000@contestcal",
      "start_date": "2026-12-04",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "arrl-160m",
      "name": "ARRL 160-Meter Contest",
      "start": "2026-12-04T22:00:00Z",
      "end": "2026-12-06T15:59:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 41.98,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m"
      ],
      "bands_note": "",
      "sponsor": "ARRL",
      "rules_url": "http://www.arrl.org/160-meter",
      "verified": true,
      "note": "",
      "exchange": "",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-21",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "arrl-160m-20261204T2200@contestcal",
      "start_date": "2026-12-04",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m"
      ],
      "duration_bucket": "gte24"
    },
    {
      "contest_id": "uska-weihnachtswettbewerb-ssb",
      "name": "USKA Weihnachtswettbewerb (SSB / Digital)",
      "start": "2026-12-05T07:00:00Z",
      "end": "2026-12-05T09:59:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 2.98,
      "modes": [
        "SSB",
        "RTTY",
        "Digital",
        "FT8/FT4"
      ],
      "submodes": [
        "PSK31",
        "PSK63"
      ],
      "bands": [
        "80m",
        "40m"
      ],
      "bands_note": "",
      "sponsor": "USKA",
      "rules_url": "https://uska.ch/wp-content/uploads/2026/05/2026-04-Reglement-fuer-den-Weihnachtswettbewerb-Ausgabe-Mai-2026-DE.pdf",
      "verified": true,
      "note": "USKA runs the Weihnachtswettbewerb on two Saturdays, and each Saturday is a phone-or-CW morning followed by a separate digital hour. This record is the first Saturday: SSB 07:00-09:59 UTC and digital 10:00-10:59 UTC, encoded as two sessions because the hour between them is not part of the contest. The two Saturdays are two records because they are different modes, not two legs of one event. The first Saturday of December 2026 is the 5th and the second the 12th, the dates USKA's KW-Contest page prints. USKA states no log deadline in this Reglement -- the other three KW Reglemente all say 'innert 8 Tagen' and this one says nothing at all -- so no interval is encoded rather than one borrowed from its siblings.",
      "exchange": "RS(T) and the canton abbreviation.",
      "country": "CH",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-19",
      "can_enter": false,
      "eligibility_scope": "entity_list",
      "eligibility_reason": "Entry limited to HB. K stations may be worked but cannot submit an entry.",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "uska-weihnachtswettbewerb-ssb-20261205T0700@contestcal",
      "start_date": "2026-12-05",
      "mode_families": [
        "SSB",
        "RTTY",
        "Digital",
        "FT8/FT4"
      ],
      "band_families": [
        "80m",
        "40m"
      ],
      "duration_bucket": "2-12"
    },
    {
      "contest_id": "erau-es-ll-kv",
      "name": "Estonian HF Cup (ES LL KV)",
      "start": "2026-12-05T08:00:00Z",
      "end": "2026-12-05T08:59:00Z",
      "start_wall": "2026-12-05T10:00:00",
      "end_wall": "2026-12-05T10:59:00",
      "local_rolling": false,
      "timezone": "Europe/Tallinn",
      "duration_hours": 0.98,
      "modes": [
        "CW",
        "SSB"
      ],
      "submodes": [],
      "bands": [
        "80m"
      ],
      "bands_note": "CW below 3600 kHz and SSB above it; 3530-3560 kHz and 3600-3650 kHz are recommended.",
      "sponsor": "ERAU",
      "rules_url": "https://www.erau.ee/images/LL/ES%20LL%20KV%20reeglid.pdf",
      "verified": true,
      "note": "SPONSOR-ANCHORED LOCAL TIME, and ERAU's own calendar proves the reading: 10:00-10:59 Estonian time is 08:00-08:59 UTC in winter (EET) and 07:00-07:59 in summer (EEST), which is exactly the split ERAU prints across the nine stages. The rules give no date rule at all -- 4.2 defers to the calendar plan -- so the dates are manual and taken from ERAU's published 2026 calendar. Eight of the nine are the first Saturday of their month; February's is the second. The log deadline is 'the Thursday of the following week', which is not a fixed number of days from the end of each stage, so it is recorded here rather than as log_deadline_days. Stages 4.3 also splits each hour into four periods; that is a scoring device inside one continuous hour.",
      "exchange": "RS(T) and a continuous serial number from 001.",
      "country": "EE",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-19",
      "can_enter": false,
      "eligibility_scope": "entity_list",
      "eligibility_reason": "Entry limited to ES. K stations may be worked but cannot submit an entry.",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "erau-es-ll-kv-20261205T0800@contestcal",
      "start_date": "2026-12-05",
      "mode_families": [
        "CW",
        "SSB"
      ],
      "band_families": [
        "80m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "uska-weihnachtswettbewerb-ssb",
      "name": "USKA Weihnachtswettbewerb (SSB / Digital)",
      "start": "2026-12-05T10:00:00Z",
      "end": "2026-12-05T10:59:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.98,
      "modes": [
        "SSB",
        "RTTY",
        "Digital",
        "FT8/FT4"
      ],
      "submodes": [
        "PSK31",
        "PSK63"
      ],
      "bands": [
        "80m",
        "40m"
      ],
      "bands_note": "",
      "sponsor": "USKA",
      "rules_url": "https://uska.ch/wp-content/uploads/2026/05/2026-04-Reglement-fuer-den-Weihnachtswettbewerb-Ausgabe-Mai-2026-DE.pdf",
      "verified": true,
      "note": "USKA runs the Weihnachtswettbewerb on two Saturdays, and each Saturday is a phone-or-CW morning followed by a separate digital hour. This record is the first Saturday: SSB 07:00-09:59 UTC and digital 10:00-10:59 UTC, encoded as two sessions because the hour between them is not part of the contest. The two Saturdays are two records because they are different modes, not two legs of one event. The first Saturday of December 2026 is the 5th and the second the 12th, the dates USKA's KW-Contest page prints. USKA states no log deadline in this Reglement -- the other three KW Reglemente all say 'innert 8 Tagen' and this one says nothing at all -- so no interval is encoded rather than one borrowed from its siblings.",
      "exchange": "RS(T) and the canton abbreviation.",
      "country": "CH",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-19",
      "can_enter": false,
      "eligibility_scope": "entity_list",
      "eligibility_reason": "Entry limited to HB. K stations may be worked but cannot submit an entry.",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "uska-weihnachtswettbewerb-ssb-20261205T1000@contestcal",
      "start_date": "2026-12-05",
      "mode_families": [
        "SSB",
        "RTTY",
        "Digital",
        "FT8/FT4"
      ],
      "band_families": [
        "80m",
        "40m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "arsi-40m-cq-vu-cw",
      "name": "ARSI 40M CQ VU CW Contest",
      "start": "2026-12-05T14:00:00Z",
      "end": "2026-12-06T13:59:00Z",
      "start_wall": "2026-12-05T19:30:00",
      "end_wall": "2026-12-06T19:29:00",
      "local_rolling": false,
      "timezone": "Asia/Kolkata",
      "duration_hours": 23.98,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "40m"
      ],
      "bands_note": "",
      "sponsor": "ARSI",
      "rules_url": "https://arsi.info/40m-cqvu-contest/",
      "verified": true,
      "note": "STATED IN IST ONLY, unlike ARSI's other contests, which give UTC. So this record carries Asia/Kolkata wall clock rather than a UTC time converted by hand -- India is a fixed +05:30 with no daylight saving, so 19:30 IST is 14:00 UTC and always will be, but the record says what the page said. The log deadline is one of the few here stated as a SPAN rather than a date: 'within a week', 'due in 7 days time from the date of contest'. ARSI PUBLISHES DATES, NOT A RECURRENCE. Every one of its contest pages opens with the year's dates and states no rule anywhere -- no 'annually on', no ordinal weekend. So all five records are manual and hold exactly the 2026 editions ARSI published. Fitting an ordinal to one date would be inventing a rule ARSI has not written, and Asia is thin enough that the temptation is worth naming.",
      "exchange": "A serial number starting at 001, with the signal report.",
      "country": "IN",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-19",
      "can_enter": false,
      "eligibility_scope": "entity_list",
      "eligibility_reason": "Entry limited to VU. K stations may be worked but cannot submit an entry.",
      "works": "everyone",
      "practical": "",
      "log_due": "2026-12-13T13:59:00Z",
      "uid": "arsi-40m-cq-vu-cw-20261205T1400@contestcal",
      "start_date": "2026-12-05",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "40m"
      ],
      "duration_bucket": "12-24"
    },
    {
      "contest_id": "ft-roundup",
      "name": "FT Roundup",
      "start": "2026-12-05T18:00:00Z",
      "end": "2026-12-06T23:59:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 29.98,
      "modes": [
        "FT8/FT4"
      ],
      "submodes": [
        "FT4",
        "FT8"
      ],
      "bands": [
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "80 through 10 metres, no WARC bands.",
      "sponsor": "RTTY Contesting",
      "rules_url": "https://www.rttycontesting.com/ft-roundup/rules/",
      "verified": true,
      "note": "THE SPONSOR FIELD IS AN ATTRIBUTION, NOT A QUOTATION. The rules page names no organising body at all -- it credits a wine sponsor for the awards and nothing else -- so 'RTTY Contesting' here is the site that publishes and runs it rather than a society that claims it. Recorded this way for the same reason the OK DX RTTY Contest is: an inferred organiser is better stated than implied. Worth one question to whoever answers the log address.\n\nThe page still shows 2023's dates beside a rule stated in general terms, so the rule is what is encoded. Re-read it nearer December.",
      "exchange": "US and Canadian stations send a signal report and their state or province. Everyone else sends a signal report and a serial number from 001.",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-21",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "ft-roundup-20261205T1800@contestcal",
      "start_date": "2026-12-05",
      "mode_families": [
        "Digital",
        "FT8/FT4"
      ],
      "band_families": [
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "gte24"
    },
    {
      "contest_id": "k1usn-sst",
      "name": "K1USN Slow Speed Test (SST)",
      "start": "2026-12-07T00:00:00Z",
      "end": "2026-12-07T01:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "",
      "sponsor": "K1USN Radio Club",
      "rules_url": "https://www.k1usn.com/sst_rules.html",
      "verified": true,
      "note": "No formal log submission -- participants post scores to 3830scores.com.",
      "exchange": "Name + state/province/DX country",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "k1usn-sst-20261207T0000@contestcal",
      "start_date": "2026-12-07",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "agcw-zap-merit",
      "name": "AGCW ZAP Merit Contest (ZMC)",
      "start": "2026-12-07T17:40:00Z",
      "end": "2026-12-07T18:30:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.83,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "80m"
      ],
      "bands_note": "",
      "sponsor": "AGCW-DL",
      "rules_url": "https://www.agcw.de/contest/tzap/",
      "verified": false,
      "note": "PARTLY UNVERIFIED. The recurrence (every Monday), the 1740 UTC pre-logging opening and the 1800 UTC telegram transmission are all quoted from AGCW. AGCW publishes NO closing time. The 1830 end stored here is a PLACEHOLDER so the record expands -- it is not a sponsor fact and must not be presented as one. Confirm the session length with the ZMC manager before shipping. Points accumulate over a calendar year; logs are due 31 January of the following year.",
      "exchange": "Callsign + date + time + RST (SWLs log RST of both stations in a QSO)",
      "country": "DE",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-12",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "agcw-zap-merit-20261207T1740@contestcal",
      "start_date": "2026-12-07",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "80m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "ars-spartan-sprint",
      "name": "ARS Spartan Sprint",
      "start": "2026-12-08T01:00:00Z",
      "end": "2026-12-08T03:00:00Z",
      "start_wall": "2026-12-07T20:00:00",
      "end_wall": "2026-12-07T22:00:00",
      "local_rolling": false,
      "timezone": "America/New_York",
      "duration_hours": 2,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "",
      "sponsor": "Adventure Radio Society",
      "rules_url": "https://ars-qrp.com/Spartan_Sprint/Spartan_Sprint.html",
      "verified": true,
      "note": "CORRECTION (anchor): previously encoded as the first TUESDAY of the month. The sponsor's rule is the first MONDAY US local, which lands on Tuesday UTC -- and those are different dates whenever the 1st falls on a Tuesday (Sep and Dec 2026). SPONSOR-ANCHORED LOCAL TIME: ARS publishes no UTC time and states the event 'is always at these Local Times', so the UTC instant is what moves -- 0100Z Tuesday under EST, 0000Z Tuesday under EDT. Resolved through America/New_York rather than hardcoded, so DST is handled. ARS lists Eastern, Central, Mountain and Pacific times that are the same instant in every zone that observes DST; Arizona, which does not, is the one place the sponsor's own table is inconsistent.",
      "exchange": "RST + state/province + power output",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "ars-spartan-sprint-20261208T0100@contestcal",
      "start_date": "2026-12-08",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "2-12"
    },
    {
      "contest_id": "darc-cw-ausbildungscontest",
      "name": "DARC CW-Ausbildungscontest",
      "start": "2026-12-08T18:00:00Z",
      "end": "2026-12-08T18:59:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.98,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [],
      "bands_note": "",
      "sponsor": "DARC",
      "rules_url": "https://www.darc.de/der-club/referate/conteste/cwa/darc-cw-ausbildungscontest/",
      "verified": false,
      "note": "IT COMPLETES A PATTERN DARC DESCRIBES BUT DOES NOT SPELL OUT. Their three short contests take one month of each quarter in turn, all on a Tuesday evening: the RTTY-Kurzcontest in months 1/4/7/10, the FT4 Contest in 2/5/8/11, and this one in 3/6/9/12. All four of DARC's published dates are the SECOND TUESDAY of those months. That is what 'reiht sich vom Termin her in die anderen ... ein' means, and the arithmetic confirms it rather than assuming it.\n\nVERIFIED FALSE because the page that describes the series is prose about teaching CW rather than an Ausschreibung: no bands, no exchange, no deadline. BANDS ARE UNRECORDED, so every band filter excludes this record.\n\nWHERE THE BANDS WOULD HAVE BEEN: Not stated on the page that describes the series. That sentence sits here rather than in bands_note, because bands_note is for a sponsor's own wording ABOUT a band list and must never stand in for one -- a test enforces it, and it caught this.",
      "exchange": "",
      "country": "DE",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-23",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "darc-cw-ausbildungscontest-20261208T1800@contestcal",
      "start_date": "2026-12-08",
      "mode_families": [
        "CW"
      ],
      "band_families": [],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "cwops-cwt",
      "name": "CWops Test (CWT)",
      "start": "2026-12-09T13:00:00Z",
      "end": "2026-12-09T14:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "CWops",
      "rules_url": "https://cwops.org/cwops-tests/",
      "verified": true,
      "note": "",
      "exchange": "Members: name + CWops number. Non-members: name + state/province/DX prefix.",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "cwops-cwt-20261209T1300@contestcal",
      "start_date": "2026-12-09",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "cwops-cwt",
      "name": "CWops Test (CWT)",
      "start": "2026-12-09T19:00:00Z",
      "end": "2026-12-09T20:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "CWops",
      "rules_url": "https://cwops.org/cwops-tests/",
      "verified": true,
      "note": "",
      "exchange": "Members: name + CWops number. Non-members: name + state/province/DX prefix.",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "cwops-cwt-20261209T1900@contestcal",
      "start_date": "2026-12-09",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "cwops-cwt",
      "name": "CWops Test (CWT)",
      "start": "2026-12-10T03:00:00Z",
      "end": "2026-12-10T04:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "CWops",
      "rules_url": "https://cwops.org/cwops-tests/",
      "verified": true,
      "note": "",
      "exchange": "Members: name + CWops number. Non-members: name + state/province/DX prefix.",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "cwops-cwt-20261210T0300@contestcal",
      "start_date": "2026-12-10",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "cwops-cwt",
      "name": "CWops Test (CWT)",
      "start": "2026-12-10T07:00:00Z",
      "end": "2026-12-10T08:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "CWops",
      "rules_url": "https://cwops.org/cwops-tests/",
      "verified": true,
      "note": "",
      "exchange": "Members: name + CWops number. Non-members: name + state/province/DX prefix.",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "cwops-cwt-20261210T0700@contestcal",
      "start_date": "2026-12-10",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "nccc-ns-ft4",
      "name": "NCCC FT4 Sprint (FT4 NS)",
      "start": "2026-12-11T01:00:00Z",
      "end": "2026-12-11T01:30:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.5,
      "modes": [
        "FT8/FT4"
      ],
      "submodes": [
        "FT4"
      ],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "Northern California Contest Club (NCCC)",
      "rules_url": "https://www.ncccsprint.com/ft4ns.html",
      "verified": true,
      "note": "NCCC describes these as 'nominal rules' that may be modified on a weekly basis, and runs formal Ladder seasons interspersed with practice weeks. The 30-minute session slot itself is fixed.",
      "exchange": "Grid square (following NA VHF, WW Digi and ARRL IDC practice)",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "nccc-ns-ft4-20261211T0100@contestcal",
      "start_date": "2026-12-11",
      "mode_families": [
        "Digital",
        "FT8/FT4"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "nccc-ns-rtty",
      "name": "NCCC RTTY Sprint (RTTY NS)",
      "start": "2026-12-11T01:45:00Z",
      "end": "2026-12-11T02:15:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.5,
      "modes": [
        "RTTY"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m"
      ],
      "bands_note": "",
      "sponsor": "Northern California Contest Club (NCCC)",
      "rules_url": "https://ncccsprint.com/rttyns.html",
      "verified": true,
      "note": "NCCC describes these as 'nominal rules' that may be modified on a weekly basis, and runs formal Ladder seasons interspersed with practice weeks. The 30-minute session slot itself is fixed.",
      "exchange": "Serial number + name + QTH (both callsigns required in the exchange)",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "nccc-ns-rtty-20261211T0145@contestcal",
      "start_date": "2026-12-11",
      "mode_families": [
        "RTTY",
        "Digital"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "nccc-ns-cw",
      "name": "NCCC Sprint (NS)",
      "start": "2026-12-11T02:30:00Z",
      "end": "2026-12-11T03:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.5,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m"
      ],
      "bands_note": "",
      "sponsor": "Northern California Contest Club (NCCC)",
      "rules_url": "https://ncccsprint.com/rules.html",
      "verified": true,
      "note": "NCCC describes these as 'nominal rules' that may be modified on a weekly basis, and runs formal Ladder seasons interspersed with practice weeks. The 30-minute session slot itself is fixed.",
      "exchange": "Serial number + name + QTH (both callsigns required in the exchange)",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "nccc-ns-cw-20261211T0230@contestcal",
      "start_date": "2026-12-11",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "k1usn-sst",
      "name": "K1USN Slow Speed Test (SST)",
      "start": "2026-12-11T20:00:00Z",
      "end": "2026-12-11T21:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "",
      "sponsor": "K1USN Radio Club",
      "rules_url": "https://www.k1usn.com/sst_rules.html",
      "verified": true,
      "note": "No formal log submission -- participants post scores to 3830scores.com.",
      "exchange": "Name + state/province/DX country",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "k1usn-sst-20261211T2000@contestcal",
      "start_date": "2026-12-11",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "arrl-10m",
      "name": "ARRL 10-Meter Contest",
      "start": "2026-12-12T00:00:00Z",
      "end": "2026-12-13T23:59:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 47.98,
      "modes": [
        "CW",
        "SSB"
      ],
      "submodes": [],
      "bands": [
        "10m"
      ],
      "bands_note": "",
      "sponsor": "ARRL",
      "rules_url": "http://www.arrl.org/10-meter",
      "verified": true,
      "note": "",
      "exchange": "",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-21",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "arrl-10m-20261212T0000@contestcal",
      "start_date": "2026-12-12",
      "mode_families": [
        "CW",
        "SSB"
      ],
      "band_families": [
        "10m"
      ],
      "duration_bucket": "gte24"
    },
    {
      "contest_id": "podxs-triple-play-doubleheader",
      "name": "PODXS 070 Club Triple Play Low Band Sprint DOUBLEHEADER",
      "start": "2026-12-12T00:00:00Z",
      "end": "2026-12-14T23:59:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 71.98,
      "modes": [
        "Digital"
      ],
      "submodes": [
        "PSK31"
      ],
      "bands": [
        "160m",
        "80m",
        "40m"
      ],
      "bands_note": "",
      "sponsor": "PODXS 070 Club",
      "rules_url": "https://www.podxs070.com/o7o-club-sponsored-contests/triple-play-low-band-sprint",
      "verified": true,
      "note": "Second running of the Triple Play format, shares a rules page with the November event.",
      "exchange": "State/province/country (SPC)",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-12",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": "2026-12-21T23:59:00Z",
      "uid": "podxs-triple-play-doubleheader-20261212T0000@contestcal",
      "start_date": "2026-12-12",
      "mode_families": [
        "Digital"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m"
      ],
      "duration_bucket": "gte24"
    },
    {
      "contest_id": "uska-weihnachtswettbewerb-cw",
      "name": "USKA Weihnachtswettbewerb (CW / Digital)",
      "start": "2026-12-12T07:00:00Z",
      "end": "2026-12-12T09:59:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 2.98,
      "modes": [
        "CW",
        "RTTY",
        "Digital",
        "FT8/FT4"
      ],
      "submodes": [
        "PSK31",
        "PSK63"
      ],
      "bands": [
        "80m",
        "40m"
      ],
      "bands_note": "",
      "sponsor": "USKA",
      "rules_url": "https://uska.ch/wp-content/uploads/2026/05/2026-04-Reglement-fuer-den-Weihnachtswettbewerb-Ausgabe-Mai-2026-DE.pdf",
      "verified": true,
      "note": "USKA runs the Weihnachtswettbewerb on two Saturdays, and each Saturday is a phone-or-CW morning followed by a separate digital hour. This record is the second Saturday: CW 07:00-09:59 UTC and digital 10:00-10:59 UTC, encoded as two sessions because the hour between them is not part of the contest. The two Saturdays are two records because they are different modes, not two legs of one event. The first Saturday of December 2026 is the 5th and the second the 12th, the dates USKA's KW-Contest page prints. USKA states no log deadline in this Reglement -- the other three KW Reglemente all say 'innert 8 Tagen' and this one says nothing at all -- so no interval is encoded rather than one borrowed from its siblings.",
      "exchange": "RS(T) and the canton abbreviation.",
      "country": "CH",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-19",
      "can_enter": false,
      "eligibility_scope": "entity_list",
      "eligibility_reason": "Entry limited to HB. K stations may be worked but cannot submit an entry.",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "uska-weihnachtswettbewerb-cw-20261212T0700@contestcal",
      "start_date": "2026-12-12",
      "mode_families": [
        "CW",
        "RTTY",
        "Digital",
        "FT8/FT4"
      ],
      "band_families": [
        "80m",
        "40m"
      ],
      "duration_bucket": "2-12"
    },
    {
      "contest_id": "uska-weihnachtswettbewerb-cw",
      "name": "USKA Weihnachtswettbewerb (CW / Digital)",
      "start": "2026-12-12T10:00:00Z",
      "end": "2026-12-12T10:59:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.98,
      "modes": [
        "CW",
        "RTTY",
        "Digital",
        "FT8/FT4"
      ],
      "submodes": [
        "PSK31",
        "PSK63"
      ],
      "bands": [
        "80m",
        "40m"
      ],
      "bands_note": "",
      "sponsor": "USKA",
      "rules_url": "https://uska.ch/wp-content/uploads/2026/05/2026-04-Reglement-fuer-den-Weihnachtswettbewerb-Ausgabe-Mai-2026-DE.pdf",
      "verified": true,
      "note": "USKA runs the Weihnachtswettbewerb on two Saturdays, and each Saturday is a phone-or-CW morning followed by a separate digital hour. This record is the second Saturday: CW 07:00-09:59 UTC and digital 10:00-10:59 UTC, encoded as two sessions because the hour between them is not part of the contest. The two Saturdays are two records because they are different modes, not two legs of one event. The first Saturday of December 2026 is the 5th and the second the 12th, the dates USKA's KW-Contest page prints. USKA states no log deadline in this Reglement -- the other three KW Reglemente all say 'innert 8 Tagen' and this one says nothing at all -- so no interval is encoded rather than one borrowed from its siblings.",
      "exchange": "RS(T) and the canton abbreviation.",
      "country": "CH",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-19",
      "can_enter": false,
      "eligibility_scope": "entity_list",
      "eligibility_reason": "Entry limited to HB. K stations may be worked but cannot submit an entry.",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "uska-weihnachtswettbewerb-cw-20261212T1000@contestcal",
      "start_date": "2026-12-12",
      "mode_families": [
        "CW",
        "RTTY",
        "Digital",
        "FT8/FT4"
      ],
      "band_families": [
        "80m",
        "40m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "skcc-wes",
      "name": "SKCC Weekend Sprintathon (WES)",
      "start": "2026-12-12T12:00:00Z",
      "end": "2026-12-13T23:59:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 35.98,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "Straight Key Century Club",
      "rules_url": "https://www.skccgroup.com/operating_activities/weekend_sprintathon/",
      "verified": true,
      "note": "Older sources describe the anchor as 'the Saturday following the 6th', which differs from '2nd Saturday' in some months. SKCC's current page says 2nd Saturday; re-check if dates drift.",
      "exchange": "RST + state/province/country + name + SKCC number (C/T/S suffix for award holders)",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "skcc-wes-20261212T1200@contestcal",
      "start_date": "2026-12-12",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m",
        "6m"
      ],
      "duration_bucket": "gte24"
    },
    {
      "contest_id": "ari-40-80",
      "name": "ARI 40/80 Contest",
      "start": "2026-12-12T13:00:00Z",
      "end": "2026-12-13T12:59:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 23.98,
      "modes": [
        "CW",
        "SSB",
        "RTTY"
      ],
      "submodes": [],
      "bands": [
        "80m",
        "40m"
      ],
      "bands_note": "",
      "sponsor": "ARI",
      "rules_url": "https://www.ari.it/contest-hf/contest-4080.html",
      "verified": true,
      "note": "As of 2026-08-18 the page still described the 2025 edition; the recurrence and times are stated as standing rules and are what is encoded. SWL entrants have a longer operating window than transmitting entrants (59 hours), which this record does not model -- the stored window is the transmitting one.",
      "exchange": "RS(T) + the two-letter vehicle registration code of the province.",
      "country": "IT",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-18",
      "can_enter": false,
      "eligibility_scope": "entity_list",
      "eligibility_reason": "Entry limited to I. K stations may be worked but cannot submit an entry.",
      "works": "everyone",
      "practical": "",
      "log_due": "2026-12-19T12:59:00Z",
      "uid": "ari-40-80-20261212T1300@contestcal",
      "start_date": "2026-12-12",
      "mode_families": [
        "CW",
        "SSB",
        "RTTY",
        "Digital"
      ],
      "band_families": [
        "80m",
        "40m"
      ],
      "duration_bucket": "12-24"
    },
    {
      "contest_id": "k1usn-sst",
      "name": "K1USN Slow Speed Test (SST)",
      "start": "2026-12-14T00:00:00Z",
      "end": "2026-12-14T01:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "",
      "sponsor": "K1USN Radio Club",
      "rules_url": "https://www.k1usn.com/sst_rules.html",
      "verified": true,
      "note": "No formal log submission -- participants post scores to 3830scores.com.",
      "exchange": "Name + state/province/DX country",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "k1usn-sst-20261214T0000@contestcal",
      "start_date": "2026-12-14",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "4sqrp-sss",
      "name": "4 States QRP Group Second Sunday Sprint (SSS)",
      "start": "2026-12-14T01:00:00Z",
      "end": "2026-12-14T03:00:00Z",
      "start_wall": "2026-12-13T19:00:00",
      "end_wall": "2026-12-13T21:00:00",
      "local_rolling": false,
      "timezone": "America/Chicago",
      "duration_hours": 2,
      "modes": [
        "CW",
        "SSB",
        "Digital"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "",
      "sponsor": "4 States QRP Group",
      "rules_url": "https://www.4sqrp.com/SSS/sss_rules_revised_02_2026.pdf",
      "verified": true,
      "note": "SPONSOR-ANCHORED LOCAL TIME. The anchor is the second SUNDAY and the sprint runs into Monday UTC. 4SQRP states the consequence itself: '7 PM until 9 PM central time (CST or CDT, whichever is in effect at the time). If you use UTC, that time changes when we switch from CST to CDT (or vice versa).' Resolved through America/Chicago, so it is 0100Z Monday in winter and 0000Z Monday in summer.",
      "exchange": "RST + state/province/country + 4SQRP member number (power if non-member)",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "4sqrp-sss-20261214T0100@contestcal",
      "start_date": "2026-12-14",
      "mode_families": [
        "CW",
        "SSB",
        "Digital"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "2-12"
    },
    {
      "contest_id": "agcw-zap-merit",
      "name": "AGCW ZAP Merit Contest (ZMC)",
      "start": "2026-12-14T17:40:00Z",
      "end": "2026-12-14T18:30:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.83,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "80m"
      ],
      "bands_note": "",
      "sponsor": "AGCW-DL",
      "rules_url": "https://www.agcw.de/contest/tzap/",
      "verified": false,
      "note": "PARTLY UNVERIFIED. The recurrence (every Monday), the 1740 UTC pre-logging opening and the 1800 UTC telegram transmission are all quoted from AGCW. AGCW publishes NO closing time. The 1830 end stored here is a PLACEHOLDER so the record expands -- it is not a sponsor fact and must not be presented as one. Confirm the session length with the ZMC manager before shipping. Points accumulate over a calendar year; logs are due 31 January of the following year.",
      "exchange": "Callsign + date + time + RST (SWLs log RST of both stations in a QSO)",
      "country": "DE",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-12",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "agcw-zap-merit-20261214T1740@contestcal",
      "start_date": "2026-12-14",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "80m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "rsgb-ft4-series",
      "name": "RSGB FT4 Contest Series",
      "start": "2026-12-14T20:00:00Z",
      "end": "2026-12-14T22:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 2,
      "modes": [
        "FT8/FT4"
      ],
      "submodes": [
        "FT4"
      ],
      "bands": [
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "80, 40, 20, 15 and 10 m.",
      "sponsor": "RSGB Contest Committee",
      "rules_url": "https://www.rsgbcc.org/hf/rules/2026/r80m_ft4.shtml",
      "verified": true,
      "note": "TWELVE MONDAY EVENINGS AND THE CLOCK SHIFTS FOR THE SUMMER: January to March and October to December run 2000-2200 UTC, April to September run 1900-2100. Six legs each way, so the record's default is the winter clock and the summer legs carry their own -- the third contest to need per-date times, after the Autumn Series and the 80m Club Championship.\n\nMANUAL BECAUSE THE DATES ARE NOT ON THE RULES PAGE and follow no ordinal: they are Mondays, but the third Monday in January, the fourth in February, the third in March. RSGB publishes them on its CGI calendar and this record holds what that prints.\n\nNot the same contest as the FT4 International Activity Day in April, which is 24 hours and has its own rules page.",
      "exchange": "A signal report. A serial number is not required.",
      "country": "GB",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-23",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": "2026-12-15T22:00:00Z",
      "uid": "rsgb-ft4-series-20261214T2000@contestcal",
      "start_date": "2026-12-14",
      "mode_families": [
        "Digital",
        "FT8/FT4"
      ],
      "band_families": [
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "2-12"
    },
    {
      "contest_id": "cwops-cwt",
      "name": "CWops Test (CWT)",
      "start": "2026-12-16T13:00:00Z",
      "end": "2026-12-16T14:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "CWops",
      "rules_url": "https://cwops.org/cwops-tests/",
      "verified": true,
      "note": "",
      "exchange": "Members: name + CWops number. Non-members: name + state/province/DX prefix.",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "cwops-cwt-20261216T1300@contestcal",
      "start_date": "2026-12-16",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "cwops-cwt",
      "name": "CWops Test (CWT)",
      "start": "2026-12-16T19:00:00Z",
      "end": "2026-12-16T20:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "CWops",
      "rules_url": "https://cwops.org/cwops-tests/",
      "verified": true,
      "note": "",
      "exchange": "Members: name + CWops number. Non-members: name + state/province/DX prefix.",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "cwops-cwt-20261216T1900@contestcal",
      "start_date": "2026-12-16",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "cwops-cwt",
      "name": "CWops Test (CWT)",
      "start": "2026-12-17T03:00:00Z",
      "end": "2026-12-17T04:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "CWops",
      "rules_url": "https://cwops.org/cwops-tests/",
      "verified": true,
      "note": "",
      "exchange": "Members: name + CWops number. Non-members: name + state/province/DX prefix.",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "cwops-cwt-20261217T0300@contestcal",
      "start_date": "2026-12-17",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "cwops-cwt",
      "name": "CWops Test (CWT)",
      "start": "2026-12-17T07:00:00Z",
      "end": "2026-12-17T08:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "CWops",
      "rules_url": "https://cwops.org/cwops-tests/",
      "verified": true,
      "note": "",
      "exchange": "Members: name + CWops number. Non-members: name + state/province/DX prefix.",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "cwops-cwt-20261217T0700@contestcal",
      "start_date": "2026-12-17",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "nccc-ns-ft4",
      "name": "NCCC FT4 Sprint (FT4 NS)",
      "start": "2026-12-18T01:00:00Z",
      "end": "2026-12-18T01:30:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.5,
      "modes": [
        "FT8/FT4"
      ],
      "submodes": [
        "FT4"
      ],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "Northern California Contest Club (NCCC)",
      "rules_url": "https://www.ncccsprint.com/ft4ns.html",
      "verified": true,
      "note": "NCCC describes these as 'nominal rules' that may be modified on a weekly basis, and runs formal Ladder seasons interspersed with practice weeks. The 30-minute session slot itself is fixed.",
      "exchange": "Grid square (following NA VHF, WW Digi and ARRL IDC practice)",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "nccc-ns-ft4-20261218T0100@contestcal",
      "start_date": "2026-12-18",
      "mode_families": [
        "Digital",
        "FT8/FT4"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "nccc-ns-rtty",
      "name": "NCCC RTTY Sprint (RTTY NS)",
      "start": "2026-12-18T01:45:00Z",
      "end": "2026-12-18T02:15:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.5,
      "modes": [
        "RTTY"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m"
      ],
      "bands_note": "",
      "sponsor": "Northern California Contest Club (NCCC)",
      "rules_url": "https://ncccsprint.com/rttyns.html",
      "verified": true,
      "note": "NCCC describes these as 'nominal rules' that may be modified on a weekly basis, and runs formal Ladder seasons interspersed with practice weeks. The 30-minute session slot itself is fixed.",
      "exchange": "Serial number + name + QTH (both callsigns required in the exchange)",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "nccc-ns-rtty-20261218T0145@contestcal",
      "start_date": "2026-12-18",
      "mode_families": [
        "RTTY",
        "Digital"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "nccc-ns-cw",
      "name": "NCCC Sprint (NS)",
      "start": "2026-12-18T02:30:00Z",
      "end": "2026-12-18T03:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.5,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m"
      ],
      "bands_note": "",
      "sponsor": "Northern California Contest Club (NCCC)",
      "rules_url": "https://ncccsprint.com/rules.html",
      "verified": true,
      "note": "NCCC describes these as 'nominal rules' that may be modified on a weekly basis, and runs formal Ladder seasons interspersed with practice weeks. The 30-minute session slot itself is fixed.",
      "exchange": "Serial number + name + QTH (both callsigns required in the exchange)",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "nccc-ns-cw-20261218T0230@contestcal",
      "start_date": "2026-12-18",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "k1usn-sst",
      "name": "K1USN Slow Speed Test (SST)",
      "start": "2026-12-18T20:00:00Z",
      "end": "2026-12-18T21:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "",
      "sponsor": "K1USN Radio Club",
      "rules_url": "https://www.k1usn.com/sst_rules.html",
      "verified": true,
      "note": "No formal log submission -- participants post scores to 3830scores.com.",
      "exchange": "Name + state/province/DX country",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "k1usn-sst-20261218T2000@contestcal",
      "start_date": "2026-12-18",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "ok-dx-rtty",
      "name": "OK DX RTTY Contest",
      "start": "2026-12-19T00:00:00Z",
      "end": "2026-12-20T00:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 24,
      "modes": [
        "RTTY"
      ],
      "submodes": [
        "Baudot"
      ],
      "bands": [
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "",
      "sponsor": "CRK",
      "rules_url": "http://okrtty.crk.cz/index.php?page=english",
      "verified": true,
      "note": "TWO PROBLEMS IN THE SPONSOR'S OWN TEXT, BOTH RECORDED RATHER THAN RECONCILED. First, the news item announcing the 19 December 2026 edition prints 'Deadline for log upload: 26. 12. 2025 23:59:59' -- the wrong year for a 2026 contest. Second, that 26 December date is not what the rules' own seven-day interval produces here: this catalog stores the end as 24:00 on the Saturday, i.e. 00:00 on the Sunday, and seven days from there is 27 December. log_deadline_days is therefore left unset and both statements are quoted, the same treatment given to JARL's All Asian DX Contest. ATTRIBUTION CAVEAT: neither the English nor the Czech rules page names an organising society. The sponsor is recorded as the Czech Radio Club on the strength of the crk.cz hosting domain and the okrtty-at-crk.cz log address, and that inference is stated here rather than hidden. BLOCKER: okrtty.crk.cz serves a TLS certificate issued for default.web4u.cz, so rules_url is http:// deliberately.",
      "exchange": "RST + CQ Zone.",
      "country": "CZ",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-18",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "ok-dx-rtty-20261219T0000@contestcal",
      "start_date": "2026-12-19",
      "mode_families": [
        "RTTY",
        "Digital"
      ],
      "band_families": [
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "gte24"
    },
    {
      "contest_id": "hrs-9a-dx",
      "name": "Croatian DX Contest (9A DX)",
      "start": "2026-12-19T14:00:00Z",
      "end": "2026-12-20T13:59:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 23.98,
      "modes": [
        "CW",
        "SSB"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "",
      "sponsor": "HRS",
      "rules_url": "https://www.hamradio.hr/9a-dx-contest/",
      "verified": true,
      "note": "The rules state the rule and check it against a year in the same paragraph: December 2025's full weekends are the 6th/7th, 13th/14th, 20th/21st and 27th/28th, so the third is 20-21 December, which is what HRS prints. For 2026 the rule gives 19-20 December. HRS also runs a one-hour submission window for entrants who want to be eligible to win; the eight-day deadline is the one that applies to everyone and is what is encoded.",
      "exchange": "International stations send RS(T) and their ITU zone; Croatian stations send RS(T) and their county plate abbreviation.",
      "country": "HR",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-19",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": "2026-12-28T13:59:00Z",
      "uid": "hrs-9a-dx-20261219T1400@contestcal",
      "start_date": "2026-12-19",
      "mode_families": [
        "CW",
        "SSB"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "12-24"
    },
    {
      "contest_id": "arrl-rookie-roundup-cw",
      "name": "ARRL Rookie Roundup, CW",
      "start": "2026-12-20T18:00:00Z",
      "end": "2026-12-20T23:59:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 5.98,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "",
      "sponsor": "ARRL",
      "rules_url": "http://www.arrl.org/rookie-roundup",
      "verified": true,
      "note": "",
      "exchange": "",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-21",
      "can_enter": true,
      "eligibility_scope": "entity_list",
      "eligibility_reason": "Entry limited to K, VE, XE -- includes K.",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "arrl-rookie-roundup-cw-20261220T1800@contestcal",
      "start_date": "2026-12-20",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "2-12"
    },
    {
      "contest_id": "k1usn-sst",
      "name": "K1USN Slow Speed Test (SST)",
      "start": "2026-12-21T00:00:00Z",
      "end": "2026-12-21T01:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "",
      "sponsor": "K1USN Radio Club",
      "rules_url": "https://www.k1usn.com/sst_rules.html",
      "verified": true,
      "note": "No formal log submission -- participants post scores to 3830scores.com.",
      "exchange": "Name + state/province/DX country",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "k1usn-sst-20261221T0000@contestcal",
      "start_date": "2026-12-21",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "agcw-zap-merit",
      "name": "AGCW ZAP Merit Contest (ZMC)",
      "start": "2026-12-21T17:40:00Z",
      "end": "2026-12-21T18:30:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.83,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "80m"
      ],
      "bands_note": "",
      "sponsor": "AGCW-DL",
      "rules_url": "https://www.agcw.de/contest/tzap/",
      "verified": false,
      "note": "PARTLY UNVERIFIED. The recurrence (every Monday), the 1740 UTC pre-logging opening and the 1800 UTC telegram transmission are all quoted from AGCW. AGCW publishes NO closing time. The 1830 end stored here is a PLACEHOLDER so the record expands -- it is not a sponsor fact and must not be presented as one. Confirm the session length with the ZMC manager before shipping. Points accumulate over a calendar year; logs are due 31 January of the following year.",
      "exchange": "Callsign + date + time + RST (SWLs log RST of both stations in a QSO)",
      "country": "DE",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-12",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "agcw-zap-merit-20261221T1740@contestcal",
      "start_date": "2026-12-21",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "80m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "skcc-sks",
      "name": "SKCC Straight Key Sprint (SKS)",
      "start": "2026-12-23T00:00:00Z",
      "end": "2026-12-23T02:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 2,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m",
        "6m"
      ],
      "bands_note": "Suggested frequencies, one per band",
      "sponsor": "Straight Key Century Club",
      "rules_url": "https://www.skccgroup.com/operating_activities/weekday_sprint/",
      "verified": true,
      "note": "",
      "exchange": "RST + QTH + name + SKCC number",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "skcc-sks-20261223T0000@contestcal",
      "start_date": "2026-12-23",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m",
        "6m"
      ],
      "duration_bucket": "2-12"
    },
    {
      "contest_id": "cwops-cwt",
      "name": "CWops Test (CWT)",
      "start": "2026-12-23T13:00:00Z",
      "end": "2026-12-23T14:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "CWops",
      "rules_url": "https://cwops.org/cwops-tests/",
      "verified": true,
      "note": "",
      "exchange": "Members: name + CWops number. Non-members: name + state/province/DX prefix.",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "cwops-cwt-20261223T1300@contestcal",
      "start_date": "2026-12-23",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "cwops-cwt",
      "name": "CWops Test (CWT)",
      "start": "2026-12-23T19:00:00Z",
      "end": "2026-12-23T20:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "CWops",
      "rules_url": "https://cwops.org/cwops-tests/",
      "verified": true,
      "note": "",
      "exchange": "Members: name + CWops number. Non-members: name + state/province/DX prefix.",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "cwops-cwt-20261223T1900@contestcal",
      "start_date": "2026-12-23",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "cwops-cwt",
      "name": "CWops Test (CWT)",
      "start": "2026-12-24T03:00:00Z",
      "end": "2026-12-24T04:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "CWops",
      "rules_url": "https://cwops.org/cwops-tests/",
      "verified": true,
      "note": "",
      "exchange": "Members: name + CWops number. Non-members: name + state/province/DX prefix.",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "cwops-cwt-20261224T0300@contestcal",
      "start_date": "2026-12-24",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "cwops-cwt",
      "name": "CWops Test (CWT)",
      "start": "2026-12-24T07:00:00Z",
      "end": "2026-12-24T08:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "CWops",
      "rules_url": "https://cwops.org/cwops-tests/",
      "verified": true,
      "note": "",
      "exchange": "Members: name + CWops number. Non-members: name + state/province/DX prefix.",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "cwops-cwt-20261224T0700@contestcal",
      "start_date": "2026-12-24",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "nccc-ns-ft4",
      "name": "NCCC FT4 Sprint (FT4 NS)",
      "start": "2026-12-25T01:00:00Z",
      "end": "2026-12-25T01:30:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.5,
      "modes": [
        "FT8/FT4"
      ],
      "submodes": [
        "FT4"
      ],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "Northern California Contest Club (NCCC)",
      "rules_url": "https://www.ncccsprint.com/ft4ns.html",
      "verified": true,
      "note": "NCCC describes these as 'nominal rules' that may be modified on a weekly basis, and runs formal Ladder seasons interspersed with practice weeks. The 30-minute session slot itself is fixed.",
      "exchange": "Grid square (following NA VHF, WW Digi and ARRL IDC practice)",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "nccc-ns-ft4-20261225T0100@contestcal",
      "start_date": "2026-12-25",
      "mode_families": [
        "Digital",
        "FT8/FT4"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "nccc-ns-rtty",
      "name": "NCCC RTTY Sprint (RTTY NS)",
      "start": "2026-12-25T01:45:00Z",
      "end": "2026-12-25T02:15:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.5,
      "modes": [
        "RTTY"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m"
      ],
      "bands_note": "",
      "sponsor": "Northern California Contest Club (NCCC)",
      "rules_url": "https://ncccsprint.com/rttyns.html",
      "verified": true,
      "note": "NCCC describes these as 'nominal rules' that may be modified on a weekly basis, and runs formal Ladder seasons interspersed with practice weeks. The 30-minute session slot itself is fixed.",
      "exchange": "Serial number + name + QTH (both callsigns required in the exchange)",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "nccc-ns-rtty-20261225T0145@contestcal",
      "start_date": "2026-12-25",
      "mode_families": [
        "RTTY",
        "Digital"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "nccc-ns-cw",
      "name": "NCCC Sprint (NS)",
      "start": "2026-12-25T02:30:00Z",
      "end": "2026-12-25T03:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.5,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m"
      ],
      "bands_note": "",
      "sponsor": "Northern California Contest Club (NCCC)",
      "rules_url": "https://ncccsprint.com/rules.html",
      "verified": true,
      "note": "NCCC describes these as 'nominal rules' that may be modified on a weekly basis, and runs formal Ladder seasons interspersed with practice weeks. The 30-minute session slot itself is fixed.",
      "exchange": "Serial number + name + QTH (both callsigns required in the exchange)",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "nccc-ns-cw-20261225T0230@contestcal",
      "start_date": "2026-12-25",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "k1usn-sst",
      "name": "K1USN Slow Speed Test (SST)",
      "start": "2026-12-25T20:00:00Z",
      "end": "2026-12-25T21:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "",
      "sponsor": "K1USN Radio Club",
      "rules_url": "https://www.k1usn.com/sst_rules.html",
      "verified": true,
      "note": "No formal log submission -- participants post scores to 3830scores.com.",
      "exchange": "Name + state/province/DX country",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "k1usn-sst-20261225T2000@contestcal",
      "start_date": "2026-12-25",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "darc-xmas",
      "name": "DARC Weihnachtswettbewerb (XMAS Contest)",
      "start": "2026-12-26T08:30:00Z",
      "end": "2026-12-26T10:59:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 2.48,
      "modes": [
        "CW",
        "SSB"
      ],
      "submodes": [],
      "bands": [
        "80m",
        "40m"
      ],
      "bands_note": "CW 3510-3560 and 7010-7040 kHz; SSB 3610-3650, 3700-3775, 7060-7100 and 7130-7200 kHz",
      "sponsor": "DARC",
      "rules_url": "https://www.darc.de/der-club/referate/conteste/weihnachtswettbewerb/regeln/",
      "verified": true,
      "note": "A calendar-fixed date, not a weekday rule: 26 December whatever day it falls on. DARC shortened the log deadline to seven days and flags the change itself ('NEU: verkürzte Logabgabefrist auf 7 Tage').",
      "exchange": "German stations send RS(T) + their DOK, or 'NM' if they are not a DARC or VFDB member. All stations outside Germany send RS(T) + serial number.",
      "country": "DE",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-18",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": "2027-01-02T10:59:00Z",
      "uid": "darc-xmas-20261226T0830@contestcal",
      "start_date": "2026-12-26",
      "mode_families": [
        "CW",
        "SSB"
      ],
      "band_families": [
        "80m",
        "40m"
      ],
      "duration_bucket": "2-12"
    },
    {
      "contest_id": "stew-perry",
      "name": "Stew Perry Topband Challenge",
      "start": "2026-12-26T15:00:00Z",
      "end": "2026-12-27T14:59:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 23.98,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m"
      ],
      "bands_note": "160 metres only.",
      "sponsor": "Boring Amateur Radio Club",
      "rules_url": "https://www.kkn.net/stew/stew_rules.html",
      "verified": false,
      "note": "MANUAL, BECAUSE THE CLUB PUBLISHES DATES AND NOT A RULE. All four 2026 runnings fall on a Saturday, but no single ordinal describes them -- March's is the second Saturday, June's the third, October's the third and December's the fourth. The record holds exactly what the club published and produces nothing for 2027 until somebody reads their next list, which is the same treatment the NCJ Sprints get and for the same reason.\n\nMarked unverified because ONE year's dates cannot confirm a pattern that does not exist. It becomes verified when a second year's list is read and the record still only claims what was printed.\n\nThe grid-square exchange is the point of the contest: scoring is by distance, so a short haul into a rare square can outscore a long one.",
      "exchange": "A four-character grid square, for example CN85.",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-21",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": "2027-01-10T14:59:00Z",
      "uid": "stew-perry-20261226T1500@contestcal",
      "start_date": "2026-12-26",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m"
      ],
      "duration_bucket": "12-24"
    },
    {
      "contest_id": "rac-canada-winter",
      "name": "RAC Canada Winter Contest",
      "start": "2026-12-27T00:00:00Z",
      "end": "2026-12-27T23:59:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 23.98,
      "modes": [
        "CW",
        "SSB"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m",
        "6m",
        "2m"
      ],
      "bands_note": "160, 80, 40, 20, 15, 10, 6 and 2 metres, CW and phone (SSB, FM, AM, etc.)",
      "sponsor": "RAC",
      "rules_url": "https://www.rac.ca/contesting-results/",
      "verified": true,
      "note": "RAC ANNOUNCES THIS DATE EACH YEAR; THERE IS NO RULE. The eight dates encoded here were read from RAC's own annual rules PDFs: 2019-12-28, 2020-12-19, 2021-12-18, 2022-12-17, 2023-12-30, 2024-12-28, 2025-12-20, 2026-12-27. That is the fourth, third, third, third, fifth, fourth and third Saturday of December -- and in 2026 a Sunday. No ordinal fits, so nothing is guessed: years RAC has not yet published are simply absent from this calendar.",
      "exchange": "Stations in Canada send RS(T) and province or territory; stations outside Canada, and Canadian maritime mobiles, send RS(T) and a serial number",
      "country": "CA",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-17",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": "2027-01-10T23:59:00Z",
      "uid": "rac-canada-winter-20261227T0000@contestcal",
      "start_date": "2026-12-27",
      "mode_families": [
        "CW",
        "SSB"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m",
        "6m",
        "VHF+"
      ],
      "duration_bucket": "12-24"
    },
    {
      "contest_id": "k1usn-sst",
      "name": "K1USN Slow Speed Test (SST)",
      "start": "2026-12-28T00:00:00Z",
      "end": "2026-12-28T01:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "bands_note": "",
      "sponsor": "K1USN Radio Club",
      "rules_url": "https://www.k1usn.com/sst_rules.html",
      "verified": true,
      "note": "No formal log submission -- participants post scores to 3830scores.com.",
      "exchange": "Name + state/province/DX country",
      "country": "US",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "k1usn-sst-20261228T0000@contestcal",
      "start_date": "2026-12-28",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "20m",
        "15m",
        "10m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "agcw-zap-merit",
      "name": "AGCW ZAP Merit Contest (ZMC)",
      "start": "2026-12-28T17:40:00Z",
      "end": "2026-12-28T18:30:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 0.83,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "80m"
      ],
      "bands_note": "",
      "sponsor": "AGCW-DL",
      "rules_url": "https://www.agcw.de/contest/tzap/",
      "verified": false,
      "note": "PARTLY UNVERIFIED. The recurrence (every Monday), the 1740 UTC pre-logging opening and the 1800 UTC telegram transmission are all quoted from AGCW. AGCW publishes NO closing time. The 1830 end stored here is a PLACEHOLDER so the record expands -- it is not a sponsor fact and must not be presented as one. Confirm the session length with the ZMC manager before shipping. Points accumulate over a calendar year; logs are due 31 January of the following year.",
      "exchange": "Callsign + date + time + RST (SWLs log RST of both stations in a QSO)",
      "country": "DE",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-12",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "agcw-zap-merit-20261228T1740@contestcal",
      "start_date": "2026-12-28",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "80m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "cwops-cwt",
      "name": "CWops Test (CWT)",
      "start": "2026-12-30T13:00:00Z",
      "end": "2026-12-30T14:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "CWops",
      "rules_url": "https://cwops.org/cwops-tests/",
      "verified": true,
      "note": "",
      "exchange": "Members: name + CWops number. Non-members: name + state/province/DX prefix.",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "cwops-cwt-20261230T1300@contestcal",
      "start_date": "2026-12-30",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "cwops-cwt",
      "name": "CWops Test (CWT)",
      "start": "2026-12-30T19:00:00Z",
      "end": "2026-12-30T20:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "CWops",
      "rules_url": "https://cwops.org/cwops-tests/",
      "verified": true,
      "note": "",
      "exchange": "Members: name + CWops number. Non-members: name + state/province/DX prefix.",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "cwops-cwt-20261230T1900@contestcal",
      "start_date": "2026-12-30",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "cwops-cwt",
      "name": "CWops Test (CWT)",
      "start": "2026-12-31T03:00:00Z",
      "end": "2026-12-31T04:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "CWops",
      "rules_url": "https://cwops.org/cwops-tests/",
      "verified": true,
      "note": "",
      "exchange": "Members: name + CWops number. Non-members: name + state/province/DX prefix.",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "cwops-cwt-20261231T0300@contestcal",
      "start_date": "2026-12-31",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    },
    {
      "contest_id": "cwops-cwt",
      "name": "CWops Test (CWT)",
      "start": "2026-12-31T07:00:00Z",
      "end": "2026-12-31T08:00:00Z",
      "start_wall": null,
      "end_wall": null,
      "local_rolling": false,
      "timezone": "",
      "duration_hours": 1,
      "modes": [
        "CW"
      ],
      "submodes": [],
      "bands": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "bands_note": "",
      "sponsor": "CWops",
      "rules_url": "https://cwops.org/cwops-tests/",
      "verified": true,
      "note": "",
      "exchange": "Members: name + CWops number. Non-members: name + state/province/DX prefix.",
      "country": "INTL",
      "rules_url_archived": "",
      "rules_url_checked": "2026-08-11",
      "can_enter": true,
      "eligibility_scope": "worldwide",
      "eligibility_reason": "",
      "works": "everyone",
      "practical": "",
      "log_due": null,
      "uid": "cwops-cwt-20261231T0700@contestcal",
      "start_date": "2026-12-31",
      "mode_families": [
        "CW"
      ],
      "band_families": [
        "160m",
        "80m",
        "40m",
        "30m",
        "20m",
        "17m",
        "15m",
        "12m",
        "10m",
        "6m"
      ],
      "duration_bucket": "lt2"
    }
  ]
}