ParseForge Scrapers

Luxembourg Open Data Scraper

parseforge/luxembourg-open-data-scraper

Developer toolsOther

Scrapes dataset metadata from data.public.lu by search query, tag, or organization. Returns each dataset as a flat row with title, description, publisher, update date, and resource links.

Run this scraper See the API call
Total users
2
Monthly active
1
Total runs
85
Bookmarked
0
Rating
Not rated yet
Last modified
12 days ago

Overview

ParseForge

Luxembourg Open Data Scraper

Scrape Luxembourg open data datasets by search term, tag, or organization, up to a million per run. Every dataset comes with its title, description, publisher, update date, and resource links. No API key required. Export to CSV, JSON, Excel, or XML.

Luxembourg publishes thousands of public datasets on data.public.lu, but browsing the portal page by page is slow and manual filtering is limited. This Actor reads the platform's public API directly, letting you search by keyword, tag, or organization and collect matching dataset metadata in one structured table. It is built for analysts, journalists, and developers who need a clean export of what data exists on a topic.

Who uses it What they scrape data.public.lu for
Data analysts Discover which transport or budget datasets the government has published this quarter
Journalists Find environment and health datasets for an investigation on Luxembourg's public spending
Open data advocates Monitor new dataset releases across all Luxembourg public bodies in one export
Developers Build an automated catalog of Luxembourg open data resources for a civic app

What it does

This Actor collects dataset metadata from data.public.lu by search query, tag, or organization, and returns each dataset as a flat row.

  • 🔍 Full-text search: find datasets by keyword across titles and descriptions, e.g. "transport", "budget", "environnement".
  • 🏷️ Tag filter: narrow results to a specific tag slug like "mobility" or "santé".
  • 🏛️ Organization filter: limit datasets to one publisher by its slug or 24-character identifier.
  • 📄 Paginated collection: control page size up to 100 and collect up to 1,000,000 datasets per run.

Results export to CSV, JSON, Excel, or XML, or straight from the API.

What you can do with data.public.lu data

🚌 Monitor transport data releases.

A mobility analyst searches for "transport" and the tag "mobility" each month to see which new GTFS or traffic datasets the Administration des transports published.

📊 Audit public budget transparency.

A civic tech group collects all datasets tagged "budget" across every Luxembourg ministry to check which financial data is available and which is missing.

🌱 Track environment and climate datasets.

An environmental researcher filters by the tag "environnement" and exports the full list of air quality, water, and waste datasets for a policy report.

🏥 Find health and social datasets.

A public health journalist searches for "santé" and collects dataset metadata from the Ministry of Health to identify data sources for a story on hospital capacity.

Why choose this scraper

What you get
No API key The data.public.lu API is open; no registration or token is needed
Fixed schema Every dataset row has the same fields: title, description, organization, update date, and resource links
Large exports Collect up to a million datasets in one run and export to CSV, JSON, Excel, or XML
Multilingual search Search in French, German, or English; the platform indexes all three

How it compares

No other Store actor targets data.public.lu the same way, so the honest comparison is with the alternatives teams actually weigh.

Luxembourg Open Data Scraper Build it in-house By hand
Setup Run it now, zero config Days of engineering None, but hours per pull
When data.public.lu changes Maintained for you You fix it You re-learn the page
Proxies, retries, anti-bot Built in Your problem Browser only
Output Fixed JSON schema, CSV/Excel export Whatever you build Copy-paste
Cost Pay per result Engineering time Analyst hours

Configure the run

Drive the Actor with a search query, a tag, an organization slug, or leave all filters empty to list the most recent datasets. Filters are applied at the API level so only matching datasets count toward your limit. The Input tab lists every parameter.

A first run with the defaults:

{
  "pageSize": 20,
  "maxItems": 10
}

A larger pull:

{
  "pageSize": 20,
  "maxItems": 200
}

Pricing

Pay-per-result: $0.006 per result collected. You pay only for the results written to your dataset.

Results collected Approximate cost
100 results $0.60
1,000 results $6.00
10,000 results $60.00

New Apify accounts start with $5 in free credit.

Free users

Free-plan runs return up to 10 results as a preview. Upgrade your Apify plan to collect up to 1,000,000 results per run.

Run it

  1. Create a free Apify account with $5 in credit.
  2. Open the Luxembourg Open Data Scraper.
  3. Set your inputs and any filters, then click Start.
  4. Export the results as CSV, Excel, JSON, or XML from the Dataset tab.

Run it programmatically through the Apify API (run-sync-get-dataset-items) or the ApifyClient for JavaScript and Python.

Use with AI agents (MCP)

Give an AI agent live access to data.public.lu 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/luxembourg-open-data-scraper"

Then prompt it in plain language to run the scraper and read back the results.

Troubleshooting

Why am I getting no results?

Check that your search query, tag, or organization slug exactly matches a value on data.public.lu. Try leaving all filters empty first to confirm the API is reachable, then add filters one by one.

The Actor returns fewer datasets than my maxItems setting.

The platform only returns datasets that match your filters. If fewer datasets exist for that query, tag, or organization, the Actor will stop early. Try broadening your search or removing a filter.

I get an error about an invalid organization.

Make sure you are using the exact slug from the organization's page URL on data.public.lu, or the 24-character ID. Slugs are case-sensitive.

The run is slow with a high maxItems.

The Actor respects the platform's API rate limits. Increase the pageSize to fetch more datasets per request and reduce the total number of API calls.

Some datasets have no resource links.

Some datasets on data.public.lu are metadata-only or link to external sites. The Actor returns whatever the API provides; missing resources are not an error.

FAQ

Question Answer
Do I need an API key or a data.public.lu account? No. The Actor reads the public API of data.public.lu, which is open and requires no authentication.
What exactly does the Actor return? It returns metadata for each dataset: title, description, the publishing organization, the last update date, and a list of attached resources with their URLs and formats.
Can I download the actual data files? The Actor collects the resource links (CSV, JSON, XLSX, etc.) for each dataset. You can use those URLs to download the files separately or feed them into another Actor.
How do I search in French or German? Enter your search term in the query field in French (e.g. "transports"), German ("Verkehr"), or English. The platform's full-text index covers all three languages.
What is a tag slug and where do I find it? A tag slug is the short identifier used in the URL on data.public.lu, like "mobility" or "environnement". Open a tag page on the portal and copy the last part of the URL.
How do I filter by a specific ministry or organization? Use the organization field with the slug (e.g. "cfl-mobility") or the 24-character ID. The Actor resolves slugs automatically.
What happens if I leave all filters empty? The Actor returns the most recently created or updated datasets on the platform, up to your maxItems limit.
How many datasets can I collect in one run? You can set maxItems up to 1,000,000. The platform itself has thousands of datasets, so a high limit will collect everything available.
Can I schedule this Actor to run weekly? Yes. Set up a schedule in Apify with your chosen filters, and the Actor will collect any new or updated datasets that match.
What export formats are supported? You can export the results to CSV, JSON, Excel, or XML from the Apify dataset tab.

Related actors

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 Actor is unofficial and is not affiliated with, endorsed by, or sponsored by Government of the Grand Duchy of Luxembourg. It collects only publicly available data. You are responsible for using the collected data in compliance with the source's terms of service and applicable data-protection laws, including GDPR, CCPA, and PIPL. Do not use it to collect personal data unlawfully.

Input

FieldTypeWhat it doesDefault
query string Optional full text search across dataset titles and descriptions (e.g. "transport", "budget", "environment"). Leave empty to list the most recent datasets. not set
tag string Optional tag slug to filter datasets (e.g. "transport", "mobility", "environnement"). Use the exact tag slug shown on data.public.lu. not set
organization string Optional organization. Accepts an organization slug (e.g. "cfl-mobility") or its 24 character identifier. Slugs are resolved automatically. not set
pageSize integer Number of datasets requested per API page. Larger values fetch more datasets per request. 20
maxItems integer Maximum number of datasets to collect per run. 10

Pricing

from $4.00 per 1,000 results

Charged forWhat it isPrice each
result Single result in the default dataset. $0.004 to $0.006

Tiered: the lower figure is the price on a higher Apify plan. Billing and the free credit live on Apify.

API

One POST returns the dataset directly. Same shape for every scraper in the library, so swapping the slug is the only change.

POST · run and get results
curl -X POST "https://api.apify.com/v2/acts/parseforge~luxembourg-open-data-scraper/run-sync-get-dataset-items?token=$APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "helloWorld": 123
  }'

Examples

Input that runs as-is.

input.json
{
  "helloWorld": 123
}

Reviews

No reviews yet. Be the first.

Issues

We build and maintain this scraper, so a problem with it comes to us. Report it on the Apify listing and the thread stays attached to the scraper where the next person can find it: open an issue.

Broken and urgent, or you would rather not post in public? Write to parseforge@protonmail.com and it reaches the people who wrote it.

Related scrapers

Run Luxembourg Open Data Scraper on Apify All scrapers