Download Japanese electricity market CSV files, including JEPX spot data, half-hourly regional demand and generation mix data, historical demand data, and weather data for the main city in each region.
Historical JEPX day-ahead and intraday spot market price data in CSV format. 2011 to Present day -- the JEPX DA Spot Data file size of this is large approx 40meg.
JEPX Data Inventory: Full historical spot price datasets available for download:
These files cover all regions: Hokkaido, Tohoku, Tokyo, Chuubu, Hokuriku, Kansai, Chuugoku, Shikoku, Kyushu.
Regional Demand & Generation Mix: Half-hourly datasets available for download:
Data before 31-Mar-2024 was provided at one-hour resolution for all nine Japanese power regions.
Historical Demand Inventory: Hourly resolution datasets available for download:
Five-minute OCCTO interconnector actual flows and available transfer capacity from 1-Apr-2025 onward. Note there are some holes in the data. The reason it does not go back before this date is that OCCTO changed the reported data from 1-Apr-2025.
Interconnector Data Inventory: Five-minute interconnector actual flow and available transfer capacity dataset:
JEPX day-ahead bid offer curve data from 1-Jan-2025 onward. These files contain the plotted Buy and Sell bidding curve points for each delivery date, each half-hour period ID, and each split area group. Each day has 48 half-hour periods. Files are ZSTD-compressed Parquet split into half-year blocks.
JEPX Bid Offer Curve Inventory: Half-year ZSTD Parquet datasets available for download:
Daily maximum temperature and daily minimum temperature.
Weather Data Inventory: Historical temperature datasets available for download:
Streamline your quantitative modeling and algorithmic trading workflows with direct programmatic access. Connect your analytical tools directly to the live CSV feeds, ensuring your models always run on the latest market data without manual downloads.
https://japanesepower.org/jepxSpot.csvFor analysts using Excel, Power Query provides a robust, zero-code pipeline to create a continuous connection rather than a static snapshot.
Automating Updates: Press Ctrl + Alt + F5 to instantly refresh. To set up continuous feeds, click anywhere in the loaded table, go to Data > Connection Properties, and configure the connection to refresh on a timer or upon opening the file.
Python is the standard for power market forecasting. Use Pandas (the industry standard) or Polars (for high-performance, multi-threaded execution) to ingest remote CSVs natively.
# 1. Using Pandas
import pandas as pd
url = "https://japanesepower.org/jepxSpot.csv"
jepx_df = pd.read_csv(url)
print(jepx_df.head())
# 2. Using Polars
import polars as pl
url = "https://japanesepower.org/jepxSpot.csv"
jepx_df = pl.read_csv(url)
print(jepx_df.head())
For complex structural modeling or volatility surfaces, the native readtable function easily handles remote CSV ingestion without external toolboxes.
% Define the JEPX data endpoint
url = 'https://japanesepower.org/jepxSpot.csv';
% Read the live CSV directly into a MATLAB table array
jepx_data = readtable(url);
head(jepx_data)
For heavy quantitative modeling, grid optimization, and solving differential equations, Julia offers near-C speeds. You can ingest the remote CSV directly into a Julia DataFrame using the native Downloads and CSV packages.
# Using Julia to ingest remote market data
using CSV, DataFrames, Downloads
# Download and parse the live CSV directly into memory
url = "https://japanesepower.org/jepxSpot.csv"
jepx_df = CSV.read(Downloads.download(url), DataFrame)
# Display the top rows
first(jepx_df, 5)
Pulling remote CSVs in R is natively supported. You can use Base R or the highly performant data.table package for algorithmic backtesting.
# 1. Using Base R (Zero Dependencies)
url <- "https://japanesepower.org/jepxSpot.csv"
jepx_data <- read.csv(url)
head(jepx_data)
# 2. Using data.table (High-Performance)
library(data.table)
url <- "https://japanesepower.org/jepxSpot.csv"
jepx_dt <- fread(url)
head(jepx_dt)
DuckDB is an in-process SQL OLAP database designed for analytical workflows. Unlike traditional databases, DuckDB can query your remote CSVs directly over HTTP without requiring a manual download step.
-- Run this directly in the DuckDB CLI to create a table from the live URL
CREATE TABLE jepx_spot AS
SELECT * FROM read_csv_auto('https://japanesepower.org/jepxSpot.csv');
-- Or just query it on the fly without saving
SELECT * FROM read_csv_auto('https://japanesepower.org/jepxSpot.csv') LIMIT 5;
For lightweight, local storage, SQLite is ubiquitous. The cleanest way to ingest a remote URL into SQLite is using Python as a bridge to automatically handle the download and table creation.
# Using Python to pipe the CSV URL directly into a local SQLite file
import pandas as pd
import sqlite3
url = "https://japanesepower.org/jepxSpot.csv"
conn = sqlite3.connect('japan_power.db')
# Downloads and writes to the 'jepx_spot' table, replacing it if it exists
pd.read_csv(url).to_sql('jepx_spot', conn, if_exists='replace', index=False)
print("Data successfully loaded into SQLite.")
For enterprise-scale environments, PostgreSQL is the standard. You can use terminal tools to stream the remote CSV directly into your database using the \copy command, bypassing the need to save the file locally first.
# Run this in your bash terminal
# It uses curl to fetch the URL and pipes it directly into PostgreSQL
curl -s https://japanesepower.org/jepxSpot.csv | psql -U your_username -d your_database -c "\copy jepx_spot FROM STDIN WITH (FORMAT csv, HEADER true);"
While LLMs do not natively ingest remote files, you can seamlessly pipe live JEPX data directly into the OpenAI API. This allows you to build automated agents that generate daily market summaries, detect pricing anomalies, or draft trading reports.
# Using Python to pass live JEPX data directly to OpenAI
import pandas as pd
from openai import OpenAI
# 1. Fetch the live market data from the endpoint
url = "https://japanesepower.org/jepxSpot.csv"
jepx_df = pd.read_csv(url)
# 2. Convert the latest data into a text string for the LLM
# Here we take the most recent 10 half-hourly periods
latest_data_string = jepx_df.tail(10).to_csv(index=False)
# 3. Send to OpenAI for automated analysis
client = OpenAI(api_key="YOUR_OPENAI_API_KEY")
prompt = f"Act as a quantitative analyst. Summarize the following recent JEPX spot market conditions, noting any significant price spikes:\n\n{latest_data_string}"
response = client.chat.completions.create(
model="gpt-5.4",
messages=[{"role": "user", "content": prompt}]
)
print(response.choices[0].message.content)
Many quants prefer Anthropic's Claude models for complex data analysis and coding tasks. Just like with OpenAI, you can seamlessly pass your live remote CSVs into the Anthropic SDK to automate market reporting and anomaly detection.
# Using Python to pass live JEPX data directly to Claude
import pandas as pd
import anthropic
# 1. Fetch the live market data from the endpoint
url = "https://japanesepower.org/jepxSpot.csv"
jepx_df = pd.read_csv(url)
# 2. Convert the latest data into a text string
latest_data_string = jepx_df.tail(10).to_csv(index=False)
# 3. Send to Anthropic for automated analysis
client = anthropic.Anthropic(api_key="YOUR_ANTHROPIC_API_KEY")
prompt = f"Act as a quantitative analyst. Summarize the following recent JEPX spot market conditions:\n\n{latest_data_string}"
message = client.messages.create(
model="claude-3-5-sonnet-latest",
max_tokens=1000,
messages=[{"role": "user", "content": prompt}]
)
print(message.content[0].text)
If your orchestration relies on standard Linux tooling rather than an LLM agent, you can set up a simple bash script via cron to pull the data daily and pipe it into your active working directory.
# Add this to your crontab (crontab -e) to automatically fetch JEPX data every day at 14:00
# It downloads the CSV and moves it into your monitoring directory
0 14 * * * curl -s https://japanesepower.org/jepxSpot.csv -o /path/to/your/data_directory/jepxSpot_$(date +\%Y\%m\%d).csv
For developers building Retrieval-Augmented Generation (RAG) applications or autonomous agents, LangChain is the industry standard. You can ingest the live JEPX endpoint directly into a LangChain Pandas DataFrame Agent, allowing your LLM to execute complex statistical queries against the live market data.
# Using LangChain to create an interactive QA agent over live JEPX data
from langchain_experimental.agents.agent_toolkits import create_pandas_dataframe_agent
from langchain_openai import ChatOpenAI
import pandas as pd
# 1. Ingest the live CSV directly into Pandas
url = "https://japanesepower.org/jepxSpot.csv"
jepx_df = pd.read_csv(url)
# 2. Initialize the LLM and the LangChain Agent
llm = ChatOpenAI(model="gpt-5.4", temperature=0)
agent = create_pandas_dataframe_agent(llm, jepx_df, verbose=True, allow_dangerous_code=True)
# 3. Query the live market data using natural language
response = agent.run("Calculate the 7-day rolling average for the Tokyo Area Price and identify the highest peak.")
print(response)
For enterprise-grade data orchestration, you can easily integrate the JEPX data feeds into your Apache Airflow DAGs. This setup ensures your internal data warehouse automatically fetches and updates market data on a precise schedule without manual intervention.
# Save this as jepx_pipeline.py in your Airflow dags/ directory
from airflow import DAG
from airflow.operators.bash import BashOperator
from datetime import datetime, timedelta
# Define standard DAG arguments
default_args = {
'owner': 'quant_team',
'start_date': datetime(2026, 1, 1),
'retries': 2,
'retry_delay': timedelta(minutes=5),
}
# Create a DAG that runs daily at 14:00 JST to fetch the latest JEPX data
with DAG('jepx_daily_ingestion', default_args=default_args, schedule_interval='0 14 * * *') as dag:
fetch_spot_data = BashOperator(
task_id='download_jepx_csv',
bash_command='curl -s https://japanesepower.org/jepxSpot.csv -o /opt/data/warehouse/jepx_latest.csv'
)
Developers and AI agents can access our full data catalog here: files.json
Useful Links |
Downloads |
The data and resulting information on this site are provided for informational purposes only and are not intended for commercial use. The data sources and hosting resources for this site do not guarantee the accuracy of the data or its availability at all times.
Keywords: Japan Electricity, Japanese Electricity, Japan Power, Japanese Power, JEPX, Japan Electricity Power Exchange, Japanese Power Demand, Japanese Electricity Demand, Japanese Power Market Data Download, Half-Hourly Demand Data, Generation Mix CSV
Data sources: Spot Price from JEPX, demand data from various regional companies, and weather data from JMA.