CKAN Open Data Portal Scraper icon

Developer tools

CKAN Open Data Portal Scraper

Point us at any CKAN open-data portal by URL and get clean JSON rows back -- dataset search, single-dataset detail, or organization rosters, from data.gov.uk, open.canada.ca, data.gov, the EU portal, or any national or city catalogue running CKAN, in one run.

Free Apify credit covers a first run. No credit card to try.

What this Actor scrapes

deployed open-data portal software in the world, and every deployment exposes the same standardized Action APIpackage_search, package_show, organization_list — regardless of which government or city runs it. data.gov.uk, open.canada.ca, data.gov, the EU portal, and most national and city open-data catalogues all speak this protocol.

This Actor is a generic, cross-portal harvester, not a single-country scraper. You supply a list of {portal_url, action} requests, and we return every matching record from every request in one run — dataset metadata, resource listings, or organization rosters, whatever shape that portal's catalogue happens to publish.

What we handle for you

  • 🔁 We retry with exponential backoff on 429 and 5xx responses —
  • 📄 We page every search for yourows/start walked automatically
  • 🧩 We fan out across portals in one run — mix a UK search and a
  • 🧱 We isolate failures per request — CKAN's native success: false
  • 🧊 We keep the dataset clean — Pydantic-validated rows, ISO-8601
  • 💰 You pay only for results that land. No data → no charge beyond the

Use cases

  • Civic analytics — pull a national or city open-data catalogue on a
  • Journalism / research — cross-reference multiple government portals
  • Data engineering — feed dataset metadata into a pipeline or catalogue
  • Academic / policy research — bulk-export any CKAN portal's catalogue
  • Compliance / transparency monitoring — watch an organization's

Input

Paste this into the Apify Console, or send it as the run input over the API. Proxy settings are on by default; you rarely need to touch them.

FieldTypeRequiredWhat it does
requests array yes List of CKAN portal + action requests to run. Each entry: {"portal_url": "https://data.gov.uk", "action": "package_search", "query": null, "filter_query": null, "dataset_id": null, "rows": 100, "start": 0, "max_items":…
proxy_configuration object no Apify Proxy spec.
{
  "requests": [
    {
      "portal_url": "https://data.gov.uk",
      "action": "package_search",
      "rows": 5,
      "label": "data.gov.uk sample search"
    },
    {
      "portal_url": "https://open.canada.ca/data",
      "action": "package_search",
      "rows": 5,
      "label": "open.canada.ca sample search"
    }
  ],
  "proxy_configuration": {
    "useApifyProxy": true
  }
}

Output

One row per result, schema-validated before it is written. Export JSON, CSV, Excel or XML from the run, or read it over the API.

portal_urlactionquery_usedrequest_labelrecord_idscraped_atdata

{
  "portal_url": "https://data.gov.uk",
  "action": "package_search",
  "query_used": null,
  "request_label": "data.gov.uk sample search",
  "record_id": "land-registry-price-paid-data",
  "scraped_at": "2026-09-01T09:12:44.000Z",
  "data": {
    "id": "5a67e4a1-0000-0000-0000-000000000000",
    "name": "land-registry-price-paid-data",
    "title": "Price Paid Data",
    "organization": {
      "name": "land-registry",
      "title": "HM Land Registry"
    },
    "num_resources": 4
  }
}

Pricing

EventPriceWhen
Actor start$0.05Once per run, covers warm-up and proxy session setup.
Result row$0.0030Per result written to the dataset.

You pay only for results that land. Cap any run with maxTotalChargeUsd. See pricing & billing for worked examples.

FAQ

Do I need a CKAN account or API key?
No. Every request in this Actor targets public, unauthenticated CKAN portals — this Actor runs entirely keyless.
What happens if I give it a bad `dataset_id`?
That request is logged and skipped; the run still finishes successfully and your other requests complete normally. CKAN reports "not found" as a success: false envelope on HTTP 200, and we treat that as a skip, not a crash.
What if my `query` or `filter_query` matches nothing?
The run finishes successfully with zero rows for that request — an empty result is not an error.
Can I scrape any CKAN portal, or only the ones in the example?
Any public CKAN portal — data.gov.uk and open.canada.ca in the prefill just demonstrate multi-portal fan-out in a single run.
Why is `data` a raw untyped object instead of fixed columns?
Because the metadata shape is unknown at build time — a UK dataset and a Canadian dataset can carry different extras and licence vocabularies. Forcing them into one fixed schema would mean dropping real data; data keeps every field the source portal returned.

Ready to run it?

Open the listing on Apify, paste the input above, and watch rows land. If it ever breaks, it is our problem before it is yours.

Related Actors

Teams that run this also run