> ## Documentation Index
> Fetch the complete documentation index at: https://docs.signa.so/llms.txt
> Use this file to discover all available pages before exploring further.

# Firm Analytics

> Retrieve a composed analytics report for a firm

## When to use this

Use this endpoint to compare firms for portfolio prosecution work or understand which jurisdictions and classes dominate a firm's practice. It returns the firm's live trademark portfolio in one report.

Reports are invalidated on party updates, with a 24-hour TTL backstop; `Server-Timing` reports `cache;desc="hit"` or `cache;desc="miss"`.

## Path Parameters

<ParamField path="id" type="string" required>Firm ID (`firm_*`).</ParamField>

## Code Examples

<CodeGroup>
  ```bash cURL theme={null}
  curl https://api.signa.so/v1/firms/firm_N2R3jK8m/analytics \
    -H "Authorization: Bearer sig_YOUR_KEY"
  ```

  ```typescript TypeScript theme={null}
  import { Signa } from "@signa-so/sdk";

  const signa = new Signa({ api_key: process.env.SIGNA_API_KEY });
  const report = await signa.firms.analytics("firm_N2R3jK8m");
  console.log(report.portfolio.mark_count, report.portfolio.active_count);
  ```
</CodeGroup>

<ResponseExample>
  ```json Response theme={null}
  {
    "object": "analytics_report",
    "subject": {
      "id": "firm_N2R3jK8m",
      "object": "firm",
      "name": "EXAMPLE LLP"
    },
    "portfolio": {
      "mark_count": 842,
      "active_count": 700,
      "dead_count": 142,
      "status_distribution": {
        "registered": 700,
        "expired": 142
      },
      "class_distribution": {
        "42": 180
      },
      "jurisdiction_spread": {
        "US": 620,
        "EU": 222
      },
      "filing_trend": {
        "2025": 95
      }
    },
    "litigation": null,
    "transactions": null,
    "generated_at": "2026-07-11T08:00:00.000Z"
  }
  ```
</ResponseExample>

`litigation` and `transactions` are always `null` because the data model has no firm litigation or transaction grain. Owner/entity transaction reports expose conveyance-type buckets, assignee-side `acquired_count`, assignor-side `divested_count`, first/last recording dates, and lien counts. A security interest is unreleased until a non-purged release points back to its reel/frame; `marks_with_liens` deduplicates marks on those unreleased recordings.

Acquirers use owner/entity transaction blocks to gauge brand-transaction history, and lenders use them to check for unreleased liens before extending credit. See [list assignments](/api-reference/records/transactions/list-assignments), [get an assignment](/api-reference/records/transactions/get-assignment), and the [chain-of-title and lien diligence guide](/guides/chain-of-title-lien-diligence) for recording-level detail.
