Skip to main content

edi-energy.de scraper

License: MIT Unittests status badge Coverage status badge Linting status badge Black status badge PyPi Status Badge Python Versions (officially) supported

The Python package edi_energy_scraper provides easy to use methods to mirror the free documents on bdew-mako.de.

Rationale / Why?

If you'd like to be informed about new regulations or data formats being published on bdew-mako.de you can either

  • visit the site every day and hope that you see the changes if this is your favourite hobby,
  • or automate the task.

This repository helps you with the latter. It allows you to create an up-to-date copy of edi-energy.de on your local computer. Other than if you mirrored the files using wget or curl, you'll get a clean and intuitive directory structure.

From there you can e.g. commit the files into a VCS (like e.g. our edi_energy_mirror), scrape the PDF/Word files for later use...

We're all hoping for the day of true digitization on which this repository will become obsolete.

See also

There is a similar project in C# by Fabian Wetzel: fabsenet/edi-energy-extracto. Other than this project, it stores the downloaded data in a database instead of a file system. It also works with bdew-mako.de.

How to use the Package (as a user)

Install via pip:

pip install edi_energy_scraper

Create a directory in which you'd like to save the mirrored data:

mkdir edi_energy_de

Then import it and start the download:

import asyncio
from edi_energy_scraper import EdiEnergyScraper


# add the following lines to enable debug logging to stdout (CLI)
# import logging
# import sys
# logging.basicConfig(stream=sys.stdout, level=logging.DEBUG)

async def mirror():
    scraper = EdiEnergyScraper(path_to_mirror_directory="edi_energy_de")
    await scraper.mirror()


if __name__ == "__main__":
    loop = asyncio.new_event_loop()
    asyncio.set_event_loop(loop)
    asyncio.run(mirror())

This creates a directory structure:

-|-your_script_cwd.py
 |-edi_energy_de
    |- FV2310 (contains files valid since 2023-10-01)
        |- ahb.pdf
        |- ahb.docx
        |- ...
    |- FV2404 (contains files valid since 2024-04-03)
        |- mig.pdf
        |- mig.docx
        |- ...
    |- FV2504 (contains files valid since 2025-06-06)
        |- allgemeine_festlegungen.pdf
        |- schema.xsd
        |- ...

## BDEW Anwendungshilfen / Aktivitätsdiagramme

Some documents (e.g. the BDEW-Anwendungshilfe **Aktivitätsdiagramme** for GPKE, WiM Strom, MPES
and MaBiS) are **not** part of the bdew-mako.de document API — they are published as plain
PDF/DOCX links on bdew.de service pages. `BdewAnwendungshilfenScraper` mirrors those: give it
one or more seed page URLs and it downloads every linked PDF/DOCX into a target directory,
keeping the original filenames.

`AKTIVITAETSDIAGRAMME_SEED_URLS` is a ready-made list of the current public pages (steady-state
GPKE/WiM/MPES/MaBiS **and** the 24h-supplier-switch / ZSG variant, LFW24). The superseded 2020
page and the login-walled Gas document (GeLi Gas 2.0, only reachable behind *BDEW
Authentifizierung*) are intentionally excluded.

```python
import asyncio
from edi_energy_scraper import AKTIVITAETSDIAGRAMME_SEED_URLS, BdewAnwendungshilfenScraper

async def mirror_anwendungshilfen():
    scraper = BdewAnwendungshilfenScraper()
    try:
        await scraper.download_from_seeds(
            list(AKTIVITAETSDIAGRAMME_SEED_URLS), target_directory="aktivitaetsdiagramme"
        )
    finally:
        await scraper.close()

asyncio.run(mirror_anwendungshilfen())

How to use this Repository on Your Machine (for development)

This repository uses uv for dependency management and development tooling. Install uv, then set up the development environment with:

uv sync --group dev

You can run the individual checks via the corresponding dependency groups, e.g.:

uv run --group tests pytest
uv run --group linting ruff check .
uv run --group type_check mypy --show-error-codes --strict src/edi_energy_scraper
uv run --group linting ruff format --check .

For general conventions, please also follow the instructions in our Python Template Repository.

Contribute

You are very welcome to contribute to this template repository by opening a pull request against the main branch.

Metadata

Release files for edi-energy-scraper 2.6.4

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for edi-energy-scraper 2.6.4
File Size Uploaded
edi_energy_scraper-2.6.4.tar.gz 145.8 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for edi-energy-scraper 2.6.4
File Interpreter ABI Platform
edi_energy_scraper-2.6.4-py3-none-any.whl Python 3 none any Details

Total release size: 168.1 kB

Release files / edi_energy_scraper-2.6.4.tar.gz

Download URL edi_energy_scraper-2.6.4.tar.gz
Size 145.8 kB
Tags Source
SHA-256 checksum
How to use checksums
33961547ff52383acd32d82fe31a1ae77940d37cdbe0776727d2a71e7fb3a675
BLAKE2b-256 checksum
How to use checksums
f1e5d9053cb1e0d26320e14e4e2c648b14322c4dfc515dd84182121770634c11
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 1, 2026.

Transparency log

Release files / edi_energy_scraper-2.6.4-py3-none-any.whl

Download URL edi_energy_scraper-2.6.4-py3-none-any.whl
Size 22.3 kB
Tags Python 3
SHA-256 checksum
How to use checksums
8b7f24d0cf876772ba595dd2814cd27e8683c986fd55d0417c67511a21278bd7
BLAKE2b-256 checksum
How to use checksums
81c35fd380d9470fff4e311beaa79a95ec45702f98efbbb0a717e319f9404c2a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 1, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

2.6.4 This release

2 release files

2.6.3

2 release files

2.6.2

2 release files

2.6.1

2 release files

2.6.0

2 release files

2.5.2

2 release files

2.5.1

2 release files

2.5.0

2 release files

2.4.2

2 release files

2.4.0

2 release files

2.3.0

2 release files

2.2.3

2 release files

2.2.0

2 release files

2.1.0

2 release files

2.0.8

2 release files

2.0.7

2 release files

2.0.6

2 release files

2.0.5

2 release files

2.0.4

2 release files

2.0.3

2 release files

2.0.2

2 release files

2.0.1

2 release files

2.0.0

2 release files

1.0.0

2 release files

0.8.1

2 release files

0.8.0

2 release files

0.7.1

2 release files

0.7.0

2 release files

0.6.1

2 release files

0.6.0

2 release files

0.5.0

2 release files

0.4.1

2 release files

0.4.0

2 release files

0.3.1

2 release files

0.3.0

2 release files

0.2.2

2 release files

0.2.1

2 release files

0.2.0

2 release files

0.1.1

2 release files

0.1.0

2 release files

0.0.8

2 release files

0.0.7

2 release files

0.0.6

2 release files

0.0.5

2 release files

0.0.4

2 release files

0.0.3

2 release files

0.0.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page