@varve/agency-sdks

Eurostat API

TypeScript client for Eurostat Statistics and SDMX 3.0 APIs.

Eurostat API

@varve/eurostat-api is an isomorphic, Zod-validated TypeScript client for Eurostat data and metadata.

It exposes Eurostat's JSON-stat Statistics API for convenient data retrieval and SDMX 3.0 endpoints for metadata discovery, structures, codelists, concepts, and CSV data pulls.

Install

npm install @varve/eurostat-api zod

Query data

import { EurostatClient } from '@varve/eurostat-api';
 
const client = new EurostatClient();
 
const data = await client.getStatisticsData('demo_gind', {
  filters: {
    freq: 'A',
    indic_de: 'JAN',
    geo: ['DE', 'FR'],
    time: ['2022', '2023'],
  },
});

Describe a dataset

describeDataset() returns a compact dimension summary that is useful for NLQ systems.

const description = await client.describeDataset('demo_gind', {
  filters: {
    freq: 'A',
    indic_de: 'JAN',
    geo: ['DE', 'FR'],
  },
});
 
console.log(description.dimensions);

Build Graph Metadata

Eurostat's equivalent to the StatCan dataset -> dimension -> member graph is dataflow -> dimension -> category.

const datasets = await client.listDatasets();
 
const graph = await client.getDatasetGraphMetadata('demo_gind', {
  strategy: 'filtered',
  filters: {
    freq: 'A',
    indic_de: 'JAN',
    geo: ['DE', 'FR'],
    time: ['2022', '2023'],
  },
});
 
console.log(graph.dataset);
console.log(graph.dimensions);
console.log(graph.members);

getDatasetGraphMetadata() uses Eurostat JSON-stat metadata. With filters, it returns the graph for that slice. By default, it uses the dataset's latest advertised period to avoid accidentally expanding a very large cube.

The live Eurostat catalogue is large but manageable: on June 5, 2026, the all-dataflows endpoint returned 8,225 datasets in about 19.1 MB of JSON. Those datasets advertised about 6.17 billion observations in total, so full per-dataset expansion should stay opt-in.

Available graph strategies:

await client.getDatasetGraphMetadata('demo_gind'); // latest period by default
await client.getDatasetGraphMetadata('demo_gind', { strategy: 'sample' });
await client.getDatasetGraphMetadata('demo_gind', {
  strategy: 'filtered',
  filters: { freq: 'A', geo: ['DE', 'FR'], time: ['2023'] },
});
await client.getDatasetGraphMetadata('demo_gind', {
  strategy: 'full',
  allowLarge: true,
});

Discover metadata

const datasets = await client.listDatasets();
const dataflows = await client.getDataflows();
const flow = await client.getDataflow('DEMO_GIND');
const structures = await client.getDataStructures();
const codelists = await client.getCodelists();
const concepts = await client.getConceptSchemes();
 
const summaries = await client.listDataflows();

SDMX CSV

const csv = await client.getSdmxCsvData('DEMO_GIND', {
  filters: {
    freq: 'A',
    indic_de: 'JAN',
    geo: 'DE',
    TIME_PERIOD: 'ge:2020+le:2024',
  },
});

Official references

On this page