EPO European Patent Search
Search and retrieve European patent data from the European Patent Office (EPO) Open Patent Services (OPS) API. This actor provides programmatic access to over 130 million patent documents from more than 100 patent authorities worldwide -- including the EPO, USPTO, WIPO, JPO, CNIPA, and dozens of national offices. Search by title keywords, applicant name, inventor name, publication date, country, or write advanced CQL queries -- then receive clean, structured JSON with full bibliographic data for
Maintenance Pulse
90/100Cost Estimate
How many results do you need?
Pricing
Pay Per Event model. You only pay for what you use.
| Event | Description | Price |
|---|---|---|
| patent-fetched | Charged per European patent record retrieved from EPO. | $0.002 |
Example: 100 events = $0.20 · 1,000 events = $2.00
Documentation
Search and retrieve European patent data from the European Patent Office (EPO) Open Patent Services (OPS) API. This actor provides programmatic access to over 130 million patent documents from more than 100 patent authorities worldwide -- including the EPO, USPTO, WIPO, JPO, CNIPA, and dozens of national offices. Search by title keywords, applicant name, inventor name, publication date, country, or write advanced CQL queries -- then receive clean, structured JSON with full bibliographic data for each patent.
Why use EPO European Patent Search?
Searching for patents through the Espacenet web interface is a manual, repetitive process that does not scale. IP professionals, patent attorneys, R&D teams, and competitive intelligence analysts often need to monitor hundreds of technology areas, track competitor filings across multiple jurisdictions, or perform systematic prior art reviews. Doing this by hand means copying data from web pages, reformatting it for analysis, and repeating the process every week. The lack of structured output makes it nearly impossible to build automated patent surveillance pipelines without significant engineering effort.
EPO European Patent Search eliminates that friction entirely. The actor handles OAuth2 authentication, paginated search, XML-to-JSON transformation, and rate limit management behind the scenes. You get structured JSON output that can be piped directly into spreadsheets, databases, CRMs, or downstream analysis tools via the Apify API, webhooks, or native integrations with Google Sheets, Slack, and Zapier. Schedule recurring runs to build a living patent monitoring system -- no infrastructure required, no browser automation, and no XML parsing on your end.
Key features
- Official EPO OPS API integration -- Connects to the EPO Open Patent Services REST API v3.2 with OAuth2 client credentials authentication for authorized, reliable access to worldwide patent data.
- Flexible search modes -- Use individual fields (title, applicant, inventor, country, date range) that auto-combine with AND logic, write raw CQL queries for full control, or look up a specific patent by publication number.
- 49 country/office filters -- Filter results by publication office including EP, WO (PCT), US, GB, DE, FR, JP, CN, KR, and 40 more national patent offices.
- Rich bibliographic output -- Each result includes publication number, country, kind code, title, abstract, applicants, inventors, IPC classifications, CPC classifications, application details, patent family ID, and a direct Espacenet URL.
- Automatic pagination -- Fetches up to 2,000 results per run with 100-result pages, handling Range headers and stopping cleanly when all results are retrieved.
- Rate limit handling -- Detects EPO 403 throttle responses and automatically waits 5 seconds before retrying, plus refreshes expired OAuth2 tokens on 401 responses with a 30-second buffer before expiry.
- English-preferred extraction -- Automatically selects English-language titles and abstracts when available, falling back to the first available language otherwise.
- Dry-run mode -- Run without API credentials to receive step-by-step instructions for obtaining your free EPO developer account -- no guesswork needed.
- Lightweight and fast -- Pure API calls with no browser or headless crawling. Runs on 256 MB of memory and completes most searches in under 60 seconds.
- Structured JSON output -- All results are pushed to an Apify dataset, ready for export to CSV, Excel, JSON, or programmatic access via the Apify API.
How to use EPO European Patent Search
Using Apify Console
- Get free EPO API credentials. Go to developers.epo.org, create a developer account, and register a new application. You will receive a Consumer Key and Consumer Secret at no cost.
- Open the actor. Navigate to EPO European Patent Search on the Apify Store and click "Try for free".
- Configure your search. Paste your Consumer Key and Consumer Secret into the credential fields. Then enter your search criteria -- title keywords, applicant name, inventor name, date range, country filter, or a raw CQL query. For a specific patent, enter its publication number (e.g.,
EP3456789). - Start the run. Click "Start" and wait for the actor to complete. Progress is logged in real time, showing the CQL query, total results found, and pagination status.
- Export your results. Go to the "Storage" tab to view, download, or export results as JSON, CSV, or Excel. Use the "Integrations" tab to connect results to Google Sheets, Slack, webhooks, or other tools.
Using the API
You can start runs, retrieve results, and schedule recurring searches entirely through the Apify API. See the API & Integration section below for ready-to-use code examples in Python, JavaScript, and cURL.
Input parameters
| Field | 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). |
query | string | No | -- | Raw CQL query string. Overrides all other search fields if provided. |
titleKeywords | string | No | -- | Search for keywords in the patent title. |
applicant | string | No | -- | Search by applicant or company name. |
inventor | string | No | -- | Search by inventor name. |
publicationNumber | string | No | -- | Look up a specific patent by publication number (e.g., EP3456789). |
publicationCountry | string | No | "" (any) | Filter by publication office/country code. Select from 49 supported codes. |
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 number of results to return (1--2000). |
*Without credentials, the actor runs in dry-run mode and outputs instructions for obtaining free API keys.
Example input
{
"consumerKey": "your-epo-consumer-key",
"consumerSecret": "your-epo-consumer-secret",
"titleKeywords": "solid state battery",
"applicant": "Samsung",
"publicationCountry": "EP",
"dateFrom": "2022",
"dateTo": "2025",
"maxResults": 200
}
Tips for input
- Raw CQL overrides everything. If you provide a
queryvalue, all other search fields (titleKeywords,applicant,inventor,publicationCountry,dateFrom,dateTo) are ignored. - CQL syntax reference. Use
ti=for title,pa=for applicant,in=for inventor,pn=for publication country, andpdfor publication date. Join terms withand,or,not. Example:ti="fuel cell" and pa=Toyota and pd within "2023 2025". - Date formats. Both
YYYY(year only) andYYYYMMDD(exact date) are accepted. When bothdateFromanddateToare provided, the actor usespd within "from to"syntax. A single date usespd>=orpd<=. - Direct patent lookup. Setting
publicationNumberbypasses search entirely and fetches bibliographic data for that specific patent. Accepts formats likeEP3456789,US20230123456, orWO2024001234. - Keep searches focused. Patent databases are enormous. Adding a country filter or date range significantly reduces result volume and speeds up your run.
Output
Each patent result is pushed to the Apify dataset as a JSON object with 15 fields:
{
"publicationNumber": "EP3892581B1",
"country": "EP",
"docNumber": "3892581",
"kind": "B1",
"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 disposed between the anode and cathode layers. The electrolyte layer is formed by cold pressing a mixture of argyrodite-type Li6PS5Cl powder and lithium halide, providing ionic conductivity exceeding 3 mS/cm at room temperature while maintaining electrochemical stability up to 5V.",
"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"
],
"familyId": "75438291",
"espacenetUrl": "https://worldwide.espacenet.com/patent/search?q=pn%3DEP3892581B1"
}
Output fields
| Field | Type | Description |
|---|---|---|
publicationNumber | string | Full publication number including country and kind code (e.g., EP3892581B1). |
country | string | Two-letter country/office code (e.g., EP, US, WO). |
docNumber | string | Numeric document number without country prefix or kind code. |
kind | string | Kind code indicating document type -- A1 (application with search report), A2 (application without search report), B1 (granted patent), B2 (corrected grant). |
title | string | Invention title, English preferred. |
abstract | string or null | Patent abstract text, English preferred. Null if unavailable. |
applicants | string[] | Array of applicant/assignee names (companies or individuals). |
inventors | string[] | Array of inventor names. |
publicationDate | string or null | Publication date in YYYYMMDD format. |
applicationNumber | string or null | Application number with country prefix. |
applicationDate | string or null | Application filing date in YYYYMMDD format. |
ipcClassifications | string[] | International Patent Classification codes (e.g., H01M 10/0562). |
cpcClassifications | string[] | Cooperative Patent Classification codes (e.g., H01M 10/0562). |
familyId | string or null | DOCDB patent family identifier for finding related filings across jurisdictions. |
espacenetUrl | string | Direct URL to the patent record on Espacenet for full-text access. |
Use cases
- Prior art search -- Search for existing patents by technology keywords before filing a new patent application to assess novelty and avoid infringement.
- Competitor patent monitoring -- Track new filings from specific companies by setting up scheduled runs filtered by applicant name and date range.
- Technology landscape analysis -- Map patent activity in a technology area by searching for IPC/CPC classification codes and analyzing filing trends over time.
- Freedom-to-operate analysis -- Identify granted patents (kind code B1/B2) in your product's technology space to assess potential infringement risks before market entry.
- Patent portfolio valuation -- Extract and catalog an organization's entire patent portfolio by searching by applicant name, then analyze classification distribution and filing geography.
- R&D intelligence -- Monitor inventor activity and emerging technologies in specific fields to inform research direction and identify potential collaboration partners.
- Startup due diligence -- Assess a target company's IP strength by searching their patent filings, reviewing classifications, and identifying patent family breadth across jurisdictions.
- Academic research -- Build structured patent datasets for bibliometric analysis, technology forecasting, or innovation studies without manual data collection.
- IP litigation support -- Quickly retrieve bibliographic details, classification codes, and family IDs for patents involved in disputes or licensing negotiations.
- Government and policy analysis -- Track patent filing trends by country to inform economic policy, trade agreements, or technology transfer programs.
API & Integration
Python
from apify_client import ApifyClient
client = ApifyClient("YOUR_APIFY_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" Applicants: {', '.join(item['applicants'])}")
print(f" IPC: {', '.join(item['ipcClassifications'])}")
print(f" URL: {item['espacenetUrl']}")
print()
JavaScript
import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_APIFY_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,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
console.log(`${item.publicationNumber}: ${item.title}`);
console.log(` Applicants: ${item.applicants.join(', ')}`);
console.log(` Published: ${item.publicationDate}`);
});
cURL
# Start the actor run
curl -X POST "https://api.apify.com/v2/acts/FUHbjgFQbonKvxNA8/runs?token=YOUR_APIFY_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"consumerKey": "your-epo-consumer-key",
"consumerSecret": "your-epo-consumer-secret",
"applicant": "Siemens",
"publicationCountry": "EP",
"dateFrom": "2024",
"maxResults": 50
}'
# Retrieve results from the dataset (replace DATASET_ID from the run response)
curl "https://api.apify.com/v2/datasets/DATASET_ID/items?token=YOUR_APIFY_API_TOKEN&format=json"
Integrations
EPO European Patent Search works with all Apify platform integrations out of the box:
- Google Sheets -- Automatically export patent results to a spreadsheet for team review and collaborative analysis.
- Slack -- Receive notifications in a Slack channel when new patents matching your criteria are found.
- Webhooks -- Trigger downstream workflows in Zapier, Make (Integromat), or n8n when a run completes.
- Email -- Send patent search results or summary notifications via email after each scheduled run.
- Amazon S3 / Google Cloud Storage -- Push patent datasets to cloud storage for long-term archival or integration with data warehouses.
- Apify API -- Programmatically start runs, retrieve results, and manage schedules from any language or platform.
How it works
The actor follows a five-stage pipeline to search and extract patent data from the EPO OPS API:
-
Authentication. The actor exchanges your Consumer Key and Consumer Secret for an OAuth2 Bearer token using the EPO token endpoint. Tokens are cached and auto-refreshed 30 seconds before expiry. If a 401 response is received mid-run, the token is immediately invalidated and re-fetched.
-
Query construction. If you provide a raw CQL query, it is used directly. Otherwise, the actor builds a CQL query by mapping your input fields:
titleKeywordsbecomesti="...",applicantbecomespa="...",inventorbecomesin="...",publicationCountrybecomespn=XX*, and date ranges usepd within "from to",pd>=from, orpd<=to. All parts are joined withand. -
Search execution. For publication number lookups, the actor calls the
/published-data/publication/epodoc/{number}/biblioendpoint directly. For searches, it calls/published-data/search/full-cyclewith the CQL query and paginates using Range headers (1-100,101-200, etc.). Pagination stops on 404 (no results), 416 (range exceeded), or whenmaxResultsis reached. A 1-second delay is applied between pages, and 403 throttle responses trigger a 5-second wait with automatic retry. -
XML parsing. EPO API responses are XML. The actor uses
fast-xml-parserwith configurable array tags to handle the nested XML structure. It extracts publication references (docdb and epodoc ID types), application references, English-preferred titles and abstracts, applicant and inventor names from addressbook nodes, IPC and CPC classifications from patent-classification nodes, and patent family identifiers. -
Output. Parsed patent records are pushed to the Apify dataset as structured JSON objects with 15 fields each, including a pre-built Espacenet URL for quick access to the full patent document.
EPO European Patent Search -- Pipeline
+------------------+ +------------------+ +---------------------+
| INPUT | | OAUTH2 AUTH | | QUERY BUILDER |
| | --> | | --> | |
| Consumer Key | | POST /auth/ | | ti= / pa= / in= |
| Consumer Secret | | accesstoken | | pn= / pd within |
| Search fields | | Bearer token | | Joined with AND |
+------------------+ +------------------+ +---------------------+
|
v
+------------------+ +------------------+ +---------------------+
| JSON OUTPUT | | XML PARSER | | PAGINATED SEARCH |
| | <-- | | <-- | |
| 15-field patent | | fast-xml-parser | | /search/full-cycle |
| records to | | English-prefer | | Range: 1-100, ... |
| Apify dataset | | Array handling | | Rate limit retry |
+------------------+ +------------------+ +---------------------+
Performance & cost
The actor runs on 256 MB of memory with no browser overhead. All computation is pure API calls and XML parsing. EPO API credentials are free from developers.epo.org.
| Scenario | Results | Approx. Time | Approx. Apify Cost |
|---|---|---|---|
| Single patent lookup | 1 | 5--10 seconds | < $0.001 |
| Focused search (e.g., one company + date range) | 50 | 15--30 seconds | ~$0.002 |
| Standard search | 100 | 30--60 seconds | ~$0.003 |
| Broad search with pagination | 500 | 2--4 minutes | ~$0.010 |
| Maximum search | 2,000 | 8--15 minutes | ~$0.035 |
| Scheduled daily monitoring (100 results/day) | 100/day | ~1 minute/day | ~$0.10/month |
Times may vary depending on EPO API server load and rate limiting. The Apify Free plan includes $5 of monthly credits, which is sufficient for hundreds of patent search runs.
Limitations
- Maximum 2,000 results per run. The EPO OPS API imposes a hard cap of 2,000 results per search query. If your search matches more patents, narrow it with additional filters or split into multiple date-ranged runs.
- API credentials required. You must register for free EPO developer credentials at developers.epo.org before running real searches. Without credentials, the actor runs in dry-run mode.
- Bibliographic data only. The actor retrieves bibliographic metadata (title, abstract, applicants, inventors, classifications, dates). It does not download full-text patent descriptions, claims, or PDF documents.
- EPO rate limits apply. The free EPO API tier allows up to 4 GB of data per week. High-volume usage may trigger throttling (HTTP 403), which the actor handles with automatic retry, but sustained heavy use may require an EPO paid plan.
- XML structure variability. Patent XML from different offices can have structural inconsistencies. The actor handles the most common variations, but some edge-case documents may have missing fields.
- No full-text search. The EPO OPS search API supports title, applicant, inventor, classification, and date queries but does not offer full-text search across patent descriptions and claims.
- CQL syntax required for advanced queries. Some search capabilities (e.g., classification code search with
ipc=orcpc=, Boolean OR logic) are only available through the raw CQL query field.
Responsible use
- Respect EPO usage terms. The EPO OPS API is governed by the EPO's terms of service. The free tier is intended for non-commercial and evaluation purposes. Commercial use at scale should use EPO's paid plans.
- Avoid unnecessary load. Do not schedule runs more frequently than needed or request maximum results when fewer would suffice. Use date ranges and filters to keep result volumes reasonable.
- Do not redistribute raw data in bulk. While individual patent records are public, bulk redistribution of EPO data may violate the EPO's data usage policies. Check the EPO developer terms for your specific use case.
- Patent data is informational only. Patent search results from this actor should not be treated as legal advice. Always consult a qualified patent attorney for freedom-to-operate opinions, patentability assessments, or infringement analysis.
- Protect your credentials. Your EPO Consumer Secret is sensitive. The actor stores it securely using Apify's secret field handling, but do not share your credentials in public scripts or repositories.
FAQ
Do I need to pay for EPO API access? No. The EPO Open Patent Services API provides free credentials with generous usage limits for non-commercial use. Register at developers.epo.org to receive a Consumer Key and Consumer Secret at no charge. The free tier allows up to 4 GB of data per week.
What patent offices are covered? The EPO OPS API indexes patent data from over 100 patent authorities worldwide. This includes the European Patent Office (EP), WIPO/PCT (WO), USPTO (US), Japan Patent Office (JP), Korean Intellectual Property Office (KR), China National Intellectual Property Administration (CN), and many national offices across Europe, Asia, and the Americas.
What is CQL and how do I use it?
CQL (Common Query Language) is the search syntax used by the EPO OPS API. Supported field codes include ti= (title), pa= (applicant), in= (inventor), pn= (publication number/country), pd= (publication date), ipc= (IPC classification), and cpc= (CPC classification). Use Boolean operators and, or, not to combine terms. Example: ti="machine learning" and pa=Google and pd>=2023.
Can I search by IPC or CPC classification codes?
Yes, by using a raw CQL query. For example, ipc=H01M searches for patents in the electrochemistry / batteries IPC class. The actor does not have a dedicated classification input field, but the CQL query field supports classification-based searches directly.
What do the kind codes (A1, A2, B1, B2) mean? Kind codes indicate the document type and stage. For European patents: A1 is a published application with search report, A2 is a published application without search report, A3 is a search report published separately, B1 is a granted patent, and B2 is a corrected granted patent. Kind codes vary by patent office -- US patents use A1 for published applications and B1/B2 for granted patents.
What is a patent family ID?
The familyId field is the DOCDB simple patent family identifier. Patents sharing the same family ID are related filings covering the same invention across different countries. This is invaluable for tracking the geographic scope of patent protection and identifying equivalent filings in other jurisdictions.
Can I look up a single specific patent?
Yes. Enter the publication number in the publicationNumber field (e.g., EP3892581, US11234567, WO2024001234) to retrieve its bibliographic data directly without performing a search. This is faster and more efficient than searching.
Why are some abstracts null?
Not all patent documents include an abstract in the EPO database. Early-stage applications, older patents, and filings from some national offices may lack abstract text. The actor returns null for the abstract field when no abstract is available.
How do I monitor new patents from a competitor over time?
Set up a scheduled Apify run with the applicant name and a rolling date range. For example, run weekly with applicant set to "Siemens" and dateFrom set to a recent date. Connect the output to Google Sheets or Slack via Apify integrations to get notified of new filings automatically.
Can I export results to CSV or Excel? Yes. Every Apify dataset supports one-click export to JSON, CSV, Excel, XML, and RSS formats. Go to the dataset view after a run completes and click the download button in your preferred format.
Is there a way to get full patent text or PDF documents?
This actor retrieves bibliographic metadata only. For full-text access, use the espacenetUrl field in each result to navigate directly to the complete patent document on Espacenet, where you can read the full description, claims, and download PDF versions.
What happens if I exceed the 2,000 result limit? The EPO OPS API returns a maximum of 2,000 results per query. If your search matches more, the actor collects the first 2,000. To get broader coverage, split your search into smaller batches using date ranges (e.g., search year by year) or add more specific filters like country or classification codes.
Related actors
| Actor | Description |
|---|---|
| USPTO Patent Search | Search United States patents via the USPTO PatentsView API. Pair with EPO search for cross-jurisdictional patent analysis. |
| EUIPO EU Trademark Search | Search European Union trademarks registered with the EU Intellectual Property Office. Useful for comprehensive IP portfolio monitoring. |
| SEC EDGAR Filing Analyzer | Search and analyze SEC filings from publicly traded companies. Combine with patent data for deeper R&D and competitive intelligence. |
| UK Companies House | Search UK company registrations and filings. Cross-reference with patent applicant data to identify filing entities. |
| OpenCorporates Search | Search the world's largest open database of companies. Resolve patent applicant names to corporate entities across jurisdictions. |
| Crossref Paper Search | Search academic publications via Crossref. Combine with patent searches to track the research-to-patent pipeline for a technology area. |
How it works
Configure
Set your parameters in the Apify Console or pass them via API.
Run
Click Start, trigger via API, webhook, or set up a schedule.
Get results
Download as JSON, CSV, or Excel. Integrate with 1,000+ apps.
Use cases
Sales Teams
Build targeted lead lists with verified contact data.
Marketing
Research competitors and identify outreach opportunities.
Data Teams
Automate data collection pipelines with scheduled runs.
Developers
Integrate via REST API or use as an MCP tool in AI workflows.
Related actors
Bulk Email Verifier
Verify email deliverability at scale. MX record validation, SMTP mailbox checks, disposable and role-based detection, catch-all flagging, and confidence scoring. No external API costs.
GitHub Repository Search
Search GitHub repositories by keyword, language, topic, stars, forks. Sort by stars, forks, or recently updated. Returns metadata, topics, license, owner info, URLs. Free API, optional token for higher limits.
Website Content to Markdown
Convert any website to clean Markdown for RAG pipelines, LLM training, and AI apps. Crawls pages, strips boilerplate, preserves headings, tables, and code blocks. GFM support.
Website Tech Stack Detector
Detect 100+ web technologies on any website. Identifies CMS, frameworks, analytics, marketing tools, chat widgets, CDNs, payment systems, hosting, and more. Batch-analyze multiple sites with version detection and confidence scoring.
Ready to try EPO European Patent Search?
Start for free on Apify. No credit card required.
Open on Apify Store