Japanese Electricity Market Data Hub

Download Japanese Power Market Data

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.

JEPX Data

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.

Calendar Year JEPX DA Spot files

JEPX Data Inventory: Full historical spot price datasets available for download:

jepxSpot.csv intradaySpotPrice.csv

JEPX DA Spot Schema

JP: 受渡日, 時刻コード, 売り入札量(kWh), 買い入札量(kWh), 約定総量(kWh), システムプライス(円/kWh), エリアプライス北海道(円/kWh), エリアプライス東北(円/kWh), エリアプライス東京(円/kWh), エリアプライス中部(円/kWh), エリアプライス北陸(円/kWh), エリアプライス関西(円/kWh), エリアプライス中国(円/kWh), エリアプライス四国(円/kWh), エリアプライス九州(円/kWh), 売りブロック入札総量(kWh), 売りブロック約定総量(kWh), 買いブロック入札総量(kWh), 買いブロック約定総量(kWh)

EN: Date, PeriodID, Sell Bid Volume kWh, Buy Bid Volume kWh, Contracted Total Volume kWh, System Price Yen/kWh, Hokkaido Yen/kWh, Tohoku Yen/kWh, Tokyo Yen/kWh, Chuubu Yen/kWh, Hokuriku Yen/kWh, Kansai Yen/kWh, Chuugoku Yen/kWh, Shikoku Yen/kWh, Kyushu Yen/kWh, Sell Block Bid Total Volume kWh, Sell Block Contracted Total Volume kWh, Buy Block Bid Total Volume kWh, Buy Block Contracted Total Volume kWh
Intraday Schema

JP: 年月日, 時刻コード, 始値(円/kWh), 高値(円/kWh), 安値(円/kWh), 終値(円/kWh), 平均(円/kWh), 約定量合計(kWh), 約定件数

EN: Date, PeriodID, Opening Price Yen/kWh, High Price Yen/kWh, Low Price Yen/kWh, Closing Price Yen/kWh, Average Price Yen/kWh, Contracted Volume Total kWh, Number of Contracts or Trade Count

Half-Hourly Demand and Generation Mix Back to Start of 2024

These files cover all regions: Hokkaido, Tohoku, Tokyo, Chuubu, Hokuriku, Kansai, Chuugoku, Shikoku, Kyushu.

Regional Demand & Generation Mix: Half-hourly datasets available for download:

Regional Generation Mix & Demand Schema

JP: エリア需要, 原子力, 火力(LNG), 火力(石炭), 火力(石油), 火力(その他), 水力, 地熱, バイオマス, 太陽光発電実績, 太陽光出力制御量, 風力発電実績, 風力出力制御量, 揚水, 蓄電池, 連系線, その他, 合計

EN: Area Demand (MW), Nuclear, Thermal (LNG), Thermal (Coal), Thermal (Oil), Thermal (Other), Hydroelectric, Geothermal, Biomass, Solar PV Output, Solar PV Curtailment, Wind Power Output, Wind Power Curtailment, Pumped Storage, Battery Storage, Interconnected Lines, Others, Total

Note: Each ISO provides half-hourly data back to different dates, so the files do not all start and end on the same date.

Demand Data Pre-2024

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:


Hourly Demand Schema (Pre-2024)

Fields: Date, Time, Hokkaido, Tohoku, Tokyo, Chuubu, Hokuriku, Kansai, Chuugoku, Shikoku, Kyushu

Note: Values represent regional power demand in MW at hourly resolution.

5-Minute Interconnector Flows and Available Transfer Capacity

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:


5-Minute Interconnector Flow Schema

JP: 対象日時, 対象日付, PeriodID, 北海道・本州間電力連系設備_潮流実績, 北海道・本州間電力連系設備_空容量(順 方向), 北海道・本州間電力連系設備_空容量(逆方向), 相馬双葉幹線_潮流実績, 相馬双葉幹線_空容量(順方向), 相馬双葉幹線_空容量(逆方向), 周 波数変換設備_潮流実績, 周波数変換設備_空容量(順方向), 周波数変換設備_空容量(逆方向), 三重東近江線_潮流実績, 三重東近江線_空容量(順方 向), 三重東近江線_空容量(逆方向), 南福光連系所・南福光変電所の連系設備_潮流実績, 南福光連系所・南福光変電所の連系設備_空容量(順方向), 南福光連系所・南福光変電所の連系設備_空容量(逆方向), 越前嶺南線_潮流実績, 越前嶺南線_空容量(順方向), 越前嶺南線_空容量(逆方向), 西播 東岡山線・山崎智頭線_潮流実績, 西播東岡山線・山崎智頭線_空容量(順方向), 西播東岡山線・山崎智頭線_空容量(逆方向), 阿南紀北直流幹線_潮 流実績, 阿南紀北直流幹線_空容量(順方向), 阿南紀北直流幹線_空容量(逆方向), 本四連系線_潮流実績, 本四連系線_空容量(順方向), 本四連系線_ 空容量(逆方向), 関門連系線_潮流実績, 関門連系線_空容量(順方向), 関門連系線_空容量(逆方向), 中部フェンス_潮流実績, 中部フェンス_空容量 (順方向), 中部フェンス_空容量(逆方向), 北陸フェンス_潮流実績, 北陸フェンス_空容量(順方向), 北陸フェンス_空容量(逆方向), 関西フェンス_ 潮流実績, 関西フェンス_空容量(順方向), 関西フェンス_空容量(逆方向)

EN: datetime, Date, PeriodID, hokkaido_honshu_actual_flow_mw, hokkaido_honshu_available_transfer_capacity_forward_mw, hokkaido_honshu_available_transfer_capacity_reverse_mw, tohoku_tokyo_actual_flow_mw, tohoku_tokyo_available_transfer_capacity_forward_mw, tohoku_tokyo_available_transfer_capacity_reverse_mw, tokyo_chubu_frequency_converter_actual_flow_mw, tokyo_chubu_frequency_converter_available_transfer_capacity_forward_mw, tokyo_chubu_frequency_converter_available_transfer_capacity_reverse_mw, chubu_kansai_actual_flow_mw, chubu_kansai_available_transfer_capacity_forward_mw, chubu_kansai_available_transfer_capacity_reverse_mw, chubu_hokuriku_actual_flow_mw, chubu_hokuriku_available_transfer_capacity_forward_mw, chubu_hokuriku_available_transfer_capacity_reverse_mw, hokuriku_kansai_actual_flow_mw, hokuriku_kansai_available_transfer_capacity_forward_mw, hokuriku_kansai_available_transfer_capacity_reverse_mw, kansai_chugoku_actual_flow_mw, kansai_chugoku_available_transfer_capacity_forward_mw, kansai_chugoku_available_transfer_capacity_reverse_mw, kansai_shikoku_actual_flow_mw, kansai_shikoku_available_transfer_capacity_forward_mw, kansai_shikoku_available_transfer_capacity_reverse_mw, chugoku_shikoku_actual_flow_mw, chugoku_shikoku_available_transfer_capacity_forward_mw, chugoku_shikoku_available_transfer_capacity_reverse_mw, chugoku_kyushu_actual_flow_mw, chugoku_kyushu_available_transfer_capacity_forward_mw, chugoku_kyushu_available_transfer_capacity_reverse_mw, chubu_fence_actual_flow_mw, chubu_fence_available_transfer_capacity_forward_mw, chubu_fence_available_transfer_capacity_reverse_mw, hokuriku_fence_actual_flow_mw, hokuriku_fence_available_transfer_capacity_forward_mw, hokuriku_fence_available_transfer_capacity_reverse_mw, kansai_fence_actual_flow_mw, kansai_fence_available_transfer_capacity_forward_mw, kansai_fence_available_transfer_capacity_reverse_mw

Note: PeriodID runs from 1 to 288 for each day, with one row per five-minute interval.

JEPX Bid Offer / Bidding Curve Parquet files

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:

JEPX Bid Offer Curve Schema

JP: 電力受渡日, 商品コード, 電力受渡日 + 商品コードから算出した開始時刻, 電力受渡日 + 商品コードから算出した終了時刻, 分断エリア連番, 分断エリア連番, エリアグループ, エリアグループ, 売入札量累積 / 買入札量累積, グラフ描画順, 売入札量累積(MW) / 買入札量累積(MW), 入札価格(円/kWh)

EN: delivery_date, period_id, period_start_jst, period_end_jst, split_area_id, source_split_area_id, area_group_jp, area_group_en, curve_side, point_order, volume_mw, bidding_price_jpy_per_kwh

Note: curve_side is Sell or Buy. Sell corresponds to the blue sell curve and Buy corresponds to the red buy curve on the JEPX bidding curve chart. Split area groups can change by delivery date and period ID. Join to JEPX spot data using delivery_date plus period_id.

Weather for the Main City in Each Region

Daily maximum temperature and daily minimum temperature.

Weather Data Inventory: Historical temperature datasets available for download:


Weather Data Schema

Fields: DateTime, Sapporo TMax, Sapporo TMin, Sendai TMax, Sendai TMin, Tokyo TMax, Tokyo TMin, Nagoya TMax, Nagoya TMin, Kanazawa TMax, Kanazawa TMin, Osaka TMax, Osaka TMin, Hiroshima TMax, Hiroshima TMin, Matsuyama TMax, Matsuyama TMin, Fukuoka TMax, Fukuoka TMin

Note: TMax is daily maximum temperature, TMin is daily minimum temperature.

API & Direct Data Access: Automate Your Analysis

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.

Example Endpoint: https://japanesepower.org/jepxSpot.csv
Note: You can replace the filename in this URL with any of the CSVs listed above.

Excel: Live Data Feeds via Power Query

For analysts using Excel, Power Query provides a robust, zero-code pipeline to create a continuous connection rather than a static snapshot.

  1. Navigate to the Data tab on the Excel ribbon.
  2. Select Get Data > From Other Sources > From Web.
  3. Paste the endpoint URL into the dialog box and click OK.
  4. Verify the preview and click Load to populate a structured table.

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: Data Ingestion for Quantitative Modeling

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())

MATLAB: Direct Imports for Mathematical Modeling

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)

Julia: High-Performance Scientific Computing

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)

R: Statistical Computing & Time-Series Analysis

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: Native Remote Querying for Quants

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;

SQLite: Building a Local Data Warehouse

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.")

PostgreSQL: Production Database Ingestion

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);"

OpenAI API: LLM-Powered Market Analysis

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)

Anthropic Claude API: Deep Reasoning Analysis

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)

Bash & Cron: Directory Monitoring on Linux

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

LangChain: AI Agent Data Analysis

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)

Apache Airflow: Automated ETL Pipelines

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

Disclaimer

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.