Skip to main content

inpi-patents

French patent data, from INPI's servers to analysis-ready tables.

CI Docs License: MIT Python

INPI, the French patent office, publishes the full French patent register as WIPO ST36 XML: bibliography, legal status, and the parties on each document, including inventors with city and postcode. Getting from "the data exists" to "I have a table" involves a licence form, an FTP server with no English documentation, a cookie-authenticated API with a small quota, and an XML dialect with a few silent traps.

This package handles the whole path:

  • FTP route (bulk): map the server, download the full-register snapshot (~3.5 GB, ~2.5 million documents) and the weekly update files. Resumable, size-verified, restartable.
  • API route (targeted): log in to API PI Diffusion, fetch notices, run searches, harvest small sets without fighting the quota by hand.
  • One parser for both: every element of the notice, with the known source defects repaired and flagged rather than silently propagated.
  • Geography built in: postcode to département to NUTS-3, Corsica and overseas handled, no geocoder needed.
  • A CLI and a local dashboard that drive the same steps.

Documentation: https://maliyuam.com/inpi-patent-harvester/ — from requesting access to using the tables. The same pages live in docs/; mkdocs serve browses them locally.

Sixty seconds, no credentials

pip install inpi-patents
inpi parse file tests/fixtures/FR_SYNTHETIC_MODERN.xml

The synthetic record exercises every trap the parser handles: inverted city/postcode, duplicated party renderings, the filing date hidden behind INPI-specific element names, priorities that move the earliest filing date, a foreign inventor whose five-digit code is not a French postcode.

The real thing

inpi env init                                 # write .env, fill in the codes INPI emailed you
inpi ftp probe --cred NOTICES                 # what your licence can see
inpi ftp fetch /Backlog --cred NOTICES        # the snapshot, resumable
inpi parse zips data/raw/ftp/Backlog          # archives -> parquet parts, parallel
inpi merge                                    # parts -> one parquet per table, QA numbers
inpi geo                                      # inventors_geo.parquet with département + NUTS-3
inpi ui                                       # or do all of the above from a browser
import duckdb
duckdb.sql("""
    SELECT app_year, dept, count(*) AS inventors
    FROM 'data/export/inventors_geo.parquet'
    WHERE app_year BETWEEN '2000' AND '2020' AND dept IS NOT NULL
    GROUP BY 1, 2 ORDER BY 1, 3 DESC
""").show()

What you get

Table One row per
documents publication: numbers, dates, kind, title, abstract, family id, earliest filing date
parties document × party × rendering: inventors, applicants, owners, agents, licensees, with addresses
priorities, classifications, related, legal_events document × item
inventors_geo document × inventor, de-duplicated, swap-repaired, with dept and nuts3

On a mid-2025 snapshot: 2.52 million documents, zero parse errors, ~316,000 filings in 2000-2020 of which 99.5% carry an inventor and 84% of inventor slots resolve to a département (99.6% of French-resident ones).

Getting access

The FTP route needs a free licence from INPI: fill in the database selection form on INPI's data portal and email it to their licence desk; access codes come back by email, one login per database. The API route needs a technical account on data.inpi.fr with APIs PI Access activated. The docs walk through both, and include a bilingual request letter template: Getting access.

Code is MIT. Data is INPI's.

This repository contains code, documentation and synthetic test fixtures only. Data obtained from INPI is covered by INPI's reuse licence: access codes are personal, raw data is not redistributable, and INPI must be cited. .gitignore keeps data/, archives, XML, parquet and .env out of the repository. See Licence and redistribution.

Development

git clone https://github.com/maliyuam/inpi-patent-harvester.git && cd inpi-patent-harvester
pip install -e ".[dev,ui]"
pytest                    # no network, synthetic fixtures only
ruff check src tests
mkdocs serve              # docs at http://127.0.0.1:8000

See CONTRIBUTING.md. Not affiliated with INPI.

Release files for inpi-patents 0.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for inpi-patents 0.1.0
File Size Uploaded
inpi_patents-0.1.0.tar.gz 63.9 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for inpi-patents 0.1.0
File Interpreter ABI Platform
inpi_patents-0.1.0-py3-none-any.whl Python 3 none any Details

Total release size: 121.9 kB

Release files / inpi_patents-0.1.0.tar.gz

Download URL inpi_patents-0.1.0.tar.gz
Size 63.9 kB
Tags Source
SHA-256 checksum
How to use checksums
5ac113f456b86c6fd75a1add78490ee02565ac5d522e0c815b9c5dff0b0d4054
BLAKE2b-256 checksum
How to use checksums
bd9acd30c6a0e49d4f63e50ac2637276614edcc44ac8e5a5f8de5cf5f76c6a2c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 3, 2026.

Transparency log

Release files / inpi_patents-0.1.0-py3-none-any.whl

Download URL inpi_patents-0.1.0-py3-none-any.whl
Size 58.1 kB
Tags Python 3
SHA-256 checksum
How to use checksums
1b7814228b454e230bf17b952e53ff413cefe329f96ccb79dafb7ea9f5e9b82a
BLAKE2b-256 checksum
How to use checksums
92bf9653ca4ad7761774ebf0e1e17a686382970aa91adf780cd5750afffc2693
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 3, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.1.0 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page