SDMX Statistics Extractor avatar

SDMX Statistics Extractor

Pricing

from $0.35 / 1,000 observations

Go to Apify Store
SDMX Statistics Extractor

SDMX Statistics Extractor

Point at ANY SDMX 2.1 statistical service (ECB, OECD, Eurostat, IMF, BIS, World Bank, ABS…): name a dataflow + dimension key and get flat, fully labeled observation rows. Decodes the compact index-encoded SDMX-JSON (1.0 & 2.0 envelopes). Discovery mode lists dataflows. Pay per observation.

Pricing

from $0.35 / 1,000 observations

Rating

0.0

(0)

Developer

Datamule

Datamule

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

0

Monthly active users

7 days ago

Last modified

Categories

Share

A generic "point at any SDMX 2.1 service" scraper. SDMX (Statistical Data and Metadata eXchange — the OASIS/ISO standard) is spoken by the ECB, OECD, Eurostat, IMF, BIS, the World Bank, Australia's ABS, the ADB and dozens of national statistical offices. Many expose compact, index-encoded JSON, although endpoint capabilities differ. This actor is the generic decoder: give it a service root, a dataflow, and an optional dimension key, and it turns SDMX-JSON into flat, fully labeled observation rows — one row per observation, every dimension decoded to both its code and its human name.

Try it now

Run the public ECB USD/EUR daily exchange-rate example with a 25-row cap:

{
"serviceRoot": "https://data-api.ecb.europa.eu/service",
"agency": "ECB",
"dataflow": "EXR",
"version": "latest",
"key": "D.USD.EUR.SP00.A",
"startPeriod": "2024-01-01",
"maxRecords": 25
}

The Actor returns up to 25 matching observations from the source response, decoded into flat code-and-label columns.

Why the decode matters

A raw SDMX series looks like this — meaningless on its own:

{ "0:0:0:0:0": { "observations": { "0": [1.0956, 0, 0] } } }

This actor joins that against the response's structure block so you get real columns:

flowRefFREQCURRENCYCURRENCY_DENOMtimePeriodvalueobsStatus
ECB,EXR,latestDUSDEUR2024-01-021.0956A

…plus a *_label column for every dimension (CURRENCY_label = "US dollar"), the observation attributes, and a lossless raw object.

What it does

  • Query any dataflow — set serviceRoot, agency, dataflow, an optional version, and a key (the dot-joined dimension filter). Add startPeriod / endPeriod or lastNObservations to bound the time range.
  • Full decode — both SDMX-JSON envelopes are handled transparently: 1.0 (ECB: {header, dataSets, structure}) and 2.0 (OECD: {meta, data, errors}), and both the series-keyed and flat (AllDimensions) observation layouts.
  • Discover dataflows — turn on List dataflows only to enumerate the dataflows a service exposes (id, agency, version, name) so you can find what to query.
  • Flat + raw — every dimension and attribute becomes its own labeled column; the untouched per-observation object is kept in raw, so nothing is lost.

Example inputs

ECB — USD/EUR daily exchange rate (public, no auth):

{
"serviceRoot": "https://data-api.ecb.europa.eu/service",
"agency": "ECB", "dataflow": "EXR", "version": "latest",
"key": "D.USD.EUR.SP00.A", "startPeriod": "2024-01-01", "maxRecords": 25
}

OECD — US GDP volume, latest (public, no auth):

{
"serviceRoot": "https://sdmx.oecd.org/public/rest",
"agency": "OECD.ECO.MAD", "dataflow": "DSD_EO@DF_EO", "version": "1.2",
"key": "USA.GDPV.A", "lastNObservations": 1
}

Discover what the OECD exposes:

{ "serviceRoot": "https://sdmx.oecd.org/public/rest", "listDataflowsOnly": true, "maxRecords": 100 }

The series key

The key is a dot-joined filter over the dataflow's dimensions, in order. For ECB EXR the dimensions are FREQ.CURRENCY.CURRENCY_DENOM.EXR_TYPE.EXR_SUFFIX, so D.USD.EUR.SP00.A means daily USD-per-EUR spot averages. You can:

  • wildcard a position by leaving it blank — D..EUR.SP00.A (all currencies),
  • OR values with +D.USD+GBP+JPY.EUR.SP00.A,
  • omit the key entirely to fetch every series in the dataflow (can be large).

Use List dataflows only to discover dataflows; then query one and read the dimension ids off the decoded columns.

Output

One dataset item per observation, with fixed meta columns:

  • serviceRoot, agency, dataflow, version, flowRef — what was queried.
  • seriesKey / obsKey — the raw SDMX index keys; observationId — a stable composite id.
  • timePeriod — the decoded time period; value — the numeric observation value.
  • obsStatus — the decoded observation status (e.g. A = normal value), when present.
  • {DIM} + {DIM}_label — every series/observation dimension as code + human name.
  • {ATTR} + {ATTR}_label — observation- and series-level attributes.
  • raw — the lossless {seriesKey, obsKey, obs, seriesAttributes} object.

In List dataflows only mode each row is a dataflow: dataflowId, agencyId, version, name, description, isFinal, raw.

A query that matches nothing (SDMX answers 404 "No results found") or an empty dataSet returns 0 items, not an error.

Authentication

None required for public services (ECB, OECD, Eurostat, …). For gated services, supply a bearer token or arbitrary extraHeaders (e.g. an API-management subscription key) — credentials are never logged.

Source terms, freshness, and limits

This Actor is an independent SDMX client. Check each provider's terms, data licence, access rules, and attribution requirements before using or redistributing its data, and respect its rate limits. A run makes one source query; transient network, 429, and 5xx responses may be retried. Source availability, schemas, result counts, and freshness are controlled by the provider and can change.

Troubleshooting

  • Invalid flow or key: confirm the agency, dataflow, version, and key against the provider's catalogue. Use List dataflows only to discover flows, then check the key's dimension order.
  • 404 "No results found": the Actor returns 0 items. Check the flow/key and widen or remove the requested period if appropriate.
  • XML-only service: use a JSON-capable SDMX REST endpoint. The Actor does not convert SDMX-ML.
  • Malformed or non-JSON response: check serviceRoot, authentication, and extraHeaders, then inspect the run log for the provider's HTTP, content-type, or JSON-parse error.

Pricing

Pay per observation. On the FREE plan, the event price is $0.0005 per observation, or $0.50 per 1,000 observations. With the Try it now input capped at 25 rows, its maximum observation event charge is 25 × $0.0005 = $0.0125.

Apify infrastructure usage is additional. A no-result query has a $0 observation event charge, but infrastructure usage can still apply. The $0.0125 figure is a ceiling for the exact capped example, not a cost guarantee; changing or removing maxRecords changes that ceiling, and the source's matching result count can change.

Notes

  • Handles the SDMX 404 "No results found" convention as a clean empty result.
  • If a service only serves structure/data as SDMX-ML (XML), the Actor reports a clear error; point it at a JSON-capable SDMX REST endpoint.
  • Not affiliated with or endorsed by any statistical agency or the SDMX initiative.