Skip to main content

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.

TOOLpatent_search

Full-text keyword and semantic patent search. Returns structured metadata including title, assignee, claims summary, CPC codes, and priority dates.

ParameterTypeDescription
query *stringKeyword or phrase search query.
officesstring[]Patent offices to search: US, EP, WO, JP, CN (default: all).
date_fromstringFiling date filter start (ISO 8601, e.g. 2018-01-01).
date_tostringFiling date filter end.
assigneestringFilter by assignee name (partial match).
cpc_codestringCPC classification code filter (e.g. C12N15/00).
max_resultsintegerMax 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")