Patents
Search 87M+ patents from 17+ patent offices via the patent_search tool, powered by Google Patents Public Data and BigQuery. Covers US, EP, WO (PCT), JP, CN, KR, and more.
TOOL
patent_searchFull-text keyword and semantic patent search. Returns structured metadata including title, assignee, claims summary, CPC codes, and priority dates.
| Parameter | Type | Description |
|---|---|---|
| query * | string | Keyword or phrase search query. |
| offices | string[] | Patent offices to search: US, EP, WO, JP, CN (default: all). |
| date_from | string | Filing date filter start (ISO 8601, e.g. 2018-01-01). |
| date_to | string | Filing date filter end. |
| assignee | string | Filter by assignee name (partial match). |
| cpc_code | string | CPC classification code filter (e.g. C12N15/00). |
| max_results | integer | Max patents returned (default 20, max 100). |
from smartsbio import SmartsBio
client = SmartsBio(api_key="sk_live_...")
ws_id = client.workspaces.list()[0].id
result = client.tools.run(
tool_id="patent_search",
input={
"query": "CRISPR Cas9 base editing therapeutic",
"offices": ["US", "EP", "WO"],
"date_from": "2019-01-01",
"date_to": "2025-01-01",
"max_results": 20,
"workspace_id": ws_id,
"output_path": "patents/",
},
)
print(f"Total found : {result['total_found']}")
for p in result["results"][:5]:
print(f" [{p['patent_number']}] {p['title'][:55]}...")
print(f" Assignee: {p['assignee']:<30} Filed: {p['filing_date']}")
print(f" CPC: {', '.join(p['cpc_codes'][:3])}")
# Download summary report
report = client.files.download(result["report_path"], workspace_id=ws_id, dest="./patents/")
print(f"\nReport saved to {report}")Assignee landscape analysis
Identify the top patent holders in a technology area and download an assignee summary table.
from smartsbio import SmartsBio
from collections import Counter
client = SmartsBio(api_key="sk_live_...")
ws_id = client.workspaces.list()[0].id
result = client.tools.run(
tool_id="patent_search",
input={
"query": "mRNA vaccine lipid nanoparticle",
"offices": ["US", "EP", "WO"],
"date_from": "2015-01-01",
"max_results": 100,
},
)
# Tally assignees
counts = Counter(p["assignee"] for p in result["results"] if p["assignee"])
print("Top assignees in mRNA/LNP patent space:")
for assignee, count in counts.most_common(10):
print(f" {assignee:<40} {count} patents")