SDMX Statistics Extractor
Pricing
from $0.35 / 1,000 observations
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
Maintained by CommunityActor 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:
| flowRef | FREQ | CURRENCY | CURRENCY_DENOM | timePeriod | value | obsStatus |
|---|---|---|---|---|---|---|
| ECB,EXR,latest | D | USD | EUR | 2024-01-02 | 1.0956 | A |
…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 optionalversion, and akey(the dot-joined dimension filter). AddstartPeriod/endPeriodorlastNObservationsto 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, andextraHeaders, 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.