Skip to content

Patent Filings Dataset

Track granted patents issued by the US Patent and Trademark Office (USPTO), mapped to publicly traded companies by ticker. Each record is an individual granted patent with its grant date, original application filing date, technology classifications, claim count, and inventors — a direct, structured signal of corporate R&D output and innovation pace.

The Patent Filings dataset provides, for every granted patent:

  • Patent Identity: USPTO patent number, title, type (utility, design, plant, reissue), and kind code
  • Timing: Grant date and original application filing date, plus the filing-to-grant duration in days
  • Assignee: The organization the patent is assigned to, mapped to a stock ticker, with the assignee type
  • Technology Classification: CPC sections and subsections describing the technical domain, plus the primary section
  • Scope Signals: Number of claims and forward-citation count
  • Inventors: Named inventors and the inventor count
SourceDescriptionUpdate Frequency
USPTOGranted patents mapped to NYSE and NASDAQ tickersWeekly

Patent Filings cover US-listed companies on NYSE and NASDAQ, with assignee organizations matched to ticker symbols at ingestion. The dataset carries 20 years of history, with granted patents dating back to 2006, suitable for long-horizon R&D and innovation analysis. New grants are published by the USPTO weekly.

This dataset tracks granted patents — patents the USPTO has issued. Each record also exposes the original applicationFilingDate, so you can analyze the filing-to-grant pipeline, but pending (ungranted) applications are not included.

import requests
API_KEY = "YOUR_API_KEY"
BASE_URL = "https://api.finbrain.tech/v2"
response = requests.get(
f"{BASE_URL}/patent-filings/AAPL",
headers={"Authorization": f"Bearer {API_KEY}"},
)
data = response.json()
for patent in data["data"]["patents"]:
print(f"{patent['patentDate']} {patent['patentId']} "
f"[{patent['primaryCpcSection']}] {patent['title']}")

You can narrow results with startDate, endDate (both filter on the grant date, YYYY-MM-DD), and limit query parameters.

{
"success": true,
"data": {
"symbol": "AAPL",
"name": "Apple Inc.",
"patents": [
{
"patentId": "12345678",
"patentDate": "2025-03-11",
"title": "Method and apparatus for low-power display synchronization",
"type": "utility",
"kind": "B2",
"numClaims": 20,
"numCitedBy": 0,
"assigneeOrganization": "Apple Inc.",
"assigneeType": "2",
"applicationFilingDate": "2022-06-15",
"filingToGrantDays": 999,
"inventors": ["John Doe", "Jane Smith"],
"numInventors": 2,
"cpcSections": ["G", "H"],
"cpcSubsections": ["G06", "H04"],
"primaryCpcSection": "G"
}
]
},
"meta": { "timestamp": "2026-06-16T12:00:00.000Z" }
}
FieldDescriptionExample
patentIdUSPTO patent number (globally unique)12345678
patentDateGrant date (YYYY-MM-DD)2025-03-11
titlePatent titleMethod and apparatus for low-power display synchronization
typePatent typeutility
kindUSPTO kind codeB2
numClaimsNumber of claims20
numCitedByForward-citation count0
assigneeOrganizationOrganization the patent is assigned toApple Inc.
assigneeTypeAssignee type code (2 = US company, 3 = foreign company)2
applicationFilingDateOriginal application filing date (YYYY-MM-DD)2022-06-15
filingToGrantDaysDays from filing to grant999
inventorsNamed inventors["John Doe", "Jane Smith"]
numInventorsNumber of inventors2
cpcSectionsCPC classification sections["G", "H"]
cpcSubsectionsCPC subsections["G06", "H04"]
primaryCpcSectionLeading CPC sectionG

Patents are tagged with Cooperative Patent Classification (CPC) codes describing their technical domain. The single-letter primaryCpcSection gives a quick read on where a company is innovating:

SectionTechnology Domain
AHuman Necessities
BPerforming Operations; Transporting
CChemistry; Metallurgy
DTextiles; Paper
EFixed Constructions
FMechanical Engineering; Lighting; Heating; Weapons
GPhysics (computing, optics, instruments)
HElectricity (electronics, communications)
YNew / cross-sectional technologies

Subsections (e.g., G06 for computing, H04 for communications) add a finer level of detail.

Measure how a company’s innovation output trends over time by counting granted patents per quarter:

import requests
import pandas as pd
API_KEY = "YOUR_API_KEY"
BASE_URL = "https://api.finbrain.tech/v2"
def patents_per_quarter(symbol):
"""Count granted patents per calendar quarter for a ticker."""
response = requests.get(
f"{BASE_URL}/patent-filings/{symbol}",
headers={"Authorization": f"Bearer {API_KEY}"},
)
patents = response.json()["data"]["patents"]
df = pd.DataFrame(patents)
df["patentDate"] = pd.to_datetime(df["patentDate"])
df = df.set_index("patentDate")
return df["patentId"].resample("QE").count()
quarterly = patents_per_quarter("NVDA")
print(quarterly.tail(8))

See which technical domains a company is investing in by breaking patents down by their primary CPC section:

import requests
from collections import Counter
API_KEY = "YOUR_API_KEY"
BASE_URL = "https://api.finbrain.tech/v2"
def technology_mix(symbol):
"""Rank a company's patents by primary CPC section."""
response = requests.get(
f"{BASE_URL}/patent-filings/{symbol}",
headers={"Authorization": f"Bearer {API_KEY}"},
)
patents = response.json()["data"]["patents"]
sections = Counter(p["primaryCpcSection"] for p in patents if p["primaryCpcSection"])
return sections.most_common()
for section, count in technology_mix("TSLA"):
print(f"{section}: {count} patents")

Compare granted-patent volume across a peer group to find the most prolific innovators:

import requests
API_KEY = "YOUR_API_KEY"
BASE_URL = "https://api.finbrain.tech/v2"
def scan_patent_volume(symbols, start_date):
"""Rank tickers by number of patents granted since start_date."""
results = []
for symbol in symbols:
try:
response = requests.get(
f"{BASE_URL}/patent-filings/{symbol}",
headers={"Authorization": f"Bearer {API_KEY}"},
params={"startDate": start_date},
)
patents = response.json()["data"]["patents"]
results.append({"symbol": symbol, "patents": len(patents)})
except Exception:
continue
return sorted(results, key=lambda x: x["patents"], reverse=True)
semis = ["NVDA", "AMD", "INTC", "QCOM", "AVGO"]
for r in scan_patent_volume(semis, "2024-01-01"):
print(f"{r['symbol']}: {r['patents']} patents")