For MTSS and attendance coordinators: an intervention is only as real as the contact record behind it
The tier is a decision. The contact is the intervention. In a review, a hearing or a state monitoring visit, what gets examined is neither the tier nor the plan but the evidence that somebody told the family, on a date, through a channel they could actually receive.
| Tier | Population | Contact cadence | Who sends | What must be on the record | The reviewer's question |
|---|---|---|---|---|---|
| Tier 1 | All students | Termly, plus event-driven | District or building comms | That the message went to every enrolled household in a language they can read | "Show me that all families were informed of the attendance policy." |
| Tier 2 | Students at 5–9% absence, or 3+ unexcused | Every 2–3 weeks while in tier | Named building staff member | Date, channel, guardian reached, outcome, next step agreed | "What did you try before referral, and when?" |
| Tier 3 | Students at 10%+, or post-SART/SARB | Weekly, plus a scheduled conference | Case manager or coordinator | Every attempt including failed ones, with the reason each failed | "Did the family have a real opportunity to participate?" |
| Exit / step-down | Students who improve | One contact confirming the change | Whoever owned the tier | The date the tier changed and the fact the family was told | "When did support stop, and did anyone tell the parent?" |
The failure mode is not the plan, it is the gap between attempts
Almost every intervention record that falls apart under review falls apart the same way. The tier-2 entry says "parent contacted 10/14", and there is nothing that says which parent, on what number, whether the number connected, or whether the person who answered was the guardian of record. The next entry is 11/26 — six weeks later, in a cadence that was supposed to be fortnightly — and there is no record of the four attempts in between that failed silently because the mobile number had been disconnected since August.
A reviewer does not conclude that the family was unreachable. A reviewer concludes that the district did not try. The distinction is only visible if failed attempts are recorded as events, with a reason, rather than simply not appearing.
What the record is made of
Every send writes an entry to a per-organisation append-only audit log. Each entry stores a SHA-256 hash computed over the previous entry's hash and the canonical form of the event, so an alteration anywhere in the sequence is detectable by recomputing forward from any known-good point. The chain is serialised under a Postgres advisory transaction lock, so simultaneous sends from two staff members cannot produce a chain that verifies incorrectly.
Append-only is enforced twice, independently: UPDATE and DELETE are revoked from the application database role, and the row-level security policy set contains no UPDATE or DELETE policy. A district administrator cannot quietly remove an entry, and neither can we.
Delivery outcomes are recorded per recipient and per attempt, and an SMS that fails terminally triggers a voice attempt linked back to the original by a failover_from reference. So the record shows "text failed, call placed, call answered" as three related facts rather than one ambiguous success. Row-level idempotency — a unique key of broadcast, person and channel — means a retried dispatch does not produce a second row that looks like a second contact attempt.
The honesty box, in the form you need it
Nothing escalates automatically. Auto-notice rules can be configured and no engine fires them. If your model depends on the platform moving a student from tier 1 to tier 2 at a threshold and notifying the family, Kastr does not do that. Neither does it detect data-health problems on its own — issues can be cleared in the interface but nothing in the product ever raises one.
Tier lists must be explicit person lists. Audience targeting resolves only "specific people" and "everyone". Grade, school, class and language presets do not filter; the API rejects them with a 400. In practice that means your tier-2 cohort is a saved audience preset built from named students, rebuilt when the cohort changes. That is a real cost in your time and we would rather you cost it now.
Send-time suppression is not enforced. Audience resolution does not yet consult enrolment status or messaging-suppressed flags. A student withdrawn last week can still have guardians resolve into a send. For a coordinator whose lists are built from historical absence data, this is the limitation most likely to bite you.
The workflow that works despite all that
- Build the tier cohort in whatever you already use to build it — the SIS query, the early-warning dashboard, the spreadsheet.
- Select those students in Kastr. Selecting a student expands to all their guardians, so the second household is included by construction rather than by remembering.
- Save the selection as a named audience preset: "Tier 2 — attendance — Q2". Rebuild it when the cohort changes rather than trusting it to update itself.
- Send on the cadence. The audit entry is the intervention record; do not maintain a parallel one, because two records that disagree are worse than one incomplete one.
- Where a scheduled send is right, note that the audience is resolved at send time rather than at schedule time, so students added to the preset between now and Friday are included.
Retention defaults are published per record class — student PII, guardian, staff. Stated precisely: those are documented defaults, not an enforced purge. No job runs against them today, so treat the retention table as a policy statement you can show a reviewer, not a control you can rely on.
Questions people actually ask
Can I prove which families were contacted, when, and on which channel?
Yes. Each send writes to a hash-chained append-only log with per-recipient, per-attempt delivery outcomes, including failures and the voice call that a failed SMS triggered. The chain makes silent alteration detectable, and append-only is enforced both by revoked database privileges and by the absence of any UPDATE or DELETE policy.
Can I target a message to a specific tier or intervention group?
Only by building it as an explicit list of people and saving that as an audience preset. There is no working grade, school or class filter, and no concept of a tier inside the product. The preset approach works; it just costs you the time to maintain the list.
Does Kastr automatically escalate a family after a threshold?
No. The rule configuration screen exists and nothing reads it. Escalation is a human decision followed by a human send. We list this as roadmap rather than as a feature because a district that plans around an engine that does not exist finds out in October.
Can the same log be used in a truancy or SST hearing?
The content is the right content — dates, guardians, channels, delivery outcomes, sending staff member, with tamper-evidence you can explain to counsel. The mechanics of getting it out are a request to us rather than a self-serve export, because the export route is a contract right under §7.1 and not yet a button in the product.
Does a retried send show up as a second contact attempt?
No. Dispatch is idempotent at the row level, keyed on broadcast, person and channel, so a worker that crashes and retries does not create a duplicate delivery or a duplicate record. A genuine second attempt on a different channel — the SMS-to-voice failover — is recorded as its own attempt with a reference back to the one it replaced.
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.