Spain OEPM Trademark & Patent Scraper
Pricing
from $5.00 / 1,000 results
Go to Apify Store

Spain OEPM Trademark & Patent Scraper
Scrape trademark and patent data from Spain's OEPM (Oficina Española de Patentes y Marcas). Extracts BOPI official bulletin publications including trademark registrations, patent filings, Nice classifications, and legal status changes.
Pricing
from $5.00 / 1,000 results
Rating
0.0
(0)
Developer
Ivo Sandoval
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
9 days ago
Last modified
Categories
Share
Spain OEPM Trademarks & Patents Scraper
Scrape trademark and patent data from Spain's OEPM (Oficina Española de Patentes y Marcas). Extracts data from the daily BOPI (Boletín Oficial de la Propiedad Industrial) PDF publications.
Data Source
- URL: https://sede.oepm.gob.es/
- API:
https://sede.oepm.gob.es/apibopiweb(public, no auth required) - Rate limits: None known (be respectful)
- Auth required: No
- Publications: Monday–Friday, BOPI Tomo 1 (Trademarks & Distinctive Signs)
Output Example (real data from 2026-08-14)
{"application_number": "OEPM-M4379366","trademark_name": "WhatTheFactura","applicant": "Martín Polo , Antonio Samuel","nice_classes": [9, 35, 42],"nice_description": "09 APLICACIONES MOVILES DESCARGABLES; SOFTWARE DE FACTURACION...","status": "published","filing_date": "11-05-2026","publication_date": "2026-08-14","modalidad": "M","modalidad_label": "Marca","representative": "","detail_url": "https://ceo.oepm.es/detalleExpediente/M4379366","description": "Type: Marca. Denomination: WhatTheFactura. Applicant: Martín Polo..."}
Output Schema
| Field | Type | Description |
|---|---|---|
| application_number | string | OEPM ref (e.g. OEPM-M4379366) |
| trademark_name | string | Denomination or [Figurative mark] |
| applicant | string | Applicant name |
| nice_classes | int[] | Nice classification codes |
| nice_description | string | Goods/services text (first 200 chars) |
| status | string | Always published (from BOPI) |
| filing_date | string | Filing date (DD-MM-YYYY) |
| publication_date | string | BOPI publication date (YYYY-MM-DD) |
| modalidad | string | Type code (M, N, H, etc.) |
| modalidad_label | string | Type label (Marca, Nombre comercial, etc.) |
| representative | string | Legal representative |
| detail_url | string | Link to CEO OEPM detail page |
| description | string | Structured summary |
Input Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| search_query | string | No | Filter by trademark name or applicant |
| nice_classes | int[] | No | Filter by Nice codes (e.g. [9, 42]) |
| date_from | string | No | Start date (YYYY-MM-DD) |
| date_to | string | No | End date (YYYY-MM-DD) |
| record_type | string | No | trademark, patent, or both |
| max_results | integer | No | Max results (default: 100, max: 10000) |
| database_url | string | No | PostgreSQL URL for persistence |
| proxy_configuration | object | No | Apify proxy config |
Database
- Database name:
datamon_spain_oepm - Tables:
trademarks,patents - Upsert: by
application_number(insert or update)
Running
Via Apify CLI
cd actors/spain-oepmpython3.12 -m venv .venv && .venv/bin/pip install -r requirements.txtapify run --purge
Local runner (no Apify dependency)
cd actors/spain-oepm# Print to stdout (no DB).venv/bin/python runner.py --date-from 2026-08-14 --date-to 2026-08-14 --max-results 10 --no-db# Persist to PostgreSQLDATABASE_URL="postgresql+asyncpg://user:pass@host:5432/datamon_spain_oepm" \.venv/bin/python runner.py --date-from 2026-08-11 --date-to 2026-08-14# Filter by Nice class 25 (clothing).venv/bin/python runner.py --nice-classes 25 --max-results 20 --no-db
Cron (daily, weekdays at 07:00)
0 7 * * 1-5 cd /opt/datamon && DATABASE_URL="..." .venv/bin/python -m actors.spain-oepm.runner >> /var/log/datamon/oepm.log 2>&1
Pricing (Apify Store)
- Model: Pay-per-event (PPE)
- Price: $5.00 / 1,000 results
Status
- Scraper implementation (BOPI PDF parsing with WIPO ST.60 field codes)
- Database models + migrations
- Input/output schemas
- DB persistence (
persist.pywith upsert) - Local runner (
runner.py— no Apify dependency) - Injectable logger (scraper works with Apify or stdlib logging)
- Verified against live BOPI API (218 entries parsed from 2026-08-14)
-
apify runworks locally - Tests
- Apify Store listing