Emergency Mass Notification for School Districts
Every vendor in this category will tell you their emergency send is fast. Almost none will tell you what happens between the button and the handset, or what their targeting silently cannot do. This page does both, including the parts where we come off badly.
| Stage | What happens | What it protects against | What it does not do |
|---|---|---|---|
| Audience resolution | Recipients are resolved at send time from current records, not from a saved list | Messaging families of students who withdrew in October | Send-time suppression of withdrawn or opted-out records is not enforced today |
| Queue claim | Workers claim rows with SELECT FOR UPDATE SKIP LOCKED under a five-minute claim TTL | A crashed worker stranding its share of the district | Nothing about it is instantaneous; we publish no send-time figure |
| Idempotency | Unique key per broadcast, person and channel | A retry after partial failure double-sending at 6am | It cannot deduplicate two separate broadcasts a human sent twice |
| Network I/O | Carrier calls happen outside the database transaction | A slow carrier holding locks across the whole send | — |
| SMS attempt | Per-segment send to each validated mobile contact point | — | Carrier filtering of unregistered 10DLC traffic, which is silent |
| Voice failover | Terminal SMS failure triggers a voice attempt, linked back to the original row | A dead mobile number ending the attempt | It is a failover, not a simultaneous multi-channel blast |
| Quiet hours | Default 21:00–07:00, bypassed only for emergency-flagged sends | Routine traffic training families to mute you | — |
| Emergency flag | Overrides per-family channel preferences and quiet hours, gated on a separate capability | Anyone who can send a newsletter triggering an alert | There is no two-person authorisation and no separate emergency console |
The targeting problem, stated plainly
This is the part of the page that costs us deals, and it belongs above the pricing rather than below it.
Kastr resolves two audience shapes today: everyone in the district, and an explicitly selected set of people. Grade-level, school-level, bus-route and language presets do not resolve. Our API rejects them with a 400. If your emergency plan depends on messaging one campus while the other eleven carry on, Kastr cannot do that for you today and you should not buy it on the promise that it will.
We are writing that down because the alternative is that you discover it during an incident. When you evaluate any vendor in this category, the test is not whether the dropdown exists. It is whether you watched a message go to one school's families and not another's, in a demo tenant with your own roster loaded.
The related question, which almost nobody asks: what happens at send time to a student who withdrew last month? In our case the audience resolver does not currently check suppression, enrolment status or consent state at send time. That is a real gap, it is on our list, and it is the kind of thing that only surfaces when a family gets an alert about a school their child left.
Cost, and seeing it before you send
SMS and voice are metered. Email is effectively free. That means the cost of an emergency send is decided by two choices made in the composer — which channels, and how long the message is — and in most platforms neither choice shows you a number until the invoice.
Kastr's composer shows a live per-channel dollar estimate as you tick channels and type. Not because cost should govern an emergency send — it should not — but because it changes behaviour on the four hundred routine sends a year that surround it, and because a district-wide voice call is materially more expensive than districts expect. The estimate is a deliberate upper bound, so the real charge lands under it rather than over.
The segment boundary is the part people miss. An SMS runs 160 characters in GSM-7. A message that spills three characters past the boundary becomes two segments across every recipient, which is why the holding statements on the holding statements page are written to fit inside one.
What it costs, without a sales call
Every named competitor in this category makes you ask. ParentSquare's pricing page, fetched 4 August 2026, contains three tiers, four add-ons, 510 words and no dollar figure of any kind; all three columns share the button "Contact sales". Bloomz does publish $3/$5/$7/$9 — but voice and auto-notices start at the $5 tier, and their pricing page canonicalises to their own homepage, so it cannot rank. ClassDojo is free to districts and monetises families directly instead.
Ours: $3.50 per student per year under 5,000 students, $3.25 from 5,000 to 14,999, $3.00 at 15,000 and above. One tier. Emergency sending, voice, translation and the API are included at every size — there is no emergency module to add on. The per-student rate is fixed for 36 months under clause 3.2, and year four onward is capped at the lesser of CPI-U or 5%. Clause 9.4 says we will never market or sell to your families, and clause 11.2 gives you a 90-day exit with a prorated refund if we are acquired or materially change our data terms.
Two questions worth asking every vendor on your shortlist, including us. "Will you write your maximum annual increase into the agreement as a number?" and "Does your delivery report count carrier acceptance as delivery?" Both have one-word answers. Both change the figure you are comparing.
What we do not have
For an emergency evaluation specifically, these are the gaps that matter, and they are all things a competitor will happily raise:
- No SSO of any kind. No SAML, no OIDC, no MFA. Magic link is our only authentication. For a district standardised on Entra ID that is a genuine operational objection.
- No mobile push notifications. The family app is a web app.
- No attachments. You cannot attach a reunification site map to a message. You link to it.
- No SOC 2. Not audited — we are pre-launch and we publish no uptime figure, because we do not have one worth publishing.
- No customer references. None. We are recruiting design partners.
- No load-test numbers. Other vendors publish "40,000 families in 90 seconds" style figures. We have not run that test, so we do not have that number, so we are not going to print one.
What we do have that is unusual in this category: 28 documented REST endpoints, signed outbound webhooks with an HMAC over timestamp and body plus a DNS-resolving SSRF guard, an MIT-licensed CLI and MCP server, a tamper-evident hash-chained audit log, and a published price. Weigh that against the list above honestly. For some districts the list above wins, and that is a legitimate outcome.
Questions people actually ask
What happens between pressing send and a parent's phone ringing?
The audience resolves against current records, delivery rows are written, workers claim them with SKIP LOCKED under a five-minute claim TTL, and each row is attempted per channel with network calls made outside the database transaction. A terminal SMS failure triggers a voice attempt linked to the original row. Row-level idempotency keyed on broadcast, person and channel means a retry cannot double-send.
Do emergency messages override quiet hours?
Yes. An emergency-flagged send bypasses both quiet hours, which default to 21:00 to 07:00, and per-family channel preferences. That override is gated on a separate capability so that routine senders cannot trigger it. Routine messages should never use it — districts that route ordinary traffic through the emergency path train families to ignore the emergency path.
Can we target a single school for an emergency message?
Not in Kastr today. Only district-wide and explicitly-selected-recipient audiences resolve; grade, school, route and language presets do not, and the API rejects them rather than silently expanding. That is a real limitation and we would rather you knew before signing than during an incident.
What does emergency notification cost per student?
$3.50 per student per year under 5,000 students, $3.25 for 5,000 to 14,999, and $3.00 at 15,000 and above, with emergency sending, voice and translation included at every size. There is no emergency add-on module and no per-message fee. The rate is fixed for 36 months and capped afterwards at the lesser of CPI-U or 5%.
What happens when a parent's number is invalid or has not consented?
Contact points carry a validation state and a consent state separately, so a deliverable number that has not consented is distinguishable from a number that is simply dead. Be aware that unregistered A2P 10DLC traffic is filtered by carriers silently rather than rejected with an error, which is the most common invisible failure in school messaging.
One price. Every feature. Locked for three years.
$3.50 per student per year under 5,000 students. No tiers, no add-on modules, no per-message fees. Published on the site because you should not have to book a call to learn a price.