RZ

RZP

czech API

RZP

Type: company
Module: Rzp

Capabilities

License Search ICO Lookup License Type Verification Person Search License History Business Activity Classification

Try RZP

API Endpoint

Results

Overview

RZP (Rejstrik zivnostenskeho podnikani) is the Czech Republic's Trade Licensing Register, maintained by the Ministry of Industry and Trade (Ministerstvo prumyslu a obchodu) as the authoritative source for all trade licenses (zivnostenska opravneni) issued to natural and legal persons conducting business in the Czech Republic. The register operates under Act No. 455/1991 Coll., the Trade Licensing Act (Zivnostensky zakon), as amended, which defines the legal framework for trade licensing in the Czech Republic.

While ARES aggregates trade license data alongside other registry sources, RZP is the primary authoritative source maintained by the licensing authorities themselves. It provides detailed information about license types, validity periods, scope of authorized activities, responsible persons for regulated trades, and any restrictions, suspensions, or revocations. The register contains records for approximately 3.5 million trade licenses across both active and historical entries.

Czech trade licensing law distinguishes four categories of trade licenses, each with different qualification requirements and regulatory oversight. This classification system is fundamental to understanding the Czech business landscape: a company's trade licenses define the scope of activities it is legally authorized to perform. Any business activity conducted without the appropriate trade license constitutes an administrative offense under Czech law.

For OSINT analysts, RZP provides critical verification intelligence. Claims about business capabilities can be validated against registered licenses, responsible persons for regulated activities can be identified, and the licensing history of entities reveals patterns of business expansion, contraction, or regulatory issues.

Data Sources and Coverage

RZP receives data from local trade licensing offices (zivnostenske urady) across all 205 Czech municipalities with extended competence, which process license applications and maintain local records.

Data TypeDescriptionSource
License HolderName, ICO, registered addressApplication records
License TypeVolna, Remeslna, Vazana, KoncesovanaLicensing authority classification
Business ActivitiesAuthorized scope of trade activitiesLicense application
Validity PeriodIssue date, expiry date, current statusLicensing authority
Responsible PersonNamed representative for regulated tradesQualification verification
SuspensionsLicense suspensions, restrictions, revocationsEnforcement records
Licensing AuthorityIssuing trade licensing officeAdministrative records
Establishment AddressesPhysical business locations (provozovny)License registration

Czech Trade License Types

TypeCzech NameRequirementsExamples
Free TradeVolna zivnostRegistration only, no special qualificationsGeneral trade and services, IT consulting
Craft TradeRemeslna zivnostProfessional qualification (education + practice)Plumbing, electrical work, bakery
Regulated TradeVazana zivnostSpecific education or professional certificationAccounting, tax advisory, geodesy
Concession TradeKoncesovana zivnostState approval + qualifications + background checkWeapons trade, taxi services, private security

RZP operates within a comprehensive legal framework:

  • Act No. 455/1991 Coll. (Trade Licensing Act) - primary legislation governing trade licenses
  • Act No. 570/1991 Coll. (on Trade Licensing Offices) - administrative authority structure
  • Government Decree No. 278/2008 Coll. - defines content areas for free trades
  • Annexes 1-3 of the Trade Licensing Act - enumerate craft, regulated, and concession trades
  • Act No. 89/2012 Coll. (Civil Code) - general legal framework for business entities
  • EU Services Directive 2006/123/EC - harmonized requirements for cross-border service provision

Technical Architecture

RZP is accessible through a web interface at www.rzp.cz and through data integration with the ARES system. The technical architecture reflects the distributed nature of Czech trade licensing administration.

Local Trade Offices (205 municipalities)
         |
         v
+---------------------------+
| Central RZP Database      |
| (Ministry of Industry)    |
+---------------------------+
         |
    +----+----+
    |         |
    v         v
+-------+  +--------+
| Web   |  | ARES   |
| rzp.cz|  | Integ. |
+-------+  +--------+
ComponentDescription
Local Offices205 trade licensing offices process applications and maintain records
Central DatabaseConsolidated register at the Ministry of Industry and Trade
Web InterfacePublic search at www.rzp.cz with entity and person search
ARES IntegrationRZP data available through ARES XML API alongside other registers
Open DataBulk exports available through Czech Open Data portal

API Integration

RZP does not provide a standalone REST API. Data access is available through the web interface and through the ARES XML service. The Prismatic adapter supports both access paths.

defmodule Prismatic.Osint.Rzp do
  @moduledoc """
  Adapter for the Czech Trade Licensing Register (RZP).
  Provides trade license verification, license history, and
  responsible person lookup for Czech business entities.
  """

  @doc """
  Get all trade licenses for an entity by ICO.
  Returns active and historical licenses with full details.
  """
  @spec get_licenses(String.t()) :: {:ok, list(map())} | {:error, term()}
  def get_licenses(ico) when is_binary(ico) do
    with {:ok, response} <- fetch_licenses(ico),
         {:ok, parsed} <- parse_license_response(response) do
      {:ok, Enum.map(parsed, &normalize_license/1)}
    end
  end

  @doc """
  Search by person name to find associated trade licenses.
  """
  @spec search_person(keyword()) :: {:ok, list(map())} | {:error, term()}
  def search_person(opts) do
    first_name = Keyword.fetch!(opts, :first_name)
    last_name = Keyword.fetch!(opts, :last_name)

    with {:ok, response} <- search_by_person(first_name, last_name) do
      {:ok, Enum.map(response, &normalize_person_result/1)}
    end
  end

  @doc """
  Verify whether an entity holds a specific license type for a given activity.
  """
  @spec verify_license(String.t(), keyword()) :: {:ok, map()} | {:error, term()}
  def verify_license(ico, opts \\ []) do
    activity = Keyword.get(opts, :activity)

    with {:ok, licenses} <- get_licenses(ico) do
      matching = Enum.filter(licenses, fn license ->
        (is_nil(activity) or String.contains?(license.activity, activity)) and
        license.status == :active
      end)

      {:ok, %{
        valid: length(matching) > 0,
        matching_licenses: matching,
        type: List.first(matching)[:type],
        status: if(length(matching) > 0, do: :active, else: :not_found)
      }}
    end
  end

  @doc """
  Get complete license history including expired and suspended licenses.
  """
  @spec license_history(String.t()) :: {:ok, list(map())} | {:error, term()}
  def license_history(ico) do
    with {:ok, licenses} <- get_licenses(ico) do
      sorted = Enum.sort_by(licenses, & &1.valid_from, {:desc, Date})
      {:ok, sorted}
    end
  end

  @doc """
  Check for any active suspensions or restrictions on an entity's licenses.
  """
  @spec check_suspensions(String.t()) :: {:ok, map()} | {:error, term()}
  def check_suspensions(ico) do
    with {:ok, licenses} <- get_licenses(ico) do
      suspended = Enum.filter(licenses, &(&1.status == :suspended))
      restricted = Enum.filter(licenses, &(&1.status == :restricted))

      {:ok, %{
        has_suspensions: length(suspended) > 0,
        suspended_licenses: suspended,
        restricted_licenses: restricted,
        total_issues: length(suspended) + length(restricted)
      }}
    end
  end
end

Entity Verification Pipeline

defmodule PrismaticPerimeter.Verification.CzechEntityVerifier do
  @moduledoc """
  Verifies Czech business entity legitimacy by cross-referencing
  ARES, Justice.cz, and RZP data. Identifies discrepancies between
  declared activities and held licenses.
  """

  @spec verify_entity(String.t()) :: {:ok, map()} | {:error, term()}
  def verify_entity(ico) do
    tasks = [
      Task.async(fn -> Ares.get_by_ico(ico) end),
      Task.async(fn -> Rzp.get_licenses(ico) end),
      Task.async(fn -> JusticeCz.get_company(ico) end),
      Task.async(fn -> Rzp.check_suspensions(ico) end)
    ]

    [ares, licenses, justice, suspensions] = Task.await_many(tasks, 15_000)

    with {:ok, ares_data} <- ares,
         {:ok, license_data} <- licenses,
         {:ok, justice_data} <- justice do
      {:ok, %{
        entity_exists: true,
        name_consistent: ares_data.nazev == justice_data.name,
        active_licenses: Enum.count(license_data, &(&1.status == :active)),
        has_required_licenses: verify_required_licenses(ares_data, license_data),
        statutory_bodies_current: check_statutory_bodies(justice_data),
        suspensions: extract_ok(suspensions),
        risk_indicators: identify_risk_indicators(ares_data, license_data, justice_data),
        verified_at: DateTime.utc_now()
      }}
    end
  end

  defp verify_required_licenses(ares, licenses) do
    required = extract_regulated_activities(ares.predmety_podnikani)
    held = Enum.map(licenses, & &1.activity)
    Enum.all?(required, &(&1 in held))
  end
end

Use Cases

Business License Verification

The primary use case for RZP is verifying that entities hold the required licenses for their claimed business activities. This is essential for due diligence, regulatory compliance, and supply chain verification.

  • Verify that a company holds required licenses for claimed activities
  • Check for suspended or revoked licenses that indicate regulatory issues
  • Identify responsible persons for regulated trades (craft, regulated, concession)
  • Validate that establishment addresses match operational locations

Due Diligence and KYC/AML Compliance

RZP is an integral component of Czech entity verification workflows, providing license-level verification that complements corporate registration data.

  • Cross-reference with ARES and Justice.cz for comprehensive entity verification
  • Verify business scope matches claimed operations and revenue sources
  • Cross-reference license data with Insolvencni rejstrik for distressed entities
  • Support KYC verification of Czech business entities for banking and financial services

Regulatory Compliance and NIS2

For organizations subject to NIS2 requirements, RZP data enables supply chain vendor verification for critical service providers.

  • KYC verification of Czech business entities across all regulated sectors
  • Supply chain vendor verification for NIS2 compliance obligations
  • Anti-money laundering checks focusing on concession trades (financial services, security)
  • Verify that healthcare, pharmaceutical, and food industry suppliers hold required licenses

Competitive Intelligence

License data reveals the authorized activity scope of competitors, enabling market analysis and competitive positioning.

  • Map competitor capabilities based on held license types
  • Track new license acquisitions that signal business expansion
  • Analyze sector-level licensing patterns for market entry planning
  • Identify entities entering regulated markets through concession approvals

Data Quality and Reliability

Quality DimensionAssessmentNotes
CompletenessHighAll issued trade licenses recorded
TimelinessGoodUpdates within days of licensing authority decisions
AccuracyAuthoritativeDirect from licensing authorities
AccessibilityModerateWeb interface; structured data via ARES
AuthorityDefinitiveMinistry of Industry and Trade is the sole authority
Historical DepthExcellentIncludes expired and historical licenses

Key data quality considerations:

  • License scope: Free trade licenses cover broad activity categories; specific activity within scope cannot always be verified
  • Responsible persons: Required only for craft, regulated, and concession trades; not all entities have named responsible persons
  • Establishment addresses: May differ from registered company address; cross-reference for complete location intelligence
  • ARES integration: ARES includes RZP data but may have slight delay compared to direct RZP access

Platform Integration

ComponentIntegrationPurpose
Entity ResolutionLicense data enrichmentAttach trade licenses to entity profiles
Due DiligenceLicense verificationVerify authorized business activities
Perimeter EASMVendor verificationSupply chain license compliance for NIS2
Risk ScoringLicense risk indicatorsSuspensions and missing licenses as risk signals
ComplianceKYC/AML pipelineRegulatory license verification for financial services

NABLA Compliance

AxiomImplementation
Signal PluralityRZP cross-referenced with ARES and Justice.cz for multi-source verification
Contradiction PreservationDiscrepancies between declared activities and held licenses preserved as risk indicators
Provenance MandatoryAll license data tagged with RZP source and extraction timestamp
Time DecayLicense validity dates tracked; expired licenses flagged with temporal context
Unknown ValidMissing responsible person data explicitly represented, not assumed
Source IndependenceRZP treated as independent licensing authority distinct from commercial register data

Performance Metrics

MetricTargetTypical
ICO License Lookup< 1s~400ms (via ARES cache)
Person Search< 2s~1.2s
License Verification< 1s~500ms
Suspension Check< 1s~400ms
Cache Hit Rate> 80%~85% (24h TTL)
Data Freshness< 3 days~1 day (licensing office update cycle)

Czech Entity Registers

  • ARES - Aggregated Czech business register (includes RZP data)
  • Justice.cz - Commercial Register with corporate filings
  • VR.cz - Unified public registry portal
  • RES - Statistical register with NACE classifications

Compliance and Verification

Platform Components


Connect & Contribute

Created by Tomáš Korcak (korczis) | Open Source under GHL