# French Trademark Watch (INPI) – New Filings & Similarity Alerts (`replay/inpi-veille-marques`) Actor

Monitor new French trademark filings by keyword, Nice class or applicant and get explainable similarity alerts for your brands. Pay per result, uses your own free Data INPI access. Independent, not affiliated with INPI; not legal advice.

- **URL**: https://apify.com/replay/inpi-veille-marques.md
- **Developed by:** [A D](https://apify.com/replay) (community)
- **Categories:** Business
- **Stats:** 2 total users, 1 monthly users, 84.6% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $30.00 / 1,000 alerte de similarité

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## French Trademark Watch (INPI) – New Filings & Similarity Alerts

**Monitor new French trademark filings every week and get an alert when a new filing looks like your brand.** Official Data INPI (API PI Marques) data, explainable similarity scoring (no AI), pay only per result.

> Data from INPI — independent service, not affiliated with INPI. Documentary monitoring tool, **not legal advice**. You use **your own free Data INPI account**.

### Use cases

- **Brand protection**: get weekly alerts when someone files `LUMINNA` or `LOUMINA` while you own `LUMINA`.
- **Market watch**: track new marks filed in given Nice classes (e.g. class 3 cosmetics) or containing a keyword (e.g. "bio").
- **Competitor watch**: follow every new filing by a given applicant (company name or SIREN).
- **IP firms & agencies**: run one scheduled watch per client, every Friday after the INPI update.

### How it works

- Filters new filings by **keywords**, **Nice classes** (1–45) and/or **applicant**.
- Compares each filing to your **watched marks** with a 0–100 score: spelling (edit distance), simplified French phonetics, inclusion, shared word.
- Applicants that look like natural persons are masked by default (GDPR).
- Free test: `"mode": "demo"` runs on a bundled **fictitious** sample, no INPI account needed.

### Input example

```json
{
  "mode": "live",
  "keywords": ["bio"],
  "niceClasses": ["3"],
  "watchedMarks": ["LUMINA"],
  "similarityThreshold": 80,
  "daysBack": 7,
  "inpiUser": "<your Data INPI technical login>",
  "inpiPassword": "<secret>"
}
```

### Output example (one row per result)

```json
{
  "type": "similarity-alert",
  "applicationNumber": "5012345",
  "mark": "LUMINNA",
  "applicationDate": "2026-10-09",
  "classes": ["3"],
  "watchedMark": "LUMINA",
  "score": 100,
  "reasons": ["spelling", "phonetic"],
  "url": "https://data.inpi.fr/marques/FR5012345",
  "source": "INPI – Data INPI, base Marques"
}
```

*(Illustrative values.)* `type` is `filing` or `similarity-alert`.

### Pricing (pay per event)

- **$0.005** per matching filing
- **$0.03** per similarity alert

A typical weekly watch (5 marks, 2 classes) costs a few tens of cents per week.

### FAQ

**Do I need an INPI account?** Yes, for live mode: create a free account on data.inpi.fr, request "Marques" API access, then enter the technical login in the encrypted `inpiUser` / `inpiPassword` fields. Credentials are used in memory only and never written to the dataset or logs. Demo mode needs no account.

**How often should I run it?** Weekly. INPI data is updated every Friday; add an Apify Schedule on Friday.

**How is this different from TMview / EUIPO?** TMview is a manual search tool. This actor is an automated, scheduled watch on new French filings (EU/WO optional) with similarity scoring and machine-readable output (JSON, CSV, API, MCP).

**Is the similarity a legal opinion?** No. It is textual and phonetic only (no logos, no goods/services analysis). Ask an IP attorney before acting.

**Rate limits?** Max 10 requests/min per INPI account across all runs (Data INPI terms); parallel runs on the same account are serialized automatically.

### Related actors by replay

- [French Company Signals (BODACC)](https://apify.com/replay/bodacc-signaux-b2b) – insolvencies, new companies and business sales in France, with SIRENE context.
- [BODACC Business Sale Prices France](https://apify.com/replay/bodacc-prix-cession) – median sale prices of French businesses by activity and département.

***

## Version française

## Veille des marques françaises — nouveaux dépôts & alertes de similarité

> **Données issues de l'INPI — service indépendant, non affilié à l'INPI.** Cet actor est un **outil de veille documentaire** : il ne constitue **ni un conseil juridique, ni un avis en propriété industrielle**, et n'accomplit aucun acte réservé aux conseils en propriété industrielle ou aux avocats.

Surveillez chaque semaine les **nouvelles marques déposées en France** (INPI, + EU/WO en option) et recevez une **alerte quand un dépôt ressemble à votre marque**.

### Ce que fait l'actor

- **Nouveaux dépôts** filtrés par mots-clés dans le nom, **classes de Nice** (1–45) et/ou **déposant** (nom ou SIREN).
- **Alertes de similarité** : chaque dépôt de la période est comparé à vos marques surveillées. Score 0–100 **explicable**, sans IA : orthographe (distance d'édition), phonétique FR simplifiée (PH→F, K/C/QU, Y→I…), inclusion, mot commun. Exemple : `LUMINA` → `LUMINNA` 100, `LOUMINA` 92, `LUMINAIR` 90.
- Données officielles **Data INPI (API PI Marques)**, mises à jour chaque vendredi. Lien vers la notice data.inpi.fr pour chaque résultat.
- Les déposants qui ressemblent à des **personnes physiques sont masqués** par défaut (RGPD).

### Prérequis : votre accès Data INPI (gratuit)

1. Créez un compte sur https://data.inpi.fr.
2. Dans l'espace personnel, ouvrez « Mes accès API / SFTP » et demandez l'accès **Marques**.
3. Activez le compte technique API grâce au lien reçu par e-mail.
4. Saisissez l'identifiant et le mot de passe dans les champs secrets `inpiUser` / `inpiPassword`, chiffrés par Apify.

**Vos identifiants restent les vôtres** : chaque utilisateur se sert de **son propre** compte Data INPI, et l'actor ne fournit ni ne mutualise aucun accès. Les identifiants ne sont utilisés qu'en mémoire, pendant le run. Ils ne sont **jamais** écrits dans le dataset, le résumé du run ni les logs.

**Quota cumulé par compte** : les runs qui utilisent le même compte Data INPI sont **sérialisés** grâce à un verrou nommé par empreinte (hash) du compte, avec au moins 6,5 s entre deux requêtes, connexion comprise. Le débit cumulé reste donc sous les 10 requêtes/min, même si vous lancez plusieurs runs en parallèle. Un second run attend jusqu'à `maxWaitForAccountSec`, puis s'arrête sans rien facturer.

Pour tester sans compte, utilisez `mode: "demo"`, qui fonctionne sur un échantillon **fictif** inclus.

### Exemple d'entrée

```json
{"mode":"live","keywords":["bio"],"niceClasses":["3"],"watchedMarks":["LUMINA"],"similarityThreshold":80,"daysBack":7}
```

### Sortie (une ligne par résultat)

`type` (`filing` | `similarity-alert`), `applicationNumber`, `mark`, `applicationDate`, `classes`, `applicant`, `status`, `watchedMark`, `score`, `reasons`, `url`, `source`, `disclaimer`, `generatedAt` (date de consultation).

### Prix (pay-per-event)

- **0,005 $** par dépôt filtré.
- **0,03 $** par alerte de similarité.

Une veille hebdomadaire typique (5 marques, 2 classes) coûte quelques dizaines de centimes par semaine. Planifiez l'actor chaque vendredi (Schedules).

### Limites

- Cet outil d'aide à la veille ne remplace pas un conseil en propriété industrielle et ne donne pas d'avis juridique.
- La similarité est uniquement textuelle et phonétique : pas d'analyse des logos ni des produits/services.
- Débit limité à 10 requêtes/min **par compte, tous runs confondus** (CGU Data INPI). La pagination est faite jour par jour.
- Source : données issues de l'INPI, base Marques (Data INPI). Elles sont restituées sans altération, avec mention de la source et de la date. Ce service est indépendant et non affilié à l'INPI. Il n'utilise ni le logo ni la marque INPI.
- Les déposants personnes physiques sont masqués par une heuristique. Ce n'est pas une anonymisation garantie : n'utilisez pas ces données à des fins de prospection.

# Actor input Schema

## `mode` (type: `string`):

Demo returns results on a bundled sample so you can test the output for free.

## `keywords` (type: `array`):

New filings whose name contains one of these words (case/accent insensitive).

## `niceClasses` (type: `array`):

Restrict to Nice classes 1-45, e.g. 3, 25, 43.

## `applicants` (type: `array`):

Filings by these applicants / holders (company name or SIREN).

## `watchedMarks` (type: `array`):

Your marks. Each new filing in the window is compared to them; alerts above the threshold are output.

## `similarityThreshold` (type: `integer`):

Higher = fewer, closer alerts.

## `daysBack` (type: `integer`):

Filings with application date in the last N days.

## `collections` (type: `array`):

FR (INPI), EU (EUIPO, in force), WO (WIPO designating France).

## `maskNaturalPersons` (type: `boolean`):

Hide applicant names that look like private individuals (GDPR minimisation). Companies stay visible.

## `maxResults` (type: `integer`):

Safety cap on API pagination.

## `newOnly` (type: `boolean`):

Live mode: each filing / alert is delivered and charged only once per watch profile (state kept in a key-value store of your account). Disable to get the full window every run.

## `stateKey` (type: `string`):

Name of the watch profile for 'New only'. Default: derived from your filters and watched marks.

## `inpiUser` (type: `string`):

Your OWN Data INPI technical API account (data.inpi.fr > Mes accès API > Marques). Secret field: encrypted by Apify, never written to output or logs. Required in live mode.

## `inpiPassword` (type: `string`):

Secret field: encrypted by Apify, never written to output or logs.

## `maxWaitForAccountSec` (type: `integer`):

Runs using the same Data INPI account are serialized so that the cumulative rate stays under 10 requests/min (Data INPI terms). A second run waits up to this long, then stops without charging.

## Actor input object example

```json
{
  "mode": "demo",
  "keywords": [
    "bio"
  ],
  "niceClasses": [
    "3"
  ],
  "watchedMarks": [
    "LUMINA"
  ],
  "similarityThreshold": 80,
  "daysBack": 14,
  "collections": [
    "FR"
  ],
  "maskNaturalPersons": true,
  "maxResults": 1000,
  "newOnly": true,
  "maxWaitForAccountSec": 600
}
```

# Actor output Schema

## `results` (type: `string`):

Items of the default dataset (see dataset schema for fields).

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "mode": "demo",
    "keywords": [
        "bio"
    ],
    "niceClasses": [
        "3"
    ],
    "watchedMarks": [
        "LUMINA"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("replay/inpi-veille-marques").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "mode": "demo",
    "keywords": ["bio"],
    "niceClasses": ["3"],
    "watchedMarks": ["LUMINA"],
}

# Run the Actor and wait for it to finish
run = client.actor("replay/inpi-veille-marques").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "mode": "demo",
  "keywords": [
    "bio"
  ],
  "niceClasses": [
    "3"
  ],
  "watchedMarks": [
    "LUMINA"
  ]
}' |
apify call replay/inpi-veille-marques --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,replay/inpi-veille-marques"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/4cFij9AfCKyUnAwgP/builds/KBO9oCG8yW3N8wFwc/openapi.json
