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.
You are a brand protection analyst at a sportswear company. You need to track what your three main competitors — NovaSole Inc., VeloGrip Corp., and TrailEdge Ltd. — are filing across the US and EU. When a competitor files a new mark in your core classes (25, 28, and 35), you want to know within 48 hours.
This guide shows how to build a competitor monitoring pipeline using the Signa API.
Prerequisites
- A Signa API key with
trademarks:read scope
- Competitor company names or owner IDs
Identify competitor owner records
Start by searching for each competitor’s owner profile. The owner entity in Signa consolidates all filings under one canonical record, even when name variants exist across offices.# Search for a competitor by name
curl "https://api.signa.so/v1/owners?q=NovaSole&limit=5" \
-H "Authorization: Bearer $SIGNA_API_KEY"
Expected output:NovaSole -> own_ns001 (NOVASOLE INC, 87 marks)
VeloGrip -> own_vg002 (VELOGRIP CORP, 142 marks)
TrailEdge -> own_te003 (TRAILEDGE LTD, 53 marks)
If a competitor has subsidiaries or name variants, use the owner detail endpoint to check aliases[] for alternate names the API has resolved. This prevents you from tracking an incomplete picture.
Review each competitor's portfolio profile
Pull the full owner detail to understand each competitor’s filing patterns, top classes, jurisdictions, and preferred attorneys.curl https://api.signa.so/v1/owners/own_ns001 \
-H "Authorization: Bearer $SIGNA_API_KEY"
Expected output:{
"name": "NovaSole Inc.",
"canonical_name": "NOVASOLE INC",
"stats": {
"trademark_count": 87,
"registered_count": 72,
"registration_rate": 0.83,
"jurisdiction_count": 8,
"earliest_filing": "2020-03-04",
"latest_filing": "2026-02-18"
}
}
For per-class, per-jurisdiction, or per-year breakdowns, use
GET /v1/trademarks with
owner_id=<id> filters (e.g. by nice_class, office_code, or
filing_date_range) and aggregate the list client-side. The ranked-list
JSONB fields that used to be embedded on the owner detail response were
removed in April 2026. List recent filings by competitor
Pull each competitor’s most recent filings to see what brands they are pursuing right now.# Recent filings from NovaSole in classes 25, 28, 35
curl "https://api.signa.so/v1/owners/own_ns001/trademarks?nice_classes=25,28,35&sort=-filing_date&limit=10" \
-H "Authorization: Bearer $SIGNA_API_KEY"
Expected output:Recent filings for own_ns001:
NOVASOLE APEX | uspto | examining | Filed 2026-02-28 | Classes 25,28
NOVASOLE STRIDE | euipo | filed | Filed 2026-01-15 | Classes 25,35
NOVA TRACTION | euipo | examining | Filed 2025-11-20 | Classes 28
Schedule a weekly competitor pull
Rerun the owner-trademarks query from the previous step on a cron schedule (weekly is usually enough) and diff the result against last week’s snapshot. Any new tm_* IDs are fresh filings worth reviewing.async function fetchCompetitorFilings(ownerIds: string[], sinceIso: string) {
const fresh: any[] = [];
for (const ownerId of ownerIds) {
const page = await signa.owners.trademarks(ownerId, {
filing_date_gte: sinceIso,
limit: 100,
});
fresh.push(...page.data);
}
return fresh;
}
const lastRun = "2026-03-17T00:00:00Z"; // persist between runs
const filings = await fetchCompetitorFilings(ownerIds, lastRun);
console.log(`${filings.length} new filings since ${lastRun}`);
Persist the timestamp of your last successful run — typically in your job scheduler or a small key-value store — and use it as filing_date_gte on the next run. This keeps each poll cheap and avoids duplicates.
Watch entire classes for newcomers
Competitor-by-competitor polling misses brand-new entrants. Run a class-filtered search over the same window to surface filings from owners you do not yet track.const classFilings = await signa.trademarks.list({
filters: {
nice_classes: [25, 28],
offices: ["uspto", "euipo"],
filing_date: { gte: lastRun },
},
limit: 100,
sort: "-filing_date",
});
const knownOwners = new Set(ownerIds);
const newcomers = classFilings.data.filter((tm) => !knownOwners.has(tm.owner?.id));
console.log(`${newcomers.length} filings from owners not yet in your tracker`);
Aggregate filing trends over time
Use the search API with aggregations_only to get filing volume trends without downloading individual records. This is useful for quarterly competitive reports.# Get filing volume breakdown for a competitor in the last 3 years
curl -X POST https://api.signa.so/v1/trademarks \
-H "Authorization: Bearer $SIGNA_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"query": "",
"filters": {
"owner_id": "own_ns001",
"filing_date": { "gte": "2024-01-01" }
},
"options": {
"aggregations": ["filing_year", "nice_classes", "office_code", "mark_feature_type"],
"aggregations_only": true
}
}'
Expected output:{
"aggregations": {
"filing_year": { "2024": 12, "2025": 18, "2026": 7 },
"nice_classes": { "25": 18, "28": 12, "35": 7 },
"office_code": { "uspto": 20, "euipo": 12, "ukipo": 5 },
"mark_feature_type": { "word": 28, "figurative": 7, "combined": 2 }
}
}
A sudden increase in figurative marks might indicate a competitor is developing new logos or brand identities — often a sign of upcoming product launches. Word mark filings in new jurisdictions suggest geographic expansion plans.
Building a competitive dashboard
Combine the above queries into a weekly report that tracks:
| Metric | Source |
|---|
| New filings per competitor (this week) | GET /v1/owners/{id}/trademarks?filing_date_gte=... |
| Class distribution shifts | POST /v1/trademarks with aggregations_only |
| New jurisdictions entered | Owner detail stats.jurisdictions delta |
| Opposition activity | GET /v1/proceedings?party_owner_id=... |
| Newly abandoned marks | GET /v1/owners/{id}/trademarks?status_primary=inactive&filing_date_gte=... |
What’s next
Trademark Clearance
Run a clearance search against your competitors’ marks before launching a new brand.
Opposition Tracking
Monitor TTAB proceedings where your competitors are involved as parties.
M&A Due Diligence
Evaluate a competitor’s full IP portfolio if an acquisition is on the table.