Lien Search for Individuals

How to search liens for sole proprietors, business officers, guarantors, and beneficial owners using Baselayer.

This guide covers how to search liens for individuals in Baselayer: sole proprietors, business officers, personal guarantors, and beneficial owners.

Before reading this guide, review:


1. Why Search Individuals

For some business types and lending products, searching only the business entity is insufficient. Individual lien searches are warranted when the personal financial profile of an owner, officer, or guarantor is material to the credit decision.

When individual lien searches add signal:

Sole proprietors and single-member LLCs There is no meaningful legal separation between the individual and the business. Personal liens - particularly tax liens and judgment liens - directly affect the business's ability to service debt. A sole proprietor's personal IRS lien is as relevant as a business tax lien.

Personal guarantors When an officer or owner is guaranteeing the loan personally, their lien profile is part of the risk assessment. A guarantor with multiple active tax liens or judgments significantly changes the risk picture.

Beneficial owners For higher-risk programs, larger ticket sizes, or regulated financial institutions, extending lien coverage to beneficial owners provides a more complete view of the financial obligations attached to the people behind the business.

Business officers for closely-held companies In small businesses where one or two individuals control all assets and operations, officer-level lien data can surface risks that are not visible at the entity level alone.


2. Three Ways to Search Individual Liens

Baselayer supports three approaches for searching individual liens, depending on what information is available at the time of the request.


Option A: additional_search_entities in a Business Lien Search

The BusinessSearch request variant for POST /lien_searches supports an additional_search_entities array. This lets you search for individuals alongside the primary business in a single API call - no separate requests needed.

curl --request POST \
  --url https://api.baselayer.com/lien_searches \
  --header 'X-API-Key: YOUR_API_KEY' \
  --header 'Content-Type: application/json' \
  --data '{
    "business_search_id": "1504f313-9721-4006-b813-82faf6c6f02d",
    "additional_search_entities": [
      {
        "name": "Jane Smith",
        "type": "Person",
        "search_states": ["DE"]
      },
      {
        "name": "Robert Johnson",
        "type": "Person",
        "search_states": ["FL"]
      }
    ]
  }'

Each filing in the response includes search_entity_name and search_entity_type, so you can immediately identify whether a filing matched the primary business or one of the named individuals. This is the recommended approach when you are running a business lien search and want to include officer or guarantor coverage simultaneously.

For full details on additional_search_entities, see Lien Search: API Quickstart and Lien Search: Best Practices.


Option B: Direct Lien Search Using a person_id

If you already have a person_id from a previous Baselayer person record, you can run a lien search directly against that individual. search_states is required for all person-based lien searches.

curl --request POST \
  --url https://api.baselayer.com/lien_searches \
  --header 'X-API-Key: YOUR_API_KEY' \
  --header 'Content-Type: application/json' \
  --data '{
    "person_id": "f9458925-bea9-4551-9913-31c21658d3d7",
    "search_states": ["DE", "FL"]
  }'

This approach is useful when running a standalone individual lien search outside the context of a business search — for example, when re-screening a guarantor periodically, or when the individual is the primary subject of the inquiry.


Option C: Person Search with Lien Option

If you do not yet have a person_id, you can initiate a person search with lien data included directly in the response by passing the appropriate lien option in a POST /person_searches request. This creates a person record and runs the lien search in a single step, returning both the person profile and lien filings together.

This approach is best when the individual is new to Baselayer and you want to avoid a two-step flow (create person → search liens). Contact your Baselayer representative to confirm the exact option parameter for your integration.


3. State Selection for Individuals

Unlike business lien searches - where the domestic state is a well-defined default - individual lien searches require you to specify search_states explicitly. There is no domestic state equivalent for individuals.

Guidance for selecting states:

  • Use the individual's state of residence as the primary state. This is where personal UCC filings, judgment liens, and state tax liens are most likely to be filed.
  • Add the business's domestic state if the individual's residence is different, particularly for sole proprietors or closely-held business owners who may have mixed personal and business filings.
  • For guarantors, use the state associated with their address as provided during the application. If unknown, the business's primary operating state is a reasonable proxy.

The same false positive risk applies to individuals as to businesses: searching many states for a person with a common name will surface unrelated individuals' filings. Keep state scope targeted.


4. Interpreting Individual Lien Results

The response structure and field definitions are identical to business lien searches. The same filing_type enum, status + lapse_date effectiveness check, and collateral_statements all apply. Refer to Lien Search: Basics for the complete field reference.

Key differences when evaluating individual filings:

Tax liens carry even more weight for individuals A tax.federal_irs or state tax lien against an individual signals unresolved personal tax obligations. For sole proprietors, this is directly equivalent to a business tax lien. For guarantors, it raises questions about the guarantor's ability to fulfill the guarantee.

Judgment liens signal personal disputes Judicial liens (judicial.judgment, judicial.execution) against individuals indicate a court has ruled against them personally. These are significant for guarantors, as existing judgments reduce the practical value of the guarantee.

Apply the same effectiveness check Always verify both status == "active" and that lapse_date is in the future before treating a filing as currently enforceable. The same state registry inconsistencies that affect business filings apply to individual filings.


5. Recommended Workflow

The following pattern covers the common lending use case — a business with a personal guarantor:

import requests
from datetime import date

API_KEY = "YOUR_API_KEY"
BASE_URL = "https://api.baselayer.com"
headers = {"X-API-Key": API_KEY, "Content-Type": "application/json"}

# Single API call: search business + guarantor simultaneously
payload = {
    "business_search_id": "1504f313-9721-4006-b813-82faf6c6f02d",
    "additional_search_entities": [
        {
            "name": "Jane Smith",        # Personal guarantor
            "type": "Person",
            "search_states": ["DE"]      # Guarantor's state of residence
        }
    ]
}

response = requests.post(f"{BASE_URL}/lien_searches", json=payload, headers=headers)
result = response.json()

today = str(date.today())
high_risk = []

for filing in result.get("filings", []):
    status = filing.get("status")
    lapse_date = filing.get("lapse_date")
    filing_type = filing.get("filing_type", "")
    entity_name = filing.get("search_entity_name")
    entity_type = filing.get("search_entity_type")

    # Effectiveness check
    is_active = status == "active" and (lapse_date is None or lapse_date > today)
    if not is_active:
        continue

    subject = f"{entity_type}: {entity_name}"

    if filing_type.startswith("tax."):
        high_risk.append(f"[{subject}] Active tax lien: {filing_type}")
    elif filing_type.startswith("judicial."):
        high_risk.append(f"[{subject}] Active judgment lien: {filing_type}")

if high_risk:
    print("HIGH RISK — escalate to underwriting:")
    for reason in high_risk:
        print(f"  - {reason}")
else:
    print("No high-risk lien signals detected.")

6. Where to Go Next