For attendance clerks

For attendance clerks: the daily list, the letters, and the paper trail somebody will ask you for in March

Your job is judged on a record that nobody looks at until it matters, and then they look at all of it. This page is about the escalation ladder, the evidence each rung needs, and a blunt account of which parts of it a platform can actually take off your desk today.

Last reviewed 2026-08-04 ยท Kastr is pre-launch; we publish dated status rather than logos.

The unexcused-absence escalation ladder, and what each rung has to leave behind
RungTypical triggerChannel that worksToneWhat the record must show
Same-dayPeriod-1 no-show, no call from homeSMS, then voice if the text failsNeutral, factual, no accusation — you do not yet know whyTimestamp, guardian contacted, channel, delivery outcome
Day 3Third unexcused dayVoice call from a person, loggedCurious. The question is what is getting in the wayWho called, what was said, what was agreed, callback number used
Day 5Statutory first-notice threshold in many statesLetter, mailed, plus SMS that a letter is comingFormal. Cites the statute and the countDate generated, address of record, absence dates enumerated, copy retained
Day 10Chronic-absenteeism threshold crossed in a 100-day windowLetter plus conference invitationFormal, with a named person and a date offeredInvitation sent, response or non-response, meeting held or not
Day 15–18Referral to SARB, truancy officer or courtCertified letter; district counsel involvedLegal. Every prior contact enumeratedFull contact history with delivery evidence for each prior notice

The week this page is actually written for

The list arrives at about 07:50 and it is wrong. Three of the students on it are in the building — late, signed in at the wrong desk, or marked absent by a substitute who did not take attendance in the system. Two are on a field trip that somebody forgot to code. One transferred out eleven days ago and is still enrolled because the withdrawal paperwork is sitting in a tray.

By 10:30 you have reconciled the list against period-2 rosters, the sign-in sheet and two phone calls to teachers. Only then can you send anything, because sending an absence notice to a family whose child is sitting in Algebra is the single fastest way to lose the credibility you need on day five.

Thursday is letters. March is the records request — a hearing, an audit, an attorney, or a parent who says they were never told. What you need at that moment is not a report. It is a list of contact attempts with dates, channels and outcomes that somebody outside the district will accept.

The honest part: nothing fires by itself

Kastr does not send attendance notices automatically. There is a screen where auto-notice rules can be configured. No engine reads those rules and nothing fires them. If a vendor's pitch to you is "it runs itself", that is a real advantage they have over us today, and you should weigh it.

Two more limits worth knowing before anyone books a demo: audience targeting resolves only specific people and everyone — there is no grade, school or class filter that works — and send-time suppression is not enforced, so a withdrawn student's guardians are not automatically dropped from a send. That last one matters to you specifically, because your list is the one full of stale enrolments.

What that leaves is a human send, once a day, from a list you already reconcile by hand. Which is what you are doing now. The difference is what happens around the send.

The two-minute daily workflow that survives contact with reality

  1. Reconcile the list as you do now. Nothing replaces this.
  2. Select the students, not the guardians. Selecting a student auto-expands to every guardian attached to that student, so the second parent who is not listed first in the SIS is included without you looking them up.
  3. Save that selection as a named audience preset if it will recur — a tier-2 watch list, for instance. Ad-hoc selections can be saved and reused.
  4. Use send-test-to-me first on any letter you have edited. It delivers only to you, prefixed [TEST], on the real channel.
  5. Check the cost estimate. It updates per channel as you tick boxes, so you find out that voice to 400 households is expensive before you send it, not in a quarterly invoice.
  6. Send. SMS that fails terminally falls over to voice automatically, linked back to the original attempt, so a family with a dead mobile still gets the call.

Quiet hours default to 21:00–07:00 and are applied at dispatch, which means a late reconciliation does not become a 21:30 robocall to nine hundred households.

The paper trail, and what it is actually made of

Every send is written to an append-only audit log. The mechanism matters more than the word "audit": each entry stores a SHA-256 hash computed over the previous entry's hash and the canonical form of the current event, so altering or removing any entry breaks the chain in a way that is detectable by recomputation. Writes are serialised under a Postgres advisory lock so the chain stays correct when two people send at once.

It is append-only at two independent layers. UPDATE and DELETE are revoked at the database role level, and the row-level security policy set contains no UPDATE or DELETE policy at all — not a policy that denies them, but no policy, which in Postgres means the operation cannot succeed.

For a referral packet, what you want out of it is per-notice: the date and time, the guardian, the channel, the delivery outcome reported by the carrier, and the identity of the staff member who sent it. Being precise about a limit here: there is no self-serve export button. Contract clause §7.1 gives you a right to machine-readable export of everything, at any time, without fee or notice, and today we run that export for you on request. The right is enforceable; the button is not built. See what belongs in an audit log for the general form of the question.

Contact records: the field that decides whether any of this works

Every contact point carries both a validation state (is this number syntactically valid, did it ever accept a message) and a consent state (has this household opted in or sent STOP), plus its source and its rank. The distinction is the one that ends most disputes: a family that never received the day-three call because the number in the SIS has been disconnected since September is a data problem, and a family that received it and ignored it is an engagement problem. They look identical on a report that only counts sends.

A student's guardians are attached to the student, not duplicated per school, so a family with children in three buildings is one household with one contact record. And a person who is both a guardian in your district and an employee of it is one person with two effective-dated roles, not two accounts that disagree about a phone number.

Questions people actually ask

Does Kastr automatically send absence notices without me?

No. Auto-notice rules can be configured in the interface, but no engine reads them and nothing fires. The daily send is a human action. We publish that rather than let you find it in week three of an implementation.

Can I prove in a truancy hearing that a notice was sent and when?

Yes, in the sense that matters: every send is recorded in a hash-chained append-only log with the timestamp, the guardian, the channel, the delivery outcome and the sending staff member. Tampering is detectable because each entry's hash covers the previous entry's hash. Getting that record out is a request to us today, not a button in the product — the export right is contractual under §7.1.

Can I send the same notice as text and voice for families without email?

Yes. Channels are selected per send, and SMS falls over to voice automatically on terminal failure, with the failover linked to the original attempt so the record shows both. Voice is materially more expensive than SMS, which is why the composer shows a running per-channel cost estimate before you send.

How do I reach a guardian who is not the one listed first in the SIS?

Select the student rather than a contact. The audience expands to every guardian attached to that student, ranked but not filtered, so a second parent or a grandparent with custody is included without you searching for them. Contact points carry rank and source so you can see which number came from where.

Can I target a message to a grade level or a single school?

No. Only explicit person lists and everyone resolve today. Grade, school, class, language and route presets do not filter correctly and the API rejects them outright. For attendance work this is less limiting than it sounds, because your audience is a reconciled list of named students anyway — but do not plan a grade-wide send around it.

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.