Romania Open Data Scraper - data.gov.ro API
Pricing
from $6.23 / 1,000 datasets
Romania Open Data Scraper - data.gov.ro API
Scrape all 5,227 datasets, 13,000+ files, 180 publishers and 5,753 SQL tables from data.gov.ro, with link-rot status and Five Stars openness scores.
Pricing
from $6.23 / 1,000 datasets
Rating
0.0
(0)
Developer
ParseForge
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
8 days ago
Last modified
Categories
Share
Romania Open Data Portal Scraper - data.gov.ro API
Scrape all 5,227 datasets, about 61,000 files, 180 publishing institutions and 5,753 queryable SQL tables from data.gov.ro, Romania's national open data portal. Every row carries the full catalogue record: Romanian title and description, publisher, author and maintainer with email addresses, licence, tags, user rating, and every file with its format, byte size, download URL and dates. No login, no API key, no registration. Export to CSV, JSON, Excel or XML.
Romania's portal already knows which of its files are dead and how open each one is, but it never shows you: it hides both behind a Python repr() string that no JSON parser will read. This scraper decodes it, so every row tells you whether the file still downloads and what it scores on Tim Berners-Lee's Five Stars scale. That turns a catalogue dump into a broken link checker for an entire government: across a 13,154-file sample, 7.3% of published files no longer download.
| Who uses it | What they scrape data.gov.ro for |
|---|---|
| Civic tech and transparency NGOs | Auditing which public institutions actually publish, and which publish dead links |
| Data journalists | Budget execution, procurement plans, employment and health datasets across 180 institutions |
| Open data researchers | Measuring portal quality: format mix, licence coverage, Five Stars openness, update staleness |
| Government and EU consultants | Benchmarking Romanian compliance against open data and high-value-dataset rules |
| Data engineers | Building a mirror or an ETL feed of Romanian public data with checksums and stable IDs |
What it does
- 📚 Nine collections in one Actor - datasets, files, contacts, organizations, categories, tags, licences, showcases and DataStore tables, each with its own row shape.
- 🔗 Broken link status on every file - the portal archiver's own verdict: broken flag, status text, failure reason, failure count, first failure, last success, redirect target, ETag and cached copy URL.
- ⭐ Five Stars openness scores - the openness grade per file with the reason text and the format the portal actually detected inside the file, which often differs from the declared one.
- 🗄️ Live SQL tables - 5,753 DataStore tables with real column names, PostgreSQL column types, exact row counts and preview rows read straight out of the database.
- 👤 Contacts with emails - dataset authors and maintainers with their institutional email addresses, deduplicated across the run.
- 📈 View counts and revision history - total and recent page views, plus the last 25 changes with timestamps.
- 🧮 Computed on every dataset - format list, total byte size, archived and broken file counts, best openness score, days since last update and a staleness flag.
- 🔎 17 search filters - publisher, category, format, licence, tags, author, title, description, date ranges, minimum files, minimum tags, minimum rating, open licence only, has a queryable table, has a broken link and minimum openness score.
What you can do with Romania open data
Audit an institution's data quality. Filter to one ministry, tick the archive status block, and get every file it publishes with a live/dead verdict and a failure reason. The Agenția Națională de Administrare Fiscală's 2025 performance report is filed as XML and points at a PDF the archiver rejected outright with "Invalid url scheme" - that is the sort of thing a catalogue listing never surfaces.
Build a national procurement or budget dataset. Ministerul Dezvoltării alone publishes 1,458 datasets, most of them monthly payment and procurement files. Filter by publisher and format, take the resources collection, and you get direct download URLs with checksums and byte sizes, ready to fetch.
Measure open data compliance. 5,030 of 5,227 datasets carry an open licence, but the Five Stars scores tell a harsher story: across 12,358 scored files the average is 0.99 and not one file on the portal scores above 3. Tag filters like HVD and regulamentHVD isolate the high-value datasets the EU regulation asks for.
Feed an AI agent or a search index. Every row has stable IDs, a portal URL, the Romanian description and a clean format list, so it drops straight into a vector store or a RAG pipeline without a second cleaning pass.
Why choose this scraper
| What you get | |
|---|---|
| Reaches the portal at all | data.gov.ro silently drops US traffic. Runs from a US cloud IP time out with no error and return zero rows. This Actor routes through a Romanian residential IP automatically. |
| Decodes what others skip | Archiver and openness data is stored as a Python 2 repr() string. The parser handled 13,154 of 13,154 archiver blocks and 12,358 of 12,358 openness blocks with zero failures. |
| Filters that actually filter | Every filter was measured against the unfiltered 5,227. A wrong field name silently returns 0 rows on this portal, and res_format:CSV returns 0 while csv returns 362, so formats are OR-expanded across all 64 spellings the portal uses. |
| Nine row types, one Actor | Datasets, files, contacts, publishers, categories, tags, licences, showcases and SQL tables, instead of one flat dump. |
| Pay only for what returns | Optional blocks are billed only when they actually return data. A dataset with no DataStore table is never charged for a schema lookup. |
| Free-plan preview | 10 rows on the free plan, so you can check the shape before paying. |
How it compares
No Actor on the Apify Store targets data.gov.ro. The alternatives are generic CKAN harvesters you point at any portal, and they run into two walls here. First, they run from Apify's US datacenter IPs, and this portal drops US traffic outright - measured: a direct request from the container times out, a Romanian residential IP answers in 1.4 seconds. Second, they pass CKAN's JSON straight through, so the archiver and openness fields arrive as an unparsed Python string. This Actor is roughly 3.5x their per-row price, and what that buys is a route that reaches the portal, the decoded quality data, and nine row shapes instead of one.
| This Actor | Generic CKAN harvesters | data.gov.ro website | |
|---|---|---|---|
| Price per 1,000 datasets | $7.00 | about $2.00 | free |
| Reaches data.gov.ro from Apify | Yes, Romanian residential route | No, US egress is dropped | n/a |
| Broken link status per file | Yes, decoded | Raw Python string | Not shown |
| Five Stars openness score | Yes, decoded | Raw Python string | Not shown |
| DataStore column types and row counts | Yes | Sometimes | Preview only |
| Contacts with emails | Yes, deduplicated | No | One dataset at a time |
| Row types | 9 | 1 | n/a |
What a dataset looks like
One real row from a verified run, unedited:
{"datasetId": "76e2d469-b04a-40ca-893e-898165b426f4","datasetName": "raport-de-performanta-anaf-2025","title": "Raport de performanță ANAF 2025","datasetUrl": "https://data.gov.ro/dataset/raport-de-performanta-anaf-2025","notes": "Principalele realizări, colectarea veniturilor bugetare, îmbunătățirea serviciilor oferite, soluții digitale integrate, prevenirea si combaterea evaziunii fiscale, eficiență și transparență.","organizationName": "agentia-nationala-de-administrare-fiscala","organizationTitle": "Agenția Națională de Administrare Fiscală","organizationUrl": "https://data.gov.ro/organization/agentia-nationala-de-administrare-fiscala","author": "Ionel Onofrei","authorEmail": "ionel.onofrei@anaf.ro","maintainer": "IONEL VALERICA ONOFREI","maintainerEmail": "Not Disclosed","licenseId": "CC-BY-4.0","licenseTitle": "Creative Commons Attribution 4.0","licenseUrl": "https://creativecommons.org/licenses/by/4.0/","isOpenLicence": "Yes","version": "N/A","sourceUrl": "N/A","rating": 2.85,"ratingsCount": 153,"numResources": 1,"numTags": 1,"tags": ["ANAF"],"categories": [],"formats": ["XML"],"totalSizeBytes": 0,"datastoreTables": 0,"archivedResources": 1,"brokenResources": 1,"hasBrokenLink": "Yes","opennessScoreMax": null,"metadataCreated": "2026-07-23T10:24:30.584220","metadataModified": "2026-07-23T10:32:26.365092","resources": [{"resourceId": "e840f506-e1e6-4861-9195-424feb8d0b0a","resourceName": "RAPORT_PERFORMANTA_2025","resourceDescription": "Principalele realizări, colectarea veniturilor bugetare, îmbunătățirea serviciilor oferite, soluții digitale integrate, prevenirea si combaterea evaziunii fiscale, eficiență și transparență.","format": "XML","formatRaw": "XML","url": "https://static.anaf.ro/static/10/Anaf/Informatii_R/RAPORT_PERFORMANTA_2025_V6.pdf","portalDownloadUrl": "https://static.anaf.ro/static/10/Anaf/Informatii_R/RAPORT_PERFORMANTA_2025_V6.pdf","resourceUrl": "https://data.gov.ro/dataset/raport-de-performanta-anaf-2025/resource/e840f506-e1e6-4861-9195-424feb8d0b0a","mimeType": "application/pdf","sizeBytes": null,"contentHash": "N/A","position": 0,"resourceType": "N/A","urlType": "N/A","hasDatastore": "No","resourceCreated": "2026-07-23T10:25:49.749326","resourceLastModified": "N/A"}],"daysSinceModified": 35,"isStale": "No","extras": [],"archiveStatus": [{"resourceId": "e840f506-e1e6-4861-9195-424feb8d0b0a","resourceName": "RAPORT_PERFORMANTA_2025","isBroken": "Yes","status": "URL invalid","reason": "Invalid url scheme. Please use one of: ftp http https","failureCount": 1,"firstFailure": "2026-07-23T10:25:59.635265","lastSuccess": "N/A","archivedAt": "2026-07-23T10:25:59.635265","archivedSizeBytes": 0,"contentHash": "N/A","etag": "N/A","redirectedTo": "N/A","cachedCopyUrl": "N/A"}],"scrapedAt": "2026-08-27T19:31:00.509Z"}
The openness block is absent from this row because the portal never scored that file, and a block that returns nothing is never billed.
Configure the run
Pick a collection under What to scrape, add filters, tick the optional blocks you want, set Max Items, and start. Filters combine with AND; multiple values inside one filter combine with OR. The directory collections (organizations, categories, tags, licences, showcases, DataStore tables) ignore the search filters except the publisher one.
Every dataset updated since the start of 2026, newest first:
{"dataset": "datasets","sortBy": "modified-desc","modifiedAfter": "2026-01-01","maxItems": 500}
Every broken file published by the three biggest ministries, with the archiver's reason and a live re-check:
{"dataset": "resources","organization": ["mdrap", "ms", "mfp"],"onlyBrokenLinks": true,"includeArchiveStatus": true,"includeLinkCheck": true,"maxItems": 1000}
Every queryable SQL table with its real column types and three sample rows:
{"dataset": "datastore-tables","includeDatastoreSchema": true,"includeDatastorePreview": true,"datastorePreviewRows": 3,"maxItems": 200}
Pricing
Pay per event. You are charged for the rows you receive, plus a small fixed cost per catalogue page scanned, plus the Actor start. Optional blocks are billed only when they actually return data.
| Event | Price |
|---|---|
| Dataset row | $0.007 |
| File row | $0.005 |
| Contact row | $0.005 |
| Organization, showcase, DataStore table row | $0.004 |
| Category, licence row | $0.002 |
| Tag row | $0.001 |
| Catalogue page scanned | $0.004 |
| Archive status, openness score, publisher profile | $0.002 |
| View statistics, revision history, file preview widgets | $0.003 |
| DataStore schema | $0.004 |
| DataStore preview rows, live link verification | $0.005 |
| Actor start | $0.02 |
What a plain dataset run costs, with no optional blocks:
| Datasets | Rows | Pages scanned | Start | Total |
|---|---|---|---|---|
| 100 | $0.70 | $0.008 | $0.02 | $0.73 |
| 1,000 | $7.00 | $0.04 | $0.02 | $7.06 |
| 5,227 (the whole portal) | $36.59 | $0.212 | $0.02 | $36.82 |
Volume discounts apply automatically on Bronze, Silver and Gold plans.
Free users
Free-plan runs return up to 10 rows as a preview. Upgrade your Apify plan to collect up to 1,000,000 rows per run.
Run it
- Create a free Apify account with $5 in credit.
- Open the Romania Open Data Portal Scraper.
- Pick a collection under What to scrape, add filters and optional blocks, set Max Items, and click Start.
- Export the results as CSV, Excel, JSON, or XML from the Dataset tab.
Run it programmatically through the Apify API or the ApifyClient for JavaScript and Python.
Use with AI agents (MCP)
Give an AI agent live access to Romania's open data portal through the Model Context Protocol. Add the Actor to Claude, Cursor, or any MCP client:
$claude mcp add --transport http apify "https://mcp.apify.com?tools=parseforge/data-gov-ro-romania-open-data-scraper"
Then prompt it in plain language:
- "Which Romanian ministries publish the most datasets, and how many of their files are broken?"
- "Find Romanian open datasets about budget execution that have a queryable table, and show me the column names."
- "List every data.gov.ro dataset updated this year that still has a dead download link, with the publisher's email."
Copy this into ChatGPT, Claude, or Cursor to start:
Use the Apify Actor "parseforge/data-gov-ro-romania-open-data-scraper" to read Romania's national open data portal at data.gov.ro. Input: { "dataset": "<datasets|resources|contacts|organizations|categories|tags|licenses|showcases|datastore-tables>", "searchQuery": "<text>", "organization": ["<slug>"], "resourceFormat": ["CSV"], "maxItems": <n> }. It returns title, Romanian description, publisher, author and maintainer emails, licence, tags, rating, and every file with its format, size, download URL, broken-link status and Five Stars openness score. Call it with the ApifyClient and my APIFY_TOKEN.
Troubleshooting
No results at all? You probably combined filters that do not overlap. A field the portal does not know silently returns 0 rows rather than an error, so remove filters one at a time. Categories are the usual culprit: only 10 of the 14 have any datasets, and health has just one.
Fewer rows than the match count in the log? The log reports what the portal's search index matched. Three filters are applied afterwards because the index does not expose them: has a queryable table, has a broken link, and minimum openness score. Those trim the result after the count is printed.
A format filter returns nothing you expected? The portal stores 64 spellings for about 20 formats, including xml., .xlsx and zip, shp. The dropdown expands each choice across every spelling, so use it rather than typing a format by hand.
An openness score or archive block is missing on some rows? The portal has not scored or archived that file. 12,358 of 13,337 sampled files carry an openness score and 13,154 carry archiver data; the rest genuinely have none, and you are not charged for the missing block.
The run is slower than you expected? data.gov.ro drops non-European traffic, so every request goes through a Romanian residential IP. Plain dataset rows run at about 8.7 rows per second; ticking optional blocks that need a request per dataset, such as view statistics or revision history, slows it to roughly one row per second.
FAQ
| Question | Answer |
|---|---|
| Do I need an API key or a data.gov.ro account? | No. Everything the Actor reads is public and anonymous. |
| How many datasets are on data.gov.ro? | 5,227, from 180 institutions of which 130 have published at least one. |
| Can I get the whole portal in one run? | Yes. 5,227 datasets is about 10 minutes at the default 1,800 second timeout. |
| What does the broken link data mean? | It is the portal's own archiver verdict, refreshed by data.gov.ro itself, not our guess. Tick Verify file links live to re-check the URLs in real time as well. |
| How bad is the link rot? | 7.3% of archived files were broken across a 13,154-file sample. The most common cause is a download error, followed by a system error during archival. |
| What is the Five Stars openness score? | Tim Berners-Lee's 0 to 5 open data scale, as scored by the portal. On data.gov.ro the average is 0.99 and nothing scores above 3, because most files are Excel rather than open machine-readable formats. |
| Which formats dominate? | XML and Excel. Across a 923-dataset sample: XML 7,514 files, XLS 2,503, XLSX 1,793, CSV only 398. |
| Can I read the actual data inside the files? | For the 5,753 files loaded into the portal's SQL DataStore, yes: tick Include DataStore preview rows for real rows and column types. Other files come with a direct download URL. |
| Is the text in Romanian? | Yes. Titles, descriptions and institution names are Romanian, exactly as published. Slugs and field names are ASCII. |
| Can I filter by date? | Yes, on both the creation and the last-update date. 424 datasets were updated in 2026 and 339 were created in 2026. |
| Why is it more expensive than a generic CKAN scraper? | Because a generic scraper cannot reach this portal from Apify at all, and because it returns the quality fields as an unparsed Python string. |
Related actors
- Italy Open Data Scraper - dati.gov.it - 65,960 datasets from Italy's national CKAN catalogue.
- Uruguay Open Data Scraper - 2,702 datasets with DataStore tables and link checks.
- GovData Germany Scraper - the German federal open data portal over CKAN.
- EU Funding & Tenders Portal Scraper - EU grants and calls, including Romanian beneficiaries.
- TED Europa Tenders Scraper - EU public procurement notices across all member states.
Browse the full ParseForge collection for more scrapers.
Need help? Email parseforge@protonmail.com with your run ID, your input, and what you expected.
Disclaimer: this is an unofficial scraper, not affiliated with or endorsed by data.gov.ro, the Government of Romania or any Romanian public institution. It collects only data that data.gov.ro publishes openly and anonymously, under the licences the portal states on each dataset. Author and maintainer contact details are published by the institutions themselves as the official point of contact for each dataset; if you process them, do so in line with GDPR, CCPA and PIPL, and use them only for the purpose the portal publishes them for.
