← Back to Blog
DataDeveloperAnalysisReal Estate

The Rules Engine Runs Every Day

📅 September 21, 2026·⏱ 10 min read·By SpotCrime

Between June 28, 2019, and May 5, 2020, Pennsylvania's courts sealed more than thirty-four million criminal cases from public view. The state has about thirteen million residents. Nobody filed a petition, and no judge signed an order for any one of them.

A computer did it. Pennsylvania was the first state to pass what is now called a Clean Slate law, which seals certain records automatically once they age past a set line. According to the Clean Slate Initiative, fourteen states and Washington, D.C., now have one, counting Pennsylvania. Missouri is the newest, this year.

This post is about what those laws do to data. If you build anything on court records, arrest logs, or background checks, the public criminal record you are copying is no longer a ledger that only grows. A scheduled job edits it. We wrote about crime feeds that quietly delete rows a few weeks ago. This is the same problem with a statute behind it.

Six and a half percent

Expungement is old. What is new is that nobody has to ask for it.

Under the petition system, you had to find out you were eligible, get the forms, sometimes pay a fee, and go to court. Very few people did. In the most cited study of the question, J.J. Prescott and Sonja Starr followed Michigan residents who qualified to have a conviction set aside. Their paper, published in the Harvard Law Review in 2020, found that just 6.5% got one within five years of becoming eligible. (Those who did saw their wages rise more than 22% within a year, compared with where they had been heading.)

For a data pipeline, 6.5% is close to nothing. You could scrape a court portal in 2015, come back in 2018, and the records you had were mostly still there. That assumption is the one Clean Slate breaks.

6.5%
Eligible Michiganders who got a set-aside within five years, petition era (Prescott & Starr)
34M+
Pennsylvania cases sealed in the automated system's first ten months
1,578,501
Michigan convictions automatically expunged, April 2023 to April 2026 (Michigan State Police)

The Pennsylvania figure comes from the state's Unified Judicial System, which counted “over 34 million cases and nearly 47 million offenses” sealed by May 2020. The number is bigger than the population because a case is not a person, and most of what got sealed was never a conviction. Pennsylvania's law covers two categories: charges that ended without a conviction, and certain summary and non-violent misdemeanor convictions more than ten years old where the person has paid what the court ordered.

The Michigan count comes from state police data reported by Bridge Michigan in April. Michigan's rules are narrower and more legible: misdemeanors seal seven years after sentencing, eligible felonies ten years after the person's last sentence or supervision ends, with a cap of two felonies and four of the more serious misdemeanors per person. Murder and sexual assault are excluded.

New York is the big one still in progress. Its law took effect November 16, 2024, and gives the state court system until November 16, 2027, to finish sealing the backlog. Supporters put the number of New Yorkers affected at about 2.3 million. We would treat that as an estimate from the law's advocates until the courts publish their own count.

A job, not a judge

The best document we have found on how this works in practice is a question-and-answer memo the Michigan Supreme Court's State Court Administrative Office sent to trial courts in April 2023, days before automatic set-asides began. It is written for court clerks, and it reads like a runbook.

Here is the mechanism, in the memo's own words:

“The MSP rules engine will run each day and update the Set Aside Report in CJIC Reporter. The JIS case management system will pull data from the CJIC Reporter each day and automatically mark eligible convictions as nonpublic.”

So there is a program at the Michigan State Police that evaluates every conviction against the statute, nightly. Its output is a report. The courts' case system reads that report and flips a flag. The memo also answers the question any engineer would ask next, which is whether a human checks the output:

“Are courts required to confirm the accuracy of each conviction set aside by the MSP rules engine? No. All eligible convictions will be automatically set aside by operation of law.”

We don't read that as careless. It is the whole point of the design. The law says the conviction is set aside when the conditions are met, and the program is how the state notices. But it means the public record now has a publishing schedule, and the schedule is daily.

The memo also spells out who can still see a set-aside conviction. Under MCL 780.623(2), it is a court, an agency of the judicial branch, the department of corrections, a law enforcement agency, a prosecutor, the attorney general, or the governor, and only for purposes the statute lists. Nobody else. Subsection (5) makes it a misdemeanor to divulge, use, or publish nonpublic information about a set-aside conviction outside those purposes.

Read that last line twice if you run a scraper. In Michigan, a copy of a conviction you pulled while it was public can become a copy of nonpublic information the next morning. The statute does not care when you downloaded it. (We are not lawyers, and state laws differ on this. Ask one before you rely on any of it.)

What your copy doesn't know

A court portal is the source. Almost nobody uses the source. Tenant screeners, employment background checks, people-search sites, mugshot aggregators, and academic datasets all work from copies, and a copy only learns about a sealing if someone goes back and asks.

Federal regulators noticed. On January 23, 2024, the Consumer Financial Protection Bureau published an advisory opinion saying background screening companies need procedures to keep sealed and expunged records out of their reports. Once a record is sealed, the Bureau reasoned, reporting it is inaccurate, because there is no longer a public record of the matter.

On May 12, 2025, the Bureau withdrew that opinion, along with sixty-six other guidance documents.

The Fair Credit Reporting Act still requires consumer reporting agencies to follow reasonable procedures to assure “maximum possible accuracy,” and the state sealing statutes still say what they say. What went away was the federal government's written view on how the two fit together. For a company holding a warehouse of court records, the question of how often to re-check them is now mostly between it, the state laws, and whoever sues.

We have written before about what happens when named arrest records get republished. Sealing makes that problem worse in one specific way. A record that was accurate when you copied it becomes wrong later, without anyone touching your database.

History that shrinks from the back

This part is our analysis, not a finding from any study we have seen. We think it matters more than the compliance issue, because it hits people who aren't publishing names at all.

Sealing is triggered by age. In Michigan a misdemeanor becomes eligible seven years after sentencing. So if you pull a count of Michigan misdemeanor convictions by year from a public source today, the recent years are close to complete and the older years have been thinned by the rules engine. Pull the same series next year and 2019 will have shrunk a little more.

The result looks like a trend. Convictions appear to rise over time, because the past is being erased faster than the present. Nothing happened on the street. The ruler changed length, and it changed more at one end than the other.

Pennsylvania adds a second distortion. Its law seals charges that ended without a conviction. So a public docket in Pennsylvania now over-represents cases that ended in a conviction, and a conviction rate computed from it (convictions divided by charges on file) will come out high. Every dismissed or withdrawn charge that aged out has left the denominator.

And the people who remain visible are not a random sample. A person with one old misdemeanor disappears. A person with three felonies, or a recent charge, stays. Prescott and Starr found that people who did get expungements under the old system had subsequent crime rates that compared favorably with the general population. The records being removed look like that group. Any model trained on what is left (a recidivism score, a tenant risk score) is learning from a population that has been filtered toward people with longer and more recent records. We would not ship a model like that without accounting for it.

In our view: a public criminal-records extract is a snapshot of what the law currently allows to be seen. It is not a history of what happened. Two pulls of the same portal a year apart are two different datasets, and you should label them that way.

What sealing doesn't touch

Two notes on scope, since people ask us about this.

First, Clean Slate laws seal records about people: charges, convictions, the court case attached to a name. They don't seal the fact that a burglary was reported on a given block on a given night. An incident record with a time, a place, and an offense type describes an event, not a defendant. That is the kind of data we work with. (Incident feeds have their own suppression rules, mostly about victims, but those are a different statute and a different post.)

Second, sealing is not deletion. Law enforcement and courts keep access, and in Michigan a set-aside conviction can still be considered at a later sentencing. For your purposes, that access doesn't extend to you. The public version is the one you get, and the public version changes.

If you store person-level records

This list is short on purpose. It assumes you already have a lawyer for the legal questions.

  1. Record when you saw it. Every row from a court source gets a retrieved_at and a last_verified_at. Without those two fields you can't answer the only question that matters after a sealing, which is whether the record was public when you last showed it to someone.
  2. Re-verify on the source's schedule, not yours.Michigan's engine runs daily. If you re-check quarterly, you are publishing records up to three months after the state stopped.
  3. Treat a vanished record as a deletion. When a case stops appearing upstream, the safe default is to remove it, not to keep the last version you had. A 404 from a court portal is information.
  4. Keep events and people in separate tables. An incident can outlive the name attached to it. If they share a row, sealing the name forces you to drop the event too, or keep both.
  5. Don't compute historical trends from a current snapshot. Archive dated pulls and compare like with like. A conviction series built from today's portal has the age-based erosion described above baked in.
  6. Know which states you are in.Fourteen states and D.C. have these laws, with different waiting periods, categories, and start dates. Michigan's began April 11, 2023. New York's backlog deadline is November 16, 2027.

A minimal version of the first item looks like this. It isn't clever, and that is fine:

{
  "source": "court_portal",
  "state": "MI",
  "case_id": "…",
  "retrieved_at": "2026-03-02T04:10:00Z",
  "last_verified_at": "2026-09-20T04:10:00Z",
  "upstream_status": "present"   // present | missing | nonpublic
}

If you want more on how a source can change underneath a pipeline, our posts on a records-system migration in Phoenix and why a small count can't carry a trend cover the police-data side of the same habit.

Tonight the rules engine in Michigan will run again, as it has every day since April 2023. Some number of convictions will stop being public by morning. Every copy of them made before then will still say they are.

Access Address-Level Crime Data

Real-time incidents · SpotScore™ safety ratings · 36-month trends · 22,000+ US cities. Normalized and verified — because raw data isn't enough.