Discover/Hillsclerk API
live

Hillsclerk APIpublicaccess.hillsclerk.com

Access Hillsborough County court records, foreclosure cases, judgments, and docket events via the publicaccess.hillsclerk.com API. Search by case number or date range.

Endpoints
4
Updated
2mo ago

What is the Hillsclerk API?

This API provides structured access to Hillsborough County Clerk of Court (HOVER) public records across 4 endpoints. Use search_foreclosure_judgment_records to pull foreclosure and mortgage cases filed on a given date, get_foreclosure_judgment_details to retrieve full case summaries including parties, judgments, and docket events, or search_by_date_range_court_type to query civil, criminal, and other court categories by filing date window and case status.

Try it
Date filed (MM/DD/YYYY)
api.parse.bot/scraper/9793a443-1041-4b56-be12-5b67756f7a28/<endpoint>
Ready to send
Fill in the parameters and hit sign in to send to see live response data here.
Call it over HTTPgrab a free API key at signup
curl -X GET 'https://api.parse.bot/scraper/9793a443-1041-4b56-be12-5b67756f7a28/search_foreclosure_judgment_records' \
  -H 'X-API-Key: $PARSE_API_KEY'
Python SDK · recommended

Typed, relational, agent-ready

A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.

  • Fully typed · autocompletes
  • Objects link to objects
  • Typed errors & pagination

Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:

uv add parse-sdk
uv run parse init
uv run parse add --marketplace publicaccess-hillsclerk-com-api

uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.

"""
Hillsborough County Clerk of Court API - Parse Client

Access court records, foreclosure judgments, and case details from the
Hillsborough County Clerk of Court (HOVER) portal.

Get your API key from: https://parse.bot/settings
"""

import os
import requests
from typing import Any, Dict, List, Optional
from datetime import datetime, timedelta


class ParseClient:
    """Client for interacting with the Hillsborough County Clerk of Court API."""

    def __init__(self, api_key: Optional[str] = None):
        """
        Initialize the Parse API client.

        Args:
            api_key: API key for authentication. If not provided, reads from
                    PARSE_API_KEY environment variable.
        """
        self.base_url = "https://api.parse.bot"
        self.scraper_id = "0f4a0650-c0ce-4ead-9fc5-30b7c33b86dd"
        self.api_key = api_key or os.getenv("PARSE_API_KEY")

        if not self.api_key:
            raise ValueError(
                "API key not found. Set PARSE_API_KEY environment variable "
                "or pass it to ParseClient(api_key='...')"
            )

    def _call(
        self, endpoint: str, method: str = "POST", **params
    ) -> Dict[str, Any]:
        """
        Make a request to the Parse API.

        Args:
            endpoint: The API endpoint name
            method: HTTP method ('GET' or 'POST')
            **params: Query/body parameters to send

        Returns:
            Response JSON as dictionary

        Raises:
            requests.RequestException: If the request fails
        """
        url = f"{self.base_url}/scraper/{self.scraper_id}/{endpoint}"
        headers = {"X-API-Key": self.api_key, "Content-Type": "application/json"}

        if method.upper() == "GET":
            response = requests.get(url, headers=headers, params=params)
        else:
            response = requests.post(url, headers=headers, json=params)

        response.raise_for_status()
        return response.json()

    def search_foreclosure_judgment_records(
        self, date: str = "07/28/2025"
    ) -> Dict[str, Any]:
        """
        Search for foreclosure-related cases filed on a specific date.

        Filters results for 'FORECLOSURE' or 'MORTGAGE' in the case type description.

        Args:
            date: Date filed in MM/DD/YYYY format. Defaults to 07/28/2025.

        Returns:
            Dictionary containing total_found count, date, and cases array
        """
        return self._call("search_foreclosure_judgment_records", method="GET", date=date)

    def get_foreclosure_judgment_details(self, case_number: str) -> Dict[str, Any]:
        """
        Retrieve comprehensive details for a specific foreclosure case.

        Includes parties, judgments, and docket events.

        Args:
            case_number: Case number (e.g., 25-CA-001234)

        Returns:
            Dictionary containing summary, judgments, events, and parties
        """
        return self._call(
            "get_foreclosure_judgment_details", method="GET", case_number=case_number
        )

    def search_by_date_range_court_type(
        self,
        date_after: str,
        date_before: str,
        court_type: str = "CV",
        case_status: str = "A",
        case_type: str = "ALL",
    ) -> Dict[str, Any]:
        """
        General search for court cases by date range, court type, and case status.

        Args:
            date_after: Date filed on or after (MM/DD/YYYY)
            date_before: Date filed on or before (MM/DD/YYYY)
            court_type: Court category (CV=Civil, CR=Criminal, etc.). Defaults to 'CV'.
            case_status: Case status (A=All, O=Open, C=Closed). Defaults to 'A'.
            case_type: Case type (e.g., CV for Civil). Defaults to 'ALL'.

        Returns:
            Dictionary containing recordsTotal, recordsFiltered, and data array
        """
        return self._call(
            "search_by_date_range_court_type",
            method="GET",
            date_after=date_after,
            date_before=date_before,
            court_type=court_type,
            case_status=case_status,
            case_type=case_type,
        )

    def search_by_case_number(self, case_number: str) -> Dict[str, Any]:
        """
        Search for a specific case by its case number.

        Args:
            case_number: Full case number (e.g., 25-CC-032147)

        Returns:
            Dictionary containing data array with matching case
        """
        return self._call("search_by_case_number", method="GET", case_number=case_number)


if __name__ == "__main__":
    # Initialize the client
    client = ParseClient()

    print("=" * 70)
    print("Hillsborough County Clerk of Court - Case Research Workflow")
    print("=" * 70)

    # Step 1: Search for recent foreclosure cases
    print("\n[1] Searching for foreclosure cases filed on 07/28/2025...")
    foreclosure_results = client.search_foreclosure_judgment_records(date="07/28/2025")

    print(f"   Found {foreclosure_results['total_found']} foreclosure case(s)")

    if foreclosure_results["cases"]:
        # Step 2: Process each foreclosure case
        for idx, case in enumerate(foreclosure_results["cases"], 1):
            case_num = case["caseNumber"]
            filed_date = case["caseFiledOn"]
            case_type = case["caseTypeDescription"]

            print(f"\n[2.{idx}] Retrieving details for case: {case_num}")
            print(f"      Type: {case_type}")
            print(f"      Filed: {filed_date}")

            # Step 3: Get detailed information for this case
            try:
                details = client.get_foreclosure_judgment_details(case_number=case_num)

                # Display case summary
                summary = details.get("summary", {})
                print(f"      Status: {summary.get('caseStatus', 'Unknown')}")

                # Display parties involved
                parties = details.get("parties", [])
                if parties:
                    print(f"      Parties ({len(parties)}):")
                    for party in parties:
                        print(
                            f"        - {party.get('partyName', 'Unknown')} "
                            f"({party.get('partyRoleDescription', 'Unknown')})"
                        )

                # Display judgments
                judgments = details.get("judgments", [])
                if judgments:
                    print(f"      Judgments ({len(judgments)}):")
                    for judgment in judgments:
                        jtype = judgment.get("judgmentType", "Unknown")
                        jdate = judgment.get("judgmentDate", "Unknown")
                        jamount = judgment.get("judgmentAmount", "N/A")
                        print(f"        - {jtype} ({jdate}): ${jamount:,}")

                # Display recent docket events
                events = details.get("events", [])
                if events:
                    print(f"      Recent Events ({len(events)}):")
                    for event in events[:3]:
                        event_date = event.get("filedDate", "Unknown")
                        event_desc = event.get("eventDescription", "Unknown")
                        print(f"        - [{event_date}] {event_desc}")
                    if len(events) > 3:
                        print(f"        ... and {len(events) - 3} more events")

            except requests.RequestException as e:
                print(f"      Error retrieving details: {e}")

    # Step 4: Search for civil cases in a date range
    print("\n[3] Searching for civil cases filed in the last 7 days...")
    today = datetime.now()
    week_ago = today - timedelta(days=7)

    date_after = week_ago.strftime("%m/%d/%Y")
    date_before = today.strftime("%m/%d/%Y")

    try:
        civil_results = client.search_by_date_range_court_type(
            date_after=date_after, date_before=date_before, court_type="CV"
        )

        records_total = civil_results.get("recordsTotal", 0)
        records_filtered = civil_results.get("recordsFiltered", 0)

        print(f"   Found {records_filtered} civil case(s) from {date_after} to {date_before}")

        # Display first 5 cases
        cases = civil_results.get("data", [])
        for idx, case in enumerate(cases[:5], 1):
            case_num = case.get("caseNumber", "Unknown")
            case_status = case.get("caseStatus", "Unknown")
            case_type = case.get("caseTypeDescription", "Unknown")
            print(f"      {idx}. {case_num} - {case_type} ({case_status})")

        if len(cases) > 5:
            print(f"      ... and {len(cases) - 5} more cases")

    except requests.RequestException as e:
        print(f"   Error searching civil cases: {e}")

    print("\n" + "=" * 70)
    print("Search completed successfully!")
    print("=" * 70)
All endpoints · 4 totalmissing one? ·

Search for foreclosure-related cases filed on a specific date. Filters results for 'FORECLOSURE' or 'MORTGAGE' in the case type description.

Input
ParamTypeDescription
datestringDate filed (MM/DD/YYYY)
Response
{
  "type": "object",
  "fields": {
    "date": "string",
    "cases": "array",
    "total_found": "integer"
  },
  "sample": {
    "date": "07/28/2025",
    "cases": [
      {
        "caseNumber": "25-CA-001234",
        "caseFiledOn": "2025-07-28",
        "caseTypeDescription": "MORTGAGE FORECLOSURE $50,001 - $249,999"
      }
    ],
    "total_found": 1
  }
}

About the Hillsclerk API

Endpoints and Data Coverage

The search_foreclosure_judgment_records endpoint accepts a date in MM/DD/YYYY format and returns an array of cases filtered to those with 'FORECLOSURE' or 'MORTGAGE' in the case type description, along with a total_found count. The get_foreclosure_judgment_details endpoint takes a case number (e.g., 25-CA-001234) and returns four structured objects: summary, parties, judgments, and events — giving a complete picture of a single foreclosure case's docket history and judgment records.

General Case Search

The search_by_date_range_court_type endpoint supports broader queries across court types using court_type codes (CV for Civil, CR for Criminal), a required date range (date_after and date_before in MM/DD/YYYY format), an optional case_type code, and a case_status filter (A=All, O=Open, C=Closed). Responses include a data array plus recordsTotal and recordsFiltered counts for pagination awareness. The search_by_case_number endpoint accepts a full case number (e.g., 25-CC-032147) and returns matching case records in a data array.

Source and Scope

All data reflects public records from Hillsborough County, Florida. Coverage is limited to cases indexed in the HOVER portal — records from other Florida counties or federal courts are not included. Case numbers follow Hillsborough County conventions (two-digit year, court type code, and sequence number).

Reliability & maintenance

The Hillsclerk API is a managed, monitored endpoint for publicaccess.hillsclerk.com — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when publicaccess.hillsclerk.com changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.

This isn't an official publicaccess.hillsclerk.com API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.

Will this API break when the source site changes?+
It's built not to. Every endpoint is health-checked on a schedule with automated test probes. When the source site changes and a check fails, the API is automatically queued for repair and re-verified — that's the self-healing layer. Each API page shows when its endpoints were last verified. And because marketplace APIs are shared, any fix reaches everyone using it.
Is this an official API from the source site?+
No — Parse APIs are independent, managed REST wrappers over publicly available data. That is the point: where a site has no official API (or only a limited one), Parse gives you a maintained, monitored endpoint for that data and keeps it working as the site changes — so you get a stable contract over a source that never promised one.
Can I fix or extend this API myself if I need a new endpoint or field?+
Yes — and you don't have to wait on us. This API was generated by the Parse agent, which stays attached. Describe the change in plain English ("add an endpoint that returns reviews", "fix the price field") in the revise box on the API page or via the revise_api MCP tool, and the agent rebuilds it against the live site in minutes. Contributing the change back to the public API is free.
What happens if I call an endpoint that has an issue?+
Errors are machine-readable: a bad call returns a clean status with the list of available endpoints and a repair hint, so an agent (or you) can recover or trigger a fix instead of failing silently. Confirmed failures feed the automatic repair queue.
Common use cases
  • Monitor newly filed foreclosure and mortgage cases in Hillsborough County on a daily basis using search_foreclosure_judgment_records
  • Build a case research tool that retrieves full judgment details, party names, and docket events for a given case number
  • Track open vs. closed civil cases filed within a specific date window using the case_status filter in search_by_date_range_court_type
  • Aggregate foreclosure filing volume over time by querying total_found across a rolling date series
  • Cross-reference a known case number against court records to verify filing status and associated parties
  • Identify patterns in criminal or civil court filings by court type and date range for legal research or journalism
  • Automate due-diligence checks on properties by looking up related foreclosure judgments before a real estate transaction
Pricing & limitsSee full pricing →
TierPriceCredits/monthRate limit
Free$0/mo1005 req/min
Hobby$30/mo1,00020 req/min
Developer$100/mo5,000100 req/min

One credit = one API call regardless of which marketplace API you call. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.

Frequently asked questions
Does Hillsborough County Clerk of Court offer an official developer API?+
No official public developer API is documented or published by the Hillsborough County Clerk of Court. The HOVER portal at publicaccess.hillsclerk.com is a public-facing records search interface with no documented API keys or developer program.
What does `get_foreclosure_judgment_details` return beyond basic case info?+
It returns four fields: summary (high-level case metadata), parties (an array of all named parties in the case), judgments (an array of judgment records associated with the case), and events (a docket event log showing filed documents and court actions over time).
Can I search cases from counties other than Hillsborough?+
Not currently. All endpoints are scoped to Hillsborough County records in the HOVER portal. You can fork this API on Parse and revise it to point at another Florida county's public access portal to add coverage for that jurisdiction.
Does the API support searching by party name — for example, a defendant or plaintiff?+
Not currently. The four endpoints support lookup by case number, filing date, court type, and case status, but not by party name. You can fork this API on Parse and revise it to add a party-name search endpoint if the HOVER portal exposes that query path.
How current is the case data returned by these endpoints?+
The data reflects whatever is currently indexed in the Hillsborough County HOVER public portal. There is no guaranteed real-time sync — newly filed or recently updated cases may appear with a lag consistent with the clerk's own system update schedule. The events array in get_foreclosure_judgment_details shows the most recent docket activity available.
Page content last updated . Spec covers 4 endpoints from publicaccess.hillsclerk.com.
Related APIs in Government PublicSee all →
sarasotaclerk.com API
Search and retrieve official land and court records from Sarasota County including foreclosures and Lis Pendens documents by name, date, or document type. Access detailed record information with full pagination support to find the specific legal documents you need.
judyrecords.com API
Search and retrieve detailed court records including case information and statistics from a comprehensive legal database. Access specific case details and view aggregated court record stats to research legal proceedings and case outcomes.
examplecourt.gov API
Search and retrieve court judgments, case details, and legal metadata from a national court reporting portal, with support for advanced filtering by court and case category. Access complete case information including full text and browse paginated results to find relevant legal precedents.
bailii.org API
Search and retrieve court judgments and case law from British and Irish courts across multiple jurisdictions, with filtering by date range and location. Access complete case details including full judgment text and metadata to research legal precedents and decisions.
oscn.net API
Search Oklahoma State Court Network records across 80+ counties to find cases, review detailed docket information, and track daily court filings. Quickly look up case details by county and district court type to stay informed on legal proceedings and filing activity.
ecourtsindia.com API
Search and retrieve detailed information about court cases across India's Supreme Court, High Courts, and District Courts from a database of over 239 million cases. Find case details, track legal proceedings, and access comprehensive court records to stay informed about judicial matters across the Indian court system.
qPublic Property Records API
Search for properties on qPublic and access comprehensive details including owner information, valuations, building and land characteristics, sales history, tax exemptions, and fees. Retrieve complete property records to research real estate, verify ownership, or analyze property values.
judgments.ecourts.gov.in API
Search for Indian court judgments and orders across multiple courts to access legal rulings, case decisions, and judicial orders. Find relevant court cases by searching through a comprehensive database of Indian judicial decisions.