Romania Open Data Scraper - data.gov.ro API avatar

Romania Open Data Scraper - data.gov.ro API

Pricing

from $6.23 / 1,000 datasets

Go to Apify Store
Romania Open Data Scraper - data.gov.ro API

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

ParseForge

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

8 days ago

Last modified

Categories

Share

ParseForge

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 itWhat they scrape data.gov.ro for
Civic tech and transparency NGOsAuditing which public institutions actually publish, and which publish dead links
Data journalistsBudget execution, procurement plans, employment and health datasets across 180 institutions
Open data researchersMeasuring portal quality: format mix, licence coverage, Five Stars openness, update staleness
Government and EU consultantsBenchmarking Romanian compliance against open data and high-value-dataset rules
Data engineersBuilding 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 alldata.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 skipArchiver 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 filterEvery 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 ActorDatasets, files, contacts, publishers, categories, tags, licences, showcases and SQL tables, instead of one flat dump.
Pay only for what returnsOptional blocks are billed only when they actually return data. A dataset with no DataStore table is never charged for a schema lookup.
Free-plan preview10 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 ActorGeneric CKAN harvestersdata.gov.ro website
Price per 1,000 datasets$7.00about $2.00free
Reaches data.gov.ro from ApifyYes, Romanian residential routeNo, US egress is droppedn/a
Broken link status per fileYes, decodedRaw Python stringNot shown
Five Stars openness scoreYes, decodedRaw Python stringNot shown
DataStore column types and row countsYesSometimesPreview only
Contacts with emailsYes, deduplicatedNoOne dataset at a time
Row types91n/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.

EventPrice
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:

DatasetsRowsPages scannedStartTotal
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

  1. Create a free Apify account with $5 in credit.
  2. Open the Romania Open Data Portal Scraper.
  3. Pick a collection under What to scrape, add filters and optional blocks, set Max Items, and click Start.
  4. 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

QuestionAnswer
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.

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.