{
  "site": "https://indianahamradio.com",
  "about": "Amateur radio in Indiana, county by county. These are the datasets the site is built from, published so you do not have to scrape the pages.",
  "contact": "campbell@indianahamradio.com",
  "generated": "2026-10-31",
  "note": "Some of these were compiled by other people and are used with credit. Read the terms on each before you republish it.",
  "datasets": [
    {
      "file": "counties.json",
      "title": "Counties",
      "what": "All 92 Indiana counties: the clubs based in each, whether one exists at all, ARES district and NWS office.",
      "origin": "Compiled by this site from each club's own published information.",
      "terms": "Ours. Use it freely; a link back is appreciated, not required.",
      "bytes": 69263,
      "url": "https://indianahamradio.com/data/counties.json"
    },
    {
      "file": "countyStats.json",
      "title": "Licensed operators by county",
      "what": "Population, licensed operators, active FCC licenses and the class breakdown (Extra, Advanced, General, Technician, Novice) for every county.",
      "origin": "Derived from the FCC Universal Licensing System weekly database dump.",
      "terms": "The FCC data is US government work in the public domain. The per-county aggregation is ours and free to use.",
      "bytes": 15062,
      "url": "https://indianahamradio.com/data/countyStats.json"
    },
    {
      "file": "repeaters.json",
      "title": "Repeaters, as this site lists them",
      "what": "Repeaters described on the county pages in clubs' own words, parsed into structured records. Club-sourced rows, by design. A row matched to a record of the Indiana Repeater Council is marked (`coordinated` is true and `sources` includes IRC), and a tone taken from the Council is marked `toneSource` IRC. The Council's own records, with its call, sponsor, notes and locations, are the separate ircRepeaters.json below, and the county files (counties/) also carry them, credited to the Council.",
      "origin": "Compiled from club websites and county pages.",
      "terms": "Ours. Use it freely.",
      "bytes": 38537,
      "url": "https://indianahamradio.com/data/repeaters.json"
    },
    {
      "file": "clubMeetings.json",
      "title": "Club meetings",
      "what": "When and where each club meets, keyed by club: night, time, venue, whether it says visitors are welcome, and any standing public breakfast; and how to join -- dues in the club's words, and links to its join page, its officers page and its mailing list. Also joined onto every club in counties.json.",
      "origin": "Read off each club's own website, one record per club. Every field is optional and an absent field means the club did not publish it -- no night was inferred from a run of calendar entries and no hour was filled in where a club wrote only 'Saturday mornings'.",
      "terms": "Ours. Use it freely. Where a record carries a `source`, that URL is the club's own page and the club is the authority; where it does not, the value predates this file and has not been re-verified.",
      "bytes": 21333,
      "url": "https://indianahamradio.com/data/clubMeetings.json"
    },
    {
      "file": "clubActivities.json",
      "title": "What clubs run themselves",
      "what": "Beyond the monthly meeting: the license exam sessions a club's own VE team holds -- coordinating VEC, recurrence, venue, fee and, in the club's own words, whether you can simply turn up -- plus its standing transmitter hunts and workshops and the classes it teaches. Keyed by club, and joined onto every club in counties.json.",
      "origin": "Read off each club's own website, one record per club. Deliberately separate from examSessions.json, which is HamStudy's and is regenerated from HamStudy's feed: these are the clubs' own statements and carry the clubs' own provenance.",
      "terms": "Ours. Use it freely, and carry `registration` with the row if you carry anything -- whether a walk-in is turned away is worth more to a candidate than the date. A dated exam session is never in this file: it is in examSessions.json, and a club here gives its standing pattern. Class and activity dates appear only where the club published a year alongside them, and a club that names no recurrence gets none. HamStudy lists 213 Laurel VEC sessions nationally and none at all in Indiana, which is most of what this file exists to answer; the club's own page is authoritative and sessions move.",
      "bytes": 19063,
      "url": "https://indianahamradio.com/data/clubActivities.json"
    },
    {
      "file": "nets.json",
      "title": "Nets",
      "what": "Statewide and county nets: day, time, frequency and mode, and -- where the club's own site says it runs the net -- `club`, keyed like clubMeetings.json.",
      "origin": "Compiled from club pages and section sources. The least verifiable dataset here -- a club's page is exactly the kind of thing that goes stale.",
      "terms": "Ours. Use it freely, and please tell us when you find one that is wrong.",
      "bytes": 74132,
      "url": "https://indianahamradio.com/data/nets.json"
    },
    {
      "file": "silentKeys.json",
      "title": "Silent Keys",
      "what": "Indiana amateur radio operators who have died: name, call sign where one was held, town, county, date of passing, one line in this site's own words, and a link to the obituary or club or ARRL notice it rests on. Newest passing first on the page; the file keeps the order entries were added. Also published as an RSS feed at /silent-keys.xml.",
      "origin": "Each entry is confirmed by an obituary, or a club or ARRL notice, that names the person as an amateur radio operator. Entries reach the site only by a reviewed pull request.",
      "terms": "Ours. Use it freely, with the source link kept beside each entry: the obituary or notice is the record, and this is a pointer to it. The file carries no addresses, survivors' names, funeral details or obituary text, and nothing here should be republished with them added. Corrections to campbell@indianahamradio.com.",
      "bytes": 6446,
      "url": "https://indianahamradio.com/data/silentKeys.json"
    },
    {
      "file": "countyEmergencyContacts.json",
      "title": "Emergency management and ARES status",
      "what": "Each county's emergency management agency website, and whether its ARES Emergency Coordinator and District Emergency Coordinator positions are filled or vacant.",
      "origin": "County EMA links from the Indiana Department of Homeland Security's public dataset; ARES position status from the ARRL Indiana Section's newsletter.",
      "terms": "Role status only: no field for a person, no emails or phone numbers, and no call sign a linked source does not publish, enforced on every build. Please keep it that way if you republish it.",
      "bytes": 25398,
      "url": "https://indianahamradio.com/data/countyEmergencyContacts.json"
    },
    {
      "file": "ircRepeaters.json",
      "title": "Coordinated repeaters (Indiana Repeater Council)",
      "what": "Every repeater the Indiana Repeater Council lists as coordinated in Indiana: frequency, band, offset, tone, call, sponsor, the IRC's notes, city and county, with a latitude and longitude for the city.",
      "origin": "The Indiana Repeater Council's coordination records, from its public directory at https://flexweb.ircinc.org/search.html, refreshed by this site. Offsets and coordinates are this site's additions; the file's _credit block says how each was derived.",
      "terms": "The records are the Indiana Repeater Council's. The IRC publishes no data-use policy or terms of use (checked 2026-09-25). Credit the Indiana Repeater Council and link to its directory if you reuse them. The IRC lists only fully coordinated repeaters: a machine absent here is not necessarily off the air.",
      "bytes": 140107,
      "url": "https://indianahamradio.com/data/ircRepeaters.json"
    },
    {
      "file": "licenseTrends.json",
      "title": "Licensing trends",
      "what": "Licensed operators in Indiana by year, with new licenses and upgrades.",
      "origin": "Derived from FCC Universal Licensing System records.",
      "terms": "FCC source data is public domain; the series is ours and free to use.",
      "bytes": 22731,
      "url": "https://indianahamradio.com/data/licenseTrends.json"
    },
    {
      "file": "examSessions.json",
      "title": "Upcoming exam sessions",
      "what": "Every upcoming US amateur radio license exam session: date, city, state, ZIP, coordinates, venue, VEC, fee, whether pre-registration is required and whether it is full. County is resolved for Indiana sessions only. Past sessions drop out rather than accumulating.",
      "origin": "Published by the VE teams to HamStudy.org and refreshed daily. Coordinates come from the ZIP via the Census ZCTA gazetteer; Indiana county resolution uses the Census and GNIS place gazetteer.",
      "terms": "The session listings are HamStudy's and the teams'. The geocoding, county resolution and the shape of this file are ours. Sessions are added and canceled constantly -- check the session's own page before traveling.",
      "bytes": 160079,
      "url": "https://indianahamradio.com/data/examSessions.json"
    },
    {
      "file": "countyNeighbors.json",
      "title": "Which counties adjoin which",
      "what": "For each of the 92 counties, the counties that border it -- what the \"nearby counties\" links on each page are built from.",
      "origin": "Derived from US Census county boundary files.",
      "terms": "Census boundaries are US government work in the public domain; the adjacency derivation is ours and free to use.",
      "bytes": 17546,
      "url": "https://indianahamradio.com/data/countyNeighbors.json"
    },
    {
      "file": "countyCentroids.json",
      "title": "County centroids",
      "what": "A latitude and longitude for each county, used to place them on the map.",
      "origin": "Derived from US Census county boundary files.",
      "terms": "Census source data is public domain; the derivation is ours and free to use.",
      "bytes": 2637,
      "url": "https://indianahamradio.com/data/countyCentroids.json"
    },
    {
      "file": "nwsOffices.json",
      "title": "National Weather Service offices by county",
      "what": "For each county, the National Weather Service forecast office (CWA) responsible for its watches and warnings, its radar station, county and forecast zone codes and time zone -- plus each office's own name, address, phone, email and public URL.",
      "origin": "National Weather Service api.weather.gov: each county centroid resolved against /points and cross-checked against the county's own /zones/county entry, office details from /offices.",
      "terms": "NWS/NOAA data is US government work in the public domain; the county/office mapping and this file's shape are ours and free to use.",
      "bytes": 14070,
      "url": "https://indianahamradio.com/data/nwsOffices.json"
    },
    {
      "file": "spotterTraining.json",
      "title": "SKYWARN spotter training classes",
      "what": "Every upcoming National Weather Service storm spotter training class an Indiana resident can attend: date, time and time zone, whether it is online or in person, the town and venue where it is not, which forecast office runs it and how to register. Plus all six offices that cover Indiana, their schedule pages, and whether this site reads that office's schedule automatically. Past classes drop out rather than accumulating.",
      "origin": "National Weather Service: the NWS Central Region spotter-talk listing, NWS Indianapolis's public spotter training calendar, and NWS Paducah's own schedule page.",
      "terms": "NWS output is US government work in the public domain. The selection -- which classes serve Indiana counties -- and this file's shape are ours and free to use. Spotter training is seasonal: an empty `classes` array in July is a correct answer, not a broken feed. Classes get canceled and move, so the linked office page is authoritative.",
      "bytes": 5638,
      "url": "https://indianahamradio.com/data/spotterTraining.json"
    },
    {
      "file": "dmrIndiana.json",
      "title": "Indiana on BrandMeister DMR",
      "what": "Indiana's BrandMeister DMR talkgroups, and the Indiana DMR repeaters on BrandMeister -- input and output, color code, county, and when the machine was last seen on the network. A repeater whose BrandMeister entry matches one this site already lists on both call sign and output frequency is marked `confirmed: true`; one that matches nothing is published with `confirmed: false`, BrandMeister being its only source.",
      "origin": "The BrandMeister DMR Network's public API, cross-checked against this site's own repeater list. Indiana is determined by a point-in-polygon test against US Census county boundaries.",
      "terms": "BrandMeister publishes no terms of use, license or copyright notice for its API, so this file carries the repeater rows, each marked confirmed (cross-checked) or unconfirmed, and the talkgroup list, with credit and a link back; for the bulk data go to BrandMeister. CONTAINS NO PERSONAL DATA: personal hotspots -- which are most of what the source holds -- are excluded entirely and are not counted, mapped or reversible from anything here. Please keep it that way if you republish it. `lastSeenOnNetwork` is self-reported network presence and is not evidence that anything is transmitting on RF.",
      "bytes": 11421,
      "url": "https://indianahamradio.com/data/dmrIndiana.json"
    },
    {
      "file": "inPlaces.json",
      "title": "Indiana places",
      "what": "Cities, towns and unincorporated places in Indiana with coordinates and county, used to resolve the town a repeater or club names into a point on the map.",
      "origin": "US Census incorporated places and USGS GNIS populated places.",
      "terms": "Both sources are US government work in the public domain.",
      "bytes": 342459,
      "url": "https://indianahamradio.com/data/inPlaces.json"
    },
    {
      "file": "zipPoints.json",
      "title": "ZIP code centroids",
      "what": "A latitude and longitude for every US ZIP Code Tabulation Area (ZCTA), including Puerto Rico, the Virgin Islands and Guam -- what a distance search resolves a ZIP to. Coordinates are rounded to 2 decimal places (about 1 km), which is finer than any \"near me\" search here needs.",
      "origin": "US Census Bureau 2023 Gazetteer file for ZCTAs.",
      "terms": "Census source data is public domain; the compaction into this map is ours and free to use.",
      "bytes": 775756,
      "url": "https://indianahamradio.com/data/zipPoints.json"
    },
    {
      "file": "technicianPool.json",
      "title": "Technician question pool",
      "what": "The full NCVEC Technician class question pool, parsed into questions, answers and figures.",
      "origin": "NCVEC Question Pool Committee.",
      "terms": "Released by NCVEC for public use. The parsing into JSON is ours and free to use.",
      "bytes": 147098,
      "url": "https://indianahamradio.com/data/technicianPool.json"
    },
    {
      "file": "generalPool.json",
      "title": "General question pool",
      "what": "The full NCVEC General class question pool, parsed into questions, answers and figures.",
      "origin": "NCVEC Question Pool Committee.",
      "terms": "Released by NCVEC for public use. The parsing into JSON is ours and free to use.",
      "bytes": 157227,
      "url": "https://indianahamradio.com/data/generalPool.json"
    },
    {
      "file": "extraPool.json",
      "title": "Extra question pool",
      "what": "The full NCVEC Amateur Extra class question pool, parsed into questions, answers and figures.",
      "origin": "NCVEC Question Pool Committee.",
      "terms": "Released by NCVEC for public use. The parsing into JSON is ours and free to use.",
      "bytes": 230873,
      "url": "https://indianahamradio.com/data/extraPool.json"
    },
    {
      "file": "hamfests.json",
      "title": "Hamfests with a confirmed date",
      "what": "Every Indiana hamfest currently on the calendar: name, ISO date, city, venue, host club and the page the date came from, plus the last day of a hamfest that runs more than one, hours, vendor setup, admission, table fees, talk-in, on-site VE testing and the event's own public contact where the host has published them (null or absent where it has not). Past runnings come out of the list rather than being archived.",
      "origin": "This site's own compilation from the clubs' published announcements and the ARRL hamfest calendar, re-checked by hand.",
      "terms": "Ours. Use it freely. Dates move, and the linked source is authoritative -- where this file and the host club disagree, the club is right, and we would like to hear about it.",
      "bytes": 5363,
      "url": "https://indianahamradio.com/data/hamfests.json"
    },
    {
      "file": "annualEvents.json",
      "title": "Yearly operating calendar",
      "what": "The operating events Indiana hams take part in every year -- Winter Field Day, the Indiana QSO Party, Field Day, JOTA, School Club Roundup, POTA and the rest -- each with the recurrence rule in words, the next dates where there are any, and whether those dates are confirmed by the sponsor.",
      "origin": "This site's own compilation from each event sponsor's published announcements.",
      "terms": "Ours. Use it freely. Read `confirmed` before you rely on `next`: false means the sponsor has not posted that running yet and the dates are the recurrence rule carried forward. Dates move, and the linked source is authoritative.",
      "bytes": 2451,
      "url": "https://indianahamradio.com/data/annualEvents.json"
    },
    {
      "file": "calendars.json",
      "title": "County calendars you can subscribe to",
      "what": "One iCalendar (.ics) feed per county plus a statewide one, at https://indianahamradio.com/calendars/{slug}.ics -- the nets that meet in a county, the hamfests and exam sessions held there, and the national operating events, with a correct time zone on every recurring net. This file is the index of them: every URL, its time zone, what it contains and a fingerprint of its current contents. Subscribe to the .ics, do not download it.",
      "origin": "Generated by this site from its own nets, hamfest, exam session and operating-event data. Every event names the source it came from and links back to the club and the county page.",
      "terms": "Ours. Use them freely -- point your club's members at one, embed one, or build on them. Clubs are the authority on their own events; where a calendar and a club disagree, the club is right, and we would like to hear about it.",
      "bytes": 43763,
      "url": "https://indianahamradio.com/data/calendars.json"
    }
  ],
  "stability": {
    "urls": "These URLs are stable. A dataset that moves keeps a copy at the old path, and one that is withdrawn says so in this index rather than disappearing.",
    "fields": "Fields may be added. An existing field will not be removed or change meaning without notice here first.",
    "cadence": "Regenerated on every deploy, which is whenever the site changes -- several times a week. Every file carries a _generated date, the day its contents last changed, and the index carries one for the set.",
    "breakage": "If something here breaks what you built, say so at campbell@indianahamradio.com and it will be looked at."
  },
  "per_county": {
    "pattern": "https://indianahamradio.com/data/counties/{slug}.json",
    "example": "https://indianahamradio.com/data/counties/boone.json",
    "all": "https://indianahamradio.com/data/counties/all.json",
    "all_bytes": 590049,
    "slugs": "https://indianahamradio.com/data/counties.json",
    "files": 92,
    "median_bytes": 5394,
    "total_bytes": 589824,
    "statewide_alternative": {
      "files": 8,
      "bytes": 265306
    },
    "what": "Everything this site holds about one county in a single file: clubs, license statistics and the county's year-by-year trend, club-sourced repeaters (a row matched to an Indiana Repeater Council record also carries the Council's call, sponsor, notes and location, credited to the Council; see ircRepeaters.json for its terms) and the Council's coordinated records for the county, nets, emergency management and ARES contacts, hamfests and exam sessions held there, adjoining counties and a centroid.",
    "why": "Assembling one county out of the statewide sets means fetching eight files to use about one percent of them. Use these instead unless you actually want the whole state."
  },
  "calendars": {
    "pattern": "https://indianahamradio.com/calendars/{slug}.ics",
    "example": "https://indianahamradio.com/calendars/delaware.ics",
    "statewide": "https://indianahamradio.com/calendars/indiana.ics",
    "index": "https://indianahamradio.com/data/calendars.json",
    "how": "In Google Calendar use Other calendars > From URL. In Apple Calendar use File > New Calendar Subscription. In Outlook use Add calendar > Subscribe from web. Paste the .ics URL exactly as it appears here.",
    "what": "Each county calendar carries the nets that meet in that county, the hamfests and license exam sessions held there, and the national operating events Indiana clubs take part in. The statewide calendar carries the statewide nets, every hamfest and exam session in Indiana, and the same operating events -- not the hundred-odd local repeater nets.",
    "why": "Most Indiana clubs keep no calendar at all. A club that wants one can point its members at the URL for its county and never maintain anything: it stays current because this site regenerates it."
  },
  "listed_not_published": [
    {
      "title": "Coordinated repeaters (Indiana Repeater Council)",
      "what": "Coordination records from the IRC, Indiana's recognized frequency coordinator since 1971. This site renders them on the county and repeater pages with credit, and does not republish the database.",
      "origin": "The Indiana Repeater Council, Inc.",
      "terms": "Go to the IRC for it. Credit them if you use it, as this site does. A machine absent from their list is not necessarily off the air, and a coordinated one is not necessarily on it.",
      "url": "https://www.ircinc.org/?page_id=63",
      "search": "https://flexweb.ircinc.org/search.html"
    }
  ],
  "withdrawn": []
}
