SourceFinch Verified · Energy & electricity
Denmark power system by the minute
Energinet's minute-by-minute view of the Danish power system for the last 24 hours: CO2 intensity, production by plant size, solar, offshore and onshore wind, and flows on every interconnector.
- Healthy · 100% of observed runs successful
- Energy & electricity
- Energinet
- Denmark
- Publisher's public API
- 20 typed fields
At a glance
- Category
- Energy & electricity
- Jurisdiction
- Denmark
- Publisher updates
- Every minute
- SourceFinch checks
- Daily by default
- Records per run
- 1,440 in the latest run
- Record key
minute_utc- Acquired from
- Publisher's public API:
https://api.energidataservice.dk/dataset/PowerSystemRightNow?start=now-PT24H&sort=Minutes1UTC%20desc - Recipe
- v1.0.0, approved October 13, 2026
- Verified since
- October 13, 2026
- Last green run
- October 13, 2026
What the data contains
Energinet, the Danish state-owned transmission system operator, publishes near real-time power system data on its Energi Data Service. The Power System Right Now dataset gives, for every minute, the CO2 emission intensity of electricity consumed in Denmark, production from large and small plants, solar, offshore and onshore wind, the net exchange and the flow on each interconnector (Germany, the Netherlands, Great Britain, Norway, Sweden, the Great Belt link and Bornholm), and activated automatic frequency restoration reserves. This source reads the last 24 hours on each daily run, one record per minute (about 1,440) keyed by the minute in UTC. Energinet notes the data are upscaled SCADA measurements: errors occur and are generally not corrected, and its settlement datasets are the statistical record. SourceFinch is independent of Energinet.
Fields and types
Every record has these fields. The key field minute_utc identifies a record across runs, so changes are reported field by field.
| Field | Type | Description |
|---|---|---|
minute_utckey | datetime | Start of the one-minute interval in UTC (no offset in the source). The record key. |
minute_dk | datetime, nullable | Start of the one-minute interval in Danish local time (no offset in the source). |
co2_emission | number, nullable | CO2 emission intensity of electricity consumed in Denmark, in g/kWh. |
production_ge_100mw | number, nullable | Production from plants of 100 MW or more, in MW. |
production_lt_100mw | number, nullable | Production from plants under 100 MW, in MW. |
solar_power | number, nullable | Solar power production, in MW. |
offshore_wind_power | number, nullable | Offshore wind power production, in MW. |
onshore_wind_power | number, nullable | Onshore wind power production, in MW. |
exchange_sum | number, nullable | Net exchange over all interconnectors, in MW (positive is import). |
exchange_dk1_de | number, nullable | Flow between West Denmark (DK1) and Germany, in MW. |
exchange_dk1_nl | number, nullable | Flow between West Denmark (DK1) and the Netherlands, in MW. |
exchange_dk1_gb | number, nullable | Flow between West Denmark (DK1) and Great Britain, in MW. |
exchange_dk1_no | number, nullable | Flow between West Denmark (DK1) and Norway, in MW. |
exchange_dk1_se | number, nullable | Flow between West Denmark (DK1) and Sweden, in MW. |
exchange_dk1_dk2 | number, nullable | Flow over the Great Belt link between West (DK1) and East Denmark (DK2), in MW. |
exchange_dk2_de | number, nullable | Flow between East Denmark (DK2) and Germany, in MW. |
exchange_dk2_se | number, nullable | Flow between East Denmark (DK2) and Sweden, in MW. |
exchange_bornholm_se | number, nullable | Flow between Bornholm and Sweden, in MW. |
afrr_activated_dk1 | number, nullable | Activated automatic frequency restoration reserve in DK1, in MW. |
afrr_activated_dk2 | number, nullable | Activated automatic frequency restoration reserve in DK2, in MW. |
Sample output
The first 5 of 1,440 records from SourceFinch's own run on October 13, 2026, exactly as delivered.
| Field | Record 1 | Record 2 | Record 3 | Record 4 | Record 5 |
|---|---|---|---|---|---|
minute_utc | 2026-10-13T01:12:00 | 2026-10-13T01:11:00 | 2026-10-13T01:10:00 | 2026-10-13T01:09:00 | 2026-10-13T01:08:00 |
minute_dk | 2026-10-13T03:12:00 | 2026-10-13T03:11:00 | 2026-10-13T03:10:00 | 2026-10-13T03:09:00 | 2026-10-13T03:08:00 |
co2_emission | 89.709999 | 89.599998 | 89.769997 | 89.82 | 89.5 |
production_ge_100mw | 1152.52002 | 1153.280029 | 1152.290039 | 1152.180054 | 1151.819946 |
production_lt_100mw | 351.140015 | 350.019989 | 350.709991 | 350.660004 | 349.790009 |
solar_power | 27.469999 | 27.57 | 27.4 | 27.42 | 25.73 |
offshore_wind_power | 1352.26001 | 1351.410034 | 1341.829956 | 1345.77002 | 1354.209961 |
onshore_wind_power | 1215.939941 | 1219.890015 | 1216.719971 | 1208.530029 | 1211.97998 |
exchange_sum | 212.759995 | 208.139999 | 213.380005 | 224.839996 | 231.820007 |
exchange_dk1_de | -759.679993 | -771.549988 | -773.559998 | -761.460022 | -761.650024 |
exchange_dk1_nl | -699.690002 | -699.690002 | -699.690002 | -699.690002 | -699.690002 |
exchange_dk1_gb | 427.76001 | 427.76001 | 427.76001 | 427.76001 | 427.76001 |
exchange_dk1_no | 884.01001 | 891.409973 | 896.789978 | 896.48999 | 897.349976 |
exchange_dk1_se | 3 | 3 | 3 | 3 | 3 |
exchange_dk1_dk2 | -468.940002 | -468.940002 | -468.940002 | -468.940002 | -468.940002 |
exchange_dk2_de | 737.890015 | 735.530029 | 734.299988 | 734.320007 | 734.109985 |
exchange_dk2_se | -397.299988 | -391.049988 | -388.190002 | -388.420013 | -382.070007 |
exchange_bornholm_se | 16.77 | 12.73 | 12.97 | 12.84 | 13.01 |
afrr_activated_dk1 | 9.83 | 11.74 | 12.21 | 16.139999 | 14.58 |
afrr_activated_dk2 | 42.990002 | 46.209999 | 46.360001 | 46.91 | 46.48 |
Sample as JSON
[
{
"minute_dk": "2026-10-13T03:12:00",
"minute_utc": "2026-10-13T01:12:00",
"solar_power": 27.469999,
"co2_emission": 89.709999,
"exchange_sum": 212.759995,
"exchange_dk1_de": -759.679993,
"exchange_dk1_gb": 427.76001,
"exchange_dk1_nl": -699.690002,
"exchange_dk1_no": 884.01001,
"exchange_dk1_se": 3,
"exchange_dk2_de": 737.890015,
"exchange_dk2_se": -397.299988,
"exchange_dk1_dk2": -468.940002,
"afrr_activated_dk1": 9.83,
"afrr_activated_dk2": 42.990002,
"onshore_wind_power": 1215.939941,
"offshore_wind_power": 1352.26001,
"production_ge_100mw": 1152.52002,
"production_lt_100mw": 351.140015,
"exchange_bornholm_se": 16.77
},
{
"minute_dk": "2026-10-13T03:11:00",
"minute_utc": "2026-10-13T01:11:00",
"solar_power": 27.57,
"co2_emission": 89.599998,
"exchange_sum": 208.139999,
"exchange_dk1_de": -771.549988,
"exchange_dk1_gb": 427.76001,
"exchange_dk1_nl": -699.690002,
"exchange_dk1_no": 891.409973,
"exchange_dk1_se": 3,
"exchange_dk2_de": 735.530029,
"exchange_dk2_se": -391.049988,
"exchange_dk1_dk2": -468.940002,
"afrr_activated_dk1": 11.74,
"afrr_activated_dk2": 46.209999,
"onshore_wind_power": 1219.890015,
"offshore_wind_power": 1351.410034,
"production_ge_100mw": 1153.280029,
"production_lt_100mw": 350.019989,
"exchange_bornholm_se": 12.73
},
{
"minute_dk": "2026-10-13T03:10:00",
"minute_utc": "2026-10-13T01:10:00",
"solar_power": 27.4,
"co2_emission": 89.769997,
"exchange_sum": 213.380005,
"exchange_dk1_de": -773.559998,
"exchange_dk1_gb": 427.76001,
"exchange_dk1_nl": -699.690002,
"exchange_dk1_no": 896.789978,
"exchange_dk1_se": 3,
"exchange_dk2_de": 734.299988,
"exchange_dk2_se": -388.190002,
"exchange_dk1_dk2": -468.940002,
"afrr_activated_dk1": 12.21,
"afrr_activated_dk2": 46.360001,
"onshore_wind_power": 1216.719971,
"offshore_wind_power": 1341.829956,
"production_ge_100mw": 1152.290039,
"production_lt_100mw": 350.709991,
"exchange_bornholm_se": 12.97
},
{
"minute_dk": "2026-10-13T03:09:00",
"minute_utc": "2026-10-13T01:09:00",
"solar_power": 27.42,
"co2_emission": 89.82,
"exchange_sum": 224.839996,
"exchange_dk1_de": -761.460022,
"exchange_dk1_gb": 427.76001,
"exchange_dk1_nl": -699.690002,
"exchange_dk1_no": 896.48999,
"exchange_dk1_se": 3,
"exchange_dk2_de": 734.320007,
"exchange_dk2_se": -388.420013,
"exchange_dk1_dk2": -468.940002,
"afrr_activated_dk1": 16.139999,
"afrr_activated_dk2": 46.91,
"onshore_wind_power": 1208.530029,
"offshore_wind_power": 1345.77002,
"production_ge_100mw": 1152.180054,
"production_lt_100mw": 350.660004,
"exchange_bornholm_se": 12.84
},
{
"minute_dk": "2026-10-13T03:08:00",
"minute_utc": "2026-10-13T01:08:00",
"solar_power": 25.73,
"co2_emission": 89.5,
"exchange_sum": 231.820007,
"exchange_dk1_de": -761.650024,
"exchange_dk1_gb": 427.76001,
"exchange_dk1_nl": -699.690002,
"exchange_dk1_no": 897.349976,
"exchange_dk1_se": 3,
"exchange_dk2_de": 734.109985,
"exchange_dk2_se": -382.070007,
"exchange_dk1_dk2": -468.940002,
"afrr_activated_dk1": 14.58,
"afrr_activated_dk2": 46.48,
"onshore_wind_power": 1211.97998,
"offshore_wind_power": 1354.209961,
"production_ge_100mw": 1151.819946,
"production_lt_100mw": 349.790009,
"exchange_bornholm_se": 13.01
}
]Evidence behind every value
- Each run keeps the publisher's exact response, hashed with SHA-256. This sample came from a response with hash
eec4ae07081214d116ea155663229880c1ab63d36a3750a92b894178688b0124. - Every value records where it came from in that response: a JSON Pointer into the retained capture.
- Each run gets a signed manifest (Ed25519) timestamped by an RFC 3161 authority: this run's manifest hash is
1904a960b12444ea82e372497f8207aa19d95f12976b1d43eaf1a01536ff5872, timestamped October 13, 2026. - The compliance state at capture is recorded with the evidence: robots.txt hash and verdict, AI-preference signals, crawler identity and the usage rights below.
- Download any run as an evidence bundle (WACZ) and check it offline, without trusting SourceFinch:
sourcefinch verify-bundle run.wacz.
Terms posture and usage rights
- Terms
- Automated access permitted · publisher's terms
- robots.txt
- None published (HTTP 404); access allowed under RFC 9309
- AI-preference signals
- None observed at review
- Public record
- No
- Reviewed
- October 13, 2026; next review April 13, 2027
- Licence basis
- Open data licence (DK-PSD-Energinet)
- Commercial use
- Allowed
- Redistribution
- Allowed
- Attribution
- Not required
Energi Data Service data is published under Energinet's 'Conditions for use of Danish public-sector data', which grant a worldwide, free, non-exclusive and otherwise unrestricted licence to copy, distribute, publish, adapt and exploit the data commercially and non-commercially, provided the use does not suggest Energinet endorses the user and complies with Danish law; acknowledging the source is suggested, not required. api.energidataservice.dk serves no robots.txt (HTTP 404), which RFC 9309 treats as allowing access, and the API needs no key. This source makes one request per daily run.
Usage rights travel with every record SourceFinch delivers (API, exports, webhooks and evidence bundles). They are our documented understanding of the publisher's stated terms, not legal advice.
Reliability
- Runs, last 30 days
- 1
- Green
- 100%
- Failed
- 0
- Median run time
- 2.1 s
- Latest run
- success, October 13, 2026
Measured on completed runs of this recipe version across SourceFinch, anonymized, within a rolling 30-day window. First successful observation: October 13, 2026. A new recipe has only the history collected since that date; this is not a 30-day uptime guarantee.
Use it
Every surface creates the same monitor from this Verified recipe. Monitors keep record history, report field-level changes and deliver by webhook, export or email. You confirm you have the right to collect the source (rights: true).
Console
Open this recipe in the console: it preserves the reviewed URL, fields and record key. Review the latest captured sample, confirm source rights, and choose a schedule before creating your monitor.
Portable recipe
Copy into the console's Import or share a recipe panel to customize fields, types and schedules. This configuration contains no captured records or workspace IDs.
{
"schema": "sourcefinch/source@1",
"name": "Denmark power system by the minute",
"url": "https://api.energidataservice.dk/dataset/PowerSystemRightNow?start=now-PT24H&sort=Minutes1UTC%20desc",
"recipe": {
"mode": "http",
"format": "json",
"items": "records[*]",
"fields": {
"minute_dk": "Minutes1DK",
"minute_utc": "Minutes1UTC",
"solar_power": "SolarPower",
"co2_emission": "CO2Emission",
"exchange_sum": "Exchange_Sum",
"exchange_dk1_de": "Exchange_DK1_DE",
"exchange_dk1_gb": "Exchange_DK1_GB",
"exchange_dk1_nl": "Exchange_DK1_NL",
"exchange_dk1_no": "Exchange_DK1_NO",
"exchange_dk1_se": "Exchange_DK1_SE",
"exchange_dk2_de": "Exchange_DK2_DE",
"exchange_dk2_se": "Exchange_DK2_SE",
"exchange_dk1_dk2": "Exchange_DK1_DK2",
"afrr_activated_dk1": "aFRR_ActivatedDK1",
"afrr_activated_dk2": "aFRR_ActivatedDK2",
"onshore_wind_power": "OnshoreWindPower",
"offshore_wind_power": "OffshoreWindPower",
"production_ge_100mw": "ProductionGe100MW",
"production_lt_100mw": "ProductionLt100MW",
"exchange_bornholm_se": "Exchange_Bornholm_SE"
},
"required": [
"minute_utc"
],
"types": {
"afrr_activated_dk1": "number",
"afrr_activated_dk2": "number",
"co2_emission": "number",
"exchange_bornholm_se": "number",
"exchange_dk1_de": "number",
"exchange_dk1_dk2": "number",
"exchange_dk1_gb": "number",
"exchange_dk1_nl": "number",
"exchange_dk1_no": "number",
"exchange_dk1_se": "number",
"exchange_dk2_de": "number",
"exchange_dk2_se": "number",
"exchange_sum": "number",
"minute_dk": "datetime",
"minute_utc": "datetime",
"offshore_wind_power": "number",
"onshore_wind_power": "number",
"production_ge_100mw": "number",
"production_lt_100mw": "number",
"solar_power": "number"
}
},
"schedule": "daily",
"key_field": "minute_utc"
}source.json
The request body used by the API, CLI and SDK examples.
{
"name": "Denmark power system by the minute",
"url": "https://api.energidataservice.dk/dataset/PowerSystemRightNow?start=now-PT24H&sort=Minutes1UTC%20desc",
"recipe": {
"mode": "http",
"format": "json",
"items": "records[*]",
"fields": {
"minute_dk": "Minutes1DK",
"minute_utc": "Minutes1UTC",
"solar_power": "SolarPower",
"co2_emission": "CO2Emission",
"exchange_sum": "Exchange_Sum",
"exchange_dk1_de": "Exchange_DK1_DE",
"exchange_dk1_gb": "Exchange_DK1_GB",
"exchange_dk1_nl": "Exchange_DK1_NL",
"exchange_dk1_no": "Exchange_DK1_NO",
"exchange_dk1_se": "Exchange_DK1_SE",
"exchange_dk2_de": "Exchange_DK2_DE",
"exchange_dk2_se": "Exchange_DK2_SE",
"exchange_dk1_dk2": "Exchange_DK1_DK2",
"afrr_activated_dk1": "aFRR_ActivatedDK1",
"afrr_activated_dk2": "aFRR_ActivatedDK2",
"onshore_wind_power": "OnshoreWindPower",
"offshore_wind_power": "OffshoreWindPower",
"production_ge_100mw": "ProductionGe100MW",
"production_lt_100mw": "ProductionLt100MW",
"exchange_bornholm_se": "Exchange_Bornholm_SE"
},
"required": [
"minute_utc"
],
"types": {
"minute_dk": "datetime",
"minute_utc": "datetime",
"solar_power": "number",
"co2_emission": "number",
"exchange_sum": "number",
"exchange_dk1_de": "number",
"exchange_dk1_gb": "number",
"exchange_dk1_nl": "number",
"exchange_dk1_no": "number",
"exchange_dk1_se": "number",
"exchange_dk2_de": "number",
"exchange_dk2_se": "number",
"exchange_dk1_dk2": "number",
"afrr_activated_dk1": "number",
"afrr_activated_dk2": "number",
"onshore_wind_power": "number",
"offshore_wind_power": "number",
"production_ge_100mw": "number",
"production_lt_100mw": "number",
"exchange_bornholm_se": "number"
}
},
"key_field": "minute_utc",
"schedule": "daily",
"rights": true,
"catalog": {
"slug": "energinet-denmark-power-system-right-now",
"version_id": "b8e090bc-5d4d-4aa5-9402-117597a787ff"
}
}REST API
Create an API key under Console → API keys. Reference: /docs/api.
# the Verified entry (fields, recipe, sample, terms) as JSON
curl https://sourcefinch.com/v1/catalog/energinet-denmark-power-system-right-now -H "Authorization: Bearer $SOURCEFINCH_API_KEY"
# create the monitor from source.json (below)
curl -X POST https://sourcefinch.com/v1/sources \
-H "Authorization: Bearer $SOURCEFINCH_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d @source.json
# then run it now (later runs follow the schedule)
curl -X POST https://sourcefinch.com/v1/sources/$SOURCE_ID/runs \
-H "Authorization: Bearer $SOURCEFINCH_API_KEY" \
-H "Idempotency-Key: $(uuidgen)"CLI
The sourcefinch CLI is not on npm yet; see /docs/cli.
sourcefinch login
sourcefinch catalog get energinet-denmark-power-system-right-now --source-json > source.json
sourcefinch sources create --file source.json
sourcefinch runs create $SOURCE_ID --wait
sourcefinch records $SOURCE_IDTypeScript SDK
The SDK is not on npm yet; see /docs/sdk.
import { SourceFinch } from "@sourcefinch/sdk";
const sf = new SourceFinch({ apiKey: process.env.SOURCEFINCH_API_KEY });
const entry = await sf.catalog.get("energinet-denmark-power-system-right-now");
const source = await sf.sources.create({
catalog: { slug: entry.slug, version_id: entry.recipe.version_id },
name: entry.name.slice(0, 100),
url: entry.acquisition_path.endpoint,
recipe: entry.recipe.definition,
key_field: entry.recipe.key_field,
schedule: entry.recipe.schedule,
rights: true, // you confirm you have the right to collect this source
});
const run = await sf.runs.wait((await sf.runs.create(source.id)).id);
console.log(run.status);MCP
Remote MCP server with OAuth; see /docs/mcp.
claude mcp add --transport http sourcefinch https://sourcefinch.com/mcp
# then ask your agent:
"Use SourceFinch to monitor Denmark power system by the minute: get_catalog_source energinet-denmark-power-system-right-now,
then create_source with its create_source_args (dry run first), then run_source."Pricing
Each check is one run, whatever the number of records, and failed runs are free. On its default daily schedule this source uses about 30 runs a month, which fits the Free plan's 300 runs. It uses HTTP acquisition, so no browser runs are needed. See plans.
Related sources
More from Energinet and in energy & electricity.
SourceFinch is independent and is not affiliated with or endorsed by Energinet. This page describes denmark power system by the minute as SourceFinch acquires it.