Methodology
Case Harvester continuously collects public Maryland Judiciary records. This page describes how records enter the database, how each record stays traceable to its source, and which gaps matter when using the data for research or reporting.
Where the data comes from
Case data originates with public Maryland Judiciary systems. Automated name searches discover dockets through Case Search. The Judiciary's daily new-case reports and its Judgment and Liens Search contribute more case numbers. Each of these paths feeds cases to the same scraper. None of them guarantees that every Maryland case has been found.
A case missing from Case Harvester may fall outside those discovery paths, may have appeared after the latest collection run, or may no longer be available from the Judiciary. Absence from this database is not evidence that a case does not exist.
How current the data is
Each served case may carry the moment it was last read successfully from Case Search. The app shows it on the case page as "Records as of", and the API serves it as recordsAsOf. Use that value when the age of a particular record matters.
Cases are re-checked on a schedule that varies with a case's age and activity rather than on one fixed timetable.
Other datasets and their freshness
Case Harvester also serves five datasets collected separately from case details. Each carries its own observation fields, and the case-level recordsAsOf timestamp does not apply to them.
- Attorney Directory.
attorney_listingscomes from searches of the Maryland Judiciary's attorney search, seeded by attorney names found in case data. There is no scheduled crawl of the full directory.last_seen_atis the most recent search that observed a listing. An old value does not mean an attorney was delisted, and a retained row does not prove current roster membership. - Judicial Officers.
judicial_officerscomes from the Judiciary's five official ID lists, covering District Court judges, District Court commissioners, Circuit Court judges, Appellate Court judges, and Supreme Court justices. An officer who appears in the lists under more than one name keeps every recorded name.source_listandsource_revisionidentify the published input.first_seen_atandlast_seen_atrecord when Case Harvester saw an entry in a published list, andlast_changed_atrecords when the entry itself last changed. Rows linking an officer to cases record how each link was made: some follow officer ID codes the Judiciary itself publishes, and the rest are name matches made by Case Harvester. A link that follows a published ID code asserts only what the Judiciary published. Name-based links are labeled as possible matches. They connect a name on a case record to a name in the directory and do not confirm that the records refer to the same person. Each link row carries its ownupdated_at. - Appellate Opinions.
appellate_opinionscomes from the court-published reported-opinion index for the Supreme Court and Appellate Court of Maryland, covering 1995 onward.filed_dateis the court's date.first_seen_atandlast_seen_atare Case Harvester observation times, andpdf_urlpoints to the source document. - Attorney Sanctions.
attorney_sanctionscomes from the Judiciary's published attorney sanctions pages, collected fiscal year by fiscal year from 2006 onward.source_urlidentifies the source,sanction_dateis the published event date when present,last_seen_atis the latest successful observation, andlast_changed_atrecords the latest source-content change. - Custody Stays.
custody_stayscomes from weekly searches of the DPSCS Incarcerated Individual Locator since August 28, 2026. Each stay is attached to every criminal case whose defendant the listed person possibly matches by name and birth month and year. Its four dates are search dates, the day a weekly search started or finished, never the moment someone was seen:not_listed_afterandlisted_bybound when the stay began, andlisted_untilandgone_bybound when it ended. A blank date means no search has confirmed that end, andstart_stateandend_statesay in words how each stay began and ended. The table is rebuilt after each weekly search, so a row'sidchanges. The coverage page lists what it leaves out.
Coverage and known gaps
Every Maryland county and Baltimore City is represented, but the database does not hold every case ever filed. Limits on how many results Case Search returns, changes in Judiciary systems, unavailable cases, and fields not yet parsed into the structured schema all create gaps. The coverage page lists the gaps we know about and compares the cases we hold with the court's published filing counts. Freshness figures and how far back the records go are on the statistics page.
Legacy records from general civil and appellate dockets do not contain enough detail to choose among the civil, family, probate, and appellate categories. Case Harvester leaves case_category blank instead of guessing.
Charge outcomes Case Search no longer publishes
Since May 2021, Case Search has not published charges that ended in acquittal, dismissal, or nolle prosequi, because Maryland Criminal Procedure § 10-401 bars it from referring to those charges. Until January 31, 2026 the statute excepted a nolle prosequi that required drug or alcohol treatment. Since that date the same bar has also covered charges the court marked stet on the docket at least three years previously, and cannabis possession convictions the Governor later pardoned. Outcome shares for charges disposed after May 2021 include only charges Case Search still publishes, not every charge filed. The text of Maryland Criminal Procedure § 10-401 is on the General Assembly's site. Case Harvester collects what Case Search publishes, so those charges either do not appear or appear with no disposition. Charges disposed before May 2021 carry the full outcome vocabulary. The May 2021 start is what Case Harvester's own records show. The January 31, 2026 changes come from the statute and have not been measured in this database.
Shielded cases and removed charges
Case Harvester keeps cases and charges it collected before they disappeared from Case Search. They are included in queries, counts, exports, case pages, and MCP results for every customer. Shielded cases and removed charges are marked so researchers can include, exclude, or study them directly. In Cases, possibly_shielded (shown as Shielded) and has_expunged_charges (shown as Has Removed Charges) are Yes, No, or blank. In Charges, expunged (shown as Removed from Case Search) works the same way. Each can be filtered on and grouped in an aggregate. Blank means Case Harvester has not checked the record yet. A record that disappeared before Case Harvester first collected it is not in the database.
Why the Shielded mark is uncertain
Case Search returns the same generic response when a requested case does not exist and when the case or a person's identity is protected. Case Harvester marks a case Shielded only if it collected the case earlier, which shows the case existed. The response still does not say why Case Search stopped showing it, and the mark does not confirm shielding.
Maryland law removes records from Case Search in several ways. Criminal Procedure § 10-401 bars Case Search from referring to charges that ended in acquittal, dismissal, or nolle prosequi. Since January 31, 2026 it also covers charges the court marked stet on the docket at least three years previously, and cannabis possession convictions the Governor later pardoned. Expungement removes records on petition or, for many non-convictions, automatically under Criminal Procedure Title 10, Subtitle 1. The Second Chance Act allows shielding of certain misdemeanor convictions under Title 10, Subtitle 3. Laws like these are the likely reason a previously collected case stops returning details.
In a July 2026 resample of 100 pre-2023 criminal cases previously collected by Case Harvester, 51 no longer returned details. A change that broad is consistent with widespread shielding, but the source response cannot establish why any individual case disappeared.
Removed charges and version history
During normal scraping, Case Harvester retains each distinct version of a case's source document that it observes, and only the latest version is served. When a charge present in an earlier version disappears from a later successful read, Case Harvester keeps the charge, marks it Removed from Case Search, and keeps the outcome it showed when last seen. Two laws remove a charge from Case Search: an expungement order, and the Criminal Procedure § 10-401 bar described above, which since January 31, 2026 also reaches a charge the court marked stet at least three years earlier. The record does not say which law removed a charge. The last-seen outcome is the only clue, and a charge removed before Case Harvester first read the case never appears. Measured in September 2026, most charges carrying the marker are non-conviction outcomes dated before May 2021, when Case Search stopped publishing them. Because the stet rule removes a charge three years after the court marks it, the number of stets for a given year falls as cases are read again. We plan to make historical versions of cases queryable in the future.
One docket, several spellings
Maryland systems publish some case numbers both with and without separators, so historical rows can contain duplicate spellings of one case number. Matching ignores hyphens, spaces, and letter case. It keeps zero padding, because real cases exist whose numbers differ only in their zeros, and merging those spellings would merge distinct cases. Research that counts historical rows by raw case-number spelling should account for these duplicates.
Redaction and pseudonyms
Structured party fields for criminal defendants and eviction tenants omit names, exact dates of birth, street addresses, and physical descriptions by default on every access method. Because those names are withheld, a search by name will not find a criminal defendant or an eviction tenant. Research that has to search those names needs a justified, project-scoped grant. Residential property addresses in bail-bond and judgment records are also omitted by default. A justified, project-scoped grant exposes every structured field withheld by the customer redaction policy until its required expiry. Fields used only to operate Case Harvester remain unavailable. Court-authored narrative text remains as published and can mention anyone. Version v1 keyed pseudonym for protected parties, derived from canonical last and first name plus full date of birth. It is NULL without both inputs and currently covers about 55.2% of protected criminal-defendant rows. Rotation or an algorithm-version change breaks joins. Matching pseudonyms identify records with the same canonical first and last name and full date of birth. They do not prove that the records concern one person, do not prevent re-identification, do not join spelling variants or aliases, and do not cover every party.
Fields that remain visible can still support matching against outside data. The data privacy page describes what is withheld and what redaction does not do.
Party Kind
Party Kind says whether a party's name belongs to a person, an organization or a government body, or names property: money, a vehicle or real estate named as a party, such as seized currency or a street address. It is Case Harvester's classification, not a field the court records. TypeSafe's Jev, an AI system, reads each distinct name and nothing else about the party, and returns a kind with its confidence. Jev now also reads a one-line definition of each kind, under which estates and trusts count as organizations, two or more people named together count as a person, and a name that carries a public office, such as a sheriff or a State's Attorney, counts as a government body even when it also names the person. A name classified before the definitions were added keeps the answer Jev gave from the names of the kinds alone, unless it is asked again as described below. The kind is blank when Jev cannot tell, when its confidence is below the level set for that kind, and for a new name until Jev has classified it. That level is 50%, except 95% for Property. For about 230 common names Jev was unsure of, among them 17 spellings of the Office of the Public Defender, the kind comes from a list we reviewed instead. The list matches exact spellings, so a rarer spelling of the same name keeps Jev's answer. Placeholders on the list, such as an unknown tenant or an interpreter, are left blank. The kind is also shown for criminal defendants and eviction tenants, whose names are withheld.
On October 5, 2026 we checked how often the kind shown is correct. We drew random samples of party records and of distinct names and compared each kind shown with the labels two other AI systems gave the same name, each working separately from the name alone. The two agreed on 99.3% of names, and names they disagreed on were left out. Across party records, the kind shown was correct for 98.0% of Organization records (95% confidence interval 95.0 to 99.2%), 100% of Government records (98.1 to 100%) and 99.0% of Person records (94.6 to 99.8%). Across distinct names, it was correct for 99.3% of Organization names (96.3 to 99.9%) and 98.0% of Government names (94.2 to 99.3%). Most of the Organization errors among party records were the Office of the Public Defender, which the reviewed list, applied to every record by October 6, 2026, now classifies as a government body.
A name Jev could not classify at first, because it called the name unclear or answered with less than 50% confidence, may be asked again with the definitions. A kind from that second answer is shown only at the lowest confidence where at least 98% of an October 7, 2026 check was correct: 97% for Person, 89% for Organization, 100% for Government and 95% for Property. The check drew random samples of such names, by distinct name and by party record, and compared Jev's second answers with the labels the same two AI systems gave each name independently. They agreed on 98.1% of names, and names they disagreed on were left out. At those levels the kind shown was correct for all 55 sampled party records that had one. Across distinct names it was correct for all 261 Property names, 57 of 58 Organization names, all 71 Government names and all 13 Person names, at least 98% for each kind once each sampled name is weighted by how many such names it stands for. The same check of 200 records with names first seen in late September 2026 found every kind shown correct: 167 Person records, 29 Organization records, one Government record and one Property record. The one record Jev could not classify was left blank. Among the names that may be asked again, single-word names such as a bare surname nearly all stay blank.
The checks measured how often a kind shown is right. They did not measure how many names of each kind are left blank, so a count of organizations, government bodies or property can miss some whose kind is blank.
Attorney directory links
Each lawyer recorded on a case carries a Directory Match: whether the name may belong to a listing in the Judiciary's attorney directory, and when it does not, why not. The match is Case Harvester's, not a field the court records. An AI system compares the printed name, the city on the case and the years the case was filed with each collected listing whose name could fit, allowing initials and short forms of given names. The same printed name can belong to different lawyers in different places and decades, so a name is compared within the place and era of its case. A comparison is stored once and does not change as the case is read again.
- Possible match: one listing fits the name, the city and the years closely enough to show. The records may still be different people.
- Several possible matches: two or more listings fit equally well, so none is shown.
- No confident match: listings with a fitting name exist, but none fits closely enough.
- No matching listing found: no collected listing has a matching surname and given names. The lawyer may be out of state, or listed by the Judiciary but not yet collected.
- Office or firm: the name is a public office, such as a State's Attorney's office, or a law firm. These are not matched.
- Unclear name: the name could not be read as a person, an office or a firm.
- Not compared: the name has not yet been compared with the directory.
On September 29, 2026 we checked how often a shown match is correct. Two AI reviewers, each working alone from the same written instructions, labelled 460 sampled pairs of a case attorney name and a directory listing. They agreed on 453 pairs, and the seven they disagreed on were left out. Against those labels, 111 of the 112 shown matches in the sample were correct (95% confidence interval 95.1 to 99.8%). The check measures agreement with the reviewers' rules, not independently established identity. Its blind spot is a lawyer who is missing from the directory, such as an out-of-state lawyer, but shares a name with the only collected listing that fits. Such a lawyer is matched to that listing, and the check cannot count how often that happens.
The directory is collected by search, seeded from the names on cases, and is incomplete. A lawyer can be listed by the Judiciary and not yet collected, and No matching listing found can only speak for the listings Case Harvester has. A name that has not yet been compared shows Not compared. The name search on a lawyer's directory page still reaches appearances that carry no match.
Accuracy
Case Harvester is a best-effort collection of records from Maryland Judiciary Case Search. It is not an official court record and is not certified for legal use. It can carry transcription gaps, upstream errors, and delays. Verify consequential facts with the court.
Grouped results, in the Aggregate panel, the API's aggregate route and the MCP aggregate tool, are capped at 50,000 groups. The cap was 1,000 until September 10, 2026. A grouping saved before that date can hold fewer groups than the same filters and grouping return now.
Since September 9, 2026 a capped result keeps the groups with the most rows or the largest sums, and says how many there were in all. Before that date it kept the first ones in alphabetical order, so a capped table saved before then can differ from the same filters and grouping run today.
Last updated: October 9, 2026