AIDEVELOPER TOOLS

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

Try on Apify Store
$0.002per event
1
Users (30d)
30
Runs (30d)
90
Actively maintained
Maintenance Pulse
$0.002
Per event

Maintenance Pulse

90/100
Last Build
Today
Last Version
1d ago
Builds (30d)
8
Issue Response
N/A

Cost Estimate

How many results do you need?

patent-fetcheds
Estimated cost:$0.20

Pricing

Pay Per Event model. You only pay for what you use.

EventDescriptionPrice
patent-fetchedCharged 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

  1. 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.
  2. Open the actor. Navigate to EPO European Patent Search on the Apify Store and click "Try for free".
  3. 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).
  4. 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.
  5. 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

FieldTypeRequiredDefaultDescription
consumerKeystringYes*--EPO OPS Consumer Key (free from developers.epo.org).
consumerSecretstringYes*--EPO OPS Consumer Secret (stored securely).
querystringNo--Raw CQL query string. Overrides all other search fields if provided.
titleKeywordsstringNo--Search for keywords in the patent title.
applicantstringNo--Search by applicant or company name.
inventorstringNo--Search by inventor name.
publicationNumberstringNo--Look up a specific patent by publication number (e.g., EP3456789).
publicationCountrystringNo"" (any)Filter by publication office/country code. Select from 49 supported codes.
dateFromstringNo--Publication date start (format: YYYY or YYYYMMDD).
dateTostringNo--Publication date end (format: YYYY or YYYYMMDD).
maxResultsintegerNo100Maximum 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 query value, 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, and pd for publication date. Join terms with and, or, not. Example: ti="fuel cell" and pa=Toyota and pd within "2023 2025".
  • Date formats. Both YYYY (year only) and YYYYMMDD (exact date) are accepted. When both dateFrom and dateTo are provided, the actor uses pd within "from to" syntax. A single date uses pd>= or pd<=.
  • Direct patent lookup. Setting publicationNumber bypasses search entirely and fetches bibliographic data for that specific patent. Accepts formats like EP3456789, US20230123456, or WO2024001234.
  • 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

FieldTypeDescription
publicationNumberstringFull publication number including country and kind code (e.g., EP3892581B1).
countrystringTwo-letter country/office code (e.g., EP, US, WO).
docNumberstringNumeric document number without country prefix or kind code.
kindstringKind code indicating document type -- A1 (application with search report), A2 (application without search report), B1 (granted patent), B2 (corrected grant).
titlestringInvention title, English preferred.
abstractstring or nullPatent abstract text, English preferred. Null if unavailable.
applicantsstring[]Array of applicant/assignee names (companies or individuals).
inventorsstring[]Array of inventor names.
publicationDatestring or nullPublication date in YYYYMMDD format.
applicationNumberstring or nullApplication number with country prefix.
applicationDatestring or nullApplication filing date in YYYYMMDD format.
ipcClassificationsstring[]International Patent Classification codes (e.g., H01M 10/0562).
cpcClassificationsstring[]Cooperative Patent Classification codes (e.g., H01M 10/0562).
familyIdstring or nullDOCDB patent family identifier for finding related filings across jurisdictions.
espacenetUrlstringDirect 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:

  1. 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.

  2. 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: titleKeywords becomes ti="...", applicant becomes pa="...", inventor becomes in="...", publicationCountry becomes pn=XX*, and date ranges use pd within "from to", pd>=from, or pd<=to. All parts are joined with and.

  3. Search execution. For publication number lookups, the actor calls the /published-data/publication/epodoc/{number}/biblio endpoint directly. For searches, it calls /published-data/search/full-cycle with the CQL query and paginates using Range headers (1-100, 101-200, etc.). Pagination stops on 404 (no results), 416 (range exceeded), or when maxResults is reached. A 1-second delay is applied between pages, and 403 throttle responses trigger a 5-second wait with automatic retry.

  4. XML parsing. EPO API responses are XML. The actor uses fast-xml-parser with 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.

  5. 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.

ScenarioResultsApprox. TimeApprox. Apify Cost
Single patent lookup15--10 seconds< $0.001
Focused search (e.g., one company + date range)5015--30 seconds~$0.002
Standard search10030--60 seconds~$0.003
Broad search with pagination5002--4 minutes~$0.010
Maximum search2,0008--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= or cpc=, 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

ActorDescription
USPTO Patent SearchSearch United States patents via the USPTO PatentsView API. Pair with EPO search for cross-jurisdictional patent analysis.
EUIPO EU Trademark SearchSearch European Union trademarks registered with the EU Intellectual Property Office. Useful for comprehensive IP portfolio monitoring.
SEC EDGAR Filing AnalyzerSearch and analyze SEC filings from publicly traded companies. Combine with patent data for deeper R&D and competitive intelligence.
UK Companies HouseSearch UK company registrations and filings. Cross-reference with patent applicant data to identify filing entities.
OpenCorporates SearchSearch the world's largest open database of companies. Resolve patent applicant names to corporate entities across jurisdictions.
Crossref Paper SearchSearch academic publications via Crossref. Combine with patent searches to track the research-to-patent pipeline for a technology area.

How it works

01

Configure

Set your parameters in the Apify Console or pass them via API.

02

Run

Click Start, trigger via API, webhook, or set up a schedule.

03

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.

Ready to try EPO European Patent Search?

Start for free on Apify. No credit card required.

Open on Apify Store