How MCFRLive Works: Behind the Martin County Fire Feed
April 9, 2026 · MCFRLive
Every 30 seconds, a quiet process runs on a server in Martin County and asks a simple question: has anything changed? That question — and the infrastructure built around it — is how MCFRLive works.
The Source: MCFR's Public CAD Feed
Martin County Fire Rescue operates a public-facing Computer-Aided Dispatch (CAD) system that publishes active incidents to a web endpoint. This feed is updated in near real-time as calls come in, units are dispatched, and incidents are cleared. It's the same data that drives the agency's own public scanner page at frd-scanner.martin.fl.us.
The raw feed is a structured HTML table — not a clean API. Each row represents an active unit assignment, with columns for the incident ID, call type, address, responding unit, and unit status. Incidents with multiple responding units appear as multiple rows with shared identifiers.
Parsing and Normalization
MCFRLive's worker process fetches and parses this HTML every 30 seconds using a custom parser. A few challenges make this non-trivial:
- Rowspan rows: When multiple units are dispatched to a single incident, the CAD feed uses HTML
rowspanon shared cells. The parser tracks the last-seen incident ID to correctly attribute continuation rows to their parent incident. - Call type normalization: Raw CAD labels are inconsistent — "MVA INJURY" and "MOTOR VEH CRASH W/ INJURY" both mean the same thing. MCFRLive maps hundreds of raw codes to a standardized set of categories: Fire, Medical, MVC, Rescue, Hazmat, and Service.
- Deduplication: Incidents already in the database are updated rather than re-created, preserving history while reflecting status changes.
The Incident Lifecycle
When a new incident appears in the feed for the first time, MCFRLive records it with a firstSeenAt timestamp and marks it as active. As units update their statuses (Dispatched → Enroute → Arrived), those changes are logged in the unit timeline.
When an incident disappears from the live feed — meaning it's been cleared by MCFR dispatch — MCFRLive records a closedAt timestamp and moves it to the archive. Every incident gets a permanent URL at /incidents/[id].
The Archive
Unlike the official scanner page, MCFRLive keeps everything. Every incident is stored in a PostgreSQL database with full unit timelines, normalized call types, and geocoded locations where available. This makes it possible to browse historical calls by street, zone, call type, or date — and to generate the statistics that power the Stats page.
What MCFRLive Is Not
MCFRLive is not a dispatch system. It doesn't have access to radio communications, private CAD notes, or any information beyond what appears on the public feed. Data may be delayed, incomplete, or approximate. Incident locations are street-level only — not GPS-precise.
For emergencies, always call 911. This platform is for community awareness and informational purposes only.