Database statistics

The Maryland court record, made usable.

Case Harvester continuously collects court records from the Maryland Judiciary Case Search and keeps them current, built so researchers, legal aid, advocates, and journalists can understand the courts. Every figure below is traceable to its source document.

24 jurisdictions 6 case categories Depth to 2000 (1990 in Baltimore City) New filings daily
35.9Mcases & growing
SOURCE · SELECT count(*) FROM case_info
Coverage

What's in the database

Every case we find is parsed into the same set of tables. These figures cover every case found so far, and the collection is still growing.

Cases by category

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 them blank instead of guessing.

Criminal (CR)19M
No category recorded9.2M
Civil (CV)6.7M
Domestic violence (DV)418.1K
Family (FAM)378.9K
Probate / other (PR)31K
Appellate (AP)19.3K
SOURCE · SELECT case_category, count(*) FROM case_info GROUP BY 1

Cases by filing year

Filing-date distribution · note the 2020 pandemic dip

1980199520102026
SOURCE · SELECT date_part('year', filing_date), count(*) FROM cases GROUP BY 1 · excludes 18.3K cases whose recorded filing year is before 1980

Jurisdictions covered

All Maryland counties + Baltimore City

24 / 24
SOURCE · every Maryland jurisdiction is represented in the full database

Version-tracked documents

Distinct source documents retained (append-only)

12.1M
SOURCE · SELECT reltuples FROM pg_class WHERE oid='scrape_versions'::regclass

Judicial officers

From the Judiciary's five official ID lists: District Court judges and commissioners, Circuit Court judges, Appellate Court judges, and Supreme Court justices

2.4K
SOURCE · SELECT count(DISTINCT person_key) FROM judicial_officers

Attorney directory

Roster listings observed through the Judiciary's attorney search, with published sanctions from fiscal year 2006 on

58.5K listings · 1.5K sanctions
SOURCE · SELECT count(*) FROM attorney_listings · SELECT count(*) FROM attorney_sanctions

Appellate opinions

The courts' own index of reported opinions, 1995 onward

10K · 2.4K linked to their case records
SOURCE · SELECT count(*), count(case_number) FROM appellate_opinions

Judge-case links

Cases linked to the judicial officers on them. Every link records how the match was made

15.8M
SOURCE · SELECT reltuples FROM pg_class WHERE oid='judicial_officer_case_links'::regclass
Freshness

How current the data is

How often a case is re-checked depends on how recently it was filed and whether it is still active. Recently filed cases are re-checked within days, active older cases at least monthly, and long-dormant ones a few times a year.

Some cases no longer return details from Case Search, whether shielded, removed, or no longer reachable. Those are retired from re-checking and counted separately. Their last known record stays in the database.

When active cases were last refreshed

Share of active cases by age of most recent successful scrape

85%3%0%11%
≤ 30 days 31–90 days 90+ days retired · no longer available from Case Search
SOURCE · count(*) FILTER (WHERE now() − last_scrape ≤ 30 / ≤ 90 / > 90 days) FROM cases WHERE active AND NOT scrape_exempt

Pipeline status

When each stage last completed work

Collector (daily new filings)12h ago
Normalizer (unified schema)1m ago
Scraper (case detail)0m ago
Spider (discovery)37d ago
Sources & integrity

How we know what we know

Every fact is traceable to a timestamped source document, and nothing is silently overwritten. Expungement and shielding both change what Case Search returns. We record what changed instead of quietly dropping the case.

01

Append-only version history

Each re-scrape that finds changes writes a new version, and earlier source documents are never overwritten. Every case has an auditable point-in-time history.

02

Content-hash de-duplication

We compare each new copy of a case against the last one, so only a real change is recorded as a new version.

03

Removed charges, retained & flagged

When a charge disappears from a later version, whether by expungement or under the Case Search display law, it's kept with its last-seen outcome and marked Removed from Case Search.

04

Shielded cases, retained & flagged

When Case Search stops showing a case we already collected, we keep our copy and flag it Shielded. The flag records what we saw. Case Search doesn't say why a case disappeared.

Known field gaps

Fields Case Search publishes that we have not mapped into the database yet

0 open

Shielding attrition

In a July 2026 resample of 100 pre-2023 criminal cases, 51 no longer returned details from Case Search. A known, non-random gap.

51 / 100 sampled

Raw documents exposed publicly

Unredacted source records are never served publicly

0
Responsible use

What this is (and what it isn't)

We refuse background-check and people-search uses. That is a condition of access, not a pricing tier, and no license unlocks it.

✓ What Case Harvester is

  • Research & transparency infrastructure for Maryland courts
  • Every fact traceable to its source, with coverage & freshness stated plainly
  • Licensed research access for approved researchers and organizations under a data-use agreement

✕ What it is not

  • Not a background-check service
  • Not for tenant or employment screening
  • Not a bulk person-lookup or people-search tool
  • Not a source of legal advice or eligibility determinations
Structured party fields for criminal defendants and eviction tenants omit names, exact dates of birth, physical descriptors, and street addresses by default on every access method. 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. When the court provides both a usable name and a full date of birth, currently about 55.2% of protected criminal-defendant rows, we substitute a stable pseudonym and a five-year range of birth years. Other protected records cannot be linked this way. Race, gender, city, state, and zip code remain visible when the court provides them. See the methodology for the limits. This database is a best-effort research resource, not an official court record.
Access

Get access

Researchers who need the records themselves use one request form for Case Harvester. The same base dataset is available at every pricing level, including case records, attorney listings, judicial officers, and appellate opinions.

Licensed

Funded research & institutions

  • Web app for browsing and filtering, documented REST API, filtered CSV export, and an MCP server for your own AI tools
  • $2,500 for a twelve-month project license, $10,000 a year for a team's ongoing work. Institutional and government agreements quoted individually
  • One flat price however much you query, with a ceiling to stop bulk extraction, raised on request if real work runs past it
  • Under a data-use agreement and our license terms
Request access →

Public-interest access

  • Web app for browsing and filtering, documented REST API, filtered CSV export, and an MCP server for your own AI tools
  • Pay what you can if your work is in the public interest and unfunded
  • Under a data-use agreement and our license terms
Request access →