# Romania open data catalogue (data.gov.ro) > The full catalogue of data.gov.ro, Romania's national open data portal: every published dataset, every downloadable file with its direct URL, and every publishing institution, refreshed daily. Metadata is standardised on the way in — licenses mapped to canonical identifiers, file formats normalised and bucketed into families, Romanian titles given accent-folded search columns — so the whole portal is searchable and joinable with plain SQL, and any tabular file it lists is one read_csv_auto() away. - Dataset id: `data-gov-ro` - Update cadence: daily - Upstream source: https://data.gov.ro/ - Tags: romania, open-data, government, catalogue, ckan, metadata - Current version: ingest `01M0YSBF6PDT7M5K34WHS2V01Z`, snapshot 2026-08-26, generated 2026-08-26T10:23:51.732Z ## Licence and attribution - Licence: Creative Commons Attribution 4.0 International (`CC-BY-4.0`) - Licence text: https://data.gov.ro/pages/licence - Required attribution: Catalogue metadata from data.gov.ro, the Romanian Government open data portal. - Notes: This dataset republishes catalogue METADATA only (titles, descriptions, URLs, formats, license ids) — none of the files the catalogue points at. Each underlying dataset carries its own license, recorded per row in license_id (verbatim) and license_std (standardised): mostly CC-BY-4.0 and OGL-ROU-1.0 (both attribution licenses requiring credit to the publishing institution named in the organizations table), but not-specified occurs and at least one dataset is CC-BY-NC-4.0 (non-commercial). Anyone reusing the underlying files must check license_std for that dataset first — this catalogue's own license does not extend to them. Reproduce the attribution line verbatim anywhere you republish this data. ## Manifest - Start here for how this directory works: https://data.bunnytech.app/llms.txt - This dataset: https://data-directory.fsn1.your-objectstorage.com/public/data-gov-ro/manifest.json - All datasets: https://data-directory.fsn1.your-objectstorage.com/public/index.json - Human page: https://data.bunnytech.app/datasets/data-gov-ro The manifest is the contract: file URLs, row counts, column types, min/max statistics and example queries all live there. Re-read it to discover a new version. ## Fastest path — Parquet exports Immutable, physically sorted snapshot exports. No catalog fetch, best row-group pruning, safe to cache forever. Register one view per table: ```sql INSTALL httpfs; LOAD httpfs; CREATE OR REPLACE VIEW datasets AS SELECT * FROM read_parquet('https://data-directory.fsn1.your-objectstorage.com/public/data-gov-ro/v/01M0YSBF6PDT7M5K34WHS2V01Z/datasets.parquet'); CREATE OR REPLACE VIEW resources AS SELECT * FROM read_parquet('https://data-directory.fsn1.your-objectstorage.com/public/data-gov-ro/v/01M0YSBF6PDT7M5K34WHS2V01Z/resources.parquet'); CREATE OR REPLACE VIEW organizations AS SELECT * FROM read_parquet('https://data-directory.fsn1.your-objectstorage.com/public/data-gov-ro/v/01M0YSBF6PDT7M5K34WHS2V01Z/organizations.parquet'); ``` Example queries: -- Search the catalogue for a topic, diacritics-insensitively: Query title_lc, never lower(title): the folded column matches "sanatate" against "sănătate" and is the sort column, so a prefix predicate prunes. ```sql ATTACH IF NOT EXISTS 'ducklake:https://data-directory.fsn1.your-objectstorage.com/catalog/catalog.ducklake' AS "datadirectory" (READ_ONLY); SELECT d.title, o.title AS institution, d.license_std, d.resource_count, d.dataset_url FROM datadirectory.data_gov_ro.datasets d LEFT JOIN datadirectory.data_gov_ro.organizations o ON o.organization_id = d.organization_id WHERE d.title_lc LIKE '%sanatate%' ORDER BY d.metadata_modified DESC NULLS LAST LIMIT 25 ``` -- Files DuckDB can load directly, for one dataset: format_group = 'tabular' is the standardised filter; download_url feeds read_csv_auto / st_read straight from the portal. ```sql ATTACH IF NOT EXISTS 'ducklake:https://data-directory.fsn1.your-objectstorage.com/catalog/catalog.ducklake' AS "datadirectory" (READ_ONLY); SELECT r.name, r.format, r.size_bytes, r.download_url FROM datadirectory.data_gov_ro.resources r JOIN datadirectory.data_gov_ro.datasets d ON d.dataset_id = r.dataset_id WHERE d.name = 'siruta' AND r.format_group = 'tabular' ORDER BY r.resource_id ``` ## Live lake — DuckLake catalog with time travel Attach the published catalog read-only over plain https. This works in native DuckDB AND in duckdb-wasm in the browser — the reader catalog resolves its data files through public https URLs, so no credentials and no backend are involved. ```sql INSTALL ducklake; LOAD ducklake; ATTACH 'ducklake:https://data-directory.fsn1.your-objectstorage.com/catalog/data-gov-ro/catalog.ducklake' AS data_gov_ro (READ_ONLY); SELECT * FROM data_gov_ro.main.datasets LIMIT 5; USE data_gov_ro; ``` - Latest catalog: https://data-directory.fsn1.your-objectstorage.com/catalog/data-gov-ro/catalog.ducklake - This exact version: https://data-directory.fsn1.your-objectstorage.com/catalog/data-gov-ro/v/01M0YSBF6PDT7M5K34WHS2V01Z/catalog.ducklake (sha256 929935accedb206644751c8e25d5073ef8dc208a2ef1648af480f9dd66804c88) - Written by DuckDB v1.5.5 - Time travel: this ingest is snapshot 4 — e.g. `SELECT * FROM data_gov_ro.datasets AT (VERSION => 4)` ## Wholesale — S3 access For bulk downloads, read the bucket prefix directly over S3 with httpfs: ```sql INSTALL httpfs; LOAD httpfs; CREATE SECRET hetzner ( TYPE s3, ENDPOINT 'fsn1.your-objectstorage.com', URL_STYLE 'path', KEY_ID '', SECRET '' ); SELECT * FROM read_parquet('s3://data-directory/public/data-gov-ro/v/01M0YSBF6PDT7M5K34WHS2V01Z/**/*.parquet'); ``` ## Schema ### datasets One row per dataset (CKAN "package") published on data.gov.ro, carrying the most recent metadata the portal reports for it. A dataset is a titled collection of one or more downloadable files (see the resources table) owned by one public institution (see organizations). Rows are updated in place as institutions edit their metadata; first_seen_date / last_seen_date give the window over which this catalogue observed the dataset, so newly published datasets are the rows with a recent first_seen_date. - 5,226 rows · 482 KB · write mode `upsert` - Physically sorted by: `title_lc`, `dataset_id` - Primary key: `dataset_id` - Text search columns: `title` - Files: 1 - https://data-directory.fsn1.your-objectstorage.com/public/data-gov-ro/v/01M0YSBF6PDT7M5K34WHS2V01Z/datasets.parquet (5,226 rows) Columns: - `dataset_id` VARCHAR NOT NULL — CKAN package id — a UUID for datasets created since ~2015, a legacy slug for the oldest ones. Stable across metadata edits; the primary key, and what resources.dataset_id joins to. (range: "00138538-d1f2-4209-a14c-e4c12b6792f4" … "ffe7edc5-8f06-461e-8e74-c06fc9350b43") (~5845 distinct) - `name` VARCHAR NOT NULL — URL slug of the dataset, unique on the portal. dataset_url is derived from it. - `title` VARCHAR NOT NULL — Display title as written by the publishing institution, usually in Romanian. Falls back to the slug when the portal reports no title. - `title_lc` VARCHAR NOT NULL — title, lowercased and accent-folded (ș/ş/s all match), for case- and accent-insensitive search. Query this, not lower(title) — a function on a column cannot use parquet statistics, and Romanian titles mix cedilla and comma diacritics inconsistently. (range: "- lista organisme private autorizate romane autorizate de anpdca" … "– pni anghel saligny – stadiu implementare – 30 iunie 2023") - `description` TEXT — Free-text description ("notes") as written by the publisher, usually in Romanian. Quality varies from careful documentation to empty. - `organization_id` VARCHAR — Id of the publishing institution; joins to organizations.organization_id. Null only for the rare orphaned dataset the portal reports without an owner. - `organization_name` VARCHAR — URL slug of the publishing institution, denormalised for filtering without a join. - `license_id` VARCHAR — The portal's raw license id, verbatim. Messy by inheritance: 'uk-ogl' is stock CKAN's id that data.gov.ro reuses for the Romanian Open Government License, and null / 'notspecified' both occur. Prefer license_std for filtering. - `license_std` VARCHAR NOT NULL — Standardised license identifier, derived: CC-BY-4.0, OGL-ROU-1.0, ODC-PDDL-1.0, CC0-1.0, CC-BY-NC-4.0, ODbL-1.0 …; not-specified when the publisher chose none, other: for anything unmapped. 'uk-ogl' maps to OGL-ROU-1.0 because the portal itself titles it exactly that (its license page: datasets published before the 2020 CC-BY-4.0 recommendation are under Licența pentru o Guvernare Deschisă OGL-ROU 1.0 and remain so). Check this column before reusing the underlying files. - `tags` JSON — Tag names as a JSON string array, e.g. ["CAEN", "NACE"]. Null when the publisher set none — most datasets. Free vocabulary, not a taxonomy. - `groups` JSON — Portal category (CKAN group) names as a JSON string array. Null when the dataset is in no category — the common case on this portal. - `resource_count` INTEGER NOT NULL [resources] — Number of usable resource rows this dataset contributes to the resources table. - `metadata_created` TIMESTAMP — When the dataset was created on the portal, as reported — a naive local-time wall clock with no timezone, stored verbatim. Null on the oldest datasets, migrated in bulk in 2013 before the portal kept creation times. - `metadata_modified` TIMESTAMP — When the dataset metadata was last edited, as reported by the portal (naive local-time wall clock, stored verbatim). The freshness signal: recently maintained datasets have a recent value. - `dataset_url` VARCHAR NOT NULL — Human-readable dataset page on the portal. - `first_seen_date` DATE NOT NULL — First run day (UTC) on which this catalogue saw the dataset. Maintained by the upsert loader — never overwritten, only widened. A recent value means a newly published dataset. - `last_seen_date` DATE NOT NULL — Most recent run day (UTC) on which the portal still listed the dataset. A stale value means the dataset was removed or hidden upstream; rows are never deleted here. ### resources One row per downloadable file or endpoint ("resource") attached to a dataset on data.gov.ro. This is the actionable table: download_url is a direct link DuckDB can often read in place (e.g. read_csv_auto(download_url) for format = 'CSV'). Filter format_group = 'tabular' for files that load as tables. Rows update in place as institutions replace files; join datasets via dataset_id for the title, license and publisher. - 39.5K rows · 3.2 MB · write mode `upsert` - Physically sorted by: `dataset_id`, `resource_id` - Primary key: `resource_id` - Text search columns: `name` - Files: 1 - https://data-directory.fsn1.your-objectstorage.com/public/data-gov-ro/v/01M0YSBF6PDT7M5K34WHS2V01Z/resources.parquet (39.5K rows) Columns: - `resource_id` VARCHAR NOT NULL — CKAN resource id (UUID). Stable across file replacements; the primary key. (range: "0000b018-ad09-4632-b069-3b54822e23f4" … "ffff0368-2a82-49a4-82f2-d3a5654656f0") (~31360 distinct) - `dataset_id` VARCHAR NOT NULL — Id of the dataset this file belongs to; joins to datasets.dataset_id. (range: "00138538-d1f2-4209-a14c-e4c12b6792f4" … "ffe7edc5-8f06-461e-8e74-c06fc9350b43") - `name` VARCHAR — File name or resource title as the publisher wrote it. - `name_lc` VARCHAR — name, lowercased and accent-folded, for case- and accent-insensitive search. Query this, not lower(name). - `description` TEXT — Free-text description of the file, usually Romanian; often empty. - `format` VARCHAR — File format, standardised from the portal's free text: trimmed, leading dot stripped, uppercased — 'csv', '.csv' and 'CSV' all become 'CSV'. Publisher-declared, so it can still lie about the bytes behind the URL. - `format_group` VARCHAR — Format bucketed into a standard family, derived from format: tabular (CSV/XLSX/ODS/PARQUET…), structured (JSON/XML/RDF…), geospatial (GeoJSON/SHP/KML…), document (PDF/DOC/HTML…), archive (ZIP/RAR…), image, api, or other. The one-predicate answer to "which files can I actually load as data". - `mimetype` VARCHAR — MIME type as recorded by the portal. - `size_bytes` BIGINT [bytes] — File size in bytes as recorded by the portal. Null for external links and datastore resources; BIGINT because bulk uploads exceed 2 GiB. - `download_url` VARCHAR — Direct download URL. For uploaded files it is served by the portal itself; for linked resources it points at the institution's own server and can rot. This is the column that turns the catalogue into data: pass it to read_csv_auto / read_parquet / read_json_auto in DuckDB. - `created` TIMESTAMP — When the resource was added, as reported by the portal (naive local-time wall clock, stored verbatim). - `last_modified` TIMESTAMP — When the file behind the resource last changed, as reported (naive local-time wall clock, stored verbatim). Null when the portal never recorded a modification. - `datastore_active` BOOLEAN — True when the file is also loaded into the portal's own DataStore (queryable via its datastore_search API), not just stored as a blob. - `first_seen_date` DATE NOT NULL — First run day (UTC) on which this catalogue saw the resource. Maintained by the upsert loader — never overwritten, only widened. - `last_seen_date` DATE NOT NULL — Most recent run day (UTC) on which the portal still listed the resource. A stale value means the file was removed or replaced upstream. ### organizations One row per publishing institution ("organization") on data.gov.ro — ministries, agencies, county councils, city halls. dataset_count makes it the leaderboard of who actually publishes; join from datasets.organization_id for everything else. Rows update in place; institutions are effectively never deleted. - 130 rows · 16 KB · write mode `upsert` - Physically sorted by: `title_lc`, `organization_id` - Primary key: `organization_id` - Text search columns: `title` - Files: 1 - https://data-directory.fsn1.your-objectstorage.com/public/data-gov-ro/v/01M0YSBF6PDT7M5K34WHS2V01Z/organizations.parquet (130 rows) Columns: - `organization_id` VARCHAR NOT NULL — CKAN organization id (UUID). Stable; the primary key. (range: "001b671a-b2fe-4a10-9036-ed1183699bcd" … "fe2a426f-a95a-4a5b-9115-6754f9abfb2c") (~137 distinct) - `name` VARCHAR — URL slug of the institution on the portal. organization_url is derived from it. - `title` VARCHAR NOT NULL — Institution name as displayed on the portal, in Romanian. Falls back to the slug, then the id, when the portal reports no title. - `title_lc` VARCHAR NOT NULL — title, lowercased and accent-folded, for case- and accent-insensitive search. Query this, not lower(title). (range: "administratia fluviala a dunarii de jos galati" … "unitatea executiva pentru finantarea invatamantului superior, cercetarii, dezvoltarii si inovarii") - `description` TEXT — Self-description of the institution, usually Romanian; often empty. - `image_url` VARCHAR — Logo URL as configured on the portal. - `created` TIMESTAMP — When the institution joined the portal, as reported (naive local-time wall clock, stored verbatim). - `dataset_count` INTEGER NOT NULL [datasets] — Number of active datasets this institution had in the most recent catalogue snapshot. Recomputed every run, so it tracks the portal, not our history. - `organization_url` VARCHAR — Institution page on the portal, listing all its datasets. - `first_seen_date` DATE NOT NULL — First run day (UTC) on which this catalogue saw the institution. Maintained by the upsert loader. - `last_seen_date` DATE NOT NULL — Most recent run day (UTC) on which the institution still had at least one dataset listed. ## Performance notes - There are no indexes in a lakehouse. The physical sort order plus Parquet row-group min/max statistics ARE the index. Predicates on the leading sort columns prune whole row groups; everything else is a full column scan. - `datasets` prunes on `title_lc` → `dataset_id`. - `resources` prunes on `dataset_id` → `resource_id`. - `organizations` prunes on `title_lc` → `organization_id`. - `ILIKE '%needle%'` cannot prune: it decompresses that whole column. Prefer prefix predicates on the lowercased search companion columns where they exist. - Every file URL under `/v//` is immutable. Cache it as aggressively as you like. - Files are never rewritten in place — a new ingest writes a new version path. Re-read the manifest to pick up updates rather than polling the file URLs. - Pull only the columns you need. Parquet is columnar and the reader range-GETs what it reads. ## Do not - Do not scrape https://data.bunnytech.app HTML. Every number on those pages comes from the manifest above. - Do not hit the upstream source (https://data.gov.ro/) in bulk. This mirror exists so you do not have to. - Do not read DuckLake internal data files with a plain Parquet reader. They come with positional delete files, and ignoring those silently returns deleted rows. Use the ducklake extension, or use the published exports above. - Do not republish without the attribution line, and do not imply endorsement.