Generates a simple HTML page from your Spotify extended streaming history just by telling it where the directory is.
Example page mbektic.com/SESH
- If you want to get a copy of your Spotify extended streaming history, you can get it HERE
- I wrote this using python 3.13.5, but any recent version of python should work.
- Double click
GenerateHTMLSummary.pyor run the script via terminal usingpython.exe .\GenerateHTMLSummary.py- A gui like the one below will pop up.

- Click browse and select the folder that contains your extracted JSON files.
- After altering the settings to your liking, click "Generate Summary"
- It will take a few seconds to generate the report, you can see the progress with the progress bar.

- You should get a confirmation screen like so, clicking "Open Report" should open it in your web browser.

- The file will have generated in the same folder as the script if you wish to revisit it later.
- After opening the page, you can switch between playtime and play count as well as theme by clicking the settings button at the top right of the page.
- If you wish to change the default settings, they are found in the
config.pyfile.- You can also run the script like so
python.exe .\GenerateHTMLSummary.py --skip-gui - It will skip the GUI and just generate the report with the values in
config.py- You will need to set the default directory in the
config.py.
- You will need to set the default directory in the
- You can also run the script like so
You can optionally filter out any plays before a specified year. This is useful if you only want to analyze recent listening history.
-
In the GUI:
- Check "Filter out plays before this year" in the "Minimum Year (optional)" section.
- Enter a year (e.g., 2020). Valid range is 1900–3000. If the field is empty or invalid, you’ll be prompted to fix it.
-
In
config.py(when using--skip-guior setting defaults):- Set
MIN_YEARto an integer (e.g.,MIN_YEAR = 2020) to enable filtering. - Set
MIN_YEAR = Noneto disable filtering (default). - Any invalid value or out‑of‑range year will automatically disable the filter during validation.
- Set
What gets filtered:
- All processing steps ignore entries whose timestamp year is less than
MIN_YEAR. - This applies to all statistics and also to the "On This Day" section.
In config.py there is a flag set COMPRESS_TABLE_DATA = True.
If you are experiencing issues with the generated HTML file, you can try setting this to False.
- When you first open the HTML page, it can take a few seconds to load depending on how many years of history you have.
- For example, with 10 years of history mine sometimes takes 2–3 seconds.
- The resulting
.htmlfile can be shared without any of the other scripts or style files as everything is all built into it. - None of your data ever leaves your system or is uploaded anywhere, this all stays on your machine.
This will filter the tables based on the year selected.
By selecting custom, you can select any date range for the tables.

You can also click on any track here to open it on Spotify.

You can also click on any track here to open it on Spotify.













