{
  "openapi": "3.0.1",
  "info": {
    "title": "EUIPO Trademarks Scraper: 100M+ EU/Global Trademarks via TMview",
    "description": "Search 100M+ trademarks from EUIPO + 70 IP offices (USPTO, INPI, DPMA, WIPO Madrid). Filter by Nice class, status, office, date. No API key. $0.01/result.",
    "version": "0.1",
    "x-build-id": "FuANG19mQ1nmk5Px0"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/dltik~euipo-trademarks-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-dltik-euipo-trademarks-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/acts/dltik~euipo-trademarks-scraper/runs": {
      "post": {
        "operationId": "runs-sync-dltik-euipo-trademarks-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor and returns information about the initiated run in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/runsResponseSchema"
                }
              }
            }
          }
        }
      }
    },
    "/acts/dltik~euipo-trademarks-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-dltik-euipo-trademarks-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "inputSchema": {
        "type": "object",
        "properties": {
          "query": {
            "title": "Search query (brand name or keyword)",
            "type": "string",
            "description": "Free-text search on trademark name. Examples: 'apple', 'louis vuitton', 'tesla', 'volkswagen'. Required to run a search."
          },
          "offices": {
            "title": "Offices (filter)",
            "type": "array",
            "description": "Two-letter IP office codes. Examples: 'EM' = EUIPO (EU trademark), 'FR' = INPI France, 'DE' = DPMA Germany, 'US' = USPTO, 'WO' = WIPO Madrid, 'JP' = JPO Japan. Leave empty to search ALL 70+ offices. Multi-value supported.",
            "items": {
              "type": "string"
            },
            "default": []
          },
          "statuses": {
            "title": "Trademark statuses (filter)",
            "type": "array",
            "description": "Filter by status. Common values: 'Registered', 'Filed', 'Expired', 'Application published', 'Application opposed', 'Application refused'. Leave empty for all statuses.",
            "items": {
              "type": "string"
            },
            "default": []
          },
          "niceClasses": {
            "title": "Nice classes (filter)",
            "type": "array",
            "description": "Nice classification numbers (1-45) — international trademark goods/services categories. Provide as strings: '9' = electronics/software, '25' = clothing, '35' = advertising, '41' = education, '42' = scientific/IT services. Multi-value supported.",
            "items": {
              "type": "string"
            },
            "default": []
          },
          "tmTypes": {
            "title": "Trademark types (filter)",
            "type": "array",
            "description": "Filter by mark type. Common values: 'Word', 'Figurative', 'Combined', '3-D', 'Sound', 'Colour', 'Hologram', 'Motion'. Leave empty for all types.",
            "items": {
              "type": "string"
            },
            "default": []
          },
          "applicationDateFrom": {
            "title": "Application date from",
            "type": "string",
            "description": "Filter by application date (start). Format: YYYY-MM-DD. Example: '2020-01-01'. Requires applicationDateTo to be set as well."
          },
          "applicationDateTo": {
            "title": "Application date to",
            "type": "string",
            "description": "Filter by application date (end). Format: YYYY-MM-DD. Example: '2026-12-31'. Requires applicationDateFrom to be set as well."
          },
          "enrichDetails": {
            "title": "Enrich with full details (goods & services, registration/expiry dates)",
            "type": "boolean",
            "description": "When ON, fetches the full TMview detail record for EACH result: registration & expiration dates, opposition period start/end, complete goods & services descriptions per Nice class, detailed applicant info (address, nationality), legal representatives, and renewal history. Detail requests run concurrently. Adds one request per result and is billed separately as a 'trademark-detail' event. Leave OFF for fast, cheap name/status/Nice-class search.",
            "default": false
          },
          "enrichApplicant": {
            "title": "Resolve applicant → company record (portfolio link)",
            "type": "boolean",
            "description": "When ON, resolves each mark's applicant to a real company. French applicants are matched live to their SIREN + size + sector + active/ceased status via the official register (same source as our pappers-sirene-scraper); applicants from 30+ other countries get a pointer to the matching national company-registry actor. Turns trademark data into brand-owner intelligence (lead-gen, competitive mapping, IP due diligence). Billed as 'applicant-enriched' only for applicants successfully resolved to a company record. Best combined with enrichDetails (which provides the applicant's country).",
            "default": false
          },
          "referenceMark": {
            "title": "Reference mark (for brand-clearance scoring)",
            "type": "string",
            "description": "The proposed brand name you want to CLEAR. When set, every result is scored against it for free: Jaro-Winkler name similarity, phonetic match (Metaphone/Soundex) and Nice-class overlap → a 0-100 computed_conflict_score with a band (high/medium/low/none), written into each record's 'clearance' object. Leave empty to skip clearance scoring. Defaults to 'query' when analyzeClearance is ON."
          },
          "referenceNiceClasses": {
            "title": "Reference Nice classes (intended goods/services)",
            "type": "array",
            "description": "The Nice classes (1-45) your proposed mark would be used in. Sharpens the clearance conflict score (a name clash only matters where the goods/services overlap). Provide as strings, e.g. ['9','42']. Optional.",
            "items": {
              "type": "string"
            },
            "default": []
          },
          "analyzeClearance": {
            "title": "AI likelihood-of-confusion (premium, paying plans)",
            "type": "boolean",
            "description": "When ON, an AI model scores each existing mark against your referenceMark for likelihood of confusion the way an EU examiner would: semantic_similarity (meaning, not just spelling — catches translations/synonyms), goods_conflict (overlap of goods & services), an overall likelihood_of_confusion 0-100, a verdict (clear/caution/high_risk), a recommended_action and one-line reasoning. This is the enterprise brand-clearance feature — screening triage, not legal advice. Billed as 'clearance-analyzed' per mark scored. Requires a paid Apify plan and the account OpenRouter key. Best with enrichDetails ON (feeds the goods & services text to the model).",
            "default": false
          },
          "referenceGoods": {
            "title": "Reference goods & services (for AI clearance)",
            "type": "string",
            "description": "Optional free-text description of the goods/services your proposed mark will cover (e.g. 'mobile software for fitness tracking'). Gives the AI clearance model the context to judge goods conflict. Only used when analyzeClearance is ON."
          },
          "incrementalMode": {
            "title": "Watch mode (only new/updated marks on recurring runs)",
            "type": "boolean",
            "description": "When ON, remembers every trademark seen on the previous run (per stateKey) and, on the next run, tags each mark NEW / UPDATED / UNCHANGED. By default only NEW and UPDATED marks are emitted and billed — so scheduling this daily/weekly becomes a trademark-watch that surfaces competitor filings and status changes cheaply. Combine with a schedule for brand monitoring.",
            "default": false
          },
          "includeUnchanged": {
            "title": "Include unchanged marks (watch mode)",
            "type": "boolean",
            "description": "When incrementalMode is ON, also emit (and bill) marks that did not change since the last run. Leave OFF to receive only the delta.",
            "default": false
          },
          "includeExpired": {
            "title": "Emit expired markers (watch mode)",
            "type": "boolean",
            "description": "When incrementalMode is ON, also emit lightweight EXPIRED markers for marks that were present last run but dropped off this run. These markers are metadata and are NOT billed.",
            "default": false
          },
          "stateKey": {
            "title": "Watch state key",
            "type": "string",
            "description": "Namespace for the incrementalMode baseline, so several saved watches (different queries) keep separate histories under one actor. Any short string, e.g. 'competitor-x' or 'class9-watch'. Defaults to 'default'."
          },
          "detailConcurrency": {
            "title": "Detail fetch concurrency",
            "minimum": 1,
            "maximum": 8,
            "type": "integer",
            "description": "Number of parallel TMview detail requests when enrichDetails is ON (1-8). Higher finishes large enriched runs faster; the default 4 stays comfortably under TMview's soft rate-limit.",
            "default": 4
          },
          "pageSize": {
            "title": "Page size",
            "minimum": 1,
            "maximum": 200,
            "type": "integer",
            "description": "Results per TMview page. Default 30 matches the official TMview UI. Higher reduces request count for large maxResults.",
            "default": 30
          },
          "maxResults": {
            "title": "Max results",
            "minimum": 1,
            "maximum": 5000,
            "type": "integer",
            "description": "Maximum trademarks to return. Start with 30 to validate filters, scale up once happy. Billing is per result returned.",
            "default": 30
          },
          "proxyConfig": {
            "title": "Proxy (recommended)",
            "type": "object",
            "description": "Apify datacenter proxy is enabled by default — TMview blocks plain cloud IPs at the network edge. You can switch to residential if you scrape at very high frequency.",
            "default": {
              "useApifyProxy": true
            }
          }
        }
      },
      "runsResponseSchema": {
        "type": "object",
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "actId": {
                "type": "string"
              },
              "userId": {
                "type": "string"
              },
              "startedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "finishedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "status": {
                "type": "string",
                "example": "READY"
              },
              "meta": {
                "type": "object",
                "properties": {
                  "origin": {
                    "type": "string",
                    "example": "API"
                  },
                  "userAgent": {
                    "type": "string"
                  }
                }
              },
              "stats": {
                "type": "object",
                "properties": {
                  "inputBodyLen": {
                    "type": "integer",
                    "example": 2000
                  },
                  "rebootCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "restartCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "resurrectCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "computeUnits": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "options": {
                "type": "object",
                "properties": {
                  "build": {
                    "type": "string",
                    "example": "latest"
                  },
                  "timeoutSecs": {
                    "type": "integer",
                    "example": 300
                  },
                  "memoryMbytes": {
                    "type": "integer",
                    "example": 1024
                  },
                  "diskMbytes": {
                    "type": "integer",
                    "example": 2048
                  }
                }
              },
              "buildId": {
                "type": "string"
              },
              "defaultKeyValueStoreId": {
                "type": "string"
              },
              "defaultDatasetId": {
                "type": "string"
              },
              "defaultRequestQueueId": {
                "type": "string"
              },
              "buildNumber": {
                "type": "string",
                "example": "1.0.0"
              },
              "containerUrl": {
                "type": "string"
              },
              "usage": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "integer",
                    "example": 1
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "usageTotalUsd": {
                "type": "number",
                "example": 0.00005
              },
              "usageUsd": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "number",
                    "example": 0.00005
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}