Skip to main content
You are an IP counsel advising on the acquisition of Helios Consumer Brands Inc., a mid-market consumer goods company. Before the deal closes, you need a complete picture of their trademark portfolio — how many marks they hold, where, in what condition, and what risks exist (pending oppositions, upcoming deadlines, lapsed registrations). This guide shows how to perform trademark due diligence using the Signa API.

Prerequisites

  • A Signa API key with search:read and trademarks:read scopes
  • The target company name or known identifiers (ticker symbol, LEI, owner ID)

1

Identify the target's owner record

Search for the target by name, ticker symbol, or LEI (Legal Entity Identifier). The ticker and LEI filters join through Signa’s public companies data (SEC + GLEIF).
# Search by name
curl "https://api.signa.so/v1/owners?q=Helios+Consumer+Brands&limit=5" \
  -H "Authorization: Bearer $SIGNA_API_KEY"

# Or search by ticker if publicly traded
curl "https://api.signa.so/v1/owners?ticker=HLCS&limit=5" \
  -H "Authorization: Bearer $SIGNA_API_KEY"

# Or search by LEI
curl "https://api.signa.so/v1/owners?lei=5493001KJTIIGC8Y1R12&limit=5" \
  -H "Authorization: Bearer $SIGNA_API_KEY"
Expected output:
{
  "id": "own_helios01",
  "canonical_name": "HELIOS CONSUMER BRANDS INC",
  "country_code": "US",
  "entity_type": "corporation",
  "trademark_count": 234
}
2

Map the corporate hierarchy via GLEIF

Acquisition targets often hold trademarks through subsidiaries. Use the GLEIF corporate relationship data to identify the full ownership tree.
# Get the target's full profile including public company data
curl https://api.signa.so/v1/owners/own_helios01 \
  -H "Authorization: Bearer $SIGNA_API_KEY"

# Get corporate relationships (parent/child companies)
curl https://api.signa.so/v1/owners/own_helios01/related \
  -H "Authorization: Bearer $SIGNA_API_KEY"
Expected output:
{
  "object": "list",
  "data": [
    {
      "related_owner_id": "own_hel_eu01",
      "name": "Helios Brands Europe GmbH",
      "country_code": "DE",
      "relationship_type": "IS_DIRECTLY_CONSOLIDATED_BY",
      "direction": "child",
      "ownership_pct": 100.0,
      "period_start": "2018-03-01",
      "source": "gleif_level2"
    },
    {
      "related_owner_id": "own_hel_asia01",
      "name": "Helios Asia Pacific Pte Ltd",
      "country_code": "SG",
      "relationship_type": "IS_DIRECTLY_CONSOLIDATED_BY",
      "direction": "child",
      "ownership_pct": 100.0,
      "source": "gleif_level2"
    }
  ]
}
GLEIF relationships use standardized vocabulary. IS_DIRECTLY_CONSOLIDATED_BY means the child entity is directly owned by the parent. Use direction to determine which side of the relationship the target sits on.
3

Enumerate all marks across the corporate family

Collect trademarks from the target and all subsidiaries. This gives you the full scope of what is being acquired.
# Get marks from the parent
curl "https://api.signa.so/v1/owners/own_helios01/trademarks?limit=100&sort=-filing_date" \
  -H "Authorization: Bearer $SIGNA_API_KEY"

# Get marks from each subsidiary
curl "https://api.signa.so/v1/owners/own_hel_eu01/trademarks?limit=100&sort=-filing_date" \
  -H "Authorization: Bearer $SIGNA_API_KEY"
4

Assess portfolio health

Analyze the collected marks to build a health scorecard: status distribution, jurisdiction coverage, upcoming deadlines, and risk indicators.
// Status distribution
const statusDist: Record<string, number> = {};
const jurisdictionDist: Record<string, number> = {};
const classDist: Record<number, number> = {};

for (const tm of allMarks) {
  statusDist[tm.status.stage] = (statusDist[tm.status.stage] || 0) + 1;
  jurisdictionDist[tm.jurisdiction_code] = (jurisdictionDist[tm.jurisdiction_code] || 0) + 1;
  for (const cls of tm.nice_classes) {
    classDist[cls] = (classDist[cls] || 0) + 1;
  }
}

const registered = statusDist["registered"] || 0;
const abandoned = statusDist["abandoned"] || 0;
const expired = statusDist["expired"] || 0;
const pending = (statusDist["filed"] || 0) + (statusDist["examining"] || 0);

console.log("\n=== Portfolio Health Scorecard ===");
console.log(`Total marks: ${allMarks.length}`);
console.log(`Registered: ${registered} (${((registered / allMarks.length) * 100).toFixed(0)}%)`);
console.log(`Pending: ${pending}`);
console.log(`Abandoned/Expired: ${abandoned + expired}`);
console.log(`Jurisdictions: ${Object.keys(jurisdictionDist).length}`);
console.log(`Nice classes covered: ${Object.keys(classDist).length}`);
console.log("\nStatus breakdown:", statusDist);
console.log("Top jurisdictions:", Object.entries(jurisdictionDist).sort((a, b) => b[1] - a[1]).slice(0, 5));
console.log("Top classes:", Object.entries(classDist).sort((a, b) => b[1] - a[1]).slice(0, 10));
Expected output:
=== Portfolio Health Scorecard ===
Total marks: 312
Registered: 241 (77%)
Pending: 38
Abandoned/Expired: 33
Jurisdictions: 14
Nice classes covered: 18

Status breakdown: { registered: 241, examining: 28, filed: 10, abandoned: 18, expired: 15 }
Top jurisdictions: [["us", 124], ["eu", 68], ["cn", 34], ["gb", 28], ["de", 22]]
Top classes: [["3", 89], ["5", 72], ["35", 56], ["21", 45], ["29", 38]]
5

Check for active proceedings and litigation risk

Identify any pending oppositions, cancellations, or other proceedings that could affect the portfolio’s value.
# Check proceedings where the target is a party (as respondent or opponent)
curl "https://api.signa.so/v1/proceedings?party_owner_id=own_helios01&limit=50" \
  -H "Authorization: Bearer $SIGNA_API_KEY"
Expected output:
{
  "object": "list",
  "data": [
    {
      "id": "prc_hel001",
      "proceeding_type": "opposition",
      "proceeding_number": "91278456",
      "status": "pending",
      "filed_date": "2026-01-10",
      "parties": [
        { "owner_id": "own_other99", "name": "GreenGlow Naturals LLC", "role": "opponent" },
        { "owner_id": "own_helios01", "name": "Helios Consumer Brands Inc.", "role": "respondent" }
      ],
      "contested_classes": [3, 5]
    }
  ]
}
Pending proceedings are a material risk factor in M&A. An ongoing opposition could result in loss of rights to a key brand. Make sure to flag these for the deal team and factor potential outcomes into the valuation.
6

Generate a diligence summary

Compile all findings into a structured report suitable for the deal team.
const diligenceReport = {
  target: {
    name: ownerDetail.canonical_name,
    ownerId: ownerDetail.id,
    country: ownerDetail.country_code,
    publicCompanies: ownerDetail.public_companies ?? [],
  },
  corporateFamily: {
    entityCount: familyOwnerIds.length,
    subsidiaries: related.data
      .filter((r) => r.direction === "child")
      .map((r) => ({
        name: r.name,
        country: r.country_code,
        ownerId: r.related_owner_id,
        ownershipPct: r.ownership_pct,
      })),
  },
  portfolio: {
    totalMarks: allMarks.length,
    registered,
    pending,
    abandonedOrExpired: abandoned + expired,
    registrationRate: registered / allMarks.length,
    jurisdictions: Object.keys(jurisdictionDist).length,
    niceClasses: Object.keys(classDist).length,
    statusBreakdown: statusDist,
    topJurisdictions: Object.entries(jurisdictionDist)
      .sort((a, b) => b[1] - a[1])
      .slice(0, 10),
    topClasses: Object.entries(classDist)
      .sort((a, b) => b[1] - a[1])
      .slice(0, 10),
  },
  proceedings: {
    total: allProceedings.length,
    pending: pending.length,
    pendingDetails: pending.map((p) => ({
      type: p.proceeding_type,
      number: p.proceeding_number,
      filedDate: p.filed_date,
      contestedClasses: p.contested_classes,
      opponent: p.parties.find((party: any) => party.role === "opponent")?.name,
    })),
  },
  riskAssessment: {
    overallRisk: pending.length > 3 ? "HIGH" : pending.length > 0 ? "MEDIUM" : "LOW",
    flags: [
      ...(pending.length > 0 ? [`${pending.length} pending proceedings`] : []),
      ...(abandoned + expired > allMarks.length * 0.15
        ? ["High abandonment/expiry rate (>15%)"]
        : []),
    ],
  },
  generatedAt: new Date().toISOString(),
};

console.log(JSON.stringify(diligenceReport, null, 2));

Key risk indicators to flag

Risk FactorHow to detectSeverity
Pending oppositions/cancellationsGET /v1/proceedings?party_owner_id=...&status=pendingHigh
High abandonment rate (>15%)Owner stats abandonment_rateMedium
Marks approaching expiry without renewalGET /v1/portfolios/{id}/deadlines with due_beforeHigh
Thin jurisdiction coverageOwner stats jurisdiction_count vs business footprintMedium
No Madrid filings for international brandsFilter filing_route=direct_national onlyLow
Missing use declarations (US)Deadline type declaration_of_use past windowHigh

What’s next

Ownership Transfer

After the deal closes, plan and execute the trademark ownership transfer.

Class Coverage Audits

Identify gaps in the acquired portfolio’s Nice class coverage.

Portfolio Monitoring

Set up ongoing monitoring for the newly acquired marks.