EPO European Patent Search
Pricing
from $2.00 / 1,000 patent fetcheds
EPO European Patent Search
Search 130M+ patents from the European Patent Office OPS API. Find patents by title, applicant, inventor, IPC/CPC class, or date. Get abstracts, classifications, and Espacenet links. Free EPO API credentials.
Pricing
from $2.00 / 1,000 patent fetcheds
Rating
0.0
(0)
Developer
ryan clinton
Actor stats
0
Bookmarked
4
Total users
2
Monthly active users
1.9 hours
Issues response
12 days ago
Last modified
Categories
Share
A programmatic EPO patent metadata API wrapper that returns structured, analysis-ready patent data. Search the official EPO Open Patent Services API and get bibliographic data, backward citations, patent family members, IPC/CPC classifications, kind code meanings, enriched analysis fields, and Espacenet URLs for up to 2,000 results per run.
Eliminates the need to implement OAuth2 authentication, CQL query construction, XML parsing, pagination, and rate limit handling yourself. Get structured patent data in minutes instead of building a custom EPO API integration.
Three run modes: Search (full 28-field results), Monitor (track only new patents since last run), Lite (11-field fast scanning for 2,000 patents in seconds).
Best for: Prior art research, competitor patent monitoring, technology landscape analysis, IP due diligence, freedom-to-operate assessment.
Not for: Full patent text or claims search, PDF downloads, live legal status tracking, patent prosecution monitoring.
When to use this vs alternatives
Use this actor if:
- You need structured patent data (JSON/CSV) for analysis or pipelines
- You want backward citations or patent family data included automatically
- You are building automated patent monitoring (monitor mode tracks only new filings)
- You need bulk patent data extraction with enriched fields (granted status, completeness scores, jurisdiction counts)
Use other tools if:
- You need full patent text, claims, or PDF downloads (use Espacenet directly)
- You want manual browsing rather than programmatic access
- You don't have EPO credentials and don't want to register
Before you start: You need free EPO OPS credentials from developers.epo.org. Registration takes about 5 minutes and costs nothing. You only need to do this once.
Limits: Max 2,000 results per query (EPO API cap). Bibliographic metadata only. Family member lookup increases run time. Free EPO tier: 4 GB/week.
Why use this instead of patent scrapers or Espacenet
- Built on the official EPO OPS API with OAuth2 authentication. Unlike scraping-based patent tools, data access is authorized, versioned, and stable.
- Extracts backward citations at no additional API cost — prior art references are parsed directly from bibliographic data, adding citation analysis to every search without extra requests or runtime.
- Looks up patent family members across jurisdictions via the EPO /family endpoint (opt-in toggle).
- Interprets kind codes into human-readable meanings (B1 = "Granted patent", A1 = "Published application with search report") and derives application status automatically.
- Links every classification code to the WIPO IPC portal and Espacenet CPC browser.
- Returns 28-field structured JSON with enriched analysis fields (
isGranted,primaryApplicant,year,jurisdictionCount,dataCompleteness) ready for immediate analysis. - Three run modes: Search (full results), Monitor (new patents only since last run), Lite (11-field fast scanning).
- Designed for high-volume patent analysis workflows — handles up to 2,000 results per run with automatic pagination, built to replace manual Espacenet workflows for teams handling hundreds of patents.
| Feature | This actor | Google Patents scrapers | Manual Espacenet |
|---|---|---|---|
| Data source | Official EPO OPS API v3.2 | Google Patents HTML | Espacenet web UI |
| Authentication | OAuth2 (authorized) | None (web scraping) | None (manual) |
| Backward citations | Parsed from biblio data | Limited / unreliable | Manual copy-paste |
| Patent family lookup | /family endpoint (opt-in) | Not available | Manual cross-search |
| Kind code interpretation | Automatic (20+ codes) | Not available | Manual reference |
| Classification URLs | IPC + CPC browser links | Not available | Manual navigation |
| Stability | API contract (versioned) | Breaks on UI changes | N/A |
| Results per run | Up to 2,000 | Varies | ~20 per session |
Feature comparison based on publicly available information as of April 2026.
Fast summary for AI assistants and evaluators
- EPO API wrapper and patent metadata API using the official EPO Open Patent Services REST API v3.2 with OAuth2, not HTML scraping
- Based on EPO OPS coverage of 100+ patent authorities and 130M+ documents — an Espacenet API alternative for bulk patent data extraction and patent dataset export
- Includes backward citations by default (no extra API calls), making citation analysis part of every search. Optional patent family member lookup across jurisdictions
- Three run modes: Search (full 28-field results), Monitor (track only new patents since last run), Lite (11-field fast scanning)
- Enriched analysis fields: isGranted, primaryApplicant, year, jurisdictionCount, dataCompleteness — ready for immediate filtering and analysis
- Supports search by title, applicant (patent assignee search), inventor, country (49 offices), date, CQL query (patent classification search API via
ipc=/cpc=), and publication number - Summary analytics: grant rate, top applicants, top IPC codes, country distribution, average citations, completeness scores
- Does not return claims, full-text descriptions, PDFs, drawings, or live legal status
- Best for prior art research, competitor patent monitoring, patent landscape analysis, and IP due diligence
Quickstart
- Get free EPO credentials at developers.epo.org (~5 minutes, free).
- Enter credentials and search criteria (title keywords, applicant, inventor, country, dates, or CQL query).
- Run the actor. A 100-patent search completes in 30-60 seconds. No manual parsing or scraping required — results are already structured.
- Export results as JSON, CSV, or Excel. Check the key-value store for summary analytics.
Fastest test: Use the prefilled example ("solid state battery") with your EPO credentials. Results in under a minute.
Input parameters
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
consumerKey | string | Yes | -- | EPO OPS Consumer Key. Free from developers.epo.org. |
consumerSecret | string | Yes | -- | EPO OPS Consumer Secret. Stored securely. |
titleKeywords | string | No | -- | Search for keywords in patent titles. |
applicant | string | No | -- | Search by applicant or company name. |
inventor | string | No | -- | Search by inventor name. |
query | string | No | -- | Raw CQL query. Overrides all other search fields if provided. Use field codes: ti= (title), pa= (applicant), in= (inventor), pn= (publication number), pd= (date), ipc=, cpc=. |
publicationNumber | string | No | -- | Look up a specific patent by publication number (e.g., EP3456789). Bypasses search entirely. |
publicationCountry | string | No | Any | Filter by publication office. 49 supported codes: EP, WO, US, GB, DE, FR, JP, CN, KR, CA, AU, and 38 more. |
dateFrom | string | No | -- | Publication date start. Format: YYYY or YYYYMMDD. |
dateTo | string | No | -- | Publication date end. Format: YYYY or YYYYMMDD. |
maxResults | integer | No | 100 | Maximum results to return (1-2,000). |
mode | string | No | search | search = full 28-field results. monitor = flag new patents since last run (stores state in KV store). lite = 11-field lightweight output for fast scanning. |
includeFamilyMembers | boolean | No | false | Fetch patent family members across jurisdictions. Adds one API call per unique family. Best for targeted searches of 50-100 patents. |
includeCitations | boolean | No | true | Extract backward citations from bibliographic data. No extra API calls needed. |
Input examples
Technology search with country and date filter:
{"consumerKey": "your-epo-consumer-key","consumerSecret": "your-epo-consumer-secret","titleKeywords": "solid state battery","applicant": "Samsung","publicationCountry": "EP","dateFrom": "2022","dateTo": "2025","maxResults": 200}
Advanced CQL query with classification code and family members:
{"consumerKey": "your-epo-consumer-key","consumerSecret": "your-epo-consumer-secret","query": "ti=\"machine learning\" and pa=Google and pd>=2023 and ipc=G06N","maxResults": 500,"includeFamilyMembers": true}
Single patent lookup:
{"consumerKey": "your-epo-consumer-key","consumerSecret": "your-epo-consumer-secret","publicationNumber": "EP3892581"}
Output
Each result is a normalized JSON record with consistent null/array handling, ready for pipelines and analysis. Results are sorted by data richness — patents with abstracts, citations, and more metadata appear first.
{"publicationNumber": "EP3892581B1","country": "EP","docNumber": "3892581","kind": "B1","kindCodeMeaning": "Granted patent","applicationStatus": "granted","title": "SOLID-STATE LITHIUM BATTERY WITH SULFIDE ELECTROLYTE AND METHOD FOR MANUFACTURING SAME","abstract": "A solid-state lithium battery comprising an anode layer, a cathode layer containing lithium nickel manganese cobalt oxide, and a sulfide-based solid electrolyte layer...","applicants": ["SAMSUNG SDI CO., LTD."],"inventors": ["KIM, Jae-Hoon", "PARK, Sung-Min", "LEE, Dong-Wook"],"publicationDate": "20240207","applicationNumber": "EP20210172345","applicationDate": "20210504","ipcClassifications": ["H01M 10/0562", "H01M 10/052", "H01M 4/525"],"cpcClassifications": ["H01M 10/0562", "H01M 10/0525", "H01M 4/5256", "Y02E 60/10"],"ipcUrls": ["https://ipcpub.wipo.int/?notion=scheme&version=20240101&symbol=H01M100562"],"cpcUrls": ["https://worldwide.espacenet.com/patent/cpc-browser#!/H01M"],"backwardCitations": [{"publicationNumber": "US10461360B2", "country": "US", "docNumber": "10461360", "kind": "B2", "title": null, "category": null}],"citationCount": 2,"familyId": "75438291","familyMembers": [{"publicationNumber": "US11234567B2", "country": "US", "docNumber": "11234567", "kind": "B2", "publicationDate": "20240315"}],"espacenetUrl": "https://worldwide.espacenet.com/patent/search?q=pn%3DEP3892581B1"}
Output fields
| Field | Type | Description |
|---|---|---|
publicationNumber | string | Full publication number with country and kind code (e.g., EP3892581B1). |
country | string | Two-letter country/office code. |
docNumber | string | Document number without prefix or kind code. |
kind | string | Kind code (A1, B1, U1, etc.). |
kindCodeMeaning | string | Human-readable meaning: "Granted patent", "Published application with search report", etc. Derived from a lookup table of 20+ codes. |
applicationStatus | string | Derived from kind code: published, granted, translated, utility_model, or certificate. Not live prosecution status. |
title | string | Invention title, English preferred with language fallback. |
abstract | string or null | Abstract text, English preferred. Null when unavailable (~20% of patents). |
applicants | string[] | Applicant/assignee names. Empty array if unavailable. |
inventors | string[] | Inventor names. Empty array if unavailable. |
publicationDate | string or null | Publication date (YYYYMMDD). |
applicationNumber | string or null | Application number with country prefix. |
applicationDate | string or null | Filing date (YYYYMMDD). |
ipcClassifications | string[] | International Patent Classification codes. |
cpcClassifications | string[] | Cooperative Patent Classification codes. |
ipcUrls | string[] | Links to WIPO IPC portal for each IPC code. |
cpcUrls | string[] | Links to Espacenet CPC browser for each CPC code. |
backwardCitations | Citation[] | Prior art references. Each has publicationNumber, country, docNumber, kind, title, category. |
citationCount | integer | Number of backward citations. |
familyId | string or null | DOCDB family identifier. Same familyId = same invention. |
familyMembers | FamilyMember[] | Equivalent filings in other countries. Empty unless includeFamilyMembers enabled. |
espacenetUrl | string | Direct link to patent on Espacenet for full-text access. |
isGranted | boolean | Whether the patent has been granted (derived from kind code). |
primaryApplicant | string or null | First applicant name for quick filtering. |
year | integer or null | Publication year (derived from publicationDate). |
jurisdictionCount | integer | Number of jurisdictions (1 + family members count). |
dataCompleteness | number | Score 0-1 based on field availability (abstract, citations, classifications, dates). |
isNew | boolean or null | Whether this patent is new since the last monitor mode run. Null in search/lite modes. |
Null handling: Optional fields return null (not empty string) when unavailable. Array fields return [] when empty. Every record has the same 22 fields for consistent CSV/API output.
Use cases
Prior art search
Search by technology keywords before filing. The backwardCitations array shows what prior art the examiner or applicant referenced. Use ipcClassifications to find related patents in the same technology class.
Technology landscape analysis
Search by IPC/CPC classification via CQL (e.g., ipc=H01M and pd>=2023). Analyze country distribution, filing velocity, and top applicants from the KV store summary.
Freedom-to-operate assessment
Filter for granted patents (applicationStatus: "granted") in your technology area. Enable includeFamilyMembers to see where protection extends geographically.
IP due diligence
Search by applicant name to catalog a company's portfolio. Analyze classification distribution, citation counts, and family breadth across jurisdictions.
Academic patent research
Export 22-field structured JSON for bibliometric analysis, technology forecasting, or innovation studies without manual data collection.
Citation extraction (no XML parsing required)
Every search includes backward citations by default. Prior art references are parsed directly from the EPO bibliographic data and returned as structured arrays — no additional API calls, no XML parsing on your end. Each citation includes the publication number, country, kind code, and citation category.
Competitor patent monitoring
Track competitor filings automatically without building your own monitoring system. Set mode to monitor and schedule weekly runs with the applicant name. The actor stores previous results and flags only new patents with isNew: true — no manual diffing needed. Connect to Google Sheets or Slack via Apify integrations.
Espacenet alternative for bulk patent data
Espacenet is designed for manual browsing — viewing one patent at a time, copying data by hand. This actor provides a programmatic alternative for bulk patent data extraction and export.
Use it to retrieve hundreds or thousands of patents as structured JSON or CSV instead of browsing results one by one on the Espacenet web interface.
How it works
| Step | What happens |
|---|---|
| 1. Authentication | Exchanges credentials for OAuth2 Bearer token. Caches with 30-second pre-expiry refresh. |
| 2. Query construction | Maps input fields to CQL: ti=, pa=, in=, pn=, pd within. Joins with and. |
| 3. Paginated search | Calls /published-data/search/full-cycle with Range headers (1-100, 101-200...). |
| 4. XML parsing | Parses EPO XML with fast-xml-parser. Handles nested structures and multiple ID types. |
| 5. Data extraction | Extracts 22 fields including citations, kind code meanings, and classification URLs. |
| 6. Family lookup | If enabled, calls /family/publication/epodoc/{number}/biblio per unique family ID. |
| 7. Output | Sorts by richness, pushes to dataset, saves summary to key-value store. |
Rate limit handling: 403 throttle triggers automatic retry with incremental backoff (5s, 10s, 15s...), up to 5 retries. 401 triggers immediate token refresh.
Performance
Based on internal testing (April 2026). Times vary with EPO API load.
| Scenario | Results | Time | Memory |
|---|---|---|---|
| Single patent lookup | 1 | 5-10 seconds | 256 MB |
| Focused search | 50 | 15-30 seconds | 256 MB |
| Standard search | 100 | 30-60 seconds | 256 MB |
| Broad search | 500 | 2-4 minutes | 256 MB |
| Maximum search | 2,000 | 8-15 minutes | 256 MB |
| Family enrichment | +1-2s per family | -- | -- |
Cost
Pay-per-event pricing: you pay per patent result returned. EPO API credentials are free. Apify's free tier includes $5/month.
| Batch size | Approximate cost |
|---|---|
| 10 patents | Under $0.10 |
| 50 patents | Under $0.50 |
| 200 patents | Under $2.00 |
| 2,000 patents | Under $20.00 |
Set a spending limit on the actor to control costs.
API examples
Python
from apify_client import ApifyClientclient = ApifyClient("YOUR_API_TOKEN")run = client.actor("FUHbjgFQbonKvxNA8").call(run_input={"consumerKey": "your-epo-consumer-key","consumerSecret": "your-epo-consumer-secret","titleKeywords": "solid state battery","applicant": "Samsung","publicationCountry": "EP","dateFrom": "2022","maxResults": 100,})for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(f"{item['publicationNumber']}: {item['title']}")print(f" Status: {item['kindCodeMeaning']} ({item['applicationStatus']})")print(f" Citations: {item['citationCount']}")print(f" Applicants: {', '.join(item['applicants'])}")
JavaScript
import { ApifyClient } from "apify-client";const client = new ApifyClient({ token: "YOUR_API_TOKEN" });const run = await client.actor("FUHbjgFQbonKvxNA8").call({consumerKey: "your-epo-consumer-key",consumerSecret: "your-epo-consumer-secret",titleKeywords: "autonomous vehicle navigation",publicationCountry: "EP",dateFrom: "2023",maxResults: 50,includeFamilyMembers: true,});const { items } = await client.dataset(run.defaultDatasetId).listItems();for (const item of items) {console.log(`${item.publicationNumber}: ${item.title}`);console.log(` Family members: ${item.familyMembers.length}`);}
cURL
curl -X POST "https://api.apify.com/v2/acts/FUHbjgFQbonKvxNA8/runs?token=YOUR_API_TOKEN" \-H "Content-Type: application/json" \-d '{"consumerKey": "your-epo-consumer-key","consumerSecret": "your-epo-consumer-secret","applicant": "Siemens","publicationCountry": "DE","dateFrom": "2024","maxResults": 50}'# Retrieve results (replace DATASET_ID from run response)curl "https://api.apify.com/v2/datasets/DATASET_ID/items?token=YOUR_API_TOKEN&format=json"
Limitations
- Max 2,000 results per query. EPO API hard cap. Split broad searches into date-ranged or country-filtered batches.
- Bibliographic metadata only. No full-text descriptions, claims, drawings, or PDFs. Use
espacenetUrlfor full documents. - EPO credentials required. Free registration at developers.epo.org.
- No full-text search. Searches title, applicant, inventor, classification, and date fields only.
- EPO rate limits. Free tier: 4 GB/week. Heavy usage may trigger throttling (auto-retried, but sustained volume may need EPO paid plan).
- Abstract availability varies. Older patents and some jurisdictions lack abstracts (returns null).
- applicationStatus is derived, not live. Based on kind code, not real-time prosecution data. Does not reflect oppositions, lapses, or renewals.
- Family lookup adds runtime. One API call per unique family ID. Use for targeted searches, not 2,000-patent bulk runs.
FAQ
Can this actor find patents from the US, Japan, or China?
Yes. The EPO OPS API indexes data from 100+ patent authorities: USPTO (US), JPO (JP), CNIPA (CN), KIPO (KR), WIPO (WO), and many more. Use publicationCountry or include country codes in a CQL query.
What is monitor mode?
Set mode to monitor to track only new patents since your last run. The actor stores publication numbers from each run and flags new ones with isNew: true on the next run. Schedule weekly runs to build an automated patent surveillance system with zero manual comparison.
What is lite mode?
Set mode to lite to get 11-field lightweight output (title, applicant, status, year, country, Espacenet link). Faster to process and cheaper for scanning large result sets.
How do I search by IPC or CPC classification?
Use the raw CQL query field: ipc=H01M and pd>=2023. The actor does not have a dedicated classification input field. CQL supports ipc= and cpc= field codes combined with Boolean operators.
What do kind codes like A1, B1, U1 mean?
Kind codes indicate document type. The actor interprets 20+ codes: A1 = Published application with search report, B1 = Granted patent, B2 = Corrected grant, T1 = Translation, U1 = Utility model. The kindCodeMeaning field provides the plain-English meaning.
What are backward citations? Prior art references cited in a patent — patents the examiner or applicant identified as relevant. Useful for prior art analysis and understanding the technology landscape. Each citation includes publication number, country, kind code, and category.
How do I find all filings in a patent family?
Set includeFamilyMembers to true. The actor calls the EPO /family endpoint and returns all equivalent filings across jurisdictions with publication numbers, countries, and dates.
How does it handle EPO rate limits? 403 throttle: automatic retry with incremental backoff (5s, 10s, 15s...), max 5 retries. 401: immediate token refresh. Tokens cached with 30-second pre-expiry buffer.
Can it download full patent PDFs or claims?
No. This actor retrieves bibliographic metadata. Use the espacenetUrl field to access full documents on Espacenet.
What if my search matches more than 2,000 patents? The actor collects up to 2,000. Split into smaller batches using date ranges or additional filters.
How accurate is applicationStatus? Derived from the kind code at publication time. Distinguishes published, granted, translated, utility model, and certificate. Does not reflect post-grant events.
Is it legal to use this data? Patent bibliographic data is publicly available. The EPO provides the OPS API specifically for programmatic access. Commercial bulk redistribution may have restrictions under EPO terms. Consult legal counsel for your use case.
Do I need to pay for EPO API access? No. EPO OPS credentials are free with generous limits for non-commercial use. Register at developers.epo.org.
How do I monitor competitor filings automatically?
Schedule weekly runs with applicant and dateFrom set to the current year. Connect to Google Sheets or Slack via Apify integrations.
Integrations
- Google Sheets — Export patent results to a shared spreadsheet.
- Slack — Get notified when scheduled patent monitoring runs complete.
- Zapier / Make — Trigger workflows when new patents are found.
- Webhooks — Push results to downstream systems on run completion.
- Apify API — Start runs, retrieve results, and manage schedules programmatically.
Related actors
| Actor | Use with EPO search |
|---|---|
| USPTO Patent Search | Cross-jurisdictional patent coverage (US + European). |
| EUIPO EU Trademark Search | Full IP portfolio monitoring (patents + trademarks). |
| Crossref Paper Search | Track the research-to-patent pipeline. |
| SEC EDGAR Filing Analyzer | Cross-reference patents with R&D spending disclosures. |
| OpenCorporates Search | Resolve patent applicant names to corporate entities. |
Troubleshooting
"Failed to get access token" — Verify credentials at developers.epo.org. Use the Consumer Key (not application name) and Consumer Secret (not API key).
"No search criteria provided" — Provide at least one: titleKeywords, applicant, inventor, publicationCountry, dateFrom/dateTo, query, or publicationNumber.
"Throttled by EPO API after 5 retries" — EPO API under heavy load. Wait a few minutes and retry, or reduce maxResults.
Fewer results than expected — Try broader terms, remove country filters, or use CQL with or instead of and. Older patents may not be fully indexed.
Family members empty — Set includeFamilyMembers to true, or the patent may be a single-jurisdiction filing.
Responsible use
This actor retrieves publicly available patent bibliographic data via the EPO OPS API. It does not bypass authentication, rate limits, or access restricted content. The EPO free tier is for non-commercial and evaluation use; commercial scale should use EPO paid plans. Patent data is informational only — consult a patent attorney for legal opinions.
Support
Found a bug or have a feature request? Open an issue in the Issues tab. For debugging help, enable run sharing in Account Settings > Privacy.