EU Balancing Activation Panel avatar

EU Balancing Activation Panel

Pricing

Pay per usage

Go to Apify Store
EU Balancing Activation Panel

EU Balancing Activation Panel

Normalized aFRR/mFRR activation and imbalance price-volume panel for EU bidding zones with regime-shift flags and per-day gap registers.

Pricing

Pay per usage

Rating

0.0

(0)

Developer

Atlas

Atlas

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

17 days ago

Last modified

Categories

Share

A normalized price–volume panel for EU balancing activation and imbalance settlement: aFRR, mFRR and RR-related series per bidding zone and UTC quarter-hour interval, with regime-shift flags keyed to published platform milestones, per-day gap registers, stable IDs, edit detection, and replay-safe incremental state.

Built for BESS/flexibility revenue modelers, quant analysts at aggregators, traders, and energy consultants who need audit-friendly, machine-readable balancing history without days of manual ENTSO-E/TSO wrangling.

The value is not access to public data — it is the production workflow around it: deterministic normalization with documented methodology notes, DST-safe UTC intervals, original-currency preservation, completeness/gap disclosure, regime-era annotation, change tracking across upstream revisions, bounded durable state, and conservative failure behavior.

Output

Each dataset row is one normalized observation: zone × product × UTC 15-minute interval, output schemaVersion 1.0.0:

  • stable recordId (SHA-256 over source + zone + product + interval start) and separate contentDigest;
  • zone, product, direction (up/down/none where applicable);
  • intervalStartUTC / intervalEndUTC, always fixed 15-minute resolution;
  • volume with explicit volumeUnit (MW instantaneous vs MWh per-interval energy) because upstream semantics differ;
  • priceEURperMWh plus originalCurrencyPrice/originalCurrency (e.g. DKK) when the source publishes them;
  • aggregationMethod: native-interval for natively published intervals, sample-mean for second-resolution aFRR activations averaged per quarter-hour (with sampleCount);
  • components for related published fields (spot price, dominating direction, offered/total volumes);
  • regimeFlags: milestone era/adjacency IDs plus rolling z-score volatility clusters (analytical estimate only);
  • completeness: expected vs observed vs missing intervals for the row's UTC day;
  • methodologyNote, fetchedAt, changeType, changedFields, and explicit source attribution.

Products from EnergiDataService: imbalance, aFRR-VWA-up/down, mFRR-marginal-up/down, mFRR-SA-up/down, mFRR-DA-up/down, optional aFRR-activation. Products from the ENTSO-E Transparency Platform path: activated-price (A85), activated-quantity (A83), procured-quantity (A86), procured-price (A87).

Sources, licenses and honest coverage

SourceAccessZonesLicense/terms
Energinet Energi Data ServiceAnonymous REST APIDK1, DK2CC BY 4.0; attribution included on every row
ENTSO-E Transparency PlatformREST API with your free registered security tokenDK1/DK2/DE-LU/AT/NL/BE/FI/ES defaultsPublished market information under TP terms; carry its accuracy disclaimer

Coverage is deliberately deep where sources are verified and explicitly disclosed elsewhere:

  • The anonymous default path covers DK1/DK2 with aFRR volume-weighted prices/volumes, mFRR scheduled/direct activation price-volume pairs, marginal prices, and full imbalance-price components.
  • The ENTSO-E path implements the official document types A85/A86/A87 (+A83) with strict IEC 62325-451 XML parsing. It requires your own token registered at the Transparency Platform. Default area-EIC codes are provided for eight launch zones but should be verified by you against the official area list before production use.
  • National supplements named in the underlying opportunity research (regelleistung.net, OTE-CR, Fingrid, ESIOS) are not covered in v1: their redistribution/automated-access terms were not verifiable at build time and remain an explicit unknown rather than a silently weakened promise.

Regime-shift flags

  • Built-in milestone: PICASSO go-live 2024-10-02T00:00Z — verified via Energinet's official discontinued-dataset notice ("no longer updated after October 2nd, 2024, because of the go-live of the PICASSO platform").
  • Rows carry postMilestoneEraId (the latest milestone at or before the interval) and milestone adjacency within a 7-day window after each milestone.
  • Add your own published milestones (for example MARI's go-live once you have confirmed the exact date you trust) via the milestones input; each entry carries its own source URL so annotations stay auditable.
  • Volatility clusters are rolling |z|-score flags over trailing same-product prices inside the fetched window. They are analytical estimates, never settlement facts.

Run modes

full re-emits every collected row as snapshot (stateless; ideal for warehouse rebuilds and the default example).

incremental emits only new and updated rows, overlapping the last watermark by overlapHours to catch late upstream revisions.

diff behaves like incremental but also emits unchanged rows for reconciliation.

Change tracking keys digests on recordId; only source observations participate in digests (annotations like flags/fetchedAt do not trigger false updates). changedFields names exactly which normalized fields changed.

Example input

{
"mode": "full",
"zones": ["DK1", "DK2"],
"sources": ["energidataservice"],
"lookbackHours": 24
}

This default finishes in well under five minutes, always produces a non-empty schema-correct dataset from real Energinet data, and requires no credentials. For the token-gated path add "sources": ["entsoe-tp"] and your entsoeSecurityToken.

Second-resolution aFRR activation (AfrrEnergyActivation) is off by default: it publishes one sample per second and is aggregated client-side into quarter-hour means. Enable it with short windows (hours, not weeks).

Traversal caps, resume, and write ordering

Cost and runtime are independently bounded by maxItems, maxPagesPerDataset, maxScannedRecords, and pageSize. HTTP 429/5xx and network errors receive bounded exponential-backoff retries honoring retry-after; malformed envelopes/records fail closed or are counted as malformedRecords.

If a cap lands mid-window, durable state saves the exact window, mode, per-dataset forward offsets, and a compact replay ledger of already-emitted rows. A truncated window rewinds its source offset to the page start and replays without duplicating dataset writes. Completed windows clear their cursor and advance the watermark.

Before any source call the Actor acquires an exclusive writer lease (request-queue-backed with server-side expiry). The write order is strict: dataset rows → key-value-store OUTPUT summary → durable state last. Any earlier failure leaves work replayable; consumers should upsert by recordId and use contentDigest/changeType/fetchedAt to distinguish revisions.

State lives in this Actor's own resources (named KV store eu-balancing-activation-panel-state-v1, lock queue eu-balancing-activation-panel-lock-v1) as immutable uniquely-keyed snapshots with semantic revision selection, retention-based pruning (stateRetentionDays, maxStateEntries), and a hard 3.5 MB budget that degrades gracefully by dropping oldest digests rather than failing runs. Schedule non-overlapping runs; overlapping runs can still duplicate replayed rows even though stale state commits are rejected.

OUTPUT record

The OUTPUT key holds the run summary: status/stop reason, per-source windows, scanned/malformed/duplicate/emitted counts, change counts, a bounded gap register (per zone×product×UTC day missing-interval counts), applied milestones, volatility cluster count, explicit disclaimers, timestamp, dataset ID, and attribution array.

Cost expectations

Default memory 1024 MB ≈ 1 compute unit per hour (~$0.20/CU planning example → ~$0.03 per 10-minute run). Typical anonymous-path runs complete in seconds to low minutes depending on lookback and caps. These are planning examples, not quotes; check your run's Usage details.

Limitations and disclaimers

  • Outputs are analytical estimates normalized from official publications — not official settlement data. Verify against your TSO/settlement statements before commercial decisions.
  • Coverage mirrors what configured sources publish; per-row completeness counters and the OUTPUT gap register disclose holes instead of hiding them. Upstream restatements are detected via overlap windows within retained state.
  • No FX conversion: EUR values are used as published and original-currency values preserved alongside.
  • This Actor is not investment, trading, regulatory, or financial advice, and makes no accuracy or fitness guarantees. Source figures inherit each platform's own disclaimers.

Local development

npm ci
npm run lint
npm run typecheck
npm run build
npm test # unit/integration/adversarial/schema/smoke (no network)
npm run smoke:live # LIVE_SMOKE=1 real EnergiDataService smoke
npm audit --omit=dev && npm audit
apify validate-schema

Data source attribution

Data: Energinet Energi Data Service (CC BY 4.0 — "Source: Energinet") and ENTSO-E Transparency Platform when the user supplies a token. Attribution objects ship with every dataset row and every OUTPUT record; review each platform's current terms for your use case. This Actor does not claim ownership of source data.