Add official US and European collection and calendar storage
Collect official RSS and Atom summaries, preserve historical captures, and poll macro releases with bounded cadence and Retry-After handling. Separate news collectors from the economic calendar worker. Track statistical periods, publication stages, first observations, revisions, and current official series. Include explicit migration files and isolated archive, parsing, and import tests; no migration or import is executed by this commit. Keep dependency declarations and lockfile together for PDF archives and the upcoming captcha integration. Verify the staged snapshot with 90 focused tests.
This commit is contained in:
1 parent
5fa1e37fd4
commit
e8ca4daa0e
76 files changed
+18923
-4
No files matched your search
@@ -0,0 +1,37 @@
|
||||
"""新增国外新闻和宏观公告来源。
|
||||
|
||||
Revision ID: e6f8a2c4d109
|
||||
Revises: d2a4c6e8f103
|
||||
"""
|
||||
|
||||
from alembic import op
|
||||
import sqlalchemy as sa
|
||||
|
||||
revision = "e6f8a2c4d109"
|
||||
down_revision = "d2a4c6e8f103"
|
||||
branch_labels = None
|
||||
depends_on = None
|
||||
|
||||
|
||||
def upgrade() -> None:
|
||||
sources = sa.table(
|
||||
"sources",
|
||||
sa.column("code", sa.String), sa.column("name", sa.String), sa.column("list_url", sa.String),
|
||||
sa.column("enabled", sa.Boolean), sa.column("interval_seconds", sa.Integer),
|
||||
sa.column("backfill_hours", sa.Integer), sa.column("consecutive_failures", sa.Integer),
|
||||
)
|
||||
op.bulk_insert(sources, [
|
||||
{"code": code, "name": name, "list_url": url, "enabled": enabled,
|
||||
"interval_seconds": 60, "backfill_hours": 72, "consecutive_failures": 0}
|
||||
for code, name, url, enabled in [
|
||||
("coindesk", "CoinDesk", "https://www.coindesk.com/arc/outboundfeeds/rss/", True),
|
||||
("fed", "美联储·政策与讲话", "https://www.federalreserve.gov/feeds/feeds.htm", True),
|
||||
("bls", "美国劳工统计局·CPI/PPI/就业", "https://www.bls.gov/feed/", True),
|
||||
("bea", "美国经济分析局", "https://apps.bea.gov/rss/rss.xml", True),
|
||||
]
|
||||
])
|
||||
|
||||
|
||||
def downgrade() -> None:
|
||||
# 已有采集记录时由外键拒绝回退,不级联删除新闻、原始响应或日志。
|
||||
op.execute("DELETE FROM sources WHERE code IN ('coindesk', 'fed', 'bls', 'bea')")
|
||||
@@ -0,0 +1,47 @@
|
||||
"""日历统计期、发布阶段及当前官方历史序列。
|
||||
|
||||
Revision ID: a8c1d4e7f230
|
||||
Revises: f7a9b3d5e210
|
||||
"""
|
||||
from alembic import op
|
||||
import sqlalchemy as sa
|
||||
|
||||
revision = "a8c1d4e7f230"
|
||||
down_revision = "f7a9b3d5e210"
|
||||
branch_labels = None
|
||||
depends_on = None
|
||||
|
||||
|
||||
def upgrade() -> None:
|
||||
op.add_column("economic_releases", sa.Column("period", sa.String(10)))
|
||||
op.add_column("economic_releases", sa.Column("stage", sa.String(16)))
|
||||
op.add_column("sources", sa.Column("collector", sa.String(16), nullable=False, server_default="news"))
|
||||
sources = sa.table("sources", *[sa.column(k, t) for k, t in [
|
||||
("code", sa.String), ("name", sa.String), ("list_url", sa.String), ("collector", sa.String),
|
||||
("enabled", sa.Boolean), ("interval_seconds", sa.Integer), ("backfill_hours", sa.Integer),
|
||||
("consecutive_failures", sa.Integer),
|
||||
]])
|
||||
op.bulk_insert(sources, [{"code": "umich", "name": "密歇根大学·经济日历", "collector": "calendar",
|
||||
"list_url": "https://www.sca.isr.umich.edu/", "enabled": True,
|
||||
"interval_seconds": 3600, "backfill_hours": 0, "consecutive_failures": 0}])
|
||||
op.create_table(
|
||||
"economic_series_values",
|
||||
sa.Column("id", sa.Integer, primary_key=True),
|
||||
sa.Column("source", sa.String(16), nullable=False),
|
||||
sa.Column("indicator", sa.String(48), nullable=False),
|
||||
sa.Column("period", sa.String(10), nullable=False),
|
||||
sa.Column("stage", sa.String(16), nullable=False),
|
||||
sa.Column("value", sa.String(64), nullable=False),
|
||||
sa.Column("captured_at", sa.DateTime(timezone=True), nullable=False),
|
||||
sa.Column("raw_response_id", sa.BigInteger, sa.ForeignKey("raw_responses.id"), nullable=False),
|
||||
sa.UniqueConstraint("source", "indicator", "period", "stage"),
|
||||
)
|
||||
|
||||
|
||||
def downgrade() -> None:
|
||||
# 已有原始响应时外键拒绝删除来源,不级联删除用户数据。
|
||||
op.execute("DELETE FROM sources WHERE code = 'umich'")
|
||||
op.drop_table("economic_series_values")
|
||||
op.drop_column("sources", "collector")
|
||||
op.drop_column("economic_releases", "stage")
|
||||
op.drop_column("economic_releases", "period")
|
||||
@@ -0,0 +1,54 @@
|
||||
"""美国经济日历与原始公布修订。
|
||||
|
||||
Revision ID: f7a9b3d5e210
|
||||
Revises: e6f8a2c4d109
|
||||
"""
|
||||
from alembic import op
|
||||
import sqlalchemy as sa
|
||||
from sqlalchemy.dialects import postgresql
|
||||
|
||||
revision = "f7a9b3d5e210"
|
||||
down_revision = "e6f8a2c4d109"
|
||||
branch_labels = None
|
||||
depends_on = None
|
||||
|
||||
|
||||
def upgrade() -> None:
|
||||
op.create_table(
|
||||
"economic_releases",
|
||||
sa.Column("id", sa.Integer, primary_key=True),
|
||||
sa.Column("source", sa.String(16), nullable=False),
|
||||
sa.Column("external_id", sa.String(160), nullable=False),
|
||||
sa.Column("family", sa.String(16), nullable=False),
|
||||
sa.Column("title", sa.Text, nullable=False),
|
||||
sa.Column("scheduled_at", sa.DateTime(timezone=True), nullable=False),
|
||||
sa.Column("schedule_status", sa.String(16), nullable=False),
|
||||
sa.Column("schedule_url", sa.Text, nullable=False),
|
||||
sa.Column("release_url", sa.Text),
|
||||
sa.Column("schedule_checked_at", sa.DateTime(timezone=True), nullable=False),
|
||||
sa.Column("first_received_at", sa.DateTime(timezone=True)),
|
||||
sa.Column("last_checked_at", sa.DateTime(timezone=True)),
|
||||
sa.Column("next_check_at", sa.DateTime(timezone=True), nullable=False),
|
||||
sa.Column("error", sa.Text),
|
||||
sa.Column("values", postgresql.JSONB, nullable=False),
|
||||
sa.Column("revision_no", sa.Integer, nullable=False),
|
||||
sa.UniqueConstraint("source", "external_id"),
|
||||
)
|
||||
op.create_index("ix_economic_releases_scheduled_at", "economic_releases", ["scheduled_at"])
|
||||
op.create_index("ix_economic_releases_next_check_at", "economic_releases", ["next_check_at"])
|
||||
op.create_table(
|
||||
"economic_revisions",
|
||||
sa.Column("id", sa.Integer, primary_key=True),
|
||||
sa.Column("release_id", sa.Integer, sa.ForeignKey("economic_releases.id"), nullable=False),
|
||||
sa.Column("revision_no", sa.Integer, nullable=False),
|
||||
sa.Column("payload", postgresql.JSONB, nullable=False),
|
||||
sa.Column("raw_response_id", sa.BigInteger, sa.ForeignKey("raw_responses.id"), nullable=False),
|
||||
sa.Column("captured_at", sa.DateTime(timezone=True), server_default=sa.func.now(), nullable=False),
|
||||
sa.UniqueConstraint("release_id", "revision_no"),
|
||||
)
|
||||
op.create_index("ix_economic_revisions_release_id", "economic_revisions", ["release_id"])
|
||||
|
||||
|
||||
def downgrade() -> None:
|
||||
op.drop_table("economic_revisions")
|
||||
op.drop_table("economic_releases")
|
||||
@@ -0,0 +1,37 @@
|
||||
"""欧洲官方新闻与经济日历来源。
|
||||
|
||||
Revision ID: b9d2e5f8a341
|
||||
Revises: a8c1d4e7f230
|
||||
"""
|
||||
from alembic import op
|
||||
import sqlalchemy as sa
|
||||
|
||||
revision = "b9d2e5f8a341"
|
||||
down_revision = "a8c1d4e7f230"
|
||||
branch_labels = None
|
||||
depends_on = None
|
||||
|
||||
|
||||
def upgrade() -> None:
|
||||
sources = sa.table("sources", *[sa.column(k, t) for k, t in [
|
||||
("code", sa.String), ("name", sa.String), ("list_url", sa.String), ("collector", sa.String),
|
||||
("enabled", sa.Boolean), ("interval_seconds", sa.Integer), ("backfill_hours", sa.Integer),
|
||||
("consecutive_failures", sa.Integer),
|
||||
]])
|
||||
op.bulk_insert(sources, [
|
||||
{"code": code, "name": name, "list_url": url, "collector": "news", "enabled": True,
|
||||
"interval_seconds": 60, "backfill_hours": 72, "consecutive_failures": 0}
|
||||
for code, name, url in [
|
||||
("ecb", "欧洲央行·政策与讲话", "https://www.ecb.europa.eu/home/html/rss.en.html"),
|
||||
("eurostat", "Eurostat·欧元区统计", "https://ec.europa.eu/eurostat/news/euro-indicators"),
|
||||
("boe", "英国央行·政策与讲话", "https://www.bankofengland.co.uk/rss"),
|
||||
("ons", "英国国家统计局", "https://www.ons.gov.uk/releasecalendar"),
|
||||
("destatis", "德国联邦统计局", "https://www.destatis.de/DE/Presse/_inhalt.html"),
|
||||
("insee", "法国国家统计局", "https://www.insee.fr/fr/statistiques?categorie=10"),
|
||||
]
|
||||
])
|
||||
|
||||
|
||||
def downgrade() -> None:
|
||||
# 已有采集记录时由外键拒绝删除,不级联清理新闻或原始响应。
|
||||
op.execute("DELETE FROM sources WHERE code IN ('ecb','eurostat','boe','ons','destatis','insee')")
|
||||
@@ -15,8 +15,10 @@ dependencies = [
|
||||
"fastapi>=0.143.0",
|
||||
"httpx>=0.28.1",
|
||||
"openai>=3.30.0",
|
||||
"pillow>=13.0.0",
|
||||
"pydantic-settings>=2.15.0",
|
||||
"pyjwt>=2.15.1",
|
||||
"pypdf>=6.21.2",
|
||||
"redis>=8.1.0",
|
||||
"scrapy>=2.19.0",
|
||||
"scrapy-redis>=0.9.1",
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
"""美国经济日历:官方日程、公布值及可追溯修订,与新闻发布时间分开。"""
|
||||
@@ -0,0 +1,146 @@
|
||||
"""官方当期公告解析;归档内容不被标为公布时就已采集的原始版本。"""
|
||||
import re
|
||||
from dataclasses import dataclass
|
||||
from datetime import UTC, datetime
|
||||
|
||||
from parsel import Selector
|
||||
|
||||
from alphapulse.calendar.parsers import EASTERN, MONTHS, cells, compact, number, parse_values, release_metadata
|
||||
from alphapulse.calendar.umich import pdf_text
|
||||
|
||||
MONTH_PATTERN = "(?:" + "|".join(MONTHS) + ")"
|
||||
MOVEMENT = r"(increased|rose|advanced|edged up|moved up|declined|decreased|fell|edged down|moved down)\s+([\d.]+)\s*percent"
|
||||
|
||||
|
||||
@dataclass(frozen=True)
|
||||
class Announcement:
|
||||
at: datetime
|
||||
period: str | None
|
||||
stage: str | None
|
||||
values: dict
|
||||
|
||||
|
||||
def signed(match: re.Match) -> str:
|
||||
sign = "-" if match[1].lower() in {"declined", "decreased", "fell", "edged down", "moved down"} else ""
|
||||
return number(sign + match[2])
|
||||
|
||||
|
||||
def publication_time(text: str) -> datetime:
|
||||
date = re.search(MONTH_PATTERN + r"\s+\d{1,2},\s*20\d\d", text)
|
||||
clock = re.search(r"(\d{1,2}):(\d{2})\s*([ap])\.?m\.?", text, re.I)
|
||||
if date is None or clock is None:
|
||||
raise ValueError("官方公告缺少正式发布日期或公布时刻")
|
||||
day = datetime.strptime(re.sub(r",\s*", ", ", date[0]), "%B %d, %Y")
|
||||
hour = int(clock[1]) % 12 + (12 if clock[3].lower() == "p" else 0)
|
||||
return day.replace(hour=hour, minute=int(clock[2]), tzinfo=EASTERN).astimezone(UTC)
|
||||
|
||||
|
||||
def parse_bls_text(family: str, text: str) -> dict:
|
||||
"""PDF 的表格字体可能无法提取;只读取正文明确叙述的当期读数。"""
|
||||
text = re.sub(r"(?<=\d)\.\s+(?=\d)", ".", compact(text)).replace("−", "-")
|
||||
if family == "jobs":
|
||||
# 与实时 HTML 使用同一就业正文契约,不复制非农单位与负值规则。
|
||||
from html import escape
|
||||
return parse_values(family, '<div id="bodytext">' + escape(text) + '</div>')
|
||||
|
||||
def movement(pattern: str) -> str:
|
||||
match = re.search(pattern, text, re.I)
|
||||
if match is None:
|
||||
raise ValueError(f"BLS {family} 公告缺少明确的当期变化:{pattern}")
|
||||
return signed(match)
|
||||
|
||||
if family == "cpi":
|
||||
monthly = re.search(r"Consumer Price Index for All Urban Consumers.{0,80}?" + MOVEMENT, text, re.I)
|
||||
if monthly:
|
||||
mom = signed(monthly)
|
||||
elif re.search(r"Consumer Price Index for All Urban Consumers.{0,80}?(?:was |remained )?unchanged", text, re.I):
|
||||
mom = "0"
|
||||
else:
|
||||
raise ValueError("CPI 公告缺少整体月率")
|
||||
yoy = movement(r"(?:all items index|index for all items)\s+" + MOVEMENT + r"\s+(?:over|for)\s+the\s+(?:last\s+)?12\s*months")
|
||||
core = re.search(r"(?:index for all items less food and energy|all items less food and energy index)\s+" + MOVEMENT, text, re.I)
|
||||
if core:
|
||||
core_mom = signed(core)
|
||||
elif re.search(r"(?:index for all items less food and energy|all items less food and energy index)\s+(?:was |remained )?unchanged", text, re.I):
|
||||
core_mom = "0"
|
||||
else:
|
||||
raise ValueError("CPI 公告缺少核心月率")
|
||||
core_yoy = movement(r"(?:all items less food and energy index|index for all items less food and energy)\s+" + MOVEMENT + r"\s+(?:over|for)\s+the\s+(?:last\s+)?12\s*months")
|
||||
return {key: {"actual": value, "previous": None} for key, value in
|
||||
[("cpi_mom", mom), ("cpi_yoy", yoy), ("core_cpi_mom", core_mom), ("core_cpi_yoy", core_yoy)]}
|
||||
if family == "ppi":
|
||||
match = re.search(r"Producer Price Index for final demand\s+" + MOVEMENT, text, re.I)
|
||||
if match:
|
||||
mom = signed(match)
|
||||
elif re.search(r"Producer Price Index for final demand\s+(?:was |remained |were )?unchanged", text, re.I):
|
||||
mom = "0"
|
||||
else:
|
||||
raise ValueError("PPI 公告缺少最终需求月率")
|
||||
yoy = movement(r"(?:index for final demand|final demand prices)\s+" + MOVEMENT +
|
||||
r"\s+(?:in\s+20\d\d|(?:for|over)\s+the\s+(?:last\s+)?12[ -]month)")
|
||||
return {"ppi_mom": {"actual": mom, "previous": None}, "ppi_yoy": {"actual": yoy, "previous": None}}
|
||||
raise ValueError(f"不支持的 BLS PDF 指标:{family}")
|
||||
|
||||
|
||||
def parse_announcement(family: str, body: bytes, *, pdf: bool = False) -> Announcement:
|
||||
if pdf:
|
||||
text = compact(pdf_text(body, 1))
|
||||
values = parse_bls_text(family, text)
|
||||
title = text
|
||||
else:
|
||||
try:
|
||||
html = body.decode("utf-8")
|
||||
except UnicodeDecodeError:
|
||||
if family not in {"cpi", "ppi", "jobs"}:
|
||||
raise
|
||||
# 已核实的旧 BLS HTML 混用 Windows-1252 标点;保留原字节,限定此来源解码。
|
||||
html = body.decode("cp1252")
|
||||
sel = Selector(text=html, type="html")
|
||||
text = compact(sel.xpath("string(//body)").get())
|
||||
title = compact(" ".join(sel.css("h1,#bodytext").xpath("string(.)").getall()))
|
||||
if family == "pce" and re.search(r"[A-Z][a-z]+ and [A-Z][a-z]+ 20\d\d", title):
|
||||
raise ValueError("PCE 多统计期合并公告需分别核对各月,未将最后一列冒充全部月份")
|
||||
values = parse_values(family, html)
|
||||
at = publication_time(text)
|
||||
if family in {"cpi", "ppi", "jobs"}:
|
||||
label = {"cpi": "CONSUMER PRICE INDEX", "ppi": "PRODUCER PRICE INDEXES", "jobs": "EMPLOYMENT SITUATION"}[family]
|
||||
heading = re.search(label + r"\s*(?:[—–]|-{1,2})\s*(" + MONTH_PATTERN + r"\s+20\d\d)", title, re.I)
|
||||
period, stage = release_metadata(family, heading[1]) if heading else (None, None)
|
||||
else:
|
||||
period, stage = release_metadata(family, title)
|
||||
if family != "fomc" and period is None:
|
||||
raise ValueError("官方公告缺少统计期")
|
||||
if family == "gdp" and stage is None:
|
||||
raise ValueError("GDP 公告缺少发布阶段")
|
||||
return Announcement(at, period, stage, values)
|
||||
|
||||
|
||||
def parse_announcements(family: str, body: bytes, *, pdf: bool = False) -> list[Announcement]:
|
||||
if family != "pce" or pdf:
|
||||
return [parse_announcement(family, body, pdf=pdf)]
|
||||
sel = Selector(text=body.decode("utf-8"), type="html")
|
||||
title = compact(" ".join(sel.css("h1").xpath("string(.)").getall()))
|
||||
combined = re.search(r"(" + MONTH_PATTERN + r") and (" + MONTH_PATTERN + r") (20\d\d)", title)
|
||||
if combined is None:
|
||||
return [parse_announcement(family, body)]
|
||||
rows = [cells(n) for n in sel.css("table tr")]
|
||||
if ["", combined[1], combined[2]] not in rows:
|
||||
raise ValueError("PCE 合并公告表头未明确列示两个统计月")
|
||||
monthly = {r[0].replace("index,", "index"): r[1:] for r in rows if len(r) == 3}
|
||||
annual = next((compact(p.xpath("string(.)").get()) for p in sel.css(".field--name-body p")
|
||||
if "From the same month one year ago" in p.xpath("string(.)").get()), "")
|
||||
changes = re.findall(r"(increased|decreased|increase|decrease) (?:of )?(\d+(?:\.\d+)?) percent", annual)
|
||||
if len(changes) != 4 or "Excluding food and energy" not in annual:
|
||||
raise ValueError("PCE 合并公告缺少两个统计月的整体和核心年率")
|
||||
# 数值按明确表头分别读取,不把另一统计月标为前次公告值。
|
||||
at = publication_time(compact(sel.xpath("string(//body)").get()))
|
||||
result = []
|
||||
for i, month in enumerate((combined[1], combined[2])):
|
||||
values = {}
|
||||
for key, label in (("pce_mom", "PCE price index"), ("core_pce_mom", "PCE price index excluding food and energy")):
|
||||
values[key] = {"actual": number(monthly[label][i]), "previous": None}
|
||||
for key, offset in (("pce_yoy", 0), ("core_pce_yoy", 2)):
|
||||
movement, value = changes[offset + i]
|
||||
values[key] = {"actual": number(("-" if movement.startswith("decreas") else "") + value), "previous": None}
|
||||
result.append(Announcement(at, f"{combined[3]}-{MONTHS[month]:02d}", None, values))
|
||||
return result
|
||||
@@ -0,0 +1,372 @@
|
||||
"""官方日历历史回补。默认只读预览;--commit 才写库,不启动新闻或交易流程。
|
||||
|
||||
uv run python -m alphapulse.calendar.backfill --start 2025-01-01 [--stored-only] [--commit]
|
||||
按北京时间的公布日期筛选。归档可能已修订,first_received_at 保留真实采集时间,
|
||||
不能把本次回补用作当时已知信息。失败与无公告缺口会写入 JSON 输出并返回非零状态。
|
||||
写入时应暂停 calendar 进程,完成后恢复,避免与日程同步并发创建同一事件。
|
||||
"""
|
||||
import argparse
|
||||
import asyncio
|
||||
import gzip
|
||||
import json
|
||||
import re
|
||||
import ssl
|
||||
from collections import Counter
|
||||
from dataclasses import dataclass, field
|
||||
from datetime import UTC, date, datetime, time, timedelta
|
||||
from urllib.parse import urljoin, urlparse
|
||||
from zoneinfo import ZoneInfo
|
||||
|
||||
import httpx
|
||||
from parsel import Selector
|
||||
from sqlalchemy import select, text
|
||||
|
||||
from alphapulse.calendar.archives import Announcement, parse_announcements
|
||||
from alphapulse.calendar import europe
|
||||
from alphapulse.calendar.catalog import UMICH_CSV, UMICH_HISTORY, UMICH_HOME, UMICH_INFO
|
||||
from alphapulse.calendar.parsers import Scheduled, bea_family, compact
|
||||
from alphapulse.calendar.service import record_revision, save_raw, save_result, save_schedule, save_series
|
||||
from alphapulse.calendar.umich import current_result, document_links, monthly_series, parse_schedule, pdf_text
|
||||
from alphapulse.core.db import SessionLocal
|
||||
from alphapulse.core.official_sources import HOSTS as EUROPE_HOSTS
|
||||
from alphapulse.models import EconomicRelease, RawBody, RawResponse
|
||||
|
||||
LOCAL = ZoneInfo("Asia/Shanghai")
|
||||
HOSTS = {"bls": {"www.bls.gov", "www.dol.gov"}, "bea": {"www.bea.gov"},
|
||||
"fed": {"www.federalreserve.gov"}, "umich": {"www.sca.isr.umich.edu", "data.sca.isr.umich.edu"}}
|
||||
US_SOURCES = frozenset(HOSTS)
|
||||
HOSTS.update(EUROPE_HOSTS)
|
||||
|
||||
|
||||
@dataclass(frozen=True)
|
||||
class Document:
|
||||
source: str
|
||||
url: str
|
||||
body: bytes
|
||||
captured_at: datetime
|
||||
raw_id: int | None = None
|
||||
headers: dict[str, str] = field(default_factory=dict)
|
||||
|
||||
|
||||
def family_for(document: Document) -> str | None:
|
||||
if document.source in EUROPE_HOSTS:
|
||||
paths = {"ecb": r"/press/pr/date/20\d\d/html/ecb\.mp", "boe": r"/monetary-policy-summary-and-minutes/20\d\d/",
|
||||
"ons": r"/bulletins/", "eurostat": r"/(?:product\?|(?:en/)?web/products-euro-indicators/w/)",
|
||||
"destatis": r"/EN/Press/20\d\d/\d\d/PE", "insee": r"/fr/statistiques/\d+$"}
|
||||
if not re.search(paths[document.source], document.url):
|
||||
return None
|
||||
sel = Selector(text=document.body.decode("utf-8"), type="html")
|
||||
title = compact(" ".join(sel.css("h1").xpath("string(.)").getall()))
|
||||
target = europe.family_for(document.source, title)
|
||||
return target[0] if target else None
|
||||
if document.source == "bls":
|
||||
match = re.search(r"/(cpi|ppi|empsit)[._]", document.url)
|
||||
return {"cpi": "cpi", "ppi": "ppi", "empsit": "jobs"}[match[1]] if match else None
|
||||
if document.source == "bea":
|
||||
sel = Selector(text=document.body.decode("utf-8"), type="html")
|
||||
if any(compact(n.xpath("string(.)").get()).startswith("Personal Income and Outlays, Data Update")
|
||||
for n in sel.css("h1")):
|
||||
return None # 仅修订数据表的通知不是新的当期公布,不回滚原公告。
|
||||
return next((family for n in sel.css("h1") if (family := bea_family(compact(n.xpath("string(.)").get())))), None)
|
||||
if document.source == "fed":
|
||||
return "fomc" if re.search(rb"Federal Reserve issues FOMC statement", document.body) else None
|
||||
return None
|
||||
|
||||
|
||||
def archive_links(source: str, body: str, base: str, start: date, end: date) -> tuple[list[str], str | None]:
|
||||
"""只跟随官方索引的实际链接,不按月份合成公告地址。"""
|
||||
sel = Selector(text=body, type="html")
|
||||
links = []
|
||||
for node in sel.css("a[href]"):
|
||||
url = urljoin(base, node.attrib["href"])
|
||||
path = urlparse(url).path
|
||||
if source == "bls":
|
||||
match = re.search(r"/news.release/(?:archives/)?(?:cpi|ppi|empsit)_(\d{8})\.(?:htm|pdf)$", path)
|
||||
if match and start <= datetime.strptime(match[1], "%m%d%Y").date() <= end:
|
||||
links.append(url)
|
||||
elif source == "bea":
|
||||
match = re.search(r"/news/(20\d\d)/", path)
|
||||
if match and start.year <= int(match[1]) <= end.year and bea_family(compact(node.xpath("string(.)").get())):
|
||||
links.append(url)
|
||||
elif source == "fed":
|
||||
match = re.search(r"/pressreleases/monetary(\d{8})a\.htm$", path)
|
||||
if match and start <= datetime.strptime(match[1], "%Y%m%d").date() <= end:
|
||||
links.append(url)
|
||||
following = sel.css(".pager__item--next a::attr(href)").get() if source == "bea" else None
|
||||
# BEA 按发布时间倒序;整页已早于开始年份后,不再翻阅无关历史。
|
||||
years = [int(y) for y in re.findall(r"/news/(20\d\d)/", body)]
|
||||
if following and years and max(years) < start.year:
|
||||
following = None
|
||||
unique = set(links)
|
||||
# 同一公告优先使用带完整表格的 HTML;无需重复下载、解析同版 PDF。
|
||||
links = [u for u in dict.fromkeys(links) if not u.endswith(".pdf") or u[:-4] + ".htm" not in unique]
|
||||
return links, urljoin(base, following) if following else None
|
||||
|
||||
|
||||
async def ensure_quiet_window() -> None:
|
||||
now = datetime.now(UTC)
|
||||
async with SessionLocal() as session:
|
||||
await session.execute(text("SET TRANSACTION READ ONLY"))
|
||||
imminent = await session.scalar(select(EconomicRelease.id).where(
|
||||
EconomicRelease.schedule_status == "scheduled",
|
||||
EconomicRelease.scheduled_at.between(now - timedelta(minutes=2), now + timedelta(minutes=2)),
|
||||
).limit(1))
|
||||
if imminent is not None:
|
||||
raise RuntimeError("当前处于官方公布前后两分钟窗口,请稍后重跑回补")
|
||||
|
||||
|
||||
async def fetch_documents(start: date, end: date, known: set[str], errors: list[dict], *, sources: set[str] | None = None) -> list[Document]:
|
||||
documents = []
|
||||
selected = sources if sources is not None else US_SOURCES
|
||||
stopped_sources = set()
|
||||
|
||||
def report_error(source: str, url: str, exc: Exception) -> None:
|
||||
failure = {"source": source, "url": url, "error": str(exc)}
|
||||
if isinstance(exc, httpx.HTTPStatusError) and exc.response.status_code in (429, 503):
|
||||
stopped_sources.add(source)
|
||||
failure.update(retry_after=exc.response.headers.get("Retry-After"), stop_reason="已停止该来源,历史覆盖不完整。")
|
||||
errors.append(failure)
|
||||
|
||||
ctx = ssl.create_default_context()
|
||||
ctx.set_ciphers("DEFAULT")
|
||||
async with httpx.AsyncClient(timeout=15, follow_redirects=False) as client, httpx.AsyncClient(timeout=15, verify=ctx) as bls:
|
||||
async def fetch(source: str, url: str, *, query: dict | None = None) -> Document:
|
||||
parsed = urlparse(url)
|
||||
if parsed.scheme != "https" or parsed.hostname not in HOSTS[source]:
|
||||
raise ValueError("归档链接不是对应机构官方 HTTPS 地址")
|
||||
await ensure_quiet_window()
|
||||
await asyncio.sleep(1)
|
||||
current = url
|
||||
for _ in range(6):
|
||||
if urlparse(current).scheme != "https" or urlparse(current).hostname not in HOSTS[source]:
|
||||
raise ValueError("归档重定向不属于对应机构官方 HTTPS 地址")
|
||||
transport = bls if source == "bls" else client
|
||||
response = await transport.post(current, json=query, headers={"User-Agent": "AlphaPulse calendar history"}) if query is not None else await transport.get(current, headers={"User-Agent": "AlphaPulse calendar history"})
|
||||
if not response.is_redirect:
|
||||
break
|
||||
current = urljoin(current, response.headers["location"])
|
||||
if response.status_code == 303:
|
||||
query = None
|
||||
else:
|
||||
raise ValueError("官方归档重定向超过 5 次")
|
||||
response.raise_for_status()
|
||||
return Document(source, str(response.url), response.content, datetime.now(UTC), headers=dict(response.headers))
|
||||
|
||||
indexes = [("bls", f"https://www.bls.gov/bls/news-release/{name}.htm") for name in ("cpi", "ppi", "empsit")]
|
||||
indexes += [("bea", "https://www.bea.gov/news/archive?field_related_product_target_id=All&created_1=All&title="),
|
||||
("fed", "https://www.federalreserve.gov/monetarypolicy/fomccalendars.htm")]
|
||||
for source, initial in indexes:
|
||||
if source not in selected or source in stopped_sources:
|
||||
continue
|
||||
url = initial
|
||||
visited = set()
|
||||
while url:
|
||||
if url in visited:
|
||||
errors.append({"url": url, "error": "官方分页形成循环"})
|
||||
break
|
||||
visited.add(url)
|
||||
try:
|
||||
index = await fetch(source, url)
|
||||
links, following = archive_links(source, index.body.decode("utf-8"), url, start, end)
|
||||
if not links and url == initial:
|
||||
raise ValueError("官方归档未识别到目标公告,覆盖范围尚未核实")
|
||||
for link in links:
|
||||
if link in known:
|
||||
continue
|
||||
try:
|
||||
documents.append(await fetch(source, link))
|
||||
known.add(link)
|
||||
except (httpx.HTTPError, ValueError) as exc:
|
||||
if isinstance(exc, httpx.HTTPStatusError) and exc.response.status_code in (429, 503):
|
||||
raise
|
||||
report_error(source, link, exc)
|
||||
url = following
|
||||
except (httpx.HTTPError, ValueError) as exc:
|
||||
report_error(source, str(exc.request.url) if isinstance(exc, httpx.HTTPError) else url, exc)
|
||||
break
|
||||
from alphapulse.calendar.europe_archives import collect
|
||||
for source in sorted(selected & EUROPE_HOSTS.keys()):
|
||||
try:
|
||||
documents += await collect(source, start, end, fetch, known, errors)
|
||||
except (httpx.HTTPError, ValueError, KeyError, TypeError) as exc:
|
||||
report_error(source, str(exc.request.url) if isinstance(exc, httpx.HTTPError) else "", exc)
|
||||
for url in ((UMICH_HISTORY, UMICH_INFO, UMICH_HOME, UMICH_CSV) if "umich" in selected else ()):
|
||||
if "umich" in stopped_sources:
|
||||
break
|
||||
try:
|
||||
doc = await fetch("umich", url)
|
||||
documents.append(doc)
|
||||
if url in (UMICH_HISTORY, UMICH_INFO):
|
||||
labels = ({"Historical Prelim/Final Release Dates"} if url == UMICH_HISTORY else
|
||||
{f"{year} Release Dates" for year in range(start.year, end.year + 1)})
|
||||
links = document_links(doc.body.decode("utf-8"), url, labels)
|
||||
if not links:
|
||||
raise ValueError("密歇根官方索引缺少日程 PDF")
|
||||
for link in links.values():
|
||||
documents.append(await fetch("umich", link))
|
||||
except (httpx.HTTPError, ValueError) as exc:
|
||||
report_error("umich", str(exc.request.url) if isinstance(exc, httpx.HTTPError) else url, exc)
|
||||
return documents
|
||||
|
||||
|
||||
async def save_announcement(session, document: Document, family: str, announcement: Announcement, title: str) -> bool:
|
||||
# 官方公告日期+系列+期次定位已有 ICS 事件,保留其稳定 ID 与首次采集时间。
|
||||
candidates = list(await session.scalars(select(EconomicRelease).where(
|
||||
EconomicRelease.source == document.source, EconomicRelease.family == family,
|
||||
EconomicRelease.scheduled_at == announcement.at,
|
||||
).with_for_update()))
|
||||
candidates = [r for r in candidates if r.period in (None, announcement.period) and r.stage in (None, announcement.stage)]
|
||||
if len(candidates) > 1:
|
||||
raise ValueError("同日同系列匹配到多个日历事件,未写入")
|
||||
raw_id = document.raw_id
|
||||
row = candidates[0] if candidates else None
|
||||
# 回补不回滚已采集的结果;只为已知事件补充缺失的统计期和发布阶段。
|
||||
if row is not None and row.first_received_at is not None:
|
||||
if (row.period is not None or announcement.period is None) and (row.stage is not None or announcement.stage is None):
|
||||
return False
|
||||
if raw_id is None:
|
||||
raw_id = await save_raw(session, document.source, document.url, 200, document.headers, document.body, document.captured_at)
|
||||
row.period, row.stage = announcement.period, announcement.stage
|
||||
row.revision_no += 1
|
||||
record_revision(session, row, raw_id)
|
||||
return True
|
||||
if raw_id is None:
|
||||
raw_id = await save_raw(session, document.source, document.url, 200, document.headers, document.body, document.captured_at)
|
||||
if row is None:
|
||||
row = EconomicRelease(source=document.source, family=family,
|
||||
external_id=f"archive-{family}-{announcement.at:%Y%m%dT%H%M}-{announcement.period}-{announcement.stage}",
|
||||
title=title, period=announcement.period, stage=announcement.stage,
|
||||
scheduled_at=announcement.at, schedule_status="scheduled", schedule_url=document.url,
|
||||
schedule_checked_at=document.captured_at, next_check_at=datetime.now(UTC) + timedelta(days=1),
|
||||
values={}, revision_no=1)
|
||||
session.add(row)
|
||||
await session.flush()
|
||||
record_revision(session, row, raw_id)
|
||||
save_result(session, row, announcement.values, document.url, raw_id, document.captured_at,
|
||||
period=announcement.period, stage=announcement.stage)
|
||||
row.error = None
|
||||
return True
|
||||
|
||||
|
||||
async def run(start: date, end: date, *, commit: bool = False, stored_only: bool = False, sources: set[str] | None = None) -> dict:
|
||||
begin = datetime.combine(start, time.min, LOCAL).astimezone(UTC)
|
||||
finish = datetime.combine(end + timedelta(days=1), time.min, LOCAL).astimezone(UTC)
|
||||
errors = []
|
||||
selected = sources if sources is not None else US_SOURCES
|
||||
async with SessionLocal() as session:
|
||||
await session.execute(text("SET TRANSACTION READ ONLY"))
|
||||
rows = (await session.execute(select(RawResponse, RawBody.body).join(RawBody, RawBody.sha256 == RawResponse.body_sha256).where(
|
||||
RawResponse.source_code.in_(selected), RawResponse.status == 200,
|
||||
(RawResponse.url.contains("/news.release/") | RawResponse.url.contains("/newsroom/economicdata/") |
|
||||
RawResponse.url.contains("/news/202") | RawResponse.url.contains("/pressreleases/monetary") |
|
||||
(RawResponse.source_code == "umich") | RawResponse.source_code.in_(EUROPE_HOSTS)),
|
||||
).distinct(RawResponse.source_code, RawResponse.url, RawResponse.body_sha256)
|
||||
.order_by(RawResponse.source_code, RawResponse.url, RawResponse.body_sha256, RawResponse.id))).all()
|
||||
documents = [Document(r.source_code, r.url, gzip.decompress(body), r.fetched_at, r.id, r.headers) for r, body in rows]
|
||||
existing = list(await session.scalars(select(EconomicRelease).where(
|
||||
EconomicRelease.source.in_(selected), EconomicRelease.scheduled_at >= begin, EconomicRelease.scheduled_at < finish)))
|
||||
if not stored_only:
|
||||
documents += await fetch_documents(start, end, {d.url for d in documents}, errors, **({"sources": sources} if sources is not None else {}))
|
||||
schedules: dict[str, tuple[Scheduled, Document]] = {}
|
||||
announcements = []
|
||||
series_points = []
|
||||
# 先处理历史表,再处理年度更正;重跑的稳定身份不依赖日程 PDF 的文件名。
|
||||
parsed_schedules = []
|
||||
for document in (d for d in documents if d.source == "umich" and d.body.startswith(b"%PDF")):
|
||||
try:
|
||||
content = await asyncio.to_thread(pdf_text, document.body)
|
||||
parsed_schedules.append((bool(re.search(r"RELEASE DATES FOR 20\d\d", content)), document,
|
||||
await asyncio.to_thread(parse_schedule, content)))
|
||||
except ValueError as exc:
|
||||
errors.append({"url": document.url, "error": str(exc)})
|
||||
for _, document, events in sorted(parsed_schedules, key=lambda item: (item[0], item[1].captured_at)):
|
||||
for event in events:
|
||||
if begin <= event.at < finish:
|
||||
schedules[event.external_id] = event, document
|
||||
for document in sorted(documents, key=lambda d: d.captured_at):
|
||||
try:
|
||||
if document.source == "umich":
|
||||
if document.url == UMICH_CSV:
|
||||
series_points.append((document, [(p, v) for p, v in monthly_series(document.body.decode())
|
||||
if "2024-12" <= p <= end.strftime("%Y-%m")]))
|
||||
elif document.url.rstrip("/") == UMICH_HOME.rstrip("/"):
|
||||
period, stage, values = current_result(document.body.decode())
|
||||
identity = f"umich-{period}-{stage}"
|
||||
if identity not in schedules:
|
||||
raise ValueError("密歇根当前期次未找到官方公布日程")
|
||||
event, _ = schedules[identity]
|
||||
announcements.append((document, "umich", Announcement(event.at, period, stage, values), event.title))
|
||||
continue
|
||||
family = family_for(document)
|
||||
if family is None:
|
||||
continue
|
||||
parsed = ([await asyncio.to_thread(europe.parse_announcement, family, document.body.decode())]
|
||||
if document.source in EUROPE_HOSTS else
|
||||
await asyncio.to_thread(parse_announcements, family, document.body, pdf=document.body.startswith(b"%PDF")))
|
||||
for announcement in parsed:
|
||||
if begin <= announcement.at < finish:
|
||||
title = compact(" ".join(Selector(text=document.body.decode()).css("h1").xpath("string(.)").getall())) if document.source in EUROPE_HOSTS else family
|
||||
announcements.append((document, family, announcement, title))
|
||||
except (ValueError, KeyError, TypeError, IndexError) as exc:
|
||||
errors.append({"url": document.url, "error": f"{type(exc).__name__}: {exc}"})
|
||||
changed = 0
|
||||
if commit:
|
||||
await ensure_quiet_window()
|
||||
batches = {}
|
||||
for event, document in schedules.values():
|
||||
_, batch = batches.setdefault((document.url, document.captured_at), (document, []))
|
||||
batch.append(event)
|
||||
for document, events in batches.values():
|
||||
async with SessionLocal() as session:
|
||||
raw_id = document.raw_id or await save_raw(session, "umich", document.url, 200, {}, document.body, document.captured_at)
|
||||
await save_schedule(session, "umich", UMICH_INFO, events, raw_id, document.captured_at, withdraw_missing=False)
|
||||
await session.commit()
|
||||
for document, family, announcement, title in announcements:
|
||||
async with SessionLocal() as session:
|
||||
changed += await save_announcement(session, document, family, announcement, title)
|
||||
await session.commit()
|
||||
for document, points in series_points:
|
||||
async with SessionLocal() as session:
|
||||
raw_id = document.raw_id or await save_raw(session, "umich", document.url, 200, {}, document.body, document.captured_at)
|
||||
await save_series(session, "umich", "umich_sentiment", points, "final", raw_id, document.captured_at)
|
||||
await session.commit()
|
||||
actual = {(d.source, f, a.at, a.period, a.stage) for d, f, a, _ in announcements}
|
||||
for row in existing:
|
||||
if row.first_received_at is not None and not any(
|
||||
row.source == s and row.family == f and row.scheduled_at == at
|
||||
and row.period in (None, period) and row.stage in (None, stage) for s, f, at, period, stage in actual):
|
||||
actual.add((row.source, row.family, row.scheduled_at, row.period, row.stage))
|
||||
expected = {(r.source, r.family, r.scheduled_at, r.period, r.stage) for r in existing if r.schedule_status != "withdrawn"}
|
||||
expected.update(("umich", "umich", e.at, e.period, e.stage) for e, _ in schedules.values())
|
||||
missing = [dict(source=s, family=f, at=at.isoformat(), period=p, stage=stage)
|
||||
for s, f, at, p, stage in sorted(expected - actual, key=lambda x: (x[2], x[1]))
|
||||
if not any(s == x[0] and f == x[1] and at == x[2] and p in (None, x[3]) and stage in (None, x[4]) for x in actual)]
|
||||
return {"mode": "commit" if commit else "dry-run", "start": str(start), "end": str(end),
|
||||
"sources": sorted(selected),
|
||||
"archive_coverage": "未在线核对" if stored_only else "见 errors;不能仅凭已存日程判定完整",
|
||||
"documents": len(documents), "announcements": dict(Counter(f for _, f, _, _, _ in actual)),
|
||||
"changed_announcements": changed, "umich_schedule_events": len(schedules),
|
||||
"current_series_points": len(series_points[-1][1]) if series_points else 0,
|
||||
"unavailable_values": [dict(source=d.source, family=f, period=a.period, indicator=k, reason=v["unavailable_reason"])
|
||||
for d, f, a, _ in announcements for k, v in a.values.items() if v.get("unavailable_reason")],
|
||||
"missing_announcements": missing, "errors": errors}
|
||||
|
||||
|
||||
def main() -> None:
|
||||
parser = argparse.ArgumentParser(description=__doc__, formatter_class=argparse.RawDescriptionHelpFormatter)
|
||||
parser.add_argument("--start", type=date.fromisoformat, default=date(2025, 1, 1))
|
||||
parser.add_argument("--end", type=date.fromisoformat, default=datetime.now(LOCAL).date())
|
||||
parser.add_argument("--stored-only", action="store_true", help="仅重放已存官方响应,不联网核对归档覆盖")
|
||||
parser.add_argument("--source", action="append", choices=sorted(HOSTS), help="只处理指定来源,可重复;默认保留原美国范围,欧洲须显式指定")
|
||||
parser.add_argument("--commit", action="store_true", help="显式写库;运行前须确认目标库并完成迁移")
|
||||
args = parser.parse_args()
|
||||
if args.start < date(2025, 1, 1) or args.end < args.start or args.end > datetime.now(LOCAL).date():
|
||||
parser.error("公布日期范围必须从 2025-01-01 起,结束日期不得晚于今天")
|
||||
report = asyncio.run(run(args.start, args.end, commit=args.commit, stored_only=args.stored_only, sources=set(args.source) if args.source else None))
|
||||
print(json.dumps(report, ensure_ascii=False, indent=2))
|
||||
if report["errors"] or report["missing_announcements"]:
|
||||
raise SystemExit(1)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
@@ -0,0 +1,94 @@
|
||||
from dataclasses import dataclass
|
||||
from typing import Literal
|
||||
|
||||
|
||||
@dataclass(frozen=True)
|
||||
class Indicator:
|
||||
name: str
|
||||
importance: int
|
||||
unit: str = "%"
|
||||
rate_channel: Literal["inverse", "ambiguous"] = "ambiguous"
|
||||
|
||||
|
||||
@dataclass(frozen=True)
|
||||
class Family:
|
||||
country_code: str
|
||||
source: str
|
||||
indicators: tuple[str, ...]
|
||||
|
||||
|
||||
COUNTRIES = {"US": "美国", "EA": "欧元区", "GB": "英国", "DE": "德国", "FR": "法国"}
|
||||
|
||||
|
||||
INDICATORS = {
|
||||
# 项目分级,不冒充第三方星级;rate_channel 仅描述利率传导下的参考方向。
|
||||
"cpi_mom": Indicator("CPI 月率", 4, rate_channel="inverse"),
|
||||
"cpi_yoy": Indicator("CPI 年率", 5, rate_channel="inverse"),
|
||||
"core_cpi_mom": Indicator("核心 CPI 月率", 5, rate_channel="inverse"),
|
||||
"core_cpi_yoy": Indicator("核心 CPI 年率", 5, rate_channel="inverse"),
|
||||
"ppi_mom": Indicator("PPI 最终需求月率", 3, rate_channel="inverse"),
|
||||
"ppi_yoy": Indicator("PPI 最终需求年率", 3, rate_channel="inverse"),
|
||||
"payrolls": Indicator("非农就业新增", 5, "万人"),
|
||||
"unemployment": Indicator("失业率", 4),
|
||||
"pce_mom": Indicator("PCE 物价月率", 3, rate_channel="inverse"),
|
||||
"core_pce_mom": Indicator("核心 PCE 物价月率", 4, rate_channel="inverse"),
|
||||
"pce_yoy": Indicator("PCE 物价年率", 4, rate_channel="inverse"),
|
||||
"core_pce_yoy": Indicator("核心 PCE 物价年率", 5, rate_channel="inverse"),
|
||||
"gdp": Indicator("实际 GDP 年化季率", 4),
|
||||
"fed_rate": Indicator("联邦基金利率目标上限", 5, rate_channel="inverse"),
|
||||
"umich_sentiment": Indicator("密歇根大学消费者信心指数", 3, "点"),
|
||||
}
|
||||
FAMILIES = {
|
||||
"cpi": Family("US", "bls", ("cpi_mom", "cpi_yoy", "core_cpi_mom", "core_cpi_yoy")),
|
||||
"ppi": Family("US", "bls", ("ppi_mom", "ppi_yoy")),
|
||||
"jobs": Family("US", "bls", ("payrolls", "unemployment")),
|
||||
"pce": Family("US", "bea", ("pce_mom", "pce_yoy", "core_pce_mom", "core_pce_yoy")),
|
||||
"gdp": Family("US", "bea", ("gdp",)),
|
||||
"fomc": Family("US", "fed", ("fed_rate",)),
|
||||
"umich": Family("US", "umich", ("umich_sentiment",)),
|
||||
}
|
||||
STAGES = {"preliminary": "初值", "final": "终值", "initial": "首发值", "updated": "更新估计", "advance": "初值", "second": "二次估计", "third": "终值"}
|
||||
STAGES["flash"] = "快报值"
|
||||
|
||||
# 欧洲指标保留自己的口径,不复用美国年化 GDP 或美国通胀的方向标签。
|
||||
INDICATORS.update({
|
||||
"eu_cpi_mom": Indicator("CPI 月率", 4),
|
||||
"eu_cpi_yoy": Indicator("CPI 年率", 4),
|
||||
"eu_core_cpi_yoy": Indicator("核心 CPI 年率", 4),
|
||||
"hicp_mom": Indicator("HICP 月率", 4),
|
||||
"hicp_yoy": Indicator("HICP 年率", 4),
|
||||
"core_hicp_yoy": Indicator("核心 HICP 年率", 4),
|
||||
"gdp_qoq": Indicator("实际 GDP 季率", 4),
|
||||
"gdp_yoy": Indicator("实际 GDP 年率", 4),
|
||||
"ilo_unemployment": Indicator("ILO 失业率", 3),
|
||||
"uk_unemployment": Indicator("ILO 失业率(三个月)", 3),
|
||||
"ecb_deposit": Indicator("存款便利利率", 5),
|
||||
"ecb_main": Indicator("主要再融资利率", 5),
|
||||
"ecb_marginal": Indicator("边际贷款利率", 5),
|
||||
"bank_rate": Indicator("英国央行基准利率", 5),
|
||||
})
|
||||
FAMILIES.update({
|
||||
"ecb_rate": Family("EA", "ecb", ("ecb_deposit", "ecb_main", "ecb_marginal")),
|
||||
"ea_hicp": Family("EA", "eurostat", ("hicp_yoy", "hicp_mom", "core_hicp_yoy")),
|
||||
"ea_gdp": Family("EA", "eurostat", ("gdp_qoq", "gdp_yoy")),
|
||||
"ea_jobs": Family("EA", "eurostat", ("ilo_unemployment",)),
|
||||
"boe_rate": Family("GB", "boe", ("bank_rate",)),
|
||||
"uk_cpi": Family("GB", "ons", ("eu_cpi_yoy", "eu_cpi_mom", "eu_core_cpi_yoy")),
|
||||
"uk_gdp": Family("GB", "ons", ("gdp_qoq", "gdp_yoy")),
|
||||
"uk_jobs": Family("GB", "ons", ("uk_unemployment",)),
|
||||
"de_cpi": Family("DE", "destatis", ("eu_cpi_yoy", "eu_cpi_mom", "hicp_yoy", "hicp_mom")),
|
||||
"de_gdp": Family("DE", "destatis", ("gdp_qoq", "gdp_yoy")),
|
||||
"de_jobs": Family("DE", "destatis", ("ilo_unemployment",)),
|
||||
"fr_cpi": Family("FR", "insee", ("eu_cpi_yoy", "eu_cpi_mom", "hicp_yoy", "hicp_mom")),
|
||||
"fr_gdp": Family("FR", "insee", ("gdp_qoq", "gdp_yoy")),
|
||||
"fr_jobs": Family("FR", "insee", ("ilo_unemployment",)),
|
||||
})
|
||||
UMICH_HOME = "https://www.sca.isr.umich.edu/"
|
||||
UMICH_HISTORY = "https://data.sca.isr.umich.edu/technical-docs.php"
|
||||
UMICH_INFO = "https://data.sca.isr.umich.edu/survey-info.php"
|
||||
UMICH_CSV = "https://www.sca.isr.umich.edu/files/tbmics.csv"
|
||||
SCHEDULE_URLS = {
|
||||
"bls": "https://www.bls.gov/schedule/news_release/bls.ics",
|
||||
"bea": "https://www.bea.gov/news/schedule/ics/online-calendar-subscription.ics",
|
||||
"fed": "https://www.federalreserve.gov/newsevents/calendar.htm",
|
||||
}
|
||||
@@ -0,0 +1,465 @@
|
||||
"""欧洲官方日程与公告。数值只取正式公告,当前修订序列不冒充当期结果。"""
|
||||
import json
|
||||
import re
|
||||
from datetime import UTC, date, datetime, time, timedelta
|
||||
from decimal import Decimal
|
||||
from urllib.parse import urljoin
|
||||
from zoneinfo import ZoneInfo
|
||||
|
||||
from parsel import Selector
|
||||
|
||||
from alphapulse.calendar.archives import Announcement
|
||||
from alphapulse.calendar.catalog import FAMILIES
|
||||
from alphapulse.calendar.parsers import MONTHS, Scheduled, compact
|
||||
from alphapulse.core.official_sources import official_url
|
||||
|
||||
SCHEDULES = {
|
||||
"ecb": "https://www.ecb.europa.eu/press/calendars/mgcgc/html/index.en.html",
|
||||
"eurostat": "https://ec.europa.eu/eurostat/o/calendars/eventsJson",
|
||||
"boe": "https://www.bankofengland.co.uk/monetary-policy/upcoming-mpc-dates",
|
||||
"ons": "https://www.ons.gov.uk/releasecalendar?release-type=type-upcoming&limit=100",
|
||||
"destatis": "https://www.destatis.de/SiteGlobals/Forms/Suche/Termine/EN/Terminsuche_Formular.html",
|
||||
"insee": "https://www.insee.fr/fr/agenda-diffusion",
|
||||
}
|
||||
INSEE_QUERY = {"q": "*:*", "start": 0, "rows": 100, "filters": [],
|
||||
"sortFields": [{"field": "dateEmbargo_dt", "order": "asc"}]}
|
||||
ZONES = {"ecb": "Europe/Berlin", "eurostat": "Europe/Luxembourg", "boe": "Europe/London",
|
||||
"ons": "Europe/London", "destatis": "Europe/Berlin", "insee": "Europe/Paris"}
|
||||
N = r"[+−–‑-]?\d+(?:[.,]\d+)?"
|
||||
FRENCH_MONTHS = dict(zip(("janvier", "février", "mars", "avril", "mai", "juin", "juillet", "août", "septembre", "octobre", "novembre", "décembre"), range(1, 13), strict=True))
|
||||
MONTH_NUMBERS = {**{k.lower(): v for k, v in MONTHS.items()}, **FRENCH_MONTHS}
|
||||
|
||||
|
||||
def local_at(source: str, day: date, clock: str) -> datetime:
|
||||
return datetime.combine(day, time.fromisoformat(clock), ZoneInfo(ZONES[source])).astimezone(UTC)
|
||||
|
||||
|
||||
def numeric(value: str) -> str:
|
||||
value = compact(value).replace(",", ".").replace("−", "-").replace("–", "-").replace("‑", "-").rstrip("% ")
|
||||
if not re.fullmatch(r"[+-]?\d+(?:\.\d+)?", value):
|
||||
raise ValueError(f"官方单元格不是十进制数值:{value}")
|
||||
return str(Decimal(value).normalize()) if Decimal(value) else "0"
|
||||
|
||||
|
||||
def value(actual: str, previous: str | None = None) -> dict:
|
||||
return {"actual": numeric(actual), "previous": numeric(previous) if previous is not None else None}
|
||||
|
||||
|
||||
def match_value(pattern: str, text: str) -> dict:
|
||||
match = re.search(pattern, text, re.I)
|
||||
if match is None:
|
||||
raise ValueError(f"官方公告未识别到数值:{pattern}")
|
||||
return value(match[1])
|
||||
|
||||
|
||||
def period_of(text: str, *, quarter: bool = False) -> str:
|
||||
text = compact(text).lower()
|
||||
if quarter:
|
||||
patterns = (r"q([1-4])\s*[/ -]?\s*(20\d\d)", r"([1-4])(?:st|nd|rd|th|er|e)?\.?\s*(?:quarter|quartal|trimestre)(?: of)?\s+(20\d\d)")
|
||||
for pattern in patterns:
|
||||
if m := re.search(pattern, text):
|
||||
return f"{m[2]}-Q{m[1]}"
|
||||
m = re.search(r"(first|second|third|fourth|premier|deuxième|troisième|quatrième)\s+(?:quarter|trimestre)(?: of)?\s+(20\d\d)", text)
|
||||
if m:
|
||||
q = {"first": 1, "second": 2, "third": 3, "fourth": 4, "premier": 1, "deuxième": 2, "troisième": 3, "quatrième": 4}[m[1]]
|
||||
return f"{m[2]}-Q{q}"
|
||||
# ONS 的季度公告以月份范围命名;末月必须是季度末。
|
||||
months = list(re.finditer(r"(" + "|".join(MONTH_NUMBERS) + r")\s+(20\d\d)", text))
|
||||
if months and (month := MONTH_NUMBERS[months[-1][1]]) in (3, 6, 9, 12):
|
||||
return f"{months[-1][2]}-Q{month // 3}"
|
||||
else:
|
||||
matches = list(re.finditer(r"(" + "|".join(MONTH_NUMBERS) + r")\s+(20\d\d)", text))
|
||||
if matches:
|
||||
m = matches[-1]
|
||||
return f"{m[2]}-{MONTH_NUMBERS[m[1]]:02d}"
|
||||
raise ValueError(f"官方内容未识别到统计期:{text[:160]}")
|
||||
|
||||
|
||||
def family_for(source: str, title: str) -> tuple[str, str | None] | None:
|
||||
t = compact(title).casefold()
|
||||
if source == "ecb":
|
||||
return ("ecb_rate", None) if t == "monetary policy decisions" else None
|
||||
if source == "boe":
|
||||
return ("boe_rate", None) if "bank rate" in t or "mpc summary and minutes" in t else None
|
||||
if source == "eurostat":
|
||||
if "inflation" in t or "hicp" in t:
|
||||
return "ea_hicp", "flash" if "flash" in t or "expected" in t else "final"
|
||||
if "unemployment" in t:
|
||||
return "ea_jobs", None
|
||||
if re.search(r"\bgdp\b", t) and not any(x in t for x in ("deficit", "debt", "update")):
|
||||
return "ea_gdp", "preliminary" if "preliminary" in t else "flash" if "flash" in t else "final"
|
||||
if source == "ons":
|
||||
if "time series" in t:
|
||||
return None
|
||||
if t.startswith("consumer price inflation, uk:"):
|
||||
return "uk_cpi", None
|
||||
if t.startswith(("labour market overview, uk:", "uk labour market:")):
|
||||
return "uk_jobs", None
|
||||
if t.startswith("gdp first quarterly estimate, uk:"):
|
||||
return "uk_gdp", "initial"
|
||||
if t.startswith("gdp quarterly national accounts, uk:"):
|
||||
return "uk_gdp", "final"
|
||||
if source == "destatis":
|
||||
t = t.removeprefix("press ") # 英文公报 h1 包含栏目标签 Press。
|
||||
if ("consumer price" in t and "harmonised" not in t[:12]) or "inflation rate" in t:
|
||||
return "de_cpi", "preliminary" if "preliminary" in t or "expected" in t else "final"
|
||||
if "gross domestic product" in t:
|
||||
return "de_gdp", "initial" if "first release" in t else "final"
|
||||
if "monthly labour market" in t or t.startswith("employment in "):
|
||||
return "de_jobs", None
|
||||
if source == "insee":
|
||||
if "prix à la consommation" in t:
|
||||
return "fr_cpi", "preliminary" if "provisoir" in t else "final"
|
||||
if "comptes nationaux trimestriels" in t:
|
||||
return "fr_gdp", "initial" if "première estimation" in t else "final"
|
||||
if "chômage" in t and ("bit" in t or "taux de chômage" in t):
|
||||
return "fr_jobs", None
|
||||
return None
|
||||
|
||||
|
||||
def event(family: str, title: str, at: datetime, period: str | None, stage: str | None, *, url: str | None = None) -> Scheduled:
|
||||
identity = f"{family}-{period or at.date().isoformat()}-{stage or 'release'}"
|
||||
return Scheduled(identity, family, title, at, period=period, stage=stage, release_url=url)
|
||||
|
||||
|
||||
def eurostat_calendar_url(now: datetime) -> str:
|
||||
from urllib.parse import urlencode
|
||||
zone = ZoneInfo(ZONES["eurostat"])
|
||||
start = (now - timedelta(days=45)).astimezone(zone).replace(hour=0, minute=0, second=0, microsecond=0)
|
||||
end = (now + timedelta(days=90)).astimezone(zone).replace(hour=0, minute=0, second=0, microsecond=0)
|
||||
return SCHEDULES["eurostat"] + "?" + urlencode({"start": start.isoformat(), "end": end.isoformat(), "theme": "", "category": "", "keywords": "", "isEuroindicator": "true", "authorInclude": "", "authorExclude": ""})
|
||||
|
||||
|
||||
def parse_schedule(source: str, body: str) -> list[Scheduled]:
|
||||
results = []
|
||||
s = Selector(text=body, type="html") if source not in ("eurostat", "insee") else None
|
||||
if source == "ecb":
|
||||
for node in s.css("dt"):
|
||||
title = compact(node.xpath("string(following-sibling::dd[1])").get() or "")
|
||||
if "monetary policy meeting" in title and "non-monetary" not in title and "Day 2" in title:
|
||||
day = datetime.strptime(compact(node.xpath("string(.)").get()), "%d/%m/%Y").date()
|
||||
results.append(event("ecb_rate", title, local_at(source, day, "14:15"), None, None))
|
||||
elif source == "boe":
|
||||
for table in s.css(".page-content table"):
|
||||
heading = compact(table.xpath("string(preceding::h2[1])").get() or "")
|
||||
year = re.search(r"20\d\d", heading)
|
||||
if not year:
|
||||
raise ValueError("英国央行日程缺少年份")
|
||||
for tr in table.css("tr"):
|
||||
label = compact(tr.css("td").xpath("string(.)").get() or "")
|
||||
if not label:
|
||||
continue
|
||||
day = datetime.strptime(label + " " + year[0], "%A %d %B %Y").date()
|
||||
link = tr.css('a[href*="monetary-policy-summary-and-minutes"]::attr(href)').get()
|
||||
url = official_url(source, urljoin(SCHEDULES[source], link)) if link else None
|
||||
results.append(event("boe_rate", "Bank Rate decision", local_at(source, day, "12:00"), None, None, url=url))
|
||||
elif source == "eurostat":
|
||||
data = json.loads(body)
|
||||
if not isinstance(data, list):
|
||||
raise ValueError("Eurostat 日程不是事件列表")
|
||||
for item in data:
|
||||
target = family_for(source, item["title"])
|
||||
if target is None or not any(t["label"] == "Euro indicators release" for t in item["types"]):
|
||||
continue
|
||||
family, stage = target
|
||||
# 官方 allDay 日程的 11:00Z 是日历占位时间。实际公告在卢森堡 11:00 发布,
|
||||
# 已核对公告 article:published_time(夏令时 09:00Z),不能按占位 Z 推迟两小时。
|
||||
at = local_at(source, date.fromisoformat(item["start"][:10]), "11:00") if item["allDay"] else datetime.fromisoformat(item["start"]).astimezone(UTC)
|
||||
results.append(event(family, item["title"], at, period_of(item["period"], quarter=family == "ea_gdp"), stage))
|
||||
elif source == "ons":
|
||||
for link in s.css("a[data-gtm-release-title]"):
|
||||
title = compact(Selector(text=link.attrib["data-gtm-release-title"], type="html").xpath("string(.)").get())
|
||||
target = family_for(source, title)
|
||||
if target is None:
|
||||
continue
|
||||
family, stage = target
|
||||
day = datetime.strptime(link.attrib["data-gtm-release-date"], "%Y%m%d").date()
|
||||
at = local_at(source, day, link.attrib["data-gtm-release-time"])
|
||||
period = None if family == "uk_jobs" else period_of(title, quarter=family == "uk_gdp")
|
||||
results.append(event(family, title, at, period, stage, url=official_url(source, urljoin(SCHEDULES[source], link.attrib["href"]))))
|
||||
elif source == "destatis":
|
||||
for node in s.css(".c-result--event-preview"):
|
||||
title = compact(node.css("h3").xpath("string(.)").get())
|
||||
target = family_for(source, title)
|
||||
if target is None:
|
||||
continue
|
||||
family, stage = target
|
||||
details = compact(node.xpath("string(.)").get())
|
||||
family, stage = family_for(source, details)
|
||||
m = re.search(r"Date of issue\s*:\s*(\d{4}\.\d{2}\.\d{2})", details)
|
||||
if m is None:
|
||||
raise ValueError("Destatis 日程缺少正式日期")
|
||||
day = datetime.strptime(m[1], "%Y.%m.%d").date()
|
||||
p = re.search(r"Reporting period\s*:\s*(.*?)\s*Date of issue", details)
|
||||
if p is None:
|
||||
raise ValueError("Destatis 日程缺少统计期")
|
||||
# ICS 明确采用零点占位。CPI 初值为 14:00,其余为官网声明的 08:00。
|
||||
clock = "14:00" if family == "de_cpi" and stage == "preliminary" else "08:00"
|
||||
results.append(event(family, title, local_at(source, day, clock), period_of(p[1], quarter=family == "de_gdp"), stage))
|
||||
elif source == "insee":
|
||||
data = json.loads(body)
|
||||
if data["status"] != 0:
|
||||
raise ValueError("INSEE 官方日程查询失败")
|
||||
for item in data["documents"]:
|
||||
title = item["famille"].get("facetteConjoncture", {}).get("libelleFr", "")
|
||||
target = family_for(source, title)
|
||||
if target is None:
|
||||
continue
|
||||
family, stage = target
|
||||
at = datetime.fromisoformat(item["embargo"]).astimezone(UTC)
|
||||
if datetime.fromisoformat(item["embargo"]).tzinfo is None:
|
||||
raise ValueError("INSEE 日程缺少时区")
|
||||
results.append(event(family, title, at, period_of(item["periodeReferenceEn"], quarter=family in ("fr_gdp", "fr_jobs")), stage,
|
||||
url=f"https://www.insee.fr/fr/statistiques/{item['id']}"))
|
||||
else:
|
||||
raise ValueError(f"未支持的欧洲日程来源:{source}")
|
||||
if not results:
|
||||
raise ValueError(f"{source} 官方日程未识别到目标事件")
|
||||
return results
|
||||
|
||||
|
||||
def table_rows(s: Selector) -> list[list[str]]:
|
||||
return [[compact(c.xpath("string(.)").get()) for c in tr.css("th,td")] for tr in s.css("table tr")]
|
||||
|
||||
|
||||
def row_named(rows: list[list[str]], label: str) -> list[str]:
|
||||
matches = [row for row in rows if row and compact(row[0]).casefold() == label.casefold()]
|
||||
if len(matches) != 1:
|
||||
raise ValueError(f"官方表格行不唯一或缺失:{label}")
|
||||
return matches[0]
|
||||
|
||||
|
||||
def eurostat_row(s: Selector, label: str) -> list[str]:
|
||||
# Eurostat 的数据标志 e/p 紧贴数值书写;仅在这一来源的表格边界剥离。
|
||||
return [re.sub(r"^(" + N + r")\s*[ep]$", r"\1", cell) for cell in row_named(table_rows(s), label)]
|
||||
|
||||
|
||||
def publication(source: str, s: Selector, text: str, family: str, stage: str | None) -> datetime:
|
||||
if source == "eurostat":
|
||||
at = datetime.fromisoformat(s.css('meta[property="article:published_time"]::attr(content)').get() or "")
|
||||
if at.tzinfo is None:
|
||||
raise ValueError("Eurostat 公告时间缺少时区")
|
||||
return at.astimezone(UTC)
|
||||
if source == "boe":
|
||||
label = compact(s.css(".published-date").xpath("string(.)").get() or "")
|
||||
m = re.search(r"Published on\s+(\d{1,2} [A-Z][a-z]+ 20\d\d)", label)
|
||||
if m is None:
|
||||
raise ValueError("英国央行公告缺少本文正式发布日期")
|
||||
day = datetime.strptime(m[1], "%d %B %Y").date()
|
||||
return local_at(source, day, "12:00")
|
||||
if source == "insee":
|
||||
first = s.css(".date-diffusion").xpath("string(.)").get() or ""
|
||||
m = re.search(r"\d{2}/\d{2}/\d{4}", first)
|
||||
if m is None:
|
||||
raise ValueError("INSEE 公告缺少正式发布日期")
|
||||
clock = "07:30" if family == "fr_jobs" or (family == "fr_gdp" and stage == "initial") else "08:45"
|
||||
return local_at(source, datetime.strptime(m[0], "%d/%m/%Y").date(), clock)
|
||||
pattern = {"ecb": r"Monetary policy decisions\s*(\d{1,2} [A-Z][a-z]+ 20\d\d)",
|
||||
"ons": r"Release date:\s*(\d{1,2} [A-Z][a-z]+ 20\d\d)",
|
||||
"destatis": r"Press release No\. \d+ of (\d{1,2} [A-Z][a-z]+ 20\d\d)"}[source]
|
||||
m = re.search(pattern, text)
|
||||
if m is None:
|
||||
raise ValueError(f"{source} 公告缺少正式发布日期")
|
||||
day = datetime.strptime(m[1], "%d %B %Y").date()
|
||||
clock = "14:15" if source == "ecb" else "07:00" if source == "ons" else "14:00" if family == "de_cpi" and stage == "preliminary" else "08:00"
|
||||
return local_at(source, day, clock)
|
||||
|
||||
|
||||
def parse_announcement(family: str, body: str) -> Announcement:
|
||||
source = FAMILIES[family].source
|
||||
s = Selector(text=body, type="html")
|
||||
if source == "eurostat":
|
||||
# 官方表格用上标 e/p 表示估计/临时数据;阶段另存,不把上标并入数值。
|
||||
for node in s.css("table sup"):
|
||||
node.root.getparent().remove(node.root)
|
||||
for node in s.css("script,style,nav,footer,header"):
|
||||
node.root.getparent().remove(node.root)
|
||||
text = compact(" ".join(s.xpath("//body//text() | //main//text()").getall()))
|
||||
title = compact(" ".join(s.css("h1").xpath("string(.)").getall()))
|
||||
rows = table_rows(s)
|
||||
stage = None
|
||||
period = None
|
||||
values = {}
|
||||
if family == "ecb_rate":
|
||||
m = re.search(r"deposit facility, the main refinancing operations and the marginal lending facility[^.]*?(?:to|at)\s*(" + N + r")%,\s*(" + N + r")% and\s*(" + N + r")%", text)
|
||||
if m is None:
|
||||
raise ValueError("ECB 公告缺少三项明确政策利率")
|
||||
values = {key: value(m[i]) for i, key in enumerate(FAMILIES[family].indicators, 1)}
|
||||
elif family == "boe_rate":
|
||||
values["bank_rate"] = match_value(r"Bank [Rr]ate (?:maintained at|reduced to|increased to)\s*(" + N + r")%", title)
|
||||
elif source == "eurostat":
|
||||
heading = compact(" ".join(s.css(".ecl-page-header__info .ecl-label").xpath("string(.)").getall())).lower()
|
||||
if not heading:
|
||||
raise ValueError("Eurostat 公告缺少统计期/阶段标题")
|
||||
stage = ("flash" if "flash estimate" in heading else "final") if family == "ea_hicp" else ("preliminary" if heading.startswith("preliminary flash") else "flash" if heading.startswith("gdp and employment flash") or heading.startswith("flash estimate") else "final") if family == "ea_gdp" else None
|
||||
if family == "ea_hicp":
|
||||
p = re.search(r"(?:rate was|expected to be)\s*" + N + r"\s*% in ([A-Z][a-z]+ 20\d\d)", text)
|
||||
if p is None:
|
||||
raise ValueError("Eurostat 通胀公告缺少当期月份")
|
||||
period = period_of(p[1])
|
||||
row = eurostat_row(s, "All-items HICP")
|
||||
values["hicp_yoy"] = value(row[-2], row[-3])
|
||||
values["hicp_mom"] = value(row[-1])
|
||||
core = eurostat_row(s, "energy, food, alcohol & tobacco")
|
||||
values["core_hicp_yoy"] = value(core[-2], core[-3])
|
||||
elif family == "ea_gdp":
|
||||
p = re.search(r"(?:the )?((?:first|second|third|fourth) quarter of 20\d\d)", heading, re.I)
|
||||
if p is None:
|
||||
raise ValueError("Eurostat GDP 公告缺少季度")
|
||||
period = period_of(p[1], quarter=True)
|
||||
table = next((t for t in s.css("table") if "Growth rates of GDP in volume" in compact(t.xpath("string(.)").get())), None)
|
||||
if table is None:
|
||||
raise ValueError("Eurostat 缺少实际 GDP 增长表,不能使用就业增长表")
|
||||
row = eurostat_row(table, "Euro area")
|
||||
count = (len(row) - 1) // 2
|
||||
if len(row) != 1 + count * 2 or count < 2:
|
||||
raise ValueError("Eurostat GDP 表格列口径改变")
|
||||
values = {"gdp_qoq": value(row[count], row[count - 1]), "gdp_yoy": value(row[-1], row[-2])}
|
||||
else:
|
||||
p = re.search(r"In ([A-Z][a-z]+ 20\d\d), the euro area seasonally adjusted unemployment rate was\s*(" + N + r")%", text)
|
||||
if p is None:
|
||||
raise ValueError("Eurostat 公告未识别到欧元区季调失业率")
|
||||
period = period_of(p[1])
|
||||
table = next((t for t in s.css("table") if "Seasonally adjusted unemployment, totals" in compact(t.xpath("string(.)").get())), None)
|
||||
if table is None:
|
||||
raise ValueError("Eurostat 缺少全体失业率表,不能使用青年或分性别失业率")
|
||||
row = eurostat_row(table, "Euro area")
|
||||
count = (len(row) - 1) // 2
|
||||
values["ilo_unemployment"] = value(row[count], row[count - 1])
|
||||
elif source == "ons":
|
||||
stage = "initial" if "first quarterly estimate" in title.lower() else "final" if family == "uk_gdp" else None
|
||||
if family == "uk_cpi":
|
||||
period = period_of(title)
|
||||
# ONS 旧模板有断行粘连、脚注和额外空白列;数值四列始终是前/当期年率、前/当期月率。
|
||||
cpi_rows = {re.sub(r"\s+|\[\d+\]", "", r[0]): r for r in rows if r}
|
||||
all_items = cpi_rows.get("CPIAllitems")
|
||||
core = cpi_rows.get("CPIexcfood,energy,alcoholandtobacco(coreCPI)")
|
||||
if all_items is None:
|
||||
raise ValueError("ONS 表格缺少 CPI All items")
|
||||
if core is None:
|
||||
raise ValueError("ONS 表格缺少核心 CPI,不能用核心 CPIH 替代")
|
||||
values = {"eu_cpi_yoy": value(all_items[-3], all_items[-4]), "eu_core_cpi_yoy": value(core[-3], core[-4])}
|
||||
table = next((t for t in s.css("table") if "CPIH, OOH component and CPI index" in compact(t.xpath("string(.)").get())), None)
|
||||
if table is None:
|
||||
raise ValueError("ONS 公告缺少月率历史表格")
|
||||
data = [r for r in table_rows(table) if len(r) == 10 and re.fullmatch(r"[A-Za-z]{3}", r[1])]
|
||||
if len(data) < 2:
|
||||
raise ValueError("ONS CPI 月率历史行不足")
|
||||
values["eu_cpi_mom"] = value(data[-1][7], data[-2][7])
|
||||
elif family == "uk_gdp":
|
||||
period = period_of(title, quarter=True)
|
||||
q = int(period[-1])
|
||||
label = f"Q{q} {period[:4]}"
|
||||
table = next((t for t in s.css("table") if "headline national accounts indicators" in compact(t.xpath("string(.)").get()).lower()), None)
|
||||
if table is None:
|
||||
raise ValueError("ONS 公告缺少实际 GDP 季率表")
|
||||
data = table_rows(table)
|
||||
for r in data:
|
||||
if r:
|
||||
r[0] = re.sub(r"^(20\d\d) (Q[1-4])$", r"\2 \1", r[0])
|
||||
current = row_named(data, label)
|
||||
prev_q = f"Q{q - 1} {period[:4]}" if q > 1 else f"Q4 {int(period[:4]) - 1}"
|
||||
previous = row_named(data, prev_q)
|
||||
values["gdp_qoq"] = value(current[1], previous[1])
|
||||
annual = re.search(r"(?<!Nominal )GDP is estimated to be\s*(" + N + r")% (higher|lower) in Quarter " + str(q) + r" " + period[:4] + r",? compared with the same quarter a year ago", text)
|
||||
if annual is not None:
|
||||
amount = Decimal(numeric(annual[1]))
|
||||
values["gdp_yoy"] = value(str(-abs(amount)) if annual[2] == "lower" else str(amount))
|
||||
else:
|
||||
annual = re.search(r"(?:Real GDP|(?<!Nominal )GDP) is estimated to have (increased|decreased|fallen) by (" + N + r")%(?: in Quarter " + str(q) + r" " + period[:4] + r")?, compared with the same quarter a year ago", text)
|
||||
if annual is not None:
|
||||
amount = Decimal(numeric(annual[2]))
|
||||
values["gdp_yoy"] = value(str(-abs(amount)) if annual[1] in ("decreased", "fallen") else str(amount))
|
||||
else:
|
||||
values["gdp_yoy"] = {"actual": None, "previous": None, "unavailable_reason": "官方当期公报未列示季度实际 GDP 同比,不以人均 GDP、名义 GDP 或全年增长代填。"}
|
||||
else:
|
||||
m = re.search(r"The UK unemployment rate for people aged 16 years and over was estimated at (" + N + r")% in ([^.]+)", text)
|
||||
if m is None:
|
||||
raise ValueError("ONS 公告缺少三个月 ILO 失业率")
|
||||
period = period_of(m[2])
|
||||
values["uk_unemployment"] = value(m[1])
|
||||
elif source == "destatis":
|
||||
if family == "de_cpi":
|
||||
stage = "preliminary" if "expected" in title.lower() else "final"
|
||||
p = re.search(r"Consumer price index,\s*([A-Z][a-z]+ 20\d\d)", text)
|
||||
if p is None:
|
||||
raise ValueError("Destatis CPI 缺少统计期")
|
||||
period = period_of(p[1])
|
||||
for label, prefix in (("Consumer price index", "eu_cpi"), ("Harmonised index of consumer prices", "hicp")):
|
||||
pattern = label + r",[^:]+:\s*(" + N + r")% on the same month a year earlier[^%]*?\s(" + N + r")% on the previous month"
|
||||
m = re.search(pattern, text)
|
||||
if m is None:
|
||||
raise ValueError(f"Destatis 公告缺少 {label} 年率/月率")
|
||||
values[prefix + "_yoy"], values[prefix + "_mom"] = value(m[1]), value(m[2])
|
||||
elif family == "de_gdp":
|
||||
stage = "final" if "detailed" in title.lower() or "detailed results" in text[:2000].lower() else "initial"
|
||||
p = re.search(r"Gross domestic product \(GDP\),\s*([1-4]\s*(?:st|nd|rd|th) quarter of 20\d\d)", text)
|
||||
if p is None:
|
||||
raise ValueError("Destatis GDP 缺少统计季度")
|
||||
period = period_of(re.sub(r"([1-4])\s+(st|nd|rd|th)", r"\1\2", p[1]), quarter=True)
|
||||
values["gdp_qoq"] = match_value(r"(" + N + r")% on the previous quarter \(price, seasonally and calendar adjusted\)", text)
|
||||
values["gdp_yoy"] = match_value(r"(" + N + r")% on the same quarter a year earlier \(price and calendar adjusted\)", text)
|
||||
else:
|
||||
m = re.search(r"Adjusted unemployment rate at (" + N + r")% in ([A-Z][a-z]+ 20\d\d)", text)
|
||||
if m is None:
|
||||
raise ValueError("Destatis 公告缺少经季调 ILO 失业率")
|
||||
period = period_of(m[2])
|
||||
values["ilo_unemployment"] = value(m[1])
|
||||
elif source == "insee":
|
||||
subtitle = compact(s.css(".sous-titre").xpath("string(.)").get() or "")
|
||||
# INSEE 的统计期与阶段在 h1 的副标题,而不是页面下方的下一期时间。
|
||||
subtitle = subtitle or title
|
||||
stage = "preliminary" if "provisoir" in subtitle else "final" if family == "fr_cpi" else "initial" if "première estimation" in subtitle else "final" if family == "fr_gdp" else None
|
||||
period = period_of(subtitle, quarter=family in ("fr_gdp", "fr_jobs"))
|
||||
if family == "fr_cpi":
|
||||
if stage == "preliminary":
|
||||
ipc = next((t for t in s.css("table") if "Glissement annuel" in compact(t.xpath("string(.)").get()) and "Variation mensuelle" in compact(t.xpath("string(.)").get())), None)
|
||||
if ipc is None:
|
||||
raise ValueError("INSEE CPI 初值缺少明确的年率/月率表")
|
||||
data = [r for r in table_rows(ipc) if r and re.fullmatch(r"\d{4}-\d{2}", r[0])]
|
||||
values["eu_cpi_yoy"] = value(data[0][1], data[1][1])
|
||||
values["eu_cpi_mom"] = value(data[0][2], data[1][2])
|
||||
h = next((r for r in rows if r and r[0].startswith("Ensemble IPCH")), None)
|
||||
if h is None:
|
||||
raise ValueError("INSEE CPI 初值缺少 HICP 年率")
|
||||
values["hicp_yoy"] = value(h[-1], h[-2])
|
||||
m = re.search(r"harmonisé.{0,220}?Sur un mois, il (baisserait|augmenterait|diminuerait|reculerait|rebondirait|se replierait)(?: légèrement)? de (" + N + r")\s*%", text)
|
||||
if m is not None:
|
||||
amount = numeric(m[2])
|
||||
values["hicp_mom"] = value(str(-abs(Decimal(amount))) if m[1] in ("baisserait", "diminuerait", "reculerait", "se replierait") else amount)
|
||||
elif re.search(r"harmonisé.{0,220}?Sur un mois, il serait stable", text):
|
||||
values["hicp_mom"] = value("0")
|
||||
else:
|
||||
raise ValueError("INSEE 初值缺少 HICP 月率")
|
||||
else:
|
||||
ipc = row_named(rows, "Ensemble")
|
||||
h = row_named(rows, "Ensemble IPCH")
|
||||
values = {"eu_cpi_mom": value(ipc[-2]), "eu_cpi_yoy": value(ipc[-1]), "hicp_mom": value(h[-2]), "hicp_yoy": value(h[-1])}
|
||||
history = next((t for t in s.css("table") if "IPC ISJ IPCH" in compact(" ".join(t.xpath(".//text()").getall()))), None)
|
||||
if history is not None:
|
||||
prior = row_named(table_rows(history), (date.fromisoformat(period + "-01") - timedelta(days=1)).strftime("%Y-%m"))
|
||||
values["eu_cpi_yoy"]["previous"] = numeric(prior[1])
|
||||
values["hicp_yoy"]["previous"] = numeric(prior[3])
|
||||
elif family == "fr_gdp":
|
||||
table = next((t for t in s.css("table") if "Le produit intérieur brut et ses composantes" in compact(t.xpath("string(.)").get())), None)
|
||||
if table is None:
|
||||
raise ValueError("INSEE GDP 缺少季度表格")
|
||||
data = [r for r in table_rows(table) if r and re.fullmatch(r"\d{4}-T[1-4]", r[0])]
|
||||
if data[0][0] != period.replace("Q", "T"):
|
||||
raise ValueError("INSEE GDP 图表期次与标题不符")
|
||||
values["gdp_qoq"] = value(data[0][-1], data[1][-1])
|
||||
# 这份公告的年度列是全年增长/年度结转,不是季度同比;不得代填。
|
||||
values["gdp_yoy"] = {"actual": None, "previous": None, "unavailable_reason": "官方当期公告未列示季度实际 GDP 同比;年度增长及增长结转不能代替季度同比。"}
|
||||
else:
|
||||
table = next((t for t in s.css("table") if "Taux de chômage au sens du BIT" in compact(t.xpath("string(.)").get())), None)
|
||||
if table is None:
|
||||
raise ValueError("INSEE 公告缺少全体 15 岁以上 ILO 失业率")
|
||||
data = [r for r in table_rows(table) if r and re.fullmatch(r"\d{4}-T[1-4]", r[0])]
|
||||
if data[0][0] != period.replace("Q", "T"):
|
||||
raise ValueError("INSEE 失业率图表期次与标题不符")
|
||||
values["ilo_unemployment"] = value(data[0][1], data[1][1])
|
||||
else:
|
||||
raise ValueError(f"未支持的欧洲公告:{family}")
|
||||
if set(values) != set(FAMILIES[family].indicators):
|
||||
raise ValueError(f"{family} 公告指标不完整")
|
||||
return Announcement(publication(source, s, text, family, stage), period, stage, values)
|
||||
@@ -0,0 +1,153 @@
|
||||
"""欧洲原公告索引。只跟随官网列出的链接,历史错误和缺口交给回补报告。"""
|
||||
from datetime import date, datetime
|
||||
import json
|
||||
from urllib.parse import urlencode, urljoin
|
||||
|
||||
from parsel import Selector
|
||||
import httpx
|
||||
|
||||
from alphapulse.calendar.europe import family_for
|
||||
from alphapulse.calendar.parsers import compact
|
||||
from alphapulse.core.official_sources import EUROSTAT_FEED, feed_entries
|
||||
|
||||
DESTATIS_ARCHIVES = {
|
||||
"de_cpi": "https://www.destatis.de/SiteGlobals/Forms/Suche/Presse/EN/Pressesuche_Formular_2.html?cl2Taxonomies_Themen_0=preise&cl2Taxonomies_Themen_1=verbraucherpreisindex",
|
||||
"de_gdp": "https://www.destatis.de/SiteGlobals/Forms/Suche/Presse/EN/Pressesuche_Formular_2.html?cl2Taxonomies_Themen_0=volkswirtschaftliche_gesamtrechnungen_inlandsprodukt",
|
||||
"de_jobs": "https://www.destatis.de/SiteGlobals/Forms/Suche/Presse/EN/Pressesuche_Formular_2.html?cl2Taxonomies_Themen_0=arbeitsmarkt&cl2Taxonomies_Themen_1=erwerbstaetigkeit",
|
||||
}
|
||||
|
||||
|
||||
def ons_links(body: str) -> tuple[list[str], str | None]:
|
||||
s = Selector(text=body)
|
||||
links = []
|
||||
for node in s.css("a[data-gtm-release-title]"):
|
||||
title = compact(Selector(text=node.attrib["data-gtm-release-title"]).xpath("string(.)").get())
|
||||
if family_for("ons", title) and not node.attrib["href"].endswith("timeseries"):
|
||||
links.append(urljoin("https://www.ons.gov.uk", node.attrib["href"]))
|
||||
following = s.css('a[rel="next"]::attr(href)').get()
|
||||
return links, urljoin("https://www.ons.gov.uk", following) if following else None
|
||||
|
||||
|
||||
def destatis_links(body: str, start: date, end: date) -> tuple[list[str], str | None]:
|
||||
s = Selector(text=body)
|
||||
links, days = [], []
|
||||
for node in s.css(".c-result"):
|
||||
date_text = compact(node.css(".c-result__date").xpath("string(.)").get() or "")
|
||||
if " of " not in date_text:
|
||||
raise ValueError("Destatis 历史索引缺少公告日期")
|
||||
day = datetime.strptime(date_text.rsplit(" of ", 1)[1], "%d %B %Y").date()
|
||||
days.append(day)
|
||||
a = node.css("h3 a")
|
||||
title = compact(a.xpath("string(.)").get())
|
||||
if start <= day <= end:
|
||||
url = urljoin("https://www.destatis.de/", a.attrib["href"])
|
||||
if url.endswith(("_611.html", "_132.html")) or (url.endswith("_811.html") and "quarter" in title):
|
||||
links.append(url)
|
||||
if not days:
|
||||
raise ValueError("Destatis 历史索引没有公告数据行")
|
||||
following = s.css("a.forward::attr(href)").get() if max(days) >= start else None
|
||||
return links, urljoin("https://www.destatis.de/", following) if following else None
|
||||
|
||||
|
||||
async def collect(source: str, start: date, end: date, fetch, known: set[str], errors: list[dict]):
|
||||
"""fetch 由回补入口负责限速、只读窗口与官方域名校验。"""
|
||||
links = []
|
||||
if source == "ecb":
|
||||
for year in range(start.year, end.year + 1):
|
||||
url = f"https://www.ecb.europa.eu/press/govcdec/mopo/{year}/html/index_include.en.html"
|
||||
doc = await fetch(source, url)
|
||||
links.extend(urljoin(url, a) for a in Selector(text=doc.body.decode()).css('a[href]::attr(href)').getall() if "/ecb.mp" in a and a.endswith(".en.html"))
|
||||
elif source == "boe":
|
||||
url = "https://www.bankofengland.co.uk/sitemap/minutes"
|
||||
doc = await fetch(source, url)
|
||||
for a in Selector(text=doc.body.decode()).css('a[href]::attr(href)').getall():
|
||||
if any(f"/monetary-policy-summary-and-minutes/{y}/" in a for y in range(start.year, end.year + 1)) and not a.endswith(".pdf"):
|
||||
links.append(urljoin(url, a))
|
||||
elif source == "eurostat":
|
||||
for page in range(1, 31):
|
||||
url = EUROSTAT_FEED + f"&_estatsearchportlet_WAR_estatsearchportlet_INSTANCE_OaTpFrwlabNK_pageNumber={page}"
|
||||
doc = await fetch(source, url)
|
||||
entries = feed_entries(doc.body, source)
|
||||
if not entries:
|
||||
break
|
||||
links.extend(e.url for e in entries if start <= e.at.date() <= end and family_for(source, e.title))
|
||||
if min(e.at.date() for e in entries) < start:
|
||||
break
|
||||
else:
|
||||
raise ValueError("Eurostat 归档超过已核实的 30 页范围,覆盖未完成")
|
||||
elif source == "ons":
|
||||
dates = {"after-day": start.day, "after-month": start.month, "after-year": start.year,
|
||||
"before-day": end.day, "before-month": end.month, "before-year": end.year}
|
||||
for keyword in ("consumer price inflation", "UK labour market", "GDP quarterly"):
|
||||
url = "https://www.ons.gov.uk/releasecalendar?" + urlencode({**dates, "release-type": "type-published", "keywords": keyword, "limit": 100})
|
||||
seen = set()
|
||||
while url:
|
||||
if url in seen:
|
||||
raise ValueError("ONS 归档分页形成循环")
|
||||
seen.add(url)
|
||||
doc = await fetch(source, url)
|
||||
found, url = ons_links(doc.body.decode())
|
||||
links.extend(found)
|
||||
elif source == "destatis":
|
||||
for initial in DESTATIS_ARCHIVES.values():
|
||||
url, seen = initial, set()
|
||||
while url:
|
||||
if url in seen:
|
||||
raise ValueError("Destatis 归档分页形成循环")
|
||||
seen.add(url)
|
||||
doc = await fetch(source, url)
|
||||
found, url = destatis_links(doc.body.decode(), start, end)
|
||||
links.extend(found)
|
||||
elif source == "insee":
|
||||
# 官网 agenda-diffusion 返回的六个统计公报系列 ID;不是当前修订时间序列。
|
||||
for family_id in (1250, 137, 1251, 109, 104):
|
||||
offset = 0
|
||||
while True:
|
||||
doc = await fetch(source, "https://www.insee.fr/fr/solr/consultation", query={
|
||||
"q": "*:*", "start": offset, "rows": 100,
|
||||
"filters": [{"field": "familleId", "value": str(family_id)}],
|
||||
"sortFields": [{"field": "dateDiffusion", "order": "desc"}],
|
||||
})
|
||||
result = json.loads(doc.body)
|
||||
if result["status"] != 0 or not result["documents"]:
|
||||
raise ValueError("INSEE 历史公报查询失败或没有目标系列")
|
||||
documents = result["documents"]
|
||||
for item in documents:
|
||||
day = datetime.fromisoformat(item["dateDiffusion"]).date()
|
||||
if start <= day <= end:
|
||||
links.append(f"https://www.insee.fr/fr/statistiques/{item['id']}")
|
||||
offset += len(documents)
|
||||
if offset >= result["numFounds"] or min(datetime.fromisoformat(d["dateDiffusion"]).date() for d in documents) < start:
|
||||
break
|
||||
else:
|
||||
raise ValueError(f"未支持的欧洲归档来源:{source}")
|
||||
if not links:
|
||||
raise ValueError(f"{source} 官方归档没有识别到目标公告,历史覆盖未核实")
|
||||
documents = []
|
||||
for url in dict.fromkeys(links):
|
||||
if url in known:
|
||||
continue
|
||||
try:
|
||||
doc = await fetch(source, url)
|
||||
if source == "ons" and "/releases/" in doc.url:
|
||||
sel = Selector(text=doc.body.decode())
|
||||
title = compact(sel.css("h1").xpath("string(.)").get() or "")
|
||||
target = family_for(source, title)
|
||||
if target is None:
|
||||
raise ValueError("ONS 历史发布页不是目标公报")
|
||||
patterns = {"uk_cpi": "/bulletins/consumerpriceinflation/", "uk_gdp": "/bulletins/", "uk_jobs": "/bulletins/uklabourmarket/"}
|
||||
candidates = list(dict.fromkeys(urljoin(doc.url, u) for u in sel.css('a[href]::attr(href)').getall() if patterns[target[0]] in u))
|
||||
if len(candidates) != 1:
|
||||
raise ValueError("ONS 历史发布页未唯一指向目标公报")
|
||||
if candidates[0] in known:
|
||||
known.add(url)
|
||||
continue
|
||||
doc = await fetch(source, candidates[0])
|
||||
documents.append(doc)
|
||||
known.update((url, doc.url))
|
||||
except (httpx.HTTPError, ValueError, KeyError) as exc:
|
||||
errors.append({"source": source, "url": url, "error": str(exc)})
|
||||
if isinstance(exc, httpx.HTTPStatusError) and exc.response.status_code in (429, 503):
|
||||
errors.append({"source": source, "error": "官网限流或暂不可用,已停止该来源回补;本次历史覆盖不完整,请稍后重跑。", "retry_after": exc.response.headers.get("Retry-After")})
|
||||
break
|
||||
return documents
|
||||
@@ -0,0 +1,233 @@
|
||||
"""官方来源的窄口径解析;页面改变或数据缺失时报错,不返回伪造的零值。"""
|
||||
import re
|
||||
from dataclasses import dataclass
|
||||
from datetime import UTC, date, datetime
|
||||
from decimal import Decimal
|
||||
from urllib.parse import urljoin
|
||||
from zoneinfo import ZoneInfo
|
||||
|
||||
from parsel import Selector
|
||||
|
||||
EASTERN = ZoneInfo("America/New_York")
|
||||
MONTHS = {name: i for i, name in enumerate(
|
||||
("January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"), 1)}
|
||||
|
||||
|
||||
@dataclass(frozen=True)
|
||||
class Scheduled:
|
||||
external_id: str
|
||||
family: str
|
||||
title: str
|
||||
at: datetime
|
||||
status: str = "scheduled"
|
||||
period: str | None = None
|
||||
stage: str | None = None
|
||||
release_url: str | None = None
|
||||
|
||||
|
||||
def compact(value: str) -> str:
|
||||
return re.sub(r"\s+", " ", value).strip()
|
||||
|
||||
|
||||
def bea_family(title: str) -> str | None:
|
||||
if title.startswith("Personal Income and Outlays"):
|
||||
return "pce"
|
||||
return "gdp" if re.match(r"(?:Gross Domestic Product|GDP)\s*[(,]", title) else None
|
||||
|
||||
|
||||
def bea_release_link(body: str, day: date, family: str) -> str | None:
|
||||
sel = Selector(text=body, type="html")
|
||||
rows = sel.css("tr.scheduled-releases-type-press")
|
||||
if not rows:
|
||||
raise ValueError("BEA 公告日程缺少数据行")
|
||||
matches = []
|
||||
for row in rows:
|
||||
title = compact(row.css(".release-title").xpath("string(.)").get())
|
||||
date_text = compact(row.css(".release-date").xpath("string(.)").get())
|
||||
if date_text != day.strftime("%B ") + str(day.day) or bea_family(title) != family:
|
||||
continue
|
||||
link = row.css('a[href*="/news/"]::attr(href)').get()
|
||||
if link and f"/news/{day.year}/" in link:
|
||||
matches.append(urljoin("https://www.bea.gov", link))
|
||||
if len(matches) > 1:
|
||||
raise ValueError("BEA 同日同类公告不唯一,不能确定结果")
|
||||
return matches[0] if matches else None
|
||||
|
||||
|
||||
def parse_ics(body: str, source: str) -> list[Scheduled]:
|
||||
body = re.sub(r"\r?\n[ \t]", "", body)
|
||||
if "BEGIN:VCALENDAR" not in body or "END:VCALENDAR" not in body:
|
||||
raise ValueError("官方日历不是完整 iCalendar")
|
||||
results = []
|
||||
for block in re.findall(r"BEGIN:VEVENT(.*?)END:VEVENT", body, re.S):
|
||||
fields = dict(line.split(":", 1) for line in block.splitlines() if ":" in line)
|
||||
title = fields["SUMMARY"].replace(r"\,", ",").replace(r"\n", " ")
|
||||
family = {"Consumer Price Index": "cpi", "Producer Price Index": "ppi", "Employment Situation": "jobs"}.get(title)
|
||||
if source == "bea":
|
||||
family = bea_family(title)
|
||||
if family is None:
|
||||
continue
|
||||
key, value = next((k, v) for k, v in fields.items() if k.split(";")[0] == "DTSTART")
|
||||
if value.endswith("Z"):
|
||||
at = datetime.strptime(value, "%Y%m%dT%H%M%SZ").replace(tzinfo=UTC)
|
||||
elif "TZID=US-Eastern" in key or "TZID=America/New_York" in key:
|
||||
at = datetime.strptime(value, "%Y%m%dT%H%M%S").replace(tzinfo=EASTERN).astimezone(UTC)
|
||||
else:
|
||||
raise ValueError(f"日历缺少受支持的精确时区:{key}")
|
||||
status = fields.get("STATUS", "CONFIRMED")
|
||||
if status not in ("CONFIRMED", "TENTATIVE", "CANCELLED"):
|
||||
raise ValueError(f"不支持的日历状态:{status}")
|
||||
period, stage = release_metadata(family, title)
|
||||
results.append(Scheduled(fields["UID"], family, title, at, "withdrawn" if status == "CANCELLED" else "scheduled", period, stage))
|
||||
if not results:
|
||||
raise ValueError("官方日历未找到美国目标指标")
|
||||
return results
|
||||
|
||||
|
||||
def parse_fed_calendar(body: str) -> list[Scheduled]:
|
||||
sel = Selector(text=body, type="html")
|
||||
heading = next((compact(n.xpath("string(.)").get()) for n in sel.css("h2,h3,h4")
|
||||
if re.fullmatch(r"[A-Za-z]+ 20\d\d", compact(n.xpath("string(.)").get()))), None)
|
||||
if heading is None:
|
||||
raise ValueError("美联储月历缺少年月")
|
||||
month, year = heading.split()
|
||||
results = []
|
||||
for node in sel.xpath('//p[normalize-space(.)="FOMC Meeting"]'):
|
||||
row = node.xpath("../..")
|
||||
clock = compact(row.css(".col-xs-2").xpath("string(.)").get()).replace("a.m.", "AM").replace("p.m.", "PM")
|
||||
day = int(compact(row.css(".col-xs-3").xpath("string(.)").get()))
|
||||
time = datetime.strptime(clock, "%I:%M %p")
|
||||
at = datetime(int(year), MONTHS[month], day, time.hour, time.minute, tzinfo=EASTERN).astimezone(UTC)
|
||||
results.append(Scheduled(f"fomc-{year}-{MONTHS[month]:02d}-{day:02d}", "fomc", "FOMC 利率决议", at))
|
||||
# 官方月份无会议是正常状态;无法识别页面结构则不能解释成无会议。
|
||||
if not sel.css(".cal-nojs__rowTitle"):
|
||||
raise ValueError("美联储月历结构无法识别")
|
||||
return results
|
||||
|
||||
|
||||
def release_date(body: str) -> datetime:
|
||||
text = compact(Selector(text=body, type="html").xpath("string(//body)").get())
|
||||
match = re.search(r"(?:January|February|March|April|May|June|July|August|September|October|November|December) \d{1,2}, 20\d{2}", text)
|
||||
if match is None:
|
||||
raise ValueError("公告缺少正式发布日期")
|
||||
return datetime.strptime(match[0], "%B %d, %Y").replace(tzinfo=EASTERN)
|
||||
|
||||
|
||||
def number(value: str) -> str:
|
||||
cleaned = value.strip().replace(",", "").replace("−", "-")
|
||||
if not re.fullmatch(r"[+-]?\d+(?:\.\d+)?", cleaned):
|
||||
raise ValueError(f"公布值不是有效数字:{value!r}")
|
||||
return str(Decimal(cleaned))
|
||||
|
||||
|
||||
def cells(row: Selector) -> list[str]:
|
||||
return [compact(n.xpath("string(.)").get()) for n in row.xpath("./th|./td")]
|
||||
|
||||
|
||||
def release_metadata(family: str, title: str) -> tuple[str | None, str | None]:
|
||||
"""只解析来源明示的统计期;不以发布时间推算上月或上季。"""
|
||||
if family == "gdp":
|
||||
quarter = re.search(r"(1st|2nd|3rd|4th|first|second|third|fourth)\s+quarter(?:\s+and\s+year|\s+of)?\s+(20\d\d)", title, re.I)
|
||||
stages = re.search(r"\b(advance|second|third|initial|updated)\s+estimate\b", title, re.I)
|
||||
numbers = {"1st": 1, "2nd": 2, "3rd": 3, "4th": 4, "first": 1, "second": 2, "third": 3, "fourth": 4}
|
||||
return (f"{quarter[2]}-Q{numbers[quarter[1].lower()]}" if quarter else None,
|
||||
stages[1].lower() if stages else None)
|
||||
month = re.search(r"\b(" + "|".join(MONTHS) + r")\s+(20\d\d)\b", title, re.I)
|
||||
return (f"{month[2]}-{MONTHS[month[1].title()]:02d}" if month else None, None)
|
||||
|
||||
|
||||
def bls_periods(body: str) -> dict[datetime, str]:
|
||||
sel = Selector(text=body, type="html")
|
||||
periods = {}
|
||||
for node in sel.css("table tr"):
|
||||
row = cells(node)
|
||||
if len(row) != 3 or not re.fullmatch(r"[A-Za-z]+ 20\d\d", row[0]):
|
||||
continue
|
||||
period, _ = release_metadata("cpi", row[0])
|
||||
day = row[1].replace(".", "")
|
||||
at = datetime.strptime(day + " " + row[2], "%b %d, %Y %I:%M %p").replace(tzinfo=EASTERN).astimezone(UTC)
|
||||
periods[at] = period
|
||||
if not periods:
|
||||
raise ValueError("BLS 分项日程缺少统计月份")
|
||||
return periods
|
||||
|
||||
|
||||
def parse_values(family: str, body: str) -> dict:
|
||||
sel = Selector(text=body, type="html")
|
||||
content = sel.css("#bodytext,.field--name-body,#article")
|
||||
if not content:
|
||||
raise ValueError("官方公告缺少正文")
|
||||
text = compact(content.xpath("string(.)").get()).replace("‑", "-")
|
||||
values = {}
|
||||
|
||||
def put(key: str, actual: str, previous: str | None = None) -> None:
|
||||
values[key] = {"actual": number(actual), "previous": number(previous) if previous is not None else None}
|
||||
|
||||
if family == "cpi":
|
||||
rows = {r[0]: r[1:] for n in sel.css("#cpi_pressa tr") if len(r := cells(n)) == 9}
|
||||
for label, prefix in [("All items", "cpi"), ("All items less food and energy", "core_cpi")]:
|
||||
row = rows[label]
|
||||
previous = None if row[-3] == "-" else row[-3]
|
||||
if row[-2] == "-":
|
||||
values[prefix + "_mom"] = {"actual": None, "previous": number(previous) if previous is not None else None,
|
||||
"unavailable_reason": "官方表格未发布该期单月读数;不能用两个月累计变化替代月率。"}
|
||||
else:
|
||||
put(prefix + "_mom", row[-2], previous)
|
||||
put(prefix + "_yoy", row[-1])
|
||||
elif family == "ppi":
|
||||
rows = [r for n in sel.css("#ppi_nrtablea tr") if len(r := cells(n)) == 13 and re.match(r"[A-Z][a-z]", r[0])]
|
||||
if len(rows) < 2:
|
||||
raise ValueError("PPI 缺少本期与前期数据")
|
||||
put("ppi_mom", rows[-1][1], rows[-2][1])
|
||||
put("ppi_yoy", rows[-1][-2], rows[-2][-2])
|
||||
elif family == "jobs":
|
||||
employment = re.search(r"nonfarm payroll employment (?:(?:changed little(?: in [A-Za-z]+)?\s*)?\(([+-]?[\d,]+)\)|(?:rose|increased|declined|decreased|fell|edged up|edged down)(?: by)? ([\d,]+))", text)
|
||||
if employment is None:
|
||||
raise ValueError("就业报告缺少非农新增值")
|
||||
actual = Decimal(number(employment[1] or employment[2]))
|
||||
if re.search(r"declined|decreased|fell|edged down", employment[0]):
|
||||
actual = -actual
|
||||
revised = re.findall(r"change for \w+ was revised (?:up|down) by [\d,]+, from [+-]?[\d,]+ to ([+-]?[\d,]+)", text)
|
||||
previous = str(Decimal(number(revised[-1])) / 10000) if revised else None
|
||||
put("payrolls", str(actual / 10000), previous)
|
||||
rate = re.search(r"unemployment rate(?:, at| \(| (?:was unchanged|was|remained|held|changed little)(?: at)?| (?:rose|increased|fell|declined|decreased|edged down|edged up) to)\s*(\d+(?:\.\d+)?) percent", text)
|
||||
if rate is None:
|
||||
raise ValueError("就业报告缺少失业率")
|
||||
put("unemployment", rate[1])
|
||||
elif family == "pce":
|
||||
rows = {r[0].replace("index,", "index"): r[1:] for n in sel.css("table tr") if len(r := cells(n)) in (2, 3)}
|
||||
for label, key in [("PCE price index", "pce_mom"), ("PCE price index excluding food and energy", "core_pce_mom")]:
|
||||
if label in rows:
|
||||
put(key, rows[label][-1], rows[label][-2] if len(rows[label]) == 2 else None)
|
||||
else:
|
||||
clause = (r"From the preceding month, the PCE price index(?: for \w+)? " if key == "pce_mom"
|
||||
else r"Excluding food and energy, the PCE price index (?:also )?")
|
||||
change = re.search(clause + r"(increased|decreased) (\d+(?:\.\d+)?) percent", text)
|
||||
if change is None:
|
||||
raise ValueError(f"PCE 公告缺少精确月率:{key}")
|
||||
put(key, ("-" if change[1] == "decreased" else "") + change[2])
|
||||
annual = next((compact(p.xpath("string(.)").get()) for p in content.css("p")
|
||||
if "From the same month one year ago" in p.xpath("string(.)").get()), "")
|
||||
changes = re.findall(r"(increased|decreased) (\d+(?:\.\d+)?) percent", annual)
|
||||
if len(changes) != 2 or "Excluding food and energy" not in annual:
|
||||
raise ValueError("PCE 公告缺少整体与核心年率")
|
||||
for key, (movement, amount) in zip(("pce_yoy", "core_pce_yoy"), changes, strict=True):
|
||||
put(key, ("-" if movement == "decreased" else "") + amount)
|
||||
elif family == "gdp":
|
||||
match = re.search(r"Real gross domestic product \(GDP\) (increased|decreased) at an annual rate of (\d+(?:\.\d+)?) percent", text, re.I)
|
||||
if match is None:
|
||||
raise ValueError("GDP 公告缺少实际年化季率")
|
||||
put("gdp", ("-" if match[1].lower() == "decreased" else "") + match[2])
|
||||
elif family == "fomc":
|
||||
match = re.search(r"target range for the federal funds rate.{0,100}? to (\d+(?:[.-]\d+(?:/\d+)?)?(?:/\d+)?) percent", text)
|
||||
if match is None:
|
||||
raise ValueError("FOMC 声明缺少利率目标上限")
|
||||
raw = match[1]
|
||||
if "/" in raw:
|
||||
whole, fraction = raw.split("-", 1) if "-" in raw else ("0", raw)
|
||||
numerator, denominator = fraction.split("/")
|
||||
raw = str(Decimal(whole) + Decimal(numerator) / Decimal(denominator))
|
||||
put("fed_rate", raw)
|
||||
else:
|
||||
raise ValueError(f"不支持的指标:{family}")
|
||||
return values
|
||||
@@ -0,0 +1,234 @@
|
||||
import gzip
|
||||
import hashlib
|
||||
from datetime import UTC, datetime, timedelta
|
||||
from decimal import Decimal
|
||||
|
||||
from sqlalchemy import select
|
||||
from sqlalchemy.dialects.postgresql import insert
|
||||
from sqlalchemy.ext.asyncio import AsyncSession
|
||||
|
||||
from alphapulse.calendar.catalog import COUNTRIES, FAMILIES, INDICATORS, STAGES
|
||||
from alphapulse.calendar.parsers import Scheduled
|
||||
from alphapulse.models import EconomicRelease, EconomicRevision, EconomicSeriesValue, RawBody, RawResponse
|
||||
|
||||
|
||||
def next_poll(at: datetime, now: datetime, received: bool, failed: bool = False) -> datetime:
|
||||
age = (now - at).total_seconds()
|
||||
if age < 0:
|
||||
return at
|
||||
if received:
|
||||
seconds = 60 if age < 900 else 3600 if age < 86400 else 86400
|
||||
else:
|
||||
seconds = 5 if age < 120 else 15 if age < 900 else 60 if age < 7200 else 900
|
||||
if failed:
|
||||
seconds = max(seconds, 60)
|
||||
return now + timedelta(seconds=seconds)
|
||||
|
||||
|
||||
async def save_raw(session: AsyncSession, source: str, url: str, status: int, headers: dict, body: bytes, now: datetime, *, method: str = "GET") -> int:
|
||||
digest = hashlib.sha256(body).hexdigest()
|
||||
await session.execute(insert(RawBody).values(sha256=digest, body=gzip.compress(body)).on_conflict_do_nothing())
|
||||
row = RawResponse(source_code=source, url=url, method=method, status=status, headers=headers,
|
||||
body_sha256=digest, fetched_at=now)
|
||||
session.add(row)
|
||||
await session.flush()
|
||||
return row.id
|
||||
|
||||
|
||||
def revision_payload(row: EconomicRelease) -> dict:
|
||||
return {"title": row.title, "period": row.period, "stage": row.stage,
|
||||
"scheduled_at": row.scheduled_at.isoformat(), "schedule_status": row.schedule_status,
|
||||
"release_url": row.release_url, "values": row.values,
|
||||
"first_received_at": row.first_received_at.isoformat() if row.first_received_at else None}
|
||||
|
||||
|
||||
def record_revision(session: AsyncSession, row: EconomicRelease, raw_id: int) -> None:
|
||||
session.add(EconomicRevision(release_id=row.id, revision_no=row.revision_no,
|
||||
payload=revision_payload(row), raw_response_id=raw_id))
|
||||
|
||||
|
||||
async def save_schedule(session: AsyncSession, source: str, url: str, events: list[Scheduled], raw_id: int,
|
||||
now: datetime, *, withdraw_missing: bool = True) -> None:
|
||||
existing = list(await session.scalars(select(EconomicRelease).where(EconomicRelease.schedule_url == url).with_for_update()))
|
||||
by_id = {r.external_id: r for r in existing}
|
||||
seen = set()
|
||||
for event in events:
|
||||
if event.at < datetime(2024, 12, 31, 16, tzinfo=UTC):
|
||||
continue
|
||||
seen.add(event.external_id)
|
||||
row = by_id.get(event.external_id)
|
||||
if row is None:
|
||||
# 归档回补先于 ICS 入库时,以正式时间和期次接管已有事件,保留主键和首次取值。
|
||||
matches = list(await session.scalars(select(EconomicRelease).where(
|
||||
EconomicRelease.source == source, EconomicRelease.family == event.family,
|
||||
EconomicRelease.scheduled_at == event.at,
|
||||
).with_for_update()))
|
||||
matches = [r for r in matches if (event.period is None or r.period in (None, event.period))
|
||||
and (event.stage is None or r.stage in (None, event.stage))]
|
||||
if len(matches) > 1:
|
||||
raise ValueError("日程匹配到多个同系列同时间事件")
|
||||
if matches:
|
||||
row = matches[0]
|
||||
row.external_id, row.schedule_url = event.external_id, url
|
||||
if row is None:
|
||||
row = EconomicRelease(source=source, external_id=event.external_id, family=event.family, title=event.title,
|
||||
scheduled_at=event.at, schedule_status=event.status, schedule_url=url,
|
||||
period=event.period, stage=event.stage,
|
||||
release_url=event.release_url,
|
||||
schedule_checked_at=now, next_check_at=max(now, event.at), values={}, revision_no=1)
|
||||
session.add(row)
|
||||
await session.flush()
|
||||
record_revision(session, row, raw_id)
|
||||
else:
|
||||
changed = (row.scheduled_at != event.at or row.title != event.title or row.schedule_status != event.status
|
||||
or (event.period is not None and row.period != event.period)
|
||||
or (event.stage is not None and row.stage != event.stage)
|
||||
or (event.release_url is not None and row.release_url is None))
|
||||
row.schedule_checked_at = now
|
||||
if changed:
|
||||
row.scheduled_at, row.title, row.schedule_status = event.at, event.title, event.status
|
||||
if event.period is not None:
|
||||
row.period = event.period
|
||||
if event.stage is not None:
|
||||
row.stage = event.stage
|
||||
if row.release_url is None and event.release_url is not None:
|
||||
row.release_url = event.release_url
|
||||
row.next_check_at = max(now, event.at)
|
||||
row.revision_no += 1
|
||||
record_revision(session, row, raw_id)
|
||||
# 仅撤回尚未公布的未来事件;过去记录不因官网滚动窗口而被删除。
|
||||
for row in existing:
|
||||
if withdraw_missing and row.external_id not in seen and row.scheduled_at > now and row.first_received_at is None and row.schedule_status != "withdrawn":
|
||||
row.schedule_status = "withdrawn"
|
||||
row.revision_no += 1
|
||||
record_revision(session, row, raw_id)
|
||||
|
||||
|
||||
def save_result(session: AsyncSession, row: EconomicRelease, values: dict, url: str, raw_id: int, now: datetime,
|
||||
*, period: str | None = None, stage: str | None = None) -> None:
|
||||
if ((period is not None and row.period is not None and period != row.period)
|
||||
or (stage is not None and row.stage is not None and stage != row.stage)):
|
||||
raise ValueError("公告统计期或发布阶段与日历不符")
|
||||
if row.values != values or row.release_url != url or (period is not None and row.period != period) or (stage is not None and row.stage != stage):
|
||||
row.values = values
|
||||
row.release_url = url
|
||||
if period is not None:
|
||||
row.period = period
|
||||
if stage is not None:
|
||||
row.stage = stage
|
||||
if row.first_received_at is None:
|
||||
row.first_received_at = now
|
||||
row.revision_no += 1
|
||||
record_revision(session, row, raw_id)
|
||||
|
||||
|
||||
async def save_series(session: AsyncSession, source: str, indicator: str, points: list[tuple[str, str]],
|
||||
stage: str, raw_id: int, now: datetime) -> None:
|
||||
for period, value in points:
|
||||
stmt = insert(EconomicSeriesValue).values(source=source, indicator=indicator, period=period, stage=stage,
|
||||
value=value, raw_response_id=raw_id, captured_at=now)
|
||||
await session.execute(stmt.on_conflict_do_update(
|
||||
index_elements=["source", "indicator", "period", "stage"],
|
||||
set_={"value": value, "raw_response_id": raw_id, "captured_at": now},
|
||||
where=EconomicSeriesValue.captured_at < now,
|
||||
))
|
||||
|
||||
|
||||
async def apply_bls_periods(session: AsyncSession, family: str, periods: dict[datetime, str], raw_id: int) -> None:
|
||||
rows = await session.scalars(select(EconomicRelease).where(EconomicRelease.source == "bls",
|
||||
EconomicRelease.family == family,
|
||||
EconomicRelease.scheduled_at.in_(periods)).with_for_update())
|
||||
for row in rows:
|
||||
period = periods[row.scheduled_at]
|
||||
if row.period != period:
|
||||
row.period = period
|
||||
row.revision_no += 1
|
||||
record_revision(session, row, raw_id)
|
||||
|
||||
|
||||
def impact(key: str, actual: str | None, previous: str | None, forecast: str | None = None) -> tuple[str, str]:
|
||||
if actual is None:
|
||||
return "pending", "等待官方公布"
|
||||
reference = forecast if forecast is not None else previous
|
||||
if reference is None:
|
||||
return "uncertain", "已取得公布值,缺少可比前值和市场一致预期,暂不能判断影响。"
|
||||
basis = "市场预期" if forecast is not None else "前值"
|
||||
change = Decimal(actual) - Decimal(reference)
|
||||
movement = "上升" if change > 0 else "下降" if change < 0 else "持平"
|
||||
caveat = "未取得市场一致预期,这不是超预期判断。" if forecast is None else ""
|
||||
if not change:
|
||||
return "neutral", f"读数与{basis}一致,单项变化归为影响较小。{caveat}实际波动仍取决于其他数据和市场定价。"
|
||||
channel = INDICATORS[key].rate_channel
|
||||
if channel == "ambiguous":
|
||||
return "uncertain", f"读数较{basis}{movement}。政策、增长和汇率通道可能产生相反影响,暂不归为 BTC/ETH 的利多或利空。{caveat}"
|
||||
bullish = change < 0
|
||||
if key == "fed_rate":
|
||||
text = f"利率目标上限较{basis}{movement},按利率与流动性通道参考判断。"
|
||||
else:
|
||||
text = f"通胀读数较{basis}{movement},按通胀影响利率预期的通道参考判断。"
|
||||
return "bullish" if bullish else "bearish", text + caveat + "标签面向 BTC/ETH,不代表币价必然涨跌。"
|
||||
|
||||
|
||||
def release_rows(row: EconomicRelease, now: datetime) -> list[dict]:
|
||||
if row.schedule_status == "withdrawn":
|
||||
state = "withdrawn"
|
||||
elif row.first_received_at is not None:
|
||||
state = "released"
|
||||
elif now - row.scheduled_at > timedelta(days=45):
|
||||
state = "historical"
|
||||
elif row.error:
|
||||
state = "error"
|
||||
elif now < row.scheduled_at:
|
||||
state = "scheduled"
|
||||
else:
|
||||
state = "waiting" if now - row.scheduled_at < timedelta(minutes=2) else "delayed"
|
||||
result = []
|
||||
family = FAMILIES[row.family]
|
||||
country_name = COUNTRIES[family.country_code]
|
||||
period_name = ""
|
||||
if row.period is not None:
|
||||
period_name = f"第{row.period[-1]}季度" if "-Q" in row.period else f"{int(row.period[5:7])}月"
|
||||
for key in family.indicators:
|
||||
indicator = INDICATORS[key]
|
||||
value = row.values.get(key, {})
|
||||
actual, previous = value.get("actual"), value.get("previous")
|
||||
forecast = value.get("forecast")
|
||||
direction, explanation = impact(key, actual, previous, forecast)
|
||||
unavailable = actual is None and value.get("unavailable_reason")
|
||||
if unavailable:
|
||||
direction, explanation = "uncertain", value["unavailable_reason"]
|
||||
result.append({"release_id": row.id, "indicator": key, "name": indicator.name, "unit": indicator.unit,
|
||||
"country_code": family.country_code, "country_name": country_name,
|
||||
"event_name": f"{country_name}{period_name}{indicator.name}{STAGES[row.stage] if row.stage else ''}",
|
||||
"period": row.period, "stage": row.stage, "stage_name": STAGES[row.stage] if row.stage else None,
|
||||
"title": row.title, "source": row.source, "scheduled_at": row.scheduled_at,
|
||||
"importance": indicator.importance, "status": "unavailable" if unavailable and state == "released" else state,
|
||||
"actual": actual, "previous": previous, "forecast": forecast,
|
||||
"previous_basis": value.get("previous_basis", "官方本次报告列示前值(可能已修订)") if previous is not None else None,
|
||||
"impact_basis": "forecast" if forecast is not None else "previous" if previous is not None else None,
|
||||
"impact": direction, "explanation": explanation, "release_url": row.release_url,
|
||||
"schedule_url": row.schedule_url, "first_received_at": row.first_received_at,
|
||||
"last_checked_at": row.last_checked_at, "error": row.error, "revision_no": row.revision_no})
|
||||
return result
|
||||
|
||||
|
||||
async def indicator_history(session: AsyncSession, row: EconomicRelease, key: str, limit: int) -> list[dict]:
|
||||
# 指标代码和所属发布系列共同限定历史,防止核心/整体、年率/月率以及初值/终值混在一起。
|
||||
first_actual = (select(EconomicRevision.payload["values"][key]["actual"].as_string())
|
||||
.where(EconomicRevision.release_id == EconomicRelease.id,
|
||||
EconomicRevision.payload["values"][key]["actual"].as_string().is_not(None))
|
||||
.order_by(EconomicRevision.revision_no).limit(1).correlate(EconomicRelease).scalar_subquery())
|
||||
rows = (await session.execute(select(EconomicRelease, first_actual).where(
|
||||
EconomicRelease.source == row.source, EconomicRelease.family == row.family,
|
||||
EconomicRelease.stage.is_not_distinct_from(row.stage),
|
||||
EconomicRelease.scheduled_at <= row.scheduled_at,
|
||||
EconomicRelease.schedule_status != "withdrawn", EconomicRelease.first_received_at.is_not(None),
|
||||
EconomicRelease.values[key]["actual"].as_string().is_not(None),
|
||||
).order_by(EconomicRelease.scheduled_at.desc(), EconomicRelease.id.desc()).limit(limit))).all()
|
||||
return [{"release_id": item.id, "scheduled_at": item.scheduled_at, "title": item.title,
|
||||
"period": item.period, "stage": item.stage,
|
||||
"actual": item.values[key]["actual"], "previous": item.values[key].get("previous"),
|
||||
"forecast": item.values[key].get("forecast"), "first_recorded_actual": initial,
|
||||
"first_received_at": item.first_received_at, "release_url": item.release_url,
|
||||
"revised": initial is not None and Decimal(initial) != Decimal(item.values[key]["actual"])}
|
||||
for item, initial in rows]
|
||||
@@ -0,0 +1,91 @@
|
||||
"""密歇根公开日程、当前公告和月度终值;三者的时间与版本口径分开。"""
|
||||
import csv
|
||||
import re
|
||||
from datetime import UTC, datetime
|
||||
from io import BytesIO, StringIO
|
||||
from urllib.parse import urljoin
|
||||
|
||||
from parsel import Selector
|
||||
from pypdf import PdfReader
|
||||
from pypdf.errors import PdfReadError
|
||||
|
||||
from alphapulse.calendar.parsers import EASTERN, MONTHS, Scheduled, cells, compact, number
|
||||
|
||||
|
||||
def pdf_text(body: bytes, pages: int | None = None) -> str:
|
||||
try:
|
||||
reader = PdfReader(BytesIO(body))
|
||||
text = "\n".join(page.extract_text() for page in reader.pages[:pages])
|
||||
except PdfReadError as exc:
|
||||
raise ValueError("官方 PDF 无法读取") from exc
|
||||
if not text.strip():
|
||||
raise ValueError("官方 PDF 缺少可提取文字")
|
||||
return text
|
||||
|
||||
|
||||
def document_links(body: str, base: str, labels: set[str]) -> dict[str, str]:
|
||||
links = {compact(a.xpath("string(.)").get()): urljoin(base, a.attrib["href"])
|
||||
for a in Selector(text=body, type="html").css("a[href]")}
|
||||
return {label: links[label] for label in labels if label in links}
|
||||
|
||||
|
||||
def parse_schedule(text: str) -> list[Scheduled]:
|
||||
events = []
|
||||
# 历史 PDF 明确列出调查月份、初值日期和终值日期,包括跨月公布。
|
||||
for match in re.finditer(r"\b([A-Z][a-z]{2})\s+(20\d\d)\s+(\d{1,2}/\d{1,2}/\d{4})\s+(\d{1,2}/\d{1,2}/\d{4})", text):
|
||||
month = datetime.strptime(match[1], "%b").month
|
||||
period = f"{match[2]}-{month:02d}"
|
||||
for stage, value in zip(("preliminary", "final"), (match[3], match[4]), strict=True):
|
||||
at = datetime.strptime(value, "%m/%d/%Y").replace(hour=10, tzinfo=EASTERN).astimezone(UTC)
|
||||
events.append(Scheduled(f"umich-{period}-{stage}", "umich", "University of Michigan Consumer Sentiment", at,
|
||||
period=period, stage=stage))
|
||||
if events:
|
||||
if len({e.external_id for e in events}) != len(events):
|
||||
raise ValueError("密歇根日程存在重复期次")
|
||||
return events
|
||||
year = re.search(r"RELEASE DATES FOR (20\d\d)", text)
|
||||
if year:
|
||||
for match in re.finditer(r"([A-Z][a-z]+)\s+(\d{1,2})\s+([A-Z][a-z]+)\s+(Prelim|Final)\b", text):
|
||||
period = f"{year[1]}-{MONTHS[match[3]]:02d}"
|
||||
stage = "preliminary" if match[4] == "Prelim" else "final"
|
||||
at = datetime(int(year[1]), MONTHS[match[1]], int(match[2]), 10, tzinfo=EASTERN).astimezone(UTC)
|
||||
events.append(Scheduled(f"umich-{period}-{stage}", "umich", "University of Michigan Consumer Sentiment", at,
|
||||
period=period, stage=stage))
|
||||
if not events:
|
||||
raise ValueError("密歇根日程 PDF 缺少可识别的公布日期")
|
||||
if len({e.external_id for e in events}) != len(events):
|
||||
raise ValueError("密歇根日程存在重复期次")
|
||||
return events
|
||||
|
||||
|
||||
def current_result(body: str) -> tuple[str, str, dict]:
|
||||
sel = Selector(text=body, type="html")
|
||||
heading = compact(sel.css("h1").xpath("string(.)").get())
|
||||
match = re.fullmatch(r"(Preliminary|Final) Results for ([A-Z][a-z]+) (20\d\d)", heading)
|
||||
if not match:
|
||||
raise ValueError("密歇根当前公告缺少统计月份或发布阶段")
|
||||
period = f"{match[3]}-{MONTHS[match[2]]:02d}"
|
||||
stage = "preliminary" if match[1] == "Preliminary" else "final"
|
||||
rows = [cells(r) for r in sel.css("#front_table tr")]
|
||||
if len(rows) < 3 or any(len(row) < 3 for row in rows) or rows[0][1] != match[2][:3] or rows[1][1] != match[3]:
|
||||
raise ValueError("密歇根表头与公告期次不符")
|
||||
row = next((r for r in rows if r[0] == "Index of Consumer Sentiment"), None)
|
||||
if row is None:
|
||||
raise ValueError("密歇根公告缺少消费者信心指数")
|
||||
# 官网列的是上月终值,不能标成本期初值;两者在详情中明确区别。
|
||||
previous_period = datetime.strptime(rows[0][2] + " " + rows[1][2], "%b %Y").strftime("%Y-%m")
|
||||
return period, stage, {"umich_sentiment": {"actual": number(row[1]), "previous": number(row[2]),
|
||||
"previous_basis": f"{previous_period} 官方上月终值"}}
|
||||
|
||||
|
||||
def monthly_series(body: str) -> list[tuple[str, str]]:
|
||||
reader = csv.DictReader(StringIO(body.lstrip("\ufeff")))
|
||||
if reader.fieldnames != ["Month", "YYYY", "ICS_ALL"]:
|
||||
raise ValueError("密歇根月度 CSV 列名不符")
|
||||
result = []
|
||||
for row in reader:
|
||||
period = f"{int(row['YYYY']):04d}-{MONTHS[row['Month']]:02d}"
|
||||
result.append((period, number(row["ICS_ALL"])))
|
||||
if not result or len({p for p, _ in result}) != len(result):
|
||||
raise ValueError("密歇根月度 CSV 为空或统计期重复")
|
||||
return result
|
||||
@@ -0,0 +1,334 @@
|
||||
"""独立日历采集进程:日程每小时刷新,公布窗口按 5/15/60 秒检查官方结果。"""
|
||||
import asyncio
|
||||
import json
|
||||
import logging
|
||||
import ssl
|
||||
from datetime import UTC, datetime, timedelta
|
||||
from email.utils import parsedate_to_datetime
|
||||
from urllib.parse import urljoin, urlparse
|
||||
|
||||
import httpx
|
||||
from parsel import Selector
|
||||
from sqlalchemy import select
|
||||
|
||||
from alphapulse.calendar.catalog import SCHEDULE_URLS, UMICH_CSV, UMICH_HISTORY, UMICH_HOME, UMICH_INFO
|
||||
from alphapulse.calendar import europe
|
||||
from alphapulse.calendar.parsers import EASTERN, MONTHS, bea_release_link, parse_fed_calendar, parse_ics, parse_values, release_date, bls_periods, release_metadata
|
||||
from alphapulse.calendar.service import apply_bls_periods, record_revision, next_poll, save_raw, save_result, save_schedule, save_series
|
||||
from alphapulse.calendar.umich import current_result, document_links, monthly_series, parse_schedule, pdf_text
|
||||
from alphapulse.core.db import SessionLocal
|
||||
from alphapulse.core.official_sources import FEEDS, HOSTS, feed_entries
|
||||
from alphapulse.core.redis import KEY_PREFIX, redis
|
||||
from alphapulse.models import EconomicRelease
|
||||
|
||||
logger = logging.getLogger("alphapulse.calendar")
|
||||
STATUS_KEY = f"{KEY_PREFIX}calendar:status"
|
||||
HISTORY_DAYS = 45
|
||||
|
||||
|
||||
def retry_after_at(value: str | None, now: datetime) -> datetime | None:
|
||||
if value is None:
|
||||
return None
|
||||
try:
|
||||
value = value.strip()
|
||||
if value.isdecimal():
|
||||
return now + timedelta(seconds=int(value))
|
||||
at = parsedate_to_datetime(value)
|
||||
if at.tzinfo is None:
|
||||
raise ValueError("Retry-After 日期缺少时区")
|
||||
return at.astimezone(UTC)
|
||||
except (ValueError, OverflowError, TypeError) as exc:
|
||||
logger.warning("官方 Retry-After 无法解析,沿用既有轮询间隔:%s", exc)
|
||||
return None
|
||||
|
||||
|
||||
def fed_month_urls(now: datetime) -> list[str]:
|
||||
month = now.astimezone(EASTERN).replace(day=1)
|
||||
following = (month + timedelta(days=32)).replace(day=1)
|
||||
names = {v: k.lower() for k, v in MONTHS.items()}
|
||||
return [f"https://www.federalreserve.gov/newsevents/{d.year}-{names[d.month]}.htm" for d in (month, following)]
|
||||
|
||||
|
||||
class CalendarWorker:
|
||||
def __init__(self) -> None:
|
||||
# 沿用已验证的 BLS TLS 设置;其余来源保持默认配置。
|
||||
ctx = ssl.create_default_context()
|
||||
ctx.set_ciphers("DEFAULT")
|
||||
self.http = httpx.AsyncClient(timeout=8, follow_redirects=True, headers={"User-Agent": "AlphaPulse economic calendar"})
|
||||
self.bls = httpx.AsyncClient(timeout=8, follow_redirects=True, verify=ctx, headers={"User-Agent": "AlphaPulse economic calendar"})
|
||||
self.sources: dict[str, dict] = {}
|
||||
self.fetch_slots = asyncio.Semaphore(2)
|
||||
|
||||
async def fetch(self, source: str, url: str, *, query: dict | None = None) -> tuple[httpx.Response, int]:
|
||||
# 链接来自公开响应,限制到对应官方域名,避免外部内容扩大访问范围。
|
||||
allowed = {"bls": {"www.bls.gov"}, "bea": {"www.bea.gov", "apps.bea.gov"}, "fed": {"www.federalreserve.gov"},
|
||||
"umich": {"www.sca.isr.umich.edu", "data.sca.isr.umich.edu"}, **HOSTS}
|
||||
if urlparse(url).scheme != "https" or urlparse(url).hostname not in allowed[source]:
|
||||
raise ValueError("公告链接不是对应机构的官方 HTTPS 地址")
|
||||
async with self.fetch_slots:
|
||||
client = self.bls if source == "bls" else self.http
|
||||
response = await client.post(url, json=query) if query is not None else await client.get(url)
|
||||
if urlparse(str(response.url)).hostname not in allowed[source] or response.url.scheme != "https":
|
||||
raise ValueError("官方响应重定向到了不受支持的地址")
|
||||
now = datetime.now(UTC)
|
||||
async with SessionLocal() as session:
|
||||
raw_id = await save_raw(session, source, str(response.url), response.status_code,
|
||||
{k: v for k, v in response.headers.items() if k in ("content-type", "date", "last-modified", "etag", "retry-after")},
|
||||
response.content, now, method=response.request.method)
|
||||
await session.commit()
|
||||
return response, raw_id
|
||||
|
||||
async def schedules(self) -> None:
|
||||
now = datetime.now(UTC)
|
||||
urls = [(s, u) for s, u in SCHEDULE_URLS.items() if s != "fed"] + [("fed", u) for u in fed_month_urls(now)]
|
||||
urls += [("bls", f"https://www.bls.gov/schedule/news_release/{code}.htm") for code in ("cpi", "ppi", "empsit")]
|
||||
urls += [("umich", UMICH_INFO), ("umich", UMICH_CSV)]
|
||||
urls += list(europe.SCHEDULES.items())
|
||||
# 启动时明确各来源尚未就绪;月份滚动后移除不再检查的旧月状态。
|
||||
self.sources = {url: self.sources.get(url, {"source": source, "checked_at": now.isoformat(), "error": "尚未同步"})
|
||||
for source, url in urls}
|
||||
for source, url in urls:
|
||||
retry_at = self.sources[url].get("retry_at")
|
||||
if retry_at and datetime.fromisoformat(retry_at) > datetime.now(UTC):
|
||||
continue
|
||||
try:
|
||||
fetch_url = europe.eurostat_calendar_url(now) if source == "eurostat" else url
|
||||
response, raw_id = await self.fetch(source, fetch_url, query=europe.INSEE_QUERY if source == "insee" else None)
|
||||
response.raise_for_status()
|
||||
if source in europe.SCHEDULES:
|
||||
events = europe.parse_schedule(source, response.text)
|
||||
async with SessionLocal() as session:
|
||||
# 欧洲公开日程是滚动/分页窗口,缺失不等于撤回。
|
||||
await save_schedule(session, source, url, events, raw_id, datetime.now(UTC), withdraw_missing=False)
|
||||
await session.commit()
|
||||
elif url == UMICH_INFO:
|
||||
await self.umich_schedule(response.text, now)
|
||||
elif url == UMICH_CSV:
|
||||
points = [(p, v) for p, v in monthly_series(response.text) if p >= "2024-12" and p <= now.strftime("%Y-%m")]
|
||||
async with SessionLocal() as session:
|
||||
await save_series(session, "umich", "umich_sentiment", points, "final", raw_id, datetime.now(UTC))
|
||||
await session.commit()
|
||||
elif source == "bls" and url.endswith(".htm"):
|
||||
code = url.rsplit("/", 1)[1].split(".")[0]
|
||||
async with SessionLocal() as session:
|
||||
await apply_bls_periods(session, "jobs" if code == "empsit" else code, bls_periods(response.text), raw_id)
|
||||
await session.commit()
|
||||
else:
|
||||
events = parse_fed_calendar(response.text) if source == "fed" else parse_ics(response.text, source)
|
||||
async with SessionLocal() as session:
|
||||
await save_schedule(session, source, url, events, raw_id, datetime.now(UTC))
|
||||
await session.commit()
|
||||
self.sources[url] = {"source": source, "checked_at": datetime.now(UTC).isoformat(), "error": None}
|
||||
except (httpx.HTTPError, ValueError, KeyError, TypeError, IndexError, StopIteration) as exc:
|
||||
self.sources[url] = {"source": source, "checked_at": datetime.now(UTC).isoformat(), "error": str(exc)}
|
||||
if isinstance(exc, httpx.HTTPStatusError) and exc.response.status_code in (429, 503):
|
||||
retry_at = retry_after_at(exc.response.headers.get("Retry-After"), datetime.now(UTC))
|
||||
if retry_at is not None:
|
||||
self.sources[url]["retry_at"] = retry_at.isoformat()
|
||||
logger.exception("日程采集失败:%s", url)
|
||||
|
||||
async def umich_schedule(self, info: str, now: datetime) -> None:
|
||||
history, _ = await self.fetch("umich", UMICH_HISTORY)
|
||||
history.raise_for_status()
|
||||
links = document_links(history.text, UMICH_HISTORY, {"Historical Prelim/Final Release Dates"})
|
||||
if "Historical Prelim/Final Release Dates" not in links:
|
||||
raise ValueError("密歇根官方资料缺少历史发布日期 PDF")
|
||||
documents = list(links.values())
|
||||
yearly = document_links(info, UMICH_INFO, {f"{year} Release Dates" for year in (now.year, now.year + 1)})
|
||||
if f"{now.year} Release Dates" not in yearly:
|
||||
raise ValueError("密歇根官方资料缺少当年日程 PDF")
|
||||
documents.extend(yearly.values())
|
||||
events = {}
|
||||
raw_id = None
|
||||
for url in documents:
|
||||
response, raw_id = await self.fetch("umich", url)
|
||||
response.raise_for_status()
|
||||
parsed = await asyncio.to_thread(parse_schedule, await asyncio.to_thread(pdf_text, response.content))
|
||||
# 年度日程在历史表之后处理,以官方最新年度安排为准;同一稳定身份不创建重复事件。
|
||||
for event in parsed:
|
||||
events[event.external_id] = (event, raw_id)
|
||||
async with SessionLocal() as session:
|
||||
# 不按单份 PDF 撤回其他年度事件;合并日程一次同步,修订引用对应 PDF。
|
||||
existing = {r.external_id: r for r in await session.scalars(select(EconomicRelease).where(
|
||||
EconomicRelease.source == "umich"))}
|
||||
batches = {}
|
||||
for event, evidence in events.values():
|
||||
if event.at < datetime(2024, 12, 31, 16, tzinfo=UTC):
|
||||
continue
|
||||
# 每份 PDF 是部分日程,不能让 save_schedule 的撤回逻辑作用于其他事件。
|
||||
batches.setdefault(evidence, []).append(event)
|
||||
for evidence, batch in batches.items():
|
||||
await save_schedule(session, "umich", UMICH_INFO, batch, evidence, now, withdraw_missing=False)
|
||||
if raw_id is not None:
|
||||
for row in existing.values():
|
||||
if row.external_id not in events and row.scheduled_at > now and row.first_received_at is None and row.schedule_status != "withdrawn":
|
||||
row.schedule_status = "withdrawn"
|
||||
row.revision_no += 1
|
||||
record_revision(session, row, raw_id)
|
||||
await session.commit()
|
||||
|
||||
async def result_page(self, row: EconomicRelease) -> tuple[httpx.Response, int] | None:
|
||||
if row.source in europe.SCHEDULES:
|
||||
return await self.european_result(row)
|
||||
date = row.scheduled_at.astimezone(EASTERN).date()
|
||||
if row.source == "umich":
|
||||
response, raw_id = await self.fetch("umich", UMICH_HOME)
|
||||
response.raise_for_status()
|
||||
period, stage, _ = current_result(response.text)
|
||||
if period == row.period and stage == row.stage:
|
||||
return response, raw_id
|
||||
if period < row.period or (period == row.period and stage == "preliminary" and row.stage == "final"):
|
||||
return None
|
||||
raise ValueError("密歇根当前页已晚于所选历史期次,未取得当期公告")
|
||||
if row.source == "bls":
|
||||
code = "empsit" if row.family == "jobs" else row.family
|
||||
# 本机 BLS archive 路径返回 403,最新公告页可访问;下面必须核对正式发布日期。
|
||||
url = f"https://www.bls.gov/news.release/{code}.nr0.htm"
|
||||
elif row.source == "fed":
|
||||
url = f"https://www.federalreserve.gov/newsevents/pressreleases/monetary{date:%Y%m%d}a.htm"
|
||||
else:
|
||||
# 现场核验 BEA RSS 漏了已发布的 PCE;使用官方日程的公告链接,不依赖 RSS 推送时效。
|
||||
url = row.release_url
|
||||
if url is None:
|
||||
schedule, _ = await self.fetch("bea", "https://www.bea.gov/news/schedule/full")
|
||||
schedule.raise_for_status()
|
||||
url = bea_release_link(schedule.text, date, row.family)
|
||||
if url is None:
|
||||
return None
|
||||
response, raw_id = await self.fetch(row.source, url)
|
||||
if response.status_code == 404:
|
||||
return None # 预约地址尚未发布;保留原始响应,不宣称采集成功。
|
||||
response.raise_for_status()
|
||||
published = release_date(response.text).date()
|
||||
if row.source == "bls" and published < date:
|
||||
return None # 到点后官网仍缓存上一期,等待当期公告,不填旧值。
|
||||
if published != date:
|
||||
raise ValueError("官方公告日期与日历不符,历史公布值尚未取得")
|
||||
return response, raw_id
|
||||
|
||||
async def european_result(self, row: EconomicRelease) -> tuple[httpx.Response, int] | None:
|
||||
day = row.scheduled_at.astimezone(europe.ZoneInfo(europe.ZONES[row.source])).date()
|
||||
url = row.release_url
|
||||
if url is None and row.source == "ecb":
|
||||
index, _ = await self.fetch("ecb", f"https://www.ecb.europa.eu/press/govcdec/mopo/{day.year}/html/index_include.en.html")
|
||||
index.raise_for_status()
|
||||
sel = Selector(text=index.text)
|
||||
urls = [urljoin(str(index.url), u) for u in sel.css('a[href]::attr(href)').getall()
|
||||
if f"ecb.mp{day:%y%m%d}~" in u and u.endswith(".en.html")]
|
||||
url = next(iter(dict.fromkeys(urls)), None)
|
||||
elif url is None and row.source == "destatis":
|
||||
# 官方主题页在 RSS 滚出后仍保留最近公告,且提供英文公告的真实链接。
|
||||
paths = {"de_cpi": "Economy/Prices/Consumer-Price-Index", "de_gdp": "Economy/National-Accounts-Domestic-Product", "de_jobs": "Labour/Labour-Market/Employment"}
|
||||
index, _ = await self.fetch("destatis", f"https://www.destatis.de/EN/Themes/{paths[row.family]}/_node.html")
|
||||
index.raise_for_status()
|
||||
suffix = {"de_cpi": "_611.html", "de_gdp": "_811.html", "de_jobs": "_132.html"}[row.family]
|
||||
candidates = [urljoin("https://www.destatis.de/", u) for u in Selector(text=index.text).css('a[href]::attr(href)').getall()
|
||||
if "/Press/" in u and "/PE" in u and u.endswith(suffix)]
|
||||
for candidate in dict.fromkeys(candidates):
|
||||
response, raw_id = await self.fetch(row.source, candidate)
|
||||
response.raise_for_status()
|
||||
announcement = europe.parse_announcement(row.family, response.text)
|
||||
if announcement.at.date() == row.scheduled_at.date() and announcement.period == row.period and announcement.stage == row.stage:
|
||||
return response, raw_id
|
||||
return None
|
||||
elif url is None:
|
||||
entries = []
|
||||
for feed in FEEDS[row.source]:
|
||||
response, _ = await self.fetch(row.source, feed)
|
||||
response.raise_for_status()
|
||||
entries.extend(feed_entries(response.content, row.source))
|
||||
for entry in entries:
|
||||
target = europe.family_for(row.source, entry.title)
|
||||
if target and target[0] == row.family and entry.at.astimezone(europe.ZoneInfo(europe.ZONES[row.source])).date() == day:
|
||||
# 只有当期同日同系列才取原文;最终还要核对公告的统计期和阶段。
|
||||
url = entry.url
|
||||
break
|
||||
if url is None:
|
||||
return None
|
||||
response, raw_id = await self.fetch(row.source, url)
|
||||
if response.status_code == 404:
|
||||
return None
|
||||
response.raise_for_status()
|
||||
if row.source == "ons" and "/releases/" in str(response.url):
|
||||
patterns = {"uk_cpi": "/bulletins/consumerpriceinflation/", "uk_gdp": "/bulletins/gdp", "uk_jobs": "/bulletins/uklabourmarket/"}
|
||||
matches = [urljoin(str(response.url), u) for u in Selector(text=response.text).css('a[href]::attr(href)').getall() if patterns[row.family] in u]
|
||||
unique = list(dict.fromkeys(matches))
|
||||
if len(unique) != 1:
|
||||
raise ValueError("ONS 发布页未唯一指向目标统计公报")
|
||||
response, raw_id = await self.fetch(row.source, unique[0])
|
||||
response.raise_for_status()
|
||||
announcement = europe.parse_announcement(row.family, response.text)
|
||||
if announcement.at.astimezone(europe.ZoneInfo(europe.ZONES[row.source])).date() != day:
|
||||
raise ValueError("欧洲官方公告日期与所选日程不符,未填入其他期次的数据")
|
||||
return response, raw_id
|
||||
|
||||
async def poll_one(self, release_id: int) -> None:
|
||||
async with SessionLocal() as session:
|
||||
row = await session.scalar(select(EconomicRelease).where(EconomicRelease.id == release_id).with_for_update())
|
||||
now = datetime.now(UTC)
|
||||
retry_at = None
|
||||
try:
|
||||
page = await self.result_page(row)
|
||||
if page is not None:
|
||||
response, raw_id = page
|
||||
if row.source in europe.SCHEDULES:
|
||||
announcement = europe.parse_announcement(row.family, response.text)
|
||||
period, stage, values = announcement.period, announcement.stage, announcement.values
|
||||
elif row.family == "umich":
|
||||
period, stage, values = current_result(response.text)
|
||||
else:
|
||||
values = parse_values(row.family, response.text)
|
||||
text = " ".join(Selector(text=response.text).css("h1,#bodytext").xpath("string(.)").getall())
|
||||
period, stage = release_metadata(row.family, text)
|
||||
save_result(session, row, values, str(response.url), raw_id, datetime.now(UTC), period=period, stage=stage)
|
||||
row.error = None
|
||||
except (httpx.HTTPError, ValueError, KeyError, TypeError, IndexError) as exc:
|
||||
row.error = f"{type(exc).__name__}: {exc}"
|
||||
if isinstance(exc, httpx.HTTPStatusError) and exc.response.status_code in (429, 503):
|
||||
retry_at = retry_after_at(exc.response.headers.get("Retry-After"), datetime.now(UTC))
|
||||
logger.exception("公布值采集失败:%s %s", row.family, row.scheduled_at)
|
||||
row.last_checked_at = now
|
||||
row.next_check_at = next_poll(row.scheduled_at, datetime.now(UTC), row.first_received_at is not None, bool(row.error))
|
||||
if retry_at is not None:
|
||||
row.next_check_at = max(row.next_check_at, retry_at)
|
||||
await session.commit()
|
||||
|
||||
async def results(self) -> None:
|
||||
now = datetime.now(UTC)
|
||||
async with SessionLocal() as session:
|
||||
ids = list(await session.scalars(select(EconomicRelease.id).where(
|
||||
EconomicRelease.schedule_status == "scheduled", EconomicRelease.scheduled_at <= now,
|
||||
EconomicRelease.scheduled_at >= now - timedelta(days=HISTORY_DAYS), EconomicRelease.next_check_at <= now,
|
||||
).order_by(EconomicRelease.scheduled_at.desc()).limit(8)))
|
||||
# 少量同时发布的不同报告独立获取,历史修订不阻塞当期公布。
|
||||
await asyncio.gather(*(self.poll_one(id_) for id_ in ids))
|
||||
|
||||
async def run(self) -> None:
|
||||
async def schedules_loop() -> None:
|
||||
while True:
|
||||
await self.schedules()
|
||||
await asyncio.sleep(3600)
|
||||
|
||||
async def results_loop() -> None:
|
||||
while True:
|
||||
await self.results()
|
||||
await asyncio.sleep(1)
|
||||
|
||||
async def heartbeat_loop() -> None:
|
||||
while True:
|
||||
await redis.set(STATUS_KEY, json.dumps({"at": datetime.now(UTC).isoformat(), "sources": self.sources}), ex=30)
|
||||
await asyncio.sleep(5)
|
||||
|
||||
try:
|
||||
async with asyncio.TaskGroup() as tasks:
|
||||
for loop in (schedules_loop, results_loop, heartbeat_loop):
|
||||
tasks.create_task(loop())
|
||||
finally:
|
||||
await self.http.aclose()
|
||||
await self.bls.aclose()
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
logging.basicConfig(level=logging.INFO, format="%(asctime)s %(levelname)s %(name)s: %(message)s")
|
||||
logging.getLogger("httpx").setLevel(logging.WARNING)
|
||||
asyncio.run(CalendarWorker().run())
|
||||
@@ -0,0 +1,100 @@
|
||||
"""欧洲官方公开订阅和地域;新闻与日历共享来源身份,不共享运行状态。"""
|
||||
import hashlib
|
||||
import re
|
||||
from dataclasses import dataclass
|
||||
from datetime import UTC, datetime
|
||||
from email.utils import parsedate_to_datetime
|
||||
from urllib.parse import urlparse
|
||||
from xml.etree import ElementTree as ET
|
||||
|
||||
EUROSTAT_NEWS = "https://ec.europa.eu/eurostat/news/euro-indicators"
|
||||
EUROSTAT_FEED = EUROSTAT_NEWS + "?p_p_id=estatsearchportlet_WAR_estatsearchportlet_INSTANCE_OaTpFrwlabNK&p_p_lifecycle=2&p_p_resource_id=atom&_estatsearchportlet_WAR_estatsearchportlet_INSTANCE_OaTpFrwlabNK_pageSize=100&_estatsearchportlet_WAR_estatsearchportlet_INSTANCE_OaTpFrwlabNK_collection=CAT_PREREL"
|
||||
ONS_FEED = "https://www.ons.gov.uk/releasecalendar?rss&highlight=true&limit=100&page=1&release-type=type-published&sort=date-newest"
|
||||
FEEDS = {
|
||||
"ecb": ("https://www.ecb.europa.eu/rss/press.html",),
|
||||
"eurostat": (EUROSTAT_FEED,),
|
||||
"boe": ("https://www.bankofengland.co.uk/rss/news", "https://www.bankofengland.co.uk/rss/speeches"),
|
||||
"ons": (ONS_FEED,),
|
||||
"destatis": ("https://www.destatis.de/SiteGlobals/Functions/RSSFeed/DE/RSSNewsfeed/Aktuell.xml",),
|
||||
"insee": ("https://www.insee.fr/fr/flux/3",),
|
||||
}
|
||||
REGIONS = {"wscn_news": "CN", "wscn_live": "CN", "cls_depth": "CN", "cls_telegraph": "CN", "coindesk": "GLOBAL",
|
||||
"bls": "US", "bea": "US", "fed": "US", "umich": "US", "ecb": "EA", "eurostat": "EA", "boe": "GB", "ons": "GB", "destatis": "DE", "insee": "FR"}
|
||||
HOSTS = {"ecb": {"www.ecb.europa.eu"}, "eurostat": {"ec.europa.eu"}, "boe": {"www.bankofengland.co.uk"},
|
||||
"ons": {"www.ons.gov.uk"}, "destatis": {"www.destatis.de"}, "insee": {"www.insee.fr"}}
|
||||
LANGUAGES = {"destatis": "de", "insee": "fr"}
|
||||
ATOM = "{http://www.w3.org/2005/Atom}"
|
||||
|
||||
|
||||
@dataclass(frozen=True)
|
||||
class Entry:
|
||||
title: str
|
||||
url: str
|
||||
at: datetime
|
||||
summary: str
|
||||
updated: datetime | None = None
|
||||
|
||||
@property
|
||||
def identity(self) -> str:
|
||||
return hashlib.sha256(self.url.encode()).hexdigest()
|
||||
|
||||
|
||||
def official_url(source: str, url: str) -> str:
|
||||
parsed = urlparse(url)
|
||||
if parsed.scheme != "https" or parsed.hostname not in HOSTS[source]:
|
||||
raise ValueError(f"{source} 链接不是对应机构的官方 HTTPS 地址")
|
||||
# ECB 的公开 RSS 链接带重复路径分隔符;身份按同一官方规范地址去重。
|
||||
if source == "ecb":
|
||||
url = parsed._replace(path=re.sub(r"/+", "/", parsed.path)).geturl()
|
||||
return url
|
||||
|
||||
|
||||
def feed_entries(body: bytes, source: str) -> list[Entry]:
|
||||
try:
|
||||
root = ET.fromstring(body)
|
||||
except ET.ParseError as exc:
|
||||
raise ValueError("官方订阅不是有效的 XML") from exc
|
||||
if root.tag == "rss" and root.find("channel") is not None:
|
||||
nodes = root.findall("./channel/item")
|
||||
elif root.tag == ATOM + "feed":
|
||||
nodes = root.findall(ATOM + "entry")
|
||||
else:
|
||||
raise ValueError("官方响应不是 RSS/Atom 订阅")
|
||||
result = []
|
||||
for node in nodes:
|
||||
if node.tag == ATOM + "entry":
|
||||
title = node.findtext(ATOM + "title", "").strip()
|
||||
link = next((n for n in node.findall(ATOM + "link") if n.get("rel", "alternate") == "alternate"), None)
|
||||
url = link.get("href", "") if link is not None else ""
|
||||
at = datetime.fromisoformat(node.findtext(ATOM + "published") or node.findtext(ATOM + "updated") or "")
|
||||
updated = node.findtext(ATOM + "updated")
|
||||
summary = node.findtext(ATOM + "summary") or node.findtext(ATOM + "content") or ""
|
||||
else:
|
||||
title = node.findtext("title", "").strip()
|
||||
url = node.findtext("link", "").strip()
|
||||
at = parsedate_to_datetime(node.findtext("pubDate", ""))
|
||||
updated = None
|
||||
summary = node.findtext("description", "")
|
||||
updated_at = datetime.fromisoformat(updated) if updated else None
|
||||
if not title or at.tzinfo is None or (updated_at is not None and updated_at.tzinfo is None):
|
||||
raise ValueError("官方订阅缺少标题或带时区的发布/修订时间")
|
||||
result.append(Entry(title, official_url(source, url), at.astimezone(UTC), summary,
|
||||
updated_at.astimezone(UTC) if updated_at else None))
|
||||
return result
|
||||
|
||||
|
||||
def relevant_news(source: str, title: str, url: str) -> bool:
|
||||
title = title.casefold()
|
||||
if source == "ecb":
|
||||
return any(p in url for p in ("/key/", "/inter/", "/accounts/", "/pressconf/")) or "monetary policy decisions" in title
|
||||
if source == "boe":
|
||||
return "/speech/" in url or "/monetary-policy-summary-and-minutes/" in url or "bank rate" in title or "monetary policy" in title
|
||||
if source == "eurostat":
|
||||
return "inflation" in title or "unemployment" in title or bool(re.search(r"\bgdp\b.*(?:up|down|stable|growth|increased|decreased)|(?:growth|increase|decrease).*\bgdp\b", title))
|
||||
if source == "ons":
|
||||
return "time series" not in title and not url.endswith("timeseries") and bool(re.match(r"(?:consumer price inflation, uk:|labour market overview, uk:|uk labour market:|gdp first quarterly estimate, uk:|gdp quarterly national accounts, uk:)", title))
|
||||
if source == "destatis":
|
||||
return any(t in title for t in ("verbraucherpreis", "inflationsrate", "bruttoinlandsprodukt", "erwerbstätig", "erwerbslos"))
|
||||
if source == "insee":
|
||||
return any(t in title for t in ("prix à la consommation", "taux de chômage", "le pib", "le produit intérieur brut"))
|
||||
raise ValueError(f"未支持的欧洲新闻来源:{source}")
|
||||
@@ -0,0 +1,87 @@
|
||||
"""欧洲核心宏观公报历史摘要预览;可导出供 import_history 显式导入,始终不写数据库。
|
||||
|
||||
uv run python -m alphapulse.crawler.europe_history SOURCE --start 2025-01-01
|
||||
加 --output CAPTURES.jsonl.gz 保存真实响应和摘要;不覆盖已有文件。
|
||||
这里只核对核心统计/利率公报,不宣称覆盖央行全部历史讲话、采访和纪要。
|
||||
"""
|
||||
import argparse
|
||||
import asyncio
|
||||
import base64
|
||||
import gzip
|
||||
import json
|
||||
from datetime import UTC, date, datetime, time, timedelta
|
||||
from pathlib import Path
|
||||
|
||||
from parsel import Selector
|
||||
|
||||
from alphapulse.calendar.backfill import Document, LOCAL, family_for, fetch_documents
|
||||
from alphapulse.calendar.europe import parse_announcement
|
||||
from alphapulse.calendar.parsers import compact
|
||||
from alphapulse.core.official_sources import FEEDS, official_url
|
||||
from alphapulse.crawler.import_history import ArchivedArticle, Capture
|
||||
|
||||
|
||||
def capture(document: Document) -> Capture:
|
||||
family = family_for(document)
|
||||
if family is None:
|
||||
raise ValueError("归档响应不是已支持的核心宏观公报")
|
||||
announcement = parse_announcement(family, document.body.decode())
|
||||
s = Selector(text=document.body.decode())
|
||||
title = compact(" ".join(s.css("h1").xpath("string(.)").getall()))
|
||||
# 仅摘取官网实际公开的导语;无导语保留空摘要,不拼凑新闻正文。
|
||||
selectors = {"ecb": "main p:not(.ecb-publicationDate)", "boe": ".page-content p", "eurostat": ".component-euind-content p",
|
||||
"ons": "#main-points li", "destatis": "#content p", "insee": ".corps-publication p.paragraphe"}
|
||||
paragraphs = [compact(p.xpath("string(.)").get()) for p in s.css(selectors[document.source])]
|
||||
summary = next((p for p in paragraphs if p), "")
|
||||
url = official_url(document.source, document.url)
|
||||
article = ArchivedArticle(guid=url, url=url, title=title, summary=summary, published_at=announcement.at,
|
||||
language="fr" if document.source == "insee" else "en")
|
||||
return Capture(source=document.source, url=url, status=200, headers=document.headers,
|
||||
body=base64.b64encode(document.body).decode(), body_encoding="base64",
|
||||
fetched_at=document.captured_at, articles=[article])
|
||||
|
||||
|
||||
async def run(source: str, start: date, end: date, output: Path | None = None) -> dict:
|
||||
errors = []
|
||||
documents = await fetch_documents(start, end, set(), errors, sources={source})
|
||||
begin = datetime.combine(start, time.min, LOCAL).astimezone(UTC)
|
||||
finish = datetime.combine(end + timedelta(days=1), time.min, LOCAL).astimezone(UTC)
|
||||
captures = []
|
||||
for document in documents:
|
||||
try:
|
||||
item = capture(document)
|
||||
if begin <= item.articles[0].published_at < finish:
|
||||
captures.append(item)
|
||||
except (ValueError, KeyError, TypeError, IndexError) as exc:
|
||||
errors.append({"source": source, "url": document.url, "error": f"{type(exc).__name__}: {exc}"})
|
||||
if output is not None:
|
||||
with gzip.open(output, "xt", encoding="utf-8") as file:
|
||||
for item in captures:
|
||||
file.write(item.model_dump_json() + "\n")
|
||||
return {"mode": "export" if output else "preview", "source": source, "start": str(start), "end": str(end),
|
||||
"scope": "核心宏观统计/利率公报;不包括央行全部历史讲话、采访和纪要。首末日期不代表完整覆盖。",
|
||||
"documents": len(documents), "articles": len(captures),
|
||||
"published_start": min((c.articles[0].published_at.isoformat() for c in captures), default=None),
|
||||
"published_end": max((c.articles[0].published_at.isoformat() for c in captures), default=None),
|
||||
"output": str(output) if output else None, "errors": errors}
|
||||
|
||||
|
||||
def main() -> None:
|
||||
parser = argparse.ArgumentParser(description=__doc__, formatter_class=argparse.RawDescriptionHelpFormatter)
|
||||
parser.add_argument("source", choices=sorted(FEEDS))
|
||||
parser.add_argument("--start", type=date.fromisoformat, default=date(2025, 1, 1))
|
||||
parser.add_argument("--end", type=date.fromisoformat, default=datetime.now(LOCAL).date())
|
||||
parser.add_argument("--output", type=Path)
|
||||
args = parser.parse_args()
|
||||
if args.start < date(2025, 1, 1) or args.end < args.start or args.end > datetime.now(LOCAL).date():
|
||||
parser.error("公布日期范围必须从 2025-01-01 起,结束日期不得晚于今天")
|
||||
if args.output is not None and args.output.exists():
|
||||
parser.error("输出文件已存在,请使用新路径,避免覆盖既有采集响应")
|
||||
report = asyncio.run(run(args.source, args.start, args.end, args.output))
|
||||
print(json.dumps(report, ensure_ascii=False, indent=2))
|
||||
if report["errors"]:
|
||||
raise SystemExit(1)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
@@ -0,0 +1,208 @@
|
||||
"""导入已抓取的官方历史摘要及原始响应;独立任务不改变实时采集状态。
|
||||
|
||||
用法:python -m alphapulse.crawler.import_history SOURCE CAPTURES.jsonl.gz --start ISO时间
|
||||
每行包含一次真实 HTTP 响应(source/url/status/headers/body/fetched_at)及解析后的 articles。
|
||||
"""
|
||||
|
||||
import argparse
|
||||
import base64
|
||||
import gzip
|
||||
import hashlib
|
||||
import json
|
||||
import re
|
||||
import uuid
|
||||
from datetime import UTC, datetime
|
||||
from html import escape
|
||||
from pathlib import Path
|
||||
from typing import Literal
|
||||
|
||||
from pydantic import AwareDatetime, BaseModel, Field, HttpUrl
|
||||
from scrapy import Request, Spider, signals
|
||||
from scrapy.crawler import Crawler, CrawlerProcess
|
||||
from scrapy.http import Response
|
||||
from scrapy.utils.project import get_project_settings
|
||||
from sqlalchemy import select, update
|
||||
from twisted.python.failure import Failure
|
||||
|
||||
from alphapulse.core.db import SessionLocal
|
||||
from alphapulse.core.official_sources import FEEDS, LANGUAGES
|
||||
from alphapulse.crawler.events import write_logs
|
||||
from alphapulse.crawler.middlewares import RawResponseMiddleware
|
||||
from alphapulse.crawler.spiders.base import RunState
|
||||
from alphapulse.models import CrawlRun, NewsItem, RawResponse
|
||||
|
||||
SOURCES = ("coindesk", "fed", "bea", "bls", *FEEDS)
|
||||
|
||||
|
||||
class ArchivedArticle(BaseModel):
|
||||
guid: str = Field(min_length=1)
|
||||
url: HttpUrl
|
||||
title: str = Field(min_length=1)
|
||||
summary: str
|
||||
published_at: AwareDatetime
|
||||
source_updated_at: AwareDatetime | None = None
|
||||
author: str | None = None
|
||||
tags: list[str] = Field(default_factory=list)
|
||||
language: Literal["en", "de", "fr"] | None = None
|
||||
|
||||
|
||||
class Capture(BaseModel):
|
||||
source: Literal["coindesk", "fed", "bea", "bls", "ecb", "eurostat", "boe", "ons", "destatis", "insee"]
|
||||
url: HttpUrl
|
||||
status: Literal[200]
|
||||
headers: dict[str, str]
|
||||
body: str
|
||||
body_encoding: Literal["utf-8", "base64"] = "utf-8"
|
||||
fetched_at: AwareDatetime
|
||||
articles: list[ArchivedArticle]
|
||||
|
||||
|
||||
def article_item(source: str, article: ArchivedArticle, capture: Capture, raw_id: int) -> dict:
|
||||
content_html = f"<p>{escape(article.summary)}</p>" if article.summary else ""
|
||||
return {
|
||||
"source_code": source, "external_id": hashlib.sha256(article.guid.encode()).hexdigest(),
|
||||
"url": str(article.url), "title": article.title, "summary": article.summary,
|
||||
"content_html": content_html, "content_text": article.summary,
|
||||
"published_at": article.published_at, "source_updated_at": article.source_updated_at,
|
||||
"author": article.author, "tags": article.tags, "is_paywalled": False,
|
||||
"extra": {"language": article.language or LANGUAGES.get(source, "en"), "content_scope": "public_summary", "historical_backfill": True,
|
||||
"archive_url": str(capture.url), "archive_fetched_at": capture.fetched_at.isoformat()},
|
||||
"raw_response_id": raw_id,
|
||||
}
|
||||
|
||||
|
||||
def identity_url(url: str) -> str:
|
||||
# BEA 的 RSS GUID 同时使用 bea.gov 和 www.bea.gov;回补按原文链接识别已有文章。
|
||||
url = url.replace("https://bea.gov/", "https://www.bea.gov/").rstrip("/")
|
||||
# 官网跳转后的公报与 RSS 发布页属于同一公告;只统一导入去重键,保留原始链接。
|
||||
eurostat = re.fullmatch(r"https://ec\.europa\.eu/eurostat/(?:en/)?web/products-euro-indicators/w/([^/?#]+)", url)
|
||||
if eurostat:
|
||||
return f"https://ec.europa.eu/eurostat/product?code={eurostat[1]}"
|
||||
ons = re.fullmatch(r"https://www\.ons\.gov\.uk/.*/bulletins/(consumerpriceinflation|uklabourmarket|gdpfirstquarterlyestimateuk|quarterlynationalaccounts)/([^/?#]+)", url)
|
||||
if ons:
|
||||
series = {"consumerpriceinflation": "consumerpriceinflationuk", "quarterlynationalaccounts": "gdpquarterlynationalaccountsuk"}.get(ons[1], ons[1])
|
||||
return f"https://www.ons.gov.uk/releases/{series}{ons[2]}"
|
||||
return url
|
||||
|
||||
|
||||
class HistoryImportSpider(Spider):
|
||||
name = "history_import"
|
||||
custom_settings = {
|
||||
"SCHEDULER": "scrapy.core.scheduler.Scheduler",
|
||||
"DUPEFILTER_CLASS": "scrapy.dupefilters.RFPDupeFilter",
|
||||
}
|
||||
|
||||
def __init__(self, source: str, captures: str, start: datetime, **kwargs):
|
||||
super().__init__(**kwargs)
|
||||
self.name = source
|
||||
self.captures = Path(captures)
|
||||
self.start_at = start
|
||||
self.end_at = datetime.now(UTC)
|
||||
self.run = RunState(uuid.uuid4(), "backfill", self.end_at, start)
|
||||
self.completed = False
|
||||
self.known_ids: set[str] = set()
|
||||
self.known_urls: set[str] = set()
|
||||
|
||||
@classmethod
|
||||
def from_crawler(cls, crawler: Crawler, *args, **kwargs):
|
||||
spider = super().from_crawler(crawler, *args, **kwargs)
|
||||
crawler.signals.connect(spider.on_opened, signal=signals.spider_opened)
|
||||
crawler.signals.connect(spider.on_error, signal=signals.spider_error)
|
||||
crawler.signals.connect(spider.on_error, signal=signals.item_error)
|
||||
crawler.signals.connect(spider.on_closed, signal=signals.spider_closed)
|
||||
return spider
|
||||
|
||||
async def on_opened(self):
|
||||
async with SessionLocal() as session:
|
||||
rows = (await session.execute(
|
||||
select(NewsItem.external_id, NewsItem.url).where(NewsItem.source_code == self.name)
|
||||
)).all()
|
||||
self.known_ids = {row[0] for row in rows}
|
||||
self.known_urls = {identity_url(row[1]) for row in rows}
|
||||
session.add(CrawlRun(id=self.run.id, source_code=self.name, trigger="backfill",
|
||||
started_at=self.run.started_at, status="running"))
|
||||
await session.commit()
|
||||
|
||||
async def start(self):
|
||||
try:
|
||||
async for item in self.import_captures():
|
||||
yield item
|
||||
except Exception as exc:
|
||||
# start 的异常不走 spider_error 信号,必须让任务状态和退出码反映失败。
|
||||
self.run.errors.append(repr(exc))
|
||||
raise
|
||||
|
||||
async def import_captures(self):
|
||||
raw_writer = RawResponseMiddleware(self.crawler)
|
||||
with gzip.open(self.captures, "rt", encoding="utf-8") as file:
|
||||
for line in file:
|
||||
capture = Capture.model_validate_json(line)
|
||||
if capture.source != self.name:
|
||||
raise ValueError("历史响应来源与导入任务不一致")
|
||||
request = Request(str(capture.url), meta={"run_id": self.run.id})
|
||||
# 官方 PDF 归档需逐字节保存,不能经由文本解码破坏原始响应。
|
||||
body = base64.b64decode(capture.body, validate=True) if capture.body_encoding == "base64" else capture.body.encode()
|
||||
response = Response(str(capture.url), status=capture.status, headers=capture.headers,
|
||||
body=body, request=request)
|
||||
digest = hashlib.sha256(response.body).hexdigest()
|
||||
async with SessionLocal() as session:
|
||||
raw_id = await session.scalar(select(RawResponse.id).where(
|
||||
RawResponse.source_code == self.name, RawResponse.url == response.url,
|
||||
RawResponse.body_sha256 == digest, RawResponse.fetched_at == capture.fetched_at,
|
||||
).limit(1))
|
||||
if raw_id is None:
|
||||
await raw_writer.process_response(request, response)
|
||||
raw_id = request.meta["raw_response_id"]
|
||||
async with SessionLocal() as session:
|
||||
await session.execute(update(RawResponse).where(RawResponse.id == raw_id)
|
||||
.values(fetched_at=capture.fetched_at))
|
||||
await session.commit()
|
||||
self.run.requests += 1
|
||||
for article in capture.articles:
|
||||
if not self.start_at <= article.published_at < self.end_at:
|
||||
continue
|
||||
item = article_item(self.name, article, capture, raw_id)
|
||||
identity = identity_url(item["url"])
|
||||
if item["external_id"] in self.known_ids or identity in self.known_urls:
|
||||
continue
|
||||
self.known_ids.add(item["external_id"])
|
||||
self.known_urls.add(identity)
|
||||
yield item
|
||||
|
||||
def on_error(self, failure: Failure):
|
||||
self.run.errors.append(str(failure.value))
|
||||
|
||||
async def on_closed(self, reason: str):
|
||||
status = "failed" if self.run.errors else ("success" if reason == "finished" else "interrupted")
|
||||
self.completed = status == "success"
|
||||
async with SessionLocal() as session:
|
||||
await session.execute(update(CrawlRun).where(CrawlRun.id == self.run.id).values(
|
||||
finished_at=datetime.now(UTC), status=status, requests=self.run.requests,
|
||||
items_seen=self.run.items_seen, items_new=self.run.items_new, items_revised=self.run.items_revised,
|
||||
error="\n".join(self.run.errors)[:4000] if self.run.errors else None,
|
||||
))
|
||||
await session.commit()
|
||||
await write_logs([(self.name, self.run.id, "INFO" if status == "success" else "ERROR",
|
||||
f"历史摘要导入 {status}:响应 {self.run.requests},新增 {self.run.items_new},修订 {self.run.items_revised}")])
|
||||
|
||||
|
||||
def main():
|
||||
parser = argparse.ArgumentParser(description=__doc__)
|
||||
parser.add_argument("source", choices=SOURCES)
|
||||
parser.add_argument("captures", type=Path)
|
||||
parser.add_argument("--start", required=True, type=datetime.fromisoformat)
|
||||
args = parser.parse_args()
|
||||
if args.start.tzinfo is None or args.start >= datetime.now(UTC):
|
||||
parser.error("起始时间须带时区且早于当前时间")
|
||||
process = CrawlerProcess(get_project_settings())
|
||||
crawler = process.create_crawler(HistoryImportSpider)
|
||||
process.crawl(crawler, source=args.source, captures=str(args.captures), start=args.start)
|
||||
process.start()
|
||||
if not crawler.spider.completed or crawler.spider.run.items_seen != crawler.spider.run.items_new:
|
||||
raise SystemExit("历史导入存在失败或意外修订,请检查采集日志")
|
||||
print(json.dumps({"source": args.source, "run_id": str(crawler.spider.run.id),
|
||||
"requests": crawler.spider.run.requests, "inserted": crawler.spider.run.items_new}))
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
@@ -56,7 +56,7 @@ class Manager:
|
||||
|
||||
async def run(self) -> None:
|
||||
async with SessionLocal() as session:
|
||||
codes = (await session.scalars(select(Source.code).order_by(Source.code))).all()
|
||||
codes = (await session.scalars(select(Source.code).where(Source.collector == "news").order_by(Source.code))).all()
|
||||
self.workers = {code: Worker(code) for code in codes}
|
||||
|
||||
loop = asyncio.get_running_loop()
|
||||
@@ -112,7 +112,7 @@ class Manager:
|
||||
async with SessionLocal() as session:
|
||||
await session.execute(
|
||||
update(CrawlRun)
|
||||
.where(CrawlRun.source_code == w.code, CrawlRun.status == "running")
|
||||
.where(CrawlRun.source_code == w.code, CrawlRun.status == "running", CrawlRun.trigger != "backfill")
|
||||
.values(status="interrupted", finished_at=datetime.now(UTC), error="子进程退出时本轮未完成")
|
||||
)
|
||||
await session.commit()
|
||||
@@ -140,7 +140,7 @@ class Manager:
|
||||
|
||||
async def schedule_once(self, unknown: set[str]) -> None:
|
||||
async with SessionLocal() as session:
|
||||
sources = (await session.scalars(select(Source))).all()
|
||||
sources = (await session.scalars(select(Source).where(Source.collector == "news"))).all()
|
||||
now = datetime.now(UTC)
|
||||
for s in sources:
|
||||
w = self.workers.get(s.code)
|
||||
|
||||
@@ -8,7 +8,7 @@ from alphapulse.core.redis import KEY_PREFIX
|
||||
BOT_NAME = "alphapulse"
|
||||
SPIDER_MODULES = ["alphapulse.crawler.spiders"]
|
||||
|
||||
# 采集的是无需登录的公开 JSON 接口;限速由 RedisRateLimitMiddleware 统一控制
|
||||
# 采集无需登录的公开 JSON、RSS/Atom;限速由 RedisRateLimitMiddleware 统一控制
|
||||
ROBOTSTXT_OBEY = False
|
||||
USER_AGENT = "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0 Safari/537.36"
|
||||
DEFAULT_REQUEST_HEADERS = {"Accept": "application/json, text/html;q=0.9, */*;q=0.8", "Accept-Language": "zh-CN,zh;q=0.9"}
|
||||
|
||||
@@ -0,0 +1,45 @@
|
||||
"""欧洲六机构的公开宏观摘要;完整原文仍从官方链接查看。"""
|
||||
from scrapy.http import Response
|
||||
|
||||
from alphapulse.core.official_sources import FEEDS, LANGUAGES, feed_entries, relevant_news
|
||||
from alphapulse.crawler.spiders.base import NewsSpider, html_to_text
|
||||
|
||||
|
||||
class EuropeanNewsSpider(NewsSpider):
|
||||
request_headers = {"User-Agent": "AlphaPulse official news collector", "Accept": "application/rss+xml, application/atom+xml, application/xml, text/xml"}
|
||||
|
||||
def first_requests(self):
|
||||
return [self.request(url, self.parse_feed) for url in FEEDS[self.name]]
|
||||
|
||||
def parse_feed(self, response: Response):
|
||||
# 整份订阅格式破坏时让既有生命周期报告失败,不把空列表当成功。
|
||||
for entry in feed_entries(response.body, self.name):
|
||||
if relevant_news(self.name, entry.title, entry.url):
|
||||
yield self.item(response, external_id=entry.identity, url=entry.url,
|
||||
title=html_to_text(entry.title), summary=html_to_text(entry.summary),
|
||||
content_html=entry.summary, published_at=entry.at, source_updated_at=entry.updated,
|
||||
extra={"language": LANGUAGES.get(self.name, "en"), "content_scope": "feed_summary", "feed_url": response.url})
|
||||
|
||||
|
||||
class EcbSpider(EuropeanNewsSpider):
|
||||
name = "ecb"
|
||||
|
||||
|
||||
class EurostatSpider(EuropeanNewsSpider):
|
||||
name = "eurostat"
|
||||
|
||||
|
||||
class BoeSpider(EuropeanNewsSpider):
|
||||
name = "boe"
|
||||
|
||||
|
||||
class OnsSpider(EuropeanNewsSpider):
|
||||
name = "ons"
|
||||
|
||||
|
||||
class DestatisSpider(EuropeanNewsSpider):
|
||||
name = "destatis"
|
||||
|
||||
|
||||
class InseeSpider(EuropeanNewsSpider):
|
||||
name = "insee"
|
||||
@@ -0,0 +1,172 @@
|
||||
"""国外媒体与官方公告:只保存公开 RSS 内容,不把摘要当成文章全文。"""
|
||||
|
||||
import hashlib
|
||||
import re
|
||||
import ssl
|
||||
from datetime import UTC, datetime
|
||||
from email.utils import parsedate_to_datetime
|
||||
from html import escape
|
||||
from urllib.parse import urlparse
|
||||
from xml.etree import ElementTree
|
||||
from zoneinfo import ZoneInfo
|
||||
|
||||
import httpx
|
||||
from scrapy.crawler import Crawler
|
||||
from scrapy.http import Request, Response
|
||||
from scrapy.settings.default_settings import RETRY_EXCEPTIONS
|
||||
|
||||
from alphapulse.crawler.spiders.base import NewsSpider, html_to_text
|
||||
|
||||
ATOM = "{http://www.w3.org/2005/Atom}"
|
||||
|
||||
|
||||
class RssNewsSpider(NewsSpider):
|
||||
feeds: tuple[str, ...]
|
||||
request_headers = {"Accept": "application/rss+xml, application/xml, text/xml", "Accept-Language": "en-US,en;q=0.9"}
|
||||
|
||||
def first_requests(self):
|
||||
return [self.request(url, self.parse_feed) for url in self.feeds]
|
||||
|
||||
def parse_feed(self, response: Response):
|
||||
root = ElementTree.fromstring(response.body)
|
||||
if root.tag == "rss" and root.find("channel") is not None:
|
||||
entries = root.findall("./channel/item")
|
||||
elif root.tag == f"{ATOM}feed":
|
||||
entries = root.findall(f"{ATOM}entry")
|
||||
else:
|
||||
raise ValueError("响应不是 RSS/Atom 新闻订阅,无法解析")
|
||||
for entry in entries:
|
||||
try:
|
||||
yield self._parse_entry(response, entry)
|
||||
except ValueError as exc:
|
||||
# 单条外部数据损坏不应阻止其他新闻入库,但本轮仍记为失败。
|
||||
message = f"RSS 条目解析失败({response.url}):{exc}"
|
||||
self.run.errors.append(message)
|
||||
self.logger.error(message)
|
||||
|
||||
def _parse_entry(self, response: Response, entry: ElementTree.Element) -> dict:
|
||||
if entry.tag == f"{ATOM}entry":
|
||||
title = (entry.findtext(f"{ATOM}title") or "").strip()
|
||||
link = entry.find(f"{ATOM}link")
|
||||
url = (link.get("href", "") if link is not None else "").strip()
|
||||
date = entry.findtext(f"{ATOM}published") or ""
|
||||
published_at = datetime.fromisoformat(date)
|
||||
updated = entry.findtext(f"{ATOM}updated")
|
||||
source_updated_at = datetime.fromisoformat(updated) if updated else None
|
||||
guid = (entry.findtext(f"{ATOM}id") or "").strip() or url
|
||||
# BLS 的 Atom content 是纯文本,先转义再交给既有 HTML 展示链路。
|
||||
content_html = escape(entry.findtext(f"{ATOM}content") or "")
|
||||
author = entry.findtext(f"{ATOM}author/{ATOM}name")
|
||||
tags = [node.text.strip() for node in entry.findall(f"{ATOM}category") if node.text and node.text.strip()]
|
||||
else:
|
||||
title = html_to_text(entry.findtext("title") or "")
|
||||
url = (entry.findtext("link") or "").strip()
|
||||
date = entry.findtext("pubDate") or ""
|
||||
published_at = parsedate_to_datetime(date)
|
||||
source_updated_at = None
|
||||
guid = (entry.findtext("guid") or "").strip() or url
|
||||
content_html = entry.findtext("description") or ""
|
||||
author = entry.findtext("{http://purl.org/dc/elements/1.1/}creator")
|
||||
tags = [node.text.strip() for node in entry.findall("category") if node.text and node.text.strip()]
|
||||
# BEA 的 2025 年四季度 GDP 条目缺少 URL 协议,仅适配这一来源的官方域名。
|
||||
if self.name == "bea" and url.startswith("www.bea.gov/"):
|
||||
url = f"https://{url}"
|
||||
parsed_url = urlparse(url)
|
||||
if not title or parsed_url.scheme not in ("http", "https") or not parsed_url.netloc:
|
||||
raise ValueError("条目缺少标题或有效原文链接")
|
||||
if published_at.tzinfo is None or (source_updated_at is not None and source_updated_at.tzinfo is None):
|
||||
raise ValueError("条目发布时间或修订时间缺少时区")
|
||||
# GUID 常为长网址,哈希后满足 external_id 的 64 字符契约;不使用标题或发布时间作身份。
|
||||
return self.item(
|
||||
response,
|
||||
external_id=hashlib.sha256(guid.encode()).hexdigest(),
|
||||
url=url,
|
||||
title=title,
|
||||
summary=html_to_text(content_html),
|
||||
content_html=content_html,
|
||||
published_at=published_at.astimezone(UTC),
|
||||
source_updated_at=source_updated_at.astimezone(UTC) if source_updated_at is not None else None,
|
||||
author=author,
|
||||
tags=tags,
|
||||
extra={"language": "en", "content_scope": "feed_summary", "feed_url": response.url},
|
||||
)
|
||||
|
||||
|
||||
class CoinDeskSpider(RssNewsSpider):
|
||||
name = "coindesk"
|
||||
feeds = ("https://www.coindesk.com/arc/outboundfeeds/rss/",)
|
||||
|
||||
|
||||
class FedSpider(RssNewsSpider):
|
||||
name = "fed"
|
||||
feeds = (
|
||||
"https://www.federalreserve.gov/feeds/press_monetary.xml",
|
||||
"https://www.federalreserve.gov/feeds/speeches_and_testimony.xml",
|
||||
)
|
||||
|
||||
|
||||
class BlsSpider(RssNewsSpider):
|
||||
name = "bls"
|
||||
# 本机 Scrapy 默认下载器访问 BLS 返回 403,已有 httpx 客户端可正常取回官方 Atom。
|
||||
# 固定使用这一下载器,不在 403 后切换客户端或叠加重试。
|
||||
custom_settings = {
|
||||
"DOWNLOAD_HANDLERS": {"https": "alphapulse.crawler.spiders.rss.BlsDownloadHandler"},
|
||||
"RETRY_EXCEPTIONS": [*RETRY_EXCEPTIONS, httpx.TransportError],
|
||||
}
|
||||
feeds = (
|
||||
"https://www.bls.gov/feed/cpi.rss",
|
||||
"https://www.bls.gov/feed/ppi.rss",
|
||||
"https://www.bls.gov/feed/empsit.rss",
|
||||
)
|
||||
|
||||
def _parse_entry(self, response: Response, entry: ElementTree.Element) -> dict:
|
||||
item = super()._parse_entry(response, entry)
|
||||
release = re.fullmatch(r"/news\.release/archives/(cpi|ppi|empsit)_(\d{8})\.htm", urlparse(item["url"]).path)
|
||||
if release is None:
|
||||
raise ValueError("BLS 条目缺少可识别的公告日期,无法确定正式发布时间")
|
||||
# 这三个订阅的官方发布安排均为 08:30 ET;Atom 时间早约 40 分钟,不能用作事件时点。
|
||||
# 日期取公告归档 URL,夏令时由 America/New_York 处理,不把采集时间当发布时间。
|
||||
# 官方安排:https://www.bls.gov/schedule/news_release/{cpi,ppi,empsit}.htm
|
||||
day = datetime.strptime(release[2], "%m%d%Y")
|
||||
item["extra"]["feed_published_at"] = item["published_at"].isoformat()
|
||||
item["extra"]["published_at_basis"] = "bls_release_schedule"
|
||||
item["published_at"] = day.replace(hour=8, minute=30, tzinfo=ZoneInfo("America/New_York")).astimezone(UTC)
|
||||
return item
|
||||
|
||||
|
||||
class BeaSpider(RssNewsSpider):
|
||||
name = "bea"
|
||||
feeds = ("https://apps.bea.gov/rss/rss.xml",)
|
||||
|
||||
|
||||
class BlsDownloadHandler:
|
||||
"""BLS 的公开 GET 订阅使用已有 httpx,状态码、解压和重试仍交给 Scrapy。"""
|
||||
|
||||
lazy = True
|
||||
|
||||
def __init__(self, timeout: float) -> None:
|
||||
self.timeout = timeout
|
||||
self.ssl_context = ssl.create_default_context()
|
||||
self.ssl_context.minimum_version = ssl.TLSVersion.TLSv1_2
|
||||
# BLS 对容器内 Python 的默认 TLS 配置返回 403,使用与宿主一致的系统默认套件后可取回。
|
||||
# 仅调整这个来源的密码套件,保留证书/主机名校验、TLS 1.2 下限和系统安全等级。
|
||||
self.ssl_context.set_ciphers("DEFAULT")
|
||||
|
||||
@classmethod
|
||||
def from_crawler(cls, crawler: Crawler):
|
||||
return cls(crawler.settings.getfloat("DOWNLOAD_TIMEOUT"))
|
||||
|
||||
async def close(self) -> None:
|
||||
# Scrapy 要求关闭钩子;各请求的客户端已由上下文管理器释放。
|
||||
pass
|
||||
|
||||
async def download_request(self, request: Request) -> Response:
|
||||
headers = [(name, value) for name in request.headers for value in request.headers.getlist(name)]
|
||||
async with httpx.AsyncClient(verify=self.ssl_context, timeout=request.meta.get("download_timeout", self.timeout)) as client:
|
||||
async with client.stream("GET", request.url, headers=headers) as response:
|
||||
# 保留原始压缩体,避免 httpx 与 Scrapy 的 HttpCompressionMiddleware 重复解压。
|
||||
body = b"".join([chunk async for chunk in response.aiter_raw()])
|
||||
return Response(
|
||||
str(response.url), status=response.status_code, headers=response.headers.multi_items(),
|
||||
body=body, request=request,
|
||||
)
|
||||
@@ -1,5 +1,6 @@
|
||||
from alphapulse.core.db import Base
|
||||
from alphapulse.models.ai import AiProvider, ChatMessage, ChatSession, ContextVersion, SkillNode, SkillVersion
|
||||
from alphapulse.models.calendar import EconomicRelease, EconomicRevision, EconomicSeriesValue
|
||||
from alphapulse.models.market import Kline, KlineSyncState, MarketSymbol
|
||||
from alphapulse.models.news import CrawlLog, CrawlRun, NewsItem, NewsRevision, RawBody, RawResponse, Source
|
||||
from alphapulse.models.trading import NewsSignal, TradingAccount, TradingAnalysis, TradingCredential, TradingEvent, TradingFill, TradingOrder, TradingSymbol
|
||||
@@ -12,6 +13,9 @@ __all__ = [
|
||||
"ContextVersion",
|
||||
"CrawlLog",
|
||||
"CrawlRun",
|
||||
"EconomicRelease",
|
||||
"EconomicRevision",
|
||||
"EconomicSeriesValue",
|
||||
"Kline",
|
||||
"KlineSyncState",
|
||||
"MarketSymbol",
|
||||
|
||||
@@ -0,0 +1,60 @@
|
||||
from datetime import datetime
|
||||
|
||||
from sqlalchemy import BigInteger, DateTime, ForeignKey, Integer, String, Text, UniqueConstraint, func
|
||||
from sqlalchemy.dialects.postgresql import JSONB
|
||||
from sqlalchemy.orm import Mapped, mapped_column
|
||||
|
||||
from alphapulse.core.db import Base
|
||||
|
||||
|
||||
class EconomicRelease(Base):
|
||||
__tablename__ = "economic_releases"
|
||||
__table_args__ = (UniqueConstraint("source", "external_id"),)
|
||||
|
||||
id: Mapped[int] = mapped_column(primary_key=True)
|
||||
source: Mapped[str] = mapped_column(String(16))
|
||||
external_id: Mapped[str] = mapped_column(String(160))
|
||||
family: Mapped[str] = mapped_column(String(16))
|
||||
title: Mapped[str] = mapped_column(Text)
|
||||
period: Mapped[str | None] = mapped_column(String(10))
|
||||
stage: Mapped[str | None] = mapped_column(String(16))
|
||||
scheduled_at: Mapped[datetime] = mapped_column(DateTime(timezone=True), index=True)
|
||||
# scheduled / withdrawn;已公布由 first_received_at 判断,不把到点当成已公布。
|
||||
schedule_status: Mapped[str] = mapped_column(String(16), default="scheduled")
|
||||
schedule_url: Mapped[str] = mapped_column(Text)
|
||||
release_url: Mapped[str | None] = mapped_column(Text)
|
||||
schedule_checked_at: Mapped[datetime] = mapped_column(DateTime(timezone=True))
|
||||
first_received_at: Mapped[datetime | None] = mapped_column(DateTime(timezone=True))
|
||||
last_checked_at: Mapped[datetime | None] = mapped_column(DateTime(timezone=True))
|
||||
next_check_at: Mapped[datetime] = mapped_column(DateTime(timezone=True), index=True)
|
||||
error: Mapped[str | None] = mapped_column(Text)
|
||||
# 按指标代码保存实际值、官方报告内前值和引用;数字以十进制字符串存储。
|
||||
values: Mapped[dict] = mapped_column(JSONB, default=dict)
|
||||
revision_no: Mapped[int] = mapped_column(Integer, default=1)
|
||||
|
||||
|
||||
class EconomicRevision(Base):
|
||||
__tablename__ = "economic_revisions"
|
||||
__table_args__ = (UniqueConstraint("release_id", "revision_no"),)
|
||||
|
||||
id: Mapped[int] = mapped_column(primary_key=True)
|
||||
release_id: Mapped[int] = mapped_column(ForeignKey("economic_releases.id"), index=True)
|
||||
revision_no: Mapped[int] = mapped_column(Integer)
|
||||
payload: Mapped[dict] = mapped_column(JSONB)
|
||||
raw_response_id: Mapped[int] = mapped_column(BigInteger, ForeignKey("raw_responses.id"))
|
||||
captured_at: Mapped[datetime] = mapped_column(DateTime(timezone=True), server_default=func.now())
|
||||
|
||||
|
||||
class EconomicSeriesValue(Base):
|
||||
"""当前官方序列;没有历史公布时点的版本保证,不覆盖当期公告值。"""
|
||||
__tablename__ = "economic_series_values"
|
||||
__table_args__ = (UniqueConstraint("source", "indicator", "period", "stage"),)
|
||||
|
||||
id: Mapped[int] = mapped_column(primary_key=True)
|
||||
source: Mapped[str] = mapped_column(String(16))
|
||||
indicator: Mapped[str] = mapped_column(String(48))
|
||||
period: Mapped[str] = mapped_column(String(10))
|
||||
stage: Mapped[str] = mapped_column(String(16))
|
||||
value: Mapped[str] = mapped_column(String(64))
|
||||
captured_at: Mapped[datetime] = mapped_column(DateTime(timezone=True))
|
||||
raw_response_id: Mapped[int] = mapped_column(BigInteger, ForeignKey("raw_responses.id"))
|
||||
@@ -14,6 +14,8 @@ class Source(Base):
|
||||
code: Mapped[str] = mapped_column(String(32), primary_key=True)
|
||||
name: Mapped[str] = mapped_column(String(64))
|
||||
list_url: Mapped[str] = mapped_column(String(255))
|
||||
# 新闻管理器只负责 news;日历专属来源不启动 Scrapy 子进程。
|
||||
collector: Mapped[str] = mapped_column(String(16), default="news", server_default="news")
|
||||
enabled: Mapped[bool] = mapped_column(Boolean, default=True)
|
||||
interval_seconds: Mapped[int] = mapped_column(Integer)
|
||||
backfill_hours: Mapped[int] = mapped_column(Integer, default=72)
|
||||
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
<!-- Official BLS cpi September 2026 report, retrieved 2026-10-24. Relevant table cells only. -->
|
||||
<div id="bodytext"><table id="cpi_pressa"><tr><td></td><td>Seasonally adjusted changes from preceding month</td><td>Un- adjusted 12-mos. ended Sep. 2026</td></tr><tr><td>Mar. 2026</td><td>Apr. 2026</td><td>May 2026</td><td>Jun. 2026</td><td>Jul. 2026</td><td>Aug. 2026</td><td>Sep. 2026</td></tr><tr><td>All items</td><td>0.9</td><td>0.6</td><td>0.5</td><td>-0.4</td><td>0.1</td><td>0.4</td><td>0.6</td><td>3.7</td></tr><tr><td>Food</td><td>0.0</td><td>0.5</td><td>0.2</td><td>0.2</td><td>0.1</td><td>0.1</td><td>0.0</td><td>2.5</td></tr><tr><td>Food at home</td><td>-0.2</td><td>0.7</td><td>0.1</td><td>0.2</td><td>-0.1</td><td>0.0</td><td>-0.1</td><td>1.8</td></tr><tr><td>Food away from home ( 1 )</td><td>0.2</td><td>0.2</td><td>0.3</td><td>0.2</td><td>0.3</td><td>0.3</td><td>0.2</td><td>3.5</td></tr><tr><td>Energy</td><td>10.9</td><td>3.8</td><td>3.9</td><td>-5.7</td><td>-1.5</td><td>2.1</td><td>5.2</td><td>20.4</td></tr><tr><td>Energy commodities</td><td>21.3</td><td>5.6</td><td>6.7</td><td>-9.5</td><td>-2.9</td><td>4.2</td><td>9.3</td><td>35.3</td></tr><tr><td>Gasoline (all types)</td><td>21.2</td><td>5.4</td><td>7.0</td><td>-9.7</td><td>-2.9</td><td>3.9</td><td>9.1</td><td>34.2</td></tr><tr><td>Fuel oil</td><td>30.7</td><td>5.8</td><td>3.8</td><td>-9.2</td><td>-1.7</td><td>10.1</td><td>15.3</td><td>74.2</td></tr><tr><td>Energy services</td><td>0.4</td><td>1.6</td><td>0.4</td><td>-0.7</td><td>0.3</td><td>-0.4</td><td>0.1</td><td>4.6</td></tr><tr><td>Electricity</td><td>0.8</td><td>2.1</td><td>0.6</td><td>-1.0</td><td>0.1</td><td>-0.2</td><td>0.2</td><td>4.4</td></tr><tr><td>Utility (piped) gas service</td><td>-0.9</td><td>-0.1</td><td>-0.5</td><td>0.5</td><td>0.7</td><td>-1.1</td><td>-0.3</td><td>5.0</td></tr><tr><td>All items less food and energy</td><td>0.2</td><td>0.4</td><td>0.2</td><td>0.0</td><td>0.2</td><td>0.3</td><td>0.3</td><td>2.6</td></tr><tr><td>Commodities less food and energy commodities</td><td>0.1</td><td>0.0</td><td>-0.1</td><td>-0.1</td><td>0.2</td><td>0.1</td><td>0.3</td><td>0.7</td></tr><tr><td>New vehicles</td><td>0.1</td><td>-0.2</td><td>-0.3</td><td>0.0</td><td>0.1</td><td>0.3</td><td>0.2</td><td>0.6</td></tr><tr><td>Used cars and trucks</td><td>-0.4</td><td>0.0</td><td>0.1</td><td>-0.2</td><td>0.4</td><td>0.4</td><td>0.7</td><td>-1.5</td></tr><tr><td>Apparel</td><td>1.0</td><td>0.6</td><td>0.3</td><td>-0.6</td><td>0.1</td><td>0.0</td><td>0.3</td><td>3.4</td></tr><tr><td>Medical care commodities ( 1 )</td><td>-1.0</td><td>-0.4</td><td>-0.7</td><td>-0.2</td><td>-0.6</td><td>-0.2</td><td>-0.7</td><td>-3.3</td></tr><tr><td>Services less energy services</td><td>0.2</td><td>0.5</td><td>0.3</td><td>0.0</td><td>0.2</td><td>0.3</td><td>0.4</td><td>3.1</td></tr><tr><td>Shelter</td><td>0.3</td><td>0.6</td><td>0.3</td><td>0.1</td><td>0.1</td><td>0.3</td><td>0.4</td><td>3.2</td></tr><tr><td>Transportation services</td><td>0.6</td><td>0.3</td><td>-0.6</td><td>-0.3</td><td>0.3</td><td>0.5</td><td>0.6</td><td>2.7</td></tr><tr><td>Medical care services</td><td>0.0</td><td>0.0</td><td>0.5</td><td>-0.1</td><td>0.6</td><td>-0.2</td><td>0.3</td><td>2.5</td></tr><tr><td>Footnotes
|
||||
(1) Not seasonally adjusted.</td></tr></table></div>
|
||||
+14
@@ -0,0 +1,14 @@
|
||||
<html><body><h3>October 2026</h3><div class="cal-nojs__rowTitle"><h4>FOMC Meetings</h4></div><div class="row">
|
||||
<div class="col-xs-2">
|
||||
<p>2:00 p.m.</p>
|
||||
</div>
|
||||
<div class="col-xs-7">
|
||||
<p>FOMC Meeting</p>
|
||||
<p></p><p>Two-day meeting, October 27 - 28</p>
|
||||
|
||||
<p>Press Conference</p>
|
||||
</div>
|
||||
<div class="col-xs-3">
|
||||
<p>28</p>
|
||||
</div>
|
||||
</div></body></html>
|
||||
+115
@@ -0,0 +1,115 @@
|
||||
<html><body><div id="article">
|
||||
<div class="heading col-xs-12 col-sm-8 col-md-8">
|
||||
|
||||
<p class="article__time">September 16, 2026</p>
|
||||
<h3 class="title">Federal Reserve issues FOMC statement</h3>
|
||||
|
||||
<p class="releaseTime">For release at 2:00 p.m. EDT
|
||||
|
||||
</p><ul class="list-unstyled">
|
||||
<li class="share btn-group">
|
||||
<a class="dropdown-toggle shareLink" aria-labelledby="shareMenu" role="button" data-toggle="dropdown" title="Share" href="#">Share<span class="icon icon__sm icon-share icon--right"></span></a>
|
||||
<ul role="menu" class="dropdown-menu shareDL__dropdown shareDL__dropdown--inline shareDL__dropdown--right" id="shareMenu">
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="shareDL__item">
|
||||
|
||||
<a class="shareDL__link icon__link sr-only-focusable" href="https://twitter.com/share?url=https://www.federalreserve.gov/newsevents/pressreleases/monetary20260916a.htm&text=Federal%20Reserve%20issues%20FOMC%20statement&via=FederalReserve">
|
||||
<!--<span class="icon icon__sm icon--centered icon-twitter-color"></span> -->
|
||||
<span class="icon icon__sm icon--centered icon-twitter-color"></span>
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
<li class="shareDL__item">
|
||||
|
||||
<a class="shareDL__link icon__link sr-only-focusable" href="https://www.facebook.com/sharer.php?u=https://www.federalreserve.gov/newsevents/pressreleases/monetary20260916a.htm&name=Federal%20Reserve%20issues%20FOMC%20statement">
|
||||
<!--<span class="icon icon__sm icon--centered icon-facebook-color"></span> -->
|
||||
<span class="icon icon__sm icon--centered icon-facebook-color"></span>
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
<li class="shareDL__item">
|
||||
|
||||
<a class="shareDL__link icon__link sr-only-focusable" href="https://www.linkedin.com/shareArticle?url=https://www.federalreserve.gov/newsevents/pressreleases/monetary20260916a.htm&title=Federal%20Reserve%20issues%20FOMC%20statement&mini=true">
|
||||
<!--<span class="icon icon__sm icon--centered icon-linkedin-color"></span> -->
|
||||
<span class="icon icon__sm icon--centered icon-linkedin-color"></span>
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
<li class="shareDL__item">
|
||||
|
||||
<a class="shareDL__link icon__link sr-only-focusable noIcon" href="https://www.threads.net/intent/post?text=https://www.federalreserve.gov/newsevents/pressreleases/monetary20260916a.htm">
|
||||
<!--<span class="icon icon__sm icon--centered icon-threads-color"></span> -->
|
||||
<span class="icon icon__sm icon--centered icon-threads"></span>
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
<li class="shareDL__item">
|
||||
|
||||
<a class="shareDL__link icon__link sr-only-focusable noIcon" href="https://bsky.app/intent/compose?text=https://www.federalreserve.gov/newsevents/pressreleases/monetary20260916a.htm">
|
||||
<!--<span class="icon icon__sm icon--centered icon-bluesky-color"></span> -->
|
||||
<span class="icon icon__sm icon--centered icon-bluesky"></span>
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
<li class="shareDL__item">
|
||||
|
||||
<a class="shareDL__link icon__link sr-only-focusable noIcon" href="/cdn-cgi/l/email-protection#c9f6aba6adb0f4a1bdbdb9baf3e6e6bebebee7afacadacbba8a5bbacbaacbbbface7aea6bfe6a7acbebaacbfaca7bdbae6b9bbacbababbaca5aca8baacbae6a4a6a7acbda8bbb0fbf9fbfff9f0f8ffa8e7a1bda4efbabcaba3acaabdf48facadacbba8a5e99bacbaacbbbface9a0bababcacbae98f86848ae9babda8bdaca4aca7bd">
|
||||
<!--<span class="icon icon__sm icon--centered icon-email-color"></span> -->
|
||||
<span class="icon icon__sm icon--centered icon-email-color"></span>
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
</div>
|
||||
<div class="col-xs-12 col-sm-4 col-md-4 hidden-sm"></div>
|
||||
<div class="col-xs-12 col-sm-8 col-md-8">
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<p>The Federal Open Market Committee approved the following statement for release by a 12 – 0 vote:</p>
|
||||
|
||||
<p>The Committee decided to raise the target range for the federal funds rate by 1/4 percentage point<strong> </strong>to 3-3/4<strong> </strong>to 4 percent, in support of the Federal Reserve's dual mandate. The Committee is continuing its policy of maintaining ample reserves in the banking system.</p>
|
||||
|
||||
<p>Economic activity is expanding at a solid pace. While uncertainty remains elevated owing, in part, to geopolitical developments,<strong> </strong>domestic spending has been resilient. Productivity growth is strong, and capital investment is robust. Job gains have kept pace with the workforce, and the unemployment rate has changed little.</p>
|
||||
|
||||
<p>Inflation remains elevated. Today's policy action will support a timelier return to the Committee's 2 percent goal. The Committee will deliver price stability.</p>
|
||||
|
||||
<p>For media inquiries, please email <a href="/cdn-cgi/l/email-protection#18757d7c7179587e6a7a367f776e"><span class="__cf_email__" data-cfemail="85e8e0e1ece4c5e3f7e7abe2eaf3">[email protected]</span></a> or call 202-452-2955.</p>
|
||||
|
||||
<p><a href="/newsevents/pressreleases/monetary20260916a1.htm">Implementation Note issued September 16, 2026</a></p>
|
||||
|
||||
</div>
|
||||
<div class="col-xs-12 col-sm-4 col-md-4">
|
||||
|
||||
</div>
|
||||
</div></body></html>
|
||||
+201
@@ -0,0 +1,201 @@
|
||||
<html><body><div id="bodytext" class="verdana md">
|
||||
|
||||
|
||||
<!-- 1COL LAYOUT COL1 END -->
|
||||
|
||||
<!--no_index_end-->
|
||||
<!-- OneColHeadBasic End -->
|
||||
<h1>Employment Situation Summary
|
||||
</h1>
|
||||
<div class="normalnews">
|
||||
<pre>
|
||||
Transmission of material in this news release is embargoed until USDL-26-1549
|
||||
8:30 a.m. (ET) Friday, October 2, 2026
|
||||
|
||||
Technical information:
|
||||
Household data: (202) 691-6378 * [email protected] * www.bls.gov/cps
|
||||
Establishment data: (202) 691-6555 * [email protected] * www.bls.gov/ces
|
||||
|
||||
Media contact: (202) 691-5902 * [email protected]
|
||||
|
||||
|
||||
THE EMPLOYMENT SITUATION - SEPTEMBER 2026
|
||||
|
||||
|
||||
Both nonfarm payroll employment (+29,000) and the unemployment rate (4.2 percent) changed little in
|
||||
September, the U.S. Bureau of Labor Statistics reported today. Employment in all major industries
|
||||
changed little over the month.
|
||||
|
||||
This news release presents statistics from two monthly surveys. The household survey measures labor
|
||||
force status, including unemployment, by demographic characteristics. The establishment survey
|
||||
measures nonfarm employment, hours, and earnings by industry. For more information about the
|
||||
concepts and statistical methodology used in these two surveys, see the Technical Note.
|
||||
|
||||
Household Survey Data
|
||||
|
||||
Both the unemployment rate, at 4.2 percent, and the number of unemployed people, at 7.1 million,
|
||||
changed little in September. The unemployment rate has remained in a narrow range of 4.1 percent to
|
||||
4.3 percent since March. (See table A-1.)
|
||||
|
||||
Among the major worker groups, the unemployment rate for people who are Black (7.0 percent)
|
||||
increased in September. The jobless rates for adult men (3.9 percent), adult women (3.6 percent),
|
||||
teenagers (14.5 percent), and people who are White (3.6 percent), Asian (2.9 percent), or Hispanic
|
||||
(4.7 percent) showed little change over the month. (See tables A-1, A-2, and A-3.)
|
||||
|
||||
The number of long-term unemployed (those jobless for 27 weeks or more) was essentially unchanged
|
||||
at 1.9 million in September. The long-term unemployed accounted for 27.1 percent of all unemployed
|
||||
people. (See table A-12.)
|
||||
|
||||
Both the labor force participation rate, at 61.8 percent, and the employment-population ratio, at
|
||||
59.2 percent, changed little in September. These measures showed little net change since January.
|
||||
(See table A-1.)
|
||||
|
||||
The number of people employed part time for economic reasons changed little at 4.5 million in
|
||||
September. These individuals would have preferred full-time employment but were working part time
|
||||
because their hours had been reduced or they were unable to find full-time jobs. (See table A-8.)
|
||||
|
||||
In September, the number of people not in the labor force who currently want a job changed little
|
||||
at 5.8 million. These individuals were not counted as unemployed because they were not actively
|
||||
looking for work during the 4 weeks preceding the survey or were unavailable to take a job. (See
|
||||
table A-1.)
|
||||
|
||||
Among those not in the labor force who wanted a job, the number of people marginally attached to
|
||||
the labor force decreased by 236,000 to 1.5 million in September. These individuals wanted and were
|
||||
available for work and had looked for a job sometime in the prior 12 months but had not looked for
|
||||
work in the 4 weeks preceding the survey. The number of discouraged workers, a subset of the
|
||||
marginally attached who believed that no jobs were available for them, changed little over the
|
||||
month at 414,000. (See Summary table A.)
|
||||
|
||||
Establishment Survey Data
|
||||
|
||||
Total nonfarm payroll employment changed little in September (+29,000), following an average
|
||||
monthly gain of 45,000 over the prior 12 months. Employment in all major industries changed little
|
||||
over the month. (See table B-1.)
|
||||
|
||||
Health care employment continued its upward trend in September (+17,000), but at a slower pace than
|
||||
the average monthly gain over the prior 12 months (+33,000). In September, employment continued to
|
||||
trend up in ambulatory health care services (+13,000) and in hospitals (+12,000), while nursing and
|
||||
residential care facilities lost jobs (-9,000).
|
||||
|
||||
Employment in construction changed little in September (+11,000). The industry had added an average
|
||||
of 10,000 jobs per month over the prior 12 months. In September, employment in nonresidential
|
||||
specialty trade contractors continued to trend up (+12,000).
|
||||
|
||||
Manufacturing employment was little changed in September (+9,000) but is up by 72,000 since a
|
||||
recent low in December 2025. Over the month, employment increased in plastics and rubber products
|
||||
manufacturing (+5,000) and in machinery manufacturing (+5,000).
|
||||
|
||||
In September, financial activities employment was little changed (-7,000). Employment in financial
|
||||
activities is down by 129,000 since a recent peak in May 2025, with most of the job loss in
|
||||
insurance carriers and related activities (-90,000).
|
||||
|
||||
Employment also showed little change over the month in other major industries, including mining,
|
||||
quarrying, and oil and gas extraction; wholesale trade; retail trade; transportation and
|
||||
warehousing; information; professional and business services; social assistance; leisure and
|
||||
hospitality; other services; and government.
|
||||
|
||||
In September, average hourly earnings for all employees on private nonfarm payrolls edged up by 5
|
||||
cents, or 0.1 percent, to $37.81. Over the past 12 months, average hourly earnings have increased
|
||||
by 3.0 percent. In September, average hourly earnings of private-sector production and
|
||||
nonsupervisory employees rose by 7 cents, or 0.2 percent, to $32.60. (See tables B-3 and B-8.)
|
||||
|
||||
The average workweek for all employees on private nonfarm payrolls remained at 34.4 hours in
|
||||
September. In manufacturing, the average workweek was unchanged at 40.6 hours, and overtime held at
|
||||
3.0 hours. The average workweek for production and nonsupervisory employees on private nonfarm
|
||||
payrolls remained at 33.8 hours. (See tables B-2 and B-7.)
|
||||
|
||||
The change in total nonfarm payroll employment for July was revised down by 31,000, from +21,000 to
|
||||
-10,000, and the change for August was revised down by 29,000, from +162,000 to +133,000. With
|
||||
these revisions, employment in July and August combined is 60,000 lower than previously reported.
|
||||
(Monthly revisions result from additional reports received from businesses and government agencies
|
||||
since the last published estimates and from the recalculation of seasonal factors.)
|
||||
|
||||
_____________
|
||||
The Employment Situation for October 2026 is scheduled to be published on Friday, November 6, 2026,
|
||||
at 8:30 a.m. (ET).
|
||||
|
||||
|
||||
|
||||
</pre>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="level0"> <a href="/news.release/empsit.a.htm"> Employment Situation Summary Table A. Household data, seasonally adjusted
|
||||
</a> </div>
|
||||
<div class="level0"> <a href="/news.release/empsit.b.htm"> Employment Situation Summary Table B. Establishment data, seasonally adjusted
|
||||
</a> </div>
|
||||
<div class="level0"> <a href="/news.release/empsit.faq.htm"> Employment Situation Frequently Asked Questions
|
||||
</a> </div>
|
||||
<div class="level0"> <a href="/news.release/empsit.tn.htm"> Employment Situation Technical Note
|
||||
</a> </div>
|
||||
<div class="level0"> <a href="/news.release/empsit.t01.htm"> Table A-1. Employment status of the civilian population by sex and age
|
||||
</a> </div>
|
||||
<div class="level0"> <a href="/news.release/empsit.t02.htm"> Table A-2. Employment status of the civilian population by race, sex, and age
|
||||
</a> </div>
|
||||
<div class="level0"> <a href="/news.release/empsit.t03.htm"> Table A-3. Employment status of the Hispanic or Latino population by sex and age
|
||||
</a> </div>
|
||||
<div class="level0"> <a href="/news.release/empsit.t04.htm"> Table A-4. Employment status of the civilian population 25 years and over by educational attainment
|
||||
</a> </div>
|
||||
<div class="level0"> <a href="/news.release/empsit.t05.htm"> Table A-5. Employment status of the civilian population 18 years and over by veteran status, period of service, and sex, not seasonally adjusted
|
||||
</a> </div>
|
||||
<div class="level0"> <a href="/news.release/empsit.t06.htm"> Table A-6. Employment status of the civilian population by sex, age, and disability status, not seasonally adjusted
|
||||
</a> </div>
|
||||
<div class="level0"> <a href="/news.release/empsit.t07.htm"> Table A-7. Employment status of the civilian population by nativity and sex, not seasonally adjusted
|
||||
</a> </div>
|
||||
<div class="level0"> <a href="/news.release/empsit.t08.htm"> Table A-8. Employed people by class of worker and part-time status
|
||||
</a> </div>
|
||||
<div class="level0"> <a href="/news.release/empsit.t09.htm"> Table A-9. Selected employment indicators
|
||||
</a> </div>
|
||||
<div class="level0"> <a href="/news.release/empsit.t10.htm"> Table A-10. Selected unemployment indicators, seasonally adjusted
|
||||
</a> </div>
|
||||
<div class="level0"> <a href="/news.release/empsit.t11.htm"> Table A-11. Unemployed people by reason for unemployment
|
||||
</a> </div>
|
||||
<div class="level0"> <a href="/news.release/empsit.t12.htm"> Table A-12. Unemployed people by duration of unemployment
|
||||
</a> </div>
|
||||
<div class="level0"> <a href="/news.release/empsit.t13.htm"> Table A-13. Employed and unemployed people by occupation, not seasonally adjusted
|
||||
</a> </div>
|
||||
<div class="level0"> <a href="/news.release/empsit.t14.htm"> Table A-14. Unemployed people by industry and class of worker, not seasonally adjusted
|
||||
</a> </div>
|
||||
<div class="level0"> <a href="/news.release/empsit.t15.htm"> Table A-15. Alternative measures of labor underutilization
|
||||
</a> </div>
|
||||
<div class="level0"> <a href="/news.release/empsit.t16.htm"> Table A-16. People not in the labor force and multiple jobholders by sex, not seasonally adjusted
|
||||
</a> </div>
|
||||
<div class="level0"> <a href="/news.release/empsit.t17.htm"> Table B-1. Employees on nonfarm payrolls by industry sector and selected industry detail
|
||||
</a> </div>
|
||||
<div class="level0"> <a href="/news.release/empsit.t18.htm"> Table B-2. Average weekly hours and overtime of all employees on private nonfarm payrolls by industry sector, seasonally adjusted
|
||||
</a> </div>
|
||||
<div class="level0"> <a href="/news.release/empsit.t19.htm"> Table B-3. Average hourly and weekly earnings of all employees on private nonfarm payrolls by industry sector, seasonally adjusted
|
||||
</a> </div>
|
||||
<div class="level0"> <a href="/news.release/empsit.t20.htm"> Table B-4. Indexes of aggregate weekly hours and payrolls for all employees on private nonfarm payrolls by industry sector, seasonally adjusted
|
||||
</a> </div>
|
||||
<div class="level0"> <a href="/news.release/empsit.t21.htm"> Table B-5. Employment of women on nonfarm payrolls by industry sector, seasonally adjusted
|
||||
</a> </div>
|
||||
<div class="level0"> <a href="/news.release/empsit.t22.htm"> Table B-6. Employment of production and nonsupervisory employees on private nonfarm payrolls by industry sector, seasonally adjusted(1)
|
||||
</a> </div>
|
||||
<div class="level0"> <a href="/news.release/empsit.t23.htm"> Table B-7. Average weekly hours and overtime of production and nonsupervisory employees on private nonfarm payrolls by industry sector, seasonally adjusted(1)
|
||||
</a> </div>
|
||||
<div class="level0"> <a href="/news.release/empsit.t24.htm"> Table B-8. Average hourly and weekly earnings of production and nonsupervisory employees on private nonfarm payrolls by industry sector, seasonally adjusted(1)
|
||||
</a> </div>
|
||||
<div class="level0"> <a href="/news.release/empsit.t25.htm"> Table B-9. Indexes of aggregate weekly hours and payrolls for production and nonsupervisory employees on private nonfarm payrolls by industry sector, seasonally adjusted(1)
|
||||
</a> </div>
|
||||
<br>
|
||||
<div class="level0"> <a href="/cps/cpsatabs.htm"> Access to historical data for the "A" tables of the Employment Situation News Release
|
||||
</a> </div>
|
||||
<div class="level0"> <a href="/ces/data/employment-situation-table-download.htm"> Access to historical data for the "B" tables of the Employment Situation News Release
|
||||
</a> </div>
|
||||
<div class="level0"> <a href="empsit.htm"> HTML version of the entire news release </a> </div>
|
||||
|
||||
<!-- start green box --><div class="highlight-box-green">
|
||||
<div class="level0 separate"><span class="heading"><a href="/news.release/pdf/empsit.pdf"> The PDF version of the news release </a></span></div>
|
||||
<div class="level0 separate"><span class="heading"><a href="/charts/employment-situation/"> News release charts </a></span></div>
|
||||
<div class="level0 separate"><span class="heading"><a href="../web/empsit.supp.toc.htm"> Supplemental Files Table of Contents</a></span></div></div><!-- end green box -->
|
||||
<div class="level0 separate"><span class="heading"><a href="/news.release/empsit.toc.htm"> Table of Contents </a></span></div>
|
||||
<span class="update"><strong>Last Modified Date:</strong> October 02, 2026
|
||||
</span><p> </p><br>
|
||||
<!-- OneColFootBasic Begin -->
|
||||
<!-- Footer Filename: -->
|
||||
<!--no_index_start-->
|
||||
<!-- 1COL BASIC LAYOUT COL1 END -->
|
||||
<div class="social-media">
|
||||
</div>
|
||||
</div></body></html>
|
||||
+1
@@ -0,0 +1 @@
|
||||
<html><body><div class="field field--name-body field--type-text-with-summary field--label-hidden field--item"><p><a href="https://apps.bea.gov/iTable/?reqid=19&step=2&isuri=1&categories=survey&_gl=1*kvcm30*_ga*MjA4Njg2MTcyMS4xNzQ4MzU1NTcy*_ga_J4698JNNFT*czE3NTQ5MTg5MzIkbzg0JGcxJHQxNzU0OTIyMTUyJGo1NiRsMCRoMA..#eyJhcHBpZCI6MTksInN0ZXBzIjpbMSwyLDNdLCJkYXRhIjpbWyJjYXRlZ29yaWVzIiwiU3VydmV5Il0sWyJOSVBBX1RhYmxlX0xpc3QiLCI3NiJdXX0="><strong>Personal income</strong> increased $66.6 billion </a>(0.2 percent at a monthly rate) in August, according to estimates released today by the U.S. Bureau of Economic Analysis (BEA). <strong>Disposable personal income (DPI)</strong>—personal income less personal current taxes—increased $68.6 billion (0.3 percent), and <strong>personal consumption expenditures (PCE)</strong> increased $190.8 billion (0.9 percent).</p><div class="center_div"><a href="/system/files/pi0826chart1.png"><img style="padding:0px 50px;" src="/system/files/pi0826chart1.png" data-entity-type="file" alt="Disposable Personal Income, Outlays, and Saving" width="1167" height="588" class="align-center"></a></div><p><strong>Personal outlays</strong>—the sum of PCE, personal interest payments, and personal current transfer payments—increased $190.7 billion in August. <strong>Personal saving</strong> was $990.2 billion, and the <strong>personal saving rate</strong>—personal saving as a percentage of DPI—was 4.1 percent.</p><p>The increase in <strong>current-dollar personal income</strong> in August primarily reflected increases in compensation and government social benefits.</p><p>The <a href="https://apps.bea.gov/iTable/?reqid=19&step=2&isuri=1&categories=survey&_gl=1*kvcm30*_ga*MjA4Njg2MTcyMS4xNzQ4MzU1NTcy*_ga_J4698JNNFT*czE3NTQ5MTg5MzIkbzg0JGcxJHQxNzU0OTIyMTUyJGo1NiRsMCRoMA..#eyJhcHBpZCI6MTksInN0ZXBzIjpbMSwyLDNdLCJkYXRhIjpbWyJjYXRlZ29yaWVzIiwiU3VydmV5Il0sWyJOSVBBX1RhYmxlX0xpc3QiLCI4MiJdXX0=">$190.8 billion increase in<strong> current-dollar PCE</strong></a> in August reflected increases of $114.1 billion in spending on goods and $76.7 billion in spending on services.</p><p> </p><div class="center_div"><a href="/system/files/pi0826chart2.png"><img style="padding:0px 125px;" src="/system/files/pi0826chart2.png" data-entity-type="file" alt="Changes in Monthly Consumer Spending August 2026" width="974" height="816" class="align-center"></a></div><p><a href="https://apps.bea.gov/iTable/?reqid=19&step=2&isuri=1&categories=survey&_gl=1*kvcm30*_ga*MjA4Njg2MTcyMS4xNzQ4MzU1NTcy*_ga_J4698JNNFT*czE3NTQ5MTg5MzIkbzg0JGcxJHQxNzU0OTIyMTUyJGo1NiRsMCRoMA..#eyJhcHBpZCI6MTksInN0ZXBzIjpbMSwyLDNdLCJkYXRhIjpbWyJjYXRlZ29yaWVzIiwiU3VydmV5Il0sWyJOSVBBX1RhYmxlX0xpc3QiLCI4MyJdXX0="><strong>Real PCE</strong> increased $92.8 billion</a> (<a href="https://apps.bea.gov/iTable/?reqid=19&step=2&isuri=1&categories=survey&_gl=1*kvcm30*_ga*MjA4Njg2MTcyMS4xNzQ4MzU1NTcy*_ga_J4698JNNFT*czE3NTQ5MTg5MzIkbzg0JGcxJHQxNzU0OTIyMTUyJGo1NiRsMCRoMA..#eyJhcHBpZCI6MTksInN0ZXBzIjpbMSwyLDNdLCJkYXRhIjpbWyJjYXRlZ29yaWVzIiwiU3VydmV5Il0sWyJOSVBBX1RhYmxlX0xpc3QiLCI3OSJdXX0=">0.6 percent</a> at a monthly rate) in August.</p><p><a href="https://apps.bea.gov/iTable/?reqid=19&step=2&isuri=1&categories=survey&_gl=1*1p5v1ex*_ga*MjA4Njg2MTcyMS4xNzQ4MzU1NTcy*_ga_J4698JNNFT*czE3NTUwOTMyMTUkbzg5JGcxJHQxNzU1MDkzMjE4JGo1NyRsMCRoMA..#eyJhcHBpZCI6MTksInN0ZXBzIjpbMSwyLDNdLCJkYXRhIjpbWyJjYXRlZ29yaWVzIiwiU3VydmV5Il0sWyJOSVBBX1RhYmxlX0xpc3QiLCI4NCJdXX0=">From the preceding month, the<strong> PCE price index</strong> for August increased 0.3 percent</a>. Excluding food and energy, the PCE price index increased 0.2 percent.</p><p><a href="https://apps.bea.gov/iTable/?reqid=19&step=2&isuri=1&categories=survey&_gl=1*1p5v1ex*_ga*MjA4Njg2MTcyMS4xNzQ4MzU1NTcy*_ga_J4698JNNFT*czE3NTUwOTMyMTUkbzg5JGcxJHQxNzU1MDkzMjE4JGo1NyRsMCRoMA..#eyJhcHBpZCI6MTksInN0ZXBzIjpbMSwyLDNdLCJkYXRhIjpbWyJjYXRlZ29yaWVzIiwiU3VydmV5Il0sWyJOSVBBX1RhYmxlX0xpc3QiLCI0MjQiXV19">From the same month one year ago, the<strong> PCE price index</strong> for August increased 3.4 percent</a>. Excluding food and energy, the PCE price index increased 3.0 percent from one year ago.</p><div class="center_div"><a href="/system/files/pi0826chart3.png"><img style="padding:0px 125px;" src="/system/files/pi0826chart3.png" data-entity-type="file" alt="PCE Price Indexes, Percent Change From Month One Year Ago" width="1007" height="786" class="align-center"></a></div><div class="table-responsive"><table class="table table-md"><thead><tr><th class="text-center" colspan="5"><strong>Personal Income and Related Measures</strong><br><text class="text-center text-muted" colspan="5"><small>[Percent change from preceding month]</small></text></th></tr></thead><tbody><tr><td class="text-left"> </td><td class="text-right" style="text-align:right;">July</td><td class="text-right" style="text-align:right;">August</td></tr><tr><td class="text-left">CuLine truncated
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
<!-- Official BLS ppi September 2026 report, retrieved 2026-10-24. Relevant table cells only. -->
|
||||
<div id="bodytext"><table id="ppi_nrtablea"><tr><td>Month</td><td>Total final demand</td><td>Final demand less foods, energy, and trade</td><td>Final demand goods</td><td>Final demand services</td><td>Change in final demand from 12 months ago (unadj.)</td><td>Change in final demand less foods, energy, and trade from 12 mo. ago (unadj.)</td></tr><tr><td>Total</td><td>Foods</td><td>Energy</td><td>Less foods and energy</td><td>Total</td><td>Trade</td><td>Transportation and warehousing</td><td>Other</td></tr><tr><td>2025</td><td></td></tr><tr><td>Sept.</td><td>0.6</td><td>0.2</td><td>0.6</td><td>0.8</td><td>2.0</td><td>0.2</td><td>0.6</td><td>1.6</td><td>0.7</td><td>0.2</td><td>3.0</td><td>3.0</td></tr><tr><td>Oct.</td><td>0.1</td><td>0.6</td><td>-0.2</td><td>-0.4</td><td>-2.2</td><td>0.5</td><td>0.2</td><td>-0.9</td><td>0.0</td><td>0.7</td><td>2.8</td><td>3.5</td></tr><tr><td>Nov.</td><td>0.4</td><td>0.3</td><td>0.8</td><td>0.1</td><td>3.4</td><td>0.2</td><td>0.3</td><td>0.2</td><td>0.8</td><td>0.2</td><td>3.1</td><td>3.6</td></tr><tr><td>Dec.</td><td>0.4</td><td>0.1</td><td>-0.1</td><td>-0.2</td><td>-1.5</td><td>0.4</td><td>0.6</td><td>1.8</td><td>0.2</td><td>0.0</td><td>3.1</td><td>3.4</td></tr><tr><td>2026</td><td></td></tr><tr><td>Jan.</td><td>0.6</td><td>0.5</td><td>-0.1</td><td>-1.3</td><td>-1.7</td><td>0.7</td><td>0.9</td><td>2.0</td><td>1.0</td><td>0.3</td><td>3.1</td><td>3.5</td></tr><tr><td>Feb.</td><td>0.5</td><td>0.5</td><td>1.0</td><td>2.3</td><td>2.0</td><td>0.4</td><td>0.3</td><td>-0.3</td><td>0.8</td><td>0.5</td><td>3.4</td><td>3.5</td></tr><tr><td>Mar.</td><td>0.8</td><td>0.2</td><td>2.0</td><td>-0.6</td><td>10.5</td><td>0.4</td><td>0.3</td><td>0.5</td><td>2.2</td><td>0.0</td><td>4.3</td><td>3.6</td></tr><tr><td>Apr.</td><td>1.1</td><td>0.5</td><td>1.9</td><td>0.3</td><td>7.1</td><td>0.7</td><td>0.8</td><td>1.5</td><td>3.7</td><td>0.1</td><td>5.7</td><td>4.4</td></tr><tr><td>May ( 1 )</td><td>0.5</td><td>0.8</td><td>2.2</td><td>0.6</td><td>8.2</td><td>0.7</td><td>-0.2</td><td>-2.7</td><td>2.1</td><td>0.7</td><td>5.9</td><td>5.0</td></tr><tr><td>June ( 1 )</td><td>-0.1</td><td>0.2</td><td>-1.4</td><td>-0.6</td><td>-6.8</td><td>0.2</td><td>0.5</td><td>1.3</td><td>-0.3</td><td>0.2</td><td>5.6</td><td>5.0</td></tr><tr><td>July ( 1 )</td><td>0.2</td><td>0.5</td><td>-0.4</td><td>-1.0</td><td>-1.7</td><td>0.2</td><td>0.3</td><td>-0.2</td><td>-1.1</td><td>0.7</td><td>4.9</td><td>4.9</td></tr><tr><td>Aug. ( 1 )</td><td>0.5</td><td>0.3</td><td>1.1</td><td>-0.3</td><td>4.5</td><td>0.4</td><td>0.2</td><td>0.2</td><td>2.2</td><td>0.0</td><td>5.6</td><td>4.8</td></tr><tr><td>Sept.</td><td>1.3</td><td>0.5</td><td>2.6</td><td>1.2</td><td>10.8</td><td>0.3</td><td>0.8</td><td>1.4</td><td>3.4</td><td>0.3</td><td>6.3</td><td>5.0</td></tr><tr><td>Footnotes
|
||||
(1) Some of the figures shown above and elsewhere in this release may differ from those previously reported because data for May through August have been revised to reflect the availability of late reports and corrections by respondents.</td></tr></table></div>
|
||||
@@ -0,0 +1,7 @@
|
||||
<html><head></head><body><h1 itemprop="name">Bank rate maintained at 3.75% - September 2026 Monetary Policy Summary and Minutes</h1><div class="published-date">
|
||||
Published on
|
||||
17 September 2026
|
||||
|
||||
|
||||
|
||||
</div><p>At its meeting ending on 16 September 2026, the Monetary Policy Committee (MPC) voted by a majority of 6–3 to maintain Bank Rate at 3.75%. Three members voted to increase Bank Rate by 0.25 percentage points, to 4%. </p><p>Protracted conflict in the Middle East has contributed to further increases in crude and refined energy prices since the previous meeting, which remain more volatile and higher than pre-conflict. UK CPI inflation increased to 3.1% in August and is likely to rise further over coming quarters. Monetary policy is being set to ensure inflation comes down to 2% sustainably as the economy adjusts to the energy shock. The policy stance required to achieve this will depend on the scale and duration of the shock and how it propagates through the economy. </p><p>There has been little evidence so far of material second-round effects in price and wage-setting. However, the risk of such effects, against which policy needs to lean, is greater the longer higher energy prices persist or are more volatile. Activity has been slightly stronger than expected, although soft labour market conditions, and the higher interest rates faced by households and businesses since the conflict began, will act to reduce inflation over time. Overall, the Committee judges that the risks to the inflation outlook are tilted to the upside, and more so than at the time of the July Monetary Policy Report, although there remains scope for the outlook to change materially as events in the Middle East unfold.</p><p>The Committee judges that it is appropriate to maintain Bank Rate at this meeting. The Committee stands ready to act as necessary to ensure that CPI inflation remains on track to meet the 2% target in the medium term.</p><p>At this meeting, the MPC also voted unanimously to reduce the stock of UK government bond purchases held for monetary policy purposes, and financed by the issuance of central bank reserves, to zero. This will be conducted through a multi-year plan, such that the remaining stock is unwound at an annual average pace of £46 billion by the end of 2034, through annual sales of £20 billion alongside maturing gilts.</p><p>1: Before turning to its immediate policy decisions, the Monetary Policy Committee (MPC) discussed recent developments in global and UK economic and financial conditions, and how these could affect the medium-term outlook and the MPC’s Bank Rate decision. The Committee also discussed its plan for quantitative tightening. </p><p>2: Global energy prices had risen significantly since the July Monetary Policy Report and had continued to be volatile, reflecting events in the Middle East and in Ukraine and Russia. The spot prices of Brent crude and UK wholesale gas had risen by 36% and 78% respectively since the period leading up to the July Report. At close of business on 14 September, the Brent oil price had reached $106 per barrel and the UK wholesale gas price had reached 207 pence per therm. Futures curves continued to slope downwards for both oil and gas, although if there were to be a resolution to the conflict it was likely that any normalisation of energy supply would be slow and gradual. </p><p>3: Pressures on refineries in several countries meant that crack spreads – the difference between the prices of refined petroleum products and Brent crude oil – had remained well above their pre-conflict levels. The prices of gasoline, diesel and jet fuel had all increased since the July Report to a broadly similar extent as for Brent crude.</p><p>4: Increases in oil, gas and refined product prices since the start of the conflict were already having a direct impact on consumer price inflation in major economies. However, as was the case for the United Kingdom, there was not yet judged to have been a significant impact of the energy shock on other consumer goods prices in the euro area or the United States through firms’ supply chains. These effects were expected to build over the next few quarters.</p><p>5: The Committee continued to be attentive to other sources of price pressure in the global economy, which could present additional upside risks to UK inflation via import prices. The S&P index for global agricultural and livestock prices had already risen by around 5% since the July Report, and could be pushed higher if harvests were affected adversely by an unusually severe El Niño event. And the continued significant demand for artificial intelligence (AI)-related technology goods and primary products was driving price pressures for affected sectors.</p><p>6: UK financial conditions had tightened further since the July Report, driven by increases in short-term overnight index swap (OIS) rates. There had been similar moves in these rates in the United States and in the euro area. As had been the case since February, this co-movement reflected the global nature of the energy supply shock and its implications for inflation.</p><p>7: There had continued to be full and fLine truncated
|
||||
+1
@@ -0,0 +1 @@
|
||||
<rss version="2.0"><channel><title>Speeches</title><link>https://www.bankofengland.co.uk/rss/speeches</link><description>Speeches</description><language>en</language><item><guid isPermaLink="false">{52B84329-5132-45B4-A1DB-7769939D3EBA}</guid><link>https://www.bankofengland.co.uk/speech/2026/october/physical-shocks-and-economic-resilience-speech-by-james-talbot</link><title>Physical shocks and economic resilience: a central bank perspective − speech by James Talbot</title><description>Given at the 2nd Annual Conference on Sustainable Finance at the Banco de México on 21 October 2026</description><pubDate>Fri, 23 Oct 2026 10:00:00 +0100</pubDate></item><item><guid isPermaLink="false">{2FC1AD25-F08D-4B82-BAF4-4B3E39B5B115}</guid><link>https://www.bankofengland.co.uk/speech/2026/october/katharine-braddick-mansion-house-city-regulators-dinner-london</link><title>The PRA’s second decade − speech by Katharine Braddick</title><description>Given at Mansion House</description><pubDate>Thu, 22 Oct 2026 21:00:00 +0100</pubDate></item><item><guid isPermaLink="false">{42D78C43-29CD-4AE3-A194-43FD6C114A62}</guid><link>https://www.bankofengland.co.uk/speech/2026/october/megan-greene-speech-at-lse-economics-society-london</link><title>Learning about earnings: Can we rely on labour market slack to mitigate the latest supply shock? − speech by Megan Greene</title><description>Given at London School of Economics</description><pubDate>Tue, 20 Oct 2026 18:00:00 +0100</pubDate></item><item><guid isPermaLink="false">{34B6B008-4B89-4167-840A-D31B0408149E}</guid><link>https://www.bankofengland.co.uk/speech/2026/october/financial-innovation-dollar-dominance-and-their-uk-monetary-policy-implications</link><title>Financial innovation, dollar dominance and their UK monetary policy implications</title><description>Presented at the Jackson Hole Economic Policy Symposium: Financial Innovation — Implications for Payments and Policy in Jackson, Wyoming. 28th August 2026</description><pubDate>Fri, 16 Oct 2026 21:00:00 +0100</pubDate></item></channel></rss>
|
||||
+15
@@ -0,0 +1,15 @@
|
||||
<html><body><h2 class="cookie-title exclude-navigation">Our use of cookies</h2><p>We use necessary cookies to make our site work. We’d also like to use some non-essential cookies (including third-party cookies) to help us improve the site. By clicking ‘Accept recommended settings’ on this banner, you accept our use of analytics cookies. For more information on how these cookies work please see our <a>Cookie policy</a>.</p><h1 itemprop="name">Bank Rate maintained at 3.75% - July 2026 Monetary Policy Summary and Minutes</h1><h2 class="exclude-navigation">
|
||||
<span class="display-lap-desk">Related links</span>
|
||||
<button class="accordion-button">
|
||||
Related links
|
||||
<span class="accordion-toggle"></span>
|
||||
</button>
|
||||
</h2><div class="published-date">
|
||||
Published on
|
||||
30 July 2026
|
||||
|
||||
|
||||
|
||||
</div><h2>Monetary Policy Summary, July 2026</h2><p>At its meeting ending on 29 July 2026, the Monetary Policy Committee (MPC) voted by a majority of 6–3 to maintain Bank Rate at 3.75%. Three members voted to increase Bank Rate by 0.25 percentage points, to 4%.</p><p>In response to events in the Middle East, crude and refined energy prices have remained volatile and higher than pre-conflict. The impact of the energy shock on the UK economy remains uncertain. Monetary policy cannot influence energy prices but is being set to ensure that the economic adjustment to them occurs in a way that achieves the 2% inflation target sustainably. The policy stance required to achieve this will depend on the scale and duration of the shock, and how it propagates through the economy including via financial conditions.</p><p>CPI inflation has fallen to 2.6% since the previous meeting, although it is expected to rise later this year as the effects of higher energy prices continue to pass through. The risk of material second-round effects in price and wage-setting, against which policy needs to lean, is greater the longer higher energy prices persist. There is little evidence so far to suggest such effects, and there have continued to be clear signs of underlying disinflation in recent data. Loose labour market conditions, and higher interest rates faced by households and businesses than prior to the conflict, will also act to reduce inflation over time. The Committee judges that the risks to the inflation outlook are tilted to the upside relative to the central projection in the July Monetary Policy Report, but there remains scope for the outlook to change materially as events in the Middle East unfold. </p><p>The Committee judges that it is appropriate to maintain Bank Rate at this meeting. The Committee stands ready to act as necessary to ensure that CPI inflation remains on track to meet the 2% target in the medium term.</p><h2>Minutes of the Monetary Policy Committee meeting ending on 29 July 2026</h2><p>1: Before turning to its immediate policy decision, the Monetary Policy Committee (MPC) discussed key economic developments and its judgements around them, as well as its views on monetary policy strategy. The latest data and analysis underpinning these topics were set out in the accompanying <a>July 2026 Monetary Policy Report</a>.</p><p>2: At this meeting, the Committee discussed developments in global energy prices, the uncertainty surrounding the prospects for them and the implications for near-term inflation. It also discussed the extent of disinflation and slack in the economy, the potential scale of second-round effects and broader global factors as possible drivers of future inflation. </p><p>3: The conflict in the Middle East, and its impact on energy prices and the UK economy, remained the dominant source of uncertainty for the inflation outlook. In the run-up to this meeting, oil and gas prices were materially higher than pre-conflict. The Brent crude front-month future and the UK front-month natural gas future were $84 per barrel and 136 pence per therm respectively as at close of business on 28<sup> </sup>July. In the June CPI outturn of 2.6%, motor fuel prices had contributed 0.6 percentage points to CPI inflation. Inflation was expected to rise further this year from the direct and indirect effects of higher energy prices. Volatility in energy prices would correspond to volatility in this near-term inflation outlook. Members continued to look through direct effects. But policy would need to guard particularly against second-round effects that created inflation persistence, while considering any trade-off with weaker economic activity. The risk of material second-round effects would depend on the scale and duration of the energy shock, which remained uncertain.</p><p>4: All members agreed that risks to the paths of energy prices remained skewed to the upside. Energy markets had been volatile, and there was concern that repeated re-escalations of the conflict could prolong this volatility. This could generate further upward pressure on energy prices, with uncertainty over how long this could linger. The release of strategic oil reserves and substitution between energy sources had been restraining more acute oil price increases, but could not mitigate the shock indefinitely. And gas and refined product prices, which were salient for households and businesses, had been less tempered by these mitigants owing to supply constraints. The Committee therefore remained attentive to the risk that consumer energy prices could stay elevated for longer, even if for most members the range of likely near-term global energy price paths had probably narrowed relative to the more extreme levels considered at the time of the April Monetary Policy Report.</p><p>5: In evaluating the impact of these developments on inflation, all members acknowledged that there had been sustained disinflation pre-conflict. Although above theLine truncated
|
||||
<a class="scroll-to-top">Back to top</a>
|
||||
</p></body></html>
|
||||
+77
@@ -0,0 +1,77 @@
|
||||
<html><body><div class="page-content" data-id="f63a0ea5089d4b1a9d8f2c10bb711c1e">
|
||||
<h2>2026 confirmed dates</h2>
|
||||
<table>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>Thursday 5 February</td>
|
||||
<td><a href="/monetary-policy-summary-and-minutes/2026/february-2026">February MPC Summary and minutes</a> and <a href="/monetary-policy-report/2026/february-2026">February Monetary Policy Report</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Thursday 19 March</td>
|
||||
<td><a href="/monetary-policy-summary-and-minutes/2026/march-2026">March MPC Summary and minutes</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Thursday 30 April</td>
|
||||
<td><a href="/monetary-policy-summary-and-minutes/2026/april-2026">April MPC Summary and minutes</a> and <a href="/monetary-policy-report/2026/april-2026">April Monetary Policy Report</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Thursday 18 June</td>
|
||||
<td><a href="/monetary-policy-summary-and-minutes/2026/june-2026">June MPC Summary and minutes</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Thursday 30 July</td>
|
||||
<td><a href="/monetary-policy-summary-and-minutes/2026/july-2026">July MPC Summary and minutes</a> and <a href="/monetary-policy-report/2026/july-2026">July Monetary Policy Report</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Thursday 17 September</td>
|
||||
<td><a href="/monetary-policy-summary-and-minutes/2026/september-2026">September MPC Summary and minutes</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Thursday 5 November</td>
|
||||
<td><a href="/monetary-policy-summary-and-minutes/2026/november-2026">November MPC Summary and minutes</a> and <a href="/monetary-policy-report/2026/november-2026">November Monetary Policy Report</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Thursday 17 December</td>
|
||||
<td><a href="/monetary-policy-summary-and-minutes/2026/december-2026">December MPC Summary and minutes</a></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div><div class="page-content" data-id="a3c1a1b2a7904eab8f2285efacdc6eb6">
|
||||
<h2>2027 confirmed dates</h2>
|
||||
<table>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>Thursday 4 February</td>
|
||||
<td><span style="background-color: #f6f6f6;"><a href="/monetary-policy-summary-and-minutes/2027/february-2027">February MPC Summary and minutes</a> and <a href="/monetary-policy-report/2027/february-2027">February Monetary Policy Report</a> </span> </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Thursday 18 March </td>
|
||||
<td><span style="background-color: #f6f6f6;"><a href="/monetary-policy-summary-and-minutes/2027/march-2027">March MPC Summary and minutes</a></span> </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Thursday 29 April</td>
|
||||
<td><span style="background-color: #f6f6f6;"><a href="/monetary-policy-summary-and-minutes/2027/april-2027">April MPC Summary and minutes</a> and <a href="/monetary-policy-report/2027/april-2027">April Monetary Policy Report</a> </span> </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Thursday 17 June </td>
|
||||
<td><span style="background-color: #f6f6f6;"><a href="/monetary-policy-summary-and-minutes/2027/june-2027">June MPC Summary and minutes</a></span> </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Thursday 29 July </td>
|
||||
<td><span style="background-color: #f6f6f6;"><a href="/monetary-policy-summary-and-minutes/2027/july-2027">July MPC Summary and minutes</a> and <a href="/monetary-policy-report/2027/july-2027">July Monetary Policy Report</a> </span> </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Thursday 16 September </td>
|
||||
<td><span style="background-color: #f6f6f6;"><a href="/monetary-policy-summary-and-minutes/2027/september-2027">September MPC Summary and minutes</a></span> </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Thursday 4 November </td>
|
||||
<td><span><a href="/monetary-policy-summary-and-minutes/2027/november-2027">November MPC Summary and minutes</a> and <a href="/monetary-policy-report/2027/november-2027">November Monetary Policy Report</a> </span> </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Thursday 16 December </td>
|
||||
<td><span style="background-color: #f6f6f6;"><a href="/monetary-policy-summary-and-minutes/2027/december-2027">December MPC Summary and minutes</a></span> </td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div></body></html>
|
||||
+31
@@ -0,0 +1,31 @@
|
||||
<html><head></head><body><h1 class="c-jumbotron__heading">
|
||||
<small class="c-jumbotron__category">
|
||||
Press</small>
|
||||
Inflation rate at +3.3% in September 2026</h1><p>Further increases in energy prices push inflation to the highest level this year</p><p class="c-actions__list">
|
||||
<span class="c-actions__item">
|
||||
<a class="c-actions__action c-actions__action--share">
|
||||
Share</a>
|
||||
</span>
|
||||
</p><h2 class="h-no-margin-top">
|
||||
Press release No. 364 of 13 October 2026</h2><p><strong>Consumer price index, September 2026:<br>
|
||||
</strong>+3.3% on the same month a year earlier (provisional result confirmed)<br>
|
||||
+0.6% on the previous month (provisional result confirmed)</p><p><strong>Harmonised index of consumer prices, September 2026:<br>
|
||||
</strong>+3.3% on the same month a year earlier (provisional result confirmed)<br>
|
||||
+0.6% on the previous month (provisional result confirmed)</p><p><span>WIESBADEN</span> − The inflation rate in Germany, measured as the year-on-year change in the consumer price index (CPI), stood at +3.3% in September 2026. The <a class="RichTextIntLink GenericTable">rise in consumer prices</a> therefore intensified once again, after having stood at +2.9% in August 2026 and +2.8% in July 2026. "The rate of inflation exceeded the three percent mark in September, and therefore reached a new record high this year. This was also the highest level recorded since December 2023," says <span>Ruth Brand</span>, President of the Federal Statistical Office (<span>Destatis</span>). "Once again, the development of energy prices was responsible for the increase in the inflation rate. The rise in prices was particularly evident in the price of mineral oil products at filling stations and in the price of heating oil", <span>Brand</span> adds. Compared with August 2026, total consumer prices rose by 0.6% in September 2026.</p><p></p><p class="chartImage chartImage--1480078 ">
|
||||
Loading...</p><p><strong>Energy product prices up 14.9% compared with September 2025</strong></p><p>The <a class="RichTextIntLink GenericTable">prices of energy products</a> (total) were 14.9% higher in September 2026 than in September 2025. Year on year, the rise in energy prices therefore accelerated in September 2026 for the third consecutive month (August 2026: +10.5%; July 2026: +8.3%; June 2026: +3.4%). This was the largest increase in energy prices since February 2023 (+19.1% on February 2022). The price increase which has been observed on the <a class="RichTextExtLink ExternalLink">crude oil market</a> (only in German) since the start of the Iran war was reflected in the energy price developments for <a class="RichTextIntLink PressRelease">producer prices</a> and consumer prices. For consumers, this meant that motor fuel prices were up substantially (+37.1%) in September 2026 compared with September 2025 (August 2026: +27.7%) and heating oil registered an even higher increase of 74.9% (August 2026: +49.6%). Firewood, wood pellets and other solid fuels were also more expensive (+15.6%) in September 2026 compared with the same month of the preceding year. By contrast, the prices of electricity (-5.5%), natural gas excluding operating costs (-2.8%) and district heating (-1.0%) continued to be less expensive in September 2026 compared with a year earlier. The downward price trends registered for electricity, natural gas and district heating are in part attributable to the <a class="RichTextIntLink Basepage">measures of the Federal Government</a> which have been implemented since the beginning of the year. The relief provided by the renewed reduction of energy tax, particularly on <a class="RichTextExtLink ExternalLink">motor fuels</a> (fuel discount), was not yet reflected in the results for September, as the measure did not come into effect until 1 October 2026.</p><p></p><p class="chartImage chartImage--1480076 ">
|
||||
Loading...</p><p><strong>Food prices registered below-average increase of +0.4% compared with previous year</strong></p><p>Food prices in September 2026 continued to register below-average growth (+0.4%) compared with the same month in the previous year, after an increase of 0.1% in August 2026. Nevertheless, some food items were considerably more expensive in September 2026 than in September 2025, including <a class="RichTextIntLink Law">eggs</a> (+15.2%), fresh vegetables (+12.0%) and fish, fish products and seafood (+4.5%). By contrast, lower prices were observed particularly for edible fats and oils (-15.0%, including <a class="RichTextIntLink Basepage">butter</a>: -29.5%), fresh fruit (-4.9%) and dairy products (-5.5%).</p><p><strong>Inflation rate excluding food and energy at +2.4%</strong></p><p>In September 2026, the <a class="RichTextIntLink GenericTable">inflation rate excluding energy</a> stood at +2.1% and the inflation rate excluding heating oil and motor fuels was +1.8%. As in August and July 2026, the inflation rate excluding food and energy, often referred to as core inflation, stood at +2.4% in September 2026 and therefore remained below the overall inflation rate.</p><p><strong>Goods prices up 3.8% on September 2025</strong></p><p>The prices of <a class="RichTextIntLink GenericTable">goods (total)</a> were 3.8% higher in September 2026 than a year earlier. Non-durable consumer goods cost 5.4% more, particularly due to the development of energy prices (+14.9%), while the prices of durable consumer goods rose by 1.0%. In addition to energy products, significant year-on-year price increases were also recorded for information processing equipment (+9.2%) and tobacco products (+5.6%), for example. By contrast, coffee, tea and cocoa (-3.3%) and household appliances <br>
|
||||
(-2.5%), for example, were less expensive.</p><p></p><p class="chartImage chartImage--1480074 ">
|
||||
Loading...</p><p><strong>Service prices up 2.7% year on year</strong></p><p>The prices of <a class="RichTextIntLink GenericTable">services (total)</a> increased by 2.7% in September 2026 on September 2025. The rise in service prices therefore slowed again slightly and was below the level of overall inflation. Year on year, particularly sharp price increases were registered for social protection services (+6.3%), the maintenance and repair of vehicles (+4.7%) and hairdresser services and other services for personal care (+4.3%). Package holidays (+3.8%) and water supply and miscellaneous services relating to the dwelling (+3.7%) were also substantially more expensive in September 2026 than a year earlier. <a class="RichTextIntLink GenericTable">Net rents exclusive of heating expenses</a> (+1.9% on the same month of the previous year) continued to be a significant factor contributing to the overall development of prices in September 2026. The prices of other services such as telecommunications services (+0.2%) only registered a slight increase compared with a year earlier.</p><p><strong>Prices (total) up 0.6% month on month, energy up 3.8%</strong></p><p>Compared with August 2026, the overall consumer price index rose by 0.6% in September 2026. Energy prices increased by 3.8% month on month, with consumers paying more, in particular, for heating oil (+18.5%) and motor fuels (+6.9%, including diesel fuel: +7.5%; supergrade petrol: +6.7%). Month-on-month price increases were also observed for clothing (+5.6%) mainly due to seasonal factors.</p><p>Food prices (total) were up month on month (+0.4%, including vegetables: +3.5%, but meat and meat products: -0.5%). International flights (-7.3%) and package international holidays (-4.2%), for example, were considerably less expensive than in the previous month.</p><p><strong>Methodological notes:</strong></p><p>The harmonised index of consumer prices (HICP) is calculated in addition to the national consumer price index (CPI) particularly to enable comparisons within the euro area. The HICP is the key measure for quantifying price stability within the framework of European monetary policy and is generally derived from the same data material on which the national CPI is based.</p><p>Apart from the individual purposes they serve, the CPI and the HICP differ in terms of coverage, methodology and weighting.</p><p>With effect from January 2026, substantial changes have been made to the HICP with regard to methodology and the classification used. Furthermore, the HICP result uses 2025 as the index base (2025=100) as of reference month January 2026. Up-to-date information on the changes concerning the HICP is provided in a <a class="RichTextIntLink Basepage">web article</a> on the "<a class="RichTextIntLink NavNode">Consumer price index</a>" page of the website of the Federal Statistical Office. <a class="RichTextIntLink Basepage">Explanatory notes</a> and a <a class="RichTextIntLink Publication FTpdf">methodological paper</a> are also available there.</p><table class="wide"><caption>Consumer price index for Germany September 2026</caption><thead><tr><th><p>Overall index / subindex</p>
|
||||
</th><th><p>Weighting</p>
|
||||
</th><th class="center"></th><th class="center">Change on<br>
|
||||
same<br>
|
||||
period of<br>
|
||||
previous year</th><th><br>
|
||||
Change on<br>
|
||||
the previous<br>
|
||||
month</th></tr><tr><th><p class="center">Index<br>
|
||||
2020=100</p>
|
||||
</th></tr><tr><th><p>in per mill</p>
|
||||
</th><th class="center">%</th></tr></thead><tfoot><tr><td><a></a><span class="footnotetarget">1:</span> Core inflation</td></tr></tfoot><tbody><tr><td class="Vorspalte">Overall index</td><td>1,000.00</td><td>126.6</td><td>3.3</td><td>0.6</td></tr><tr><td class="Vorspalte">Food and non-alcoholic-beverages</td><td>119.04</td><td>137.2</td><td>0.3</td><td>0.4</td></tr><tr><td class="Vorspalte-ind1">Food</td><td>104.69</td><td>136.6</td><td>0.4</td><td>0.4</td></tr><tr><td class="Vorspalte-ind1">Non-alcoholic beverages</td><td>14.35</td><td>141.1</td><td>-0.5</td><td>-0.1</td></tr><tr><td class="Vorspalte">Alcoholic beverages and tobacco</td><td>35.26</td><td>132.2</td><td>3.8</td><td>0.2</td></tr><tr><td class="Vorspalte">Clothing and footwear</td><td>42.25</td><td>112.3</td><td>0.5</td><td>4.8</td></tr><tr><td class="Vorspalte">Housing, water, electricity, gas and other fuels</td><td>259.25</td><td>120.0</td><td>1.9</td><td>0.3</td></tr><tr><td class="Vorspalte-ind1">Actual net rent exclusive of heating expenses</td><td>68.30</td><td>113.0</td><td>2.3</td><td>0.2</td></tr><tr><td class="Vorspalte-ind1">Imputed net rent exclusive of heating expenses</td><td>104.13</td><td>111.3</td><td>1.8</td><td>0.1</td></tr><tr><td class="Vorspalte-ind1">Household energy</td><td>43.44</td><td>147.4</td><td>0.5</td><td>1.2</td></tr><tr><td class="Vorspalte-ind2">Electricity</td><td>24.50</td><td>117.8</td><td>-5.5</td><td>0.0</td></tr><tr><td class="Vorspalte">Furniture, lighting equipment, appliances and other household equipment</td><td>67.78</td><td>118.0</td><td>-0.1</td><td>-0.3</td></tr><tr><td class="Vorspalte">Health</td><td>55.49</td><td>116.8</td><td>5.1</td><td>0.1</td></tr><tr><td class="Vorspalte">Transport</td><td>138.22</td><td>140.4</td><td>10.8</td><td>1.7</td></tr><tr><td class="Vorspalte-ind1">Motor fuels</td><td>30.46</td><td>185.6</td><td>37.1</td><td>6.9</td></tr><tr><td class="Vorspalte">Communication</td><td>23.35</td><td>99.7</td><td>1.2</td><td>0.5</td></tr><tr><td class="Vorspalte">Recreation and culture</td><td>104.23</td><td>122.0</td><td>1.9</td><td>-0.3</td></tr><tr><td class="Vorspalte-ind2">Package holidays</td><td>13.22</td><td>154.0</td><td>3.8</td><td>-3.4</td></tr><tr><td class="Vorspalte">Education</td><td>9.06</td><td>126.2</td><td>3.7</td><td>0.8</td></tr><tr><td class="Vorspalte">Restaurant and accommodation services</td><td>47.20</td><td>137.3</td><td>3.1</td><td>0.5</td></tr><tr><td class="Vorspalte">Miscellaneous goods and services</td><td>98.87</td><td>133.0</td><td>3.7</td><td>0.1</td></tr><tr><td class="Vorspalte-ind1">Social protection services</td><td>27.75</td><td>144.7</td><td>6.3</td><td>0.4</td></tr><tr><td class="Vorspalte">Overall index, excluding food and energy <a class="RichTextIntLink PressRelease"><sup>1</sup></a></td><td>821.41</td><td>122.0</td><td>2.4</td><td>0.2</td></tr></tbody></table><p><strong>More information:</strong></p><p>Detailed results can be found in the tables on the consumer price index (<a class="RichTextExtLink ExternalLink">61111-0004</a>) and (<a class="RichTextExtLink ExternalLink">61111-0006</a>) and on the harmonised index of consumer prices (<a class="RichTextExtLink ExternalLink">61121-0002</a>) and (<a class="RichTextExtLink ExternalLink">61121-0006</a>) in the GENESIS-Online database. Special items shown in Tables <a class="RichTextExtLink ExternalLink">61111-0006</a> and <a class="RichTextExtLink ExternalLink">61121-0006</a> contain CPI and HICP results which are used to measure "core inflation".</p><p>Eurostat, the Statistical Office of the European Union, has released provisional results on <a class="RichTextExtLink ExternalLink">Euro area inflation for September 2026</a> (available on Eurostat’s website under News > Euro indicators).</p><p>CPI results can also be found on the "Economic Dashboard" (<a class="RichTextExtLink ExternalLink">www.dashboard-konjunktur.de</a>) (only in German). In this data portal, the Federal Statistical Office brings together up-to-date indicators from official statistics producers and other data providers on the topics of the economy, finance, the labour market, construction and energy.</p><p>Data on the war in the Middle East and its consequences are provided on a special page (<a class="RichTextIntLink Basepage">www.destatis.de/nahost</a>) (only in German) on the website of the Federal Statistical Office. This page includes information on energy supply and the development of energy prices, air and maritime transport, and foreign trade with the region.</p><p>Consumers can use the <a class="RichTextIntLink Basepage">Personal Inflation Calculator</a> of the Federal Statistical Office to adapt their monthly consumption expenditure on individual product groups according to their own consumption patterns and calculate their personal inflation rate. In addition, the <a class="RichTextIntLink Basepage">Price Kaleidoscope</a> gives an overview of the price trend and the weights of various products.</p><p>PLine truncated
|
||||
<a class="c-more">
|
||||
Contact Form</a></p><h2 class="h2 l-content-wrapper__headline">More on this topic</h2></body></html>
|
||||
+26
@@ -0,0 +1,26 @@
|
||||
<html><head></head><body><h1 class="c-jumbotron__heading">
|
||||
<small class="c-jumbotron__category">
|
||||
Press</small>
|
||||
Gross domestic product in the 2<sup>nd</sup> quarter of 2026 up 0.2% on the previous quarter</h1><p>Results revised as of 2011, in particular for 2024</p><p class="c-actions__list">
|
||||
<span class="c-actions__item">
|
||||
<a class="c-actions__action c-actions__action--share">
|
||||
Share</a>
|
||||
</span>
|
||||
</p><h2 class="h-no-margin-top">
|
||||
Press release No. 269 of 30 July 2026</h2><p><strong>Gross domestic product (GDP), 2<sup>nd</sup> quarter of 2026</strong><br>
|
||||
+0.2% on the previous quarter (price, seasonally and calendar adjusted)<br>
|
||||
+0.9% on the same quarter a year earlier (price adjusted)<br>
|
||||
+0.9% on the same quarter a year earlier (price and calendar adjusted)</p><p><span>WIESBADEN</span> – The gross domestic product (GDP) grew by 0.2% in the second quarter of 2026 compared with the first quarter of 2026 - following adjustment for price, seasonal and calendar variations - after already increasing at the start of 2026 (by a revised +0.4% in the first quarter of 2026 compared with the previous quarter; previously: +0.3%). The Federal Statistical Office (<span>Destatis</span>) also reports that exports were up compared with the previous quarter, after adjustment for price, seasonal and calendar variations. According to the provisional figures, final consumption expenditure showed a subdued trend, while capital formation declined.</p><p class="chartImage chartImage--1470072 ">
|
||||
Loading...</p><p><strong>Gross domestic product up year on year</strong></p><p>GDP in the second quarter of 2026 increased by a price adjusted 0.9% compared with the second quarter of 2025. After price and calendar adjustment, the increase also amounted to 0.9%, as the number of working days in the seconnd quarter 2026 was the same as in the same quarter a year earlier.</p><p><strong>Revision of previous results back to the year 2011</strong></p><p>As is usual at this time of the year, the Federal Statistical Office also reviewed the results published for the previous four years (2022 to 2025) and included new statistical information in the calculation of the results. The change rate of price adjusted GDP for the years 2022 and 2023 changed only slightly as a result of this year's summer revision (0.1 percentage points higher and 0.1 percentage points lower, respectively). The revision for 2024, however, was much more pronounced. While a drop in economic performance of 0.5% had previously been reported, current results indicate that economic performance stagnated in 2024 (0.0%). This revision was due in particular to new information from structural business statistics. This information only becomes available 18 months after the end of the reporting year and provides detailed data on turnover, investments and, above all, the cost structure of businesses for the first time. The GDP change rate for the year 2025 remained unchanged at +0.2%. Data on the recalculations are shown in the table comparing new and old figures at the end of this press release. The Federal Statistical Office will provide further information on these revisions with the publication of detailed results on the gross domestic product in the second quarter of 2026, which is scheduled for 25 August 2026.</p><p>Departing from the usual procedure, the results for the years 2011 to 2021 were also revised. The reason for this revision was that key data sources, and findings derived from them, were incorporated into the calculations and the results were recalculated back to the 2011 reporting year. This concerns the average rents for rented dwellings, as calculated from the results of the 2022 Census of Buildings and Housing. Furthermore, direct purchases of domestic households abroad are now captured more comprehensively thanks to new data which have become available. As a result, the annual change rates of price adjusted GDP for the years 2011 to 2021 are up to 0.1 percentage points higher than previously indicated (see the table comparing new and old figures at the end of this press release). Overall, GDP growth in the period from 2011 to 2021 was therefore 0.8 percentage points higher. The Federal Statistical Office will also provide more detailed information on these revisions in its press release on 25 August 2026.</p><table class="wide"><caption>Gross domestic product</caption><thead><tr><th> </th><th class="left">Unadjusted figures</th><th class="left">Figures according to X13<br>
|
||||
price adjusted</th></tr><tr><th class="left">At current prices</th><th class="left">Price adjusted,<br>
|
||||
chain-linked</th><th class="left">Seasonally and<br>
|
||||
calendar adjusted</th><th class="left">Calendar<br>
|
||||
adjusted</th></tr><tr><th class="left"><abbr>EUR</abbr> billion</th><th class="left">% <sup><a class="RichTextIntLink PressRelease"><sup>1a</sup></a></sup></th><th class="left">2020 = 100</th><th class="left">% <sup><a class="RichTextIntLink PressRelease"><sup>1a</sup></a></sup></th><th class="left">2020 = 100</th><th class="left">% <sup><a class="RichTextIntLink PressRelease"><sup>2a</sup></a></sup></th><th class="left">% <sup><a class="RichTextIntLink PressRelease"><sup>1a</sup></a> <a class="RichTextIntLink PressRelease"><sup>3a</sup></a></sup></th></tr></thead><tfoot><tr><td><sup><a></a><span class="footnotetarget">1a:</span></sup> Change on the previous year or on the same quarter of the previous year in %.<br>
|
||||
<sup><a></a><span class="footnotetarget">2a:</span></sup> Change on the previous year or on the previous quarter in %.<br>
|
||||
<sup><a></a><span class="footnotetarget">3a:</span></sup> For full years, the calendar adjusted values are equal to the seasonally and calendar adjusted values (except for rounding discrepancies).<br>
|
||||
qtr = quarter</td></tr></tfoot><tbody><tr><td class="Vorspalte">2011</td><td>2,747.21</td><td>5.0</td><td>92.08</td><td>3.8</td><td>91.94</td><td>3.8</td><td>3.8</td></tr><tr><td class="Vorspalte">2012</td><td>2,800.68</td><td>1.9</td><td>92.54</td><td>0.5</td><td>92.59</td><td>0.7</td><td>0.7</td></tr><tr><td class="Vorspalte">2013</td><td>2,869.48</td><td>2.5</td><td>92.97</td><td>0.5</td><td>93.12</td><td>0.6</td><td>0.6</td></tr><tr><td class="Vorspalte">2014</td><td>2,988.47</td><td>4.1</td><td>95.05</td><td>2.2</td><td>95.20</td><td>2.2</td><td>2.2</td></tr><tr><td class="Vorspalte">2015</td><td>3,094.19</td><td>3.5</td><td>96.74</td><td>1.8</td><td>96.65</td><td>1.5</td><td>1.5</td></tr><tr><td class="Vorspalte">2016</td><td>3,204.87</td><td>3.6</td><td>98.95</td><td>2.3</td><td>98.78</td><td>2.2</td><td>2.2</td></tr><tr><td class="Vorspalte">2017</td><td>3,345.86</td><td>4.4</td><td>101.82</td><td>2.9</td><td>101.93</td><td>3.2</td><td>3.2</td></tr><tr><td class="Vorspalte">2018</td><td>3,450.58</td><td>3.1</td><td>103.08</td><td>1.2</td><td>103.23</td><td>1.3</td><td>1.3</td></tr><tr><td class="Vorspalte">2019</td><td>3,557.63</td><td>3.1</td><td>104.20</td><td>1.1</td><td>104.38</td><td>1.1</td><td>1.1</td></tr><tr><td class="Vorspalte">2020</td><td>3,477.67</td><td>-2.2</td><td>100.00</td><td>-4.0</td><td>99.79</td><td>-4.4</td><td>-4.4</td></tr><tr><td class="Vorspalte">2021</td><td>3,713.09</td><td>6.8</td><td>103.96</td><td>4.0</td><td>103.69</td><td>3.9</td><td>3.9</td></tr><tr><td class="Vorspalte">2022</td><td>4,010.63</td><td>8.0</td><td>105.90</td><td>1.9</td><td>105.71</td><td>1.9</td><td>1.9</td></tr><tr><td class="Vorspalte">2023</td><td>4,254.93</td><td>6.1</td><td>104.83</td><td>-1.0</td><td>104.85</td><td>-0.8</td><td>-0.8</td></tr><tr><td class="Vorspalte">2024</td><td>4,386.94</td><td>3.1</td><td>104.83</td><td>0.0</td><td>104.89</td><td>0.0</td><td>0.0</td></tr><tr><td class="Vorspalte">2025</td><td>4,529.71</td><td>3.3</td><td>105.07</td><td>0.2</td><td>105.25</td><td>0.3</td><td>0.3</td></tr><tr><td class="Vorspalte">2022</td><td class="Vorspalte">1<sup>st</sup> <abbr>qtr</abbr></td><td>979.74</td><td>9.4</td><td>106.04</td><td>4.1</td><td>105.53</td><td>0.8</td><td>3.8</td></tr><tr><td class="Vorspalte">2<sup>nd</sup> <abbr>qtr</abbr></td><td>979.68</td><td>8.6</td><td>104.08</td><td>1.6</td><td>105.66</td><td>0.1</td><td>1.5</td></tr><tr><td class="Vorspalte">3<sup>rd</sup> <abbr>qtr</abbr></td><td>1,010.10</td><td>7.3</td><td>106.36</td><td>1.7</td><td>106.00</td><td>0.3</td><td>1.8</td></tr><tr><td class="Vorspalte">4<sup>th</sup> <abbr>qtr</abbr></td><td>1,041.11</td><td>6.9</td><td>107.13</td><td>0.3</td><td>105.65</td><td>-0.3</td><td>0.8</td></tr><tr><td class="Vorspalte">2023</td><td class="Vorspalte">1<sup>st</sup> <abbr>qtr</abbr></td><td>1,052.72</td><td>7.4</td><td>105.84</td><td>-0.2</td><td>104.93</td><td>-0.7</td><td>-0.5</td></tr><tr><td class="Vorspalte">2<sup>nd</sup> <abbr>qtr</abbr></td><td>1,037.88</td><td>5.9</td><td>102.72</td><td>-1.3</td><td>104.82</td><td>-0.1</td><td>-0.8</td></tr><tr><td class="Vorspalte">3<sup>rd</sup> <abbr>qtr</abbr></td><td>1,066.02</td><td>5.5</td><td>104.89</td><td>-1.4</td><td>104.98</td><td>0.2</td><td>-0.9</td></tr><tr><td class="Vorspalte">4<sup>th</sup> <abbr>qtr</abbr></td><td>1,098.31</td><td>5.5</td><td>105.85</td><td>-1.2</td><td>104.66</td><td>-0.3</td><td>-1.0</td></tr><tr><td class="Vorspalte">2024</td><td class="Vorspalte">1<sup>st</sup> <abbr>qtr</abbr></td><td>1,085.49</td><td>3.1</td><td>105.09</td><td>-0.7</td><td>104.88</td><td>0.2</td><td>0.0</td></tr><tr><td class="Vorspalte">2<sup>nd</sup> <abbr>qtr</abbr></td><td>1,076.24</td><td>3.7</td><td>103.03</td><td>0.3</td><td>104.74</td><td>-0.1</td><td>-0.1</td></tr><tr><td class="Vorspalte">3<sup>rd</sup> <abbr>qtr</abbr></td><td>1,099.19</td><td>3.1</td><td>105.23</td><td>0.3</td><td>104.85</td><td>0.1</td><td>-0.1</td></tr><tr><td class="Vorspalte">4<sup>th</sup> <abbr>qtr</abbr></td><td>1,126.02</td><td>2.5</td><td>105.98</td><td>0.1</td><td>105.08</td><td>0.2</td><td>0.3</td></tr><tr><td class="Vorspalte">2025</td><td class="Vorspalte">1<sup>st</sup> <abbr>qtr</abbr></td><td>1,116.18</td><td>2.8</td><td>105.19</td><td>0.1</td><td>105.21</td><td>0.1</td><td>0.4</td></tr><tr><td class="Vorspalte">2<sup>nd</sup> <abbr>qtr</abbr></td><td>1,108.89</td><td>3.0</td><td>103.06</td><td>0.0</td><td>105.19</td><td>0.0</td><td>0.4</td></tr><tr><td class="Vorspalte">3<sup>rd</sup> <abbr>qtr</abbr></td><td>1,136.71</td><td>3.4</td><td>105.56</td><td>0.3</td><td>105.16</td><td>0.0</td><td>0.3</td></tr><tr><td class="Vorspalte">4<sup>th</sup> <abbr>qtr</abbr></td><td>1,167.93</td><td>3.7</td><td>106.48</td><td>0.5</td><td>105.44</td><td>0.3</td><td>0.3</td></tr><tr><td class="Vorspalte">2026</td><td class="Vorspalte">1<sup>st</sup> <abbr>qtr</abbr></td><td>1,155.37</td><td>3.5</td><td>106.03</td><td>0.8</td><td>105.89</td><td>0.4</td><td>0.7</td></tr><tr><td class="VorspaLine truncated
|
||||
<sup><a></a><span class="footnotetarget">2b:</span></sup> Change on the previous year or on the same quarter of the previous year in %.<br>
|
||||
<sup><a></a><span class="footnotetarget">3b:</span></sup> Change on the previous year or on the previous quarter in %.<br>
|
||||
qtr = quarter</td></tr></tfoot><tbody><tr><td class="Vorspalte">2011</td><td>3.8</td><td>3.8</td><td>0.0</td><td>3.8</td><td>3.8</td><td>0.0</td></tr><tr><td class="Vorspalte">2012</td><td>0.5</td><td>0.5</td><td>0.0</td><td>0.7</td><td>0.6</td><td>0.1</td></tr><tr><td class="Vorspalte">2013</td><td>0.5</td><td>0.4</td><td>0.1</td><td>0.6</td><td>0.5</td><td>0.1</td></tr><tr><td class="Vorspalte">2014</td><td>2.2</td><td>2.2</td><td>0.0</td><td>2.2</td><td>2.2</td><td>0.0</td></tr><tr><td class="Vorspalte">2015</td><td>1.8</td><td>1.7</td><td>0.1</td><td>1.5</td><td>1.4</td><td>0.1</td></tr><tr><td class="Vorspalte">2016</td><td>2.3</td><td>2.2</td><td>0.1</td><td>2.2</td><td>2.1</td><td>0.1</td></tr><tr><td class="Vorspalte">2017</td><td>2.9</td><td>2.8</td><td>0.1</td><td>3.2</td><td>3.1</td><td>0.1</td></tr><tr><td class="Vorspalte">2018</td><td>1.2</td><td>1.1</td><td>0.1</td><td>1.3</td><td>1.1</td><td>0.2</td></tr><tr><td class="Vorspalte">2019</td><td>1.1</td><td>1.0</td><td>0.1</td><td>1.1</td><td>1.0</td><td>0.1</td></tr><tr><td class="Vorspalte">2020</td><td>-4.0</td><td>-4.1</td><td>0.1</td><td>-4.4</td><td>-4.5</td><td>0.1</td></tr><tr><td class="Vorspalte">2021</td><td>4.0</td><td>3.9</td><td>0.1</td><td>3.9</td><td>3.9</td><td>0.0</td></tr><tr><td class="Vorspalte">2022</td><td>1.9</td><td>1.8</td><td>0.1</td><td>1.9</td><td>1.9</td><td>0.0</td></tr><tr><td class="Vorspalte">2023</td><td>-1.0</td><td>-0.9</td><td>-0.1</td><td>-0.8</td><td>-0.7</td><td>-0.1</td></tr><tr><td class="Vorspalte">2024</td><td>0.0</td><td>-0.5</td><td>0.5</td><td>0.0</td><td>-0.5</td><td>0.5</td></tr><tr><td class="Vorspalte">2025</td><td>0.2</td><td>0.2</td><td>0.0</td><td>0.3</td><td>0.3</td><td>0.0</td></tr><tr><td class="Vorspalte">2022</td><td class="Vorspalte">1<sup>st</sup> <abbr>qtr</abbr></td><td>4.1</td><td>4.0</td><td>0.1</td><td>0.8</td><td>0.7</td><td>0.1</td></tr><tr><td class="Vorspalte">2<sup>nd</sup> <abbr>qtr</abbr></td><td>1.6</td><td>1.5</td><td>0.1</td><td>0.1</td><td>0.2</td><td>-0.1</td></tr><tr><td class="Vorspalte">3<sup>rd</sup> <abbr>qtr</abbr></td><td>1.7</td><td>1.6</td><td>0.1</td><td>0.3</td><td>0.3</td><td>0.0</td></tr><tr><td class="Vorspalte">4<sup>th</sup> <abbr>qtr</abbr></td><td>0.3</td><td>0.2</td><td>0.1</td><td>-0.3</td><td>-0.3</td><td>0.0</td></tr><tr><td class="Vorspalte">2023</td><td class="Vorspalte">1<sup>st</sup> <abbr>qtr</abbr></td><td>-0.2</td><td>0.0</td><td>-0.2</td><td>-0.7</td><td>-0.5</td><td>-0.2</td></tr><tr><td class="Vorspalte">2<sup>nd</sup> <abbr>qtr</abbr></td><td>-1.3</td><td>-1.1</td><td>-0.2</td><td>-0.1</td><td>-0.1</td><td>0.0</td></tr><tr><td class="Vorspalte">3<sup>rd</sup> <abbr>qtr</abbr></td><td>-1.4</td><td>-1.3</td><td>-0.1</td><td>0.2</td><td>0.0</td><td>0.2</td></tr><tr><td class="Vorspalte">4<sup>th</sup> <abbr>qtr</abbr></td><td>-1.2</td><td>-1.0</td><td>-0.2</td><td>-0.3</td><td>-0.3</td><td>0.0</td></tr><tr><td class="Vorspalte">2024</td><td class="Vorspalte">1<sup>st</sup> <abbr>qtr</abbr></td><td>-0.7</td><td>-1.1</td><td>0.4</td><td>0.2</td><td>-0.1</td><td>0.3</td></tr><tr><td class="Vorspalte">2<sup>nd</sup> <abbr>qtr</abbr></td><td>0.3</td><td>-0.3</td><td>0.6</td><td>-0.1</td><td>-0.3</td><td>0.2</td></tr><tr><td class="Vorspalte">3<sup>rd</sup> <abbr>qtr</abbr></td><td>0.3</td><td>-0.2</td><td>0.5</td><td>0.1</td><td>0.0</td><td>0.1</td></tr><tr><td class="Vorspalte">4<sup>th</sup> <abbr>qtr</abbr></td><td>0.1</td><td>-0.4</td><td>0.5</td><td>0.2</td><td>0.2</td><td>0.0</td></tr><tr><td class="Vorspalte">2025</td><td class="Vorspalte">1<sup>st</sup> <abbr>qtr</abbr></td><td>0.1</td><td>0.1</td><td>0.0</td><td>0.1</td><td>0.4</td><td>-0.3</td></tr><tr><td class="Vorspalte">2<sup>nd</sup> <abbr>qtr</abbr></td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>-0.2</td><td>0.2</td></tr><tr><td class="Vorspalte">3<sup>rd</sup> <abbr>qtr</abbr></td><td>0.3</td><td>0.3</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td></tr><tr><td class="Vorspalte">4<sup>th</sup> <abbr>qtr</abbr></td><td>0.5</td><td>0.5</td><td>0.0</td><td>0.3</td><td>0.2</td><td>0.1</td></tr><tr><td class="Vorspalte">2026</td><td class="Vorspalte">1<sup>st</sup> <abbr>qtr</abbr></td><td>0.8</td><td>0.5</td><td>0.3</td><td>0.4</td><td>0.3</td><td>0.1</td></tr><tr><td class="Vorspalte">2<sup>nd</sup> <abbr>qtr</abbr></td><td>0.9</td><td><abbr>x</abbr></td><td><abbr>x</abbr></td><td>0.2</td><td><abbr>x</abbr></td><td><abbr>x</abbr></td></tr></tbody></table><p><strong>Methodological notes:</strong></p><p>The differing comparative periods must be taken into account in all press releases on short-term indicators. Short-term economic monitoring focuses on comparisons of seasonally and calendar adjusted figures with those of the previous month or quarter. These reflect short-term economic trends. Year-on-year comparisons enable long-term comparisons of levels and are largely independent of seasonal fluctuations.</p><p><strong>More information:</strong></p><p>A long time seLine truncated
|
||||
<a class="c-more">
|
||||
Contact Form</a></p><h2 class="h2 l-content-wrapper__headline">More on this topic</h2></body></html>
|
||||
+16
@@ -0,0 +1,16 @@
|
||||
<html><head></head><body><h1 class="c-jumbotron__heading">
|
||||
<small class="c-jumbotron__category">
|
||||
Press</small>
|
||||
Employment in August 2026 down on the previous month after seasonal adjustment</h1><p>Number of persons in employment 0.5% lower than in the same month a year earlier</p><p class="c-actions__list">
|
||||
<span class="c-actions__item">
|
||||
<a class="c-actions__action c-actions__action--share">
|
||||
Share</a>
|
||||
</span>
|
||||
</p><h2 class="h-no-margin-top">
|
||||
Press release No. 347 of 30 September 2026</h2><p><strong>Persons in employment resident in Germany, August 2026</strong><br>
|
||||
-0.1% on the previous month (seasonally adjusted)<br>
|
||||
-0.2% on the previous month (not seasonally adjusted)<br>
|
||||
-0.5% on the same month a year earlier</p><p><span>WIESBADEN</span> – Roughly 45.41 million persons resident in Germany (national concept) were in employment in August 2026, according to results of the employment accounts. According to provisional calculations of the Federal Statistical Office (<span>Destatis</span>), the seasonally adjusted number of persons in employment therefore fell by 29,000 (-0.1%) compared with the previous month. In the period from January to July 2026, employment decreased by an average of 20,000 people month on month.</p><p class="chartImage chartImage--1478996 ">
|
||||
Loading...</p><p>Without seasonal adjustment, the number of persons in employment in August 2026 was down by 69,000 (-0.2%) compared with July 2026. In the August average for the years 2023 to 2025, employment decreased by 38,000 people (-0.1%) compared with the previous month.</p><p><strong>Year-on-year decline in employment continues</strong></p><p>Compared with August 2025, the number of persons in employment in August 2026 was down by 235,000 (-0.5%). The downward trend in the year-on-year labour market figures, which has been observed since January 2025, therefore continued. Compared with the same month a year earlier, the rate of change was ‑0.4% in the months from January to April 2026, and stood at -0.5% in May, June and July 2026.</p><p><strong>Adjusted unemployment rate at 4.0% in August 2026</strong></p><p>According to results of the labour force survey, 1.86 million people were unemployed in August 2026. This was an increase of 120,000, or 6.9%, compared with August 2025. At 4.3%, the unemployment rate was higher than a year earlier (August 2025: 3.9%).</p><p>Adjusted for seasonal and irregular effects, the number of unemployed stood at 1.76 million in August 2026, an increase of 9,000, or 0.5%, compared with July 2026. The adjusted unemployment rate remained unchanged from the previous month at 4.0%. Previously, the rate had last been at this level in June 2016.</p><p><strong>Methodological notes:</strong><strong> </strong> </p><p>The differing comparative periods must be taken into account in all press releases on short-term indicators: Short-term economic monitoring focuses on seasonally adjusted comparisons with the previous month or quarter. These reflect short-term economic trends. Year-on-year comparisons, by contrast, enable long-term comparisons of levels and are largely unaffected by seasonal fluctuations.</p><p>Seasonally adjusted figures facilitate comparisons across consecutive months, without regular seasonal effects, such as typical seasonal weather conditions, distorting the overall picture. By contrast, results that have not been seasonally adjusted present the actual development in the reference month.</p><p>Monthly employment results are based on the national concept, which counts persons in employment who are resident in Germany, regardless of whether they work in Germany or abroad.</p><p>The figures on employment and unemployment presented in this press release come from different statistical sources. The employment figures are derived from the results of the employment accounts, while the figures on unemployment are based on the labour force survey, which is incorporated into the microcensus. Any differences can primarily be attributed to the methods and procedures applied in the statistics and, to some extent, to differing definitions and delimitations. Background information on this is available in the <a class="RichTextIntLink Basepage">explanatory notes (only in German)</a> on the relevant statistics.</p><p>Persons in employment and unemployed persons are counted according to the employment status concept of the International Labour Organization (ILO). According to this concept, persons in employment are all persons who worked for pay or in a self-employed capacity for at least one hour in the reference period. Unemployed persons are defined as those who are not in employment, are actively seeking employment and are currently available for work. Therefore, the unemployment figures shown here differ from registered unemployment as determined and published by the Federal Employment Agency in accordance with the German Social Code. In the European Statistical System, the results of the labour force surveys are used as a standard basis for calculating unemployment rates.</p><p><strong>More information:</strong></p><p>A <a class="RichTextIntLink GenericTable">table containing monthly results on the number of persons in employment</a> (unadjusted values and seasonally adjusted values) from the employment accounts is shown on the "<a class="RichTextIntLink NavNode">Employment</a>" page of the Federal Statistical Office’s website. Tables with <a class="RichTextIntLink ItemGallery">unemployment results</a> (only in German) from the labour force survey including the unemployment rate are also available on this page. Detailed data and long time series are provided in the GENESIS-Online database. Data on persons in employment from the employment accounts are available in tables <a class="RichTextExtLink ExternalLink">13321-0001</a> (months), <a class="RichTextExtLink ExternalLink">13321-0002</a> (quarters) and <a class="RichTextExtLink ExternalLink">81000-0011</a> (years). Monthly data on persons in employment and unemployed persons from the labour force survey can be found in tables <a class="RichTextExtLink ExternalLink">13231-0001</a> (overview), <a class="RichTextExtLink ExternalLink">13231-0002</a> (unemployed persons, persons in employment and economicalLine truncated
|
||||
<a class="c-more">
|
||||
Contact Form</a></p><h2 class="h2 l-content-wrapper__headline">More on this topic</h2></body></html>
|
||||
+50
@@ -0,0 +1,50 @@
|
||||
<rss version="2.0">
|
||||
<channel>
|
||||
<title>Statistisches Bundesamt</title>
|
||||
<link>https://www.destatis.de</link>
|
||||
<description>RSS-Newsfeed des Statistischen Bundesamtes</description>
|
||||
<language>de-de</language>
|
||||
<copyright>Statistisches Bundesamt, Wiesbaden 2019</copyright>
|
||||
<image>
|
||||
<url>https://www.destatis.de/SiteGlobals/Frontend/Images/logo.png?__blob=normal</url>
|
||||
<link>https://www.destatis.de</link>
|
||||
<title>Statistisches Bundesamt</title>
|
||||
</image>
|
||||
<webMaster>[email protected] (Web-Administrator)</webMaster>
|
||||
<category>Newspapers</category>
|
||||
<generator>Government Site Builder</generator>
|
||||
<ttl>60</ttl>
|
||||
<item>
|
||||
<title>Auftragseingang im Bauhauptgewerbe im August 2026: +23,0 % zum Vormonat
|
||||
</title>
|
||||
<link>https://www.destatis.de/DE/Presse/Pressemitteilungen/2026/10/PD26_375_441.html</link>
|
||||
<pubDate>Fri, 23 Oct 2026 08:00:00 +0200</pubDate>
|
||||
<description>Der reale (preisbereinigte) Auftragseingang im Bauhauptgewerbe ist im August 2026 gegenüber Juli 2026 kalender- und saisonbereinigt um 23,0 % gestiegen. Bedingt durch mehrere Großaufträge war dies der höchste saisonbereinigte Anstieg zum Vormonat im Bauhauptgewerbe seit Beginn der Zeitreihe im Jahr 1991. Wie das Statistische Bundesamt (Destatis) weiter mitteilt, nahm der Auftragseingang im Hochbau um 12,4 % und im Tiefbau um 31,6 % zu. Im weniger volatilen Dreimonatsvergleich war der kalender- und saisonbereinigte Auftragseingang von Juni 2026 bis August 2026 um 7,6 % höher als in den drei Monaten zuvor (Hochbau: +0,6 %; Tiefbau: +13,8 %)
|
||||
</description>
|
||||
</item>
|
||||
<item>
|
||||
<title>Deutschland importierte im 1. Halbjahr 2026 gut 96 % weniger Waren aus Russland als im 1. Halbjahr 2021
|
||||
</title>
|
||||
<link>https://www.destatis.de/DE/Presse/Pressemitteilungen/2026/10/PD26_N072_51_46.html</link>
|
||||
<pubDate>Wed, 21 Oct 2026 08:00:00 +0200</pubDate>
|
||||
<description>Der deutsch-russische Austausch hat seit dem Beginn des Angriffs Russlands auf die Ukraine im Februar 2022 in vielerlei Hinsicht deutlich abgenommen. Im 1. Halbjahr 2026 hat Deutschland 96,4 % weniger Waren aus der Russischen Föderation importiert als im 1. Halbjahr 2021, dem Vergleichszeitraum vor Kriegsausbruch. Im 1. Halbjahr 2026 wurden Waren im Wert von gut 0,5 Milliarden Euro aus Russland importiert, wie das Statistische Bundesamt (Destatis) mitteilt. Im 1. Halbjahr 2021 beliefen sich die Importe von dort noch auf 15,0 Milliarden Euro. Auch die Exporte nach Russland sind deutlich gesunken: Mit -73,1 % fiel der Rückgang im selben Zeitraum jedoch weniger stark aus als bei den Importen. Deutschland exportierte im zurückliegenden Halbjahr Waren im Wert von 3,4 Milliarden Euro nach Russland. Im 1. Halbjahr 2021 waren es noch gut 12,7 Milliarden Euro.
|
||||
</description>
|
||||
</item>
|
||||
<item>
|
||||
<title>Erzeugerpreise im September 2026: +6,7 % gegenüber September 2025
|
||||
</title>
|
||||
<link>https://www.destatis.de/DE/Presse/Pressemitteilungen/2026/10/PD26_373_61241.html</link>
|
||||
<pubDate>Tue, 20 Oct 2026 08:00:00 +0200</pubDate>
|
||||
<description>Die Erzeugerpreise gewerblicher Produkte waren im September 2026 um 6,7 % höher als im September 2025. Das war der stärkste Anstieg gegenüber dem Vorjahresmonat seit März 2023 (+7,5 %). Wie das Statistische Bundesamt (Destatis) weiter mitteilt, stiegen die Erzeugerpreise im September 2026 gegenüber dem Vormonat August 2026 um 1,9 %.
|
||||
</description>
|
||||
</item>
|
||||
<item>
|
||||
<title>Rohöl im Wert von 30,0 Milliarden Euro im Zeitraum Januar bis August 2026 importiert
|
||||
</title>
|
||||
<link>https://www.destatis.de/DE/Presse/Pressemitteilungen/2026/10/PD26_372_51.html</link>
|
||||
<pubDate>Tue, 20 Oct 2026 08:00:00 +0200</pubDate>
|
||||
<description>Im Zeitraum Januar bis August 2026 wurden 49,1 Millionen Tonnen Rohöl im Wert von 30,0 Milliarden Euro nach Deutschland importiert. Im Vorjahreszeitraum 2025 betrug der Import von Rohöl 49,4 Millionen Tonnen im Wert von 24,6 Milliarden Euro. Wie das Statistische Bundesamt (Destatis) weiter mitteilt, nahm der Import damit mengenmäßig um 0,6 % ab, während er wertmäßig um 21,7 % stieg. Grund dafür waren die Preissteigerungen bei Rohöl im Zuge der Konflikte im Nahen Osten.
|
||||
</description>
|
||||
</item>
|
||||
</channel>
|
||||
</rss>
|
||||
@@ -0,0 +1,155 @@
|
||||
<html><body><div class="c-result c-result--event-preview c-result--compact">
|
||||
<div class="row">
|
||||
<div class="column small-12">
|
||||
<h3 class="c-result__heading">Preliminary consumer price index
|
||||
— (incl. preliminary harmonised index of consumer prices)</h3>
|
||||
|
||||
<ul class="c-result__meta c-result__meta--narrow-spacer c-result-meta c-result-meta--event">
|
||||
|
||||
<li class="c-result-meta__item">
|
||||
<strong>Reporting period</strong>: October 2026</li>
|
||||
<li class="c-result-meta__item">
|
||||
<strong>Date of issue</strong>: 2026.10.30<a href="EN/Press/Dates/2026/VPI_vorlaeufig_10.ics?view=renderICS#searchresults" class="c-result__meta-download-link is-ics is-ical" download title="download ICS/iCal" aria-label="download ICS/iCal">ICS/iCal</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div><div class="c-result c-result--event-preview c-result--compact">
|
||||
<div class="row">
|
||||
<div class="column small-12">
|
||||
<h3 class="c-result__heading">Monthly labour market statistics
|
||||
— Persons in employment, unemployed persons, unemployment rates</h3>
|
||||
|
||||
<ul class="c-result__meta c-result__meta--narrow-spacer c-result-meta c-result-meta--event">
|
||||
|
||||
<li class="c-result-meta__item">
|
||||
<strong>Reporting period</strong>: September 2026</li>
|
||||
<li class="c-result-meta__item">
|
||||
<strong>Date of issue</strong>: 2026.10.30<a href="EN/Press/Dates/2026/Erwerbstaetige_Erwerbslose_Erwerbslosenquoten_09.ics?view=renderICS#searchresults" class="c-result__meta-download-link is-ics is-ical" download title="download ICS/iCal" aria-label="download ICS/iCal">ICS/iCal</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div><div class="c-result c-result--event-preview c-result--compact">
|
||||
<div class="row">
|
||||
<div class="column small-12">
|
||||
<h3 class="c-result__heading">Gross domestic product </h3>
|
||||
|
||||
<p>First release</p>
|
||||
<ul class="c-result__meta c-result__meta--narrow-spacer c-result-meta c-result-meta--event">
|
||||
|
||||
<li class="c-result-meta__item">
|
||||
<strong>Reporting period</strong>: 3rd quarter 2026</li>
|
||||
<li class="c-result-meta__item">
|
||||
<strong>Date of issue</strong>: 2026.10.30<a href="EN/Press/Dates/2026/BIP_Schnellmeldung_q3.ics?view=renderICS#searchresults" class="c-result__meta-download-link is-ics is-ical" download title="download ICS/iCal" aria-label="download ICS/iCal">ICS/iCal</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div><div class="c-result c-result--event-preview c-result--compact">
|
||||
<div class="row">
|
||||
<div class="column small-12">
|
||||
<h3 class="c-result__heading">Indices of foreign trade prices</h3>
|
||||
|
||||
<ul class="c-result__meta c-result__meta--narrow-spacer c-result-meta c-result-meta--event">
|
||||
|
||||
<li class="c-result-meta__item">
|
||||
<strong>Reporting period</strong>: September 2026</li>
|
||||
<li class="c-result-meta__item">
|
||||
<strong>Date of issue</strong>: 2026.10.30<a href="EN/Press/Dates/2026/Aussenhandelspreise_09.ics?view=renderICS#searchresults" class="c-result__meta-download-link is-ics is-ical" download title="download ICS/iCal" aria-label="download ICS/iCal">ICS/iCal</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div><div class="c-result c-result--event-preview c-result--compact">
|
||||
<div class="row">
|
||||
<div class="column small-12">
|
||||
<h3 class="c-result__heading">Quarterly labour market statistics</h3>
|
||||
|
||||
<p>First release</p>
|
||||
<ul class="c-result__meta c-result__meta--narrow-spacer c-result-meta c-result-meta--event">
|
||||
|
||||
<li class="c-result-meta__item">
|
||||
<strong>Reporting period</strong>: 3rd quarter 2026</li>
|
||||
<li class="c-result-meta__item">
|
||||
<strong>Date of issue</strong>: 2026.10.30<a href="EN/Press/Dates/2026/Vierteljaehrliche_Arbeitsmarktstatistik_schnell_q3.ics?view=renderICS#searchresults" class="c-result__meta-download-link is-ics is-ical" download title="download ICS/iCal" aria-label="download ICS/iCal">ICS/iCal</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div><div class="c-result c-result--event-preview c-result--compact">
|
||||
<div class="row">
|
||||
<div class="column small-12">
|
||||
<h3 class="c-result__heading">Turnover in retail trade</h3>
|
||||
|
||||
<ul class="c-result__meta c-result__meta--narrow-spacer c-result-meta c-result-meta--event">
|
||||
|
||||
<li class="c-result-meta__item">
|
||||
<strong>Reporting period</strong>: September 2026</li>
|
||||
<li class="c-result-meta__item">
|
||||
<strong>Date of issue</strong>: 2026.11.02 (deadline)<a href="EN/Press/Dates/2026/Einzelhandel_Umsatz_09.ics?view=renderICS#searchresults" class="c-result__meta-download-link is-ics is-ical" download title="download ICS/iCal" aria-label="download ICS/iCal">ICS/iCal</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div><div class="c-result c-result--event-preview c-result--compact">
|
||||
<div class="row">
|
||||
<div class="column small-12">
|
||||
<h3 class="c-result__heading">Manufacturing – Indices of orders received and turnover </h3>
|
||||
|
||||
<ul class="c-result__meta c-result__meta--narrow-spacer c-result-meta c-result-meta--event">
|
||||
|
||||
<li class="c-result-meta__item">
|
||||
<strong>Reporting period</strong>: September 2026</li>
|
||||
<li class="c-result-meta__item">
|
||||
<strong>Date of issue</strong>: 2026.11.05<a href="EN/Press/Dates/2026/Verarbeitendes_Gewerbe_Auftragseingangsindex_09.ics?view=renderICS#searchresults" class="c-result__meta-download-link is-ics is-ical" download title="download ICS/iCal" aria-label="download ICS/iCal">ICS/iCal</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div><div class="c-result c-result--event-preview c-result--compact">
|
||||
<div class="row">
|
||||
<div class="column small-12">
|
||||
<h3 class="c-result__heading">Turnover and persons employed in "other services"</h3>
|
||||
|
||||
<ul class="c-result__meta c-result__meta--narrow-spacer c-result-meta c-result-meta--event">
|
||||
|
||||
<li class="c-result-meta__item">
|
||||
<strong>Reporting period</strong>: August 2026</li>
|
||||
<li class="c-result-meta__item">
|
||||
<strong>Date of issue</strong>: 2026.11.05<a href="EN/Press/Dates/2026/Dienstleistungen_Umsatz_Beschaeftigte_08.ics?view=renderICS#searchresults" class="c-result__meta-download-link is-ics is-ical" download title="download ICS/iCal" aria-label="download ICS/iCal">ICS/iCal</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div><div class="c-result c-result--event-preview c-result--compact">
|
||||
<div class="row">
|
||||
<div class="column small-12">
|
||||
<h3 class="c-result__heading">Production index</h3>
|
||||
|
||||
<ul class="c-result__meta c-result__meta--narrow-spacer c-result-meta c-result-meta--event">
|
||||
|
||||
<li class="c-result-meta__item">
|
||||
<strong>Reporting period</strong>: September 2026</li>
|
||||
<li class="c-result-meta__item">
|
||||
<strong>Date of issue</strong>: 2026.11.06<a href="EN/Press/Dates/2026/Produktionsindex_09.ics?view=renderICS#searchresults" class="c-result__meta-download-link is-ics is-ical" download title="download ICS/iCal" aria-label="download ICS/iCal">ICS/iCal</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div><div class="c-result c-result--event-preview c-result--compact">
|
||||
<div class="row">
|
||||
<div class="column small-12">
|
||||
<h3 class="c-result__heading">Foreign trade</h3>
|
||||
|
||||
<ul class="c-result__meta c-result__meta--narrow-spacer c-result-meta c-result-meta--event">
|
||||
|
||||
<li class="c-result-meta__item">
|
||||
<strong>Reporting period</strong>: September 2026</li>
|
||||
<li class="c-result-meta__item">
|
||||
<strong>Date of issue</strong>: 2026.11.09<a href="EN/Press/Dates/2026/Aussenhandel_09.ics?view=renderICS#searchresults" class="c-result__meta-download-link is-ics is-ical" download title="download ICS/iCal" aria-label="download ICS/iCal">ICS/iCal</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div></body></html>
|
||||
+648
@@ -0,0 +1,648 @@
|
||||
<html><head></head><body><meta property="article:published_time" content="2026-10-16T09:00:00Z"><div class="ecl-page-header__info ">
|
||||
<div class="ecl-page-header__meta ">
|
||||
<span class="ecl-page-header__meta-item">Euro indicators</span>
|
||||
<span class="ecl-page-header__meta-item">
|
||||
16 October 2026
|
||||
</span>
|
||||
<span class="ecl-page-header__meta-item">Next release: 18 November 2026</span>
|
||||
</div>
|
||||
<span class="ecl-label ecl-label--highlight ecl-u-mb-m ecl-u-mt-m ecl-u-mt-m-none">September 2026</span>
|
||||
<h1 class="ecl-page-header__title ecl-u-mt-none ecl-u-mb-l ">
|
||||
Annual inflation up to 3.8% in the euro area
|
||||
</h1>
|
||||
</div><p>The <strong>euro area</strong> annual inflation rate was <span class="variable-text">3.8</span>% in <span class="variable-text">September 2026</span>, <span class="variable-text">up from 3.2% in </span><span class="variable-text">August</span>. A year earlier, the rate was <span class="variable-text">2.2</span>%. <strong>European</strong> <strong>Union</strong> annual inflation was <span class="variable-text">3.8</span>% in <span class="variable-text">September 2026</span>, <span class="variable-text">up from 3.2% in </span><span class="variable-text">August</span>. A year earlier, the rate was <span class="variable-text">2.6</span>%. These figures are published by <strong>Eurostat, the statistical office of the European Union</strong>.</p><p>The lowest annual rates were registered in <span class="variable-text"><strong>Sweden</strong> (1.0%), <strong>Hungary</strong> and <strong>Denmark</strong> (both 2.1%)</span>. The highest annual rates were recorded in <span class="variable-text"><strong>Romania</strong> (6.5%), <strong>Lithuania</strong> (6.1%) and <strong>Bulgaria</strong> (5.6%)</span>. Compared with <span class="variable-text">August 2026</span>, annual inflation <span class="variable-text">fell in one Member State, remained stable in three and rose in twenty-three</span>.</p><p>In <span class="variable-text">September 2026</span>, <span class="variable-text">energy (+1.71 percentage points, pp), services (+1.52 percentage points, pp), non-energy industrial goods (+0.29 percentage points, pp) and food, alcohol & tobacco (+0.25 percentage points, pp) contributed positively</span> to the annual <strong>euro area</strong> inflation rate.</p><p><img class="chart"></p><table>
|
||||
<tbody>
|
||||
<tr>
|
||||
<th class="title"><p>Inflation rates (%) measured by the HICP</p></th>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="vertical-header datalabel"><p></p></th>
|
||||
<th class="datalabel border-right"><p><strong>Annual rate</strong></p></th>
|
||||
<th class="datalabel"><p><strong>Monthly rate</strong></p></th>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="vertical-header datalabel"><p></p></th>
|
||||
<th class="datalabel border-right"><p><strong>Sep 25</strong></p></th>
|
||||
<th class="datalabel"><p><strong>Apr 26</strong></p></th>
|
||||
<th class="datalabel"><p><strong>May 26</strong></p></th>
|
||||
<th class="datalabel"><p><strong>Jun 26</strong></p></th>
|
||||
<th class="datalabel"><p><strong>Jul 26</strong></p></th>
|
||||
<th class="datalabel border-right"><p><strong>Aug 26</strong></p></th>
|
||||
<th class="datalabel border-right"><p><strong>Sep 26</strong></p></th>
|
||||
<th class="datalabel"><p><strong>Sep 26</strong></p></th>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="vertical-header highlight"><p><strong>Euro area</strong></p></th>
|
||||
<td class="datalabel border-right highlight"><p>2.2</p></td>
|
||||
<td class="datalabel highlight"><p>3.0</p></td>
|
||||
<td class="datalabel highlight"><p>3.2</p></td>
|
||||
<td class="datalabel highlight"><p>2.8</p></td>
|
||||
<td class="datalabel highlight"><p>2.9</p></td>
|
||||
<td class="datalabel border-right highlight"><p>3.2</p></td>
|
||||
<td class="datalabel border-right highlight"><p><strong>3.8</strong></p></td>
|
||||
<td class="datalabel highlight"><p>0.6</p></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="highlight vertical-header"><p><strong>EU</strong></p></th>
|
||||
<td class="datalabel border-right highlight"><p>2.6</p></td>
|
||||
<td class="datalabel highlight"><p>3.2</p></td>
|
||||
<td class="datalabel highlight"><p>3.3</p></td>
|
||||
<td class="datalabel highlight"><p>2.9</p></td>
|
||||
<td class="datalabel highlight"><p>3.0</p></td>
|
||||
<td class="datalabel border-right highlight"><p>3.2</p></td>
|
||||
<td class="datalabel border-right highlight"><p><strong>3.8</strong></p></td>
|
||||
<td class="datalabel highlight"><p>0.6</p></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="vertical-header"><p><strong>Belgium</strong></p></th>
|
||||
<td class="datalabel border-right"><p>2.7</p></td>
|
||||
<td class="datalabel"><p>4.2</p></td>
|
||||
<td class="datalabel"><p>4.0</p></td>
|
||||
<td class="datalabel"><p>3.3</p></td>
|
||||
<td class="datalabel"><p>3.6</p></td>
|
||||
<td class="datalabel border-right"><p>4.2</p></td>
|
||||
<td class="datalabel border-right"><p><strong>4.5</strong></p></td>
|
||||
<td class="datalabel"><p>0.0</p></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="vertical-header"><p><strong>Bulgaria</strong></p></th>
|
||||
<td class="datalabel border-right"><p>4.0</p></td>
|
||||
<td class="datalabel"><p>6.0</p></td>
|
||||
<td class="datalabel"><p>6.3</p></td>
|
||||
<td class="datalabel"><p>5.2</p></td>
|
||||
<td class="datalabel"><p>4.4</p></td>
|
||||
<td class="datalabel border-right"><p>5.0</p></td>
|
||||
<td class="datalabel border-right"><p><strong>5.6</strong></p></td>
|
||||
<td class="datalabel"><p>0.0</p></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="vertical-header"><p><strong>Czechia</strong></p></th>
|
||||
<td class="datalabel border-right"><p>2.0</p></td>
|
||||
<td class="datalabel"><p>2.1</p></td>
|
||||
<td class="datalabel"><p>1.8</p></td>
|
||||
<td class="datalabel"><p>1.1</p></td>
|
||||
<td class="datalabel"><p>1.3</p></td>
|
||||
<td class="datalabel border-right"><p>1.5</p></td>
|
||||
<td class="datalabel border-right"><p><strong>2.2</strong></p></td>
|
||||
<td class="datalabel"><p>-0.1</p></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="vertical-header"><p><strong>Denmark</strong></p></th>
|
||||
<td class="datalabel border-right"><p>2.2</p></td>
|
||||
<td class="datalabel"><p>1.2</p></td>
|
||||
<td class="datalabel"><p>1.8</p></td>
|
||||
<td class="datalabel"><p>1.8</p></td>
|
||||
<td class="datalabel"><p>1.6</p></td>
|
||||
<td class="datalabel border-right"><p>2.0</p></td>
|
||||
<td class="datalabel border-right"><p><strong>2.1</strong></p></td>
|
||||
<td class="datalabel"><p>0.0</p></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="vertical-header"><p><strong>Germany</strong></p></th>
|
||||
<td class="datalabel border-right"><p>2.3</p></td>
|
||||
<td class="datalabel"><p>2.9</p></td>
|
||||
<td class="datalabel"><p>2.7</p></td>
|
||||
<td class="datalabel"><p>2.4</p></td>
|
||||
<td class="datalabel"><p>2.8</p></td>
|
||||
<td class="datalabel border-right"><p>2.9</p></td>
|
||||
<td class="datalabel border-right"><p><strong>3.3</strong></p></td>
|
||||
<td class="datalabel"><p>0.6</p></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="vertical-header"><p><strong>Estonia</strong></p></th>
|
||||
<td class="datalabel border-right"><p>5.3</p></td>
|
||||
<td class="datalabel"><p>3.2</p></td>
|
||||
<td class="datalabel"><p>3.6</p></td>
|
||||
<td class="datalabel"><p>2.0</p></td>
|
||||
<td class="datalabel"><p>2.0</p></td>
|
||||
<td class="datalabel border-right"><p>1.3</p></td>
|
||||
<td class="datalabel border-right"><p><strong>3.1</strong></p></td>
|
||||
<td class="datalabel"><p>0.6</p></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="vertical-header"><p><strong>Ireland</strong></p></th>
|
||||
<td class="datalabel border-right"><p>2.7</p></td>
|
||||
<td class="datalabel"><p>3.6</p></td>
|
||||
<td class="datalabel"><p>3.5</p></td>
|
||||
<td class="datalabel"><p>3.2</p></td>
|
||||
<td class="datalabel"><p>3.1</p></td>
|
||||
<td class="datalabel border-right"><p>3.4</p></td>
|
||||
<td class="datalabel border-right"><p><strong>3.8</strong></p></td>
|
||||
<td class="datalabel"><p>0.2</p></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="vertical-header"><p><strong>Greece</strong></p></th>
|
||||
<td class="datalabel border-right"><p>1.8</p></td>
|
||||
<td class="datalabel"><p>4.6</p></td>
|
||||
<td class="datalabel"><p>4.9</p></td>
|
||||
<td class="datalabel"><p>3.9</p></td>
|
||||
<td class="datalabel"><p>2.7</p></td>
|
||||
<td class="datalabel border-right"><p>3.7</p></td>
|
||||
<td class="datalabel border-right"><p><strong>5.1</strong></p></td>
|
||||
<td class="datalabel"><p>1.9</p></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="vertical-header"><p><strong>Spain</strong></p></th>
|
||||
<td class="datalabel border-right"><p>3.0</p></td>
|
||||
<td class="datalabel"><p>3.5</p></td>
|
||||
<td class="datalabel"><p>3.6</p></td>
|
||||
<td class="datalabel"><p>3.6</p></td>
|
||||
<td class="datalabel"><p>3.9</p></td>
|
||||
<td class="datalabel border-right"><p>4.6</p></td>
|
||||
<td class="datalabel border-right"><p><strong>5.0</strong></p></td>
|
||||
<td class="datalabel"><p>0.6</p></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="vertical-header"><p><strong>France</strong></p></th>
|
||||
<td class="datalabel border-right"><p>1.1</p></td>
|
||||
<td class="datalabel"><p>2.5</p></td>
|
||||
<td class="datalabel"><p>2.8</p></td>
|
||||
<td class="datalabel"><p>2.0</p></td>
|
||||
<td class="datalabel"><p>2.4</p></td>
|
||||
<td class="datalabel border-right"><p>2.6</p></td>
|
||||
<td class="datalabel border-right"><p><strong>3.4</strong></p></td>
|
||||
<td class="datalabel"><p>-0.3</p></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="vertical-header"><p><strong>Croatia</strong></p></th>
|
||||
<td class="datalabel border-right"><p>4.6</p></td>
|
||||
<td class="datalabel"><p>5.4</p></td>
|
||||
<td class="datalabel"><p>4.9</p></td>
|
||||
<td class="datalabel"><p>4.2</p></td>
|
||||
<td class="datalabel"><p>3.6</p></td>
|
||||
<td class="datalabel border-right"><p>3.7</p></td>
|
||||
<td class="datalabel border-right"><p><strong>4.3</strong></p></td>
|
||||
<td class="datalabel"><p>0.0</p></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="vertical-header"><p><strong>Italy</strong></p></th>
|
||||
<td class="datalabel border-right"><p>1.7</p></td>
|
||||
<td class="datalabel"><p>2.8</p></td>
|
||||
<td class="datalabel"><p>3.2</p></td>
|
||||
<td class="datalabel"><p>3.0</p></td>
|
||||
<td class="datalabel"><p>2.9</p></td>
|
||||
<td class="datalabel border-right"><p>3.2</p></td>
|
||||
<td class="datalabel border-right"><p><strong>4.2</strong></p></td>
|
||||
<td class="datalabel"><p>2.1</p></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="vertical-header"><p><strong>Cyprus</strong></p></th>
|
||||
<td class="datalabel border-right"><p>0.0</p></td>
|
||||
<td class="datalabel"><p>3.0</p></td>
|
||||
<td class="datalabel"><p>3.5</p></td>
|
||||
<td class="datalabel"><p>4.1</p></td>
|
||||
<td class="datalabel"><p>4.4</p></td>
|
||||
<td class="datalabel border-right"><p>5.2</p></td>
|
||||
<td class="datalabel border-right"><p><strong>5.2</strong></p></td>
|
||||
<td class="datalabel"><p>-0.4</p></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="vertical-header"><p><strong>Latvia</strong></p></th>
|
||||
<td class="datalabel border-right"><p>4.2</p></td>
|
||||
<td class="datalabel"><p>2.9</p></td>
|
||||
<td class="datalabel"><p>3.5</p></td>
|
||||
<td class="datalabel"><p>3.3</p></td>
|
||||
<td class="datalabel"><p>2.5</p></td>
|
||||
<td class="datalabel border-right"><p>3.0</p></td>
|
||||
<td class="datalabel border-right"><p><strong>3.0</strong></p></td>
|
||||
<td class="datalabel"><p>0.2</p></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="vertical-header"><p><strong>Lithuania</strong></p></th>
|
||||
<td class="datalabel border-right"><p>3.7</p></td>
|
||||
<td class="datalabel"><p>4.9</p></td>
|
||||
<td class="datalabel"><p>5.1</p></td>
|
||||
<td class="datalabel"><p>5.4</p></td>
|
||||
<td class="datalabel"><p>5.4</p></td>
|
||||
<td class="datalabel border-right"><p>5.6</p></td>
|
||||
<td class="datalabel border-right"><p><strong>6.1</strong></p></td>
|
||||
<td class="datalabel"><p>0.9</p></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="vertical-header"><p><strong>Luxembourg</strong></p></th>
|
||||
<td class="datalabel border-right"><p>3.1</p></td>
|
||||
<td class="datalabel"><p>5.2</p></td>
|
||||
<td class="datalabel"><p>4.5</p></td>
|
||||
<td class="datalabel"><p>3.7</p></td>
|
||||
<td class="datalabel"><p>3.4</p></td>
|
||||
<td class="datalabel border-right"><p>4.0</p></td>
|
||||
<td class="datalabel border-right"><p><strong>5.2</strong></p></td>
|
||||
<td class="datalabel"><p>1.0</p></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="vertical-header"><p><strong>Hungary</strong></p></th>
|
||||
<td class="datalabel border-right"><p>4.3</p></td>
|
||||
<td class="datalabel"><p>2.6</p></td>
|
||||
<td class="datalabel"><p>2.3</p></td>
|
||||
<td class="datalabel"><p>2.1</p></td>
|
||||
<td class="datalabel"><p>1.6</p></td>
|
||||
<td class="datalabel border-right"><p>1.8</p></td>
|
||||
<td class="datalabel border-right"><p><strong>2.1</strong></p></td>
|
||||
<td class="datalabel"><p>0.1</p></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="vertical-header"><p><strong>Malta</strong></p></th>
|
||||
<td class="datalabel border-right"><p>2.4</p></td>
|
||||
<td class="datalabel"><p>2.5</p></td>
|
||||
<td class="datalabel"><p>2.1</p></td>
|
||||
<td class="datalabel"><p>2.0</p></td>
|
||||
<td class="datalabel"><p>2.1</p></td>
|
||||
<td class="datalabel border-right"><p>2.0</p></td>
|
||||
<td class="datalabel border-right"><p><strong>2.4</strong></p></td>
|
||||
<td class="datalabel"><p>-0.9</p></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="vertical-header"><p><strong>Netherlands</strong></p></th>
|
||||
<td class="datalabel border-right"><p>3.0</p></td>
|
||||
<td class="datalabel"><p>2.5</p></td>
|
||||
<td class="datalabel"><p>3.4</p></td>
|
||||
<td class="datalabel"><p>2.5</p></td>
|
||||
<td class="datalabel"><p>3.0</p></td>
|
||||
<td class="datalabel border-right"><p>2.8</p></td>
|
||||
<td class="datalabel border-right"><p><strong>3.0</strong></p></td>
|
||||
<td class="datalabel"><p>-0.1</p></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="vertical-header"><p><strong>Austria</strong></p></th>
|
||||
<td class="datalabel border-right"><p>3.9</p></td>
|
||||
<td class="datalabel"><p>3.4</p></td>
|
||||
<td class="datalabel"><p>3.7</p></td>
|
||||
<td class="datalabel"><p>3.2</p></td>
|
||||
<td class="datalabel"><p>2.7</p></td>
|
||||
<td class="datalabel border-right"><p>2.9</p></td>
|
||||
<td class="datalabel border-right"><p><strong>3.6</strong></p></td>
|
||||
<td class="datalabel"><p>0.7</p></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="vertical-header"><p><strong>Poland</strong></p></th>
|
||||
<td class="datalabel border-right"><p>2.9</p></td>
|
||||
<td class="datalabel"><p>3.4</p></td>
|
||||
<td class="datalabel"><p>3.3</p></td>
|
||||
<td class="datalabel"><p>3.0</p></td>
|
||||
<td class="datalabel"><p>3.1</p></td>
|
||||
<td class="datalabel border-right"><p>3.5</p></td>
|
||||
<td class="datalabel border-right"><p><strong>4.0</strong></p></td>
|
||||
<td class="datalabel"><p>0.7</p></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="vertical-header"><p><strong>Portugal</strong></p></th>
|
||||
<td class="datalabel border-right"><p>1.9</p></td>
|
||||
<td class="datalabel"><p>3.3</p></td>
|
||||
<td class="datalabel"><p>3.1</p></td>
|
||||
<td class="datalabel"><p>3.1</p></td>
|
||||
<td class="datalabel"><p>3.1</p></td>
|
||||
<td class="datalabel border-right"><p>3.6</p></td>
|
||||
<td class="datalabel border-right"><p><strong>3.6</strong></p></td>
|
||||
<td class="datalabel"><p>1.0</p></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="vertical-header"><p><strong>Romania</strong></p></th>
|
||||
<td class="datalabel border-right"><p>8.6</p></td>
|
||||
<td class="datalabel"><p>9.5</p></td>
|
||||
<td class="datalabel"><p>9.7</p></td>
|
||||
<td class="datalabel"><p>9.2</p></td>
|
||||
<td class="datalabel"><p>8.2</p></td>
|
||||
<td class="datalabel border-right"><p>6.3</p></td>
|
||||
<td class="datalabel border-right"><p><strong>6.5</strong></p></td>
|
||||
<td class="datalabel"><p>0.8</p></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="vertical-header"><p><strong>Slovenia</strong></p></th>
|
||||
<td class="datalabel border-right"><p>2.8</p></td>
|
||||
<td class="datalabel"><p>3.4</p></td>
|
||||
<td class="datalabel"><p>3.8</p></td>
|
||||
<td class="datalabel"><p>3.7</p></td>
|
||||
<td class="datalabel"><p>3.0</p></td>
|
||||
<td class="datalabel border-right"><p>3.4</p></td>
|
||||
<td class="datalabel border-right"><p><strong>3.7</strong></p></td>
|
||||
<td class="datalabel"><p>0.3</p></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="vertical-header"><p><strong>Slovakia</strong></p></th>
|
||||
<td class="datalabel border-right"><p>4.6</p></td>
|
||||
<td class="datalabel"><p>4.1</p></td>
|
||||
<td class="datalabel"><p>4.0</p></td>
|
||||
<td class="datalabel"><p>3.5</p></td>
|
||||
<td class="datalabel"><p>3.2</p></td>
|
||||
<td class="datalabel border-right"><p>3.1</p></td>
|
||||
<td class="datalabel border-right"><p><strong>3.0</strong></p></td>
|
||||
<td class="datalabel"><p>0.1</p></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="vertical-header"><p><strong>Finland</strong></p></th>
|
||||
<td class="datalabel border-right"><p>2.2</p></td>
|
||||
<td class="datalabel"><p>2.4</p></td>
|
||||
<td class="datalabel"><p>2.8</p></td>
|
||||
<td class="datalabel"><p>2.7</p></td>
|
||||
<td class="datalabel"><p>2.5</p></td>
|
||||
<td class="datalabel border-right"><p>2.4</p></td>
|
||||
<td class="datalabel border-right"><p><strong>2.7</strong></p></td>
|
||||
<td class="datalabel"><p>0.7</p></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="vertical-header"><p><strong>Sweden</strong></p></th>
|
||||
<td class="datalabel border-right"><p>3.2</p></td>
|
||||
<td class="datalabel"><p>0.5</p></td>
|
||||
<td class="datalabel"><p>1.1</p></td>
|
||||
<td class="datalabel"><p>1.0</p></td>
|
||||
<td class="datalabel"><p>0.3</p></td>
|
||||
<td class="datalabel border-right"><p>0.3</p></td>
|
||||
<td class="datalabel border-right"><p><strong>1.0</strong></p></td>
|
||||
<td class="datalabel"><p>0.9</p></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="vertical-header border-top"><p><strong>Iceland</strong></p></th>
|
||||
<td class="datalabel border-right border-top"><p>4.2</p></td>
|
||||
<td class="datalabel border-top"><p>4.9</p></td>
|
||||
<td class="datalabel border-top"><p>4.8</p></td>
|
||||
<td class="datalabel border-top"><p>5.1</p></td>
|
||||
<td class="datalabel border-top"><p>5.6</p></td>
|
||||
<td class="datalabel border-right border-top"><p>6.1</p></td>
|
||||
<td class="datalabel border-right border-top"><p><strong>5.4</strong></p></td>
|
||||
<td class="datalabel border-top"><p>-1.0</p></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="vertical-header"><p><strong>Norway</strong></p></th>
|
||||
<td class="datalabel border-right"><p>3.6</p></td>
|
||||
<td class="datalabel"><p>3.4</p></td>
|
||||
<td class="datalabel"><p>3.1</p></td>
|
||||
<td class="datalabel"><p>2.6</p></td>
|
||||
<td class="datalabel"><p>2.9</p></td>
|
||||
<td class="datalabel border-right"><p>3.2</p></td>
|
||||
<td class="datalabel border-right"><p><strong>3.4</strong></p></td>
|
||||
<td class="datalabel"><p>0.6</p></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="vertical-header"><p><strong>Switzerland</strong></p></th>
|
||||
<td class="datalabel border-right"><p>0.0</p></td>
|
||||
<td class="datalabel"><p>0.5</p></td>
|
||||
<td class="datalabel"><p>0.9</p></td>
|
||||
<td class="datalabel"><p>0.7</p></td>
|
||||
<td class="datalabel"><p>0.7</p></td>
|
||||
<td class="datalabel border-right"><p>0.9</p></td>
|
||||
<td class="datalabel border-right"><p><strong>1.2</strong></p></td>
|
||||
<td class="datalabel"><p>-0.1</p></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="footer notes"><p>Source dataset: <a>prc_hicp_minr</a></p><p><span><img></span></p></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table><p><img class="chart"></p><table>
|
||||
<tbody>
|
||||
<tr>
|
||||
<th class="title"><p>Euro area inflation rate (%), selected aggregates</p></th>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="datalabel"><p></p></th>
|
||||
<th class="datalabel border-right"><p><strong>Weights (‰)</strong></p></th>
|
||||
<th class="datalabel border-right"><p><strong>Annual rate</strong></p></th>
|
||||
<th class="datalabel"><p><strong>Monthly rate</strong></p></th>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="datalabel"><p></p></th>
|
||||
<th class="datalabel border-right"><p><strong>2026</strong></p></th>
|
||||
<th class="datalabel border-right"><p><strong>Sep 25</strong></p></th>
|
||||
<th class="datalabel"><p><strong>Apr 26</strong></p></th>
|
||||
<th class="datalabel"><p><strong>May 26</strong></p></th>
|
||||
<th class="datalabel"><p><strong>Jun 26</strong></p></th>
|
||||
<th class="datalabel"><p><strong>Jul 26</strong></p></th>
|
||||
<th class="datalabel border-right"><p><strong>Aug 26</strong></p></th>
|
||||
<th class="datalabel border-right"><p><strong>Sep 26</strong></p></th>
|
||||
<th class="datalabel"><p><strong>Sep 26</strong></p></th>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="highlight vertical-header"><p><strong>All-items HICP</strong></p></th>
|
||||
<td class="datalabel border-right highlight"><p>1000.0</p></td>
|
||||
<td class="datalabel border-right highlight"><p>2.2</p></td>
|
||||
<td class="datalabel highlight"><p>3.0</p></td>
|
||||
<td class="datalabel highlight"><p>3.2</p></td>
|
||||
<td class="datalabel highlight"><p>2.8</p></td>
|
||||
<td class="datalabel highlight"><p>2.9</p></td>
|
||||
<td class="datalabel border-right highlight"><p>3.2</p></td>
|
||||
<td class="datalabel border-right highlight"><p><strong>3.8</strong></p></td>
|
||||
<td class="datalabel highlight"><p>0.6</p></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="vertical-header"><p><strong>All-items excluding:</strong></p><p><strong>energy</strong></p></th>
|
||||
<td class="border-right"><p>909.7</p></td>
|
||||
<td class="border-right"><p>2.5</p></td>
|
||||
<td class=""><p>2.2</p></td>
|
||||
<td class=""><p>2.4</p></td>
|
||||
<td class=""><p>2.2</p></td>
|
||||
<td class=""><p>2.2</p></td>
|
||||
<td class="border-right"><p>2.1</p></td>
|
||||
<td class="border-right"><p><strong>2.3</strong></p></td>
|
||||
<td class=""><p>0.2</p></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="vertical-header"><p><strong>energy, unprocessed food</strong></p></th>
|
||||
<td class="border-right"><p>858.3</p></td>
|
||||
<td class="border-right"><p>2.4</p></td>
|
||||
<td class=""><p>2.1</p></td>
|
||||
<td class=""><p>2.3</p></td>
|
||||
<td class=""><p>2.1</p></td>
|
||||
<td class=""><p>2.2</p></td>
|
||||
<td class="border-right"><p>2.1</p></td>
|
||||
<td class="border-right"><p><strong>2.2</strong></p></td>
|
||||
<td class=""><p>0.2</p></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="vertical-header"><p><strong>energy, food, alcohol & tobacco</strong></p></th>
|
||||
<td class="border-right"><p>720.4</p></td>
|
||||
<td class="border-right"><p>2.4</p></td>
|
||||
<td class=""><p>2.2</p></td>
|
||||
<td class=""><p>2.6</p></td>
|
||||
<td class=""><p>2.4</p></td>
|
||||
<td class=""><p>2.5</p></td>
|
||||
<td class="border-right"><p>2.4</p></td>
|
||||
<td class="border-right"><p><strong>2.5</strong></p></td>
|
||||
<td class=""><p>0.2</p></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="vertical-header"><p><strong>energy, seasonal food</strong></p></th>
|
||||
<td class="border-right"><p>884.3</p></td>
|
||||
<td class="border-right"><p>2.5</p></td>
|
||||
<td class=""><p>2.2</p></td>
|
||||
<td class=""><p>2.4</p></td>
|
||||
<td class=""><p>2.2</p></td>
|
||||
<td class=""><p>2.2</p></td>
|
||||
<td class="border-right"><p>2.1</p></td>
|
||||
<td class="border-right"><p><strong>2.2</strong></p></td>
|
||||
<td class=""><p>0.2</p></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="vertical-header"><p><strong>tobacco</strong></p></th>
|
||||
<td class="border-right"><p>979.8</p></td>
|
||||
<td class="border-right"><p>2.2</p></td>
|
||||
<td class=""><p>3.0</p></td>
|
||||
<td class=""><p>3.1</p></td>
|
||||
<td class=""><p>2.7</p></td>
|
||||
<td class=""><p>2.9</p></td>
|
||||
<td class="border-right"><p>3.2</p></td>
|
||||
<td class="border-right"><p><strong>3.8</strong></p></td>
|
||||
<td class=""><p>0.6</p></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="vertical-header"><p><strong>Food, alcohol & tobacco</strong></p></th>
|
||||
<td class="border-right"><p>189.4</p></td>
|
||||
<td class="border-right"><p>3.0</p></td>
|
||||
<td class=""><p>2.4</p></td>
|
||||
<td class=""><p>1.9</p></td>
|
||||
<td class=""><p>1.5</p></td>
|
||||
<td class=""><p>1.2</p></td>
|
||||
<td class="border-right"><p>1.1</p></td>
|
||||
<td class="border-right"><p><strong>1.3</strong></p></td>
|
||||
<td class=""><p>0.1</p></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="vertical-header"><p><strong>processed food, alcohol & tobacco</strong></p></th>
|
||||
<td class="border-right"><p>137.9</p></td>
|
||||
<td class="border-right"><p>2.7</p></td>
|
||||
<td class=""><p>1.6</p></td>
|
||||
<td class=""><p>1.1</p></td>
|
||||
<td class=""><p>0.9</p></td>
|
||||
<td class=""><p>0.7</p></td>
|
||||
<td class="border-right"><p>0.5</p></td>
|
||||
<td class="border-right"><p><strong>0.4</strong></p></td>
|
||||
<td class=""><p>-0.3</p></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="vertical-header"><p><strong>unprocessed food</strong></p></th>
|
||||
<td class="border-right"><p>51.4</p></td>
|
||||
<td class="border-right"><p>3.9</p></td>
|
||||
<td class=""><p>4.6</p></td>
|
||||
<td class=""><p>4.0</p></td>
|
||||
<td class=""><p>3.1</p></td>
|
||||
<td class=""><p>2.4</p></td>
|
||||
<td class="border-right"><p>2.7</p></td>
|
||||
<td class="border-right"><p><strong>4.0</strong></p></td>
|
||||
<td class=""><p>1.2</p></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="vertical-header"><p><strong>Energy</strong></p></th>
|
||||
<td class="border-right"><p>90.3</p></td>
|
||||
<td class="border-right"><p>-0.4</p></td>
|
||||
<td class=""><p>10.8</p></td>
|
||||
<td class=""><p>10.8</p></td>
|
||||
<td class=""><p>8.5</p></td>
|
||||
<td class=""><p>10.3</p></td>
|
||||
<td class="border-right"><p>14.3</p></td>
|
||||
<td class="border-right"><p><strong>18.9</strong></p></td>
|
||||
<td class=""><p>4.0</p></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="vertical-header"><p><strong>Non-energy industrial goods</strong></p></th>
|
||||
<td class="border-right"><p>252.2</p></td>
|
||||
<td class="border-right"><p>0.7</p></td>
|
||||
<td class=""><p>0.8</p></td>
|
||||
<td class=""><p>0.9</p></td>
|
||||
<td class=""><p>0.7</p></td>
|
||||
<td class=""><p>0.9</p></td>
|
||||
<td class="border-right"><p>1.2</p></td>
|
||||
<td class="border-right"><p><strong>1.1</strong></p></td>
|
||||
<td class=""><p>2.1</p></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="vertical-header"><p><strong>Services</strong></p></th>
|
||||
<td class="border-right"><p>468.2</p></td>
|
||||
<td class="border-right"><p>3.2</p></td>
|
||||
<td class=""><p>3.0</p></td>
|
||||
<td class=""><p>3.5</p></td>
|
||||
<td class=""><p>3.2</p></td>
|
||||
<td class=""><p>3.3</p></td>
|
||||
<td class="border-right"><p>3.0</p></td>
|
||||
<td class="border-right"><p><strong>3.2</strong></p></td>
|
||||
<td class=""><p>-0.7</p></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="footer notes"><p>Source dataset: <a>prc_hicp_minr</a> and <a>prc_hicp_iw</a></p><p><img></p></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table><table>
|
||||
<tbody>
|
||||
<tr>
|
||||
<th class="title"><p>Contributions to the euro area annual inflation rate (pp),</p><p>selected aggregates</p></th>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="xl70 datalabel"><p></p></th>
|
||||
<th class="xl67 datalabel border-right"><p><strong>Sep 25</strong></p></th>
|
||||
<th class="xl67 datalabel"><p><strong>Apr 26</strong></p></th>
|
||||
<th class="xl67 datalabel"><p><strong>May 26</strong></p></th>
|
||||
<th class="xl67 datalabel"><p><strong>Jun 26</strong></p></th>
|
||||
<th class="xl67 datalabel"><p><strong>Jul 26</strong></p></th>
|
||||
<th class="xl67 datalabel border-right"><p><strong>Aug 26</strong></p></th>
|
||||
<th class="xl67 datalabel"><p><strong>Sep 26</strong></p></th>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="xl68 vertical-header"><p><strong>Food, alcohol & tobacco</strong></p></th>
|
||||
<td class="xl67 datalabel border-right"><p>0.58</p></td>
|
||||
<td class="xl67 datalabel"><p>0.46</p></td>
|
||||
<td class="xl67 datalabel"><p>0.36</p></td>
|
||||
<td class="xl67 datalabel"><p>0.29</p></td>
|
||||
<td class="xl67 datalabel"><p>0.23</p></td>
|
||||
<td class="xl67 datalabel border-right"><p>0.22</p></td>
|
||||
<td class="xl67 datalabel"><p><strong>0.25</strong></p></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="xl68 vertical-header"><p><strong>processed food, alcohol & tobacco</strong></p></th>
|
||||
<td class="xl67 datalabel border-right"><p>0.38</p></td>
|
||||
<td class="xl67 datalabel"><p>0.22</p></td>
|
||||
<td class="xl67 datalabel"><p>0.15</p></td>
|
||||
<td class="xl67 datalabel"><p>0.13</p></td>
|
||||
<td class="xl67 datalabel"><p>0.10</p></td>
|
||||
<td class="xl67 datalabel border-right"><p>0.07</p></td>
|
||||
<td class="xl67 datalabel"><p><strong>0.05</strong></p></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="xl68 vertical-header"><p><strong>unprocessed food</strong></p></th>
|
||||
<td class="xl67 datalabel border-right"><p>0.20</p></td>
|
||||
<td class="xl67 datalabel"><p>0.24</p></td>
|
||||
<td class="xl67 datalabel"><p>0.21</p></td>
|
||||
<td class="xl67 datalabel"><p>0.16</p></td>
|
||||
<td class="xl67 datalabel"><p>0.12</p></td>
|
||||
<td class="xl67 datalabel border-right"><p>0.14</p></td>
|
||||
<td class="xl67 datalabel"><p><strong>0.21</strong></p></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="xl68 vertical-header"><p><strong>Energy</strong></p></th>
|
||||
<td class="xl67 datalabel border-right"><p>-0.03</p></td>
|
||||
<td class="xl67 datalabel"><p>0.99</p></td>
|
||||
<td class="xl67 datalabel"><p>0.98</p></td>
|
||||
<td class="xl67 datalabel"><p>0.77</p></td>
|
||||
<td class="xl67 datalabel"><p>0.94</p></td>
|
||||
<td class="xl67 datalabel border-right"><p>1.29</p></td>
|
||||
<td class="xl67 datalabel"><p><strong>1.71</strong></p></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="xl68 vertical-header"><p><strong>Non-energy industrial goods</strong></p></th>
|
||||
<td class="xl67 datalabel border-right"><p>0.19</p></td>
|
||||
<td class="xl67 datalabel"><p>0.20</p></td>
|
||||
<td class="xl67 datalabel"><p>0.23</p></td>
|
||||
<td class="xl67 datalabel"><p>0.18</p></td>
|
||||
<td class="xl67 datalabel"><p>0.23</p></td>
|
||||
<td class="xl67 datalabel border-right"><p>0.30</p></td>
|
||||
<td class="xl67 datalabel"><p><strong>0.29</strong></p></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="xl68 vertical-header"><p><strong>Services</strong></p></th>
|
||||
<td class="xl67 datalabel border-right"><p>1.49</p></td>
|
||||
<td class="xl67 datalabel"><p>1.38</p></td>
|
||||
<td class="xl67 datalabel"><p>1.61</p></td>
|
||||
<td class="xl67 datalabel"><p>1.51</p></td>
|
||||
<td class="xl67 datalabel"><p>1.55</p></td>
|
||||
<td class="xl67 datalabel border-right"><p>1.43</p></td>
|
||||
<td class="xl67 datalabel"><p><strong>1.52</strong></p></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="footer notes"><p>Source dataset: <a>prc_hicp_ctr</a></p><p><span><img></span></p></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table><p>A flash estimate of euro area inflation is issued at the end of each reference month. <span class="variable-text"><a>The euro area flash estimate for September 2026</a></span>, published on <span class="variable-text">2 October 2026</span>, was <span class="variable-text">3.8</span>%.</p><p>The next flash estimate of euro area inflation with data for <span class="variable-text">October 2026</span> is scheduled for <span class="variable-text">4 November 2026</span>.</p><p><strong>Annual inflation</strong> is the price change of consumer goods and services between the current month and the same month of the previous year. <strong>Monthly inflation </strong>is the price change between the current month and the previous month.</p><p>A <strong>contribution </strong>shows how much of the annual inflation rate comes from a particular component of the HICP. The contributions are calculated according to a method which ensures their additivity (allowing for rounding).</p><p>Up to December 31, 2025, the <strong>euro area</strong> included Belgium, Germany, Estonia, Ireland, Greece, Spain, France, Croatia, Italy, Cyprus, Latvia, Lithuania, Luxembourg, Malta, the Netherlands, Austria, Portugal, Slovenia, Slovakia and Finland <strong>(EA20)</strong>. From 1 January 2026, the <strong>euro area</strong> also includes Bulgaria <strong>(EA21)</strong>.</p><p>The <strong>European Union</strong> includes Belgium, Bulgaria, Czechia, Denmark, Germany, Estonia, Ireland, Greece, Spain, France, Croatia, Italy, Cyprus, Latvia, Lithuania, Luxembourg, Hungary, Malta, the Netherlands, Austria, Poland, Portugal, Romania, Slovenia, Slovakia, Finland and Sweden (<strong>EU27</strong>).</p><p>The aggregate data series published in this Euro indicator release refer to the evolving composition of the euro area and the European Union. Thus, Euro indicator data for months up to December 2025 represent EA20 series, while Euro indicator data for January 2026 onwards represent EA21 series. Changes in the composition of the euro area are incorporated using a chain index formula.</p><p><a>Eurostat website section on inflation</a></p><p><a>Eurostat database on inflation</a></p><p><a>Eurostat Information on data</a></p><p><a>Statistics Explained article on inflation in the euro area</a></p><p><a>Eurostat metadata on inflation</a></p><p><a>Euro indicators dashboard</a></p><p><a>Release calendar for Euro indicators</a></p><p><a>Statistics Code of Practice</a></p><p class="ecl-u-type-heading-5">Media requests</p><p class="ecl-u-type-paragraph ecl-u-mb-none">
|
||||
<span>Eurostat Media Support</span>
|
||||
</p><p class="ecl-u-type-paragraph ecl-u-mb-none">
|
||||
<span>E-mail: <a class="ecl-link">[email protected]</a>
|
||||
</span>
|
||||
</p><p class="ecl-u-type-heading-5">Further information on data</p><p class="ecl-u-type-paragraph ecl-u-mb-none">
|
||||
<span>E-mail: <a class="ecl-link">[email protected]</a>
|
||||
</span>
|
||||
</p></body></html>
|
||||
+424
@@ -0,0 +1,424 @@
|
||||
<html><head></head><body><meta property="article:published_time" content="2026-10-02T09:00:00Z"><div class="ecl-page-header__info ">
|
||||
<div class="ecl-page-header__meta ">
|
||||
<span class="ecl-page-header__meta-item">Euro indicators</span>
|
||||
<span class="ecl-page-header__meta-item">
|
||||
2 October 2026
|
||||
</span>
|
||||
<span class="ecl-page-header__meta-item">Next release: 4 November 2026</span>
|
||||
</div>
|
||||
<span class="ecl-label ecl-label--highlight ecl-u-mb-m ecl-u-mt-m ecl-u-mt-m-none">Flash estimate - September 2026</span>
|
||||
<h1 class="ecl-page-header__title ecl-u-mt-none ecl-u-mb-l ">
|
||||
Euro area annual inflation up to 3.8%
|
||||
</h1>
|
||||
</div><p><strong>Euro area</strong> annual inflation is expected to be <span class="variable-text">3.8% in September 2026, up from 3.2% in August</span> according to a flash estimate from <strong>Eurostat, the statistical office of the European Union</strong>.</p><p>Looking at the main components of <strong>euro area</strong> inflation, <span class="variable-text">energy is expected to have the highest annual rate in September (18.8%, compared with 14.3% in August), followed by services (3.2%, compared with 3.0% in August), food, alcohol & tobacco (1.4%, compared with 1.1% in August) and non-energy industrial goods (1.1%, compared with 1.2% in August)</span>.</p><p><img class="chart"></p><table>
|
||||
<tbody>
|
||||
<tr>
|
||||
<th class="xl64 title"><p>Euro area annual inflation and its components (%)</p></th>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="datalabel"><p></p></th>
|
||||
<th class="datalabel border-right"><p><strong>Weights (‰)</strong></p></th>
|
||||
<th class="xl64 datalabel border-right"><p><strong>Annual rate</strong></p></th>
|
||||
<th class="datalabel"><p><strong>Monthly rate</strong></p></th>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="datalabel"><p></p></th>
|
||||
<th class="datalabel border-right"><p><strong>2026</strong></p></th>
|
||||
<th class="datalabel border-right"><p><strong>Sep 25</strong></p></th>
|
||||
<th class="datalabel"><p><strong>Apr 26</strong></p></th>
|
||||
<th class="datalabel"><p><strong>May 26</strong></p></th>
|
||||
<th class="datalabel"><p><strong>Jun 26</strong></p></th>
|
||||
<th class="datalabel"><p><strong>Jul 26</strong></p></th>
|
||||
<th class="datalabel"><p><strong>Aug 26</strong></p></th>
|
||||
<th class="datalabel border-right"><p><strong>Sep 26</strong></p></th>
|
||||
<th class="datalabel"><p><strong>Sep 26</strong></p></th>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="vertical-header highlight"><p><strong>All-items HICP</strong></p></th>
|
||||
<td class="datalabel border-right highlight"><p>1000.0</p></td>
|
||||
<td class="datalabel border-right highlight"><p>2.2</p></td>
|
||||
<td class="datalabel highlight"><p>3.0</p></td>
|
||||
<td class="datalabel highlight"><p>3.2</p></td>
|
||||
<td class="datalabel highlight"><p>2.8</p></td>
|
||||
<td class="datalabel highlight"><p>2.9</p></td>
|
||||
<td class="datalabel highlight"><p>3.2</p></td>
|
||||
<td class="datalabel border-right highlight"><p><strong>3.8e</strong></p></td>
|
||||
<td class="datalabel highlight"><p>0.6e</p></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="vertical-header"><p><strong>All-items excluding:</strong></p><p><strong>energy</strong></p></th>
|
||||
<td class="datalabel border-right"><p>909.7</p></td>
|
||||
<td class="datalabel border-right"><p>2.5</p></td>
|
||||
<td class="datalabel"><p>2.2</p></td>
|
||||
<td class="datalabel"><p>2.4</p></td>
|
||||
<td class="datalabel"><p>2.2</p></td>
|
||||
<td class="datalabel"><p>2.2</p></td>
|
||||
<td class="datalabel"><p>2.1</p></td>
|
||||
<td class="datalabel border-right"><p><strong>2.3e</strong></p></td>
|
||||
<td class="datalabel"><p>0.2e</p></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="vertical-header"><p><strong>energy, unprocessed food</strong></p></th>
|
||||
<td class="datalabel border-right"><p>858.3</p></td>
|
||||
<td class="datalabel border-right"><p>2.4</p></td>
|
||||
<td class="datalabel"><p>2.1</p></td>
|
||||
<td class="datalabel"><p>2.3</p></td>
|
||||
<td class="datalabel"><p>2.1</p></td>
|
||||
<td class="datalabel"><p>2.2</p></td>
|
||||
<td class="datalabel"><p>2.1</p></td>
|
||||
<td class="datalabel border-right"><p><strong>2.2e</strong></p></td>
|
||||
<td class="datalabel"><p>0.2e</p></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="vertical-header"><p><strong>energy, food, alcohol & tobacco</strong></p></th>
|
||||
<td class="datalabel border-right"><p>720.4</p></td>
|
||||
<td class="datalabel border-right"><p>2.4</p></td>
|
||||
<td class="datalabel"><p>2.2</p></td>
|
||||
<td class="datalabel"><p>2.6</p></td>
|
||||
<td class="datalabel"><p>2.4</p></td>
|
||||
<td class="datalabel"><p>2.5</p></td>
|
||||
<td class="datalabel"><p>2.4</p></td>
|
||||
<td class="datalabel border-right"><p><strong>2.5e</strong></p></td>
|
||||
<td class="datalabel"><p>0.2e</p></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="vertical-header highlight"><p><strong>Food, alcohol & tobacco</strong></p></th>
|
||||
<td class="datalabel border-right highlight"><p>189.4</p></td>
|
||||
<td class="datalabel border-right highlight"><p>3.0</p></td>
|
||||
<td class="datalabel highlight"><p>2.4</p></td>
|
||||
<td class="datalabel highlight"><p>1.9</p></td>
|
||||
<td class="datalabel highlight"><p>1.5</p></td>
|
||||
<td class="datalabel highlight"><p>1.2</p></td>
|
||||
<td class="datalabel highlight"><p>1.1</p></td>
|
||||
<td class="datalabel border-right highlight"><p><strong>1.4e</strong></p></td>
|
||||
<td class="datalabel highlight"><p>0.2e</p></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="vertical-header"><p><strong>processed food, alcohol & tobacco</strong></p></th>
|
||||
<td class="datalabel border-right"><p>137.9</p></td>
|
||||
<td class="datalabel border-right"><p>2.7</p></td>
|
||||
<td class="datalabel"><p>1.6</p></td>
|
||||
<td class="datalabel"><p>1.1</p></td>
|
||||
<td class="datalabel"><p>0.9</p></td>
|
||||
<td class="datalabel"><p>0.7</p></td>
|
||||
<td class="datalabel"><p>0.5</p></td>
|
||||
<td class="datalabel border-right"><p><strong>0.4e</strong></p></td>
|
||||
<td class="datalabel"><p>-0.2e</p></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="vertical-header"><p><strong>unprocessed food</strong></p></th>
|
||||
<td class="datalabel border-right"><p>51.4</p></td>
|
||||
<td class="datalabel border-right"><p>3.9</p></td>
|
||||
<td class="datalabel"><p>4.6</p></td>
|
||||
<td class="datalabel"><p>4.0</p></td>
|
||||
<td class="datalabel"><p>3.1</p></td>
|
||||
<td class="datalabel"><p>2.4</p></td>
|
||||
<td class="datalabel"><p>2.7</p></td>
|
||||
<td class="datalabel border-right"><p><strong>4.0e</strong></p></td>
|
||||
<td class="datalabel"><p>1.3e</p></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="vertical-header highlight"><p><strong>Energy</strong></p></th>
|
||||
<td class="datalabel border-right highlight"><p>90.3</p></td>
|
||||
<td class="datalabel border-right highlight"><p>-0.4</p></td>
|
||||
<td class="datalabel highlight"><p>10.8</p></td>
|
||||
<td class="datalabel highlight"><p>10.8</p></td>
|
||||
<td class="datalabel highlight"><p>8.5</p></td>
|
||||
<td class="datalabel highlight"><p>10.3</p></td>
|
||||
<td class="datalabel highlight"><p>14.3</p></td>
|
||||
<td class="datalabel border-right highlight"><p><strong>18.8e</strong></p></td>
|
||||
<td class="datalabel highlight"><p>3.9e</p></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="vertical-header highlight"><p><strong>Non-energy industrial goods</strong></p></th>
|
||||
<td class="datalabel border-right highlight"><p>252.2</p></td>
|
||||
<td class="datalabel border-right highlight"><p>0.7</p></td>
|
||||
<td class="datalabel highlight"><p>0.8</p></td>
|
||||
<td class="datalabel highlight"><p>0.9</p></td>
|
||||
<td class="datalabel highlight"><p>0.7</p></td>
|
||||
<td class="datalabel highlight"><p>0.9</p></td>
|
||||
<td class="datalabel highlight"><p>1.2</p></td>
|
||||
<td class="datalabel border-right highlight"><p><strong>1.1e</strong></p></td>
|
||||
<td class="datalabel highlight"><p>2.1e</p></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="vertical-header highlight"><p><strong>Services</strong></p></th>
|
||||
<td class="datalabel border-right highlight"><p>468.2</p></td>
|
||||
<td class="datalabel border-right highlight"><p>3.2</p></td>
|
||||
<td class="datalabel highlight"><p>3.0</p></td>
|
||||
<td class="datalabel highlight"><p>3.5</p></td>
|
||||
<td class="datalabel highlight"><p>3.2</p></td>
|
||||
<td class="datalabel highlight"><p>3.3</p></td>
|
||||
<td class="datalabel highlight"><p>3.0</p></td>
|
||||
<td class="datalabel border-right highlight"><p><strong>3.2e</strong></p></td>
|
||||
<td class="datalabel highlight"><p>-0.7e</p></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="footer notes"><p>e estimated</p><p>Source dataset: <a>prc_hicp_minr</a> and <a>prc_hicp_iw</a></p><p><img></p></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table><table>
|
||||
<tbody>
|
||||
<tr>
|
||||
<th class="title"><p>Inflation rates (%) measured by the HICP</p></th>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="xl73 datalabel"><p></p></th>
|
||||
<th class="xl67 datalabel border-right"><p><strong>Annual rate</strong></p></th>
|
||||
<th class="xl67 datalabel"><p><strong>Monthly rate</strong></p></th>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="xl73 datalabel"><p></p></th>
|
||||
<th class="datalabel border-right"><p><strong>Sep 25</strong></p></th>
|
||||
<th class="datalabel"><p><strong>Apr 26</strong></p></th>
|
||||
<th class="datalabel"><p><strong>May 26</strong></p></th>
|
||||
<th class="datalabel"><p><strong>Jun 26</strong></p></th>
|
||||
<th class="datalabel"><p><strong>Jul 26</strong></p></th>
|
||||
<th class="datalabel"><p><strong>Aug 26</strong></p></th>
|
||||
<th class="datalabel border-right"><p><strong>Sep 26</strong></p></th>
|
||||
<th class="xl72 datalabel"><p><strong>Sep 26</strong></p></th>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="vertical-header"><p><strong>Belgium</strong></p></th>
|
||||
<td class="border-right"><p>2.7</p></td>
|
||||
<td class=""><p>4.2</p></td>
|
||||
<td class=""><p>4.0</p></td>
|
||||
<td class=""><p>3.3</p></td>
|
||||
<td class=""><p>3.6</p></td>
|
||||
<td class=""><p>4.2</p></td>
|
||||
<td class="border-right"><p><strong>4.6e</strong></p></td>
|
||||
<td class=""><p>0.1e</p></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="vertical-header"><p><strong>Bulgaria</strong></p></th>
|
||||
<td class="border-right"><p>4.0</p></td>
|
||||
<td class=""><p>6.0</p></td>
|
||||
<td class=""><p>6.3</p></td>
|
||||
<td class=""><p>5.2</p></td>
|
||||
<td class=""><p>4.4</p></td>
|
||||
<td class=""><p>5.0</p></td>
|
||||
<td class="border-right"><p><strong>5.6e</strong></p></td>
|
||||
<td class=""><p>-0.1e</p></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="vertical-header"><p><strong>Germany</strong></p></th>
|
||||
<td class="border-right"><p>2.3</p></td>
|
||||
<td class=""><p>2.9</p></td>
|
||||
<td class=""><p>2.7</p></td>
|
||||
<td class=""><p>2.4</p></td>
|
||||
<td class=""><p>2.8</p></td>
|
||||
<td class=""><p>2.9</p></td>
|
||||
<td class="border-right"><p><strong>3.3e</strong></p></td>
|
||||
<td class=""><p>0.6e</p></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="vertical-header"><p><strong>Estonia</strong></p></th>
|
||||
<td class="border-right"><p>5.3</p></td>
|
||||
<td class=""><p>3.2</p></td>
|
||||
<td class=""><p>3.6</p></td>
|
||||
<td class=""><p>2.0</p></td>
|
||||
<td class=""><p>2.0</p></td>
|
||||
<td class=""><p>1.3</p></td>
|
||||
<td class="border-right"><p><strong>3.0e</strong></p></td>
|
||||
<td class=""><p>0.5e</p></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="vertical-header"><p><strong>Ireland</strong></p></th>
|
||||
<td class="border-right"><p>2.7</p></td>
|
||||
<td class=""><p>3.6</p></td>
|
||||
<td class=""><p>3.5</p></td>
|
||||
<td class=""><p>3.2</p></td>
|
||||
<td class=""><p>3.1</p></td>
|
||||
<td class=""><p>3.4</p></td>
|
||||
<td class="border-right"><p><strong>3.8e</strong></p></td>
|
||||
<td class=""><p>0.2e</p></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="vertical-header"><p><strong>Greece</strong></p></th>
|
||||
<td class="border-right"><p>1.8</p></td>
|
||||
<td class=""><p>4.6</p></td>
|
||||
<td class=""><p>4.9</p></td>
|
||||
<td class=""><p>3.9</p></td>
|
||||
<td class=""><p>2.7</p></td>
|
||||
<td class=""><p>3.7</p></td>
|
||||
<td class="border-right"><p><strong>5.1e</strong></p></td>
|
||||
<td class=""><p>1.8e</p></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="vertical-header"><p><strong>Spain</strong></p></th>
|
||||
<td class="border-right"><p>3.0</p></td>
|
||||
<td class=""><p>3.5</p></td>
|
||||
<td class=""><p>3.6</p></td>
|
||||
<td class=""><p>3.6</p></td>
|
||||
<td class=""><p>3.9</p></td>
|
||||
<td class=""><p>4.6</p></td>
|
||||
<td class="border-right"><p><strong>5.0e</strong></p></td>
|
||||
<td class=""><p>0.6e</p></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="vertical-header"><p><strong>France</strong></p></th>
|
||||
<td class="border-right"><p>1.1</p></td>
|
||||
<td class=""><p>2.5</p></td>
|
||||
<td class=""><p>2.8</p></td>
|
||||
<td class=""><p>2.0</p></td>
|
||||
<td class=""><p>2.4</p></td>
|
||||
<td class=""><p>2.6</p></td>
|
||||
<td class="border-right"><p><strong>3.4e</strong></p></td>
|
||||
<td class=""><p>-0.4e</p></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="vertical-header"><p><strong>Croatia</strong></p></th>
|
||||
<td class="border-right"><p>4.6</p></td>
|
||||
<td class=""><p>5.4</p></td>
|
||||
<td class=""><p>4.9</p></td>
|
||||
<td class=""><p>4.2</p></td>
|
||||
<td class=""><p>3.6</p></td>
|
||||
<td class=""><p>3.7</p></td>
|
||||
<td class="border-right"><p><strong>4.3e</strong></p></td>
|
||||
<td class=""><p>0.0e</p></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="vertical-header"><p><strong>Italy</strong></p></th>
|
||||
<td class="border-right"><p>1.7</p></td>
|
||||
<td class=""><p>2.8</p></td>
|
||||
<td class=""><p>3.2</p></td>
|
||||
<td class=""><p>3.0</p></td>
|
||||
<td class=""><p>2.9</p></td>
|
||||
<td class=""><p>3.2</p></td>
|
||||
<td class="border-right"><p><strong>4.1e</strong></p></td>
|
||||
<td class=""><p>2.0e</p></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="vertical-header"><p><strong>Cyprus</strong></p></th>
|
||||
<td class="border-right"><p>0.0</p></td>
|
||||
<td class=""><p>3.0</p></td>
|
||||
<td class=""><p>3.5</p></td>
|
||||
<td class=""><p>4.1</p></td>
|
||||
<td class=""><p>4.4</p></td>
|
||||
<td class=""><p>5.2</p></td>
|
||||
<td class="border-right"><p><strong>5.2e</strong></p></td>
|
||||
<td class=""><p>-0.4e</p></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="vertical-header"><p><strong>Latvia</strong></p></th>
|
||||
<td class="border-right"><p>4.2</p></td>
|
||||
<td class=""><p>2.9</p></td>
|
||||
<td class=""><p>3.5</p></td>
|
||||
<td class=""><p>3.3</p></td>
|
||||
<td class=""><p>2.5</p></td>
|
||||
<td class=""><p>3.0</p></td>
|
||||
<td class="border-right"><p><strong>2.9e</strong></p></td>
|
||||
<td class=""><p>0.1e</p></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="vertical-header"><p><strong>Lithuania</strong></p></th>
|
||||
<td class="border-right"><p>3.7</p></td>
|
||||
<td class=""><p>4.9</p></td>
|
||||
<td class=""><p>5.1</p></td>
|
||||
<td class=""><p>5.4</p></td>
|
||||
<td class=""><p>5.4</p></td>
|
||||
<td class=""><p>5.6</p></td>
|
||||
<td class="border-right"><p><strong>6.1e</strong></p></td>
|
||||
<td class=""><p>0.9e</p></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="vertical-header"><p><strong>Luxembourg</strong></p></th>
|
||||
<td class="border-right"><p>3.1</p></td>
|
||||
<td class=""><p>5.2</p></td>
|
||||
<td class=""><p>4.5</p></td>
|
||||
<td class=""><p>3.7</p></td>
|
||||
<td class=""><p>3.4</p></td>
|
||||
<td class=""><p>4.0</p></td>
|
||||
<td class="border-right"><p><strong>5.2e</strong></p></td>
|
||||
<td class=""><p>1.0e</p></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="vertical-header"><p><strong>Malta</strong></p></th>
|
||||
<td class="border-right"><p>2.4</p></td>
|
||||
<td class=""><p>2.5</p></td>
|
||||
<td class=""><p>2.1</p></td>
|
||||
<td class=""><p>2.0</p></td>
|
||||
<td class=""><p>2.1</p></td>
|
||||
<td class=""><p>2.0</p></td>
|
||||
<td class="border-right"><p><strong>2.4e</strong></p></td>
|
||||
<td class=""><p>-0.9e</p></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="vertical-header"><p><strong>Netherlands</strong></p></th>
|
||||
<td class="border-right"><p>3.0</p></td>
|
||||
<td class=""><p>2.5</p></td>
|
||||
<td class=""><p>3.4</p></td>
|
||||
<td class=""><p>2.5</p></td>
|
||||
<td class=""><p>3.0</p></td>
|
||||
<td class=""><p>2.8</p></td>
|
||||
<td class="border-right"><p><strong>3.0e</strong></p></td>
|
||||
<td class=""><p>-0.1e</p></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="vertical-header"><p><strong>Austria</strong></p></th>
|
||||
<td class="border-right"><p>3.9</p></td>
|
||||
<td class=""><p>3.4</p></td>
|
||||
<td class=""><p>3.7</p></td>
|
||||
<td class=""><p>3.2</p></td>
|
||||
<td class=""><p>2.7</p></td>
|
||||
<td class=""><p>2.9</p></td>
|
||||
<td class="border-right"><p><strong>3.5e</strong></p></td>
|
||||
<td class=""><p>0.6e</p></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="vertical-header"><p><strong>Portugal</strong></p></th>
|
||||
<td class="border-right"><p>1.9</p></td>
|
||||
<td class=""><p>3.3</p></td>
|
||||
<td class=""><p>3.1</p></td>
|
||||
<td class=""><p>3.1</p></td>
|
||||
<td class=""><p>3.1</p></td>
|
||||
<td class=""><p>3.6</p></td>
|
||||
<td class="border-right"><p><strong>3.6e</strong></p></td>
|
||||
<td class=""><p>1.0e</p></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="vertical-header"><p><strong>Slovenia</strong></p></th>
|
||||
<td class="border-right"><p>2.8</p></td>
|
||||
<td class=""><p>3.4</p></td>
|
||||
<td class=""><p>3.8</p></td>
|
||||
<td class=""><p>3.7</p></td>
|
||||
<td class=""><p>3.0</p></td>
|
||||
<td class=""><p>3.4</p></td>
|
||||
<td class="border-right"><p><strong>3.7</strong></p></td>
|
||||
<td class=""><p>0.3</p></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="vertical-header"><p><strong>Slovakia</strong></p></th>
|
||||
<td class="border-right"><p>4.6</p></td>
|
||||
<td class=""><p>4.1</p></td>
|
||||
<td class=""><p>4.0</p></td>
|
||||
<td class=""><p>3.5</p></td>
|
||||
<td class=""><p>3.2</p></td>
|
||||
<td class=""><p>3.1</p></td>
|
||||
<td class="border-right"><p><strong>3.1e</strong></p></td>
|
||||
<td class=""><p>0.2e</p></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="vertical-header"><p><strong>Finland</strong></p></th>
|
||||
<td class="border-right"><p>2.2</p></td>
|
||||
<td class=""><p>2.4</p></td>
|
||||
<td class=""><p>2.8</p></td>
|
||||
<td class=""><p>2.7</p></td>
|
||||
<td class=""><p>2.5</p></td>
|
||||
<td class=""><p>2.4</p></td>
|
||||
<td class="border-right"><p><strong>2.6e</strong></p></td>
|
||||
<td class=""><p>0.6e</p></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="footer notes"><p>e estimated</p><p>Source dataset: <a>prc_hicp_minr</a></p><p><span><img></span></p></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table><p>The euro area inflation flash estimate is issued at the end of each reference month.</p><p>The complete set of harmonised indices of consumer prices (HICP) for the euro area, EU and Member States is released around the middle of the month following the reference month.</p><p>The next release with full data for <span class="variable-text">September 2026 is scheduled for 16 October 2026</span>.</p><p><strong>Annual inflation</strong> is the price change of consumer goods and services between the current month and the same month of the previous year. <strong>Monthly inflation </strong>is the price change between the current month and the previous month.</p><p>Up to December 31, 2025, the <strong>euro area</strong> included Belgium, Germany, Estonia, Ireland, Greece, Spain, France, Croatia, Italy, Cyprus, Latvia, Lithuania, Luxembourg, Malta, the Netherlands, Austria, Portugal, Slovenia, Slovakia and Finland <strong>(EA20)</strong>. From 1 January 2026, the <strong>euro area</strong> also includes Bulgaria <strong>(EA21)</strong>.</p><p>The aggregate data series published in this Euro indicator release refer to the evolving composition of the euro area. Thus, Euro indicator data for months up to December 2025 represent EA20 series, while Euro indicator data for January 2026 onwards represent EA21 series. Changes in the composition of the euro area are incorporated using a chain index formula.</p><p><a>Website section on inflation</a></p><p><a>Database section on inflation</a></p><p><a>Statistics Explained article on inflation in the euro area</a></p><p><a>Metadata on inflation</a></p><p><a>Euro indicators dashboard</a></p><p><a>Release calendar for Euro indicators</a></p><p><a>European Statistics Code of Practice</a></p><p class="ecl-u-type-heading-5">Media requests</p><p class="ecl-u-type-paragraph ecl-u-mb-none">
|
||||
<span>Eurostat Media Support</span>
|
||||
</p><p class="ecl-u-type-paragraph ecl-u-mb-none">
|
||||
<span>E-mail: <a class="ecl-link">[email protected]</a>
|
||||
</span>
|
||||
</p><p class="ecl-u-type-heading-5">Further information on data</p><p class="ecl-u-type-paragraph ecl-u-mb-none">
|
||||
<span>E-mail: <a class="ecl-link">[email protected]</a>
|
||||
</span>
|
||||
</p></body></html>
|
||||
+237
@@ -0,0 +1,237 @@
|
||||
<html><head></head><body><meta property="article:published_time" content="2026-07-30T09:00:00Z"><div class="ecl-page-header__info ">
|
||||
<div class="ecl-page-header__meta ">
|
||||
<span class="ecl-page-header__meta-item">Euro indicators</span>
|
||||
<span class="ecl-page-header__meta-item">
|
||||
30 July 2026
|
||||
</span>
|
||||
<span class="ecl-page-header__meta-item">Next release: 30 October 2026</span>
|
||||
</div>
|
||||
<span class="ecl-label ecl-label--highlight ecl-u-mb-m ecl-u-mt-m ecl-u-mt-m-none">Preliminary flash estimate for the second quarter of 2026</span>
|
||||
<h1 class="ecl-page-header__title ecl-u-mt-none ecl-u-mb-l ">
|
||||
GDP up by 0.4% in the euro area and by 0.5% in the EU
|
||||
</h1>
|
||||
</div><p>In the second quarter of 2026, seasonally adjusted GDP increased by 0.4% in the <strong>euro area</strong> and by 0.5% in the <strong>EU</strong>, compared with the previous quarter, according to a preliminary flash estimate published by <strong>Eurostat, the statistical office of the European Union</strong>. In the first quarter of 2026, GDP had remained stable in the <strong>euro area</strong> and had increased by 0.1% in the <strong>EU</strong>.</p><p>These preliminary GDP flash estimates are based on data sources that are incomplete and subject to further revisions.</p><p><img class="chart"></p><p>Compared with the same quarter of the previous year, seasonally adjusted GDP increased by 1.0% in the <strong>euro area</strong> and by 1.2% in the <strong>EU</strong> in the second quarter of 2026, after +0.5% in the <strong>euro area</strong> and +0.8% in the <strong>EU</strong> in the previous quarter.</p><p><img class="chart"></p><p>Among the Member States for which data are available for the second quarter of 2026, <strong>Ireland</strong> (+3.9%) recorded the highest increase compared to the previous quarter, followed by <strong>Lithuania</strong> (+1.7%) and <strong>Sweden</strong> (+1.4%). The lowest growth rates were recorded in <strong>Belgium</strong> and <strong>Austria</strong> (both 0.0%). The year-on-year growth rate was positive for fourteen countries and negative for one country.</p><table>
|
||||
<tbody>
|
||||
<tr>
|
||||
<th class="title numeric"><p>Growth rates of GDP in volume</p><p>(based on seasonally adjusted* data)</p></th>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="datalabel numeric"><p></p></th>
|
||||
<th class="datalabel border-right"><p><strong>Percentage change compared with the previous quarter</strong></p></th>
|
||||
<th class="datalabel numeric"><p><strong>Percentage change compared with the same quarter of the previous year</strong></p></th>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="datalabel numeric"><p></p></th>
|
||||
<th class="datalabel"><p><strong>2025Q3</strong></p></th>
|
||||
<th class="datalabel"><p><strong>2025Q4</strong></p></th>
|
||||
<th class="datalabel"><p><strong>2026Q1</strong></p></th>
|
||||
<th class="datalabel border-right"><p><strong>2026Q2</strong></p></th>
|
||||
<th class="datalabel"><p><strong>2025Q3</strong></p></th>
|
||||
<th class="datalabel"><p><strong>2025Q4</strong></p></th>
|
||||
<th class="datalabel"><p><strong>2026Q1</strong></p></th>
|
||||
<th class="datalabel numeric"><p><strong>2026Q2</strong></p></th>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="numeric vertical-header highlight"><p><strong>Euro area</strong></p></th>
|
||||
<td class="highlight"><p>0.3</p></td>
|
||||
<td class="highlight"><p>0.2</p></td>
|
||||
<td class="highlight"><p>0.0</p></td>
|
||||
<td class="border-right highlight"><p><strong>0.4</strong></p></td>
|
||||
<td class="highlight"><p>1.2</p></td>
|
||||
<td class="highlight"><p>1.1</p></td>
|
||||
<td class="highlight"><p>0.5</p></td>
|
||||
<td class="numeric highlight"><p><strong>1.0</strong></p></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="numeric vertical-header highlight"><p><strong>EU</strong></p></th>
|
||||
<td class="highlight"><p>0.4</p></td>
|
||||
<td class="highlight"><p>0.2</p></td>
|
||||
<td class="highlight"><p>0.1</p></td>
|
||||
<td class="border-right highlight"><p><strong>0.5</strong></p></td>
|
||||
<td class="highlight"><p>1.5</p></td>
|
||||
<td class="highlight"><p>1.3</p></td>
|
||||
<td class="highlight"><p>0.8</p></td>
|
||||
<td class="numeric highlight"><p><strong>1.2</strong></p></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="numeric vertical-header"><p><strong>Belgium</strong></p></th>
|
||||
<td class=""><p>0.2</p></td>
|
||||
<td class=""><p>0.1</p></td>
|
||||
<td class=""><p>0.2</p></td>
|
||||
<td class="border-right"><p><strong>0.0</strong></p></td>
|
||||
<td class=""><p>1.0</p></td>
|
||||
<td class=""><p>0.9</p></td>
|
||||
<td class=""><p>0.8</p></td>
|
||||
<td class="numeric"><p><strong>0.5</strong></p></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="numeric vertical-header"><p><strong>Czechia</strong></p></th>
|
||||
<td class=""><p>0.7</p></td>
|
||||
<td class=""><p>0.7</p></td>
|
||||
<td class=""><p>0.2</p></td>
|
||||
<td class="border-right"><p><strong>0.4</strong></p></td>
|
||||
<td class=""><p>2.8</p></td>
|
||||
<td class=""><p>2.8</p></td>
|
||||
<td class=""><p>2.2</p></td>
|
||||
<td class="numeric"><p><strong>2.0</strong></p></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="numeric vertical-header"><p><strong>Germany</strong></p></th>
|
||||
<td class=""><p>0.0</p></td>
|
||||
<td class=""><p>0.3</p></td>
|
||||
<td class=""><p>0.4</p></td>
|
||||
<td class="border-right"><p><strong>0.2</strong></p></td>
|
||||
<td class=""><p>0.3</p></td>
|
||||
<td class=""><p>0.3</p></td>
|
||||
<td class=""><p>0.6</p></td>
|
||||
<td class="numeric"><p><strong>0.9</strong></p></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="numeric vertical-header"><p><strong>Estonia</strong></p></th>
|
||||
<td class=""><p>0.3</p></td>
|
||||
<td class=""><p>0.3</p></td>
|
||||
<td class=""><p>1.1</p></td>
|
||||
<td class="border-right"><p><strong>0.4</strong></p></td>
|
||||
<td class=""><p>1.0</p></td>
|
||||
<td class=""><p>1.2</p></td>
|
||||
<td class=""><p>2.4</p></td>
|
||||
<td class="numeric"><p><strong>2.1</strong></p></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="numeric vertical-header"><p><strong>Ireland***</strong></p></th>
|
||||
<td class=""><p>1.3</p></td>
|
||||
<td class=""><p>-3.6</p></td>
|
||||
<td class=""><p>-7.0</p></td>
|
||||
<td class="border-right"><p><strong>3.9</strong></p></td>
|
||||
<td class=""><p>5.2</p></td>
|
||||
<td class=""><p>-0.2</p></td>
|
||||
<td class=""><p>-13.2</p></td>
|
||||
<td class="numeric"><p><strong>-5.6</strong></p></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="numeric vertical-header"><p><strong>Spain</strong></p></th>
|
||||
<td class=""><p>0.6</p></td>
|
||||
<td class=""><p>0.8</p></td>
|
||||
<td class=""><p>0.6</p></td>
|
||||
<td class="border-right"><p><strong>0.7</strong></p></td>
|
||||
<td class=""><p>2.7</p></td>
|
||||
<td class=""><p>2.7</p></td>
|
||||
<td class=""><p>2.7</p></td>
|
||||
<td class="numeric"><p><strong>2.7</strong></p></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="numeric vertical-header"><p><strong>France</strong></p></th>
|
||||
<td class=""><p>0.4</p></td>
|
||||
<td class=""><p>0.3</p></td>
|
||||
<td class=""><p>-0.1</p></td>
|
||||
<td class="border-right"><p><strong>0.2</strong></p></td>
|
||||
<td class=""><p>0.8</p></td>
|
||||
<td class=""><p>1.1</p></td>
|
||||
<td class=""><p>0.8</p></td>
|
||||
<td class="numeric"><p><strong>0.7</strong></p></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="numeric vertical-header"><p><strong>Italy</strong></p></th>
|
||||
<td class=""><p>0.2</p></td>
|
||||
<td class=""><p>0.3</p></td>
|
||||
<td class=""><p>0.3</p></td>
|
||||
<td class="border-right"><p><strong>0.2</strong></p></td>
|
||||
<td class=""><p>0.7</p></td>
|
||||
<td class=""><p>0.8</p></td>
|
||||
<td class=""><p>0.8</p></td>
|
||||
<td class="numeric"><p><strong>1.0</strong></p></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="numeric vertical-header"><p><strong>Lithuania</strong></p></th>
|
||||
<td class=""><p>0.3</p></td>
|
||||
<td class=""><p>1.9</p></td>
|
||||
<td class=""><p>-0.1</p></td>
|
||||
<td class="border-right"><p><strong>1.7</strong></p></td>
|
||||
<td class=""><p>2.2</p></td>
|
||||
<td class=""><p>3.3</p></td>
|
||||
<td class=""><p>2.8</p></td>
|
||||
<td class="numeric"><p><strong>3.8</strong></p></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="numeric vertical-header"><p><strong>Hungary</strong></p></th>
|
||||
<td class=""><p>0.2</p></td>
|
||||
<td class=""><p>0.2</p></td>
|
||||
<td class=""><p>0.8</p></td>
|
||||
<td class="border-right"><p><strong>0.4</strong></p></td>
|
||||
<td class=""><p>0.9</p></td>
|
||||
<td class=""><p>0.8</p></td>
|
||||
<td class=""><p>1.7</p></td>
|
||||
<td class="numeric"><p><strong>1.6</strong></p></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="numeric vertical-header"><p><strong>Netherlands**</strong></p></th>
|
||||
<td class=""><p>0.4</p></td>
|
||||
<td class=""><p>0.4</p></td>
|
||||
<td class=""><p>0.3</p></td>
|
||||
<td class="border-right"><p><strong>0.4</strong></p></td>
|
||||
<td class=""><p>1.4</p></td>
|
||||
<td class=""><p>1.6</p></td>
|
||||
<td class=""><p>1.4</p></td>
|
||||
<td class="numeric"><p><strong>1.3</strong></p></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="numeric vertical-header"><p><strong>Austria</strong></p></th>
|
||||
<td class=""><p>0.4</p></td>
|
||||
<td class=""><p>0.2</p></td>
|
||||
<td class=""><p>0.2</p></td>
|
||||
<td class="border-right"><p><strong>0.0</strong></p></td>
|
||||
<td class=""><p>1.3</p></td>
|
||||
<td class=""><p>1.1</p></td>
|
||||
<td class=""><p>0.9</p></td>
|
||||
<td class="numeric"><p><strong>0.8</strong></p></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="numeric vertical-header"><p><strong>Portugal</strong></p></th>
|
||||
<td class=""><p>0.6</p></td>
|
||||
<td class=""><p>0.9</p></td>
|
||||
<td class=""><p>0.1</p></td>
|
||||
<td class="border-right"><p><strong>0.8</strong></p></td>
|
||||
<td class=""><p>2.2</p></td>
|
||||
<td class=""><p>1.9</p></td>
|
||||
<td class=""><p>2.4</p></td>
|
||||
<td class="numeric"><p><strong>2.5</strong></p></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="numeric vertical-header"><p><strong>Finland**</strong></p></th>
|
||||
<td class=""><p>-0.1</p></td>
|
||||
<td class=""><p>0.5</p></td>
|
||||
<td class=""><p>0.9</p></td>
|
||||
<td class="border-right"><p><strong>0.9</strong></p></td>
|
||||
<td class=""><p>0.4</p></td>
|
||||
<td class=""><p>0.6</p></td>
|
||||
<td class=""><p>1.3</p></td>
|
||||
<td class="numeric"><p><strong>2.5</strong></p></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="numeric vertical-header"><p><strong>Sweden**</strong></p></th>
|
||||
<td class=""><p>0.5</p></td>
|
||||
<td class=""><p>0.9</p></td>
|
||||
<td class=""><p>0.0</p></td>
|
||||
<td class="border-right"><p><strong>1.4</strong></p></td>
|
||||
<td class=""><p>2.3</p></td>
|
||||
<td class=""><p>2.0</p></td>
|
||||
<td class=""><p>2.0</p></td>
|
||||
<td class="numeric"><p><strong>2.8</strong></p></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="footer notes numeric"><p><span>: Data not available</span></p><p><span>* Growth rates to the previous quarter and to the same quarter of the previous year presented in this table are both based on seasonally and calendar adjusted figures, except where indicated. Unadjusted data are not available for all Member States which are included in GDP flash estimates.</span></p><p><span>** Percentage change compared with the same quarter of the previous year calculated from calendar adjusted data.</span></p><p><span>*** Irish GDP flash estimate is categorised as a </span><a><span>CSO Frontier Series Output</span></a><span>. Particular care must be taken when interpreting the statistics as it may use new methods which are under development and/or data sources which may be incomplete, for example new administrative data sources.</span></p><p><span>Source datasets: </span><a><span>namq_10_gdp</span></a></p><p><img></p></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table><p>The next estimates for the second quarter of 2026 will be released on 14 August 2026.</p><p></p><p><a>Revisions</a><span><span> </span></span>of quarterly GDP estimates are continuously monitored<span><span>. Further information can be found on Eurostat </span></span><a>website</a><span><span>.</span></span></p><p>With this preliminary flash estimate, euro area and EU GDP figures for earlier quarters are not revised.</p><p>All figures presented in this release may be revised with the GDP t+45 flash estimate scheduled for 14 August 2026 and subsequently by Eurostat’s regular estimates of GDP and main aggregates (including employment) scheduled for 7 September 2026 and 20 October 2026.</p><p>The preliminary flash estimate of GDP growth for the second quarter of 2026 presented in this release is based on the data of 19 Member States, covering 96% of euro area GDP and 94% of EU GDP.</p><p>Comprehensive estimates of European main aggregates (including GDP and employment) are based on countries regular transmissions and published around 65 and 110 days after the end of each quarter. To improve the timeliness of key indicators, Eurostat also publishes flash estimates for GDP (after around 30 and 45 days) and employment (after around 45 days). Their compilation is based on estimates provided by EU Member States on a voluntary basis.</p><p>This news release presents preliminary flash estimates for euro area and EU after around 30 days.</p><p>European quarterly national accounts are compiled in accordance with the European System of Accounts 2010 (ESA 2010).</p><p><strong>Gross domestic product (GDP)</strong> at market prices measures the production activity of resident production units. Growth rates are based on chain-linked volumes.</p><p>Two statistical working papers present the preliminary GDP flash methodology for the <a>European estimates</a> and <a>Member States estimates</a>.</p><p><span><span>The method used for compilation of European GDP is the same as for previous releases.</span></span></p><p><strong>Euro area (EA21): </strong>Belgium, Bulgaria, Germany, Estonia, Ireland, Greece, Spain, France, Croatia, Italy, Cyprus, Latvia, Lithuania, Luxembourg, Malta, the Netherlands, Austria, Portugal, Slovenia, Slovakia and Finland.</p><p><strong>European Union (EU 27):</strong> Belgium, Bulgaria, Czechia, Denmark, Germany, Estonia, Ireland, Greece, Spain, France, Croatia, Italy, Cyprus, Latvia, Lithuania, Luxembourg, Hungary, Malta, the Netherlands, Austria, Poland, Portugal, Romania, Slovenia, Slovakia, Finland and Sweden.</p><p></p><p><a>Website section on national accounts</a>, and specifically the page on <a>quarterly national accounts</a></p><p><a>Database section on national accounts</a> and <a>metadata on quarterly national accounts</a></p><p><a>Statistics Explained articles on measuring quarterly GDP</a> and <a>presentation of updated quarterly estimates</a></p><p><a>Country specific metadata</a></p><p><a>European System of Accounts 2010</a></p><p><a>Euro indicators dashboard</a></p><p><a>Release calendar for Euro indicators</a></p><p><a>European Statistics Code of Practice</a></p><p class="ecl-u-type-heading-5">Media requests</p><p class="ecl-u-type-paragraph ecl-u-mb-none">
|
||||
<span>Eurostat Media Support</span>
|
||||
</p><p class="ecl-u-type-paragraph ecl-u-mb-none">
|
||||
<span>E-mail: <a class="ecl-link">[email protected]</a>
|
||||
</span>
|
||||
</p><p class="ecl-u-type-heading-5">Further information on data</p><p class="ecl-u-type-paragraph ecl-u-mb-none">
|
||||
<span>Thierry COURTEL</span>
|
||||
</p><p class="ecl-u-type-paragraph"></p><p class="ecl-u-type-paragraph ecl-u-mb-none">
|
||||
<span>Julio Cesar CABECA</span>
|
||||
</p><p class="ecl-u-type-paragraph ecl-u-mb-none">
|
||||
<span>E-mail: <a class="ecl-link">[email protected]</a>
|
||||
</span>
|
||||
</p></body></html>
|
||||
+1228
File diff suppressed because it is too large.
Load diff
+460
@@ -0,0 +1,460 @@
|
||||
<html><head></head><body><meta property="article:published_time" content="2026-08-14T09:00:00Z"><div class="ecl-page-header__info ">
|
||||
<div class="ecl-page-header__meta ">
|
||||
<span class="ecl-page-header__meta-item">Euro indicators</span>
|
||||
<span class="ecl-page-header__meta-item">
|
||||
14 August 2026
|
||||
</span>
|
||||
<span class="ecl-page-header__meta-item">Next release: 13 November 2026</span>
|
||||
</div>
|
||||
<span class="ecl-label ecl-label--highlight ecl-u-mb-m ecl-u-mt-m ecl-u-mt-m-none">GDP and employment flash estimates for the second quarter of 2026</span>
|
||||
<h1 class="ecl-page-header__title ecl-u-mt-none ecl-u-mb-l ">
|
||||
GDP up by 0.4% and employment up by 0.1% in the euro area
|
||||
</h1>
|
||||
</div><p>In the second quarter of 2026, seasonally adjusted GDP increased by 0.4% in the <strong>euro</strong> <strong>area</strong> and by 0.5% in the <strong>EU</strong>, compared with the previous quarter, according to a flash estimate published by <strong>Eurostat, the statistical office of the European Union</strong>. In the first quarter of 2026, GDP had remained stable in the <strong>euro</strong> <strong>area</strong> and had increased by 0.1% in the <strong>EU</strong>.</p><p><img class="chart"></p><p>Compared with the same quarter of the previous year, seasonally adjusted GDP increased by 1.0% in the <strong>euro area</strong> and by 1.2% in the <strong>EU</strong> in the second quarter of 2026, after +0.5% in the <strong>euro area</strong> and +0.8% in the <strong>EU</strong> in the previous quarter.</p><p><img class="chart"></p><p>During the second quarter of 2026, GDP in the <strong>United States</strong> increased by 0.4% compared to the previous quarter (after +0.5% in the first quarter of 2026). Compared with the same quarter of the previous year, GDP increased by 2.1% (after +2.7% in the previous quarter).</p><p>The number of employed persons increased by 0.1% in both the <strong>euro area</strong> and the <strong>EU</strong> in the second quarter of 2026, compared with the previous quarter. In the first quarter of 2026, employment had increased by 0.1% in the <strong>euro area</strong> and had remained stable in the <strong>EU</strong>.</p><p><img class="chart"></p><p>Compared with the same quarter of the previous year, employment increased by 0.5% in both the <strong>euro area</strong> and the <strong>EU</strong> in the second quarter of 2026, after +0.5% in the <strong>euro area</strong> and +0.6% in the <strong>EU</strong> in the first quarter of 2026.</p><p><img class="chart"></p><p>These data provide a picture of labour input consistent with the output and income measures of national accounts.</p><table>
|
||||
<tbody>
|
||||
<tr>
|
||||
<th class="title"><p>Growth rates of employment in persons</p></th>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="datalabel"><p></p></th>
|
||||
<th class="datalabel border-right"><p><strong>Percentage change compared with the previous quarter (based on seasonally adjusted data)</strong></p></th>
|
||||
<th class="datalabel"><p><strong>Percentage change compared with the same quarter of the previous year (based on unadjusted data)</strong></p></th>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="datalabel"><p></p></th>
|
||||
<th class="datalabel"><p><strong>2025Q3</strong></p></th>
|
||||
<th class="datalabel"><p><strong>2025Q4</strong></p></th>
|
||||
<th class="datalabel"><p><strong>2026Q1</strong></p></th>
|
||||
<th class="datalabel border-right"><p><strong>2026Q2</strong></p></th>
|
||||
<th class="datalabel"><p><strong>2025Q3</strong></p></th>
|
||||
<th class="datalabel"><p><strong>2025Q4</strong></p></th>
|
||||
<th class="datalabel"><p><strong>2026Q1</strong></p></th>
|
||||
<th class="datalabel"><p><strong>2026Q2</strong></p></th>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="vertical-header highlight"><p><strong>Euro area</strong></p></th>
|
||||
<td class="datalabel highlight"><p>0.2</p></td>
|
||||
<td class="datalabel highlight"><p>0.2</p></td>
|
||||
<td class="datalabel highlight"><p>0.1</p></td>
|
||||
<td class="datalabel border-right highlight"><p><strong>0.1</strong></p></td>
|
||||
<td class="datalabel highlight"><p>0.7</p></td>
|
||||
<td class="datalabel highlight"><p>0.7</p></td>
|
||||
<td class="datalabel highlight"><p>0.5</p></td>
|
||||
<td class="datalabel highlight"><p><strong>0.5</strong></p></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="vertical-header highlight"><p><strong>EU</strong></p></th>
|
||||
<td class="datalabel highlight"><p>0.1</p></td>
|
||||
<td class="datalabel highlight"><p>0.2</p></td>
|
||||
<td class="datalabel highlight"><p>0.0</p></td>
|
||||
<td class="datalabel border-right highlight"><p><strong>0.1</strong></p></td>
|
||||
<td class="datalabel highlight"><p>0.6</p></td>
|
||||
<td class="datalabel highlight"><p>0.6</p></td>
|
||||
<td class="datalabel highlight"><p>0.6</p></td>
|
||||
<td class="datalabel highlight"><p><strong>0.5</strong></p></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="footer notes"><p><span>Source datasets: </span><a><span>tec00108</span></a><span> (quarterly change), </span><a><span>teina305</span></a><span> (annual change) and </span><a><span>tec00109</span></a><span> (levels)</span></p><p><img></p></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table><table>
|
||||
<tbody>
|
||||
<tr>
|
||||
<th class="title"><p>Growth rates of GDP in volume</p><p>(based on seasonally adjusted* data)</p></th>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="datalabel"><p></p></th>
|
||||
<th class="datalabel border-right"><p><strong>Percentage change compared with the previous quarter</strong></p></th>
|
||||
<th class=" datalabel "><p><strong>Percentage change compared with the same quarter of the previous year</strong></p></th>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="datalabel"><p></p></th>
|
||||
<th class="datalabel"><p><strong>2025Q3</strong></p></th>
|
||||
<th class="datalabel"><p><strong>2025Q4</strong></p></th>
|
||||
<th class="datalabel"><p><strong>2026Q1</strong></p></th>
|
||||
<th class="datalabel border-right"><p><strong>2026Q2</strong></p></th>
|
||||
<th class="datalabel"><p><strong>2025Q3</strong></p></th>
|
||||
<th class="datalabel"><p><strong>2025Q4</strong></p></th>
|
||||
<th class="datalabel"><p><strong>2026Q1</strong></p></th>
|
||||
<th class="datalabel"><p><strong>2026Q2</strong></p></th>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="vertical-header highlight"><p><strong>Euro area</strong></p></th>
|
||||
<td class="datalabel highlight"><p>0.3</p></td>
|
||||
<td class="datalabel highlight"><p>0.2</p></td>
|
||||
<td class="datalabel highlight"><p>0.0</p></td>
|
||||
<td class="datalabel border-right highlight"><p><strong>0.4</strong></p></td>
|
||||
<td class="datalabel highlight"><p>1.2</p></td>
|
||||
<td class="datalabel highlight"><p>1.1</p></td>
|
||||
<td class="datalabel highlight"><p>0.5</p></td>
|
||||
<td class="datalabel highlight"><p><strong>1.0</strong></p></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="highlight vertical-header"><p><strong>EU</strong></p></th>
|
||||
<td class="datalabel highlight"><p>0.4</p></td>
|
||||
<td class="datalabel highlight"><p>0.2</p></td>
|
||||
<td class="datalabel highlight"><p>0.1</p></td>
|
||||
<td class="datalabel border-right highlight"><p><strong>0.5</strong></p></td>
|
||||
<td class="datalabel highlight"><p>1.5</p></td>
|
||||
<td class="datalabel highlight"><p>1.3</p></td>
|
||||
<td class="datalabel highlight"><p>0.8</p></td>
|
||||
<td class="datalabel highlight"><p><strong>1.2</strong></p></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="vertical-header"><p><strong>Belgium</strong></p></th>
|
||||
<td class="datalabel"><p>0.2</p></td>
|
||||
<td class="datalabel"><p>0.1</p></td>
|
||||
<td class="datalabel"><p>0.2</p></td>
|
||||
<td class="datalabel border-right"><p><strong>0.0</strong></p></td>
|
||||
<td class="datalabel"><p>1.0</p></td>
|
||||
<td class="datalabel"><p>0.9</p></td>
|
||||
<td class="datalabel"><p>0.8</p></td>
|
||||
<td class="datalabel"><p><strong>0.5</strong></p></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="vertical-header"><p><strong>Bulgaria</strong></p></th>
|
||||
<td class="datalabel"><p>0.6</p></td>
|
||||
<td class="datalabel"><p>0.7</p></td>
|
||||
<td class="datalabel"><p>0.7</p></td>
|
||||
<td class="datalabel border-right"><p><strong>0.6</strong></p></td>
|
||||
<td class="datalabel"><p>3.1</p></td>
|
||||
<td class="datalabel"><p>2.9</p></td>
|
||||
<td class="datalabel"><p>2.9</p></td>
|
||||
<td class="datalabel"><p><strong>2.7</strong></p></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="vertical-header"><p><strong>Czechia</strong></p></th>
|
||||
<td class="datalabel"><p>0.7</p></td>
|
||||
<td class="datalabel"><p>0.7</p></td>
|
||||
<td class="datalabel"><p>0.2</p></td>
|
||||
<td class="datalabel border-right"><p><strong>0.4</strong></p></td>
|
||||
<td class="datalabel"><p>2.8</p></td>
|
||||
<td class="datalabel"><p>2.8</p></td>
|
||||
<td class="datalabel"><p>2.2</p></td>
|
||||
<td class="datalabel"><p><strong>2.0</strong></p></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="vertical-header"><p><strong>Denmark</strong></p></th>
|
||||
<td class="datalabel"><p>2.5</p></td>
|
||||
<td class="datalabel"><p>0.5</p></td>
|
||||
<td class="datalabel"><p>1.5</p></td>
|
||||
<td class="datalabel border-right"><p><strong>:</strong></p></td>
|
||||
<td class="datalabel"><p>4.6</p></td>
|
||||
<td class="datalabel"><p>3.2</p></td>
|
||||
<td class="datalabel"><p>6.2</p></td>
|
||||
<td class="datalabel"><p><strong>:</strong></p></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="vertical-header"><p><strong>Germany</strong></p></th>
|
||||
<td class="datalabel"><p>0.0</p></td>
|
||||
<td class="datalabel"><p>0.3</p></td>
|
||||
<td class="datalabel"><p>0.4</p></td>
|
||||
<td class="datalabel border-right"><p><strong>0.2</strong></p></td>
|
||||
<td class="datalabel"><p>0.3</p></td>
|
||||
<td class="datalabel"><p>0.3</p></td>
|
||||
<td class="datalabel"><p>0.6</p></td>
|
||||
<td class="datalabel"><p><strong>0.9</strong></p></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="vertical-header"><p><strong>Estonia</strong></p></th>
|
||||
<td class="datalabel"><p>0.3</p></td>
|
||||
<td class="datalabel"><p>0.3</p></td>
|
||||
<td class="datalabel"><p>1.1</p></td>
|
||||
<td class="datalabel border-right"><p><strong>0.4</strong></p></td>
|
||||
<td class="datalabel"><p>1.0</p></td>
|
||||
<td class="datalabel"><p>1.2</p></td>
|
||||
<td class="datalabel"><p>2.4</p></td>
|
||||
<td class="datalabel"><p><strong>2.1</strong></p></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="vertical-header"><p><strong>Ireland***</strong></p></th>
|
||||
<td class="datalabel"><p>1.3</p></td>
|
||||
<td class="datalabel"><p>-3.6</p></td>
|
||||
<td class="datalabel"><p>-7.0</p></td>
|
||||
<td class="datalabel border-right"><p><strong>3.9</strong></p></td>
|
||||
<td class="datalabel"><p>5.2</p></td>
|
||||
<td class="datalabel"><p>-0.2</p></td>
|
||||
<td class="datalabel"><p>-13.2</p></td>
|
||||
<td class="datalabel"><p><strong>-5.6</strong></p></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="vertical-header"><p><strong>Greece</strong></p></th>
|
||||
<td class="datalabel"><p>0.6</p></td>
|
||||
<td class="datalabel"><p>0.7</p></td>
|
||||
<td class="datalabel"><p>0.2</p></td>
|
||||
<td class="datalabel border-right"><p><strong>:</strong></p></td>
|
||||
<td class="datalabel"><p>2.1</p></td>
|
||||
<td class="datalabel"><p>2.3</p></td>
|
||||
<td class="datalabel"><p>2.0</p></td>
|
||||
<td class="datalabel"><p><strong>:</strong></p></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="vertical-header"><p><strong>Spain</strong></p></th>
|
||||
<td class="datalabel"><p>0.6</p></td>
|
||||
<td class="datalabel"><p>0.8</p></td>
|
||||
<td class="datalabel"><p>0.6</p></td>
|
||||
<td class="datalabel border-right"><p><strong>0.7</strong></p></td>
|
||||
<td class="datalabel"><p>2.7</p></td>
|
||||
<td class="datalabel"><p>2.7</p></td>
|
||||
<td class="datalabel"><p>2.7</p></td>
|
||||
<td class="datalabel"><p><strong>2.7</strong></p></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="vertical-header"><p><strong>France</strong></p></th>
|
||||
<td class="datalabel"><p>0.4</p></td>
|
||||
<td class="datalabel"><p>0.3</p></td>
|
||||
<td class="datalabel"><p>-0.1</p></td>
|
||||
<td class="datalabel border-right"><p><strong>0.2</strong></p></td>
|
||||
<td class="datalabel"><p>0.8</p></td>
|
||||
<td class="datalabel"><p>1.1</p></td>
|
||||
<td class="datalabel"><p>0.8</p></td>
|
||||
<td class="datalabel"><p><strong>0.7</strong></p></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="vertical-header"><p><strong>Croatia</strong></p></th>
|
||||
<td class="datalabel"><p>0.5</p></td>
|
||||
<td class="datalabel"><p>1.2</p></td>
|
||||
<td class="datalabel"><p>0.0</p></td>
|
||||
<td class="datalabel border-right"><p><strong>:</strong></p></td>
|
||||
<td class="datalabel"><p>2.9</p></td>
|
||||
<td class="datalabel"><p>3.5</p></td>
|
||||
<td class="datalabel"><p>2.4</p></td>
|
||||
<td class="datalabel"><p><strong>:</strong></p></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="vertical-header"><p><strong>Italy</strong></p></th>
|
||||
<td class="datalabel"><p>0.2</p></td>
|
||||
<td class="datalabel"><p>0.3</p></td>
|
||||
<td class="datalabel"><p>0.3</p></td>
|
||||
<td class="datalabel border-right"><p><strong>0.2</strong></p></td>
|
||||
<td class="datalabel"><p>0.7</p></td>
|
||||
<td class="datalabel"><p>0.8</p></td>
|
||||
<td class="datalabel"><p>0.8</p></td>
|
||||
<td class="datalabel"><p><strong>1.0</strong></p></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="vertical-header"><p><strong>Cyprus</strong></p></th>
|
||||
<td class="datalabel"><p>0.8</p></td>
|
||||
<td class="datalabel"><p>1.2</p></td>
|
||||
<td class="datalabel"><p>0.5</p></td>
|
||||
<td class="datalabel border-right"><p><strong>0.8</strong></p></td>
|
||||
<td class="datalabel"><p>3.5</p></td>
|
||||
<td class="datalabel"><p>4.2</p></td>
|
||||
<td class="datalabel"><p>3.0</p></td>
|
||||
<td class="datalabel"><p><strong>3.3</strong></p></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="vertical-header"><p><strong>Latvia</strong></p></th>
|
||||
<td class="datalabel"><p>0.8</p></td>
|
||||
<td class="datalabel"><p>0.7</p></td>
|
||||
<td class="datalabel"><p>0.6</p></td>
|
||||
<td class="datalabel border-right"><p><strong>:</strong></p></td>
|
||||
<td class="datalabel"><p>2.3</p></td>
|
||||
<td class="datalabel"><p>2.6</p></td>
|
||||
<td class="datalabel"><p>2.5</p></td>
|
||||
<td class="datalabel"><p><strong>:</strong></p></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="vertical-header"><p><strong>Lithuania</strong></p></th>
|
||||
<td class="datalabel"><p>0.3</p></td>
|
||||
<td class="datalabel"><p>1.9</p></td>
|
||||
<td class="datalabel"><p>-0.1</p></td>
|
||||
<td class="datalabel border-right"><p><strong>1.7</strong></p></td>
|
||||
<td class="datalabel"><p>2.2</p></td>
|
||||
<td class="datalabel"><p>3.3</p></td>
|
||||
<td class="datalabel"><p>2.8</p></td>
|
||||
<td class="datalabel"><p><strong>3.8</strong></p></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="vertical-header"><p><strong>Luxembourg</strong></p></th>
|
||||
<td class="datalabel"><p>1.2</p></td>
|
||||
<td class="datalabel"><p>0.0</p></td>
|
||||
<td class="datalabel"><p>0.0</p></td>
|
||||
<td class="datalabel border-right"><p><strong>:</strong></p></td>
|
||||
<td class="datalabel"><p>3.2</p></td>
|
||||
<td class="datalabel"><p>2.1</p></td>
|
||||
<td class="datalabel"><p>1.6</p></td>
|
||||
<td class="datalabel"><p><strong>:</strong></p></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="vertical-header"><p><strong>Hungary</strong></p></th>
|
||||
<td class="datalabel"><p>0.2</p></td>
|
||||
<td class="datalabel"><p>0.2</p></td>
|
||||
<td class="datalabel"><p>0.8</p></td>
|
||||
<td class="datalabel border-right"><p><strong>0.4</strong></p></td>
|
||||
<td class="datalabel"><p>0.9</p></td>
|
||||
<td class="datalabel"><p>0.8</p></td>
|
||||
<td class="datalabel"><p>1.7</p></td>
|
||||
<td class="datalabel"><p><strong>1.6</strong></p></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="vertical-header"><p><strong>Malta</strong></p></th>
|
||||
<td class="datalabel"><p>0.9</p></td>
|
||||
<td class="datalabel"><p>1.1</p></td>
|
||||
<td class="datalabel"><p>1.1</p></td>
|
||||
<td class="datalabel border-right"><p><strong>:</strong></p></td>
|
||||
<td class="datalabel"><p>3.6</p></td>
|
||||
<td class="datalabel"><p>4.9</p></td>
|
||||
<td class="datalabel"><p>4.3</p></td>
|
||||
<td class="datalabel"><p><strong>:</strong></p></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="vertical-header"><p><strong>Netherlands**</strong></p></th>
|
||||
<td class="datalabel"><p>0.4</p></td>
|
||||
<td class="datalabel"><p>0.4</p></td>
|
||||
<td class="datalabel"><p>0.3</p></td>
|
||||
<td class="datalabel border-right"><p><strong>0.4</strong></p></td>
|
||||
<td class="datalabel"><p>1.4</p></td>
|
||||
<td class="datalabel"><p>1.6</p></td>
|
||||
<td class="datalabel"><p>1.4</p></td>
|
||||
<td class="datalabel"><p><strong>1.3</strong></p></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="vertical-header"><p><strong>Austria</strong></p></th>
|
||||
<td class="datalabel"><p>0.4</p></td>
|
||||
<td class="datalabel"><p>0.2</p></td>
|
||||
<td class="datalabel"><p>0.2</p></td>
|
||||
<td class="datalabel border-right"><p><strong>0.0</strong></p></td>
|
||||
<td class="datalabel"><p>1.3</p></td>
|
||||
<td class="datalabel"><p>1.1</p></td>
|
||||
<td class="datalabel"><p>0.9</p></td>
|
||||
<td class="datalabel"><p><strong>0.8</strong></p></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="vertical-header"><p><strong>Poland</strong></p></th>
|
||||
<td class="datalabel"><p>1.1</p></td>
|
||||
<td class="datalabel"><p>1.0</p></td>
|
||||
<td class="datalabel"><p>0.6</p></td>
|
||||
<td class="datalabel border-right"><p><strong>0.9</strong></p></td>
|
||||
<td class="datalabel"><p>4.1</p></td>
|
||||
<td class="datalabel"><p>3.8</p></td>
|
||||
<td class="datalabel"><p>3.5</p></td>
|
||||
<td class="datalabel"><p><strong>3.7</strong></p></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="vertical-header"><p><strong>Portugal</strong></p></th>
|
||||
<td class="datalabel"><p>0.6</p></td>
|
||||
<td class="datalabel"><p>0.9</p></td>
|
||||
<td class="datalabel"><p>0.1</p></td>
|
||||
<td class="datalabel border-right"><p><strong>0.8</strong></p></td>
|
||||
<td class="datalabel"><p>2.2</p></td>
|
||||
<td class="datalabel"><p>1.9</p></td>
|
||||
<td class="datalabel"><p>2.4</p></td>
|
||||
<td class="datalabel"><p><strong>2.5</strong></p></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="vertical-header"><p><strong>Romania</strong></p></th>
|
||||
<td class="datalabel"><p>0.0</p></td>
|
||||
<td class="datalabel"><p>-1.9</p></td>
|
||||
<td class="datalabel"><p>-0.1</p></td>
|
||||
<td class="datalabel border-right"><p><strong>0.0</strong></p></td>
|
||||
<td class="datalabel"><p>1.4</p></td>
|
||||
<td class="datalabel"><p>-1.4</p></td>
|
||||
<td class="datalabel"><p>-1.1</p></td>
|
||||
<td class="datalabel"><p><strong>-2.0</strong></p></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="vertical-header"><p><strong>Slovenia</strong></p></th>
|
||||
<td class="datalabel"><p>1.2</p></td>
|
||||
<td class="datalabel"><p>0.7</p></td>
|
||||
<td class="datalabel"><p>1.1</p></td>
|
||||
<td class="datalabel border-right"><p><strong>1.8</strong></p></td>
|
||||
<td class="datalabel"><p>1.7</p></td>
|
||||
<td class="datalabel"><p>1.7</p></td>
|
||||
<td class="datalabel"><p>3.5</p></td>
|
||||
<td class="datalabel"><p><strong>4.8</strong></p></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="vertical-header"><p><strong>Slovakia</strong></p></th>
|
||||
<td class="datalabel"><p>0.3</p></td>
|
||||
<td class="datalabel"><p>0.2</p></td>
|
||||
<td class="datalabel"><p>0.2</p></td>
|
||||
<td class="datalabel border-right"><p><strong>0.2</strong></p></td>
|
||||
<td class="datalabel"><p>0.9</p></td>
|
||||
<td class="datalabel"><p>0.8</p></td>
|
||||
<td class="datalabel"><p>0.9</p></td>
|
||||
<td class="datalabel"><p><strong>0.8</strong></p></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="vertical-header"><p><strong>Finland**</strong></p></th>
|
||||
<td class="datalabel"><p>-0.1</p></td>
|
||||
<td class="datalabel"><p>0.5</p></td>
|
||||
<td class="datalabel"><p>0.9</p></td>
|
||||
<td class="datalabel border-right"><p><strong>0.9</strong></p></td>
|
||||
<td class="datalabel"><p>0.4</p></td>
|
||||
<td class="datalabel"><p>0.6</p></td>
|
||||
<td class="datalabel"><p>1.3</p></td>
|
||||
<td class="datalabel"><p><strong>2.5</strong></p></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="vertical-header"><p><strong>Sweden**</strong></p></th>
|
||||
<td class="datalabel"><p>0.5</p></td>
|
||||
<td class="datalabel"><p>0.9</p></td>
|
||||
<td class="datalabel"><p>0.0</p></td>
|
||||
<td class="datalabel border-right"><p><strong>1.4</strong></p></td>
|
||||
<td class="datalabel"><p>2.3</p></td>
|
||||
<td class="datalabel"><p>2.0</p></td>
|
||||
<td class="datalabel"><p>2.0</p></td>
|
||||
<td class="datalabel"><p><strong>2.8</strong></p></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="vertical-header border-top"><p><strong>Iceland</strong></p></th>
|
||||
<td class="datalabel border-top"><p>1.2</p></td>
|
||||
<td class="datalabel border-top"><p>-0.8</p></td>
|
||||
<td class="datalabel border-top"><p>3.7</p></td>
|
||||
<td class="datalabel border-right border-top"><p><strong>:</strong></p></td>
|
||||
<td class="datalabel border-top"><p>1.1</p></td>
|
||||
<td class="datalabel border-top"><p>2.5</p></td>
|
||||
<td class="datalabel border-top"><p>3.1</p></td>
|
||||
<td class="datalabel border-top"><p><strong>:</strong></p></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="vertical-header"><p><strong>Norway</strong></p></th>
|
||||
<td class="datalabel"><p>1.3</p></td>
|
||||
<td class="datalabel"><p>-0.6</p></td>
|
||||
<td class="datalabel"><p>0.4</p></td>
|
||||
<td class="datalabel border-right"><p><strong>:</strong></p></td>
|
||||
<td class="datalabel"><p>2.3</p></td>
|
||||
<td class="datalabel"><p>2.0</p></td>
|
||||
<td class="datalabel"><p>2.0</p></td>
|
||||
<td class="datalabel"><p><strong>:</strong></p></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="vertical-header"><p><strong>Switzerland</strong></p></th>
|
||||
<td class="datalabel"><p>-0.4</p></td>
|
||||
<td class="datalabel"><p>0.2</p></td>
|
||||
<td class="datalabel"><p>0.7</p></td>
|
||||
<td class="datalabel border-right"><p><strong>1.9</strong></p></td>
|
||||
<td class="datalabel"><p>0.7</p></td>
|
||||
<td class="datalabel"><p>0.7</p></td>
|
||||
<td class="datalabel"><p>0.6</p></td>
|
||||
<td class="datalabel"><p><strong>2.3</strong></p></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="vertical-header border-top"><p><strong>United States</strong></p></th>
|
||||
<td class="datalabel border-top"><p>1.1</p></td>
|
||||
<td class="datalabel border-top"><p>0.1</p></td>
|
||||
<td class="datalabel border-top"><p>0.5</p></td>
|
||||
<td class="datalabel border-right border-top"><p><strong>0.4</strong></p></td>
|
||||
<td class="datalabel border-top"><p>2.3</p></td>
|
||||
<td class="datalabel border-top"><p>2.0</p></td>
|
||||
<td class="datalabel border-top"><p>2.7</p></td>
|
||||
<td class="datalabel border-top"><p><strong>2.1</strong></p></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="footer notes"><p><span>: Data not available</span></p><p><span>* Growth rates to the previous quarter and to the same quarter of the previous year presented in this table are both based on seasonally and calendar adjusted figures, except where indicated. Unadjusted data are not available for all Member States which are included in GDP flash estimates.</span></p><p><span>** Percentage change compared with the same quarter of the previous year calculated from calendar adjusted data.</span></p><p><span>*** Irish GDP flash estimate is categorised as a </span><a><span>CSO Frontier Series Output</span></a><span>. Particular care must be taken when interpreting the statistics as it may use new methods which are under development and/or data sources which may be incomplete, for example new administrative data sources.</span></p><p><span>Source datasets: </span><a><span>namq_10_gdp</span></a></p><p><span><img></span></p></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table><p><a>Revisions</a> of quarterly GDP estimates are continuously monitored. Further information can be found on Eurostat <a>website</a>.</p><p>With these flash estimates, euro area and EU employment and GDP figures for earlier quarters are not revised.</p><p>The flash GDP estimates of the second quarter 2026 are based on Member States’ data covering 99% of the euro area and the EU GDP, while flash employment estimates are based on Member States’ data covering 95% of the euro area and 92% of the EU total employment.</p><p>A preliminary flash estimate of GDP growth was published in the <a>Euro indicators release</a> issued on 30 July 2026. This was based on GDP estimates for 19 Member States.</p><p>The euro area and EU estimates for the last quarter <strong>were</strong> <strong>not revised</strong>.</p><p>All figures presented in this release may be revised with Eurostat’s regular estimates of GDP and main aggregates (including employment) scheduled for 7 September 2026 and 20 October 2026.</p><p>Comprehensive estimates of European main aggregates (including GDP and employment) are based on countries regular transmissions and published around 65 and 110 days after the end of each quarter. To improve the timeliness of key indicators, Eurostat also publishes flash estimates for GDP (after around 30 and 45 days) and employment (after around 45 days). Their compilation is based on estimates provided by EU Member States on a voluntary basis.</p><p>This release presents flash estimates for euro area and EU GDP and employment growth after around 45 days.</p><p>European quarterly national accounts are compiled in accordance with the European System of Accounts 2010 (ESA 2010). They include key policy indicators of GDP and employment.</p><p><strong>Gross domestic product (GDP)</strong> at market prices measures the production activity of resident production units. Growth rates are based on chain-linked volumes.</p><p><strong>Employment</strong> covers employees and self-employed working in resident production units (domestic concept). While employment flash estimates are limited to total employment in persons, regular estimates also cover hours worked and industry breakdowns.</p><p>The method used for compilation of European GDP and employment estimates is the same as for previous releases.</p><p><strong>Euro area (EA21): </strong>Belgium, Bulgaria, Germany, Estonia, Ireland, Greece, Spain, France, Croatia, Italy, Cyprus, Latvia, Lithuania, Luxembourg, Malta, the Netherlands, Austria, Portugal, Slovenia, Slovakia and Finland.</p><p><strong>European Union (EU 27):</strong> Belgium, Bulgaria, Czechia, Denmark, Germany, Estonia, Ireland, Greece, Spain, France, Croatia, Italy, Cyprus, Latvia, Lithuania, Luxembourg, Hungary, Malta, the Netherlands, Austria, Poland, Portugal, Romania, Slovenia, Slovakia, Finland and Sweden.</p><p><a>Website section on national accounts</a>, notably <a>information on European GDP</a> and <a>employment estimates</a></p><p><a>Database section on national accounts</a> and <a>metadata on quarterly national accounts</a></p><p><a>Statistics Explained articles on measuring quarterly GDP</a> and <a>presentation of updated quarterly estimates</a></p><p><a>Country specific metadata</a></p><p><a>European System of Accounts 2010</a></p><p><a>Euro indicators dashboard</a></p><p><a>Release calendar for Euro indicators</a></p><p><a>European Statistics Code of Practice</a><strong> </strong></p><p class="ecl-u-type-heading-5">Media requests</p><p class="ecl-u-type-paragraph ecl-u-mb-none">
|
||||
<span>Eurostat Media Support</span>
|
||||
</p><p class="ecl-u-type-paragraph ecl-u-mb-none">
|
||||
<span>E-mail: <a class="ecl-link">[email protected]</a>
|
||||
</span>
|
||||
</p><p class="ecl-u-type-heading-5">Further information on data</p><p class="ecl-u-type-paragraph ecl-u-mb-none">
|
||||
<span>E-mail: <a class="ecl-link">[email protected]</a>
|
||||
</span>
|
||||
</p><p class="ecl-u-type-paragraph"></p><p class="ecl-u-type-paragraph ecl-u-mb-none">
|
||||
<span>Jenny RUNESSON (Employment)</span>
|
||||
</p><p class="ecl-u-type-paragraph"></p><p class="ecl-u-type-paragraph ecl-u-mb-none">
|
||||
<span>Julio Cesar CABECA (GDP)</span>
|
||||
</p></body></html>
|
||||
+1370
File diff suppressed because it is too large.
Load diff
+6
@@ -0,0 +1,6 @@
|
||||
<rss version="2.0"><channel>
|
||||
<title>ECB - European Central Bank</title><link>https://www.ecb.europa.eu/</link><description>Latest releases on the ECB website - Press releases, speeches and interviews, press conferences.</description><language>en</language><copyright>Copyright 2026, European Central Bank</copyright>
|
||||
<webMaster>[email protected] (ECB Webmaster)</webMaster><lastBuildDate>Sat, 24 Oct 2026 07:59:06 +0200</lastBuildDate>
|
||||
<category>Press</category>
|
||||
<generator>Automatic</generator>
|
||||
<docs>http://blogs.law.harvard.edu/tech/rss</docs><item><title> Piero Cipollone: Interview with Milano Finanza</title><link>https://www.ecb.europa.eu//press/inter/date/2026/html/ecb.in261024~ee2ba73cf3.en.html</link><guid>https://www.ecb.europa.eu//press/inter/date/2026/html/ecb.in261024~ee2ba73cf3.en.html</guid><pubDate>Sat, 24 Oct 2026 08:00:00 +0200</pubDate></item><item><title> ECB Consumer Expectations Survey results – September 2026</title><link>https://www.ecb.europa.eu//press/pr/date/2026/html/ecb.pr261023~a3d201c97c.en.html</link><guid>https://www.ecb.europa.eu//press/pr/date/2026/html/ecb.pr261023~a3d201c97c.en.html</guid><pubDate>Fri, 23 Oct 2026 10:00:00 +0200</pubDate></item><item><title> Piero Cipollone: Pontes and Appia: unlocking opportunities for banks</title><link>https://www.ecb.europa.eu//press/key/date/2026/html/ecb.sp261021_1~d190f2c349.en.pdf</link><guid>https://www.ecb.europa.eu//press/key/date/2026/html/ecb.sp261021_1~d190f2c349.en.pdf</guid><pubDate>Wed, 21 Oct 2026 10:00:00 +0200</pubDate></item><item><title> Philip R. Lane: Euro liquidity lines and the international monetary system</title><link>https://www.ecb.europa.eu//press/key/date/2026/html/ecb.sp261021~401d6c4b70.en.html</link><guid>https://www.ecb.europa.eu//press/key/date/2026/html/ecb.sp261021~401d6c4b70.en.html</guid><pubDate>Wed, 21 Oct 2026 06:15:00 +0200</pubDate></item></channel></rss>
|
||||
+8
@@ -0,0 +1,8 @@
|
||||
<html><body><h2>You may also be interested in:</h2><h1>Monetary policy decisions</h1><p class="ecb-publicationDate">18 December 2025 </p><p>The Governing Council today decided to keep the three key ECB interest rates unchanged. Its updated assessment reconfirms that inflation should stabilise at the 2% target in the medium term. </p><p>The new Eurosystem staff projections show headline inflation averaging 2.1% in 2025, 1.9% in 2026, 1.8% in 2027 and 2.0% in 2028. For inflation excluding energy and food, staff project an average of 2.4% in 2025, 2.2% in 2026, 1.9% in 2027 and 2.0% in 2028. Inflation has been revised up for 2026, mainly because staff now expect services inflation to decline more slowly. Economic growth is expected to be stronger than in the September projections, driven especially by domestic demand. Growth has been revised up to 1.4% in 2025, 1.2% in 2026 and 1.4% in 2027 and is expected to remain at 1.4% in 2028.</p><p>The Governing Council is determined to ensure that inflation stabilises at its 2% target in the medium term. It will follow a data-dependent and meeting-by-meeting approach to determining the appropriate monetary policy stance. In particular, the Governing Council’s interest rate decisions will be based on its assessment of the inflation outlook and the risks surrounding it, in light of the incoming economic and financial data, as well as the dynamics of underlying inflation and the strength of monetary policy transmission. The Governing Council is not pre-committing to a particular rate path.</p><h2>Key ECB interest rates</h2><p>The interest rates on the deposit facility, the main refinancing operations and the marginal lending facility will remain unchanged at 2.00%, 2.15% and 2.40% respectively.</p><h2>Asset purchase programme (APP) and pandemic emergency purchase programme (PEPP)</h2><p>The APP and PEPP portfolios are declining at a measured and predictable pace, as the Eurosystem no longer reinvests the principal payments from maturing securities.</p><p>***</p><p>The Governing Council stands ready to adjust all of its instruments within its mandate to ensure that inflation stabilises at its 2% target in the medium term and to preserve the smooth functioning of monetary policy transmission. Moreover, the Transmission Protection Instrument is available to counter unwarranted, disorderly market dynamics that pose a serious threat to the transmission of monetary policy across all euro area countries, thus allowing the Governing Council to more effectively deliver on its price stability mandate.</p><p>The President of the ECB will comment on the considerations underlying these decisions at a press conference starting at 14:45 CET today.</p><p><strong>Disclaimer</strong> <br>
|
||||
Please note that related topic tags are currently available for selected content only.</p><h2>European Central Bank</h2><p>Reproduction is permitted provided that the source is acknowledged.</p><h2>Our website uses cookies</h2><p>We use functional cookies to store user preferences; analytics cookies to improve website performance; third-party cookies set by third-party services integrated into the website. You have the choice to accept or reject them. For more information or to review your preference on the cookies and server logs we use, we invite you to:</p><p class="cookieConsentMoreInfoLinks"><a>Read our privacy statement </a> <a>Learn more about how we use cookies</a></p><h2>Thank you!</h2><h2>Thank you!</h2><h2>We have updated our privacy policy</h2><p>We are always working to improve this website for our users. To do this, we use the anonymous data provided
|
||||
by cookies.<br>
|
||||
<a class="arrow">See what has changed in our privacy policy</a>
|
||||
</p><h2>Your cookie preference has expired</h2><p>We are always working to improve this website for our users. To do this, we use the anonymous data provided
|
||||
by cookies.<br>
|
||||
<a class="arrow">Learn more about how we use cookies</a>
|
||||
</p></body></html>
|
||||
+2
@@ -0,0 +1,2 @@
|
||||
<html><head></head><body><meta property="article:published_time" content="2026-09-10"><h1>Monetary policy decisions</h1><p class="ecb-publicationDate">10 September 2026 </p><p>The Governing Council today decided to raise the three key ECB interest rates by 25 basis points. The conflict in the Middle East continues to generate inflation pressures, and inflation is set to remain well above target for an extended period. Today’s decision underscores the Governing Council’s commitment to setting monetary policy to ensure that inflation stabilises at its 2% target in the medium term.</p><p>The baseline of the new ECB staff projections sees headline inflation averaging 3.0% in 2026, 2.5% in 2027 and 2.1% in 2028. For inflation excluding energy and food, the baseline foresees 2.5% in 2026, 2.6% in 2027 and 2.3% in 2028. Compared with June, the baseline projection for inflation in 2026 is unchanged, while it has been revised up for 2027 and 2028. The baseline projection for economic growth is 0.9% for 2026, 1.4% for 2027 and 1.5% for 2028. This is an upward revision for both 2026 and 2027, mainly reflecting the greater than expected resilience of the euro area economy. </p><p>The outlook remains highly uncertain, with risks to the upside for inflation and to the downside for economic growth. In relation to the energy shock, the updated scenarios put together by staff illustrate the broad range of outcomes for how growth and inflation would evolve under different assumptions about its intensity and duration, as well as its indirect and second-round effects. </p><p>With today’s decision, the Governing Council remains well positioned to navigate the uncertainty caused by the conflict. It will follow a data-dependent and meeting-by-meeting approach to determining the appropriate monetary policy stance. In particular, the Governing Council’s interest rate decisions will be based on its assessment of the inflation outlook and the risks surrounding it, in light of the incoming economic and financial data, as well as the dynamics of underlying inflation and the strength of monetary policy transmission. The Governing Council is not pre-committing to a particular rate path.</p><p>The Governing Council decided to raise the three key ECB interest rates by 25 basis points. Accordingly, the interest rates on the deposit facility, the main refinancing operations and the marginal lending facility will be increased to 2.50%, 2.65% and 2.90% respectively, with effect from 16 September 2026.</p><p>The APP and PEPP portfolios are declining at a measured and predictable pace, as the Eurosystem no longer reinvests the principal payments from maturing securities.</p><p>***</p><p>The Governing Council stands ready to adjust all of its instruments within its mandate to ensure that inflation stabilises at its 2% target in the medium term and to preserve the smooth functioning of monetary policy transmission. Moreover, the Transmission Protection Instrument is available to counter unwarranted, disorderly market dynamics that pose a serious threat to the transmission of monetary policy across all euro area countries, thus allowing the Governing Council to more effectively deliver on its price stability mandate.</p><p>The President of the ECB will comment on the considerations underlying these decisions at a press conference starting at 14:45 CET today.</p><p><strong>Disclaimer</strong> <br>
|
||||
Please note that related topic tags are currently available for selected content only.</p><p>Reproduction is permitted provided that the source is acknowledged.</p></body></html>
|
||||
+332
@@ -0,0 +1,332 @@
|
||||
<html><body><dl>
|
||||
<dt>
|
||||
28/10/2026
|
||||
</dt>
|
||||
<dd>
|
||||
Governing Council of the ECB: monetary policy meeting in Frankfurt (Day 1)<br>
|
||||
</dd>
|
||||
<dt>
|
||||
29/10/2026
|
||||
</dt>
|
||||
<dd>
|
||||
Governing Council of the ECB: monetary policy meeting in Frankfurt (Day 2), followed by press conference<br>
|
||||
</dd>
|
||||
<dt>
|
||||
29/10/2026
|
||||
</dt>
|
||||
<dd>
|
||||
Press conference following the Governing Council meeting of the ECB in Frankfurt<br>
|
||||
</dd>
|
||||
<dt>
|
||||
25/11/2026
|
||||
</dt>
|
||||
<dd>
|
||||
Governing Council of the ECB: non-monetary policy meeting (in Frankfurt)<br>
|
||||
</dd>
|
||||
<dt>
|
||||
26/11/2026
|
||||
</dt>
|
||||
<dd>
|
||||
General Council meeting of the ECB in Frankfurt<br>
|
||||
</dd>
|
||||
<dt>
|
||||
16/12/2026
|
||||
</dt>
|
||||
<dd>
|
||||
Governing Council of the ECB: monetary policy meeting in Frankfurt (Day 1)<br>
|
||||
</dd>
|
||||
<dt>
|
||||
17/12/2026
|
||||
</dt>
|
||||
<dd>
|
||||
Governing Council of the ECB: monetary policy meeting in Frankfurt (Day 2), followed by press conference<br>
|
||||
</dd>
|
||||
<dt>
|
||||
03/02/2027
|
||||
</dt>
|
||||
<dd>
|
||||
Governing Council of the ECB: monetary policy meeting in Frankfurt (Day 1)<br>
|
||||
</dd>
|
||||
<dt>
|
||||
04/02/2027
|
||||
</dt>
|
||||
<dd>
|
||||
Governing Council of the ECB: monetary policy meeting in Frankfurt (Day 2), followed by press conference<br>
|
||||
</dd>
|
||||
<dt>
|
||||
24/02/2027
|
||||
</dt>
|
||||
<dd>
|
||||
Governing Council of the ECB: non-monetary policy meeting (virtual)<br>
|
||||
</dd>
|
||||
<dt>
|
||||
17/03/2027
|
||||
</dt>
|
||||
<dd>
|
||||
Governing Council of the ECB: monetary policy meeting in Frankfurt (Day 1)<br>
|
||||
</dd>
|
||||
<dt>
|
||||
18/03/2027
|
||||
</dt>
|
||||
<dd>
|
||||
Governing Council of the ECB: monetary policy meeting in Frankfurt (Day 2), followed by press conference<br>
|
||||
</dd>
|
||||
<dt>
|
||||
07/04/2027
|
||||
</dt>
|
||||
<dd>
|
||||
Governing Council of the ECB: non-monetary policy meeting (virtual)<br>
|
||||
</dd>
|
||||
<dt>
|
||||
28/04/2027
|
||||
</dt>
|
||||
<dd>
|
||||
Governing Council of the ECB: monetary policy meeting in Frankfurt (Day 1)<br>
|
||||
</dd>
|
||||
<dt>
|
||||
29/04/2027
|
||||
</dt>
|
||||
<dd>
|
||||
Governing Council of the ECB: monetary policy meeting in Frankfurt (Day 2), followed by press conference<br>
|
||||
</dd>
|
||||
<dt>
|
||||
19/05/2027
|
||||
</dt>
|
||||
<dd>
|
||||
Governing Council of the ECB: non-monetary policy meeting (virtual)<br>
|
||||
</dd>
|
||||
<dt>
|
||||
09/06/2027
|
||||
</dt>
|
||||
<dd>
|
||||
Governing Council of the ECB: monetary policy meeting in Frankfurt (Day 1)<br>
|
||||
</dd>
|
||||
<dt>
|
||||
10/06/2027
|
||||
</dt>
|
||||
<dd>
|
||||
Governing Council of the ECB: monetary policy meeting in Frankfurt (Day 2), followed by press conference<br>
|
||||
</dd>
|
||||
<dt>
|
||||
23/06/2027
|
||||
</dt>
|
||||
<dd>
|
||||
Governing Council of the ECB: non-monetary policy meeting (virtual)<br>
|
||||
</dd>
|
||||
<dt>
|
||||
24/06/2027
|
||||
</dt>
|
||||
<dd>
|
||||
General Council meeting of the ECB (virtual)<br>
|
||||
</dd>
|
||||
<dt>
|
||||
21/07/2027
|
||||
</dt>
|
||||
<dd>
|
||||
Governing Council of the ECB: monetary policy meeting in Frankfurt (Day 1)<br>
|
||||
</dd>
|
||||
<dt>
|
||||
22/07/2027
|
||||
</dt>
|
||||
<dd>
|
||||
Governing Council of the ECB: monetary policy meeting in Frankfurt (Day 2), followed by press conference<br>
|
||||
</dd>
|
||||
<dt>
|
||||
08/09/2027
|
||||
</dt>
|
||||
<dd>
|
||||
Governing Council of the ECB: monetary policy meeting in Frankfurt (Day 1)<br>
|
||||
</dd>
|
||||
<dt>
|
||||
09/09/2027
|
||||
</dt>
|
||||
<dd>
|
||||
Governing Council of the ECB: monetary policy meeting in Frankfurt (Day 2), followed by press conference<br>
|
||||
</dd>
|
||||
<dt>
|
||||
29/09/2027
|
||||
</dt>
|
||||
<dd>
|
||||
Governing Council of the ECB: non-monetary policy meeting (virtual)<br>
|
||||
</dd>
|
||||
<dt>
|
||||
27/10/2027
|
||||
</dt>
|
||||
<dd>
|
||||
Governing Council of the ECB: monetary policy meeting in Frankfurt (Day 1)<br>
|
||||
</dd>
|
||||
<dt>
|
||||
28/10/2027
|
||||
</dt>
|
||||
<dd>
|
||||
Governing Council of the ECB: monetary policy meeting in Frankfurt (Day 2), followed by press conference<br>
|
||||
</dd>
|
||||
<dt>
|
||||
24/11/2027
|
||||
</dt>
|
||||
<dd>
|
||||
Governing Council of the ECB: non-monetary policy meeting in Frankfurt<br>
|
||||
</dd>
|
||||
<dt>
|
||||
25/11/2027
|
||||
</dt>
|
||||
<dd>
|
||||
General Council meeting of the ECB in Frankfurt<br>
|
||||
</dd>
|
||||
<dt>
|
||||
15/12/2027
|
||||
</dt>
|
||||
<dd>
|
||||
Governing Council of the ECB: monetary policy meeting in Frankfurt (Day 1)<br>
|
||||
</dd>
|
||||
<dt>
|
||||
16/12/2027
|
||||
</dt>
|
||||
<dd>
|
||||
Governing Council of the ECB: monetary policy meeting in Frankfurt (Day 2), followed by press conference<br>
|
||||
</dd>
|
||||
<dt>
|
||||
02/02/2028
|
||||
</dt>
|
||||
<dd>
|
||||
Governing Council of the ECB: monetary policy meeting in Frankfurt (Day 1)<br>
|
||||
</dd>
|
||||
<dt>
|
||||
03/02/2028
|
||||
</dt>
|
||||
<dd>
|
||||
Governing Council of the ECB: monetary policy meeting in Frankfurt (Day 2), followed by press conference<br>
|
||||
</dd>
|
||||
<dt>
|
||||
23/02/2028
|
||||
</dt>
|
||||
<dd>
|
||||
Governing Council of the ECB: non-monetary policy meeting (virtual)<br>
|
||||
</dd>
|
||||
<dt>
|
||||
22/03/2028
|
||||
</dt>
|
||||
<dd>
|
||||
Governing Council of the ECB: monetary policy meeting in Frankfurt (Day 1)<br>
|
||||
</dd>
|
||||
<dt>
|
||||
23/03/2028
|
||||
</dt>
|
||||
<dd>
|
||||
Governing Council of the ECB: monetary policy meeting in Frankfurt (Day 2), followed by press conference<br>
|
||||
</dd>
|
||||
<dt>
|
||||
05/04/2028
|
||||
</dt>
|
||||
<dd>
|
||||
Governing Council of the ECB: non-monetary policy meeting (virtual)<br>
|
||||
</dd>
|
||||
<dt>
|
||||
03/05/2028
|
||||
</dt>
|
||||
<dd>
|
||||
Governing Council of the ECB: monetary policy meeting in Frankfurt (Day 1)<br>
|
||||
</dd>
|
||||
<dt>
|
||||
04/05/2028
|
||||
</dt>
|
||||
<dd>
|
||||
Governing Council of the ECB: monetary policy meeting in Frankfurt (Day 2), followed by press conference<br>
|
||||
</dd>
|
||||
<dt>
|
||||
24/05/2028
|
||||
</dt>
|
||||
<dd>
|
||||
Governing Council of the ECB: non-monetary policy meeting (virtual)<br>
|
||||
</dd>
|
||||
<dt>
|
||||
07/06/2028
|
||||
</dt>
|
||||
<dd>
|
||||
Governing Council of the ECB: monetary policy meeting in Frankfurt (Day 1)<br>
|
||||
</dd>
|
||||
<dt>
|
||||
08/06/2028
|
||||
</dt>
|
||||
<dd>
|
||||
Governing Council of the ECB: monetary policy meeting in Frankfurt (Day 2), followed by press conference<br>
|
||||
</dd>
|
||||
<dt>
|
||||
21/06/2028
|
||||
</dt>
|
||||
<dd>
|
||||
Governing Council of the ECB: non-monetary policy meeting (virtual)<br>
|
||||
</dd>
|
||||
<dt>
|
||||
22/06/2028
|
||||
</dt>
|
||||
<dd>
|
||||
General Council meeting of the ECB (virtual)<br>
|
||||
</dd>
|
||||
<dt>
|
||||
19/07/2028
|
||||
</dt>
|
||||
<dd>
|
||||
Governing Council of the ECB: monetary policy meeting in Frankfurt (Day 1)<br>
|
||||
</dd>
|
||||
<dt>
|
||||
20/07/2028
|
||||
</dt>
|
||||
<dd>
|
||||
Governing Council of the ECB: monetary policy meeting in Frankfurt (Day 2), followed by press conference<br>
|
||||
</dd>
|
||||
<dt>
|
||||
06/09/2028
|
||||
</dt>
|
||||
<dd>
|
||||
Governing Council of the ECB: monetary policy meeting in Frankfurt (Day 1)<br>
|
||||
</dd>
|
||||
<dt>
|
||||
07/09/2028
|
||||
</dt>
|
||||
<dd>
|
||||
Governing Council of the ECB: monetary policy meeting in Frankfurt (Day 2), followed by press conference<br>
|
||||
</dd>
|
||||
<dt>
|
||||
27/09/2028
|
||||
</dt>
|
||||
<dd>
|
||||
Governing Council of the ECB: non-monetary policy meeting (virtual)<br>
|
||||
</dd>
|
||||
<dt>
|
||||
11/10/2028
|
||||
</dt>
|
||||
<dd>
|
||||
Governing Council of the ECB: monetary policy meeting in Frankfurt<br>
|
||||
</dd>
|
||||
<dt>
|
||||
12/10/2028
|
||||
</dt>
|
||||
<dd>
|
||||
Governing Council of the ECB: monetary policy meeting in Frankfurt (Day 2), followed by press conference<br>
|
||||
</dd>
|
||||
<dt>
|
||||
22/11/2028
|
||||
</dt>
|
||||
<dd>
|
||||
Governing Council of the ECB: non-monetary policy meeting in Frankfurt<br>
|
||||
</dd>
|
||||
<dt>
|
||||
23/11/2028
|
||||
</dt>
|
||||
<dd>
|
||||
General Council meeting of the ECB in Frankfurt<br>
|
||||
</dd>
|
||||
<dt>
|
||||
06/12/2028
|
||||
</dt>
|
||||
<dd>
|
||||
Governing Council of the ECB: monetary policy meeting in Frankfurt (Day 1)<br>
|
||||
</dd>
|
||||
<dt>
|
||||
07/12/2028
|
||||
</dt>
|
||||
<dd>
|
||||
Governing Council of the ECB: monetary policy meeting in Frankfurt (Day 2), followed by press conference<br>
|
||||
</dd>
|
||||
</dl></body></html>
|
||||
+59
@@ -0,0 +1,59 @@
|
||||
<ns0:feed xmlns:ns0="http://www.w3.org/2005/Atom">
|
||||
<ns0:link href="https://ec.europa.eu/eurostat/news/euro-indicators?p_p_id=estatsearchportlet_WAR_estatsearchportlet_INSTANCE_OaTpFrwlabNK&p_p_lifecycle=2&p_p_resource_id=atom&_estatsearchportlet_WAR_estatsearchportlet_INSTANCE_OaTpFrwlabNK_pageSize=100&_estatsearchportlet_WAR_estatsearchportlet_INSTANCE_OaTpFrwlabNK_collection=CAT_PREREL" rel="self" type="application/atom+xml" />
|
||||
<ns0:title>Eurostat - Custom RSS Feed</ns0:title>
|
||||
<ns0:link rel="alternate" href="https://ec.europa.eu/eurostat" />
|
||||
<ns0:link rel="next" href="https://ec.europa.eu/eurostat/news/euro-indicators?p_p_id=estatsearchportlet_WAR_estatsearchportlet_INSTANCE_OaTpFrwlabNK&p_p_lifecycle=2&p_p_resource_id=atom&_estatsearchportlet_WAR_estatsearchportlet_INSTANCE_OaTpFrwlabNK_pageSize=100&_estatsearchportlet_WAR_estatsearchportlet_INSTANCE_OaTpFrwlabNK_collection=CAT_PREREL&pageNumber=2" />
|
||||
<ns0:link rel="last" href="https://ec.europa.eu/eurostat/news/euro-indicators?p_p_id=estatsearchportlet_WAR_estatsearchportlet_INSTANCE_OaTpFrwlabNK&p_p_lifecycle=2&p_p_resource_id=atom&_estatsearchportlet_WAR_estatsearchportlet_INSTANCE_OaTpFrwlabNK_pageSize=100&_estatsearchportlet_WAR_estatsearchportlet_INSTANCE_OaTpFrwlabNK_collection=CAT_PREREL&pageNumber=45" />
|
||||
<ns0:link rel="related" href="https://ec.europa.eu/eurostat/web/rss/about-rss" />
|
||||
<ns0:subtitle>This feed has been created based on your search query. For more information, please consult the related help page.</ns0:subtitle>
|
||||
<ns0:id>https://ec.europa.eu/eurostat/news/euro-indicators?p_p_id=estatsearchportlet_WAR_estatsearchportlet_INSTANCE_OaTpFrwlabNK&p_p_lifecycle=2&p_p_resource_id=atom&_estatsearchportlet_WAR_estatsearchportlet_INSTANCE_OaTpFrwlabNK_pageSize=100&_estatsearchportlet_WAR_estatsearchportlet_INSTANCE_OaTpFrwlabNK_collection=CAT_PREREL</ns0:id>
|
||||
<ns0:updated>2026-10-21T09:00:00Z</ns0:updated>
|
||||
<ns0:entry>
|
||||
<ns0:title>Seasonally adjusted government deficit at 3.3% of GDP in the euro area</ns0:title>
|
||||
<ns0:link rel="alternate" href="https://ec.europa.eu/eurostat/product?code=2-21102026-cp" />
|
||||
<ns0:author>
|
||||
<ns0:name>Eurostat</ns0:name>
|
||||
<ns0:uri>http://ec.europa.eu/eurostat</ns0:uri>
|
||||
</ns0:author>
|
||||
<ns0:id>https://ec.europa.eu/eurostat/product?code=2-21102026-cp</ns0:id>
|
||||
<ns0:updated>2026-10-21T09:00:00Z</ns0:updated>
|
||||
<ns0:published>2026-10-21T09:00:00Z</ns0:published>
|
||||
<ns0:summary type="html">In the second quarter of 2026, the seasonally adjusted general government deficit to GDP ratio stood at 3.3% in the euro area (EA21) and at 3.5% in the EU. The euro area deficit to GDP ratio increased slightly compared to 3.2% in the first quarter of 2026, while the EU deficit to GDP ratio increa...</ns0:summary>
|
||||
</ns0:entry>
|
||||
<ns0:entry>
|
||||
<ns0:title>Government debt at 88.8% of GDP in euro area</ns0:title>
|
||||
<ns0:link rel="alternate" href="https://ec.europa.eu/eurostat/product?code=2-21102026-bp" />
|
||||
<ns0:author>
|
||||
<ns0:name>Eurostat</ns0:name>
|
||||
<ns0:uri>http://ec.europa.eu/eurostat</ns0:uri>
|
||||
</ns0:author>
|
||||
<ns0:id>https://ec.europa.eu/eurostat/product?code=2-21102026-bp</ns0:id>
|
||||
<ns0:updated>2026-10-21T09:00:00Z</ns0:updated>
|
||||
<ns0:published>2026-10-21T09:00:00Z</ns0:published>
|
||||
<ns0:summary type="html">At the end of the second quarter of 2026, the general government gross debt to GDP ratio in the euro area (EA21) stood at 88.8%, an increase compared with 88.4% at the end of the first quarter of 2026. In the EU, the ratio also increased from 82.5% to 82.9%.</ns0:summary>
|
||||
</ns0:entry>
|
||||
<ns0:entry>
|
||||
<ns0:title>Euro area government deficit at 3.0% and EU at 3.1% of GDP</ns0:title>
|
||||
<ns0:link rel="alternate" href="https://ec.europa.eu/eurostat/product?code=2-21102026-ap" />
|
||||
<ns0:author>
|
||||
<ns0:name>Eurostat</ns0:name>
|
||||
<ns0:uri>http://ec.europa.eu/eurostat</ns0:uri>
|
||||
</ns0:author>
|
||||
<ns0:id>https://ec.europa.eu/eurostat/product?code=2-21102026-ap</ns0:id>
|
||||
<ns0:updated>2026-10-21T09:00:00Z</ns0:updated>
|
||||
<ns0:published>2026-10-21T09:00:00Z</ns0:published>
|
||||
<ns0:summary type="html">In the euro area (EA20) the government deficit to GDP ratio remained unchanged at 3.0% in 2024 and 2025. In the EU, it also remained unchanged at 3.1%, the same level as in 2024. In the euro area the government debt to GDP ratio increased from 86.6% at the end of 2024 to 87.7% at the end of 2025,...</ns0:summary>
|
||||
</ns0:entry>
|
||||
<ns0:entry>
|
||||
<ns0:title>Production in construction up by 1.8% in the euro area and by 2.0% in the EU</ns0:title>
|
||||
<ns0:link rel="alternate" href="https://ec.europa.eu/eurostat/product?code=4-20102026-ap" />
|
||||
<ns0:author>
|
||||
<ns0:name>Eurostat</ns0:name>
|
||||
<ns0:uri>http://ec.europa.eu/eurostat</ns0:uri>
|
||||
</ns0:author>
|
||||
<ns0:id>https://ec.europa.eu/eurostat/product?code=4-20102026-ap</ns0:id>
|
||||
<ns0:updated>2026-10-20T09:00:00Z</ns0:updated>
|
||||
<ns0:published>2026-10-20T09:00:00Z</ns0:published>
|
||||
<ns0:summary type="html">In August 2026, compared with July 2026, seasonally adjusted production in construction increased by 1.8% in the euro area and by 2.0% in the EU, according to first estimates from Eurostat, the statistical office of the European Union. In July 2026, production in construction grew by 0.2% in the ...</ns0:summary>
|
||||
</ns0:entry>
|
||||
</ns0:feed>
|
||||
@@ -0,0 +1 @@
|
||||
[{"recordid": "22494146", "allDay": true, "unit": "F3", "period": "August 2026", "types": [{"label": "Data release", "order": 1}, {"label": "Euro indicators release", "order": 2}, {"label": "Statistics Explained", "order": 4}], "euroind": true, "euroindAuthor": "estat", "start": "2026-10-01T11:00Z", "datasetCodes": "une_rt_m", "theme": "Population and social conditions", "preliminary": false, "title": "Unemployment"}, {"recordid": "22494157", "allDay": true, "unit": "C4", "period": "Q2/2026", "types": [{"label": "Data release", "order": 1}, {"label": "Euro indicators release", "order": 2}, {"label": "News article", "order": 3}, {"label": "Statistics Explained", "order": 4}], "euroind": true, "euroindAuthor": "estat", "start": "2026-10-01T11:00Z", "datasetCodes": "prc_hpi_a,prc_hpi_inw,prc_hpi_q", "theme": "Economy and finance", "preliminary": false, "title": "House price index"}, {"recordid": "22494168", "allDay": true, "unit": "C4", "period": "September 2026", "types": [{"label": "Data release", "order": 1}, {"label": "Euro indicators release", "order": 2}, {"label": "Statistics Explained", "order": 4}], "euroind": true, "euroindAuthor": "estat", "start": "2026-10-02T11:00Z", "datasetCodes": "prc_hicp_fp,prc_hicp_manr,prc_hicp_mmor,prc_hicp_midx,prc_hicp_inw,prc_hicp_cow", "theme": "Economy and finance", "preliminary": false, "title": "Flash estimate inflation euro area"}, {"recordid": "22494179", "allDay": true, "unit": "C2", "period": "Q2/2026", "types": [{"label": "Data release", "order": 1}, {"label": "Euro indicators release", "order": 2}], "euroind": true, "euroindAuthor": "estat", "start": "2026-10-02T11:00Z", "datasetCodes": "nasq_10_nf_tr,nasq_10_ki,nasa_10_nf_tr,naidsq_10_nf_tr,naidsa_10_nf_tr", "theme": "Economy and finance", "preliminary": false, "title": "First release sector accounts (households and businesses)"}, {"recordid": "22494190", "allDay": true, "unit": "C1", "period": "Q2/2026", "types": [{"label": "Data release", "order": 1}, {"label": "Euro indicators release", "order": 2}, {"label": "Statistics Explained", "order": 4}], "euroind": true, "euroindAuthor": "estat", "start": "2026-10-02T11:00Z", "datasetCodes": "bop_c6_q,bop_c6_a,bop_eu6_q,bop_iip6_q", "theme": "Economy and finance", "preliminary": false, "title": "Balance of payments"}, {"recordid": "22494201", "allDay": true, "unit": "G1", "period": "June 2026 - Q2/2026", "types": [{"label": "Data release", "order": 1}], "euroind": true, "euroindAuthor": "estat", "start": "2026-10-02T11:00Z", "datasetCodes": "sts_cobp_m,sts_cobp_q,sts_cobp_a", "theme": "Industry, trade and services", "preliminary": false, "title": "Building permits"}, {"recordid": "22494212", "allDay": true, "unit": "G1", "period": "August 2026", "types": [{"label": "Data release", "order": 1}, {"label": "Euro indicators release", "order": 2}], "euroind": true, "euroindAuthor": "estat", "start": "2026-10-05T11:00Z", "datasetCodes": "sts_inppd_a,sts_inppd_m,sts_inppd_q", "theme": "Industry, trade and services", "preliminary": false, "title": "Industrial producer prices, domestic market"}, {"recordid": "22494223", "allDay": true, "unit": "G1", "period": "August 2026", "types": [{"label": "Data release", "order": 1}], "euroind": true, "euroindAuthor": "estat", "start": "2026-10-06T11:00Z", "datasetCodes": "sts_inpi_m,sts_inpi_q,sts_inpi_a", "theme": "Industry, trade and services", "preliminary": false, "title": "Industrial import prices"}, {"recordid": "22494234", "allDay": true, "unit": "G1", "period": "August 2026", "types": [{"label": "Data release", "order": 1}, {"label": "Euro indicators release", "order": 2}], "euroind": true, "euroindAuthor": "estat", "start": "2026-10-06T11:00Z", "datasetCodes": "sts_trtu_m,sts_trtu_q,sts_trtu_a", "theme": "Industry, trade and services", "preliminary": false, "title": "Retail trade"}, {"recordid": "22494245", "allDay": true, "unit": "G1", "period": "Q2/2026", "types": [{"label": "Data release", "order": 1}], "euroind": true, "euroindAuthor": "estat", "start": "2026-10-06T11:00Z", "datasetCodes": "sts_sepp_q,sts_sepp_a", "theme": "Industry, trade and services", "preliminary": false, "title": "Services producer prices"}, {"recordid": "22494256", "allDay": true, "unit": "G1", "period": "July 2026", "types": [{"label": "Data release", "order": 1}, {"label": "Euro indicators release", "order": 2}], "euroind": true, "euroindAuthor": "estat", "start": "2026-10-07T11:00Z", "datasetCodes": "sts_sepr_m,sts_sepr_q,sts_sepr_a", "theme": "Industry, trade and services", "preliminary": false, "title": "Services production"}, {"recordid": "22494267", "allDay": true, "unit": "C1", "period": "September 2026", "types": [{"label": "Data release", "order": 1}, {"label": "Euro indicators release", "order": 2}], "euroind": true, "euroindAuthor": "ecb", "start": "2026-10-13T11:00Z", "datasetCodes": "", "theme": "", "preliminary": false, "title": "Interest rates (3 months)"}, {"recordid": "22494277", "allDay": true, "unit": "C1", "period": "SeptemberLine truncated
|
||||
+1216
File diff suppressed because it is too large.
Load diff
+708
@@ -0,0 +1,708 @@
|
||||
<html><head></head><body><h1 class="titre-principal information-rapide impression-nouvelle insee-conjoncture-2025-09-03"><img class="impression-seulement logo-insee"><div class="impression-seulement famille-date-numero">Informations Rapides ·
|
||||
30 septembre 2026 · n° 242</div><img class="impression-seulement logo-famille"><span class="titre-titre">En septembre 2026, les prix à la consommation augmenteraient de 3,0 % sur un an</span><span class="no-print"> </span><span class="sous-titre div-in-h test">Indice des prix à la consommation - résultats provisoires (IPC) - septembre 2026</span></h1><p class="auteurs hidden-template-impression"></p><div class="date-diffusion hidden-impression-information-rapide"><span class="hidden-template-impression"><span>Paru le :</span></span><span class="impression-seulement hidden-impression-information-rapide"><span>Paru le</span></span>30/09/2026</div><div class="date-diffusion hidden-impression-information-rapide"><span><span>Prochaine parution le :
|
||||
</span></span>30/10/2026 à 08h45<span class="hidden-impression-information-rapide"> - octobre 2026</span></div><p class="paragraphe ">Cette publication s’appuie sur des données provisoires. Les indices qui y figurent
|
||||
sont calculés sur un champ restreint d’observations de prix et à partir d’estimations
|
||||
des évolutions de certains tarifs non encore disponibles. Les résultats définitifs
|
||||
seront publiés le 15 octobre 2026. En conséquence, les indices provisoires ne doivent
|
||||
pas être utilisés pour des revalorisations contractuelles.</p><p class="paragraphe ">Sur un an, selon l’estimation provisoire réalisée en fin de mois, les prix à la consommation
|
||||
augmenteraient de 3,0 % en septembre 2026, après +2,4 % en août. Les prix de l’énergie
|
||||
accéléreraient de nouveau, tirés par ceux des produits pétroliers et du gaz. L’inflation
|
||||
des services augmenterait légèrement, notamment parce que la baisse saisonnière des
|
||||
prix des services d’hébergement et de transport serait moins marquée qu’en septembre
|
||||
2025. Les prix de l’alimentation accéléreraient également, notamment ceux des produits
|
||||
frais, tandis que la baisse de ceux des produits manufacturés s’atténuerait. Les prix
|
||||
du tabac augmenteraient sur un an au même rythme qu’au mois précédent.</p><p class="paragraphe ">Sur un mois, les prix à la consommation se replieraient de 0,3 %, après +0,7 % en
|
||||
août. Cette baisse s’expliquerait par le recul saisonnier des prix des services après
|
||||
la période estivale, principalement dans les services de transport et les services
|
||||
d’hébergement. Mais elle serait en bonne partie compensée par une nouvelle augmentation
|
||||
des prix de l’énergie, principalement de ceux des produits pétroliers et du gaz. Les
|
||||
prix des produits manufacturés augmenteraient comme chaque année en septembre. Ceux
|
||||
de l’alimentation augmenteraient pour le troisième mois consécutif, une nouvelle fois
|
||||
tirés par ceux des produits frais. Les prix du tabac seraient stables par rapport
|
||||
à août.</p><p class="paragraphe ">Sur un an, l’indice des prix à la consommation harmonisé augmenterait de 3,4 % en
|
||||
septembre 2026, après +2,6 % en août. Sur un mois, il baisserait de 0,4 %, après +0,7 %
|
||||
le mois précédent.</p><table class="tableau-produit">
|
||||
<caption>Indices des prix à la consommation (Évolutions annuelles (en %) ; base 100 : année 2025) - *: indice des prix à la consommation.
|
||||
**: indice des prix à la consommation harmonisé. </caption>
|
||||
<thead>
|
||||
<tr class="">
|
||||
<th class=""></th>
|
||||
<th class="">Pondérations 2026</th>
|
||||
<th class="">septembre 2025</th>
|
||||
<th class="">août 2026</th>
|
||||
<th class="">septembre 2026 (p) </th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr class="">
|
||||
<th class="ligne total ">Ensemble IPC*</th>
|
||||
<td class="nombre total ">10 000</td>
|
||||
<td class="nombre total ">1,2</td>
|
||||
<td class="nombre total ">2,4</td>
|
||||
<td class="nombre total ">3,0</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">Alimentation</th>
|
||||
<td class="nombre ">1 485</td>
|
||||
<td class="nombre ">1,7</td>
|
||||
<td class="nombre ">1,1</td>
|
||||
<td class="nombre ">1,5</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">- Produits frais</th>
|
||||
<td class="nombre ">170</td>
|
||||
<td class="nombre ">1,6</td>
|
||||
<td class="nombre ">5,9</td>
|
||||
<td class="nombre ">9,9</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">- Autre alimentation</th>
|
||||
<td class="nombre ">1 315</td>
|
||||
<td class="nombre ">1,7</td>
|
||||
<td class="nombre ">0,4</td>
|
||||
<td class="nombre ">0,4</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">Tabac</th>
|
||||
<td class="nombre ">168</td>
|
||||
<td class="nombre ">4,1</td>
|
||||
<td class="nombre ">3,3</td>
|
||||
<td class="nombre ">3,3</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">Énergie</th>
|
||||
<td class="nombre ">764</td>
|
||||
<td class="nombre ">-4,4</td>
|
||||
<td class="nombre ">16,7</td>
|
||||
<td class="nombre ">21,2</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">Produits manufacturés</th>
|
||||
<td class="nombre ">2 388</td>
|
||||
<td class="nombre ">-0,4</td>
|
||||
<td class="nombre ">-0,4</td>
|
||||
<td class="nombre ">-0,3</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">Services</th>
|
||||
<td class="nombre ">5 195</td>
|
||||
<td class="nombre ">2,4</td>
|
||||
<td class="nombre ">1,9</td>
|
||||
<td class="nombre ">2,2</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne total ">Ensemble IPCH**</th>
|
||||
<td class="nombre total ">10 000</td>
|
||||
<td class="nombre total ">1,1</td>
|
||||
<td class="nombre total ">2,6</td>
|
||||
<td class="nombre total ">3,4</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table><table class="tableau-produit">
|
||||
<caption>Évolutions de l'indice des prix à la consommation </caption>
|
||||
<thead>
|
||||
<tr class="">
|
||||
<th class=""></th>
|
||||
<th class="">Glissement annuel</th>
|
||||
<th class="">Variation mensuelle</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr class="">
|
||||
<th class="ligne ">2026-09</th>
|
||||
<td class="nombre ">3.0</td>
|
||||
<td class="nombre ">-0.3</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2026-08</th>
|
||||
<td class="nombre ">2.4</td>
|
||||
<td class="nombre ">0.7</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2026-07</th>
|
||||
<td class="nombre ">2.1</td>
|
||||
<td class="nombre ">0.6</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2026-06</th>
|
||||
<td class="nombre ">1.8</td>
|
||||
<td class="nombre ">-0.3</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2026-05</th>
|
||||
<td class="nombre ">2.4</td>
|
||||
<td class="nombre ">0.1</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2026-04</th>
|
||||
<td class="nombre ">2.2</td>
|
||||
<td class="nombre ">1.0</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2026-03</th>
|
||||
<td class="nombre ">1.7</td>
|
||||
<td class="nombre ">1.0</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2026-02</th>
|
||||
<td class="nombre ">0.9</td>
|
||||
<td class="nombre ">0.6</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2026-01</th>
|
||||
<td class="nombre ">0.3</td>
|
||||
<td class="nombre ">-0.3</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2025-12</th>
|
||||
<td class="nombre ">0.8</td>
|
||||
<td class="nombre ">0.1</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2025-11</th>
|
||||
<td class="nombre ">0.9</td>
|
||||
<td class="nombre ">-0.2</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2025-10</th>
|
||||
<td class="nombre ">0.9</td>
|
||||
<td class="nombre ">0.1</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2025-09</th>
|
||||
<td class="nombre ">1.2</td>
|
||||
<td class="nombre ">-1.0</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2025-08</th>
|
||||
<td class="nombre ">0.9</td>
|
||||
<td class="nombre ">0.4</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2025-07</th>
|
||||
<td class="nombre ">1.0</td>
|
||||
<td class="nombre ">0.2</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2025-06</th>
|
||||
<td class="nombre ">1.0</td>
|
||||
<td class="nombre ">0.4</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2025-05</th>
|
||||
<td class="nombre ">0.7</td>
|
||||
<td class="nombre ">-0.1</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2025-04</th>
|
||||
<td class="nombre ">0.8</td>
|
||||
<td class="nombre ">0.6</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2025-03</th>
|
||||
<td class="nombre ">0.8</td>
|
||||
<td class="nombre ">0.2</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2025-02</th>
|
||||
<td class="nombre ">0.8</td>
|
||||
<td class="nombre ">0.0</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2025-01</th>
|
||||
<td class="nombre ">1.6</td>
|
||||
<td class="nombre ">0.2</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2024-12</th>
|
||||
<td class="nombre ">1.3</td>
|
||||
<td class="nombre ">0.2</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2024-11</th>
|
||||
<td class="nombre ">1.3</td>
|
||||
<td class="nombre ">-0.2</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2024-10</th>
|
||||
<td class="nombre ">1.2</td>
|
||||
<td class="nombre ">0.3</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2024-09</th>
|
||||
<td class="nombre ">1.1</td>
|
||||
<td class="nombre ">-1.2</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2024-08</th>
|
||||
<td class="nombre ">1.8</td>
|
||||
<td class="nombre ">0.5</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2024-07</th>
|
||||
<td class="nombre ">2.3</td>
|
||||
<td class="nombre ">0.2</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2024-06</th>
|
||||
<td class="nombre ">2.2</td>
|
||||
<td class="nombre ">0.1</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2024-05</th>
|
||||
<td class="nombre ">2.3</td>
|
||||
<td class="nombre ">0.0</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2024-04</th>
|
||||
<td class="nombre ">2.2</td>
|
||||
<td class="nombre ">0.5</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2024-03</th>
|
||||
<td class="nombre ">2.3</td>
|
||||
<td class="nombre ">0.2</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2024-02</th>
|
||||
<td class="nombre ">3.0</td>
|
||||
<td class="nombre ">0.9</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2024-01</th>
|
||||
<td class="nombre ">3.1</td>
|
||||
<td class="nombre ">-0.2</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2023-12</th>
|
||||
<td class="nombre ">3.7</td>
|
||||
<td class="nombre ">0.1</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2023-11</th>
|
||||
<td class="nombre ">3.5</td>
|
||||
<td class="nombre ">-0.2</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2023-10</th>
|
||||
<td class="nombre ">4.0</td>
|
||||
<td class="nombre ">0.1</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2023-09</th>
|
||||
<td class="nombre ">4.9</td>
|
||||
<td class="nombre ">-0.5</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2023-08</th>
|
||||
<td class="nombre ">4.9</td>
|
||||
<td class="nombre ">1.0</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2023-07</th>
|
||||
<td class="nombre ">4.3</td>
|
||||
<td class="nombre ">0.1</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2023-06</th>
|
||||
<td class="nombre ">4.5</td>
|
||||
<td class="nombre ">0.2</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2023-05</th>
|
||||
<td class="nombre ">5.1</td>
|
||||
<td class="nombre ">-0.1</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2023-04</th>
|
||||
<td class="nombre ">5.9</td>
|
||||
<td class="nombre ">0.6</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2023-03</th>
|
||||
<td class="nombre ">5.7</td>
|
||||
<td class="nombre ">0.9</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2023-02</th>
|
||||
<td class="nombre ">6.3</td>
|
||||
<td class="nombre ">1.0</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2023-01</th>
|
||||
<td class="nombre ">6.0</td>
|
||||
<td class="nombre ">0.4</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2022-12</th>
|
||||
<td class="nombre ">5.8</td>
|
||||
<td class="nombre ">-0.1</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2022-11</th>
|
||||
<td class="nombre ">6.1</td>
|
||||
<td class="nombre ">0.3</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2022-10</th>
|
||||
<td class="nombre ">6.2</td>
|
||||
<td class="nombre ">1.0</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2022-09</th>
|
||||
<td class="nombre ">5.5</td>
|
||||
<td class="nombre ">-0.6</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2022-08</th>
|
||||
<td class="nombre ">5.9</td>
|
||||
<td class="nombre ">0.5</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2022-07</th>
|
||||
<td class="nombre ">6.1</td>
|
||||
<td class="nombre ">0.3</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2022-06</th>
|
||||
<td class="nombre ">5.8</td>
|
||||
<td class="nombre ">0.8</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2022-05</th>
|
||||
<td class="nombre ">5.2</td>
|
||||
<td class="nombre ">0.7</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2022-04</th>
|
||||
<td class="nombre ">4.8</td>
|
||||
<td class="nombre ">0.4</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2022-03</th>
|
||||
<td class="nombre ">4.5</td>
|
||||
<td class="nombre ">1.4</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2022-02</th>
|
||||
<td class="nombre ">3.6</td>
|
||||
<td class="nombre ">0.8</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2022-01</th>
|
||||
<td class="nombre ">2.9</td>
|
||||
<td class="nombre ">0.2</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2021-12</th>
|
||||
<td class="nombre ">2.8</td>
|
||||
<td class="nombre ">0.2</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2021-11</th>
|
||||
<td class="nombre ">2.8</td>
|
||||
<td class="nombre ">0.4</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2021-10</th>
|
||||
<td class="nombre ">2.6</td>
|
||||
<td class="nombre ">0.4</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2021-09</th>
|
||||
<td class="nombre ">2.2</td>
|
||||
<td class="nombre ">-0.2</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2021-08</th>
|
||||
<td class="nombre ">1.9</td>
|
||||
<td class="nombre ">0.6</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2021-07</th>
|
||||
<td class="nombre ">1.1</td>
|
||||
<td class="nombre ">0.1</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2021-06</th>
|
||||
<td class="nombre ">1.5</td>
|
||||
<td class="nombre ">0.1</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2021-05</th>
|
||||
<td class="nombre ">1.4</td>
|
||||
<td class="nombre ">0.3</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2021-04</th>
|
||||
<td class="nombre ">1.2</td>
|
||||
<td class="nombre ">0.1</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2021-03</th>
|
||||
<td class="nombre ">1.1</td>
|
||||
<td class="nombre ">0.6</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2021-02</th>
|
||||
<td class="nombre ">0.6</td>
|
||||
<td class="nombre ">0.0</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2021-01</th>
|
||||
<td class="nombre ">0.6</td>
|
||||
<td class="nombre ">0.1</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2020-12</th>
|
||||
<td class="nombre ">0.0</td>
|
||||
<td class="nombre ">0.2</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2020-11</th>
|
||||
<td class="nombre ">0.2</td>
|
||||
<td class="nombre ">0.2</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2020-10</th>
|
||||
<td class="nombre ">0.1</td>
|
||||
<td class="nombre ">0.0</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2020-09</th>
|
||||
<td class="nombre ">0.0</td>
|
||||
<td class="nombre ">-0.5</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2020-08</th>
|
||||
<td class="nombre ">0.2</td>
|
||||
<td class="nombre ">-0.1</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2020-07</th>
|
||||
<td class="nombre ">0.8</td>
|
||||
<td class="nombre ">0.4</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2020-06</th>
|
||||
<td class="nombre ">0.2</td>
|
||||
<td class="nombre ">0.1</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2020-05</th>
|
||||
<td class="nombre ">0.4</td>
|
||||
<td class="nombre ">0.2</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2020-04</th>
|
||||
<td class="nombre ">0.3</td>
|
||||
<td class="nombre ">0.0</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2020-03</th>
|
||||
<td class="nombre ">0.7</td>
|
||||
<td class="nombre ">0.0</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2020-02</th>
|
||||
<td class="nombre ">1.4</td>
|
||||
<td class="nombre ">0.0</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2020-01</th>
|
||||
<td class="nombre ">1.5</td>
|
||||
<td class="nombre ">-0.4</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2019-12</th>
|
||||
<td class="nombre ">1.4</td>
|
||||
<td class="nombre ">0.4</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2019-11</th>
|
||||
<td class="nombre ">1.0</td>
|
||||
<td class="nombre ">0.1</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2019-10</th>
|
||||
<td class="nombre ">0.8</td>
|
||||
<td class="nombre ">0.0</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2019-09</th>
|
||||
<td class="nombre ">0.9</td>
|
||||
<td class="nombre ">-0.3</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2019-08</th>
|
||||
<td class="nombre ">1.0</td>
|
||||
<td class="nombre ">0.5</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2019-07</th>
|
||||
<td class="nombre ">1.1</td>
|
||||
<td class="nombre ">-0.2</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2019-06</th>
|
||||
<td class="nombre ">1.2</td>
|
||||
<td class="nombre ">0.2</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2019-05</th>
|
||||
<td class="nombre ">0.9</td>
|
||||
<td class="nombre ">0.1</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2019-04</th>
|
||||
<td class="nombre ">1.3</td>
|
||||
<td class="nombre ">0.3</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2019-03</th>
|
||||
<td class="nombre ">1.1</td>
|
||||
<td class="nombre ">0.8</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2019-02</th>
|
||||
<td class="nombre ">1.3</td>
|
||||
<td class="nombre ">0.1</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2019-01</th>
|
||||
<td class="nombre ">1.2</td>
|
||||
<td class="nombre ">-0.5</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2018-12</th>
|
||||
<td class="nombre ">1.6</td>
|
||||
<td class="nombre ">0.0</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2018-11</th>
|
||||
<td class="nombre ">1.9</td>
|
||||
<td class="nombre ">-0.2</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2018-10</th>
|
||||
<td class="nombre ">2.2</td>
|
||||
<td class="nombre ">0.1</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2018-09</th>
|
||||
<td class="nombre ">2.2</td>
|
||||
<td class="nombre ">-0.2</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2018-08</th>
|
||||
<td class="nombre ">2.3</td>
|
||||
<td class="nombre ">0.5</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2018-07</th>
|
||||
<td class="nombre ">2.3</td>
|
||||
<td class="nombre ">-0.1</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2018-06</th>
|
||||
<td class="nombre ">2.0</td>
|
||||
<td class="nombre ">0.0</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2018-05</th>
|
||||
<td class="nombre ">2.0</td>
|
||||
<td class="nombre ">0.4</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2018-04</th>
|
||||
<td class="nombre ">1.6</td>
|
||||
<td class="nombre ">0.2</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2018-03</th>
|
||||
<td class="nombre ">1.6</td>
|
||||
<td class="nombre ">1.0</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2018-02</th>
|
||||
<td class="nombre ">1.2</td>
|
||||
<td class="nombre ">0.0</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2018-01</th>
|
||||
<td class="nombre ">1.3</td>
|
||||
<td class="nombre ">-0.1</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2017-12</th>
|
||||
<td class="nombre ">1.2</td>
|
||||
<td class="nombre ">0.3</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2017-11</th>
|
||||
<td class="nombre ">1.2</td>
|
||||
<td class="nombre ">0.1</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2017-10</th>
|
||||
<td class="nombre ">1.1</td>
|
||||
<td class="nombre ">0.1</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2017-09</th>
|
||||
<td class="nombre ">1.0</td>
|
||||
<td class="nombre ">-0.2</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2017-08</th>
|
||||
<td class="nombre ">0.9</td>
|
||||
<td class="nombre ">0.5</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2017-07</th>
|
||||
<td class="nombre ">0.7</td>
|
||||
<td class="nombre ">-0.3</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2017-06</th>
|
||||
<td class="nombre ">0.7</td>
|
||||
<td class="nombre ">0.0</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2017-05</th>
|
||||
<td class="nombre ">0.8</td>
|
||||
<td class="nombre ">0.0</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2017-04</th>
|
||||
<td class="nombre ">1.2</td>
|
||||
<td class="nombre ">0.1</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2017-03</th>
|
||||
<td class="nombre ">1.1</td>
|
||||
<td class="nombre ">0.6</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2017-02</th>
|
||||
<td class="nombre ">1.2</td>
|
||||
<td class="nombre ">0.1</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2017-01</th>
|
||||
<td class="nombre ">1.3</td>
|
||||
<td class="nombre ">-0.3</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table><p class="paragraphe ">Définition : l’indice des prix à la consommation harmonisé (IPCH) est utilisé pour
|
||||
les comparaisons entre membres de l’Union européenne. Il est calculé pour tous les
|
||||
ménages, en France. La principale différence entre l’IPCH et l’IPC porte sur les dépenses
|
||||
de santé : l’IPCH suit des prix nets des remboursements de la sécurité sociale tandis
|
||||
que l’IPC suit des prix bruts.</p><p class="paragraphe ">Publication des résultats définitifs (septembre 2026) : le 15 octobre 2026, à 8h45.</p><p class="paragraphe ">Prochaine parution (résultats provisoires – octobre 2026) : le 30 octobre 2026, à 8h45.</p><p class="paragraphe dictionnaire-variable chevron-avant-lien"><a class="lien-dictionnaire-variable">Note méthodologique</a> <span class="format-taille">(pdf,166 Ko)</span></p><p class="paragraphe dictionnaire-variable chevron-avant-lien"><a class="lien-dictionnaire-variable">Indice des prix à la consommation : les changements 2026</a> <span class="format-taille">(pdf,141 Ko)</span></p><p class="paragraphe chevron-avant-lien"><a>Indice des prix à la consommation</a></p><p class="paragraphe chevron-avant-lien"><a>Classification des fonctions de consommation des ménages - eCoicop V2</a></p><p class="paragraphe ">Définition : l’indice des prix à la consommation harmonisé (IPCH) est utilisé pour
|
||||
les comparaisons entre membres de l’Union européenne. Il est calculé pour tous les
|
||||
ménages, en France. La principale différence entre l’IPCH et l’IPC porte sur les dépenses
|
||||
de santé : l’IPCH suit des prix nets des remboursements de la sécurité sociale tandis
|
||||
que l’IPC suit des prix bruts.</p><p class="paragraphe ">Publication des résultats définitifs (septembre 2026) : le 15 octobre 2026, à 8h45.</p><p class="paragraphe ">Prochaine parution (résultats provisoires – octobre 2026) : le 30 octobre 2026, à 8h45.</p><p class="paragraphe ">Séries chronologiques :
|
||||
<a class="renvoi">Indices des prix à la consommation - Données mensuelles depuis 1996 (Base 2025)</a> </p><p class="paragraphe ">Série chronologique IPCH :
|
||||
<a class="renvoi"> Indice des prix à la consommation harmonisé - Base 2025 - Ensemble</a> </p><p class="paragraphe ">
|
||||
<a class="renvoi">Agenda et règles de diffusion des indicateurs</a> </p></body></html>
|
||||
+632
@@ -0,0 +1,632 @@
|
||||
<html><head></head><body><h1 class="titre-principal information-rapide impression-nouvelle insee-conjoncture-2025-09-03"><img class="impression-seulement logo-insee"><div class="impression-seulement famille-date-numero">Informations Rapides ·
|
||||
28 août 2026 · n° 212</div><img class="impression-seulement logo-famille"><span class="titre-titre">Au deuxième trimestre 2026, le PIB est stable (+0,0 % après -0,2 %) et le pouvoir
|
||||
d’achat des ménages recule nettement (-0,6 % par unité de consommation)</span><span class="no-print"> </span><span class="sous-titre div-in-h test">Comptes nationaux trimestriels - résultats détaillés - deuxième trimestre 2026</span></h1><p class="auteurs hidden-template-impression"></p><p class="paragraphe-chapeau ">Le produit intérieur brut (PIB) en volume est stable au deuxième trimestre 2026, après
|
||||
-0,2 % au trimestre précédent. L’acquis de croissance pour l’année 2026 est de +0,3 %.
|
||||
</p><p class="paragraphe-chapeau ">Le pouvoir d’achat du revenu disponible brut (RDB) des ménages par unité de consommation
|
||||
recule nettement (-0,6 % après -0,2 %). Le taux d’épargne des ménages se replie fortement ce
|
||||
trimestre : il s’établit ainsi à 17,2 % de leur RDB, après 17,9 % au trimestre précédent.</p><p class="paragraphe-chapeau ">Le taux de marge des sociétés non financières (SNF) se stabilise au deuxième trimestre
|
||||
2026 : il se maintient à 31,5 % de leur valeur ajoutée, comme au premier trimestre
|
||||
2026.</p><div class="date-diffusion hidden-impression-information-rapide"><span class="hidden-template-impression"><span>Paru le :</span></span><span class="impression-seulement hidden-impression-information-rapide"><span>Paru le</span></span>28/08/2026</div><div class="date-diffusion hidden-impression-information-rapide"><span><span>Prochaine parution le :
|
||||
</span></span>27/11/2026 à 08h45<span class="hidden-impression-information-rapide"> - troisième trimestre 2026</span></div><p class="paragraphe ">Les jeux de données associés à cette publication sont désormais disponibles dans le
|
||||
catalogue Melodi : <a class="renvoi">Équilibre du produit intérieur brut</a>, <a class="renvoi"> Opérations sur biens et services</a>, <a class="renvoi">Comptes de secteurs institutionnels</a>, <a class="renvoi">Comptes des branches</a>. Ils restent toujours disponibles dans la Banque de données macroéconomiques.</p><p class="paragraphe ">Le produit intérieur brut (PIB) en volume est stable au deuxième trimestre 2026, après
|
||||
-0,2 % au trimestre précédent. L’acquis de croissance pour l’année 2026 est de +0,3 %.
|
||||
</p><p class="paragraphe ">Le pouvoir d’achat du revenu disponible brut (RDB) des ménages par unité de consommation
|
||||
recule nettement (-0,6 % après -0,2 %). Le taux d’épargne des ménages se replie fortement ce
|
||||
trimestre : il s’établit ainsi à 17,2 % de leur RDB, après 17,9 % au trimestre précédent.</p><p class="paragraphe ">Le taux de marge des sociétés non financières (SNF) se stabilise au deuxième trimestre
|
||||
2026 : il se maintient à 31,5 % de leur valeur ajoutée, comme au premier trimestre
|
||||
2026.</p><p class="paragraphe ">Au deuxième trimestre 2026, le PIB en volume* est stable (après -0,2 % au premier
|
||||
trimestre). La consommation des ménages rebondit (+0,3 % après -0,3 %). La formation
|
||||
brute de capital fixe (FBCF) recule légèrement ce trimestre (-0,3 % après -0,8 %),
|
||||
pénalisée par la poursuite de la baisse de la FBCF en services marchands (-0,6 % après
|
||||
+0,3 %) et par le repli de celle en construction (-0,2 % après -2,1 %). Les dépenses
|
||||
de consommation des administrations publiques augmentent un peu plus vite qu’au trimestre
|
||||
précédent (+0,4 % après +0,3 %). Au total, la demande intérieure finale hors stocks
|
||||
contribue légèrement à la croissance du PIB ce trimestre (+0,2 point après -0,3 point).</p><p class="paragraphe ">Les exportations repartent nettement à la hausse ce trimestre (+2,9 % après -3,0 %),
|
||||
en particulier dans l’aéronautique. Les importations, quant à elles, rebondissent
|
||||
plus modérément au deuxième trimestre (+1,1 % après -0,6 %). Au total, la contribution
|
||||
du commerce extérieur à l’évolution du PIB est positive au deuxième trimestre 2026
|
||||
(+0,6 point après -0,9 point).</p><p class="paragraphe ">Enfin, la contribution des variations de stocks à l’évolution du PIB est négative
|
||||
ce trimestre (-0,7 point après +0,9 point au trimestre précédent).</p><table class="tableau-produit">
|
||||
<caption>Le produit intérieur brut et ses composantes </caption>
|
||||
<thead>
|
||||
<tr class="">
|
||||
<th class=""></th>
|
||||
<th class="">Investissement</th>
|
||||
<th class="">Commerce extérieur</th>
|
||||
<th class="">Consommation</th>
|
||||
<th class="">Variations de stocks</th>
|
||||
<th class="">PIB</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr class="">
|
||||
<th class="ligne ">2026-T2</th>
|
||||
<td class="nombre ">-0.06</td>
|
||||
<td class="nombre ">0.57</td>
|
||||
<td class="nombre ">0.25</td>
|
||||
<td class="nombre ">-0.73</td>
|
||||
<td class="nombre ">0.0</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2026-T1</th>
|
||||
<td class="nombre ">-0.18</td>
|
||||
<td class="nombre ">-0.86</td>
|
||||
<td class="nombre ">-0.08</td>
|
||||
<td class="nombre ">0.93</td>
|
||||
<td class="nombre ">-0.2</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2025-T4</th>
|
||||
<td class="nombre ">0.03</td>
|
||||
<td class="nombre ">0.56</td>
|
||||
<td class="nombre ">0.19</td>
|
||||
<td class="nombre ">-0.51</td>
|
||||
<td class="nombre ">0.3</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2025-T3</th>
|
||||
<td class="nombre ">0.16</td>
|
||||
<td class="nombre ">0.63</td>
|
||||
<td class="nombre ">0.17</td>
|
||||
<td class="nombre ">-0.53</td>
|
||||
<td class="nombre ">0.4</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2025-T2</th>
|
||||
<td class="nombre ">0.1</td>
|
||||
<td class="nombre ">-0.32</td>
|
||||
<td class="nombre ">0.08</td>
|
||||
<td class="nombre ">0.37</td>
|
||||
<td class="nombre ">0.2</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2025-T1</th>
|
||||
<td class="nombre ">0.06</td>
|
||||
<td class="nombre ">-0.43</td>
|
||||
<td class="nombre ">-0.04</td>
|
||||
<td class="nombre ">0.58</td>
|
||||
<td class="nombre ">0.2</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2024-T4</th>
|
||||
<td class="nombre ">0.02</td>
|
||||
<td class="nombre ">0.22</td>
|
||||
<td class="nombre ">0.03</td>
|
||||
<td class="nombre ">-0.28</td>
|
||||
<td class="nombre ">0.0</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2024-T3</th>
|
||||
<td class="nombre ">-0.2</td>
|
||||
<td class="nombre ">-0.47</td>
|
||||
<td class="nombre ">0.48</td>
|
||||
<td class="nombre ">0.62</td>
|
||||
<td class="nombre ">0.4</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2024-T2</th>
|
||||
<td class="nombre ">0.09</td>
|
||||
<td class="nombre ">0.35</td>
|
||||
<td class="nombre ">-0.04</td>
|
||||
<td class="nombre ">-0.18</td>
|
||||
<td class="nombre ">0.2</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2024-T1</th>
|
||||
<td class="nombre ">-0.14</td>
|
||||
<td class="nombre ">0.35</td>
|
||||
<td class="nombre ">0.26</td>
|
||||
<td class="nombre ">-0.22</td>
|
||||
<td class="nombre ">0.2</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2023-T4</th>
|
||||
<td class="nombre ">-0.17</td>
|
||||
<td class="nombre ">0.88</td>
|
||||
<td class="nombre ">0.02</td>
|
||||
<td class="nombre ">-0.22</td>
|
||||
<td class="nombre ">0.5</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2023-T3</th>
|
||||
<td class="nombre ">-0.03</td>
|
||||
<td class="nombre ">0.04</td>
|
||||
<td class="nombre ">0.43</td>
|
||||
<td class="nombre ">-0.08</td>
|
||||
<td class="nombre ">0.4</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2023-T2</th>
|
||||
<td class="nombre ">0.28</td>
|
||||
<td class="nombre ">0.81</td>
|
||||
<td class="nombre ">0.12</td>
|
||||
<td class="nombre ">-0.28</td>
|
||||
<td class="nombre ">0.9</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2023-T1</th>
|
||||
<td class="nombre ">0.02</td>
|
||||
<td class="nombre ">0.4</td>
|
||||
<td class="nombre ">0.13</td>
|
||||
<td class="nombre ">-0.41</td>
|
||||
<td class="nombre ">0.1</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2022-T4</th>
|
||||
<td class="nombre ">0.16</td>
|
||||
<td class="nombre ">0.28</td>
|
||||
<td class="nombre ">0.01</td>
|
||||
<td class="nombre ">-0.05</td>
|
||||
<td class="nombre ">0.4</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2022-T3</th>
|
||||
<td class="nombre ">0.2</td>
|
||||
<td class="nombre ">-0.69</td>
|
||||
<td class="nombre ">0.49</td>
|
||||
<td class="nombre ">0.51</td>
|
||||
<td class="nombre ">0.5</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2022-T2</th>
|
||||
<td class="nombre ">-0.09</td>
|
||||
<td class="nombre ">-0.48</td>
|
||||
<td class="nombre ">0.54</td>
|
||||
<td class="nombre ">0.41</td>
|
||||
<td class="nombre ">0.4</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2022-T1</th>
|
||||
<td class="nombre ">-0.04</td>
|
||||
<td class="nombre ">0.37</td>
|
||||
<td class="nombre ">-0.3</td>
|
||||
<td class="nombre ">-0.04</td>
|
||||
<td class="nombre ">0.0</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table><table class="tableau-produit">
|
||||
<caption>Le PIB et ses composantes en volumes chaînés (variations en %, données CVS-CJO)</caption>
|
||||
<thead>
|
||||
<tr class="">
|
||||
<th class=""></th>
|
||||
<th class="">2025T3</th>
|
||||
<th class="">2025T4</th>
|
||||
<th class="">2026T1</th>
|
||||
<th class="">2026T2</th>
|
||||
<th class="">2025</th>
|
||||
<th class="">2026 (acquis)</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr class="">
|
||||
<th class="ligne ">PIB </th>
|
||||
<td class="nombre ">0,4</td>
|
||||
<td class="nombre ">0,3</td>
|
||||
<td class="nombre ">-0,2</td>
|
||||
<td class="nombre ">0,0</td>
|
||||
<td class="nombre ">0,9</td>
|
||||
<td class="nombre ">0,3</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">Importations </th>
|
||||
<td class="nombre ">1,0</td>
|
||||
<td class="nombre ">-0,5</td>
|
||||
<td class="nombre ">-0,6</td>
|
||||
<td class="nombre ">1,1</td>
|
||||
<td class="nombre ">3,0</td>
|
||||
<td class="nombre ">0,6</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">Dép. conso. ménages </th>
|
||||
<td class="nombre ">0,1</td>
|
||||
<td class="nombre ">0,2</td>
|
||||
<td class="nombre ">-0,3</td>
|
||||
<td class="nombre ">0,3</td>
|
||||
<td class="nombre ">0,5</td>
|
||||
<td class="nombre ">0,1</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">Dép. conso. APU* </th>
|
||||
<td class="nombre ">0,5</td>
|
||||
<td class="nombre ">0,2</td>
|
||||
<td class="nombre ">0,3</td>
|
||||
<td class="nombre ">0,4</td>
|
||||
<td class="nombre ">0,6</td>
|
||||
<td class="nombre ">1,1</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">FBCF totale</th>
|
||||
<td class="nombre ">0,7</td>
|
||||
<td class="nombre ">0,1</td>
|
||||
<td class="nombre ">-0,8</td>
|
||||
<td class="nombre ">-0,3</td>
|
||||
<td class="nombre ">0,7</td>
|
||||
<td class="nombre ">-0,4</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ventilation ">dont ENF**</th>
|
||||
<td class="nombre ventilation ">1,0</td>
|
||||
<td class="nombre ventilation ">-0,3</td>
|
||||
<td class="nombre ventilation ">-0,5</td>
|
||||
<td class="nombre ventilation ">0,1</td>
|
||||
<td class="nombre ventilation ">0,7</td>
|
||||
<td class="nombre ventilation ">0,0</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ventilation ">dont Ménages</th>
|
||||
<td class="nombre ventilation ">0,5</td>
|
||||
<td class="nombre ventilation ">0,6</td>
|
||||
<td class="nombre ventilation ">-1,6</td>
|
||||
<td class="nombre ventilation ">-0,4</td>
|
||||
<td class="nombre ventilation ">0,1</td>
|
||||
<td class="nombre ventilation ">-1,2</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ventilation ">dont APU*</th>
|
||||
<td class="nombre ventilation ">0,5</td>
|
||||
<td class="nombre ventilation ">0,3</td>
|
||||
<td class="nombre ventilation ">-1,4</td>
|
||||
<td class="nombre ventilation ">-1,1</td>
|
||||
<td class="nombre ventilation ">2,7</td>
|
||||
<td class="nombre ventilation ">-1,4</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">Exportations </th>
|
||||
<td class="nombre ">2,8</td>
|
||||
<td class="nombre ">1,0</td>
|
||||
<td class="nombre ">-3,0</td>
|
||||
<td class="nombre ">2,9</td>
|
||||
<td class="nombre ">2,4</td>
|
||||
<td class="nombre ">1,3</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">Contributions : </th>
|
||||
<td class="nombre "></td>
|
||||
<td class="nombre "></td>
|
||||
<td class="nombre "></td>
|
||||
<td class="nombre "></td>
|
||||
<td class="nombre "></td>
|
||||
<td class="nombre "></td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">Demande intérieure finale hors stocks </th>
|
||||
<td class="nombre ">0,3</td>
|
||||
<td class="nombre ">0,2</td>
|
||||
<td class="nombre ">-0,3</td>
|
||||
<td class="nombre ">0,2</td>
|
||||
<td class="nombre ">0,5</td>
|
||||
<td class="nombre ">0,2</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">Variations de stocks </th>
|
||||
<td class="nombre ">-0,5</td>
|
||||
<td class="nombre ">-0,5</td>
|
||||
<td class="nombre ">0,9</td>
|
||||
<td class="nombre ">-0,7</td>
|
||||
<td class="nombre ">0,6</td>
|
||||
<td class="nombre ">-0,1</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">Commerce extérieur </th>
|
||||
<td class="nombre ">0,6</td>
|
||||
<td class="nombre ">0,6</td>
|
||||
<td class="nombre ">-0,9</td>
|
||||
<td class="nombre ">0,6</td>
|
||||
<td class="nombre ">-0,2</td>
|
||||
<td class="nombre ">0,2</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table><table class="tableau-produit">
|
||||
<caption>Production, consommation et FBCF : principales composantes (variations en %, données CVS-CJO)</caption>
|
||||
<thead>
|
||||
<tr class="">
|
||||
<th class=""></th>
|
||||
<th class="">2025T3</th>
|
||||
<th class="">2025T4</th>
|
||||
<th class="">2026T1</th>
|
||||
<th class="">2026T2</th>
|
||||
<th class="">2025</th>
|
||||
<th class="">2026 (acquis)</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr class="">
|
||||
<td class="total ">Production branche </td>
|
||||
<td class="nombre total ">0,7</td>
|
||||
<td class="nombre total ">0,3</td>
|
||||
<td class="nombre total ">0,0</td>
|
||||
<td class="nombre total ">0,1</td>
|
||||
<td class="nombre total ">1,0</td>
|
||||
<td class="nombre total ">0,7</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">Biens </th>
|
||||
<td class="nombre ">1,4</td>
|
||||
<td class="nombre ">0,0</td>
|
||||
<td class="nombre ">-0,1</td>
|
||||
<td class="nombre ">-0,1</td>
|
||||
<td class="nombre ">1,2</td>
|
||||
<td class="nombre ">0,5</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<td class="ventilation ">Ind. manufacturière </td>
|
||||
<td class="nombre ventilation ">1,0</td>
|
||||
<td class="nombre ventilation ">-0,2</td>
|
||||
<td class="nombre ventilation ">0,5</td>
|
||||
<td class="nombre ventilation ">0,1</td>
|
||||
<td class="nombre ventilation ">1,3</td>
|
||||
<td class="nombre ventilation ">1,0</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">Construction </th>
|
||||
<td class="nombre ">0,2</td>
|
||||
<td class="nombre ">0,3</td>
|
||||
<td class="nombre ">-1,7</td>
|
||||
<td class="nombre ">-0,3</td>
|
||||
<td class="nombre ">-1,8</td>
|
||||
<td class="nombre ">-1,7</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">Services marchands </th>
|
||||
<td class="nombre ">0,5</td>
|
||||
<td class="nombre ">0,5</td>
|
||||
<td class="nombre ">0,1</td>
|
||||
<td class="nombre ">0,3</td>
|
||||
<td class="nombre ">1,5</td>
|
||||
<td class="nombre ">1,0</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">Services non marchands </th>
|
||||
<td class="nombre ">0,3</td>
|
||||
<td class="nombre ">0,2</td>
|
||||
<td class="nombre ">0,3</td>
|
||||
<td class="nombre ">0,2</td>
|
||||
<td class="nombre ">0,4</td>
|
||||
<td class="nombre ">0,9</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<td class="total ">Consommation des ménages </td>
|
||||
<td class="nombre total ">0,1</td>
|
||||
<td class="nombre total ">0,2</td>
|
||||
<td class="nombre total ">-0,3</td>
|
||||
<td class="nombre total ">0,3</td>
|
||||
<td class="nombre total ">0,5</td>
|
||||
<td class="nombre total ">0,1</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">Alimentaire </th>
|
||||
<td class="nombre ">-0,9</td>
|
||||
<td class="nombre ">0,4</td>
|
||||
<td class="nombre ">-0,8</td>
|
||||
<td class="nombre ">0,0</td>
|
||||
<td class="nombre ">0,5</td>
|
||||
<td class="nombre ">-0,6</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">Énergie </th>
|
||||
<td class="nombre ">0,8</td>
|
||||
<td class="nombre ">0,6</td>
|
||||
<td class="nombre ">-2,4</td>
|
||||
<td class="nombre ">-1,7</td>
|
||||
<td class="nombre ">0,3</td>
|
||||
<td class="nombre ">-3,4</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">Biens fabriqués </th>
|
||||
<td class="nombre ">0,7</td>
|
||||
<td class="nombre ">0,7</td>
|
||||
<td class="nombre ">0,3</td>
|
||||
<td class="nombre ">1,5</td>
|
||||
<td class="nombre ">-0,5</td>
|
||||
<td class="nombre ">2,2</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">Services </th>
|
||||
<td class="nombre ">0,2</td>
|
||||
<td class="nombre ">0,2</td>
|
||||
<td class="nombre ">0,1</td>
|
||||
<td class="nombre ">0,2</td>
|
||||
<td class="nombre ">1,2</td>
|
||||
<td class="nombre ">0,6</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<td class="total ">FBCF </td>
|
||||
<td class="nombre total ">0,7</td>
|
||||
<td class="nombre total ">0,1</td>
|
||||
<td class="nombre total ">-0,8</td>
|
||||
<td class="nombre total ">-0,3</td>
|
||||
<td class="nombre total ">0,7</td>
|
||||
<td class="nombre total ">-0,4</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">Produits manufacturés </th>
|
||||
<td class="nombre ">0,9</td>
|
||||
<td class="nombre ">-1,2</td>
|
||||
<td class="nombre ">0,0</td>
|
||||
<td class="nombre ">0,2</td>
|
||||
<td class="nombre ">0,8</td>
|
||||
<td class="nombre ">0,1</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">Construction </th>
|
||||
<td class="nombre ">0,2</td>
|
||||
<td class="nombre ">0,4</td>
|
||||
<td class="nombre ">-2,1</td>
|
||||
<td class="nombre ">-0,2</td>
|
||||
<td class="nombre ">-2,2</td>
|
||||
<td class="nombre ">-1,9</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">Services marchands </th>
|
||||
<td class="nombre ">1,3</td>
|
||||
<td class="nombre ">0,6</td>
|
||||
<td class="nombre ">0,3</td>
|
||||
<td class="nombre ">-0,6</td>
|
||||
<td class="nombre ">4,6</td>
|
||||
<td class="nombre ">1,1</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table><p class="paragraphe ">Au deuxième trimestre 2026, le revenu disponible brut (RDB) des ménages en euros courants
|
||||
augmente de nouveau (+0,5 % après +0,5 %). Les prestations sociales ralentissent légèrement
|
||||
ce trimestre (+0,4 % après +0,6 %). La masse salariale reçue par les ménages augmente
|
||||
à un rythme proche de celui du trimestre précédent (+0,3 % après +0,4 %). Les impôts
|
||||
et cotisations accélèrent (+0,9 % après +0,5 %). </p><p class="paragraphe ">Dans le même temps, le prix de la consommation des ménages accélère (+1,0 % après
|
||||
+0,6 %, en CVS-CJO). Ainsi, le pouvoir d’achat du RDB des ménages recule nettement
|
||||
ce trimestre (-0,5 % après -0,1 %). Mesuré par unité de consommation pour être ramené
|
||||
à un niveau individuel, il diminue de nouveau ce trimestre (-0,6 % après -0,2 %).</p><p class="paragraphe ">Le taux d’épargne des ménages fléchit fortement, sous l’effet combiné de l’accélération
|
||||
de leur consommation et du recul de leur pouvoir d’achat : il s’établit ainsi à 17,2 %,
|
||||
après 17,9 % au premier trimestre 2026.</p><table class="tableau-produit">
|
||||
<caption>Revenu disponible brut et ratios des comptes des ménages (variations t/t-1, en %, données CVS-CJO)</caption>
|
||||
<thead>
|
||||
<tr class="">
|
||||
<th class=""></th>
|
||||
<th class="">2025T3</th>
|
||||
<th class="">2025T4</th>
|
||||
<th class="">2026T1</th>
|
||||
<th class="">2026T2</th>
|
||||
<th class="">2025</th>
|
||||
<th class="">2026 (acquis)</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr class="">
|
||||
<th class="ligne ">RDB </th>
|
||||
<td class="nombre ">0,0</td>
|
||||
<td class="nombre ">0,5</td>
|
||||
<td class="nombre ">0,5</td>
|
||||
<td class="nombre ">0,5</td>
|
||||
<td class="nombre ">0,5</td>
|
||||
<td class="nombre ">1,3</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">RDB (pouvoir d'achat) </th>
|
||||
<td class="nombre ">-0,4</td>
|
||||
<td class="nombre ">0,3</td>
|
||||
<td class="nombre ">-0,1</td>
|
||||
<td class="nombre ">-0,5</td>
|
||||
<td class="nombre ">-0,4</td>
|
||||
<td class="nombre ">-0,4</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">RDB par uc* (pouvoir d'achat) </th>
|
||||
<td class="nombre ">-0,4</td>
|
||||
<td class="nombre ">0,2</td>
|
||||
<td class="nombre ">-0,2</td>
|
||||
<td class="nombre ">-0,6</td>
|
||||
<td class="nombre ">-0,7</td>
|
||||
<td class="nombre ">-0,7</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">RDB ajusté (pouvoir d'achat) </th>
|
||||
<td class="nombre ">-0,2</td>
|
||||
<td class="nombre ">0,2</td>
|
||||
<td class="nombre ">0,0</td>
|
||||
<td class="nombre ">-0,2</td>
|
||||
<td class="nombre ">-0,1</td>
|
||||
<td class="nombre ">0,0</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">Taux d'épargne (niveau) </th>
|
||||
<td class="nombre ">17,7</td>
|
||||
<td class="nombre ">17,7</td>
|
||||
<td class="nombre ">17,9</td>
|
||||
<td class="nombre ">17,2</td>
|
||||
<td class="nombre ">17,8</td>
|
||||
<td class="nombre ">nd</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">Taux d'épargne financière (niveau) </th>
|
||||
<td class="nombre ">8,7</td>
|
||||
<td class="nombre ">8,7</td>
|
||||
<td class="nombre ">9,1</td>
|
||||
<td class="nombre ">8,5</td>
|
||||
<td class="nombre ">8,9</td>
|
||||
<td class="nombre ">nd</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table><p class="paragraphe ">Au deuxième trimestre 2026, le nombre total d’heures travaillées recule légèrement
|
||||
(-0,1 % après -0,1 %). L’emploi total est stable, après une quasi-stabilité le trimestre
|
||||
précédent. Comme au trimestre précédent, la légère baisse de l’emploi salarié est
|
||||
contrebalancée par une nouvelle hausse de l’emploi non salarié.</p><p class="paragraphe ">Le taux de marge des sociétés non financières (SNF) s’établit à 31,5 %, comme au trimestre
|
||||
précédent. Il est de nouveau fortement pénalisé par les termes de l’échange, avec
|
||||
l’augmentation des prix de l’énergie sur le marché mondial, mais cet effet est contrebalancé
|
||||
par la baisse des salaires réels.</p><table class="tableau-produit">
|
||||
<caption>Ratios des comptes des sociétés non financières (niveaux en %, données CVS-CJO)</caption>
|
||||
<thead>
|
||||
<tr class="">
|
||||
<th class=""></th>
|
||||
<th class="">2025T3</th>
|
||||
<th class="">2025T4</th>
|
||||
<th class="">2026T1</th>
|
||||
<th class="">2026T2</th>
|
||||
<th class="">2025</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr class="">
|
||||
<th class="ligne ">Taux de marge </th>
|
||||
<td class="nombre ">32,4</td>
|
||||
<td class="nombre ">32,5</td>
|
||||
<td class="nombre ">31,5</td>
|
||||
<td class="nombre ">31,5</td>
|
||||
<td class="nombre ">32,4</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">Taux d'investissement </th>
|
||||
<td class="nombre ">22,7</td>
|
||||
<td class="nombre ">22,5</td>
|
||||
<td class="nombre ">22,7</td>
|
||||
<td class="nombre ">22,8</td>
|
||||
<td class="nombre ">22,6</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">Taux d'épargne </th>
|
||||
<td class="nombre ">21,1</td>
|
||||
<td class="nombre ">19,3</td>
|
||||
<td class="nombre ">19,7</td>
|
||||
<td class="nombre ">19,6</td>
|
||||
<td class="nombre ">20,2</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">Taux d'autofinancement </th>
|
||||
<td class="nombre ">92,8</td>
|
||||
<td class="nombre ">85,4</td>
|
||||
<td class="nombre ">87,1</td>
|
||||
<td class="nombre ">86,1</td>
|
||||
<td class="nombre ">89,4</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table><p class="paragraphe ">Au deuxième trimestre 2026, le besoin de financement des administrations publiques
|
||||
(APU) est quasi stable : il s’établit à 5,1 % du PIB, comme au premier trimestre 2026.
|
||||
Les recettes publiques augmentent de 2,1 Md€, sous l’effet notamment d’une augmentation
|
||||
des cotisations sociales ainsi que de la TVA. Les dépenses publiques sont également
|
||||
en hausse ce trimestre (+2,5 Md€) soutenues par une nouvelle hausse des intérêts versés
|
||||
ainsi que des prestations sociales. </p><p class="paragraphe ">L’évolution du PIB au deuxième trimestre 2026 est revue à la baisse de 0,2 point après
|
||||
arrondi (-0,13 point avant arrondi), et celle au premier trimestre est revue à la
|
||||
baisse de 0,1 point après arrondi (-0,03 point avant arrondi). Ces révisions s’expliquent
|
||||
par la prise en compte de la situation encore plus dégradée de la production agricole
|
||||
par rapport aux informations disponibles fin juillet, ainsi que des prix dans les
|
||||
services marchands qui n’étaient pas intégralement connus fin juillet et qui se sont
|
||||
avérés plus dynamiques qu’anticipés, en particulier dans les services de transports.
|
||||
</p><p class="paragraphe ">Depuis la précédente publication, de nouvelles informations ont été intégrées et les
|
||||
coefficients de correction des variations saisonnières (CVS) et de correction des
|
||||
effets des jours ouvrables (CJO) ont été actualisés.</p><p class="paragraphe ">Dans le cadre de la notification de la dette et du solde des administrations publiques
|
||||
auprès de l’Union européenne, les comptes annuels sont mis à jour chaque année à la
|
||||
fin du mois d’août, afin de tenir compte des dernières données des comptes des administrations
|
||||
de sécurité sociale et des révisions pouvant affecter le compte de l’ensemble des
|
||||
administrations publiques. Les <a class="renvoi">tableaux annuels de finances publiques pour l’année 2025</a> ont ainsi été actualisés. Cette publication des résultats détaillés intègre la révision
|
||||
de +0,9 Md€ du solde public 2025. En ratio, le solde n’est pas révisé en points de
|
||||
PIB et se maintient à -5,1 % du PIB.</p><p class="paragraphe ">Cette publication est également à jour de la correction des données annuelles concernant
|
||||
l’emploi en personnes physiques. Cette correction n’a pas d’impact sur les années
|
||||
les plus récentes, mais elle revoit la ventilation des niveaux d’emploi par branches
|
||||
sur le passé jusqu’en 2018 inclus. </p><p class="paragraphe ">* Les volumes sont mesurés aux prix de l’année précédente chaînés et corrigés des
|
||||
variations saisonnières et des effets des jours ouvrables (CVS-CJO).</p><p class="paragraphe ">Prochaine publication de la première estimation du troisième trimestre 2026 : le 30
|
||||
octobre 2026, à 7h30.</p><p class="paragraphe ">Prochaine publication des résultats détaillés du troisième trimestre 2026 : le 27
|
||||
novembre 2026, à 8h45.</p><p class="paragraphe dictionnaire-variable chevron-avant-lien"><a class="lien-dictionnaire-variable">Note méthodologique</a> <span class="format-taille">(pdf,159 Ko)</span></p><p class="paragraphe chevron-avant-lien"><a>Comptes nationaux trimestriels</a></p><p class="paragraphe dictionnaire-variable chevron-avant-lien"><a class="lien-dictionnaire-variable">Les corrections de jours ouvrables dans les comptes trimestriels : le cas des années
|
||||
2024 à 2027</a> <span class="format-taille">(pdf,413 Ko)</span></p><p class="paragraphe ">* Les volumes sont mesurés aux prix de l’année précédente chaînés et corrigés des
|
||||
variations saisonnières et des effets des jours ouvrables (CVS-CJO).</p><p class="paragraphe ">Prochaine publication de la première estimation du troisième trimestre 2026 : le 30
|
||||
octobre 2026, à 7h30.</p><p class="paragraphe ">Prochaine publication des résultats détaillés du troisième trimestre 2026 : le 27
|
||||
novembre 2026, à 8h45.</p><p class="paragraphe ">
|
||||
<a class="renvoi">Agenda et règles de diffusion des indicateurs</a> </p><p class="paragraphe ">
|
||||
<a class="renvoi">Comptes trimestriels - données détaillées</a> </p><p class="paragraphe ">
|
||||
<a class="renvoi">Comptes nationaux trimestriels</a> </p></body></html>
|
||||
+973
@@ -0,0 +1,973 @@
|
||||
<html><head></head><body><h1 class="titre-principal information-rapide impression-nouvelle insee-conjoncture-2025-09-03"><img class="impression-seulement logo-insee"><div class="impression-seulement famille-date-numero">Informations Rapides ·
|
||||
30 juillet 2026 · n° 184</div><img class="impression-seulement logo-famille"><span class="titre-titre">Le PIB rebondit au deuxième trimestre 2026 (+0,2 % après -0,1 %) </span><span class="no-print"> </span><span class="sous-titre div-in-h test">Comptes nationaux trimestriels - première estimation - deuxième trimestre 2026</span></h1><p class="auteurs hidden-template-impression"></p><p class="paragraphe-chapeau ">Le produit intérieur brut (PIB) en volume* rebondit au deuxième trimestre 2026 (+0,2 %
|
||||
après -0,1 % au premier trimestre 2026). </p><p class="paragraphe-chapeau ">La demande intérieure finale (hors stocks) repart à la hausse : la consommation des
|
||||
ménages augmente légèrement (+0,2 % après -0,3 %), de même que la consommation des
|
||||
administrations publiques (+0,4 % après +0,3 %). À l’inverse, la formation brute de
|
||||
capital fixe diminue de nouveau (-0,3 % après -0,8 %). Au total, la demande intérieure
|
||||
(hors stocks) contribue à l’évolution du PIB pour +0,1 point après -0,2 point au premier
|
||||
trimestre 2026.</p><p class="paragraphe-chapeau ">La contribution du commerce extérieur à la croissance est positive ce trimestre (+0,6 point
|
||||
après -0,8 point) : les exportations rebondissent franchement (+2,6 % après -3,1 %),
|
||||
davantage que les importations (+0,8 % après -0,7 %). En miroir, la contribution des
|
||||
variations de stocks à l’évolution du PIB est négative ce trimestre : -0,6 point après
|
||||
+0,9 point au premier trimestre 2026.</p><div class="date-diffusion hidden-impression-information-rapide"><span class="hidden-template-impression"><span>Paru le :</span></span><span class="impression-seulement hidden-impression-information-rapide"><span>Paru le</span></span>30/07/2026</div><div class="date-diffusion hidden-impression-information-rapide"><span><span>Prochaine parution le :
|
||||
</span></span>30/10/2026 à 07h30<span class="hidden-impression-information-rapide"> - troisième trimestre 2026</span></div><p class="paragraphe ">Les jeux de données associés à cette publication sont désormais disponibles dans le
|
||||
catalogue Melodi : <a class="renvoi">Équilibre du produit intérieur brut</a>, <a class="renvoi"> Opérations sur biens et services</a>, <a class="renvoi">Comptes de secteurs institutionnels</a>, <a class="renvoi">Comptes des branches</a>. Ils restent toujours disponibles dans la Banque de données macroéconomiques.</p><p class="paragraphe ">Le produit intérieur brut (PIB) en volume* rebondit au deuxième trimestre 2026 (+0,2 %
|
||||
après -0,1 % au premier trimestre 2026). </p><p class="paragraphe ">La demande intérieure finale (hors stocks) repart à la hausse : la consommation des
|
||||
ménages augmente légèrement (+0,2 % après -0,3 %), de même que la consommation des
|
||||
administrations publiques (+0,4 % après +0,3 %). À l’inverse, la formation brute de
|
||||
capital fixe diminue de nouveau (-0,3 % après -0,8 %). Au total, la demande intérieure
|
||||
(hors stocks) contribue à l’évolution du PIB pour +0,1 point après -0,2 point au premier
|
||||
trimestre 2026.</p><p class="paragraphe ">La contribution du commerce extérieur à la croissance est positive ce trimestre (+0,6 point
|
||||
après -0,8 point) : les exportations rebondissent franchement (+2,6 % après -3,1 %),
|
||||
davantage que les importations (+0,8 % après -0,7 %). En miroir, la contribution des
|
||||
variations de stocks à l’évolution du PIB est négative ce trimestre : -0,6 point après
|
||||
+0,9 point au premier trimestre 2026.</p><table class="tableau-produit">
|
||||
<caption> Produit intérieur brut - Volume aux prix de l'année précédente chaînés - Série CVS-CJO
|
||||
</caption>
|
||||
<thead>
|
||||
<tr class="">
|
||||
<th class=""></th>
|
||||
<th class="">PIB</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr class="">
|
||||
<th class="ligne ">2026-T2</th>
|
||||
<td class="nombre ">665948</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2026-T1</th>
|
||||
<td class="nombre ">664856</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2025-T4</th>
|
||||
<td class="nombre ">665829</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2025-T3</th>
|
||||
<td class="nombre ">664023</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2025-T2</th>
|
||||
<td class="nombre ">661119</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2025-T1</th>
|
||||
<td class="nombre ">659470</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2024-T4</th>
|
||||
<td class="nombre ">658396</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2024-T3</th>
|
||||
<td class="nombre ">658584</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2024-T2</th>
|
||||
<td class="nombre ">655894</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2024-T1</th>
|
||||
<td class="nombre ">654236</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2023-T4</th>
|
||||
<td class="nombre ">652665</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2023-T3</th>
|
||||
<td class="nombre ">649412</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2023-T2</th>
|
||||
<td class="nombre ">647076</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2023-T1</th>
|
||||
<td class="nombre ">641012</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2022-T4</th>
|
||||
<td class="nombre ">640113</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2022-T3</th>
|
||||
<td class="nombre ">637564</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2022-T2</th>
|
||||
<td class="nombre ">634341</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2022-T1</th>
|
||||
<td class="nombre ">631873</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2021-T4</th>
|
||||
<td class="nombre ">631961</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2021-T3</th>
|
||||
<td class="nombre ">628754</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2021-T2</th>
|
||||
<td class="nombre ">610572</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2021-T1</th>
|
||||
<td class="nombre ">603317</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2020-T4</th>
|
||||
<td class="nombre ">600623</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2020-T3</th>
|
||||
<td class="nombre ">600678</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2020-T2</th>
|
||||
<td class="nombre ">521639</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2020-T1</th>
|
||||
<td class="nombre ">594327</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2019-T4</th>
|
||||
<td class="nombre ">625545</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2019-T3</th>
|
||||
<td class="nombre ">628723</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2019-T2</th>
|
||||
<td class="nombre ">628476</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2019-T1</th>
|
||||
<td class="nombre ">625312</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2018-T4</th>
|
||||
<td class="nombre ">619428</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2018-T3</th>
|
||||
<td class="nombre ">615025</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2018-T2</th>
|
||||
<td class="nombre ">611700</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2018-T1</th>
|
||||
<td class="nombre ">610272</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2017-T4</th>
|
||||
<td class="nombre ">610620</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2017-T3</th>
|
||||
<td class="nombre ">606973</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2017-T2</th>
|
||||
<td class="nombre ">602473</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2017-T1</th>
|
||||
<td class="nombre ">598038</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2016-T4</th>
|
||||
<td class="nombre ">594101</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2016-T3</th>
|
||||
<td class="nombre ">590316</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2016-T2</th>
|
||||
<td class="nombre ">589245</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2016-T1</th>
|
||||
<td class="nombre ">590784</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2015-T4</th>
|
||||
<td class="nombre ">588961</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2015-T3</th>
|
||||
<td class="nombre ">587324</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2015-T2</th>
|
||||
<td class="nombre ">585537</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2015-T1</th>
|
||||
<td class="nombre ">585313</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2014-T4</th>
|
||||
<td class="nombre ">582006</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2014-T3</th>
|
||||
<td class="nombre ">583710</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2014-T2</th>
|
||||
<td class="nombre ">579779</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2014-T1</th>
|
||||
<td class="nombre ">578454</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2013-T4</th>
|
||||
<td class="nombre ">578555</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2013-T3</th>
|
||||
<td class="nombre ">575056</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2013-T2</th>
|
||||
<td class="nombre ">576231</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2013-T1</th>
|
||||
<td class="nombre ">571150</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2012-T4</th>
|
||||
<td class="nombre ">570057</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2012-T3</th>
|
||||
<td class="nombre ">570407</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2012-T2</th>
|
||||
<td class="nombre ">568484</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2012-T1</th>
|
||||
<td class="nombre ">570828</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2011-T4</th>
|
||||
<td class="nombre ">571045</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2011-T3</th>
|
||||
<td class="nombre ">569155</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2011-T2</th>
|
||||
<td class="nombre ">567231</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2011-T1</th>
|
||||
<td class="nombre ">567169</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2010-T4</th>
|
||||
<td class="nombre ">559772</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2010-T3</th>
|
||||
<td class="nombre ">556637</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2010-T2</th>
|
||||
<td class="nombre ">552881</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2010-T1</th>
|
||||
<td class="nombre ">550216</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2009-T4</th>
|
||||
<td class="nombre ">548702</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2009-T3</th>
|
||||
<td class="nombre ">544757</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2009-T2</th>
|
||||
<td class="nombre ">543504</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2009-T1</th>
|
||||
<td class="nombre ">542521</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2008-T4</th>
|
||||
<td class="nombre ">553036</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2008-T3</th>
|
||||
<td class="nombre ">560256</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2008-T2</th>
|
||||
<td class="nombre ">561496</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2008-T1</th>
|
||||
<td class="nombre ">565751</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2007-T4</th>
|
||||
<td class="nombre ">560738</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2007-T3</th>
|
||||
<td class="nombre ">560465</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2007-T2</th>
|
||||
<td class="nombre ">558572</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2007-T1</th>
|
||||
<td class="nombre ">554937</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table><table class="tableau-produit">
|
||||
<caption>Le PIB et ses composantes en volumes chaînés (variations en %, données CVS-CJO)</caption>
|
||||
<thead>
|
||||
<tr class="">
|
||||
<th class=""></th>
|
||||
<th class="">2025T3</th>
|
||||
<th class="">2025T4</th>
|
||||
<th class="">2026T1</th>
|
||||
<th class="">2026T2</th>
|
||||
<th class="">2025</th>
|
||||
<th class="">2026 (acquis)</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr class="">
|
||||
<th class="ligne ">PIB </th>
|
||||
<td class="nombre ">0,4</td>
|
||||
<td class="nombre ">0,3</td>
|
||||
<td class="nombre ">-0,1</td>
|
||||
<td class="nombre ">0,2</td>
|
||||
<td class="nombre ">0,9</td>
|
||||
<td class="nombre ">0,5</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">Importations </th>
|
||||
<td class="nombre ">1,1</td>
|
||||
<td class="nombre ">-0,7</td>
|
||||
<td class="nombre ">-0,7</td>
|
||||
<td class="nombre ">0,8</td>
|
||||
<td class="nombre ">3,0</td>
|
||||
<td class="nombre ">0,1</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">Dép. conso. ménages </th>
|
||||
<td class="nombre ">0,1</td>
|
||||
<td class="nombre ">0,2</td>
|
||||
<td class="nombre ">-0,3</td>
|
||||
<td class="nombre ">0,2</td>
|
||||
<td class="nombre ">0,5</td>
|
||||
<td class="nombre ">0,1</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">Dép. conso. APU* </th>
|
||||
<td class="nombre ">0,5</td>
|
||||
<td class="nombre ">0,2</td>
|
||||
<td class="nombre ">0,3</td>
|
||||
<td class="nombre ">0,4</td>
|
||||
<td class="nombre ">0,6</td>
|
||||
<td class="nombre ">1,1</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">FBCF totale</th>
|
||||
<td class="nombre ">0,7</td>
|
||||
<td class="nombre ">0,2</td>
|
||||
<td class="nombre ">-0,8</td>
|
||||
<td class="nombre ">-0,3</td>
|
||||
<td class="nombre ">0,7</td>
|
||||
<td class="nombre ">-0,4</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ventilation ">dont ENF**</th>
|
||||
<td class="nombre ventilation ">1,0</td>
|
||||
<td class="nombre ventilation ">-0,2</td>
|
||||
<td class="nombre ventilation ">-0,5</td>
|
||||
<td class="nombre ventilation ">0,1</td>
|
||||
<td class="nombre ventilation ">0,7</td>
|
||||
<td class="nombre ventilation ">0,1</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ventilation ">dont Ménages</th>
|
||||
<td class="nombre ventilation ">0,6</td>
|
||||
<td class="nombre ventilation ">0,6</td>
|
||||
<td class="nombre ventilation ">-1,7</td>
|
||||
<td class="nombre ventilation ">-0,6</td>
|
||||
<td class="nombre ventilation ">0,1</td>
|
||||
<td class="nombre ventilation ">-1,4</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ventilation ">dont APU*</th>
|
||||
<td class="nombre ventilation ">0,5</td>
|
||||
<td class="nombre ventilation ">0,4</td>
|
||||
<td class="nombre ventilation ">-1,4</td>
|
||||
<td class="nombre ventilation ">-1,0</td>
|
||||
<td class="nombre ventilation ">2,7</td>
|
||||
<td class="nombre ventilation ">-1,2</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">Exportations </th>
|
||||
<td class="nombre ">2,8</td>
|
||||
<td class="nombre ">1,0</td>
|
||||
<td class="nombre ">-3,1</td>
|
||||
<td class="nombre ">2,6</td>
|
||||
<td class="nombre ">2,4</td>
|
||||
<td class="nombre ">1,0</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">Contributions : </th>
|
||||
<td class="nombre "></td>
|
||||
<td class="nombre "></td>
|
||||
<td class="nombre "></td>
|
||||
<td class="nombre "></td>
|
||||
<td class="nombre "></td>
|
||||
<td class="nombre "></td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">Demande intérieure finale hors stocks </th>
|
||||
<td class="nombre ">0,3</td>
|
||||
<td class="nombre ">0,2</td>
|
||||
<td class="nombre ">-0,2</td>
|
||||
<td class="nombre ">0,1</td>
|
||||
<td class="nombre ">0,5</td>
|
||||
<td class="nombre ">0,2</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">Variations de stocks </th>
|
||||
<td class="nombre ">-0,5</td>
|
||||
<td class="nombre ">-0,6</td>
|
||||
<td class="nombre ">0,9</td>
|
||||
<td class="nombre ">-0,6</td>
|
||||
<td class="nombre ">0,6</td>
|
||||
<td class="nombre ">0,0</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">Commerce extérieur </th>
|
||||
<td class="nombre ">0,6</td>
|
||||
<td class="nombre ">0,6</td>
|
||||
<td class="nombre ">-0,8</td>
|
||||
<td class="nombre ">0,6</td>
|
||||
<td class="nombre ">-0,2</td>
|
||||
<td class="nombre ">0,3</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table><p class="paragraphe ">La production totale (biens et services) se redresse au deuxième trimestre 2026 :
|
||||
elle augmente de 0,3 %, après avoir été stable au trimestre précédent.</p><p class="paragraphe ">La production dans l’industrie manufacturière ralentit franchement ce trimestre (+0,1 %
|
||||
après +0,5 %). Elle continue d’augmenter en matériels de transport (+0,4 % après +1,3 %) :
|
||||
la production d’autres matériels de transport, en particulier dans l’aéronautique,
|
||||
reste soutenue (+2,6 % après +4,0 %), alors que la production dans l’automobile recule
|
||||
pour le quatrième trimestre d’affilée (-3,6 % après -3,5 %). La production de produits
|
||||
pétroliers raffinés se replie (-1,8 % après +0,9 %), avec l’arrêt d’une raffinerie
|
||||
pour maintenance. La production en énergie, eau, déchets est quasi stable ce trimestre
|
||||
(-0,1 % après -1,8 %), suivant la demande. Enfin, la production agricole baisse pour
|
||||
le deuxième trimestre consécutif (-0,9 % après -1,0 %).</p><p class="paragraphe ">La production de services marchands (hors construction) accélère au deuxième trimestre
|
||||
2026 (+0,6 % après +0,1 %), tirée à la hausse par les services de transport (+1,9 %
|
||||
après +0,3 %), les services en information-communication (+0,5 % après +1,0 %), les
|
||||
services aux entreprises (+0,7 % après +0,4 %) et les services aux ménages (+1,0 %
|
||||
après +0,4 %), alors que l’hébergement-restauration et le commerce sont moins allants.</p><p class="paragraphe ">Enfin, la production continue de reculer dans la construction (-0,5 % après -1,7 %),
|
||||
pénalisée par les travaux publics, tandis que la construction de bâtiments se stabilise.</p><table class="tableau-produit">
|
||||
<caption>Le produit intérieur brut et ses composantes </caption>
|
||||
<thead>
|
||||
<tr class="">
|
||||
<th class=""></th>
|
||||
<th class="">Investissement</th>
|
||||
<th class="">Commerce extérieur</th>
|
||||
<th class="">Consommation</th>
|
||||
<th class="">Variations de stocks</th>
|
||||
<th class="">PIB</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr class="">
|
||||
<th class="ligne ">2026-T2</th>
|
||||
<td class="nombre ">-0.06</td>
|
||||
<td class="nombre ">0.62</td>
|
||||
<td class="nombre ">0.2</td>
|
||||
<td class="nombre ">-0.59</td>
|
||||
<td class="nombre ">0.2</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2026-T1</th>
|
||||
<td class="nombre ">-0.18</td>
|
||||
<td class="nombre ">-0.83</td>
|
||||
<td class="nombre ">-0.07</td>
|
||||
<td class="nombre ">0.93</td>
|
||||
<td class="nombre ">-0.1</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2025-T4</th>
|
||||
<td class="nombre ">0.04</td>
|
||||
<td class="nombre ">0.6</td>
|
||||
<td class="nombre ">0.19</td>
|
||||
<td class="nombre ">-0.55</td>
|
||||
<td class="nombre ">0.3</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2025-T3</th>
|
||||
<td class="nombre ">0.17</td>
|
||||
<td class="nombre ">0.57</td>
|
||||
<td class="nombre ">0.17</td>
|
||||
<td class="nombre ">-0.47</td>
|
||||
<td class="nombre ">0.4</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2025-T2</th>
|
||||
<td class="nombre ">0.09</td>
|
||||
<td class="nombre ">-0.31</td>
|
||||
<td class="nombre ">0.06</td>
|
||||
<td class="nombre ">0.4</td>
|
||||
<td class="nombre ">0.2</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2025-T1</th>
|
||||
<td class="nombre ">0.05</td>
|
||||
<td class="nombre ">-0.39</td>
|
||||
<td class="nombre ">-0.03</td>
|
||||
<td class="nombre ">0.53</td>
|
||||
<td class="nombre ">0.2</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2024-T4</th>
|
||||
<td class="nombre ">0.02</td>
|
||||
<td class="nombre ">0.21</td>
|
||||
<td class="nombre ">0.05</td>
|
||||
<td class="nombre ">-0.3</td>
|
||||
<td class="nombre ">0.0</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2024-T3</th>
|
||||
<td class="nombre ">-0.21</td>
|
||||
<td class="nombre ">-0.51</td>
|
||||
<td class="nombre ">0.47</td>
|
||||
<td class="nombre ">0.65</td>
|
||||
<td class="nombre ">0.4</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2024-T2</th>
|
||||
<td class="nombre ">0.1</td>
|
||||
<td class="nombre ">0.36</td>
|
||||
<td class="nombre ">-0.05</td>
|
||||
<td class="nombre ">-0.16</td>
|
||||
<td class="nombre ">0.3</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2024-T1</th>
|
||||
<td class="nombre ">-0.15</td>
|
||||
<td class="nombre ">0.38</td>
|
||||
<td class="nombre ">0.27</td>
|
||||
<td class="nombre ">-0.26</td>
|
||||
<td class="nombre ">0.2</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2023-T4</th>
|
||||
<td class="nombre ">-0.17</td>
|
||||
<td class="nombre ">0.88</td>
|
||||
<td class="nombre ">0.03</td>
|
||||
<td class="nombre ">-0.23</td>
|
||||
<td class="nombre ">0.5</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2023-T3</th>
|
||||
<td class="nombre ">-0.03</td>
|
||||
<td class="nombre ">0.01</td>
|
||||
<td class="nombre ">0.43</td>
|
||||
<td class="nombre ">-0.05</td>
|
||||
<td class="nombre ">0.4</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2023-T2</th>
|
||||
<td class="nombre ">0.28</td>
|
||||
<td class="nombre ">0.81</td>
|
||||
<td class="nombre ">0.11</td>
|
||||
<td class="nombre ">-0.26</td>
|
||||
<td class="nombre ">0.9</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2023-T1</th>
|
||||
<td class="nombre ">0.02</td>
|
||||
<td class="nombre ">0.41</td>
|
||||
<td class="nombre ">0.14</td>
|
||||
<td class="nombre ">-0.43</td>
|
||||
<td class="nombre ">0.1</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2022-T4</th>
|
||||
<td class="nombre ">0.16</td>
|
||||
<td class="nombre ">0.29</td>
|
||||
<td class="nombre ">0.01</td>
|
||||
<td class="nombre ">-0.07</td>
|
||||
<td class="nombre ">0.4</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2022-T3</th>
|
||||
<td class="nombre ">0.2</td>
|
||||
<td class="nombre ">-0.7</td>
|
||||
<td class="nombre ">0.5</td>
|
||||
<td class="nombre ">0.51</td>
|
||||
<td class="nombre ">0.5</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2022-T2</th>
|
||||
<td class="nombre ">-0.09</td>
|
||||
<td class="nombre ">-0.49</td>
|
||||
<td class="nombre ">0.52</td>
|
||||
<td class="nombre ">0.45</td>
|
||||
<td class="nombre ">0.4</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2022-T1</th>
|
||||
<td class="nombre ">-0.04</td>
|
||||
<td class="nombre ">0.36</td>
|
||||
<td class="nombre ">-0.29</td>
|
||||
<td class="nombre ">-0.05</td>
|
||||
<td class="nombre ">0.0</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table><table class="tableau-produit">
|
||||
<caption>Production, consommation et FBCF : principales composantes (variations en %, données CVS-CJO)</caption>
|
||||
<thead>
|
||||
<tr class="">
|
||||
<th class=""></th>
|
||||
<th class="">2025T3</th>
|
||||
<th class="">2025T4</th>
|
||||
<th class="">2026T1</th>
|
||||
<th class="">2026T2</th>
|
||||
<th class="">2025</th>
|
||||
<th class="">2026 (acquis)</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr class="">
|
||||
<td class="total ">Production branche </td>
|
||||
<td class="nombre total ">0,7</td>
|
||||
<td class="nombre total ">0,3</td>
|
||||
<td class="nombre total ">0,0</td>
|
||||
<td class="nombre total ">0,3</td>
|
||||
<td class="nombre total ">1,0</td>
|
||||
<td class="nombre total ">0,8</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">Biens </th>
|
||||
<td class="nombre ">1,5</td>
|
||||
<td class="nombre ">0,0</td>
|
||||
<td class="nombre ">0,0</td>
|
||||
<td class="nombre ">0,0</td>
|
||||
<td class="nombre ">1,2</td>
|
||||
<td class="nombre ">0,7</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<td class="ventilation ">Ind. manufacturière </td>
|
||||
<td class="nombre ventilation ">1,0</td>
|
||||
<td class="nombre ventilation ">-0,2</td>
|
||||
<td class="nombre ventilation ">0,5</td>
|
||||
<td class="nombre ventilation ">0,1</td>
|
||||
<td class="nombre ventilation ">1,3</td>
|
||||
<td class="nombre ventilation ">1,0</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">Construction </th>
|
||||
<td class="nombre ">0,3</td>
|
||||
<td class="nombre ">0,3</td>
|
||||
<td class="nombre ">-1,7</td>
|
||||
<td class="nombre ">-0,5</td>
|
||||
<td class="nombre ">-1,8</td>
|
||||
<td class="nombre ">-1,7</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">Services marchands </th>
|
||||
<td class="nombre ">0,5</td>
|
||||
<td class="nombre ">0,5</td>
|
||||
<td class="nombre ">0,1</td>
|
||||
<td class="nombre ">0,6</td>
|
||||
<td class="nombre ">1,5</td>
|
||||
<td class="nombre ">1,3</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">Services non marchands </th>
|
||||
<td class="nombre ">0,3</td>
|
||||
<td class="nombre ">0,2</td>
|
||||
<td class="nombre ">0,4</td>
|
||||
<td class="nombre ">0,3</td>
|
||||
<td class="nombre ">0,4</td>
|
||||
<td class="nombre ">0,9</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<td class="total ">Consommation des ménages </td>
|
||||
<td class="nombre total ">0,1</td>
|
||||
<td class="nombre total ">0,2</td>
|
||||
<td class="nombre total ">-0,3</td>
|
||||
<td class="nombre total ">0,2</td>
|
||||
<td class="nombre total ">0,5</td>
|
||||
<td class="nombre total ">0,1</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">Alimentaire </th>
|
||||
<td class="nombre ">-0,8</td>
|
||||
<td class="nombre ">0,2</td>
|
||||
<td class="nombre ">-0,6</td>
|
||||
<td class="nombre ">-0,3</td>
|
||||
<td class="nombre ">0,5</td>
|
||||
<td class="nombre ">-0,8</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">Énergie </th>
|
||||
<td class="nombre ">1,0</td>
|
||||
<td class="nombre ">0,4</td>
|
||||
<td class="nombre ">-2,5</td>
|
||||
<td class="nombre ">-1,7</td>
|
||||
<td class="nombre ">0,3</td>
|
||||
<td class="nombre ">-3,5</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">Biens fabriqués </th>
|
||||
<td class="nombre ">0,6</td>
|
||||
<td class="nombre ">0,8</td>
|
||||
<td class="nombre ">0,1</td>
|
||||
<td class="nombre ">1,0</td>
|
||||
<td class="nombre ">-0,5</td>
|
||||
<td class="nombre ">1,7</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">Services </th>
|
||||
<td class="nombre ">0,2</td>
|
||||
<td class="nombre ">0,2</td>
|
||||
<td class="nombre ">0,1</td>
|
||||
<td class="nombre ">0,2</td>
|
||||
<td class="nombre ">1,2</td>
|
||||
<td class="nombre ">0,6</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<td class="total ">FBCF </td>
|
||||
<td class="nombre total ">0,7</td>
|
||||
<td class="nombre total ">0,2</td>
|
||||
<td class="nombre total ">-0,8</td>
|
||||
<td class="nombre total ">-0,3</td>
|
||||
<td class="nombre total ">0,7</td>
|
||||
<td class="nombre total ">-0,4</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">Produits manufacturés </th>
|
||||
<td class="nombre ">0,8</td>
|
||||
<td class="nombre ">-1,1</td>
|
||||
<td class="nombre ">0,0</td>
|
||||
<td class="nombre ">-0,2</td>
|
||||
<td class="nombre ">0,8</td>
|
||||
<td class="nombre ">-0,3</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">Construction </th>
|
||||
<td class="nombre ">0,3</td>
|
||||
<td class="nombre ">0,4</td>
|
||||
<td class="nombre ">-2,1</td>
|
||||
<td class="nombre ">-0,5</td>
|
||||
<td class="nombre ">-2,2</td>
|
||||
<td class="nombre ">-2,1</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">Services marchands </th>
|
||||
<td class="nombre ">1,3</td>
|
||||
<td class="nombre ">0,7</td>
|
||||
<td class="nombre ">0,4</td>
|
||||
<td class="nombre ">0,0</td>
|
||||
<td class="nombre ">4,6</td>
|
||||
<td class="nombre ">1,7</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table><p class="paragraphe ">La consommation des ménages rebondit légèrement au deuxième trimestre 2026 (+0,2 %
|
||||
après -0,3 %). Les dépenses de consommation des ménages en biens sont quasi stables
|
||||
ce trimestre (-0,1 % après -0,7 %). La consommation alimentaire (y compris tabac)
|
||||
recule de nouveau légèrement (-0,3 % après -0,6 %), que ce soit en produits agricoles
|
||||
ou en produits agro-alimentaires. La consommation en produits pétroliers raffinés
|
||||
continue de baisser nettement (-3,5 % après -2,6 %), tout comme la consommation en
|
||||
énergie, eau, déchets (-0,5 % après -2,4 %). Cette dernière est tirée à la baisse
|
||||
par un mois d'avril marqué par des températures exceptionnellement élevées qui fait
|
||||
plus que compenser le rebond en mai et la hausse de la consommation d'éléctricité
|
||||
en juin générée par la canicule. La consommation en matériels de transport accélère
|
||||
(+2,4 % après +0,9 %), en particulier les achats de voiture.</p><p class="paragraphe ">La consommation des ménages en services augmente de nouveau légèrement ce trimestre
|
||||
(+0,2 % après +0,1 %). Elle est soutenue par l’accélération de la consommation des
|
||||
services aux ménages (+1,7 % après +0,5 %), ainsi que par le léger rebond de la consommation
|
||||
en hébergement-restauration (+0,2 % après -0,7 %). En revanche, elle est pénalisée
|
||||
par les services de transport (-0,3 % après -0,8 %), notamment par les transports
|
||||
aériens, et par l’information-communication (-0,6 % après 0,0 %).</p><p class="paragraphe ">La FBCF totale recule de nouveau au deuxième trimestre 2026 (-0,3 % après -0,8 %),
|
||||
du fait d’une nouvelle baisse de la FBCF en construction (-0,5 % après -2,1 %), dans
|
||||
un contexte de hausse des coûts. Elle est plombée par le génie civil, alors que le
|
||||
bâtiment se stabilise après une forte chute au premier trimestre 2026. </p><p class="paragraphe ">L’investissement en produits manufacturés repart un peu à la baisse ce trimestre (-0,2 %
|
||||
après 0,0 %) sous l’effet du recul de la FBCF en biens d’équipement (-1,1 % après
|
||||
+1,3 %) et de celle en autres biens manufacturés (-2,0 % après -0,4 %). À l’inverse,
|
||||
l’investissement en matériels de transport rebondit nettement (+2,4 % après -0,9 %),
|
||||
en raison de la livraison d’un voilier de croisière.</p><p class="paragraphe ">Enfin, l’investissement en services marchands hors construction marque le pas (0,0 %
|
||||
après +0,4 %). D’un côté, l’investissement en services aux entreprises recule de nouveau
|
||||
(-0,2 % après -1,1 %), comme l’investissement en services immobiliers (-4,0 % après
|
||||
-2,5 %) avec des transactions qui diminuent de nouveau dans l’ancien. De l’autre,
|
||||
l’investissement en information-communication est en hausse, mais il ralentit (+0,5 %
|
||||
après +2,2 %), notamment en services informatiques.</p><p class="paragraphe ">La contribution du commerce extérieur à la croissance du PIB est positive au deuxième
|
||||
trimestre 2026 (+0,6 point, après -0,8 point au trimestre précédent).</p><p class="paragraphe ">Les exportations rebondissent franchement au deuxième trimestre 2026 (+2,6 % après
|
||||
-3,1 %). Côté biens, les exportations de matériels de transport s’envolent (+20,1 %
|
||||
après -18,8 %). Celles-ci sont principalement portées par les autres matériels de
|
||||
transport (+33,6 % après -28,3 %), en particulier l’aéronautique, après un premier
|
||||
trimestre dégradé. Les exportations de biens d’équipement sont également dynamiques
|
||||
(+3,5 % après +1,2 %). Les exportations de produits agroalimentaires se replient (-1,3 %
|
||||
après +1,8 %), tandis que les exportations de produits agricoles repartent légèrement
|
||||
à la hausse ce trimestre (+1,1 % après -1,7 %). Enfin, les exportations en services
|
||||
accélèrent (+1,5 % après +0,5 %), stimulées par les exportations de services aux entreprises.</p><p class="paragraphe ">Les importations rebondissent au deuxième trimestre 2026 (+0,8 % après -0,7 %). Les
|
||||
importations de produits manufacturés repartent à la hausse (+0,7 % après -1,3 %),
|
||||
dopées par les importations d’aéronautique et de naval (+15,5 % après -10,5 %) et
|
||||
de biens d’équipement (+2,7 % après +1,5 %). </p><p class="paragraphe ">Les importations d’énergie, eau et déchets reculent de nouveau (-0,4 % après -0,9 %).</p><p class="paragraphe ">Enfin, côté services, les importations rebondissent (+1,2 % après -0,1 %), en particulier
|
||||
dans les services aux entreprises (+1,8 % après -1,4 %), de concert avec les exportations.</p><p class="paragraphe ">La contribution des variations de stocks à l’évolution du PIB est négative au deuxième
|
||||
trimestre 2026 (-0,6 point après +0,9 point), portées essentiellement par les produits
|
||||
aéronautiques, après un fort stockage le trimestre précédent.</p><table class="tableau-produit">
|
||||
<caption>Revenu disponible brut et ratios des comptes des ménages (variations t/t-1, en %, données CVS-CJO)</caption>
|
||||
<thead>
|
||||
<tr class="">
|
||||
<th class=""></th>
|
||||
<th class="">2025T3</th>
|
||||
<th class="">2025T4</th>
|
||||
<th class="">2026T1</th>
|
||||
<th class="">2026T2</th>
|
||||
<th class="">2025</th>
|
||||
<th class="">2026 (acquis)</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr class="">
|
||||
<th class="ligne ">RDB </th>
|
||||
<td class="nombre ">0,1</td>
|
||||
<td class="nombre ">0,5</td>
|
||||
<td class="nombre ">0,5</td>
|
||||
<td class="nombre ">nd</td>
|
||||
<td class="nombre ">0,5</td>
|
||||
<td class="nombre ">1,0</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">RDB (pouvoir d'achat) </th>
|
||||
<td class="nombre ">-0,3</td>
|
||||
<td class="nombre ">0,3</td>
|
||||
<td class="nombre ">0,0</td>
|
||||
<td class="nombre ">nd</td>
|
||||
<td class="nombre ">-0,4</td>
|
||||
<td class="nombre ">0,1</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">RDB par uc* (pouvoir d'achat) </th>
|
||||
<td class="nombre ">-0,4</td>
|
||||
<td class="nombre ">0,2</td>
|
||||
<td class="nombre ">-0,1</td>
|
||||
<td class="nombre ">nd</td>
|
||||
<td class="nombre ">-0,7</td>
|
||||
<td class="nombre ">-0,1</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">RDB ajusté (pouvoir d'achat) </th>
|
||||
<td class="nombre ">-0,1</td>
|
||||
<td class="nombre ">0,3</td>
|
||||
<td class="nombre ">0,0</td>
|
||||
<td class="nombre ">nd</td>
|
||||
<td class="nombre ">-0,1</td>
|
||||
<td class="nombre ">0,2</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">Taux d'épargne (niveau) </th>
|
||||
<td class="nombre ">17,7</td>
|
||||
<td class="nombre ">17,7</td>
|
||||
<td class="nombre ">17,9</td>
|
||||
<td class="nombre ">nd</td>
|
||||
<td class="nombre ">17,8</td>
|
||||
<td class="nombre ">nd</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">Taux d'épargne financière (niveau) </th>
|
||||
<td class="nombre ">8,7</td>
|
||||
<td class="nombre ">8,8</td>
|
||||
<td class="nombre ">9,1</td>
|
||||
<td class="nombre ">nd</td>
|
||||
<td class="nombre ">8,9</td>
|
||||
<td class="nombre ">nd</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table><table class="tableau-produit">
|
||||
<caption>Ratios des comptes des sociétés non financières (niveaux en %, données CVS-CJO)</caption>
|
||||
<thead>
|
||||
<tr class="">
|
||||
<th class=""></th>
|
||||
<th class="">2025T3</th>
|
||||
<th class="">2025T4</th>
|
||||
<th class="">2026T1</th>
|
||||
<th class="">2026T2</th>
|
||||
<th class="">2025</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr class="">
|
||||
<th class="ligne ">Taux de marge </th>
|
||||
<td class="nombre ">32,3</td>
|
||||
<td class="nombre ">32,6</td>
|
||||
<td class="nombre ">31,8</td>
|
||||
<td class="nombre ">nd</td>
|
||||
<td class="nombre ">32,4</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">Taux d'investissement </th>
|
||||
<td class="nombre ">22,7</td>
|
||||
<td class="nombre ">22,5</td>
|
||||
<td class="nombre ">22,6</td>
|
||||
<td class="nombre ">nd</td>
|
||||
<td class="nombre ">22,6</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">Taux d'épargne </th>
|
||||
<td class="nombre ">21,0</td>
|
||||
<td class="nombre ">19,3</td>
|
||||
<td class="nombre ">20,1</td>
|
||||
<td class="nombre ">nd</td>
|
||||
<td class="nombre ">20,2</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">Taux d'autofinancement </th>
|
||||
<td class="nombre ">92,6</td>
|
||||
<td class="nombre ">85,7</td>
|
||||
<td class="nombre ">88,6</td>
|
||||
<td class="nombre ">nd</td>
|
||||
<td class="nombre ">89,4</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table><p class="paragraphe ">L’estimation de la croissance du PIB au premier trimestre 2026 n’est pas révisée (après
|
||||
arrondi). Toutefois, la contribution du commerce extérieur est revue à la hausse (à
|
||||
-0,8 point au lieu de -0,9 point) tandis que celle des variations de stocks, en miroir,
|
||||
est revue à la baisse (à +0,9 point au lieu de +1,0 point).</p><p class="paragraphe ">Depuis la précédente publication, de nouvelles informations ont été intégrées et les
|
||||
coefficients de correction des variations saisonnières (CVS) et de correction des
|
||||
effets des jours ouvrables (CJO) ont été actualisés. </p><p class="paragraphe ">* Les volumes sont mesurés aux prix de l’année précédente chaînés et corrigés des
|
||||
variations saisonnières et des effets des jours ouvrables (CVS-CJO).</p><p class="paragraphe ">Prochaine publication des résultats détaillés du deuxième trimestre 2026 : le 28 août
|
||||
2026, à 8h45.</p><p class="paragraphe ">Prochaine publication de la première estimation du troisième trimestre 2026 : le 30
|
||||
octobre 2026, à 7h30.</p><p class="paragraphe dictionnaire-variable chevron-avant-lien"><a class="lien-dictionnaire-variable">Note méthodologique</a> <span class="format-taille">(pdf,159 Ko)</span></p><p class="paragraphe chevron-avant-lien"><a>Comptes nationaux trimestriels</a></p><p class="paragraphe dictionnaire-variable chevron-avant-lien"><a class="lien-dictionnaire-variable">Les corrections de jours ouvrables dans les comptes trimestriels : le cas des années
|
||||
2023 à 2026 </a> <span class="format-taille">(pdf,376 Ko)</span></p><p class="paragraphe ">* Les volumes sont mesurés aux prix de l’année précédente chaînés et corrigés des
|
||||
variations saisonnières et des effets des jours ouvrables (CVS-CJO).</p><p class="paragraphe ">Prochaine publication des résultats détaillés du deuxième trimestre 2026 : le 28 août
|
||||
2026, à 8h45.</p><p class="paragraphe ">Prochaine publication de la première estimation du troisième trimestre 2026 : le 30
|
||||
octobre 2026, à 7h30.</p><p class="paragraphe ">
|
||||
<a class="renvoi">Agenda et règles de diffusion des indicateurs</a> </p><p class="paragraphe ">
|
||||
<a class="renvoi">Comptes trimestriels - données détaillées</a> </p><p class="paragraphe ">
|
||||
<a class="renvoi">Comptes nationaux trimestriels</a> </p></body></html>
|
||||
+3358
File diff suppressed because it is too large.
Load diff
+671
@@ -0,0 +1,671 @@
|
||||
<html><body><h1 class="titre-principal information-rapide impression-nouvelle insee-conjoncture-2025-09-03"><img class="impression-seulement logo-insee"><div class="impression-seulement famille-date-numero">Informations Rapides ·
|
||||
27 février 2026 · n° 55</div><img class="impression-seulement logo-famille"><span class="titre-titre">En février 2026, les prix à la consommation augmentent de 1,0 % sur un an</span><span class="no-print"> </span><span class="sous-titre div-in-h test">Indice des prix à la consommation - résultats provisoires (IPC) - février 2026</span></h1><p class="auteurs hidden-template-impression"></p><div class="date-diffusion hidden-impression-information-rapide"><span class="hidden-template-impression"><span>Paru le :</span></span><span class="impression-seulement hidden-impression-information-rapide"><span>Paru le</span></span>27/02/2026</div><div class="date-diffusion hidden-impression-information-rapide"><span><span>Prochaine parution le :
|
||||
</span></span>30/10/2026 à 08h45<span class="hidden-impression-information-rapide"> - octobre 2026</span></div><p class="paragraphe ">Cette publication s’appuie sur des données provisoires. Les indices qui y figurent
|
||||
sont calculés sur un champ restreint d’observations de prix et à partir d’estimations
|
||||
des évolutions de certains tarifs non encore disponibles. Les résultats définitifs
|
||||
seront publiés le 13 mars 2026. En conséquence, les indices provisoires ne doivent
|
||||
pas être utilisés pour des revalorisations contractuelles.</p><p class="paragraphe ">Sur un an, selon l’estimation provisoire réalisée en fin de mois, les prix à la consommation
|
||||
augmenteraient de 1,0 % en février 2026, après +0,3 % en janvier. Cette hausse de
|
||||
l’inflation s’expliquerait en partie par une baisse moins prononcée des prix de l’énergie,
|
||||
provoquée par un effet de base sur les prix de l’électricité qui avaient fortement
|
||||
reculé en février 2025. Les prix des produits manufacturés baisseraient moins qu’en
|
||||
janvier. Les prix de l’alimentation accéléreraient sur un an, comme ceux des services
|
||||
et du tabac.</p><p class="paragraphe ">Sur un mois, les prix à la consommation augmenteraient de 0,7 % en février, après
|
||||
‑0,3 % en janvier. Ce rebond des prix s’expliquerait par la hausse des prix des services,
|
||||
tirés par le rebond saisonnier des services de transports, et par la hausse, également
|
||||
saisonnière, des prix des produits manufacturés, du fait de la fin des soldes dans
|
||||
l’habillement et les chaussures. Les prix de l’alimentation augmenteraient légèrement
|
||||
sur un mois, comme ceux de l’énergie et du tabac.</p><p class="paragraphe ">Sur un an, l’indice des prix à la consommation harmonisé augmenterait de 1,1 % en
|
||||
février 2026, après +0,4 % en janvier. Sur un mois, il rebondirait de 0,8 %, après
|
||||
‑0,4 % le mois précédent.</p><table class="tableau-produit">
|
||||
<caption>Indices des prix à la consommation (Évolutions annuelles (en %) ; base 100 : année 2025) - *: indice des prix à la consommation.
|
||||
**: indice des prix à la consommation harmonisé. </caption>
|
||||
<thead>
|
||||
<tr class="">
|
||||
<th class=""></th>
|
||||
<th class="">Pondérations 2026</th>
|
||||
<th class="">février 2025</th>
|
||||
<th class="">janvier 2026</th>
|
||||
<th class="">février 2026 (p) </th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr class="">
|
||||
<th class="ligne total ">Ensemble IPC*</th>
|
||||
<td class="nombre total ">10 000</td>
|
||||
<td class="nombre total ">0,8</td>
|
||||
<td class="nombre total ">0,3</td>
|
||||
<td class="nombre total ">1,0</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">Alimentation</th>
|
||||
<td class="nombre ">1 485</td>
|
||||
<td class="nombre ">0,3</td>
|
||||
<td class="nombre ">1,9</td>
|
||||
<td class="nombre ">2,1</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">- Produits frais</th>
|
||||
<td class="nombre ">170</td>
|
||||
<td class="nombre ">1,8</td>
|
||||
<td class="nombre ">1,1</td>
|
||||
<td class="nombre ">3,1</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">- Autre alimentation</th>
|
||||
<td class="nombre ">1 315</td>
|
||||
<td class="nombre ">0,1</td>
|
||||
<td class="nombre ">2,0</td>
|
||||
<td class="nombre ">2,0</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">Tabac</th>
|
||||
<td class="nombre ">168</td>
|
||||
<td class="nombre ">4,5</td>
|
||||
<td class="nombre ">2,7</td>
|
||||
<td class="nombre ">3,0</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">Énergie</th>
|
||||
<td class="nombre ">764</td>
|
||||
<td class="nombre ">-5,8</td>
|
||||
<td class="nombre ">-7,6</td>
|
||||
<td class="nombre ">-3,0</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">Produits manufacturés</th>
|
||||
<td class="nombre ">2 388</td>
|
||||
<td class="nombre ">0,0</td>
|
||||
<td class="nombre ">-1,2</td>
|
||||
<td class="nombre ">-0,3</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">Services</th>
|
||||
<td class="nombre ">5 195</td>
|
||||
<td class="nombre ">2,2</td>
|
||||
<td class="nombre ">1,7</td>
|
||||
<td class="nombre ">1,8</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne total ">Ensemble IPCH**</th>
|
||||
<td class="nombre total ">10 000</td>
|
||||
<td class="nombre total ">0,9</td>
|
||||
<td class="nombre total ">0,4</td>
|
||||
<td class="nombre total ">1,1</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table><table class="tableau-produit">
|
||||
<caption>Évolutions de l'indice des prix à la consommation </caption>
|
||||
<thead>
|
||||
<tr class="">
|
||||
<th class=""></th>
|
||||
<th class="">Glissement annuel</th>
|
||||
<th class="">Variation mensuelle observée</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr class="">
|
||||
<th class="ligne ">2026-02</th>
|
||||
<td class="nombre ">1.0</td>
|
||||
<td class="nombre ">0.7</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2026-01</th>
|
||||
<td class="nombre ">0.3</td>
|
||||
<td class="nombre ">-0.3</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2025-12</th>
|
||||
<td class="nombre ">0.8</td>
|
||||
<td class="nombre ">0.1</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2025-11</th>
|
||||
<td class="nombre ">0.9</td>
|
||||
<td class="nombre ">-0.2</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2025-10</th>
|
||||
<td class="nombre ">0.9</td>
|
||||
<td class="nombre ">0.1</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2025-09</th>
|
||||
<td class="nombre ">1.2</td>
|
||||
<td class="nombre ">-1.0</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2025-08</th>
|
||||
<td class="nombre ">0.9</td>
|
||||
<td class="nombre ">0.4</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2025-07</th>
|
||||
<td class="nombre ">1.0</td>
|
||||
<td class="nombre ">0.2</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2025-06</th>
|
||||
<td class="nombre ">1.0</td>
|
||||
<td class="nombre ">0.4</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2025-05</th>
|
||||
<td class="nombre ">0.7</td>
|
||||
<td class="nombre ">-0.1</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2025-04</th>
|
||||
<td class="nombre ">0.8</td>
|
||||
<td class="nombre ">0.6</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2025-03</th>
|
||||
<td class="nombre ">0.8</td>
|
||||
<td class="nombre ">0.2</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2025-02</th>
|
||||
<td class="nombre ">0.8</td>
|
||||
<td class="nombre ">0.0</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2025-01</th>
|
||||
<td class="nombre ">1.6</td>
|
||||
<td class="nombre ">0.2</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2024-12</th>
|
||||
<td class="nombre ">1.3</td>
|
||||
<td class="nombre ">0.2</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2024-11</th>
|
||||
<td class="nombre ">1.3</td>
|
||||
<td class="nombre ">-0.2</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2024-10</th>
|
||||
<td class="nombre ">1.2</td>
|
||||
<td class="nombre ">0.3</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2024-09</th>
|
||||
<td class="nombre ">1.1</td>
|
||||
<td class="nombre ">-1.2</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2024-08</th>
|
||||
<td class="nombre ">1.8</td>
|
||||
<td class="nombre ">0.5</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2024-07</th>
|
||||
<td class="nombre ">2.3</td>
|
||||
<td class="nombre ">0.2</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2024-06</th>
|
||||
<td class="nombre ">2.2</td>
|
||||
<td class="nombre ">0.1</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2024-05</th>
|
||||
<td class="nombre ">2.3</td>
|
||||
<td class="nombre ">0.0</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2024-04</th>
|
||||
<td class="nombre ">2.2</td>
|
||||
<td class="nombre ">0.5</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2024-03</th>
|
||||
<td class="nombre ">2.3</td>
|
||||
<td class="nombre ">0.2</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2024-02</th>
|
||||
<td class="nombre ">3.0</td>
|
||||
<td class="nombre ">0.9</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2024-01</th>
|
||||
<td class="nombre ">3.1</td>
|
||||
<td class="nombre ">-0.2</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2023-12</th>
|
||||
<td class="nombre ">3.7</td>
|
||||
<td class="nombre ">0.1</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2023-11</th>
|
||||
<td class="nombre ">3.5</td>
|
||||
<td class="nombre ">-0.2</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2023-10</th>
|
||||
<td class="nombre ">4.0</td>
|
||||
<td class="nombre ">0.1</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2023-09</th>
|
||||
<td class="nombre ">4.9</td>
|
||||
<td class="nombre ">-0.5</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2023-08</th>
|
||||
<td class="nombre ">4.9</td>
|
||||
<td class="nombre ">1.0</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2023-07</th>
|
||||
<td class="nombre ">4.3</td>
|
||||
<td class="nombre ">0.1</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2023-06</th>
|
||||
<td class="nombre ">4.5</td>
|
||||
<td class="nombre ">0.2</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2023-05</th>
|
||||
<td class="nombre ">5.1</td>
|
||||
<td class="nombre ">-0.1</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2023-04</th>
|
||||
<td class="nombre ">5.9</td>
|
||||
<td class="nombre ">0.6</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2023-03</th>
|
||||
<td class="nombre ">5.7</td>
|
||||
<td class="nombre ">0.9</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2023-02</th>
|
||||
<td class="nombre ">6.3</td>
|
||||
<td class="nombre ">1.0</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2023-01</th>
|
||||
<td class="nombre ">6.0</td>
|
||||
<td class="nombre ">0.4</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2022-12</th>
|
||||
<td class="nombre ">5.8</td>
|
||||
<td class="nombre ">-0.1</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2022-11</th>
|
||||
<td class="nombre ">6.1</td>
|
||||
<td class="nombre ">0.3</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2022-10</th>
|
||||
<td class="nombre ">6.2</td>
|
||||
<td class="nombre ">1.0</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2022-09</th>
|
||||
<td class="nombre ">5.5</td>
|
||||
<td class="nombre ">-0.6</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2022-08</th>
|
||||
<td class="nombre ">5.9</td>
|
||||
<td class="nombre ">0.5</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2022-07</th>
|
||||
<td class="nombre ">6.1</td>
|
||||
<td class="nombre ">0.3</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2022-06</th>
|
||||
<td class="nombre ">5.8</td>
|
||||
<td class="nombre ">0.8</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2022-05</th>
|
||||
<td class="nombre ">5.2</td>
|
||||
<td class="nombre ">0.7</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2022-04</th>
|
||||
<td class="nombre ">4.8</td>
|
||||
<td class="nombre ">0.4</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2022-03</th>
|
||||
<td class="nombre ">4.5</td>
|
||||
<td class="nombre ">1.4</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2022-02</th>
|
||||
<td class="nombre ">3.6</td>
|
||||
<td class="nombre ">0.8</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2022-01</th>
|
||||
<td class="nombre ">2.9</td>
|
||||
<td class="nombre ">0.2</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2021-12</th>
|
||||
<td class="nombre ">2.8</td>
|
||||
<td class="nombre ">0.2</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2021-11</th>
|
||||
<td class="nombre ">2.8</td>
|
||||
<td class="nombre ">0.4</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2021-10</th>
|
||||
<td class="nombre ">2.6</td>
|
||||
<td class="nombre ">0.4</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2021-09</th>
|
||||
<td class="nombre ">2.2</td>
|
||||
<td class="nombre ">-0.2</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2021-08</th>
|
||||
<td class="nombre ">1.9</td>
|
||||
<td class="nombre ">0.6</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2021-07</th>
|
||||
<td class="nombre ">1.1</td>
|
||||
<td class="nombre ">0.1</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2021-06</th>
|
||||
<td class="nombre ">1.5</td>
|
||||
<td class="nombre ">0.1</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2021-05</th>
|
||||
<td class="nombre ">1.4</td>
|
||||
<td class="nombre ">0.3</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2021-04</th>
|
||||
<td class="nombre ">1.2</td>
|
||||
<td class="nombre ">0.1</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2021-03</th>
|
||||
<td class="nombre ">1.1</td>
|
||||
<td class="nombre ">0.6</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2021-02</th>
|
||||
<td class="nombre ">0.6</td>
|
||||
<td class="nombre ">0.0</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2021-01</th>
|
||||
<td class="nombre ">0.6</td>
|
||||
<td class="nombre ">0.1</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2020-12</th>
|
||||
<td class="nombre ">0.0</td>
|
||||
<td class="nombre ">0.2</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2020-11</th>
|
||||
<td class="nombre ">0.2</td>
|
||||
<td class="nombre ">0.2</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2020-10</th>
|
||||
<td class="nombre ">0.1</td>
|
||||
<td class="nombre ">0.0</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2020-09</th>
|
||||
<td class="nombre ">0.0</td>
|
||||
<td class="nombre ">-0.5</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2020-08</th>
|
||||
<td class="nombre ">0.2</td>
|
||||
<td class="nombre ">-0.1</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2020-07</th>
|
||||
<td class="nombre ">0.8</td>
|
||||
<td class="nombre ">0.4</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2020-06</th>
|
||||
<td class="nombre ">0.2</td>
|
||||
<td class="nombre ">0.1</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2020-05</th>
|
||||
<td class="nombre ">0.4</td>
|
||||
<td class="nombre ">0.2</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2020-04</th>
|
||||
<td class="nombre ">0.3</td>
|
||||
<td class="nombre ">0.0</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2020-03</th>
|
||||
<td class="nombre ">0.7</td>
|
||||
<td class="nombre ">0.0</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2020-02</th>
|
||||
<td class="nombre ">1.4</td>
|
||||
<td class="nombre ">0.0</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2020-01</th>
|
||||
<td class="nombre ">1.5</td>
|
||||
<td class="nombre ">-0.4</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2019-12</th>
|
||||
<td class="nombre ">1.4</td>
|
||||
<td class="nombre ">0.4</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2019-11</th>
|
||||
<td class="nombre ">1.0</td>
|
||||
<td class="nombre ">0.1</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2019-10</th>
|
||||
<td class="nombre ">0.8</td>
|
||||
<td class="nombre ">0.0</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2019-09</th>
|
||||
<td class="nombre ">0.9</td>
|
||||
<td class="nombre ">-0.3</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2019-08</th>
|
||||
<td class="nombre ">1.0</td>
|
||||
<td class="nombre ">0.5</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2019-07</th>
|
||||
<td class="nombre ">1.1</td>
|
||||
<td class="nombre ">-0.2</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2019-06</th>
|
||||
<td class="nombre ">1.2</td>
|
||||
<td class="nombre ">0.2</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2019-05</th>
|
||||
<td class="nombre ">0.9</td>
|
||||
<td class="nombre ">0.1</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2019-04</th>
|
||||
<td class="nombre ">1.3</td>
|
||||
<td class="nombre ">0.3</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2019-03</th>
|
||||
<td class="nombre ">1.1</td>
|
||||
<td class="nombre ">0.8</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2019-02</th>
|
||||
<td class="nombre ">1.3</td>
|
||||
<td class="nombre ">0.1</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2019-01</th>
|
||||
<td class="nombre ">1.2</td>
|
||||
<td class="nombre ">-0.5</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2018-12</th>
|
||||
<td class="nombre ">1.6</td>
|
||||
<td class="nombre ">0.0</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2018-11</th>
|
||||
<td class="nombre ">1.9</td>
|
||||
<td class="nombre ">-0.2</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2018-10</th>
|
||||
<td class="nombre ">2.2</td>
|
||||
<td class="nombre ">0.1</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2018-09</th>
|
||||
<td class="nombre ">2.2</td>
|
||||
<td class="nombre ">-0.2</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2018-08</th>
|
||||
<td class="nombre ">2.3</td>
|
||||
<td class="nombre ">0.5</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2018-07</th>
|
||||
<td class="nombre ">2.3</td>
|
||||
<td class="nombre ">-0.1</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2018-06</th>
|
||||
<td class="nombre ">2.0</td>
|
||||
<td class="nombre ">0.0</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2018-05</th>
|
||||
<td class="nombre ">2.0</td>
|
||||
<td class="nombre ">0.4</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2018-04</th>
|
||||
<td class="nombre ">1.6</td>
|
||||
<td class="nombre ">0.2</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2018-03</th>
|
||||
<td class="nombre ">1.6</td>
|
||||
<td class="nombre ">1.0</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2018-02</th>
|
||||
<td class="nombre ">1.2</td>
|
||||
<td class="nombre ">0.0</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2018-01</th>
|
||||
<td class="nombre ">1.3</td>
|
||||
<td class="nombre ">-0.1</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2017-12</th>
|
||||
<td class="nombre ">1.2</td>
|
||||
<td class="nombre ">0.3</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2017-11</th>
|
||||
<td class="nombre ">1.2</td>
|
||||
<td class="nombre ">0.1</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2017-10</th>
|
||||
<td class="nombre ">1.1</td>
|
||||
<td class="nombre ">0.1</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2017-09</th>
|
||||
<td class="nombre ">1.0</td>
|
||||
<td class="nombre ">-0.2</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2017-08</th>
|
||||
<td class="nombre ">0.9</td>
|
||||
<td class="nombre ">0.5</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2017-07</th>
|
||||
<td class="nombre ">0.7</td>
|
||||
<td class="nombre ">-0.3</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2017-06</th>
|
||||
<td class="nombre ">0.7</td>
|
||||
<td class="nombre ">0.0</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2017-05</th>
|
||||
<td class="nombre ">0.8</td>
|
||||
<td class="nombre ">0.0</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2017-04</th>
|
||||
<td class="nombre ">1.2</td>
|
||||
<td class="nombre ">0.1</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2017-03</th>
|
||||
<td class="nombre ">1.1</td>
|
||||
<td class="nombre ">0.6</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2017-02</th>
|
||||
<td class="nombre ">1.2</td>
|
||||
<td class="nombre ">0.1</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2017-01</th>
|
||||
<td class="nombre ">1.3</td>
|
||||
<td class="nombre ">-0.3</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table><p class="paragraphe ">Définition : l’indice des prix à la consommation harmonisé (IPCH) est utilisé pour
|
||||
les comparaisons entre membres de l’Union européenne. Il est calculé pour tous les
|
||||
ménages, en France. La principale différence entre l’IPCH et l’IPC porte sur les dépenses
|
||||
de santé : l’IPCH suit des prix nets des remboursements de la sécurité sociale tandis
|
||||
que l’IPC suit des prix bruts.</p><p class="paragraphe ">Publication des résultats définitifs (février 2026) : le 13 mars 2026, à 8h45.</p><p class="paragraphe ">Prochaine parution (résultats provisoires – mars 2026) : le 31 mars 2026, à 8h45.</p><h2>Documentation</h2><p class="paragraphe dictionnaire-variable chevron-avant-lien"><a class="lien-dictionnaire-variable">Note méthodologique</a> <span class="format-taille">(pdf,166 Ko)</span></p><p class="paragraphe dictionnaire-variable chevron-avant-lien"><a class="lien-dictionnaire-variable">Indice des prix à la consommation : les changements 2026</a> <span class="format-taille">(pdf,141 Ko)</span></p><p class="paragraphe chevron-avant-lien"><a>Indice des prix à la consommation</a></p><p class="paragraphe chevron-avant-lien"><a>Classification des fonctions de consommation des ménages - eCoicop V2</a></p><h2 class="module-transverse-titre">
|
||||
Pour en savoir plus
|
||||
</h2><p class="paragraphe ">Définition : l’indice des prix à la consommation harmonisé (IPCH) est utilisé pour
|
||||
les comparaisons entre membres de l’Union européenne. Il est calculé pour tous les
|
||||
ménages, en France. La principale différence entre l’IPCH et l’IPC porte sur les dépenses
|
||||
de santé : l’IPCH suit des prix nets des remboursements de la sécurité sociale tandis
|
||||
que l’IPC suit des prix bruts.</p><p class="paragraphe ">Publication des résultats définitifs (février 2026) : le 13 mars 2026, à 8h45.</p><p class="paragraphe ">Prochaine parution (résultats provisoires – mars 2026) : le 31 mars 2026, à 8h45.</p><h2 class="module-transverse-titre"></h2><p class="paragraphe ">Séries chronologiques :
|
||||
<a class="renvoi">Indices des prix à la consommation - Données mensuelles depuis 1996 (Base 2025)</a> </p><p class="paragraphe ">Série chronologique IPCH :
|
||||
<a class="renvoi"> Indice des prix à la consommation harmonisé - Base 2025 - Ensemble</a> </p><p class="paragraphe ">
|
||||
<a class="renvoi">Agenda et règles de diffusion des indicateurs</a> </p></body></html>
|
||||
+611
@@ -0,0 +1,611 @@
|
||||
<html><body><h1 class="titre-principal information-rapide impression-nouvelle insee-conjoncture-2021-03-01"><img class="impression-seulement logo-insee"><div class="impression-seulement famille-date-numero">Informations Rapides ·
|
||||
28 février 2025 · n° 58</div><img class="impression-seulement logo-famille"><span class="titre-titre">En février 2025, les prix à la consommation augmentent de 0,8 % sur un an</span><span class="no-print"> </span><span class="sous-titre div-in-h test">Indice des prix à la consommation - résultats provisoires (IPC) - février 2025</span></h1><p class="auteurs hidden-template-impression"></p><div class="date-diffusion hidden-impression-information-rapide"><span class="hidden-template-impression"><span>Paru le :</span></span><span class="impression-seulement hidden-impression-information-rapide"><span>Paru le</span></span>28/02/2025</div><div class="date-diffusion hidden-impression-information-rapide"><span><span>Prochaine parution le :
|
||||
</span></span>30/10/2026 à 08h45<span class="hidden-impression-information-rapide"> - octobre 2026</span></div><p class="paragraphe ">Cette publication s’appuie sur des données provisoires. Les indices qui y figurent
|
||||
sont calculés sur un champ restreint d’observations de prix et à partir d’estimations
|
||||
des évolutions de certains tarifs non encore disponibles. Les résultats définitifs
|
||||
seront publiés le 14 mars 2025. En conséquence, les indices provisoires ne doivent
|
||||
pas être utilisés pour des revalorisations contractuelles.</p><p class="paragraphe ">Sur un an, selon l’estimation provisoire réalisée en fin de mois, les prix à la consommation
|
||||
augmenteraient de 0,8 % en février 2025, après +1,7 % en janvier. Pour la première
|
||||
fois depuis février 2021, le glissement annuel serait en deçà de 1 %. Le net ralentissement
|
||||
des prix s’expliquerait par un fort repli des prix de l’énergie : les prix de l’électricité
|
||||
baisseraient nettement sur un mois alors qu’ils augmentaient fortement en février
|
||||
2024. Sur un an, les prix des services ralentiraient. Les prix des produits manufacturés
|
||||
et du tabac ralentiraient aussi mais dans une moindre mesure, tandis que ceux de l’alimentation
|
||||
accéléreraient légèrement.</p><p class="paragraphe ">Sur un mois, les prix à la consommation seraient stables en février 2025 (après +0,2 %
|
||||
en janvier). Le rebond des prix des produits manufacturés après les soldes d’hiver
|
||||
serait compensé par la baisse des prix de l’électricité, notamment les tarifs réglementés
|
||||
qui diminuent de 15 %. Sur un mois, les prix de l’alimentation se replieraient légèrement.
|
||||
À l’inverse, ceux des services accéléreraient un peu.</p><p class="paragraphe ">Sur un an, l’indice des prix à la consommation harmonisé augmenterait de 0,9 % en
|
||||
février 2025, après +1,8 % en janvier. Sur un mois, il serait stable après ‑0,2 %
|
||||
le mois précédent.</p><table class="tableau-produit">
|
||||
<caption>Indices des prix à la consommation (Évolutions annuelles (en %) ; base 100 : année 2015) - *: indice des prix à la consommation.
|
||||
**: indice des prix à la consommation harmonisé. </caption>
|
||||
<thead>
|
||||
<tr class="">
|
||||
<th class=""></th>
|
||||
<th class="">Pondérations 2025</th>
|
||||
<th class="">février 2024</th>
|
||||
<th class="">janvier 2025</th>
|
||||
<th class="">février 2025 (p) </th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr class="">
|
||||
<th class="ligne total ">Ensemble IPC*</th>
|
||||
<td class="nombre total ">10 000</td>
|
||||
<td class="nombre total ">3,0</td>
|
||||
<td class="nombre total ">1,7</td>
|
||||
<td class="nombre total ">0,8</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">Alimentation</th>
|
||||
<td class="nombre ">1 464</td>
|
||||
<td class="nombre ">3,6</td>
|
||||
<td class="nombre ">0,1</td>
|
||||
<td class="nombre ">0,3</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">- Produits frais</th>
|
||||
<td class="nombre ">172</td>
|
||||
<td class="nombre ">0,4</td>
|
||||
<td class="nombre ">0,4</td>
|
||||
<td class="nombre ">1,8</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">- Autre alimentation</th>
|
||||
<td class="nombre ">1 292</td>
|
||||
<td class="nombre ">4,1</td>
|
||||
<td class="nombre ">0,1</td>
|
||||
<td class="nombre ">0,1</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">Tabac</th>
|
||||
<td class="nombre ">164</td>
|
||||
<td class="nombre ">18,7</td>
|
||||
<td class="nombre ">6,0</td>
|
||||
<td class="nombre ">4,5</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">Énergie</th>
|
||||
<td class="nombre ">807</td>
|
||||
<td class="nombre ">4,3</td>
|
||||
<td class="nombre ">2,7</td>
|
||||
<td class="nombre ">-5,7</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">Produits manufacturés</th>
|
||||
<td class="nombre ">2 284</td>
|
||||
<td class="nombre ">0,4</td>
|
||||
<td class="nombre ">0,2</td>
|
||||
<td class="nombre ">0,0</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">Services</th>
|
||||
<td class="nombre ">5 281</td>
|
||||
<td class="nombre ">3,2</td>
|
||||
<td class="nombre ">2,5</td>
|
||||
<td class="nombre ">2,1</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne total ">Ensemble IPCH**</th>
|
||||
<td class="nombre total ">10 000</td>
|
||||
<td class="nombre total ">3,2</td>
|
||||
<td class="nombre total ">1,8</td>
|
||||
<td class="nombre total ">0,9</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table><table class="tableau-produit">
|
||||
<caption>Évolutions de l'indice des prix à la consommation </caption>
|
||||
<thead>
|
||||
<tr class="">
|
||||
<th class=""></th>
|
||||
<th class="">Glissement annuel</th>
|
||||
<th class="">Variation mensuelle observée</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr class="">
|
||||
<th class="ligne ">2025-02</th>
|
||||
<td>0.8</td>
|
||||
<td>0.0</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2025-01</th>
|
||||
<td>1.7</td>
|
||||
<td>0.2</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2024-12</th>
|
||||
<td>1.3</td>
|
||||
<td>0.2</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2024-11</th>
|
||||
<td>1.3</td>
|
||||
<td>-0.1</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2024-10</th>
|
||||
<td>1.2</td>
|
||||
<td>0.3</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2024-09</th>
|
||||
<td>1.1</td>
|
||||
<td>-1.2</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2024-08</th>
|
||||
<td>1.8</td>
|
||||
<td>0.5</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2024-07</th>
|
||||
<td>2.3</td>
|
||||
<td>0.2</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2024-06</th>
|
||||
<td>2.2</td>
|
||||
<td>0.1</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2024-05</th>
|
||||
<td>2.3</td>
|
||||
<td>0.0</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2024-04</th>
|
||||
<td>2.2</td>
|
||||
<td>0.5</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2024-03</th>
|
||||
<td>2.3</td>
|
||||
<td>0.2</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2024-02</th>
|
||||
<td>3.0</td>
|
||||
<td>0.9</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2024-01</th>
|
||||
<td>3.1</td>
|
||||
<td>-0.2</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2023-12</th>
|
||||
<td>3.7</td>
|
||||
<td>0.1</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2023-11</th>
|
||||
<td>3.5</td>
|
||||
<td>-0.2</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2023-10</th>
|
||||
<td>4.0</td>
|
||||
<td>0.1</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2023-09</th>
|
||||
<td>4.9</td>
|
||||
<td>-0.5</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2023-08</th>
|
||||
<td>4.9</td>
|
||||
<td>1.0</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2023-07</th>
|
||||
<td>4.3</td>
|
||||
<td>0.1</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2023-06</th>
|
||||
<td>4.5</td>
|
||||
<td>0.2</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2023-05</th>
|
||||
<td>5.1</td>
|
||||
<td>-0.1</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2023-04</th>
|
||||
<td>5.9</td>
|
||||
<td>0.6</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2023-03</th>
|
||||
<td>5.7</td>
|
||||
<td>0.9</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2023-02</th>
|
||||
<td>6.3</td>
|
||||
<td>1.0</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2023-01</th>
|
||||
<td>6.0</td>
|
||||
<td>0.4</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2022-12</th>
|
||||
<td>5.9</td>
|
||||
<td>-0.1</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2022-11</th>
|
||||
<td>6.2</td>
|
||||
<td>0.3</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2022-10</th>
|
||||
<td>6.2</td>
|
||||
<td>1.0</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2022-09</th>
|
||||
<td>5.6</td>
|
||||
<td>-0.6</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2022-08</th>
|
||||
<td>5.9</td>
|
||||
<td>0.5</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2022-07</th>
|
||||
<td>6.1</td>
|
||||
<td>0.3</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2022-06</th>
|
||||
<td>5.8</td>
|
||||
<td>0.7</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2022-05</th>
|
||||
<td>5.2</td>
|
||||
<td>0.7</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2022-04</th>
|
||||
<td>4.8</td>
|
||||
<td>0.4</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2022-03</th>
|
||||
<td>4.5</td>
|
||||
<td>1.4</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2022-02</th>
|
||||
<td>3.6</td>
|
||||
<td>0.8</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2022-01</th>
|
||||
<td>2.9</td>
|
||||
<td>0.3</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2021-12</th>
|
||||
<td>2.8</td>
|
||||
<td>0.2</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2021-11</th>
|
||||
<td>2.8</td>
|
||||
<td>0.4</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2021-10</th>
|
||||
<td>2.6</td>
|
||||
<td>0.4</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2021-09</th>
|
||||
<td>2.2</td>
|
||||
<td>-0.2</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2021-08</th>
|
||||
<td>1.9</td>
|
||||
<td>0.6</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2021-07</th>
|
||||
<td>1.2</td>
|
||||
<td>0.1</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2021-06</th>
|
||||
<td>1.5</td>
|
||||
<td>0.1</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2021-05</th>
|
||||
<td>1.4</td>
|
||||
<td>0.3</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2021-04</th>
|
||||
<td>1.2</td>
|
||||
<td>0.1</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2021-03</th>
|
||||
<td>1.1</td>
|
||||
<td>0.6</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2021-02</th>
|
||||
<td>0.6</td>
|
||||
<td>0.0</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2021-01</th>
|
||||
<td>0.6</td>
|
||||
<td>0.2</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2020-12</th>
|
||||
<td>0.0</td>
|
||||
<td>0.2</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2020-11</th>
|
||||
<td>0.2</td>
|
||||
<td>0.2</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2020-10</th>
|
||||
<td>0.0</td>
|
||||
<td>0.0</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2020-09</th>
|
||||
<td>0.0</td>
|
||||
<td>-0.5</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2020-08</th>
|
||||
<td>0.2</td>
|
||||
<td>-0.1</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2020-07</th>
|
||||
<td>0.8</td>
|
||||
<td>0.4</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2020-06</th>
|
||||
<td>0.2</td>
|
||||
<td>0.1</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2020-05</th>
|
||||
<td>0.4</td>
|
||||
<td>0.1</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2020-04</th>
|
||||
<td>0.3</td>
|
||||
<td>0.0</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2020-03</th>
|
||||
<td>0.7</td>
|
||||
<td>0.1</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2020-02</th>
|
||||
<td>1.4</td>
|
||||
<td>0.0</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2020-01</th>
|
||||
<td>1.5</td>
|
||||
<td>-0.4</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2019-12</th>
|
||||
<td>1.5</td>
|
||||
<td>0.4</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2019-11</th>
|
||||
<td>1.0</td>
|
||||
<td>0.1</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2019-10</th>
|
||||
<td>0.8</td>
|
||||
<td>0.0</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2019-09</th>
|
||||
<td>0.9</td>
|
||||
<td>-0.3</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2019-08</th>
|
||||
<td>1.0</td>
|
||||
<td>0.5</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2019-07</th>
|
||||
<td>1.1</td>
|
||||
<td>-0.2</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2019-06</th>
|
||||
<td>1.2</td>
|
||||
<td>0.2</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2019-05</th>
|
||||
<td>0.9</td>
|
||||
<td>0.1</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2019-04</th>
|
||||
<td>1.3</td>
|
||||
<td>0.3</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2019-03</th>
|
||||
<td>1.1</td>
|
||||
<td>0.8</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2019-02</th>
|
||||
<td>1.3</td>
|
||||
<td>0.0</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2019-01</th>
|
||||
<td>1.2</td>
|
||||
<td>-0.4</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2018-12</th>
|
||||
<td>1.6</td>
|
||||
<td>0.0</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2018-11</th>
|
||||
<td>1.9</td>
|
||||
<td>-0.2</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2018-10</th>
|
||||
<td>2.2</td>
|
||||
<td>0.1</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2018-09</th>
|
||||
<td>2.2</td>
|
||||
<td>-0.2</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2018-08</th>
|
||||
<td>2.3</td>
|
||||
<td>0.5</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2018-07</th>
|
||||
<td>2.3</td>
|
||||
<td>-0.1</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2018-06</th>
|
||||
<td>2.0</td>
|
||||
<td>0.0</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2018-05</th>
|
||||
<td>2.0</td>
|
||||
<td>0.4</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2018-04</th>
|
||||
<td>1.6</td>
|
||||
<td>0.2</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2018-03</th>
|
||||
<td>1.6</td>
|
||||
<td>1.0</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2018-02</th>
|
||||
<td>1.2</td>
|
||||
<td>0.0</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2018-01</th>
|
||||
<td>1.3</td>
|
||||
<td>-0.1</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2017-12</th>
|
||||
<td>1.2</td>
|
||||
<td>0.3</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2017-11</th>
|
||||
<td>1.2</td>
|
||||
<td>0.1</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2017-10</th>
|
||||
<td>1.1</td>
|
||||
<td>0.1</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2017-09</th>
|
||||
<td>1.0</td>
|
||||
<td>-0.2</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2017-08</th>
|
||||
<td>0.9</td>
|
||||
<td>0.5</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2017-07</th>
|
||||
<td>0.7</td>
|
||||
<td>-0.3</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2017-06</th>
|
||||
<td>0.7</td>
|
||||
<td>0.0</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2017-05</th>
|
||||
<td>0.8</td>
|
||||
<td>0.0</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2017-04</th>
|
||||
<td>1.2</td>
|
||||
<td>0.1</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2017-03</th>
|
||||
<td>1.1</td>
|
||||
<td>0.6</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2017-02</th>
|
||||
<td>1.2</td>
|
||||
<td>0.1</td>
|
||||
</tr>
|
||||
<tr class="">
|
||||
<th class="ligne ">2017-01</th>
|
||||
<td>1.3</td>
|
||||
<td>-0.2</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table><p class="paragraphe ">Définition : l’indice des prix à la consommation harmonisé (IPCH) est utilisé pour
|
||||
les comparaisons entre membres de l’Union européenne. Il est calculé pour tous les
|
||||
ménages, en France. La principale différence entre l’IPCH et l’IPC porte sur les dépenses
|
||||
de santé : l’IPCH suit des prix nets des remboursements de la sécurité sociale tandis
|
||||
que l’IPC suit des prix bruts.</p><p class="paragraphe ">Publication des résultats définitifs (février 2025) : le 14 mars 2025, à 8h45.</p><p class="paragraphe ">Prochaine parution (résultats provisoires – mars 2025) : le 28 mars 2025, à 8h45.</p><h2>Documentation</h2><p class="paragraphe dictionnaire-variable chevron-avant-lien"><a class="lien-dictionnaire-variable">Note méthodologique</a> <span class="format-taille">(pdf,136 Ko)</span></p><p class="paragraphe dictionnaire-variable chevron-avant-lien"><a class="lien-dictionnaire-variable">Indice des prix à la consommation : changements pour l'année 2024</a> <span class="format-taille">(pdf,117 Ko)</span></p><p class="paragraphe chevron-avant-lien"><a>Indice des prix à la consommation</a></p><p class="paragraphe chevron-avant-lien"><a>Classification des fonctions de consommation des ménages - COICOP</a></p><h2 class="module-transverse-titre">
|
||||
Pour en savoir plus
|
||||
</h2><p class="paragraphe ">Définition : l’indice des prix à la consommation harmonisé (IPCH) est utilisé pour
|
||||
les comparaisons entre membres de l’Union européenne. Il est calculé pour tous les
|
||||
ménages, en France. La principale différence entre l’IPCH et l’IPC porte sur les dépenses
|
||||
de santé : l’IPCH suit des prix nets des remboursements de la sécurité sociale tandis
|
||||
que l’IPC suit des prix bruts.</p><p class="paragraphe ">Publication des résultats définitifs (février 2025) : le 14 mars 2025, à 8h45.</p><p class="paragraphe ">Prochaine parution (résultats provisoires – mars 2025) : le 28 mars 2025, à 8h45.</p><h2 class="module-transverse-titre"></h2><p class="paragraphe ">Séries chronologiques :
|
||||
<a class="renvoi">Indices des prix à la consommation - Données mensuelles depuis 1990</a> </p><p class="paragraphe ">Série chronologique IPCH :
|
||||
<a class="renvoi">Indice des prix à la consommation harmonisé - Base 2015 - Ensemble</a> </p><p class="paragraphe ">
|
||||
<a class="renvoi">Agenda et règles de diffusion des indicateurs</a> </p></body></html>
|
||||
+43
@@ -0,0 +1,43 @@
|
||||
<rss version="2.0">
|
||||
<channel>
|
||||
<title>Publications conjoncturelles</title>
|
||||
<link>https://www.insee.fr</link>
|
||||
<description>Les dernières mises à jour, les parutions d’indicateurs conjoncturels et de publications</description>
|
||||
<language>fr</language>
|
||||
<copyright>© Copyright Insee</copyright>
|
||||
<webMaster>[email protected]</webMaster>
|
||||
<pubDate>Fri, 23 Oct 2026 10:00:00 GMT</pubDate>
|
||||
<image>
|
||||
<url>https://www.insee.fr/static/img/logoInseeFr.svg</url>
|
||||
<title>Institut national de la statistique et des études économiques</title>
|
||||
<link>https://www.insee.fr/fr/statistiques?debut=0&categorie=10</link>
|
||||
<width>50</width>
|
||||
<height>50</height>
|
||||
<description>Institut national de la statistique et des études économiques</description>
|
||||
</image>
|
||||
<item>
|
||||
<title>En octobre 2026, les perspectives de mises en chantier continuent de baisser fortement dans la promotion immobilière</title>
|
||||
<link>https://www.insee.fr/fr/statistiques/9096575</link>
|
||||
<description>En octobre 2026, l’opinion des promoteurs concernant les perspectives de mises en chantier de logements continue de se dégrader nettement. Cette nouvelle baisse concerne aussi bien le solde relatif aux logements destinés à la vente que celui relatif aux logements destinés à l’habitat social. Les promoteurs se montrent à nouveau plus pessimistes qu’au trimestre précédent concernant les perspectives d’évolution des moyens de financement de leur clientèle et l’évolution passée de l’apport personnel des candidats à l’acquisition d’un logement.</description>
|
||||
<pubDate>Fri, 23 Oct 2026 10:00:00 GMT</pubDate>
|
||||
</item>
|
||||
<item>
|
||||
<title>En octobre 2026, la conjoncture dans les travaux publics se détériore encore un peu plus</title>
|
||||
<link>https://www.insee.fr/fr/statistiques/9097247</link>
|
||||
<description>En octobre 2026, l’opinion des entrepreneurs de travaux publics au sujet de leur activité, passée comme prévue, se détériore de nouveau. L’opinion des entrepreneurs sur leurs carnets de commandes continue également de se dégrader, atteignant un niveau inobservé depuis avril 2016.</description>
|
||||
<pubDate>Fri, 23 Oct 2026 10:00:00 GMT</pubDate>
|
||||
</item>
|
||||
<item>
|
||||
<title>En octobre 2026, le climat des affaires dans le bâtiment diminue</title>
|
||||
<link>https://www.insee.fr/fr/statistiques/9094600</link>
|
||||
<description>Selon les chefs d’entreprise interrogés en octobre 2026, le climat des affaires dans le bâtiment diminue. À 95, l’indicateur synthétique baisse d’un point (après arrondi) et s’écarte de sa moyenne de long terme (100). L’opinion des entrepreneurs du bâtiment sur leur activité passée se dégrade nettement, tandis que celle sur leurs perspectives d’activité s’améliore à nouveau. Le solde lié à l’incertitude économique ressentie par les entrepreneurs augmente très fortement, et atteint son plus haut niveau depuis le début de cette série en 2021, tandis que celui lié aux prix prévus est stable.</description>
|
||||
<pubDate>Thu, 22 Oct 2026 06:45:00 GMT</pubDate>
|
||||
</item>
|
||||
<item>
|
||||
<title>En octobre 2026, le climat des affaires dans le commerce de détail et d’automobiles s’assombrit de nouveau</title>
|
||||
<link>https://www.insee.fr/fr/statistiques/9094608</link>
|
||||
<description>En octobre 2026, le climat des affaires s’assombrit de nouveau dans l’ensemble constitué du commerce de détail et du commerce et de la réparation d’automobiles. À 93, l’indicateur synthétique perd trois points et s’éloigne davantage de sa moyenne de longue période (100). Ce recul s’explique principalement par la forte baisse du solde d’opinion relatif aux perspectives générales d’activité.</description>
|
||||
<pubDate>Thu, 22 Oct 2026 06:45:00 GMT</pubDate>
|
||||
</item>
|
||||
</channel>
|
||||
</rss>
|
||||
@@ -0,0 +1 @@
|
||||
{"status": 0, "numFounds": 65, "documents": [{"id": 9020113, "famille": {"id": 119, "libelleFr": null, "presentationFr": null, "libelleEn": null, "presentationEn": null, "idParent": null, "categorie": null, "collection": false, "logo": false, "gabarit": null, "active": null, "ordre": null, "service": null, "methodologie": null, "source": null, "filActualite": null, "lettreInfo": null, "avisParution": null, "rss": null, "sensible": null, "enfants": [], "typeFormulaire": null, "facetteCollection": null, "facetteActualiteSSM": null, "libelleCourt": null, "diffusion": null, "ongletNavTransverse": null, "rubrique": null, "directeurImpression": null, "adresseImpression": null, "dateImpression": null, "facetteConjoncture": {"id": null, "libelleFr": "Enquête mensuelle de conjoncture auprès des ménages", "libelleEn": "Monthly consumer confidence survey", "ordre": null, "infoBulleFr": null, "infoBulleEn": null}, "indicateurPrincipal": null, "indicateurSecondaire": null, "prochaineParution": null, "heureembargo": null, "epsilon": null, "bnsp": false, "idMetierDecouvrirCollection": null, "alaUne": null}, "embargo": "2026-10-27T07:45:00.000+00:00", "periodeReferenceEn": "October 2026"}, {"id": 9088745, "famille": {"id": 152, "libelleFr": null, "presentationFr": null, "libelleEn": null, "presentationEn": null, "idParent": null, "categorie": null, "collection": false, "logo": false, "gabarit": null, "active": null, "ordre": null, "service": null, "methodologie": null, "source": null, "filActualite": null, "lettreInfo": null, "avisParution": null, "rss": null, "sensible": null, "enfants": [], "typeFormulaire": null, "facetteCollection": null, "facetteActualiteSSM": null, "libelleCourt": null, "diffusion": null, "ongletNavTransverse": null, "rubrique": null, "directeurImpression": null, "adresseImpression": null, "dateImpression": null, "facetteConjoncture": {"id": null, "libelleFr": "Prix des énergies et des matières premières importées", "libelleEn": "Prices of energy and imported raw materials", "ordre": null, "infoBulleFr": null, "infoBulleEn": null}, "indicateurPrincipal": null, "indicateurSecondaire": null, "prochaineParution": null, "heureembargo": null, "epsilon": null, "bnsp": false, "idMetierDecouvrirCollection": null, "alaUne": null}, "embargo": "2026-10-27T11:00:00.000+00:00", "periodeReferenceEn": "September 2026"}, {"id": 9020115, "famille": {"id": 1382, "libelleFr": null, "presentationFr": null, "libelleEn": null, "presentationEn": null, "idParent": null, "categorie": null, "collection": false, "logo": false, "gabarit": null, "active": null, "ordre": null, "service": null, "methodologie": null, "source": null, "filActualite": null, "lettreInfo": null, "avisParution": null, "rss": null, "sensible": null, "enfants": [], "typeFormulaire": null, "facetteCollection": null, "facetteActualiteSSM": null, "libelleCourt": null, "diffusion": null, "ongletNavTransverse": null, "rubrique": null, "directeurImpression": null, "adresseImpression": null, "dateImpression": null, "facetteConjoncture": {"id": null, "libelleFr": "Construction de locaux", "libelleEn": "Non-residential building permits", "ordre": null, "infoBulleFr": null, "infoBulleEn": null}, "indicateurPrincipal": null, "indicateurSecondaire": null, "prochaineParution": null, "heureembargo": null, "epsilon": null, "bnsp": false, "idMetierDecouvrirCollection": null, "alaUne": null}, "embargo": "2026-10-28T07:45:00.000+00:00", "periodeReferenceEn": "September 2026"}, {"id": 9020114, "famille": {"id": 110, "libelleFr": null, "presentationFr": null, "libelleEn": null, "presentationEn": null, "idParent": null, "categorie": null, "collection": false, "logo": false, "gabarit": null, "active": null, "ordre": null, "service": null, "methodologie": null, "source": null, "filActualite": null, "lettreInfo": null, "avisParution": null, "rss": null, "sensible": null, "enfants": [], "typeFormulaire": null, "facetteCollection": null, "facetteActualiteSSM": null, "libelleCourt": null, "diffusion": null, "ongletNavTransverse": null, "rubrique": null, "directeurImpression": null, "adresseImpression": null, "dateImpression": null, "facetteConjoncture": {"id": null, "libelleFr": "Construction de logements", "libelleEn": "Housing starts", "ordre": null, "infoBulleFr": null, "infoBulleEn": null}, "indicateurPrincipal": null, "indicateurSecondaire": null, "prochaineParution": null, "heureembargo": null, "epsilon": null, "bnsp": false, "idMetierDecouvrirCollection": null, "alaUne": null}, "embargo": "2026-10-28T07:45:00.000+00:00", "periodeReferenceEn": "September 2026"}, {"id": 9020116, "famille": {"id": 113, "libelleFr": null, "presentationFr": null, "libelleEn": null, "presentationEn": null, "idParent": null, "categorie": null, "collection": false, "logo": false, "gabarit": null, "active": null, "ordre": null, "service": null, "methodologie": null, "source": null, "filActualite": null, "lettreInfo": null, "avisParution": null, "rss": null, "sensible": null, "enfants": [], "tyLine truncated
|
||||
+166
@@ -0,0 +1,166 @@
|
||||
<html><body><h1 class="padding-bottom--0 padding-top--0 margin-top--2 font-weight-700 margin-bottom--2 ">Consumer price inflation, UK: June 2026</h1><p class="page-bulletins--Summary margin-right-md--2 margin-bottom--3 padding-bottom--0 padding-top--0">
|
||||
|
||||
|
||||
Price indices, percentage changes, and weights for the different measures of consumer price inflation.
|
||||
|
||||
</p><p class="alert-release-banner__title">This is not the latest release.
|
||||
<a class="alert-release-banner__link">View latest release</a>
|
||||
</p><p class="col col--md-12 col--lg-15 margin-bottom-sm--1 margin-bottom-md--3 margin-top-sm--1 padding-bottom--0 padding-top--0">
|
||||
<span class="font-weight-700">Contact: </span><br><a class="text--white"><span class="visuallyhidden">Email </span>Consumer Price Inflation team</a>
|
||||
</p><p class="col col--md-one-third col--lg-one-third margin-bottom-sm--1 margin-bottom-md--3 margin-top--0 padding-bottom--0 padding-top--0">
|
||||
<span class="font-weight-700">Release date: </span><br>22 July 2026<br>
|
||||
|
||||
</p><p class="col col--md-one-third col--lg-one-third margin-bottom-sm--3 margin-bottom-md--3 margin-top--0 padding-bottom--0 padding-top--0">
|
||||
<span class="font-weight-700">Next release: </span><br>19 August 2026
|
||||
</p><h2 class="table-of-contents__title">Table of contents</h2><p class="text-right--md padding-top-md--0 padding-bottom-md--0 height--5 margin-bottom-md--0 print--hide nojs--hide js--show">
|
||||
<a class="link-complex nojs--hide js--show js-print-page">
|
||||
Print this <span class="lowercase">
|
||||
Statistical bulletin
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
</a>
|
||||
<span class="icon icon-print--dark"></span>
|
||||
</p><p class="text-right--md padding-top-md--0 padding-bottom-md--0 height--5 margin-top-md--1 print--hide">
|
||||
<a class="link-complex js-pdf-dl-link">
|
||||
Download as PDF
|
||||
</a>
|
||||
<span class="icon icon-download--dark"></span>
|
||||
</p><p>The Consumer Prices Index including owner occupiers' housing costs (CPIH) rose by 2.8% in the 12 months to June 2026, down from 3.0% the previous month.</p><p>On a monthly basis, CPIH rose by 0.2% in June 2026, compared with a rise of 0.3% in June 2025.</p><p>The Consumer Prices Index (CPI) rose by 2.6% in the 12 months to June 2026, down from 2.8% the previous month.</p><p>On a monthly basis, CPI rose by 0.1% in June 2026, compared with a rise of 0.3% in June 2025.</p><p>Transport, and food and non-alcoholic beverages made the largest downward contributions to the monthly change in both CPIH and CPI annual rates.</p><p>Core CPIH (CPIH excluding energy, food, alcohol and tobacco) rose by 2.8% in the 12 months to June 2026, unchanged from the 12 months to May; the CPIH goods annual rate slowed from 2.0% to 1.7%, while the CPIH services annual rate was unchanged, at 3.6%.</p><p>Core CPI (CPI excluding energy, food, alcohol and tobacco) rose by 2.6% in the 12 months to June 2026, unchanged from the 12 months to May; the CPI goods annual rate slowed from 2.0% to 1.7%, while the CPI services annual rate eased from 3.7% to 3.6%.</p><p>
|
||||
</p><table class="table">
|
||||
<caption class="table__caption">Table 1: CPIH, OOH component and CPI index values, and annual and monthly rates<br><span class="table__subtitle">UK, June 2025 to June 2026 </span></caption>
|
||||
<colgroup><col><col><col><col><col><col><col><col><col><col></colgroup>
|
||||
<tr class="table__header-row table__nowrap"><td class="align-left"></td><td class="align-left"></td><th class="align-right">CPIH<br>Index <br>(UK,<br>2015 =<br>100)</th><th class="align-right">CPIH<br>12-<br>month<br>rate<br>(%)</th><th class="align-right">CPIH 1-<br>month<br>rate<br>(%)</th><th class="align-right">CPI Index<br>(UK,<br>2015=100)</th><th class="align-right">CPI 12- <br>month<br>rate<br>(%)</th><th class="align-right">CPI 1- <br>month<br>rate<br>(%)</th><th class="align-right">OOH Index<br>(UK,<br>2015=100)</th><th class="align-right">OOH 12-<br>month<br>rate<br>(%)</th></tr>
|
||||
<tr><th class="table__nowrap align-left">2025</th><th class="table__nowrap align-left">Jun</th><td class="align-right">138.4</td><td class="align-right">4.1</td><td class="align-right">0.3</td><td class="align-right">138.9</td><td class="align-right">3.6</td><td class="align-right">0.3</td><td class="align-right">134.2</td><td class="align-right">6.4</td></tr>
|
||||
<tr><td class="align-left"></td><th class="table__nowrap align-left">Jul</th><td class="align-right">138.5</td><td class="align-right">4.2</td><td class="align-right">0.0</td><td class="align-right">139.0</td><td class="align-right">3.8</td><td class="align-right">0.1</td><td class="align-right">134.0</td><td class="align-right">5.5</td></tr>
|
||||
<tr><td class="align-left"></td><th class="table__nowrap align-left">Aug</th><td class="align-right">138.9</td><td class="align-right">4.1</td><td class="align-right">0.3</td><td class="align-right">139.3</td><td class="align-right">3.8</td><td class="align-right">0.3</td><td class="align-right">134.5</td><td class="align-right">5.3</td></tr>
|
||||
<tr><td class="align-left"></td><th class="table__nowrap align-left">Sep </th><td class="align-right">138.9</td><td class="align-right">4.1</td><td class="align-right">0.1</td><td class="align-right">139.3</td><td class="align-right">3.8</td><td class="align-right">0.0</td><td class="align-right">135.1</td><td class="align-right">5.2</td></tr>
|
||||
<tr><td class="align-left"></td><th class="table__nowrap align-left">Oct</th><td class="align-right">139.5</td><td class="align-right">3.8</td><td class="align-right">0.4</td><td class="align-right">139.8</td><td class="align-right">3.6</td><td class="align-right">0.4</td><td class="align-right">135.7</td><td class="align-right">4.8</td></tr>
|
||||
<tr><td class="align-left"></td><th class="table__nowrap align-left">Nov</th><td class="align-right">139.4</td><td class="align-right">3.5</td><td class="align-right">-0.1</td><td class="align-right">139.5</td><td class="align-right">3.2</td><td class="align-right">-0.2</td><td class="align-right">136.5</td><td class="align-right">4.5</td></tr>
|
||||
<tr><td class="align-left"></td><th class="table__nowrap align-left">Dec </th><td class="align-right">139.9</td><td class="align-right">3.6</td><td class="align-right">0.4</td><td class="align-right">140.1</td><td class="align-right">3.4</td><td class="align-right">0.4</td><td class="align-right">136.8</td><td class="align-right">4.2</td></tr>
|
||||
<tr><th class="table__nowrap align-left">2026</th><th class="table__nowrap align-left">Jan</th><td class="align-right">139.4</td><td class="align-right">3.2</td><td class="align-right">-0.3</td><td class="align-right">139.5</td><td class="align-right">3.0</td><td class="align-right">-0.5</td><td class="align-right">137.0</td><td class="align-right">3.9</td></tr>
|
||||
<tr><td class="align-left"></td><th class="table__nowrap align-left">Feb</th><td class="align-right">140.0</td><td class="align-right">3.2</td><td class="align-right">0.4</td><td class="align-right">140.1</td><td class="align-right">3.0</td><td class="align-right">0.4</td><td class="align-right">137.4</td><td class="align-right">3.8</td></tr>
|
||||
<tr><td class="align-left"></td><th class="table__nowrap align-left">Mar</th><td class="align-right">140.8</td><td class="align-right">3.4</td><td class="align-right">0.6</td><td class="align-right">141.0</td><td class="align-right">3.3</td><td class="align-right">0.7</td><td class="align-right">137.7</td><td class="align-right">3.6</td></tr>
|
||||
<tr><td class="align-left"></td><th class="table__nowrap align-left">Apr</th><td class="align-right">141.8</td><td class="align-right">3.0</td><td class="align-right">0.8</td><td class="align-right">142.1</td><td class="align-right">2.8</td><td class="align-right">0.7</td><td class="align-right">137.9</td><td class="align-right">3.6</td></tr>
|
||||
<tr><td class="align-left"></td><th class="table__nowrap align-left">May</th><td class="align-right">142.1</td><td class="align-right">3.0</td><td class="align-right">0.2</td><td class="align-right">142.4</td><td class="align-right">2.8</td><td class="align-right">0.2</td><td class="align-right">138.1</td><td class="align-right">3.3</td></tr>
|
||||
<tr><td class="align-left"></td><th class="table__nowrap align-left">Jun</th><td class="align-right">142.3</td><td class="align-right">2.8</td><td class="align-right">0.2</td><td class="align-right">142.5</td><td class="align-right">2.6</td><td class="align-right">0.1</td><td class="align-right">138.6</td><td class="align-right">3.3</td></tr>
|
||||
</table><p>
|
||||
|
||||
|
||||
|
||||
|
||||
</p><p>The Consumer Prices Index including owner occupiers' housing costs (CPIH) rose by 2.8% in the 12 months to June 2026, down from 3.0% the previous month (Figure 1). The 12-month rate for June was the lowest recorded since September 2024, when it was 2.6%.</p><p>On a monthly basis, CPIH rose by 0.2% in June 2026, compared with a rise of 0.3% in June 2025.</p><p>The Consumer Prices Index (CPI) rose by 2.6% in the 12 months to June 2026, down from 2.8% the previous month. The 12-month rate was also 2.6% in March 2025 and it was last lower in December 2024, when it was 2.5%.</p><p>On a monthly basis, CPI rose by 0.1% in June 2026, compared with a rise of 0.3% in June 2025.</p><p>The main drivers of the annual inflation rate for CPIH and CPI are the same where they are common to both measures. However, the owner occupiers' housing (OOH) costs component accounts for approximately 18% of the CPIH and is the main driver for differences between the CPIH and CPI inflation rates.</p><p>This makes CPIH our most comprehensive measure of inflation. We cover this in more detail in <a>Section 4: Latest movements in CPIH inflation</a> and provide a commentary on the CPI in <a>Section 5: Latest movements in CPI inflation</a>. We also cover both CPIH and CPI in <a>Section 3: Notable movements in prices</a>, though the figures reflect CPIH.</p><p>
|
||||
</p><table class="table">
|
||||
<caption class="table__caption">Table 2: CPIH annual and monthly inflation rates by division <br><span class="table__subtitle">UK, June 2025, May 2026, and June 2026 </span></caption>
|
||||
<colgroup><col><col><col><col><col><col></colgroup>
|
||||
<tr class="table__header-row table__nowrap"><td class="align-left"></td><td></td><th class="align-center">CPIH 12-month rate (%)</th><th class="align-center">CPIH 1-month rate (%)</th></tr>
|
||||
<tr class="table__header-row table__nowrap"><td class="align-left"></td><td class="align-right"></td><th class="align-right">May 2026</th><th class="align-right">June 2026</th><th class="align-right">June 2025</th><th class="align-right">June 2026</th></tr>
|
||||
<tr><th class="table__nowrap align-left">CPIH All items </th><td class="align-right"></td><td class="align-right">3.0</td><td class="align-right">2.8</td><td class="align-right">0.3</td><td class="align-right">0.2</td></tr>
|
||||
<tr><th class="table__nowrap align-left">Food and non-alcoholic beverages </th><td class="align-right"></td><td class="align-right">2.2</td><td class="align-right">1.7</td><td class="align-right">0.3</td><td class="align-right">-0.2</td></tr>
|
||||
<tr><th class="table__nowrap align-left">Alcohol and tobacco </th><td class="align-right"></td><td class="align-right">2.4</td><td class="align-right">2.1</td><td class="align-right">0.5</td><td class="align-right">0.1</td></tr>
|
||||
<tr><th class="table__nowrap align-left">Clothing and footwear </th><td class="align-right"></td><td class="align-right">0.2</td><td class="align-right">-0.5</td><td class="align-right">-0.4</td><td class="align-right">-1.2</td></tr>
|
||||
<tr><th class="table__nowrap align-left">Housing and household services</th><td class="align-right"></td><td class="align-right">2.7</td><td class="align-right">2.7</td><td class="align-right">0.2</td><td class="align-right">0.2</td></tr>
|
||||
<tr><th class="table__nowrap align-left">of which owner occupiers' housing<br>costs</th><td class="align-right"></td><td class="align-right">3.3</td><td class="align-right">3.3</td><td class="align-right">0.3</td><td class="align-right">0.3</td></tr>
|
||||
<tr><th class="table__nowrap align-left">Furniture and household goods</th><td class="align-right"></td><td class="align-right">-0.1</td><td class="align-right">-0.2</td><td class="align-right">0.4</td><td class="align-right">0.3</td></tr>
|
||||
<tr><th class="table__nowrap align-left">Health </th><td class="align-right"></td><td class="align-right">2.4</td><td class="align-right">2.5</td><td class="align-right">0.3</td><td class="align-right">0.4</td></tr>
|
||||
<tr><th class="table__nowrap align-left">Transport </th><td class="align-right"></td><td class="align-right">6.8</td><td class="align-right">5.7</td><td class="align-right">0.7</td><td class="align-right">-0.3</td></tr>
|
||||
<tr><th class="table__nowrap align-left">Communication </th><td class="align-right"></td><td class="align-right">5.1</td><td class="align-right">5.2</td><td class="align-right">0.0</td><td class="align-right">0.1</td></tr>
|
||||
<tr><th class="table__nowrap align-left">Recreation and culture </th><td class="align-right"></td><td class="align-right">1.5</td><td class="align-right">1.7</td><td class="align-right">0.3</td><td class="align-right">0.5</td></tr>
|
||||
<tr><th class="table__nowrap align-left">Education </th><td class="align-right"></td><td class="align-right">5.1</td><td class="align-right">5.1</td><td class="align-right">0.0</td><td class="align-right">0.0</td></tr>
|
||||
<tr><th class="table__nowrap align-left">Restaurants and hotels </th><td class="align-right"></td><td class="align-right">4.2</td><td class="align-right">4.4</td><td class="align-right">0.8</td><td class="align-right">1.0</td></tr>
|
||||
<tr><th class="table__nowrap align-left">Miscellaneous goods and services </th><td class="align-right"></td><td class="align-right">2.4</td><td class="align-right">2.7</td><td class="align-right">0.0</td><td class="align-right">0.2</td></tr>
|
||||
<tr><td class="align-left"></td><td class="align-right"></td><td class="align-right"></td><td class="align-right"></td><td class="align-right"></td><td class="align-right"></td></tr>
|
||||
<tr><th class="table__nowrap align-left">All goods</th><td class="align-right"></td><td class="align-right">2.0</td><td class="align-right">1.7</td><td class="align-right">0.0</td><td class="align-right">-0.3</td></tr>
|
||||
<tr><th class="table__nowrap align-left">All services </th><td class="align-right"></td><td class="align-right">3.6</td><td class="align-right">3.6</td><td class="align-right">0.5</td><td class="align-right">0.4</td></tr>
|
||||
<tr><th class="table__nowrap align-left">CPIH exc food, energy, alcohol and<br>tobacco (core CPIH)</th><td class="align-right"></td><td class="align-right">2.8</td><td class="align-right">2.8</td><td class="align-right">0.3</td><td class="align-right">0.3</td></tr>
|
||||
</table><p>
|
||||
|
||||
|
||||
|
||||
|
||||
</p><p>Figure 2 shows the contributions from the 12 divisions to the change in the annual Consumer Prices Index including owner occupiers' housing costs (CPIH) inflation rate between May and June 2026. These sum to the change in the annual rate, from 3.0% to 2.8%, between these months.</p><p>The decrease in the 12-month rate between May and June 2026 reflected downward contributions from five divisions, partially offset by upward contributions from three divisions. The largest downward contribution came from transport, particularly motor fuels. There were no large, offsetting upward contributions.</p><p>Prices in the transport division rose overall by 5.7% in the 12 months to June 2026, down from 6.8% the previous month (Figure 3). On a monthly basis, prices fell by 0.3% in June 2026, compared with a rise of 0.7% a year ago.</p><p>
|
||||
|
||||
|
||||
|
||||
|
||||
</p><p>The largest downward effect behind the slowing in the transport annual rate came from motor fuels, particularly diesel.</p><p>The average price of diesel fell by 10.7 pence per litre between May and June 2026, compared with a fall of 0.6 pence per litre between May and June 2025. The average price stood at 176.4 pence per litre in June 2026.</p><p>Petrol prices fell by 2.1 pence per litre in June 2026, compared with a fall of 0.5 pence per litre in June 2025. The average price stood at 155.3 pence per litre in June 2026. This is the first time petrol prices have eased since the start of the conflict in the Middle East, on 28 February 2026.</p><p>These movements resulted in overall motor fuel prices rising by 21.3% in the 12 months to June 2026, compared with a rise of 24.6% in the 12 months to May, which was the highest recorded rate since September 2022.</p><p>Within transport, there was a smaller downward effect from vehicle maintenance and repair. Prices fell by 0.2% in June 2026, compared with a rise of 2.0% in June 2025. The movements were caused by price changes for roadside recovery services.</p><p>Food and non-alcoholic beverage prices rose by 1.7% in the 12 months to June 2026, down from 2.2% the previous month (Figure 4). The annual rate in June was the lowest since August 2024, when it was 1.3%. On a monthly basis, food and non-alcoholic beverage prices fell by 0.2% in June 2026, compared with a rise of 0.3% a year ago.</p><p>
|
||||
|
||||
|
||||
|
||||
|
||||
</p><p>There were small downward effects behind the change in the annual rate from 5 of the 11 detailed classes. The largest of these effects came from sugar, jam, syrups, chocolate and confectionery, for which prices of chocolate fell by more in June 2026 than June 2025. This class made a downward contribution of 0.02 percentage points to the change in the CPIH inflation rate.</p><p>Other slightly smaller downward effects came from oils and fats (particularly margarine and other vegetable oils), meat (particularly beef), dairy, and vegetables. Prices of oils and fats, and dairy, fell in June 2026, compared with a price rise and little change a year ago, respectively. Meat and vegetable prices rose in June 2026 but by less than in June 2025.</p><p>The other six detailed classes within food and non-alcoholic beverages had little effect on the change in the headline rate. These were bread and cereals, fish, fruit, other food products, hot beverages, and soft drinks.</p><p>Clothing and footwear prices fell by 0.5% in the 12 months to June 2026, compared with a rise of 0.2% the previous month.</p><p>On a monthly basis, prices fell by 1.2% in June 2026, compared with a smaller fall of 0.4% in June 2025. Prices tend to fall in June as the summer sales season begins, and the movements reflect changes in the proportion of discounted prices in the datasets. This proportion rose between May and June this year by more than the rise seen over the same period a year ago.</p><p>
|
||||
|
||||
|
||||
|
||||
|
||||
</p><p>Figure 5 shows the 12-month inflation rates for the Consumer Prices Index including owner occupiers' housing costs (CPIH) series for all goods and all services, together with CPIH excluding energy, food, alcohol and tobacco (often referred to as core CPIH). The CPIH inflation rate is added for comparison.</p><p>The core CPIH annual inflation rate was 2.8% in June 2026, the same rate as in April and May. These are the joint lowest rates since September 2021.</p><p>The CPIH all-goods index rose by 1.7% in the 12 months to June 2026, down from 2.0% the previous month. There were large downward contributions to the change in the annual rate from energy, particularly motor fuels and domestic heating oil, and from food, alcoholic beverages and tobacco.</p><p>The CPIH all-services index rose by 3.6% in the 12 months to June 2026, unchanged from the 12 months to May. The upward and downward contributions to the change in the annual rate were small and offset one another. The largest downward contribution came from services for personal transport equipment, and the largest upward contribution came from package holidays and accommodation.</p><p>
|
||||
|
||||
|
||||
|
||||
|
||||
</p><p>Figure 6 shows the extent to which the distinct categories of goods and services have contributed to the overall annual CPIH inflation rate over the last two years. The contribution of each category to the annual rate depends on the price movement in that category and its weight, which is updated annually.</p><p>The largest positive contribution to the CPIH annual inflation rate came from housing and household services. The division has made the largest contribution for the last 24 months, starting from July 2024. However, its contribution has eased from a recent high in April 2025, and was unchanged between May and June 2026. The contributions in the latest two months were jointly the smallest since June 2024.</p><p>The contribution from food and non-alcoholic beverages has also broadly eased over recent months. It was 0.15 percentage points in June 2026, the smallest since August 2024.</p><p>Similarly, the contribution from alcohol and tobacco has eased over the last year. It was 0.06 percentage points in June 2026, the smallest since July 2021, when it was also 0.06 percentage points. The contribution was last smaller in March 2020.</p><p>In contrast, the contribution from restaurants and hotels has risen to 0.49 percentage points in June 2026, the largest contribution since October 2024.</p><p>
|
||||
|
||||
|
||||
|
||||
|
||||
</p><p>Figure 7 shows the contributions from owner occupiers' housing (OOH) costs and Council Tax to the annual CPIH inflation rate in the context of wider housing-related costs. The Consumer Prices Index (CPI) differs from the CPIH because it does not include these two components.</p><p>The annual contribution from OOH costs rose slightly, to 0.58 percentage points, in June 2026. This was the first rise between months since January 2025 and followed 16 consecutive decreases. Although the current contribution was larger than the previous month's, it was smaller than the recent high of 1.31 percentage points in January 2025.</p><p>The annual contribution from electricity, gas and other fuels was negative 0.17 percentage points in June 2026, unchanged from May. An easing in the contribution from domestic heating oil was offset by smaller upward contributions from classes such as electricity.</p><p>While the Consumer Prices Index including owner occupiers' housing costs (CPIH) is our most comprehensive measure of consumer price inflation, the Consumer Prices Index (CPI) is based on a harmonised methodology developed by Eurostat. This enables international comparisons to be drawn. It is also used to set the operational inflation target for UK monetary policy, and to uprate working-age benefits and tax credits. More information on the use cases for our consumer price inflation statistics can be found in our <a>Measuring changing prices and costs for consumers and households: December 2023 article</a>.</p><p>Figure 8 shows annual CPI inflation for the UK compared with the EU average and selected G7 countries. While the UK CPI is produced on a comparable basis with EU countries, the US Harmonised Index of Consumer Prices (HICP) differs in some respects. More information is available in Note 1 to Figure 8.</p><p>The UK's CPI annual inflation rate of 2.6% was lower than the EU rate (2.9%) but higher than that for France (2.0%) and Germany (2.4%) in June 2026.</p><p>
|
||||
|
||||
|
||||
|
||||
|
||||
</p><p>
|
||||
</p><table class="table">
|
||||
<caption class="table__caption">Table 3: CPI annual and monthly inflation rates by division<br><span class="table__subtitle">UK, June 2025, May 2026, and June 2026 </span></caption>
|
||||
<colgroup><col><col><col><col><col><col></colgroup>
|
||||
<tr class="table__header-row table__nowrap"><td class="align-left"></td><td></td><th class="align-center">CPI 12-month rate (%)</th><th class="align-center">CPI 1-month rate (%)</th></tr>
|
||||
<tr class="table__header-row table__nowrap"><td class="align-left"></td><td></td><th class="align-right">May 2026</th><th class="align-right">June 2026</th><th class="align-right">June 2025</th><th class="align-right">June 2026</th></tr>
|
||||
<tr><th class="table__nowrap align-left">CPI All items </th><td></td><td class="align-right">2.8</td><td class="align-right">2.6</td><td class="align-right">0.3</td><td class="align-right">0.1</td></tr>
|
||||
<tr><th class="table__nowrap align-left">Food and non-alcoholic beverages </th><td></td><td class="align-right">2.2</td><td class="align-right">1.7</td><td class="align-right">0.3</td><td class="align-right">-0.2</td></tr>
|
||||
<tr><th class="table__nowrap align-left">Alcohol and tobacco </th><td></td><td class="align-right">2.4</td><td class="align-right">2.1</td><td class="align-right">0.5</td><td class="align-right">0.1</td></tr>
|
||||
<tr><th class="table__nowrap align-left">Clothing and footwear </th><td></td><td class="align-right">0.2</td><td class="align-right">-0.5</td><td class="align-right">-0.4</td><td class="align-right">-1.2</td></tr>
|
||||
<tr><th class="table__nowrap align-left">Housing and household services</th><td></td><td class="align-right">1.2</td><td class="align-right">1.2</td><td class="align-right">0.1</td><td class="align-right">0.0</td></tr>
|
||||
<tr><th class="table__nowrap align-left">Furniture and household goods</th><td></td><td class="align-right">-0.1</td><td class="align-right">-0.2</td><td class="align-right">0.4</td><td class="align-right">0.3</td></tr>
|
||||
<tr><th class="table__nowrap align-left">Health </th><td></td><td class="align-right">2.4</td><td class="align-right">2.5</td><td class="align-right">0.3</td><td class="align-right">0.4</td></tr>
|
||||
<tr><th class="table__nowrap align-left">Transport </th><td></td><td class="align-right">6.8</td><td class="align-right">5.7</td><td class="align-right">0.7</td><td class="align-right">-0.3</td></tr>
|
||||
<tr><th class="table__nowrap align-left">Communication </th><td></td><td class="align-right">5.1</td><td class="align-right">5.2</td><td class="align-right">0.0</td><td class="align-right">0.1</td></tr>
|
||||
<tr><th class="table__nowrap align-left">Recreation and culture </th><td></td><td class="align-right">1.5</td><td class="align-right">1.7</td><td class="align-right">0.3</td><td class="align-right">0.5</td></tr>
|
||||
<tr><th class="table__nowrap align-left">Education </th><td></td><td class="align-right">5.1</td><td class="align-right">5.1</td><td class="align-right">0.0</td><td class="align-right">0.0</td></tr>
|
||||
<tr><th class="table__nowrap align-left">Restaurants and hotels </th><td></td><td class="align-right">4.2</td><td class="align-right">4.4</td><td class="align-right">0.8</td><td class="align-right">1.0</td></tr>
|
||||
<tr><th class="table__nowrap align-left">Miscellaneous goods and services </th><td></td><td class="align-right">2.4</td><td class="align-right">2.7</td><td class="align-right">0.0</td><td class="align-right">0.2</td></tr>
|
||||
<tr><td class="align-left"></td><td></td><td class="align-right"></td><td class="align-right"></td><td class="align-right"></td><td class="align-right"></td></tr>
|
||||
<tr><th class="table__nowrap align-left">All goods</th><td></td><td class="align-right">2.0</td><td class="align-right">1.7</td><td class="align-right">0.0</td><td class="align-right">-0.3</td></tr>
|
||||
<tr><th class="table__nowrap align-left">All services </th><td></td><td class="align-right">3.7</td><td class="align-right">3.6</td><td class="align-right">0.6</td><td class="align-right">0.5</td></tr>
|
||||
<tr><th class="table__nowrap align-left">CPI exc food, energy, alcohol and<br>tobacco (core CPI)</th><td></td><td class="align-right">2.6</td><td class="align-right">2.6</td><td class="align-right">0.4</td><td class="align-right">0.3</td></tr>
|
||||
</table><p>
|
||||
|
||||
|
||||
|
||||
|
||||
</p><p>Figure 9 shows the 12-month inflation rates for the CPI all-goods and all-services series, together with CPI excluding energy, food, alcohol and tobacco (often referred to as core CPI). The headline CPI inflation rate is added for comparison.</p><p>The core CPI annual inflation rate was 2.6% in June 2026, unchanged from May.</p><p>The CPI all-goods index rose by 1.7% in the 12 months to June 2026, down from 2.0% the previous month.</p><p>The CPI all-services index rose by 3.6% in the 12 months to June 2026, down slightly from 3.7% the previous month.</p><p>As with the all-items annual inflation rates, the drivers of CPIH and CPI goods and services inflation are the same (except for owner occupiers' housing (OOH) costs and Council Tax, which are excluded from CPI). The drivers are discussed in more detail in <a>Section 4: Latest movements in CPIH inflation</a>.</p><p>
|
||||
|
||||
|
||||
|
||||
|
||||
</p><p>Figure 10 shows how each of the main groups of goods and services contributed to the change in the CPI annual inflation rate between May and June 2026.</p><p>The rate's slowing in June 2026 reflected downward contributions from six divisions, partially offset by upward contributions from three divisions. The largest downward contribution came from transport, particularly motor fuels. There were no large, offsetting upward contributions.</p><p>Though the sizes of the contributions differ from CPIH, the main drivers to the change are the same where they are common to both measures.</p><p>
|
||||
|
||||
|
||||
|
||||
|
||||
</p><p>Figure 11 shows the extent to which the distinct categories of goods and services have contributed to the overall annual CPI inflation rate over the last two years.</p><p>The CPIH includes extra housing components not included in the CPI. This can sometimes result in the largest contributions to the annual CPI and CPIH inflation rates coming from different divisions. In June 2026, the largest contributing division to CPI was transport (0.80 percentage point contribution to the CPI rate), while the largest contributing division to CPIH was housing and household services (0.84 percentage point contribution to the CPIH rate). OOH costs made a large upward contribution to housing and household services in CPIH, but these are excluded from CPI.</p><p></p><p><a>Consumer price inflation tables</a><br> Dataset | Released 22 July 2026<br> Measures of monthly UK inflation data including the Consumer Prices Index including owner occupiers' housing costs (CPIH), Consumer Prices Index (CPI) and Retail Prices Index (RPI). These tables complement the consumer price inflation time series dataset.</p><p><a>Consumer price inflation time series</a><br> Dataset MM23 | Released 22 July 2026<br> Comprehensive database of time series covering measures of inflation data for the UK including CPIH, CPI and RPI.</p><p><a>Consumer price inflation detailed briefing note</a><br> Dataset | Released 22 July 2026<br> The consumer price inflation detailed briefing note contains details of the items contributing to the changes in the CPIH, details of any notable movements, a summary of the reconciliation of CPIH and RPI, and the outlook, which looks ahead to next month's release.</p><p><a>Consumer price inflation consumption segment indices and price quotes</a><br> Dataset | Released 22 July 2026<br> Price quote data (for locally collected data only) and consumption segment indices (that underpin consumer price inflation statistics), giving users access to the detailed data that are used in the construction of the UK's inflation figures. From publication in March 2026, this dataset no longer includes price quote data for food and non-alcoholic beverages, and alcohol and tobacco. More information is included in <a>Section 8: Data sources and quality</a>.</p><p><a>Contributions to the 12-month rate of CPI(H) by import intensity</a><br> Dataset | Released 22 July 2026<br> A time series of the contributions to the CPIH and CPI annual rates broken down by the import intensity of household purchases.</p><p><a>Consumer price inflation, historical data, UK, 1950 to 1988</a><br> Dataset | Released 18 May 2022<br> Data tables of historical estimates modelled for the CPIH and CPI over the period 1950 to 1988. Data in these tables are not accredited official statistics and are provided for indicative purposes only. </p><p>The most common approach to measuring inflation is the 12-month or annual inflation rate, which compares prices for the latest month with the same month a year ago. In any given month, the annual rate is determined by the balance between upward and downward price movements across the range of goods and services included in the index.</p><p>Consumer price inflation is the rate at which the prices of goods and services bought by households rise or fall. It is estimated by using price indices. For an overview of the range of indices available and their uses, please see our <a>Consumer price indices, a brief guide: 2026 article</a> and our <a>Measuring changing prices and costs for consumers and households: December 2023 article</a>.</p><p>The Consumer Prices Index including owner occupiers' housing costs (CPIH) is the most comprehensive measure of inflation. It extends the Consumer Prices Index (CPI) to include a measure of the costs associated with owning, maintaining and living in one's own home, known as owner occupiers' housing (OOH) costs, along with Council Tax. Both are substantial expenses for many households and are not included in the CPI.</p><p>The CPI is a measure of consumer price inflation produced to international standards, and it is based on European regulations for the <a>Harmonised Index of Consumer Prices</a>. The CPI is the inflation measure used in the government's target for inflation.</p><p>The CPI is produced at the same level of detail as the CPIH in our accompanying <a>Consumer price inflation dataset</a> and in our accompanying <a>Consumer price inflation time series</a>.</p><p>OOH costs are the costs of housing services associated with owning, maintaining and living in one's own home.</p><p>The Retail Prices Index (RPI) and its subcomponents do not meet the required standard for designation as <a>accredited official statistics</a>. In recognition that the index continues to be widely used in contracts, we continue to publish the RPI, its subcomponents, and RPI excluding mortgage interest payments (RPIX). To view the all-items RPI, please see the <a>data time series section of the Inflation and pricLine truncated
|
||||
+166
@@ -0,0 +1,166 @@
|
||||
<html><body><h1 class="padding-bottom--0 padding-top--0 margin-top--2 font-weight-700 margin-bottom--2 ">Consumer price inflation, UK: February 2026</h1><p class="page-bulletins--Summary margin-right-md--2 margin-bottom--3 padding-bottom--0 padding-top--0">
|
||||
|
||||
|
||||
Price indices, percentage changes, and weights for the different measures of consumer price inflation.
|
||||
|
||||
</p><p class="alert-release-banner__title">This is not the latest release.
|
||||
<a class="alert-release-banner__link">View latest release</a>
|
||||
</p><p class="col col--md-12 col--lg-15 margin-bottom-sm--1 margin-bottom-md--3 margin-top-sm--1 padding-bottom--0 padding-top--0">
|
||||
<span class="font-weight-700">Contact: </span><br><a class="text--white"><span class="visuallyhidden">Email </span>Consumer Price Inflation team</a>
|
||||
</p><p class="col col--md-one-third col--lg-one-third margin-bottom-sm--1 margin-bottom-md--3 margin-top--0 padding-bottom--0 padding-top--0">
|
||||
<span class="font-weight-700">Release date: </span><br>25 March 2026<br>
|
||||
|
||||
</p><p class="col col--md-one-third col--lg-one-third margin-bottom-sm--3 margin-bottom-md--3 margin-top--0 padding-bottom--0 padding-top--0">
|
||||
<span class="font-weight-700">Next release: </span><br>22 April 2026
|
||||
</p><h2 class="table-of-contents__title">Table of contents</h2><p class="text-right--md padding-top-md--0 padding-bottom-md--0 height--5 margin-bottom-md--0 print--hide nojs--hide js--show">
|
||||
<a class="link-complex nojs--hide js--show js-print-page">
|
||||
Print this <span class="lowercase">
|
||||
Statistical bulletin
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
</a>
|
||||
<span class="icon icon-print--dark"></span>
|
||||
</p><p class="text-right--md padding-top-md--0 padding-bottom-md--0 height--5 margin-top-md--1 print--hide">
|
||||
<a class="link-complex js-pdf-dl-link">
|
||||
Download as PDF
|
||||
</a>
|
||||
<span class="icon icon-download--dark"></span>
|
||||
</p><p>The Consumer Prices Index including owner occupiers' housing costs (CPIH) rose by 3.2% in the 12 months to February 2026, unchanged from the 12 months to January.</p><p>On a monthly basis, CPIH rose by 0.4% in February 2026, the same rate as in February 2025.</p><p>The Consumer Prices Index (CPI) rose by 3.0% in the 12 months to February 2026, unchanged from the 12 months to January.</p><p>On a monthly basis, CPI rose by 0.4% in February 2026, the same rate as in February 2025.</p><p>Clothing made the largest upward contribution to the monthly change in both CPIH and CPI annual rates; motor fuels made the largest, offsetting, downward contribution.</p><p>Core CPIH (CPIH excluding energy, food, alcohol and tobacco) rose by 3.4% in the 12 months to February 2026, up from 3.3% in the 12 months to January; the CPIH goods annual rate was unchanged at 1.6%, while the CPIH services annual rate eased slightly from 4.3% to 4.2%.</p><p>Core CPI (CPI excluding energy, food, alcohol and tobacco) rose by 3.2% in the 12 months to February 2026, up from 3.1% in the 12 months to January; the CPI goods annual rate was unchanged at 1.6%, while the CPI services annual rate eased slightly from 4.4% to 4.3%.</p><p>
|
||||
</p><table class="table">
|
||||
<caption class="table__caption">Table 1: CPIH, OOH component and CPI index values, and annual and monthly rates<br><span class="table__subtitle">UK, February 2025 to February 2026</span></caption>
|
||||
<colgroup><col><col><col><col><col><col><col><col><col><col></colgroup>
|
||||
<tr class="table__header-row table__nowrap"><td class="align-left"></td><td class="align-left"></td><th class="align-right">CPIH<br>Index<br>(UK,<br>2015 =<br>100)</th><th class="align-right">CPIH<br>12-<br>month<br>rate<br>(%)</th><th class="align-right">CPIH 1-<br>month<br>rate<br>(%)</th><th class="align-right">CPI Index<br>(UK,<br>2015=100)</th><th class="align-right">CPI 12-<br>month<br>rate<br>(%)</th><th class="align-right">CPI 1-<br>month<br>rate<br>(%)</th><th class="align-right">OOH Index<br>(UK,<br>2015=100)</th><th class="align-right">OOH<br>12-<br>month<br>rate<br>(%)</th></tr>
|
||||
<tr><th class="table__nowrap align-left">2025</th><th class="table__nowrap align-left">Feb</th><td class="align-right">135.6</td><td class="align-right">3.7</td><td class="align-right">0.4</td><td class="align-right">136.0</td><td class="align-right">2.8</td><td class="align-right">0.4</td><td class="align-right">132.4</td><td class="align-right">7.5</td></tr>
|
||||
<tr><td class="align-left"></td><th class="table__nowrap align-left">Mar</th><td class="align-right">136.1</td><td class="align-right">3.4</td><td class="align-right">0.3</td><td class="align-right">136.5</td><td class="align-right">2.6</td><td class="align-right">0.3</td><td class="align-right">132.9</td><td class="align-right">7.2</td></tr>
|
||||
<tr><td class="align-left"></td><th class="table__nowrap align-left">Apr</th><td class="align-right">137.7</td><td class="align-right">4.1</td><td class="align-right">1.2</td><td class="align-right">138.2</td><td class="align-right">3.5</td><td class="align-right">1.2</td><td class="align-right">133.2</td><td class="align-right">6.9</td></tr>
|
||||
<tr><td class="align-left"></td><th class="table__nowrap align-left">May</th><td class="align-right">138.0</td><td class="align-right">4.0</td><td class="align-right">0.2</td><td class="align-right">138.4</td><td class="align-right">3.4</td><td class="align-right">0.2</td><td class="align-right">133.7</td><td class="align-right">6.7</td></tr>
|
||||
<tr><td class="align-left"></td><th class="table__nowrap align-left">Jun</th><td class="align-right">138.4</td><td class="align-right">4.1</td><td class="align-right">0.3</td><td class="align-right">138.9</td><td class="align-right">3.6</td><td class="align-right">0.3</td><td class="align-right">134.2</td><td class="align-right">6.4</td></tr>
|
||||
<tr><td class="align-left"></td><th class="table__nowrap align-left">Jul</th><td class="align-right">138.5</td><td class="align-right">4.2</td><td class="align-right">0.0</td><td class="align-right">139.0</td><td class="align-right">3.8</td><td class="align-right">0.1</td><td class="align-right">134.0</td><td class="align-right">5.5</td></tr>
|
||||
<tr><td class="align-left"></td><th class="table__nowrap align-left">Aug</th><td class="align-right">138.9</td><td class="align-right">4.1</td><td class="align-right">0.3</td><td class="align-right">139.3</td><td class="align-right">3.8</td><td class="align-right">0.3</td><td class="align-right">134.5</td><td class="align-right">5.3</td></tr>
|
||||
<tr><td class="align-left"></td><th class="table__nowrap align-left">Sep </th><td class="align-right">138.9</td><td class="align-right">4.1</td><td class="align-right">0.1</td><td class="align-right">139.3</td><td class="align-right">3.8</td><td class="align-right">0.0</td><td class="align-right">135.1</td><td class="align-right">5.2</td></tr>
|
||||
<tr><td class="align-left"></td><th class="table__nowrap align-left">Oct</th><td class="align-right">139.5</td><td class="align-right">3.8</td><td class="align-right">0.4</td><td class="align-right">139.8</td><td class="align-right">3.6</td><td class="align-right">0.4</td><td class="align-right">135.7</td><td class="align-right">4.8</td></tr>
|
||||
<tr><td class="align-left"></td><th class="table__nowrap align-left">Nov</th><td class="align-right">139.4</td><td class="align-right">3.5</td><td class="align-right">-0.1</td><td class="align-right">139.5</td><td class="align-right">3.2</td><td class="align-right">-0.2</td><td class="align-right">136.5</td><td class="align-right">4.5</td></tr>
|
||||
<tr><td class="align-left"></td><th class="table__nowrap align-left">Dec </th><td class="align-right">139.9</td><td class="align-right">3.6</td><td class="align-right">0.4</td><td class="align-right">140.1</td><td class="align-right">3.4</td><td class="align-right">0.4</td><td class="align-right">136.8</td><td class="align-right">4.2</td></tr>
|
||||
<tr><th class="table__nowrap align-left">2026</th><th class="table__nowrap align-left">Jan</th><td class="align-right">139.4</td><td class="align-right">3.2</td><td class="align-right">-0.3</td><td class="align-right">139.5</td><td class="align-right">3.0</td><td class="align-right">-0.5</td><td class="align-right">137.0</td><td class="align-right">3.9</td></tr>
|
||||
<tr><td class="align-left"></td><th class="table__nowrap align-left">Feb</th><td class="align-right">140.0</td><td class="align-right">3.2</td><td class="align-right">0.4</td><td class="align-right">140.1</td><td class="align-right">3.0</td><td class="align-right">0.4</td><td class="align-right">137.4</td><td class="align-right">3.8</td></tr>
|
||||
</table><p>
|
||||
|
||||
|
||||
|
||||
|
||||
</p><p>The Consumer Prices Index including owner occupiers' housing costs (CPIH) rose by 3.2% in the 12 months to February 2026, unchanged from the 12 months to January (Figure 1).</p><p>On a monthly basis, CPIH rose by 0.4% in February 2026, the same rate as in February 2025.</p><p>The Consumer Prices Index (CPI) rose by 3.0% in the 12 months to February 2026, unchanged from the 12 months to January.</p><p>On a monthly basis, CPI rose by 0.4% in February 2026, the same rate as in February 2025.</p><p>The main drivers of the annual inflation rate for CPIH and CPI are the same where they are common to both measures. However, the owner occupiers’ housing (OOH) costs component accounts for approximately 18% of the CPIH and is the main driver for differences between the CPIH and CPI inflation rates. This makes CPIH our most comprehensive measure of inflation. We cover this in more detail in <a>Section 4: Latest movements in CPIH inflation</a> and provide a commentary on the CPI in <a>Section 5: Latest movements in CPI inflation</a>. We also cover both CPIH and CPI in <a>Section 3: Notable movements in prices</a>, though the figures reflect CPIH.</p><p>
|
||||
</p><table class="table">
|
||||
<caption class="table__caption">Table 2: CPIH annual and monthly inflation rates by division<br><span class="table__subtitle">UK, February 2025, January 2026, and February 2026</span></caption>
|
||||
<colgroup><col><col><col><col><col></colgroup>
|
||||
<tr class="table__header-row table__nowrap"><td class="align-left"></td><th class="align-center">CPIH 12-month rate (%)</th><th class="align-center">CPIH 1-month rate (%)</th></tr>
|
||||
<tr class="table__header-row table__nowrap"><td class="align-left"></td><th class="align-right">January 2026</th><th class="align-right">February 2026</th><th class="align-right">February 2025</th><th class="align-right">February 2026</th></tr>
|
||||
<tr><th class="table__nowrap align-left">CPIH All items </th><td class="align-right">3.2</td><td class="align-right">3.2</td><td class="align-right">0.4</td><td class="align-right">0.4</td></tr>
|
||||
<tr><th class="table__nowrap align-left">Food and non-alcoholic<br>beverages</th><td class="align-right">3.6</td><td class="align-right">3.3</td><td class="align-right">0.2</td><td class="align-right">0.0</td></tr>
|
||||
<tr><th class="table__nowrap align-left">Alcohol and tobacco </th><td class="align-right">4.6</td><td class="align-right">3.6</td><td class="align-right">1.0</td><td class="align-right">-0.1</td></tr>
|
||||
<tr><th class="table__nowrap align-left">Clothing and footwear </th><td class="align-right">0.0</td><td class="align-right">0.9</td><td class="align-right">-0.3</td><td class="align-right">0.6</td></tr>
|
||||
<tr><th class="table__nowrap align-left">Housing and household<br>services</th><td class="align-right">4.2</td><td class="align-right">4.2</td><td class="align-right">0.3</td><td class="align-right">0.2</td></tr>
|
||||
<tr><th class="table__nowrap align-left">of which owner occupiers'<br>housing costs</th><td class="align-right">3.9</td><td class="align-right">3.8</td><td class="align-right">0.4</td><td class="align-right">0.3</td></tr>
|
||||
<tr><th class="table__nowrap align-left">Furniture and household<br>goods</th><td class="align-right">-0.5</td><td class="align-right">0.1</td><td class="align-right">1.1</td><td class="align-right">1.7</td></tr>
|
||||
<tr><th class="table__nowrap align-left">Health </th><td class="align-right">3.1</td><td class="align-right">3.1</td><td class="align-right">0.3</td><td class="align-right">0.3</td></tr>
|
||||
<tr><th class="table__nowrap align-left">Transport </th><td class="align-right">2.7</td><td class="align-right">2.4</td><td class="align-right">0.8</td><td class="align-right">0.5</td></tr>
|
||||
<tr><th class="table__nowrap align-left">Communication </th><td class="align-right">4.6</td><td class="align-right">4.3</td><td class="align-right">0.2</td><td class="align-right">-0.1</td></tr>
|
||||
<tr><th class="table__nowrap align-left">Recreation and culture </th><td class="align-right">2.6</td><td class="align-right">2.5</td><td class="align-right">0.1</td><td class="align-right">0.0</td></tr>
|
||||
<tr><th class="table__nowrap align-left">Education </th><td class="align-right">5.1</td><td class="align-right">5.1</td><td class="align-right">0.0</td><td class="align-right">0.0</td></tr>
|
||||
<tr><th class="table__nowrap align-left">Restaurants and hotels </th><td class="align-right">4.1</td><td class="align-right">4.0</td><td class="align-right">1.1</td><td class="align-right">1.0</td></tr>
|
||||
<tr><th class="table__nowrap align-left">Miscellaneous goods and<br>services</th><td class="align-right">2.2</td><td class="align-right">2.6</td><td class="align-right">0.3</td><td class="align-right">0.6</td></tr>
|
||||
<tr><td class="align-left"></td><td class="align-right"></td><td class="align-right"></td><td class="align-right"></td><td class="align-right"></td></tr>
|
||||
<tr><th class="table__nowrap align-left">All goods</th><td class="align-right">1.6</td><td class="align-right">1.6</td><td class="align-right">0.4</td><td class="align-right">0.3</td></tr>
|
||||
<tr><th class="table__nowrap align-left">All services </th><td class="align-right">4.3</td><td class="align-right">4.2</td><td class="align-right">0.5</td><td class="align-right">0.4</td></tr>
|
||||
<tr><th class="table__nowrap align-left">CPIH exc food, energy,<br>alcohol and tobacco (core<br>CPIH)</th><td class="align-right">3.3</td><td class="align-right">3.4</td><td class="align-right">0.4</td><td class="align-right">0.5</td></tr>
|
||||
</table><p>
|
||||
|
||||
|
||||
|
||||
|
||||
</p><p>Figure 2 shows the contributions from the 12 divisions to the change in the annual Consumer Prices Index including owner occupiers' housing costs (CPIH) inflation rate between January and February 2026. These sum to the change in the annual rate between the latest two months, that is, no change, with the rate remaining at 3.2%.</p><p>The contributions to change offset each other, with upward contributions from three divisions and downward contributions from seven divisions. The largest upward contribution came from clothing and footwear. The largest, offsetting, downward contributions came from alcohol and tobacco, and transport.</p><p>Clothing and footwear prices rose by 0.9% in the 12 months to February 2026, compared with no change in the 12 months to January (Figure 3). The February figure was the highest recorded since March 2025, when the rate was 1.1%.</p><p>
|
||||
|
||||
|
||||
|
||||
|
||||
</p><p>On a monthly basis, prices rose by 0.6% in February 2026, compared with a fall of 0.3% a year ago. Prices normally rise in February as the spring product ranges start to enter the shops following the new year sales period. The fall into February 2025 was the first fall between January and February since 2021 when sales patterns were affected by the coronavirus (COVID-19) pandemic. The price movements reflect changes in the proportion of discounted prices in the datasets. The proportion fell between January and February this year, as usual, contrasting with a rise in the same period last year.</p><p>The rise in the 12-month rate was the result of small upward effects primarily from children's and women's clothing.</p><p>Prices in the alcohol and tobacco division rose by 3.6% in the 12 months to February 2026, down from 4.6% in the 12 months to January. The February 2026 figure was the lowest recorded since February 2022, when the rate was also 3.6%. It was last lower in January 2022. On a monthly basis, prices fell by 0.1% in February 2026, compared with a rise of 1.0% a year ago.</p><p>The easing in the 12-month rate reflected a downward effect from alcohol, where prices fell by 1.5% in February this year, compared with a rise of 0.7% in February 2025. Price falls were seen across spirits, wines, and beers this year as a result of price discounting, compared with price rises a year ago.</p><p>Prices in the transport division rose overall by 2.4% in the 12 months to February 2026, down from 2.7% in the 12 months to January. On a monthly basis, prices rose by 0.5% in February 2026, compared with a rise of 0.8% a year ago.</p><p>The largest downward effect came from motor fuels, where the average price of petrol fell by 1.6 pence per litre between January and February 2026, compared with a rise of 2.0 pence per litre between January and February 2025. The average price stood at 131.6 pence per litre in February 2026, the lowest price since June 2021 when it was 129.7 pence per litre.</p><p>Similarly, diesel prices fell by 1.4 pence per litre in February 2026, compared with a rise of 2.3 pence per litre in February 2025. The average price stood at 141.1 pence per litre in February 2026, down from 146.4 pence per litre a year earlier.</p><p>These movements resulted in overall motor fuel prices falling by 4.6% in the 12 months to February 2026, compared with a fall of 2.2% in the 12 months to January. All prices were collected before the outbreak of war in the Middle East on 28 February 2026.</p><p>Within transport, this downward effect was partially offset by a small upward contribution from air fares. These rose by 9.2% between January and February 2026, compared with a smaller rise of 5.9% a year ago. The rise into February 2026 was the largest increase between January and February since 2013, when it was also 9.2%. The upward effect came from European routes.</p><p>Food and non-alcoholic beverages prices rose by 3.3% in the 12 months to February 2026, down from 3.6% in the 12 months to January (Figure 4). The rate in February was the lowest since March 2025, when it was 3.0%. On a monthly basis, food and non-alcoholic beverages prices were unchanged in February 2026, compared with a rise of 0.2% a year ago.</p><p>
|
||||
|
||||
|
||||
|
||||
|
||||
</p><p>The main downward effect behind the change in the annual rate came from confectionery, particularly chocolate confectionery, where prices fell in the month to February this year but rose a year ago. This was partially offset by small upward contributions from dairy products and vegetables.</p><p>
|
||||
|
||||
|
||||
|
||||
|
||||
</p><p>Figure 5 shows the 12-month inflation rates for the Consumer Prices Index including owner occupiers’ housing costs (CPIH) series for all goods and all services, together with CPIH excluding energy, food, alcohol and tobacco (often referred to as core CPIH). The CPIH inflation rate is added for comparison.</p><p>The CPIH all-services index rose by 4.2% in the 12 months to February 2026, down slightly from 4.3% in the 12 months to January. The rate is the lowest since April 2022, when it was 4.1%. The largest downward contribution to the change in the annual rate came from other recreational and personal services, particularly cultural services, and restaurants and cafes. The largest, partially offsetting, upward effect came from transport services, particularly air fares.</p><p>The CPIH all-goods index rose by 1.6% in the 12 months to February 2026, unchanged from the 12 months to January. The largest upward contribution to change in the annual rate came from non-energy industrial goods, particularly clothing and footwear goods. The largest downward effects came from energy, particularly motor fuels, and food, alcoholic beverages and tobacco.</p><p>The core CPIH annual inflation rate was 3.4% in February 2026, up from 3.3% in January.</p><p>
|
||||
|
||||
|
||||
|
||||
|
||||
</p><p>Figure 6 shows the extent to which the distinct categories of goods and services have contributed to the overall annual CPIH inflation rate over the last two years. The contribution of each category to the annual rate depends on the price movement in that category and its weight, which is updated annually.</p><p>The largest positive contribution to the CPIH annual inflation rate came from housing and household services. The division has made the largest contribution for the last 20 months, starting from July 2024. However, the contribution of 1.27 percentage points in February 2026 was down from 1.28 percentage points in January, and the smallest since September 2024.</p><p>The contribution from furniture and household goods changed from a small negative to a small positive contribution between January and February 2026. This meant all divisions made positive contributions to the rate in February 2026.</p><p>
|
||||
|
||||
|
||||
|
||||
|
||||
</p><p>Figure 7 shows the contributions from owner occupiers’ housing (OOH) costs and Council Tax to the annual CPIH inflation rate in the context of wider housing-related costs. The Consumer Prices Index (CPI) differs from the CPIH because it does not include these two components.</p><p>The annual contribution from OOH costs continued to slow and was 0.65 percentage points in February 2026. This contribution was the smallest since December 2022, when it was also 0.65 percentage points. It was last smaller in November 2022, when it was 0.64 percentage points. The contribution has decreased for 13 consecutive months from a recent high of 1.31 percentage points in January 2025.</p><p>The annual contribution from rents rose slightly from 0.20 percentage points in January 2026 to 0.21 percentage points in February. This is the first rise since the increase between December 2024 and January 2025.</p><p>While the Consumer Prices Index including owner occupiers' housing costs (CPIH) is our most comprehensive measure of consumer price inflation, the Consumer Prices Index (CPI) is based on a harmonised methodology developed by Eurostat. This enables international comparisons to be drawn. More information on the use cases for our consumer price inflation statistics can be found in our <a>Measuring changing prices and costs for consumers and households: December 2023 article</a>.</p><p>Figure 8 shows annual CPI inflation for the UK compared with the EU average and selected G7 countries. While the UK CPI is produced on a comparable basis with EU countries, the United States Harmonised Index of Consumer Prices (HICP) differs in some respects. More information is available in Note 1 to Figure 8.</p><p>The UK's CPI inflation rate of 3.0% was higher than that of the EU (2.1%), Germany (2.0%) and France (1.1%) in February 2026. The last time the UK rate was lower than the rate for the EU overall was December 2024.</p><p>
|
||||
|
||||
|
||||
|
||||
|
||||
</p><p>
|
||||
</p><table class="table">
|
||||
<caption class="table__caption">Table 3: CPI annual and monthly inflation rates by division<br><span class="table__subtitle">UK, February 2025, January 2026, and February 2026</span></caption>
|
||||
<colgroup><col><col><col><col><col></colgroup>
|
||||
<tr class="table__header-row table__nowrap"><td class="align-left"></td><th class="align-center">CPI 12-month rate (%)</th><th class="align-center">CPI 1-month rate (%)</th></tr>
|
||||
<tr class="table__header-row table__nowrap"><td class="align-left"></td><th class="align-right">January 2026</th><th class="align-right">February 2026</th><th class="align-right">February 2025</th><th class="align-right">February 2026</th></tr>
|
||||
<tr><th class="table__nowrap align-left">CPI All items </th><td class="align-right">3.0</td><td class="align-right">3.0</td><td class="align-right">0.4</td><td class="align-right">0.4</td></tr>
|
||||
<tr><th class="table__nowrap align-left">Food and non-alcoholic<br>beverages</th><td class="align-right">3.6</td><td class="align-right">3.3</td><td class="align-right">0.2</td><td class="align-right">0.0</td></tr>
|
||||
<tr><th class="table__nowrap align-left">Alcohol and tobacco </th><td class="align-right">4.6</td><td class="align-right">3.6</td><td class="align-right">1.0</td><td class="align-right">-0.1</td></tr>
|
||||
<tr><th class="table__nowrap align-left">Clothing and footwear </th><td class="align-right">0.0</td><td class="align-right">0.9</td><td class="align-right">-0.3</td><td class="align-right">0.6</td></tr>
|
||||
<tr><th class="table__nowrap align-left">Housing and household<br>services</th><td class="align-right">4.5</td><td class="align-right">4.6</td><td class="align-right">0.2</td><td class="align-right">0.2</td></tr>
|
||||
<tr><th class="table__nowrap align-left">Furniture and household<br>goods</th><td class="align-right">-0.5</td><td class="align-right">0.1</td><td class="align-right">1.1</td><td class="align-right">1.7</td></tr>
|
||||
<tr><th class="table__nowrap align-left">Health </th><td class="align-right">3.1</td><td class="align-right">3.1</td><td class="align-right">0.3</td><td class="align-right">0.3</td></tr>
|
||||
<tr><th class="table__nowrap align-left">Transport </th><td class="align-right">2.7</td><td class="align-right">2.4</td><td class="align-right">0.8</td><td class="align-right">0.5</td></tr>
|
||||
<tr><th class="table__nowrap align-left">Communication </th><td class="align-right">4.6</td><td class="align-right">4.3</td><td class="align-right">0.2</td><td class="align-right">-0.1</td></tr>
|
||||
<tr><th class="table__nowrap align-left">Recreation and culture </th><td class="align-right">2.6</td><td class="align-right">2.5</td><td class="align-right">0.1</td><td class="align-right">0.0</td></tr>
|
||||
<tr><th class="table__nowrap align-left">Education </th><td class="align-right">5.1</td><td class="align-right">5.1</td><td class="align-right">0.0</td><td class="align-right">0.0</td></tr>
|
||||
<tr><th class="table__nowrap align-left">Restaurants and hotels </th><td class="align-right">4.1</td><td class="align-right">4.0</td><td class="align-right">1.1</td><td class="align-right">1.0</td></tr>
|
||||
<tr><th class="table__nowrap align-left">Miscellaneous goods and<br>services</th><td class="align-right">2.2</td><td class="align-right">2.6</td><td class="align-right">0.3</td><td class="align-right">0.6</td></tr>
|
||||
<tr><td class="align-left"></td><td class="align-right"></td><td class="align-right"></td><td class="align-right"></td><td class="align-right"></td></tr>
|
||||
<tr><th class="table__nowrap align-left">All goods</th><td class="align-right">1.6</td><td class="align-right">1.6</td><td class="align-right">0.4</td><td class="align-right">0.3</td></tr>
|
||||
<tr><th class="table__nowrap align-left">All services </th><td class="align-right">4.4</td><td class="align-right">4.3</td><td class="align-right">0.5</td><td class="align-right">0.5</td></tr>
|
||||
<tr><th class="table__nowrap align-left">CPI exc food, energy,<br>alcohol and tobacco (core<br>CPI)</th><td class="align-right">3.1</td><td class="align-right">3.2</td><td class="align-right">0.4</td><td class="align-right">0.6</td></tr>
|
||||
</table><p>
|
||||
|
||||
|
||||
|
||||
|
||||
</p><p>Figure 9 shows the 12-month inflation rates for the CPI all-goods and all-services series, together with CPI excluding energy, food, alcohol and tobacco (often referred to as core CPI). The headline CPI inflation rate is added for comparison.</p><p>Core CPI rose by 3.2% in the 12 months to February 2026, up from 3.1% in the 12 months to January.</p><p>The CPI all-goods index rose by 1.6% in the 12 months to February 2026, unchanged from the 12 months to January.</p><p>The CPI all-services index rose by 4.3% in the 12 months to February 2026, down from 4.4% in the 12 months to January. The rate is the lowest since March 2022, when it was 4.0%.</p><p>As with the all-items annual inflation rates, the drivers of CPIH and CPI goods and services inflation are the same (except for owner occupiers' housing (OOH) costs and Council Tax, which are excluded from CPI). The drivers are discussed in more detail in <a>Section 4: Latest movements in CPIH inflation</a>.</p><p>
|
||||
|
||||
|
||||
|
||||
|
||||
</p><p>Figure 10 shows how each of the main groups of goods and services contributed to the change in the CPI annual inflation rate between January and February 2026.</p><p>The contributions to change between the two months offset each other, with upward contributions from three divisions and downward contributions from six divisions. The largest upward contribution came from clothing and footwear. The largest, offsetting, downward contributions came from alcohol and tobacco, and transport.</p><p>Though the sizes of the contributions differ from CPIH, the main drivers to the change are the same where they are common to both measures.</p><p>
|
||||
|
||||
|
||||
|
||||
|
||||
</p><p>Figure 11 shows the extent to which the distinct categories of goods and services have contributed to the overall annual CPI inflation rate over the last two years.</p><p>The CPIH includes extra housing components not included in the CPI. This can sometimes result in the largest contributions to the annual CPI and CPIH inflation rates coming from different divisions. However, the housing and household services division made the largest contribution to both measures in February 2026, with a 0.58 percentage point contribution to the CPI rate and a 1.27 percentage point contribution to the CPIH rate. OOH costs made an upward contribution to the housing and household services 12-month rate in the CPIH but are excluded from the CPI.</p><p></p><p><a>Consumer price inflation tables</a><br> Dataset | Released 25 March 2026<br> Measures of monthly UK inflation data including the Consumer Prices Index including owner occupiers' housing costs (CPIH), Consumer Prices Index (CPI) and Retail Prices Index (RPI). These tables complement the consumer price inflation time series dataset.</p><p><a>Consumer price inflation time series</a><br> Dataset MM23 | Released 25 March 2026<br> Comprehensive database of time series covering measures of inflation data for the UK including CPIH, CPI and RPI.</p><p><a>Consumer price inflation detailed briefing note</a><br> Dataset | Released 25 March 2026<br> The consumer price inflation detailed briefing note contains details of the items contributing to the changes in the CPIH, details of any notable movements, a summary of the reconciliation of CPIH and RPI, and the outlook, which looks ahead to next month's release.</p><p><a>Consumer price inflation consumption segment indices and price quotes</a><br> Dataset | Released 25 March 2026<br> Price quote data (for locally collected data only) and consumption segment indices (that underpin consumer price inflation statistics), giving users access to the detailed data that are used in the construction of the UK's inflation figures. From publication in March 2026, this dataset no longer includes price quote data for food and non-alcoholic beverages, and alcohol and tobacco. More information is included in <a>Section 8: Data sources and quality</a>.</p><p><a>Contributions to the 12-month rate of CPI(H) by import intensity</a><br> Dataset | Released 25 March 2026<br> A time series of the contributions to the CPIH and CPI annual rates broken down by the import intensity of household purchases.</p><p><a>Consumer price inflation, historical data, UK, 1950 to 1988</a><br> Dataset | Released 18 May 2022<br> Data tables of historical estimates modelled for the CPIH and CPI over the period 1950 to 1988. Data in these tables are not accredited official statistics and are provided for indicative purposes only.</p><p></p><p>The most common approach to measuring inflation is the 12-month or annual inflation rate, which compares prices for the latest month with the same month a year ago. In any given month, the annual rate is determined by the balance between upward and downward price movements across the range of goods and services included in the index.</p><p>Consumer price inflation is the rate at which the prices of goods and services bought by households rise or fall. It is estimated by using price indices. For an overview of the range of indices available and their uses, please see our <a>Consumer price indices, a brief guide: 2017</a> and our <a>Measuring changing prices and costs for consumers and households: December 2023 article</a>.</p><p>The Consumer Prices Index including owner occupiers' housing costs (CPIH) is the most comprehensive measure of inflation. It extends the Consumer Prices Index (CPI) to include a measure of the costs associated with owning, maintaining and living in one's own home, known as owner occupiers' housing (OOH) costs, along with Council Tax. Both are substantial expenses for many households and are not included in the CPI.</p><p>The CPI is a measure of consumer price inflation produced to international standards, and is based on European regulations for the <a>Harmonised Index of Consumer Prices</a>. The CPI is the inflation measure used in the government's target for inflation.</p><p>The CPI is produced at the same level of detail as the CPIH in our accompanying <a>Consumer price inflation dataset</a> and in our accompanying <a>Consumer price inflation time series</a>.</p><p>OOH costs are the costs of housing services associated with owning, maintaining and living in one's own home.</p><p>The Retail Prices Index (RPI) and its subcomponents do not meet the required standard for designation as <a>accredited official statistics</a>. In recognition that the index continues to be widely used in contracts, we continue to publish the RPI, its subcomponents, and RPI excluding mortgage interest payments (RPIX). To view the all-items RPI, please see the <a>data time series section of the Inflation and price indices arLine truncated
|
||||
+166
@@ -0,0 +1,166 @@
|
||||
<html><head></head><body><h1 class="padding-bottom--0 padding-top--0 margin-top--2 font-weight-700 margin-bottom--2 ">Consumer price inflation, UK: September 2026</h1><p class="page-bulletins--Summary margin-right-md--2 margin-bottom--3 padding-bottom--0 padding-top--0">
|
||||
|
||||
|
||||
Price indices, percentage changes, and weights for the different measures of consumer price inflation.
|
||||
|
||||
</p><p class="alert-release-banner__title">This is the latest release.
|
||||
<a>View previous releases</a>
|
||||
</p><p class="col col--md-12 col--lg-15 margin-bottom-sm--1 margin-bottom-md--3 margin-top-sm--1 padding-bottom--0 padding-top--0">
|
||||
<span class="font-weight-700">Contact: </span><br><a class="text--white"><span class="visuallyhidden">Email </span>Consumer Price Inflation team</a>
|
||||
</p><p class="col col--md-one-third col--lg-one-third margin-bottom-sm--1 margin-bottom-md--3 margin-top--0 padding-bottom--0 padding-top--0">
|
||||
<span class="font-weight-700">Release date: </span><br>21 October 2026<br>
|
||||
|
||||
</p><p class="col col--md-one-third col--lg-one-third margin-bottom-sm--3 margin-bottom-md--3 margin-top--0 padding-bottom--0 padding-top--0">
|
||||
<span class="font-weight-700">Next release: </span><br>18 November 2026
|
||||
</p><p class="text-right--md padding-top-md--0 padding-bottom-md--0 height--5 margin-bottom-md--0 print--hide nojs--hide js--show">
|
||||
<a class="link-complex nojs--hide js--show js-print-page">
|
||||
Print this <span class="lowercase">
|
||||
Statistical bulletin
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
</a>
|
||||
<span class="icon icon-print--dark"></span>
|
||||
</p><p class="text-right--md padding-top-md--0 padding-bottom-md--0 height--5 margin-top-md--1 print--hide">
|
||||
<a class="link-complex js-pdf-dl-link">
|
||||
Download as PDF
|
||||
</a>
|
||||
<span class="icon icon-download--dark"></span>
|
||||
</p><p>The Consumer Prices Index (CPI) rose by 3.5% in the 12 months to September 2026, up from 3.1% the previous month.</p><p>On a monthly basis, CPI rose by 0.4% in September 2026, compared with little change in September 2025.</p><p>Core CPIH (CPIH excluding energy, food, alcohol, and tobacco) rose by 3.1% in the 12 months to September 2026, up from 2.9% in August; the CPIH goods annual rate rose from 2.7% to 3.2%, while the CPIH services annual rate rose from 3.6% to 3.9%.</p><p>Core CPI (CPI excluding energy, food, alcohol, and tobacco) rose by 2.8% in the 12 months to September 2026, up from 2.6% in August; the CPI goods annual rate rose from 2.7% to 3.2%, while the CPI services annual rate rose from 3.4% to 3.7%.</p><p>
|
||||
</p><table class="table">
|
||||
<caption class="table__caption">Table 1: CPIH, OOH component and CPI index values, and annual and monthly rates <br><span class="table__subtitle">UK, September 2025 to September 2026</span></caption>
|
||||
<colgroup><col><col><col><col><col><col><col><col><col><col></colgroup>
|
||||
<tr class="table__header-row table__nowrap align-bottom"><td class="align-left"></td><td class="align-left"></td><th class="align-right">CPIH<br>Index<br>(UK,<br>2015 =<br>100)</th><th class="align-right">CPIH<br>12-<br>month<br>rate (%)</th><th class="align-right">CPIH 1-<br>month<br>rate (%)</th><th class="align-right">CPI Index<br>(UK,<br>2015=100)</th><th class="align-right">CPI 12-<br>month<br>rate (%)</th><th class="align-right">CPI 1-<br>month<br>rate (%)</th><th class="align-right">OOH Index<br>(UK,<br>2015=100)</th><th class="align-right">OOH<br>12-<br>month<br>rate (%)</th></tr>
|
||||
<tr><th class="table__nowrap align-left">2025</th><th class="table__nowrap align-left">Sep </th><td class="align-right">138.9</td><td class="align-right">4.1</td><td class="align-right">0.1</td><td class="align-right">139.3</td><td class="align-right">3.8</td><td class="align-right">0.0</td><td class="align-right">135.1</td><td class="align-right">5.2</td></tr>
|
||||
<tr><td class="align-left"></td><th class="table__nowrap align-left">Oct</th><td class="align-right">139.5</td><td class="align-right">3.8</td><td class="align-right">0.4</td><td class="align-right">139.8</td><td class="align-right">3.6</td><td class="align-right">0.4</td><td class="align-right">135.7</td><td class="align-right">4.8</td></tr>
|
||||
<tr><td class="align-left"></td><th class="table__nowrap align-left">Nov</th><td class="align-right">139.4</td><td class="align-right">3.5</td><td class="align-right">-0.1</td><td class="align-right">139.5</td><td class="align-right">3.2</td><td class="align-right">-0.2</td><td class="align-right">136.5</td><td class="align-right">4.5</td></tr>
|
||||
<tr><td class="align-left"></td><th class="table__nowrap align-left">Dec </th><td class="align-right">139.9</td><td class="align-right">3.6</td><td class="align-right">0.4</td><td class="align-right">140.1</td><td class="align-right">3.4</td><td class="align-right">0.4</td><td class="align-right">136.8</td><td class="align-right">4.2</td></tr>
|
||||
<tr><th class="table__nowrap align-left">2026</th><th class="table__nowrap align-left">Jan</th><td class="align-right">139.4</td><td class="align-right">3.2</td><td class="align-right">-0.3</td><td class="align-right">139.5</td><td class="align-right">3.0</td><td class="align-right">-0.5</td><td class="align-right">137.0</td><td class="align-right">3.9</td></tr>
|
||||
<tr><td class="align-left"></td><th class="table__nowrap align-left">Feb</th><td class="align-right">140.0</td><td class="align-right">3.2</td><td class="align-right">0.4</td><td class="align-right">140.1</td><td class="align-right">3.0</td><td class="align-right">0.4</td><td class="align-right">137.4</td><td class="align-right">3.8</td></tr>
|
||||
<tr><td class="align-left"></td><th class="table__nowrap align-left">Mar</th><td class="align-right">140.8</td><td class="align-right">3.4</td><td class="align-right">0.6</td><td class="align-right">141.0</td><td class="align-right">3.3</td><td class="align-right">0.7</td><td class="align-right">137.7</td><td class="align-right">3.6</td></tr>
|
||||
<tr><td class="align-left"></td><th class="table__nowrap align-left">Apr</th><td class="align-right">141.8</td><td class="align-right">3.0</td><td class="align-right">0.8</td><td class="align-right">142.1</td><td class="align-right">2.8</td><td class="align-right">0.7</td><td class="align-right">137.9</td><td class="align-right">3.6</td></tr>
|
||||
<tr><td class="align-left"></td><th class="table__nowrap align-left">May</th><td class="align-right">142.1</td><td class="align-right">3.0</td><td class="align-right">0.2</td><td class="align-right">142.4</td><td class="align-right">2.8</td><td class="align-right">0.2</td><td class="align-right">138.1</td><td class="align-right">3.3</td></tr>
|
||||
<tr><td class="align-left"></td><th class="table__nowrap align-left">Jun</th><td class="align-right">142.3</td><td class="align-right">2.8</td><td class="align-right">0.2</td><td class="align-right">142.5</td><td class="align-right">2.6</td><td class="align-right">0.1</td><td class="align-right">138.6</td><td class="align-right">3.3</td></tr>
|
||||
<tr><td class="align-left"></td><th class="table__nowrap align-left">Jul</th><td class="align-right">142.7</td><td class="align-right">3.1</td><td class="align-right">0.3</td><td class="align-right">142.9</td><td class="align-right">2.9</td><td class="align-right">0.3</td><td class="align-right">139.0</td><td class="align-right">3.7</td></tr>
|
||||
<tr><td class="align-left"></td><th class="table__nowrap align-left">Aug</th><td class="align-right">143.4</td><td class="align-right">3.3</td><td class="align-right">0.5</td><td class="align-right">143.6</td><td class="align-right">3.1</td><td class="align-right">0.5</td><td class="align-right">139.7</td><td class="align-right">3.9</td></tr>
|
||||
<tr><td class="align-left"></td><th class="table__nowrap align-left">Sep </th><td class="align-right">144.0</td><td class="align-right">3.6</td><td class="align-right">0.4</td><td class="align-right">144.1</td><td class="align-right">3.5</td><td class="align-right">0.4</td><td class="align-right">140.5</td><td class="align-right">4.0</td></tr>
|
||||
</table><p>
|
||||
|
||||
|
||||
|
||||
|
||||
</p><p>The Consumer Prices Index including owner occupiers' housing costs (CPIH) rose by 3.6% in the 12 months to September 2026, up from 3.3% the previous month (Figure 1).</p><p>On a monthly basis, CPIH rose by 0.4% in September 2026, compared with a rise of 0.1% in September 2025.</p><p>The Consumer Prices Index (CPI) rose by 3.5% in the 12 months to September 2026, up from 3.1% the previous month.</p><p>On a monthly basis, CPI rose by 0.4% in September 2026, compared with little change in September 2025.</p><p>The main drivers of the annual inflation rate for CPIH and CPI are the same where they are common to both measures. However, the owner occupiers' housing (OOH) costs component accounts for approximately 18% of the CPIH and is the main driver for differences between the CPIH and CPI inflation rates.</p><p>This makes CPIH our most comprehensive measure of inflation. We cover this in more detail in <a>Section 4: Latest movements in CPIH inflation</a> and provide a commentary on the CPI in <a>Section 5: Latest movements in CPI inflation</a>. We also cover both CPIH and CPI in <a>Section 3: Notable movements in prices</a>, though the figures reflect CPIH.</p><p>
|
||||
</p><table class="table">
|
||||
<caption class="table__caption">Table 2: CPIH annual and monthly inflation rates by division <br><span class="table__subtitle">UK, September 2025, August 2026, and September 2026</span></caption>
|
||||
<colgroup><col><col><col><col><col></colgroup>
|
||||
<tr class="table__header-row table__nowrap align-bottom"><td class="align-left"></td><th class="align-center">CPIH 12-month rate (%)</th><th class="align-center">CPIH 1-month rate (%)</th></tr>
|
||||
<tr class="table__header-row table__nowrap"><td class="align-left"></td><th class="align-right">August 2026</th><th class="align-right">September 2026</th><th class="align-right">September 2025</th><th class="align-right">September 2026</th></tr>
|
||||
<tr><th class="table__nowrap align-left">CPIH All items </th><td class="align-right">3.3</td><td class="align-right">3.6</td><td class="align-right">0.1</td><td class="align-right">0.4</td></tr>
|
||||
<tr><th class="table__nowrap align-left">Food and non-alcoholic<br>beverages</th><td class="align-right">1.3</td><td class="align-right">1.3</td><td class="align-right">-0.2</td><td class="align-right">-0.2</td></tr>
|
||||
<tr><th class="table__nowrap align-left">Alcohol and tobacco </th><td class="align-right">2.7</td><td class="align-right">2.5</td><td class="align-right">0.0</td><td class="align-right">-0.3</td></tr>
|
||||
<tr><th class="table__nowrap align-left">Clothing and footwear </th><td class="align-right">0.2</td><td class="align-right">0.1</td><td class="align-right">2.4</td><td class="align-right">2.2</td></tr>
|
||||
<tr><th class="table__nowrap align-left">Housing and household services</th><td class="align-right">4.3</td><td class="align-right">4.5</td><td class="align-right">0.3</td><td class="align-right">0.5</td></tr>
|
||||
<tr><th class="table__nowrap align-left">of which owner occupiers'<br>housing costs</th><td class="align-right">3.9</td><td class="align-right">4.0</td><td class="align-right">0.5</td><td class="align-right">0.6</td></tr>
|
||||
<tr><th class="table__nowrap align-left">Furniture and household goods</th><td class="align-right">0.8</td><td class="align-right">1.0</td><td class="align-right">0.0</td><td class="align-right">0.2</td></tr>
|
||||
<tr><th class="table__nowrap align-left">Health </th><td class="align-right">3.7</td><td class="align-right">3.5</td><td class="align-right">0.2</td><td class="align-right">0.0</td></tr>
|
||||
<tr><th class="table__nowrap align-left">Transport </th><td class="align-right">4.6</td><td class="align-right">6.6</td><td class="align-right">-2.3</td><td class="align-right">-0.4</td></tr>
|
||||
<tr><th class="table__nowrap align-left">Communication </th><td class="align-right">5.3</td><td class="align-right">5.8</td><td class="align-right">-0.3</td><td class="align-right">0.2</td></tr>
|
||||
<tr><th class="table__nowrap align-left">Recreation and culture </th><td class="align-right">1.6</td><td class="align-right">2.3</td><td class="align-right">0.0</td><td class="align-right">0.7</td></tr>
|
||||
<tr><th class="table__nowrap align-left">Education </th><td class="align-right">5.1</td><td class="align-right">5.0</td><td class="align-right">1.5</td><td class="align-right">1.4</td></tr>
|
||||
<tr><th class="table__nowrap align-left">Restaurants and hotels </th><td class="align-right">4.1</td><td class="align-right">3.8</td><td class="align-right">0.8</td><td class="align-right">0.5</td></tr>
|
||||
<tr><th class="table__nowrap align-left">Miscellaneous goods and<br>services</th><td class="align-right">2.9</td><td class="align-right">3.1</td><td class="align-right">-0.1</td><td class="align-right">0.2</td></tr>
|
||||
<tr><td class="align-left"></td><td class="align-right"></td><td class="align-right"></td><td class="align-right"></td><td class="align-right"></td></tr>
|
||||
<tr><th class="table__nowrap align-left">All goods</th><td class="align-right">2.7</td><td class="align-right">3.2</td><td class="align-right">0.2</td><td class="align-right">0.8</td></tr>
|
||||
<tr><th class="table__nowrap align-left">All services </th><td class="align-right">3.6</td><td class="align-right">3.9</td><td class="align-right">-0.1</td><td class="align-right">0.1</td></tr>
|
||||
<tr><th class="table__nowrap align-left">CPIH exc food, energy, alcohol<br>and tobacco (core CPIH)</th><td class="align-right">2.9</td><td class="align-right">3.1</td><td class="align-right">0.1</td><td class="align-right">0.3</td></tr>
|
||||
</table><p>
|
||||
|
||||
|
||||
|
||||
|
||||
</p><p>Figure 2 shows the contributions from the 12 divisions to the change in the annual Consumer Prices Index including owner occupiers’ housing costs (CPIH) inflation rate between August and September 2026. These sum to the change in the annual rate, from 3.3% to 3.6%, between these months.</p><p>The increase in the 12-month rate between August and September 2026 reflected upward contributions from six divisions, partially offset by downward contributions from three divisions. The largest upward contribution came from transport, particularly motor fuels. The largest offsetting downward contribution came from restaurants and hotels.</p><p>Prices in the transport division rose overall by 6.6% in the 12 months to September 2026, up from 4.6% the previous month (Figure 3). On a monthly basis, prices fell by 0.4% in September 2026, compared with a fall of 2.3% a year ago.</p><p>
|
||||
|
||||
|
||||
|
||||
|
||||
</p><p>The largest upward effect contributing to the rise in the transport annual rate came from motor fuels.</p><p>The average price of petrol rose by 8.2 pence per litre between August and September 2026, compared with a fall of 0.2 pence per litre between August and September 2025. The average price stood at 169.5 pence per litre in September 2026. This is the highest price recorded since August 2022. </p><p>Diesel prices rose by 10.7 pence per litre in September 2026, compared with a fall of 0.4 pence per litre in September 2025. The average price stood at 192.5 pence per litre in September 2026. This is the highest price recorded since July 2022.</p><p>These movements resulted in overall motor fuel prices rising by 29.8% in the 12 months to September 2026, compared with a rise of 23.0% the previous month.</p><p>Within transport, there were smaller upward effects from air fares and sea fares, and partially offsetting small downward effects from roadside recovery, and second-hand cars. </p><p>Air fares fell by 19.5% between August and September 2026, compared with a fall of 28.8% between August and September 2025. The upward effect came from European routes where fares fell by less in September 2026 than they did in September 2025.</p><p>All domestic, European and long-haul flight prices were collected after the outbreak of the conflict in the Middle East on 28 February 2026. </p><p>Prices for roadside recovery saw a large fall this year and a large rise a year ago. Second-hand petrol cars and second-hand diesel cars saw a fall in price this year and a rise in price last year. </p><p>Recreation and culture prices rose by 0.7% in the month to September 2026, compared with little change a year ago. This led to a 12-month rate of 2.3% in September 2026, up from 1.6% in August.</p><p>The largest contribution to the upward effect came from live music where prices rose by 0.9% this year and fell by 8.6% last year. There was also an upward effect from computer game downloads where prices rose by 40.0% this year and 16.1% last year. There were smaller upward contributions from package holidays, cultural events, leisure classes, Blu-ray discs, music downloads, computer software, and televisions. </p><p>The 12-month rate for housing and household services was 4.5% in September 2026, up from 4.3% in August. Prices rose by 0.5% in the month to September 2026, compared with a rise of 0.3% a year ago.</p><p>The rise in the 12-month rate between August and September 2026 mainly reflected an upward effect from owner occupiers’ housing (OOH) costs. These rose by 4.0% in the 12 months to September 2026, up from 3.9% the previous month. On a monthly basis, OOH costs rose by 0.6% in September 2026, compared with a rise of 0.5% a year ago.</p><p>There was also an upward effect from kerosene, where prices rose by 22.7%, compared with a fall of 1.4% a year ago. </p><p>The 12-month inflation rate for food and non-alcoholic beverages was 1.3% in September 2026, unchanged from August (Figure 4). The rate was last lower in September 2021, when it was 0.8%. On a monthly basis, food and non-alcoholic beverage prices fell by 0.2% in September 2026, the same fall as in September 2025.</p><p>
|
||||
|
||||
|
||||
|
||||
|
||||
</p><p>All 11 detailed classes within the food and non-alcoholic beverages division had little effect on the change in the headline rate. However, the consumption segments for other breakfast bakery products; cakes, tarts and sweet pies; tomatoes; and potato crisps had upward effects. The consumption segments for beef, chocolate assortments, and fizzy drinks had downward effects.</p><p>Although the annual rate of inflation for food and non-alcoholic beverage prices has remained the same for the last three months, organisations like <a>the Food and Drink Federation expect food inflation to arrive later and persist for longer</a>. This is partly because pressure on household budgets, competition and retailer resistance to price increases have limited manufacturers' ability to pass on higher costs.</p><p>Prices in the restaurants and hotels division rose by 3.8% in the 12 months to September 2026, down from 4.1% in the 12 months to August 2026. On a monthly basis, prices rose by 0.5% in September 2026, compared with a rise of 0.8% a year ago.</p><p>The downward contribution came from hotels where prices rose by 2.3% compared with a rise of 3.8% a year ago. </p><p>
|
||||
|
||||
|
||||
|
||||
|
||||
</p><p>Figure 5 shows the 12-month inflation rates for the Consumer Prices Index including owner occupiers’ housing costs (CPIH) series for all goods and all services, together with CPIH excluding energy, food, alcohol, and tobacco (often referred to as core CPIH). The CPIH inflation rate is added for comparison.</p><p>The core CPIH annual inflation rate was 3.1% in September 2026, up from 2.9% in August. </p><p>The CPIH all-goods index rose by 3.2% in the 12 months to September 2026, up from 2.7% the previous month. This was the highest rate since September 2023. The largest upward contribution to the change in the annual rate came from energy, particularly motor fuels and kerosene. </p><p>The CPIH all-services index rose by 3.9% in the 12 months to September 2026, up from 3.6% in the 12 months to August. The largest upward contribution to the change in the annual rate came from transport services, particularly air fares. </p><p>
|
||||
|
||||
|
||||
|
||||
|
||||
</p><p>Figure 6 shows the extent to which the distinct categories of goods and services have contributed to the overall annual CPIH inflation rate over the last two years. The contribution of each category to the annual rate depends on the price movement in that category and its weight, which is updated annually.</p><p>The contribution from food and non-alcoholic beverages has broadly eased from a recent high of 0.46 percentage points in August 2025. The contribution was 0.11 percentage points in September 2026, the same as August 2026 and the smallest since September 2021. </p><p>The largest positive contribution to the CPIH annual inflation rate came from housing and household services. The division has made the largest contribution for the last 27 months, starting from July 2024.</p><p>
|
||||
|
||||
|
||||
|
||||
|
||||
</p><p>Figure 7 shows the contributions from owner occupiers’ housing (OOH) costs and Council Tax to the annual CPIH inflation rate in the context of wider housing-related costs. The Consumer Prices Index (CPI) differs from the CPIH because it does not include these two components.</p><p>The annual contribution from OOH costs rose to 0.70 percentage points in September 2026. This was the fourth consecutive rise between months and followed 16 consecutive decreases. Although the current contribution was larger than the previous month’s, it was smaller than the recent high of 1.31 percentage points in January 2025.</p><p>The contribution from electricity, gas and other fuels also rose, to 0.19 percentage points in September 2026. This was the largest contribution from this category since September 2025.</p><p>While the Consumer Prices Index including owner occupiers' housing costs (CPIH) is our most comprehensive measure of consumer price inflation, the Consumer Prices Index (CPI) is based on a harmonised methodology developed by Eurostat.</p><p>This enables international comparisons to be drawn. It is also used to set the operational inflation target for UK monetary policy, and to uprate working-age benefits and tax credits. More information on the use cases for our consumer price inflation statistics can be found in our <a>Measuring changing prices and costs for consumers and households: December 2023 article</a>.</p><p>Figure 8 shows annual CPI inflation for the UK compared with the EU average and selected G7 countries. While the UK CPI is produced on a comparable basis with EU countries, the US Harmonised Index of Consumer Prices (HICP) differs in some respects. More information is available in Note 1 to Figure 8.</p><p>The UK's CPI inflation rate of 3.5% was higher than the inflation rates of France (3.4%) and Germany (3.3%) in September 2026.</p><p>
|
||||
|
||||
|
||||
|
||||
|
||||
</p><p>
|
||||
</p><table class="table">
|
||||
<caption class="table__caption">Table 3: CPI annual and monthly inflation rates by division <br><span class="table__subtitle">UK, September 2025, August 2026, and September 2026</span></caption>
|
||||
<colgroup><col><col><col><col><col></colgroup>
|
||||
<tr class="table__header-row table__nowrap"><td class="align-left"></td><th class="align-center">CPI 12-month rate (%)</th><th class="align-center">CPI 1-month rate (%)</th></tr>
|
||||
<tr class="table__header-row table__nowrap"><td class="align-left"></td><th class="align-right">August 2026</th><th class="align-right">September 2026</th><th class="align-right">September 2025</th><th class="align-right">September 2026</th></tr>
|
||||
<tr><th class="table__nowrap align-left">CPI All items </th><td class="align-right">3.1</td><td class="align-right">3.5</td><td class="align-right">0.0</td><td class="align-right">0.4</td></tr>
|
||||
<tr><th class="table__nowrap align-left">Food and non-alcoholic<br>beverages</th><td class="align-right">1.3</td><td class="align-right">1.3</td><td class="align-right">-0.2</td><td class="align-right">-0.2</td></tr>
|
||||
<tr><th class="table__nowrap align-left">Alcohol and tobacco </th><td class="align-right">2.7</td><td class="align-right">2.5</td><td class="align-right">0.0</td><td class="align-right">-0.3</td></tr>
|
||||
<tr><th class="table__nowrap align-left">Clothing and footwear </th><td class="align-right">0.2</td><td class="align-right">0.1</td><td class="align-right">2.4</td><td class="align-right">2.2</td></tr>
|
||||
<tr><th class="table__nowrap align-left">Housing and household services</th><td class="align-right">4.9</td><td class="align-right">5.3</td><td class="align-right">0.2</td><td class="align-right">0.6</td></tr>
|
||||
<tr><th class="table__nowrap align-left">Furniture and household goods</th><td class="align-right">0.8</td><td class="align-right">1.0</td><td class="align-right">0.0</td><td class="align-right">0.2</td></tr>
|
||||
<tr><th class="table__nowrap align-left">Health </th><td class="align-right">3.7</td><td class="align-right">3.5</td><td class="align-right">0.2</td><td class="align-right">0.0</td></tr>
|
||||
<tr><th class="table__nowrap align-left">Transport </th><td class="align-right">4.6</td><td class="align-right">6.6</td><td class="align-right">-2.3</td><td class="align-right">-0.4</td></tr>
|
||||
<tr><th class="table__nowrap align-left">Communication </th><td class="align-right">5.3</td><td class="align-right">5.8</td><td class="align-right">-0.3</td><td class="align-right">0.2</td></tr>
|
||||
<tr><th class="table__nowrap align-left">Recreation and culture </th><td class="align-right">1.6</td><td class="align-right">2.3</td><td class="align-right">0.0</td><td class="align-right">0.7</td></tr>
|
||||
<tr><th class="table__nowrap align-left">Education </th><td class="align-right">5.1</td><td class="align-right">5.0</td><td class="align-right">1.5</td><td class="align-right">1.4</td></tr>
|
||||
<tr><th class="table__nowrap align-left">Restaurants and hotels </th><td class="align-right">4.1</td><td class="align-right">3.8</td><td class="align-right">0.8</td><td class="align-right">0.5</td></tr>
|
||||
<tr><th class="table__nowrap align-left">Miscellaneous goods and<br>services</th><td class="align-right">2.9</td><td class="align-right">3.1</td><td class="align-right">-0.1</td><td class="align-right">0.2</td></tr>
|
||||
<tr><td class="align-left"></td><td class="align-right"></td><td class="align-right"></td><td class="align-right"></td><td class="align-right"></td></tr>
|
||||
<tr><th class="table__nowrap align-left">All goods</th><td class="align-right">2.7</td><td class="align-right">3.2</td><td class="align-right">0.2</td><td class="align-right">0.8</td></tr>
|
||||
<tr><th class="table__nowrap align-left">All services </th><td class="align-right">3.4</td><td class="align-right">3.7</td><td class="align-right">-0.3</td><td class="align-right">0.0</td></tr>
|
||||
<tr><th class="table__nowrap align-left">CPI exc food, energy, alcohol and<br>tobacco (core CPI)</th><td class="align-right">2.6</td><td class="align-right">2.8</td><td class="align-right">0.0</td><td class="align-right">0.2</td></tr>
|
||||
</table><p>
|
||||
|
||||
|
||||
|
||||
|
||||
</p><p>Figure 9 shows the 12-month inflation rates for the CPI all-goods and all-services series, together with CPI excluding energy, food, alcohol, and tobacco (often referred to as core CPI). The headline CPI inflation rate is added for comparison.</p><p>The core CPI annual inflation rate was 2.8% in September 2026, up from 2.6% in August. </p><p>The CPI all-goods index rose by 3.2% in the 12 months to September 2026, up from 2.7% the previous month. The rate in September 2026 was the highest since September 2023.</p><p>The CPI all-services index rose by 3.7% in the 12 months to September 2026, up from 3.4% in the 12 months to August.</p><p>As with the all-items annual inflation rates, the drivers of CPIH and CPI goods and services inflation are the same (except for owner occupiers’ housing (OOH) costs and Council Tax, which are excluded from CPI). The drivers are discussed in more detail in <a>Section 4: Latest movements in CPIH inflation</a>.</p><p>
|
||||
|
||||
|
||||
|
||||
|
||||
</p><p>Figure 10 shows how each of the main groups of goods and services contributed to the change in the CPI annual inflation rate between August and September 2026.</p><p>The rate’s rise in September 2026 reflected upward contributions from six divisions, partially offset by downward contributions from four divisions. The largest upward contribution came from transport, particularly motor fuels. The largest offsetting downward contribution came from restaurants and hotels.</p><p>Though the sizes of the contributions differ from CPIH, the main drivers to the change are the same where they are common to both measures.</p><p>
|
||||
|
||||
|
||||
|
||||
|
||||
</p><p>Figure 11 shows the extent to which the distinct categories of goods and services have contributed to the overall annual CPI inflation rate over the last two years.</p><p>The CPIH includes extra housing components not included in the CPI. This can sometimes result in the largest contributions to the annual CPI and CPIH inflation rates coming from different divisions. In September 2026, the largest contributing division to CPI was transport (0.94 percentage point contribution to the CPI rate), while the largest contributing division to CPIH was housing and household services (1.39 percentage point contribution to the CPIH rate). OOH costs made a large upward contribution to housing and household services in CPIH, but these are excluded from CPI.</p><p></p><p><a>Consumer price inflation tables</a><br> Dataset | Released 21 October 2026<br> Measures of monthly UK inflation data including the Consumer Prices Index including owner occupiers' housing costs (CPIH), Consumer Prices Index (CPI) and Retail Prices Index (RPI). These tables complement the consumer price inflation time series dataset.</p><p><a>Consumer price inflation time series</a><br> Dataset MM23 | Released 21 October 2026<br> Comprehensive database of time series covering measures of inflation data for the UK including CPIH, CPI and RPI.</p><p><a>Consumer price inflation detailed briefing note</a><br> Dataset | Released 21 October 2026<br> The consumer price inflation detailed briefing note contains details of the items contributing to the changes in the CPIH, details of any notable movements, a summary of the reconciliation of CPIH and RPI, and the outlook, which looks ahead to next month's release.</p><p><a>Consumer price inflation consumption segment indices and price quotes</a><br> Dataset | Released 21 October 2026<br> Price quote data (for locally collected data only) and consumption segment indices (that underpin consumer price inflation statistics), giving users access to the detailed data that are used in the construction of the UK's inflation figures. From publication in March 2026, this dataset no longer includes price quote data for food and non-alcoholic beverages, and alcohol and tobacco. More information is included in <a>Section 8: Data sources and quality</a>.</p><p><a>Contributions to the 12-month rate of CPI(H) by import intensity</a><br> Dataset | Released 21 October 2026<br> A time series of the contributions to the CPIH and CPI annual rates broken down by the import intensity of household purchases.</p><p><a>Consumer price inflation, historical data, UK, 1950 to 1988</a><br> Dataset | Released 18 May 2022<br> Data tables of historical estimates modelled for the CPIH and CPI over the period 1950 to 1988. Data in these tables are not accredited official statistics and are provided for indicative purposes only. </p><p>The most common approach to measuring inflation is the 12-month or annual inflation rate, which compares prices for the latest month with the same month a year ago. In any given month, the annual rate is determined by the balance between upward and downward price movements across the range of goods and services included in the index.</p><p>Consumer price inflation is the rate at which the prices of goods and services bought by households rise or fall. It is estimated by using price indices. An overview of the range of indices available and their uses, is available in our <a>Consumer price indices, a brief guide: 2026</a> and our <a>Measuring changing prices and costs for consumers and households: December 2023 article</a>.</p><p>The Consumer Prices Index including owner occupiers' housing costs (CPIH) is the most comprehensive measure of inflation. It extends the Consumer Prices Index (CPI) to include a measure of the costs associated with owning, maintaining and living in one's own home, known as owner occupiers' housing (OOH) costs, along with Council Tax. Both are substantial expenses for many households and are not included in the CPI.</p><p>The CPI is a measure of consumer price inflation produced to international standards, and is based on European regulations for the <a>Harmonised Index of Consumer Prices</a>. The CPI is the inflation measure used in the government's target for inflation.</p><p>The CPI is produced at the same level of detail as the CPIH in our accompanying <a>Consumer price inflation dataset</a> and <a>Consumer price inflation time series</a>.</p><p>OOH costs are the costs of housing services associated with owning, maintaining and living in one's own home.</p><p>The Retail Prices Index (RPI) and its subcomponents do not meet the required standard for designation as <a>accredited official statistics</a>. In recognition that the index continues to be widely used in contracts, we continue to publish the RPI, its subcomponents, and RPI excluding mortgage interest payments (RPIX).</p><p>To view the all-items RPI, please see the <a>data time series section of the Inflation and price inLine truncated
|
||||
+35
@@ -0,0 +1,35 @@
|
||||
<rss version="2.0">
|
||||
<channel>
|
||||
<title>ONS Release Calendar RSS Feed.</title>
|
||||
<link>https://www.ons.gov.uk/releasecalendar</link>
|
||||
<description>Latest ONS releases</description>
|
||||
<item>
|
||||
<title>Construction statistics, Great Britain: 2025</title>
|
||||
<link>https://www.ons.gov.uk/releases/constructionstatisticsgreatbritain2025</link>
|
||||
<description>Statistics on the construction industry, including value of output, new orders by sector, number of firms and total employment, insolvencies and construction Output Price Indices.</description>
|
||||
<guid>https://www.ons.gov.uk/releases/constructionstatisticsgreatbritain2025</guid>
|
||||
<pubDate>Fri, 23 Oct 2026 08:30:00 +0000</pubDate>
|
||||
</item>
|
||||
<item>
|
||||
<title>Labour demand volumes by Standard Occupation Classification (SOC 2020), UK: January 2017 to September 2026</title>
|
||||
<link>https://www.ons.gov.uk/releases/labourdemandvolumesbystandardoccupationclassificationsoc2020ukjanuary2017toseptember2026</link>
|
||||
<description>These tables contain the number of online job adverts split by different geographies and occupation (SOC 2020).</description>
|
||||
<guid>https://www.ons.gov.uk/releases/labourdemandvolumesbystandardoccupationclassificationsoc2020ukjanuary2017toseptember2026</guid>
|
||||
<pubDate>Fri, 23 Oct 2026 08:30:00 +0000</pubDate>
|
||||
</item>
|
||||
<item>
|
||||
<title>UK trade, quarterly goods and services: April to June 2026</title>
|
||||
<link>https://www.ons.gov.uk/releases/uktradequarterlygoodsandservicesapriltojune2026</link>
|
||||
<description>Quarterly estimates of total trade, trade in goods, and trade in services by country.</description>
|
||||
<guid>https://www.ons.gov.uk/releases/uktradequarterlygoodsandservicesapriltojune2026</guid>
|
||||
<pubDate>Fri, 23 Oct 2026 08:30:00 +0000</pubDate>
|
||||
</item>
|
||||
<item>
|
||||
<title>Estimates of the very old, including centenarians, UK: 2002 to 2025</title>
|
||||
<link>https://www.ons.gov.uk/releases/estimatesoftheveryoldincludingcentenariansuk2002to2025</link>
|
||||
<description>Annual mid-year population estimates of people aged 90 years and over by sex and single year of age to 105 years and over, and comparisons between UK countries.</description>
|
||||
<guid>https://www.ons.gov.uk/releases/estimatesoftheveryoldincludingcentenariansuk2002to2025</guid>
|
||||
<pubDate>Fri, 23 Oct 2026 08:30:00 +0000</pubDate>
|
||||
</item>
|
||||
</channel>
|
||||
</rss>
|
||||
+166
@@ -0,0 +1,166 @@
|
||||
<html><body><h1 class="padding-bottom--0 padding-top--0 margin-top--2 font-weight-700 margin-bottom--2 ">Consumer price inflation, UK: May 2025</h1><p class="page-bulletins--Summary margin-right-md--2 margin-bottom--3 padding-bottom--0 padding-top--0">
|
||||
|
||||
|
||||
Price indices, percentage changes, and weights for the different measures of consumer price inflation.
|
||||
|
||||
</p><p class="alert-release-banner__title">This is not the latest release.
|
||||
<a class="alert-release-banner__link">View latest release</a>
|
||||
</p><p class="col col--md-12 col--lg-15 margin-bottom-sm--1 margin-bottom-md--3 margin-top-sm--1 padding-bottom--0 padding-top--0">
|
||||
<span class="font-weight-700">Contact: </span><br><a class="text--white"><span class="visuallyhidden">Email </span>Consumer Price Inflation team</a>
|
||||
</p><p class="col col--md-one-third col--lg-one-third margin-bottom-sm--1 margin-bottom-md--3 margin-top--0 padding-bottom--0 padding-top--0">
|
||||
<span class="font-weight-700">Release date: </span><br>18 June 2025<br>
|
||||
|
||||
</p><p class="col col--md-one-third col--lg-one-third margin-bottom-sm--3 margin-bottom-md--3 margin-top--0 padding-bottom--0 padding-top--0">
|
||||
<span class="font-weight-700">Next release: </span><br>16 July 2025
|
||||
</p><h2 class="table-of-contents__title">Table of contents</h2><p class="text-right--md padding-top-md--0 padding-bottom-md--0 height--5 margin-bottom-md--0 print--hide nojs--hide js--show">
|
||||
<a class="link-complex nojs--hide js--show js-print-page">
|
||||
Print this <span class="lowercase">
|
||||
Statistical bulletin
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
</a>
|
||||
<span class="icon icon-print--dark"></span>
|
||||
</p><p class="text-right--md padding-top-md--0 padding-bottom-md--0 height--5 margin-top-md--1 print--hide">
|
||||
<a class="link-complex js-pdf-dl-link">
|
||||
Download as PDF
|
||||
</a>
|
||||
<span class="icon icon-download--dark"></span>
|
||||
</p><p>The Consumer Prices Index including owner occupiers' housing costs (CPIH) rose by 4.0% in the 12 months to May 2025, compared with 4.1% in the 12 months to April. </p><p>On a monthly basis, CPIH rose by 0.2% in May 2025, compared with a rise of 0.4% in May 2024. </p><p>The Consumer Prices Index (CPI) rose by 3.4% in the 12 months to May 2025, compared with 3.5% in the 12 months to April. </p><p>On a monthly basis, CPI rose by 0.2% in May 2025, compared with a rise of 0.3% in May 2024. </p><p>The largest downward contribution to the monthly change in both CPIH and CPI annual rates came from transport; the largest, partially offsetting, upward contributions came from food, and furniture and household goods. </p><p>Core CPIH (CPIH excluding energy, food, alcohol and tobacco) rose by 4.2% in the 12 months to May 2025, down from 4.5% in the 12 months to April; the CPIH goods annual rate rose from 1.7% to 2.0%, while the CPIH services annual rate slowed from 5.8% to 5.3%. </p><p>Core CPI (CPI excluding energy, food, alcohol and tobacco) rose by 3.5% in the 12 months to May 2025, down from 3.8% in the 12 months to April; the CPI goods annual rate rose from 1.7% to 2.0%, while the CPI services annual rate slowed from 5.4% to 4.7%. </p><p>The CPIH and CPI inflation rates and indices were each overstated in April 2025 as a result of an error in the Vehicle Excise Duty (VED) component; in line with our revisions policy, the April figures have not been amended but the corrected VED information has been used when producing the May index.</p><p>
|
||||
</p><table class="table">
|
||||
<caption class="table__caption">Table 1: CPIH, OOH component and CPI index values, and annual and monthly rates <br><span class="table__subtitle">UK, May 2024 to May 2025 </span></caption>
|
||||
<colgroup><col><col><col><col><col><col><col><col><col><col></colgroup>
|
||||
<tr class="table__header-row table__nowrap"><td class="align-left"></td><td class="align-left"></td><th class="align-right">CPIH Index<br>(UK, <br>2015 = 100)</th><th class="align-right">CPIH 12-<br>month <br>rate<br> (%)</th><th class="align-right">CPIH 1-<br>month <br>rate<br> (%)</th><th class="align-right">CPI Index<br>(UK, <br>2015=100)</th><th class="align-right">CPI 12- <br>month<br> rate<br> (%)</th><th class="align-right">CPI 1- <br>month<br> rate <br>(%)</th><th class="align-right">OOH Index<br>(UK,<br> 2015=100)</th><th class="align-right">OOH 12-<br>month<br> rate <br>(%)</th></tr>
|
||||
<tr><th class="table__nowrap align-left">2024</th><th class="table__nowrap align-left">May</th><td class="align-right">132.7</td><td class="align-right">2.8</td><td class="align-right">0.4</td><td class="align-right">133.9</td><td class="align-right">2.0</td><td class="align-right">0.3</td><td class="align-right">125.3</td><td class="align-right">6.7</td></tr>
|
||||
<tr><td class="align-left"></td><th class="table__nowrap align-left">Jun</th><td class="align-right">133.0</td><td class="align-right">2.8</td><td class="align-right">0.2</td><td class="align-right">134.1</td><td class="align-right">2.0</td><td class="align-right">0.1</td><td class="align-right">126.1</td><td class="align-right">6.8</td></tr>
|
||||
<tr><td class="align-left"></td><th class="table__nowrap align-left">Jul</th><td class="align-right">132.9</td><td class="align-right">3.1</td><td class="align-right">0.0</td><td class="align-right">133.8</td><td class="align-right">2.2</td><td class="align-right">-0.2</td><td class="align-right">126.9</td><td class="align-right">7.0</td></tr>
|
||||
<tr><td class="align-left"></td><th class="table__nowrap align-left">Aug</th><td class="align-right">133.4</td><td class="align-right">3.1</td><td class="align-right">0.4</td><td class="align-right">134.3</td><td class="align-right">2.2</td><td class="align-right">0.3</td><td class="align-right">127.7</td><td class="align-right">7.1</td></tr>
|
||||
<tr><td class="align-left"></td><th class="table__nowrap align-left">Sep </th><td class="align-right">133.5</td><td class="align-right">2.6</td><td class="align-right">0.1</td><td class="align-right">134.2</td><td class="align-right">1.7</td><td class="align-right">0.0</td><td class="align-right">128.5</td><td class="align-right">7.2</td></tr>
|
||||
<tr><td class="align-left"></td><th class="table__nowrap align-left">Oct</th><td class="align-right">134.3</td><td class="align-right">3.2</td><td class="align-right">0.6</td><td class="align-right">135.0</td><td class="align-right">2.3</td><td class="align-right">0.6</td><td class="align-right">129.5</td><td class="align-right">7.4</td></tr>
|
||||
<tr><td class="align-left"></td><th class="table__nowrap align-left">Nov</th><td class="align-right">134.6</td><td class="align-right">3.5</td><td class="align-right">0.2</td><td class="align-right">135.1</td><td class="align-right">2.6</td><td class="align-right">0.1</td><td class="align-right">130.5</td><td class="align-right">7.8</td></tr>
|
||||
<tr><td class="align-left"></td><th class="table__nowrap align-left">Dec </th><td class="align-right">135.1</td><td class="align-right">3.5</td><td class="align-right">0.3</td><td class="align-right">135.6</td><td class="align-right">2.5</td><td class="align-right">0.3</td><td class="align-right">131.3</td><td class="align-right">8.0</td></tr>
|
||||
<tr><th class="table__nowrap align-left">2025</th><th class="table__nowrap align-left">Jan</th><td class="align-right">135.1</td><td class="align-right">3.9</td><td class="align-right">0.0</td><td class="align-right">135.4</td><td class="align-right">3.0</td><td class="align-right">-0.1</td><td class="align-right">131.8</td><td class="align-right">8.0</td></tr>
|
||||
<tr><td class="align-left"></td><th class="table__nowrap align-left">Feb</th><td class="align-right">135.6</td><td class="align-right">3.7</td><td class="align-right">0.4</td><td class="align-right">136.0</td><td class="align-right">2.8</td><td class="align-right">0.4</td><td class="align-right">132.4</td><td class="align-right">7.5</td></tr>
|
||||
<tr><td class="align-left"></td><th class="table__nowrap align-left">Mar</th><td class="align-right">136.1</td><td class="align-right">3.4</td><td class="align-right">0.3</td><td class="align-right">136.5</td><td class="align-right">2.6</td><td class="align-right">0.3</td><td class="align-right">132.9</td><td class="align-right">7.2</td></tr>
|
||||
<tr><td class="align-left"></td><th class="table__nowrap align-left">Apr</th><td class="align-right">137.7</td><td class="align-right">4.1</td><td class="align-right">1.2</td><td class="align-right">138.2</td><td class="align-right">3.5</td><td class="align-right">1.2</td><td class="align-right">133.2</td><td class="align-right">6.9</td></tr>
|
||||
<tr><td class="align-left"></td><th class="table__nowrap align-left">May</th><td class="align-right">138.0</td><td class="align-right">4.0</td><td class="align-right">0.2</td><td class="align-right">138.4</td><td class="align-right">3.4</td><td class="align-right">0.2</td><td class="align-right">133.7</td><td class="align-right">6.7</td></tr>
|
||||
</table><p>
|
||||
|
||||
|
||||
|
||||
|
||||
</p><p>The Consumer Prices Index including owner occupiers' housing costs (CPIH) rose by 4.0% in the 12 months to May 2025, compared with 4.1% in the 12 months to April (Figure 1). </p><p>On a monthly basis, CPIH rose by 0.2% in May 2025, compared with a rise of 0.4% in May 2024. </p><p>The owner occupiers' housing (OOH) costs component of CPIH rose by 6.7% in the 12 months to May 2025, down from 6.9% in the 12 months to April. OOH costs rose by 0.4% on the month, compared with a 0.6% increase a year earlier. </p><p>The Consumer Prices Index (CPI) rose by 3.4% in the 12 months to May 2025, compared with 3.5% in the 12 months to April. </p><p>On a monthly basis, CPI rose by 0.2% in May 2025, compared with a rise of 0.3% in May 2024. </p><p>The CPIH and CPI were each overstated in April as a result of an error in the Vehicle Excise Duty (VED) component. The effect was to add 0.1 percentage points to the headline annual rates. In line with our revisions policy, the April figures have not been amended but the corrected VED information has been used when producing the May index. More information on the error is included in <a>Section 8: Data sources and quality</a>. </p><p>The main drivers of the annual inflation rate for CPIH and CPI are the same where they are common to both measures. However, the OOH costs component accounts for approximately 17% of the CPIH and is the main driver for differences between the CPIH and CPI inflation rates. This makes CPIH our most comprehensive measure of inflation. We cover this in more detail in <a>Section 4: Latest movements in CPIH inflation</a> and provide a commentary on the CPI in <a>Section 5: Latest movements in CPI inflation</a>. We also cover both CPIH and CPI in <a>Section 3: Notable movements in prices</a>, though the figures reflect CPIH.</p><p>
|
||||
</p><table class="table">
|
||||
<caption class="table__caption">Table 2: CPIH annual and monthly inflation rates by division <br><span class="table__subtitle">UK, May 2024, April 2025, and May 2025 </span></caption>
|
||||
<colgroup><col><col><col><col><col><col></colgroup>
|
||||
<tr class="table__header-row table__nowrap"><td></td><td></td><th class="align-right">CPIH 12-month rate (%)</th><th class="align-right">CPIH 1-month rate (%)</th></tr>
|
||||
<tr class="table__header-row table__nowrap"><td class="align-left"></td><td class="align-left"></td><th class="align-right">Apr 2025</th><th class="align-right">May 2025</th><th class="align-right">May 2024</th><th class="align-right">May 2025</th></tr>
|
||||
<tr><th class="table__nowrap align-left">CPIH All items [1]</th><td class="align-left"></td><td class="align-right">4.1</td><td class="align-right">4.0</td><td class="align-right">0.4</td><td class="align-right">0.2</td></tr>
|
||||
<tr><th class="table__nowrap align-left">Food and non-alcoholic<br> beverages</th><td class="align-left"></td><td class="align-right">3.4</td><td class="align-right">4.4</td><td class="align-right">-0.3</td><td class="align-right">0.7</td></tr>
|
||||
<tr><th class="table__nowrap align-left">Alcohol and tobacco </th><td class="align-left"></td><td class="align-right">5.7</td><td class="align-right">5.4</td><td class="align-right">0.3</td><td class="align-right">0.1</td></tr>
|
||||
<tr><th class="table__nowrap align-left">Clothing and footwear </th><td class="align-left"></td><td class="align-right">-0.4</td><td class="align-right">-0.3</td><td class="align-right">0.6</td><td class="align-right">0.8</td></tr>
|
||||
<tr><th class="table__nowrap align-left">Housing and household<br> services</th><td class="align-left"></td><td class="align-right">7.0</td><td class="align-right">6.9</td><td class="align-right">0.4</td><td class="align-right">0.3</td></tr>
|
||||
<tr><th class="table__nowrap align-left">of which owner <br>occupiers' housing costs</th><td class="align-left"></td><td class="align-right">6.9</td><td class="align-right">6.7</td><td class="align-right">0.6</td><td class="align-right">0.4</td></tr>
|
||||
<tr><th class="table__nowrap align-left">Furniture and<br> household goods</th><td class="align-left"></td><td class="align-right">-0.5</td><td class="align-right">0.8</td><td class="align-right">0.2</td><td class="align-right">1.5</td></tr>
|
||||
<tr><th class="table__nowrap align-left">Health </th><td class="align-left"></td><td class="align-right">4.3</td><td class="align-right">4.5</td><td class="align-right">0.2</td><td class="align-right">0.3</td></tr>
|
||||
<tr><th class="table__nowrap align-left">Transport [1]</th><td class="align-left"></td><td class="align-right">3.3</td><td class="align-right">0.7</td><td class="align-right">0.7</td><td class="align-right">-1.8</td></tr>
|
||||
<tr><th class="table__nowrap align-left">Communication </th><td class="align-left"></td><td class="align-right">5.8</td><td class="align-right">4.5</td><td class="align-right">1.0</td><td class="align-right">-0.2</td></tr>
|
||||
<tr><th class="table__nowrap align-left">Recreation and culture </th><td class="align-left"></td><td class="align-right">3.1</td><td class="align-right">3.2</td><td class="align-right">0.2</td><td class="align-right">0.3</td></tr>
|
||||
<tr><th class="table__nowrap align-left">Education </th><td class="align-left"></td><td class="align-right">7.5</td><td class="align-right">7.5</td><td class="align-right">0.0</td><td class="align-right">0.0</td></tr>
|
||||
<tr><th class="table__nowrap align-left">Restaurants and hotels </th><td class="align-left"></td><td class="align-right">2.7</td><td class="align-right">2.8</td><td class="align-right">0.7</td><td class="align-right">0.8</td></tr>
|
||||
<tr><th class="table__nowrap align-left">Miscellaneous goods <br>and services</th><td class="align-left"></td><td class="align-right">2.5</td><td class="align-right">2.8</td><td class="align-right">0.1</td><td class="align-right">0.4</td></tr>
|
||||
<tr><td class="align-left"></td><td class="align-left"></td><td class="align-right"></td><td class="align-right"></td><td class="align-right"></td><td class="align-right"></td></tr>
|
||||
<tr><th class="table__nowrap align-left">All goods</th><td class="align-left"></td><td class="align-right">1.7</td><td class="align-right">2.0</td><td class="align-right">0.0</td><td class="align-right">0.4</td></tr>
|
||||
<tr><th class="table__nowrap align-left">All services [1]</th><td class="align-left"></td><td class="align-right">5.8</td><td class="align-right">5.3</td><td class="align-right">0.6</td><td class="align-right">0.1</td></tr>
|
||||
<tr><th class="table__nowrap align-left">CPIH exc food, energy,<br> alcohol and tobacco (core CPIH) [1]</th><td class="align-left"></td><td class="align-right">4.5</td><td class="align-right">4.2</td><td class="align-right">0.5</td><td class="align-right">0.2</td></tr>
|
||||
</table><p>
|
||||
|
||||
|
||||
|
||||
|
||||
</p><p>Individual contributions may not sum to the total because of rounding.</p><p>More information on the contents of each division can be found in Table 3 in our accompanying <a>Consumer price inflation dataset</a>. </p><p>Figure 2 shows the contributions from the 12 divisions to the change in the annual Consumer Prices Index including owner occupiers' housing costs (CPIH) inflation rate between April and May 2025. These sum to the change in the annual rate between the latest two months. </p><p>The slight change in the rate into May 2025 reflected downward contributions from four divisions, partially offset by upward contributions from five divisions. The largest downward contributions came from transport, and housing and household services. The largest upward contributions came from food and non-alcoholic beverages, and furniture and household goods. </p><p>Overall, prices in the transport division rose by 0.7% in the 12 months to May 2025, down from 3.3% in the 12 months to April. On a monthly basis, prices fell by 1.8% in May 2025, compared with a rise of 0.7% a year ago. </p><p>The slowing in the annual rate reflected falls in air fares and the price of motor fuels, together with the correction of an error in the Vehicle Excise Duty (VED) series. The latter was overstated in April and the series corrected from May. As is standard practice, the April figure has not been revised. This means that transport had a contribution of 0.36 percentage points to the published CPIH annual rate in April but, without the error, the contribution would have been 0.26 percentage points. In terms of the contribution to change between April and May, transport has a downward contribution of 0.28 percentage points, which would be downward 0.18 percentage points without the error. More background information is included in <a>Section 8: Data sources and quality</a>. </p><p>Air fares fell by 5.0% between April and May 2025, compared with a large rise of 14.9% between the same months in 2024. These movements were influenced by the timing of Easter and the associated school holidays. In 2025, Easter fell in the middle of April, possibly contributing towards relatively high fares, which then fell in May. In 2024, Easter fell in late March, before the April pricing period, which may have contributed to a relatively low April figure, followed by a rise into May. </p><p>There were also downward effects, albeit smaller, from sea, rail and road transport, where again the timing of Easter may have influenced price movements. </p><p>The average price of petrol fell by 2.1 pence per litre between April and May 2025 to stand at 132.4 pence per litre, down from 148.8 pence per litre in May 2024. Diesel prices fell by 2.6 pence per litre in May 2025 to stand at 139.1 pence per litre, down from 156.3 pence per litre in May 2024. These movements resulted in overall motor fuel prices falling by 10.9% in the 12 months to May 2025, compared with a fall of 9.3% in the 12 months to April. </p><p>The 12-month inflation rate for housing and household services was 6.9% in May 2025, down from 7.0% in April. On a monthly basis, prices rose by 0.3% in May 2025, compared with a rise of 0.4% a year ago. </p><p>The easing in the 12-month rate between April and May 2025 principally reflected a downward effect from owner occupiers' housing (OOH) costs, which rose by 6.7% in the year to May 2025. This was down from 6.9% in the year to April 2025, and was the lowest 12-month rate seen since May 2024, when the rate was also 6.7%. </p><p>The downward contributions from other divisions were partially offset by an upward effect from food and non-alcoholic beverages, where prices rose by 4.4% in the 12 months to May 2025, up from 3.4% in the 12 months to April. The May 2025 figure was the highest recorded since February 2024, when the rate was 5.0% (Figure 3). </p><p>On a monthly basis, food and non-alcoholic beverages prices rose by 0.7% in May 2025, compared with a fall of 0.3% a year ago.</p><p>
|
||||
|
||||
|
||||
|
||||
|
||||
</p><p>There were upward effects to the change in the rate from 7 of the 11 food and non-alcoholic beverages classes, with the largest coming from the sugar, jam, syrups, chocolate and confectionery class. Within this, prices of chocolate, confectionery and ice cream rose between April and May this year but fell between the same two months a year ago. There was also a small upward effect from meat, where, on a monthly basis, prices rose by more in May 2025 than May 2024. </p><p>Prices of furniture and household goods overall rose by 0.8% in the 12 months to May 2025. This is the highest rate since December 2023, but it is well below the peaks seen in 2022 (Figure 4). The latest rate compares with a fall of 0.5% in the 12 months to April 2025. On a monthly basis, prices rose by 1.5% in May 2025, compared with a rise of 0.2% a year ago. </p><p>
|
||||
|
||||
|
||||
|
||||
|
||||
</p><p>The main upward contributions to the rise in the 12-month rate came from household appliances, and furniture and furnishings. In the former class, prices of items such as fridge freezers and vacuum cleaners rose in May 2025 but fell a year ago. The movement relates to the timing of sales, with the prices of some products recovering from sale this year but entering a sales period a year ago. In the furniture class, prices of bedroom furniture rose by more in May 2025 than May 2024. Again, the movement relates to recoveries from sale though there were also some general price rises for these products.</p><p>
|
||||
|
||||
|
||||
|
||||
|
||||
</p><p>Figure 5 shows the 12-month inflation rates for the Consumer Prices Index including owner occupiers’ housing costs (CPIH) series for all goods and all services, together with CPIH excluding energy, food, alcohol and tobacco (often referred to as core CPIH). The CPIH inflation rate is added for comparison. </p><p>The CPIH all goods index rose by 2.0% in the 12 months to May 2025, up from 1.7% in the 12 months to April. This is the highest rate since November 2023 when it was also 2.0%. It was last higher in October 2023. The largest upward contributions to the change in the annual rate came from non-energy industrial goods (particularly household goods), and processed and non-processed food. </p><p>The CPIH all services index rose by 5.3% in the 12 months to May 2025, down from 5.8% in the 12 months to April. This is the lowest rate seen since January 2023. The largest downward contributions to the change in the annual rate came from transport services (particularly air fares) and services for personal transport equipment (with the correction of the Vehicle Excise Duty series in May). </p><p>The core CPIH annual inflation rate was 4.2% in May 2025, down from 4.5% in April. </p><p>
|
||||
|
||||
|
||||
|
||||
|
||||
</p><p>Figure 6 shows the extent to which the distinct categories of goods and services have contributed to the overall annual CPIH inflation rate over the last two years. The contribution of each category to the annual rate depends on the price movement in that category as well as its weight, which is updated annually. </p><p>The contributions from all divisions to the annual CPIH inflation rate were positive in May 2025, with the exception of clothing and footwear. By far, the largest positive contribution came from housing and household services, which contributed 2.04 percentage points, down slightly from 2.08 percentage points in April. </p><p>The contribution from food and non-alcoholic beverages rose from 0.31 to 0.40 percentage points between April and May 2025. This was the largest contribution from this division since February 2024. The contribution from furniture and household goods, at 0.04 percentage points, was the largest since January 2024, when it was also 0.04 percentage points. The contribution was last larger in December 2023. </p><p>
|
||||
|
||||
|
||||
|
||||
|
||||
</p><p>Figure 7 shows the contributions from owner occupiers’ housing (OOH) costs and Council Tax to the annual CPIH inflation rate in the context of wider housing-related costs. The Consumer Prices Index (CPI) differs from the CPIH because it does not include these two components. </p><p>The annual contribution from OOH costs continued to slow, to 1.11 percentage points in May 2025, following a recent high of 1.31 percentage points in January 2025. </p><p>There was a small reduction in the contribution from actual rentals for housing, while other components’ contributions were little changed in May.</p><p>While the Consumer Prices Index including owner occupiers' housing costs (CPIH) is our lead and most comprehensive measure of consumer price inflation, the Consumer Prices Index (CPI) is based on a harmonised methodology developed by Eurostat. This enables international comparisons to be drawn. More information on the use cases for our consumer price inflation statistics can be found in our <a>Measuring changing prices and costs for consumers and households: December 2023 article</a>. </p><p>Figure 8 shows annual CPI inflation for the UK compared with the European Union (EU) average and selected Group of Seven (G7) countries. While the UK CPI is produced on a comparable basis with EU countries, the United States Harmonised Index of Consumer Prices (HICP) differs in some respects (see Footnote 1 to Figure 8). The UK's CPI inflation rate of 3.4% was above the first (or "flash") estimate of inflation for France (0.6%) and Germany (2.1%) in the 12 months to May 2025.
|
||||
|
||||
|
||||
|
||||
|
||||
</p><p>
|
||||
</p><table class="table">
|
||||
<caption class="table__caption">Table 3: CPI annual and monthly inflation rates by division <br><span class="table__subtitle">UK, May 2024, April 2025, and May 2025 </span></caption>
|
||||
<colgroup><col><col><col><col><col><col></colgroup>
|
||||
<tr class="table__header-row table__nowrap"><td class="align-left"></td><td class="align-left"></td><th class="align-right">CPI 12-month rate (%)</th><th class="align-right">CPI 1-month rate (%)</th></tr>
|
||||
<tr class="table__header-row table__nowrap"><td class="align-left"></td><td class="align-left"></td><th class="align-right">Apr 2025</th><th class="align-right">May 2025</th><th class="align-right">May 2024</th><th class="align-right">May 2025</th></tr>
|
||||
<tr><th class="table__nowrap align-left">CPI All items [1]</th><td class="align-left"></td><td class="align-right">3.5</td><td class="align-right">3.4</td><td class="align-right">0.3</td><td class="align-right">0.2</td></tr>
|
||||
<tr><th class="table__nowrap align-left">Food and non-alcoholic<br> beverages</th><td class="align-left"></td><td class="align-right">3.4</td><td class="align-right">4.4</td><td class="align-right">-0.3</td><td class="align-right">0.7</td></tr>
|
||||
<tr><th class="table__nowrap align-left">Alcohol and tobacco </th><td class="align-left"></td><td class="align-right">5.7</td><td class="align-right">5.4</td><td class="align-right">0.3</td><td class="align-right">0.1</td></tr>
|
||||
<tr><th class="table__nowrap align-left">Clothing and footwear </th><td class="align-left"></td><td class="align-right">-0.4</td><td class="align-right">-0.3</td><td class="align-right">0.6</td><td class="align-right">0.8</td></tr>
|
||||
<tr><th class="table__nowrap align-left">Housing and household<br> services</th><td class="align-left"></td><td class="align-right">7.8</td><td class="align-right">7.7</td><td class="align-right">0.2</td><td class="align-right">0.1</td></tr>
|
||||
<tr><th class="table__nowrap align-left">Furniture and<br> household goods</th><td class="align-left"></td><td class="align-right">-0.5</td><td class="align-right">0.8</td><td class="align-right">0.2</td><td class="align-right">1.5</td></tr>
|
||||
<tr><th class="table__nowrap align-left">Health </th><td class="align-left"></td><td class="align-right">4.3</td><td class="align-right">4.5</td><td class="align-right">0.2</td><td class="align-right">0.3</td></tr>
|
||||
<tr><th class="table__nowrap align-left">Transport [1]</th><td class="align-left"></td><td class="align-right">3.3</td><td class="align-right">0.7</td><td class="align-right">0.7</td><td class="align-right">-1.8</td></tr>
|
||||
<tr><th class="table__nowrap align-left">Communication </th><td class="align-left"></td><td class="align-right">5.8</td><td class="align-right">4.5</td><td class="align-right">1.0</td><td class="align-right">-0.2</td></tr>
|
||||
<tr><th class="table__nowrap align-left">Recreation and culture </th><td class="align-left"></td><td class="align-right">3.1</td><td class="align-right">3.2</td><td class="align-right">0.2</td><td class="align-right">0.3</td></tr>
|
||||
<tr><th class="table__nowrap align-left">Education </th><td class="align-left"></td><td class="align-right">7.5</td><td class="align-right">7.5</td><td class="align-right">0.0</td><td class="align-right">0.0</td></tr>
|
||||
<tr><th class="table__nowrap align-left">Restaurants and hotels </th><td class="align-left"></td><td class="align-right">2.7</td><td class="align-right">2.8</td><td class="align-right">0.7</td><td class="align-right">0.8</td></tr>
|
||||
<tr><th class="table__nowrap align-left">Miscellaneous goods<br> and services</th><td class="align-left"></td><td class="align-right">2.5</td><td class="align-right">2.8</td><td class="align-right">0.1</td><td class="align-right">0.4</td></tr>
|
||||
<tr><td class="align-left"></td><td class="align-left"></td><td class="align-right"></td><td class="align-right"></td><td class="align-right"></td><td class="align-right"></td></tr>
|
||||
<tr><th class="table__nowrap align-left">All goods</th><td class="align-left"></td><td class="align-right">1.7</td><td class="align-right">2.0</td><td class="align-right">0.0</td><td class="align-right">0.4</td></tr>
|
||||
<tr><th class="table__nowrap align-left">All services [1]</th><td class="align-left"></td><td class="align-right">5.4</td><td class="align-right">4.7</td><td class="align-right">0.6</td><td class="align-right">-0.1</td></tr>
|
||||
<tr><th class="table__nowrap align-left">CPI exc food, energy, <br>alcohol and tobacco (core CPI) [1]</th><td class="align-left"></td><td class="align-right">3.8</td><td class="align-right">3.5</td><td class="align-right">0.5</td><td class="align-right">0.2</td></tr>
|
||||
</table><p>
|
||||
|
||||
|
||||
|
||||
|
||||
</p><p>Figure 9 shows the 12-month inflation rates for the CPI all goods and all services series, together with CPI excluding energy, food, alcohol and tobacco (often referred to as core CPI). The headline CPI inflation rate is added for comparison. </p><p>The CPI all goods index rose by 2.0% in the 12 months to May 2025, up from 1.7% in the 12 months to April. This is the highest rate since November 2023 when it was also 2.0%. It was last higher in October 2023.</p><p>The CPI all services index rose by 4.7% in the 12 months to May 2025, down from 5.4% in the 12 months to April. </p><p>Core CPI rose by 3.5% in the 12 months to May 2025, down from 3.8% in the 12 months to April. </p><p>As with the all-items annual inflation rates, the drivers of CPIH and CPI goods and services inflation are the same (with the exception of owner occupiers' housing (OOH) costs and Council Tax, which are excluded from CPI). The drivers are discussed in more detail in <a>Section 4: Latest movements in CPIH inflation</a>.</p><p>
|
||||
|
||||
|
||||
|
||||
|
||||
</p><p>Figure 10 shows how each of the main groups of goods and services contributed to the change in the annual CPI inflation rate between April and May 2025. </p><p>The slight change in the rate into May 2025 reflected downward contributions from four divisions, partially offset by upward contributions from five divisions. The largest downward contribution came from transport. The largest, partially offsetting, upward contributions came from food and non-alcoholic beverages, and furniture and household goods. </p><p>Although the sizes of the contributions differ from CPIH, the main drivers to the change are the same where they are common to both measures. </p><p>
|
||||
|
||||
|
||||
|
||||
|
||||
</p><p>Figure 11 shows the extent to which the distinct categories of goods and services have contributed to the overall annual CPI inflation rate over the last two years. </p><p>The CPIH includes extra housing components not included in the CPI. This can sometimes result in the largest contributions to the annual CPI and CPIH inflation rates coming from different divisions. However, in May 2025, housing and household services was the largest-contributing division to both measures, with a 0.97 percentage point contribution to the CPI rate and 2.04 percentage points to the CPIH rate. OOH costs had a large upward contribution to housing and household services in the CPIH but are excluded from the CPI. </p><p></p><p></p><p><a>Consumer price inflation tables</a><br> Dataset | Released 18 June 2025 <br> Measures of monthly UK inflation data including the Consumer Prices Index including owner occupiers' housing costs (CPIH), Consumer Prices Index (CPI) and Retail Prices Index (RPI). These tables complement the consumer price inflation time series dataset. Please note that from publication on 26 March 2025, we have published fewer tables to avoid duplication and to remove discontinued series. Tables 39 and 40 detail which tables are no longer published and provide alternative sources for where the content in those tables can be found, if available. </p><p><a>Consumer price inflation time series</a> <br> Dataset MM23 | Released 18 June 2025 <br> Comprehensive database of time series covering measures of inflation data for the UK including the CPIH, CPI and RPI. </p><p><a>Consumer price inflation detailed briefing note</a><br> Dataset | Released 18 June 2025 <br> The consumer price inflation detailed briefing note contains details of the items contributing to the changes in the CPIH, details of any notable movements, a summary of the reconciliation of CPIH and RPI, and the outlook, which looks ahead to next month's release. </p><p><a>Consumer price inflation consumption segment indices and price quotes</a> <br> Dataset | Released 18 June 2025 <br> Price quote data (for locally collected data only) and consumption segment indices (that underpin consumer price inflation statistics) are published, giving users access to the detailed data that are used in the construction of the UK's inflation figures. Note that this dataset was previously called the consumer price inflation item indices and price quotes dataset. </p><p><a>Contributions to the 12-month rate of CPI(H) by import intensity</a> <br> Dataset | Released 18 June 2025 <br> A time series of the contributions to the CPIH and CPI annual rates broken down by the import intensity of household purchases. </p><p>The most common approach to measuring inflation is the 12-month or annual inflation rate, which compares prices for the latest month with the same month a year ago. In any given month, the annual rate is determined by the balance between upward and downward price movements across the range of goods and services included in the index. </p><p>Consumer price inflation is the rate at which the prices of goods and services bought by households rise or fall. It is estimated by using price indices. For an overview of the range of indices available and their uses, please see our <a>Consumer price indices, a brief guide: 2017</a> and our <a>Measuring changing prices and costs for consumers and households: December 2023 article</a>. </p><p>The Consumer Prices Index including owner occupiers' housing costs (CPIH) is the most comprehensive measure of inflation. It extends the Consumer Prices Index (CPI) to include a measure of the costs associated with owning, maintaining and living in one's own home, known as owner occupiers' housing (OOH) costs, along with Council Tax. Both are significant expenses for many households and are not included in the CPI. </p><p>The CPI is a measure of consumer price inflation produced to international standards, and is based on European regulations for the <a>Harmonised Index of Consumer Prices</a>. The CPI is the inflation measure used in the government's target for inflation. </p><p>The CPI is produced at the same level of detail as the CPIH in our <a>accompanying dataset</a> and <a>accompanying data time series</a>. </p><p>OOH costs are the costs of housing services associated with owning, maintaining and living in one's own home. </p><p>The Retail Prices Index (RPI) does not meet the required standard for designation as an <a>accredited official statistic</a>. In recognition that it continues to be widely used in contracts, we continue to publish the RPI, its subcomponents, and RPI excluding mortgage interest payments (RPIX). To view the all-items RPI, please see the <a>data time series section of the Inflation and price indices area of our website</a>. The annual RPI inflation rate was 4.3% in May 2025. </p><p>The UK Statistics Authority (The Authority) and HM Treasury launched a consultation in 2020 on The AuthLine truncated
|
||||
+188
@@ -0,0 +1,188 @@
|
||||
<html><head></head><body><h1 class="padding-bottom--0 padding-top--0 margin-top--2 font-weight-700 margin-bottom--2 ">GDP first quarterly estimate, UK: April to June 2026</h1><p class="page-bulletins--Summary margin-right-md--2 margin-bottom--3 padding-bottom--0 padding-top--0">
|
||||
|
||||
|
||||
First quarterly estimate of gross domestic product (GDP). Contains current and constant price data on the value of goods and services to indicate the economic performance of the UK.
|
||||
|
||||
</p><p class="alert-release-banner__title">This is the latest release.
|
||||
<a>View previous releases</a>
|
||||
</p><p class="col col--md-12 col--lg-15 margin-bottom-sm--1 margin-bottom-md--3 margin-top-sm--1 padding-bottom--0 padding-top--0">
|
||||
<span class="font-weight-700">Contact: </span><br><a class="text--white"><span class="visuallyhidden">Email </span>Gross Domestic Product team</a>
|
||||
</p><p class="col col--md-one-third col--lg-one-third margin-bottom-sm--1 margin-bottom-md--3 margin-top--0 padding-bottom--0 padding-top--0">
|
||||
<span class="font-weight-700">Release date: </span><br>13 August 2026<br>
|
||||
|
||||
</p><p class="col col--md-one-third col--lg-one-third margin-bottom-sm--3 margin-bottom-md--3 margin-top--0 padding-bottom--0 padding-top--0">
|
||||
<span class="font-weight-700">Next release: </span><br>30 September 2026
|
||||
</p><p class="text-right--md padding-top-md--0 padding-bottom-md--0 height--5 margin-bottom-md--0 print--hide nojs--hide js--show">
|
||||
<a class="link-complex nojs--hide js--show js-print-page">
|
||||
Print this <span class="lowercase">
|
||||
Statistical bulletin
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
</a>
|
||||
<span class="icon icon-print--dark"></span>
|
||||
</p><p class="text-right--md padding-top-md--0 padding-bottom-md--0 height--5 margin-top-md--1 print--hide">
|
||||
<a class="link-complex js-pdf-dl-link">
|
||||
Download as PDF
|
||||
</a>
|
||||
<span class="icon icon-download--dark"></span>
|
||||
</p><p>UK real gross domestic product (GDP) is estimated to have increased by 0.4% in Quarter 2 (Apr to June) 2026, following growth of 0.6% in Quarter 1 (Jan to Mar) 2026 (Figure 1). GDP is estimated to be 1.2% higher in Quarter 2 2026, compared with the same quarter a year ago.</p><p>Our <a>monthly GDP figures</a> published today also show that GDP grew by 0.3% in June 2026, after showing no growth in May 2026 (revised down from a growth of 0.1% in our previous publication) and following an unrevised fall of 0.1% in April 2026.</p><p><a>Early estimates of GDP are subject to revision</a> (positive or negative). Our recently published analysis shows that since Quarter 1 2000 there is a mean revision of positive 0.08 percentage points between the first estimate and the final estimate, which is published three years later. The mean absolute revision between the first and final estimates is 0.27 percentage points.</p><p>We make revisions when more detailed information becomes available through the comprehensive annual supply and use balancing process, as the data content increases. For more information, please see our <a>GDP revisions in Blue Book: 2025 article</a> and our <a>Managing the trade-off between timeliness and accuracy in producing our best estimates of GDP blog</a>.</p><p>The GDP growth vintages from 2025 onwards are shown in Table 4. We give more information on <a>uncertainty</a> in <a>Section 11: Data sources and quality</a>.</p><p>
|
||||
|
||||
|
||||
|
||||
|
||||
</p><p>Real GDP per head is estimated to have increased by 0.4% in Quarter 2 2026, and is up 1.0% compared with the same quarter a year ago. For more information, see <a>Section 6: Real GDP per head</a>.</p><p>
|
||||
</p><table class="table">
|
||||
<caption class="table__caption">Table 1: Headline national accounts indicators for the UK <br><span class="table__subtitle">% growth</span></caption>
|
||||
<colgroup><col><col><col><col><col></colgroup>
|
||||
<tr class="table__header-row"><td class="align-left"></td><th class="align-right">GDP (Chained volume measures)</th><th class="align-right">GDP per head (Chained volume measures) [Note 3]</th><th class="align-right">GDP (Current market prices)</th><th class="align-right">GDP implied deflator</th></tr>
|
||||
<tr><th class="align-left">Seasonally adjusted</th><td class="align-right"></td><td class="align-right"></td><td class="align-right"></td><td class="align-right"></td></tr>
|
||||
<tr><td class="align-left"></td><td class="align-right"></td><td class="align-right"></td><td class="align-right"></td><td class="align-right"></td></tr>
|
||||
<tr><th class="align-left">2025</th><td class="align-right">1.3</td><td class="align-right">1.0</td><td class="align-right">5.0</td><td class="align-right">3.6</td></tr>
|
||||
<tr><td class="align-left"></td><td class="align-right"></td><td class="align-right"></td><td class="align-right"></td><td class="align-right"></td></tr>
|
||||
<tr><th class="align-left">Q1 2025</th><td class="align-right">0.6</td><td class="align-right">0.5</td><td class="align-right">1.4</td><td class="align-right">0.8</td></tr>
|
||||
<tr><th class="align-left">Q2 2025</th><td class="align-right">0.2</td><td class="align-right">0.1</td><td class="align-right">1.1</td><td class="align-right">1.0</td></tr>
|
||||
<tr><th class="align-left">Q3 2025</th><td class="align-right">0.1</td><td class="align-right">0.0</td><td class="align-right">0.9</td><td class="align-right">0.8</td></tr>
|
||||
<tr><th class="align-left">Q4 2025</th><td class="align-right">0.1</td><td class="align-right">0.0</td><td class="align-right">0.6</td><td class="align-right">0.6</td></tr>
|
||||
<tr><th class="align-left">Q1 2026</th><td class="align-right">0.6</td><td class="align-right">0.6</td><td class="align-right">1.7</td><td class="align-right">1.1</td></tr>
|
||||
<tr><th class="align-left">Q2 2026</th><td class="align-right">0.4</td><td class="align-right">0.4</td><td class="align-right">0.8</td><td class="align-right">0.4</td></tr>
|
||||
</table><p>Nominal GDP is estimated to have increased by 0.8% in Quarter 2 2026 and is now 4.1% higher than it was in the same quarter a year ago.</p><p>The implied GDP deflator is the broadest measure of inflation in the domestic economy, reflecting changes in the price of all goods and services that make up GDP. The GDP deflator covers the whole of the domestic economy, not just consumer spending. It also reflects the change in the relative price of exports to imports. For more information on the implied GDP deflator, see our <a>Measuring price changes of the UK national accounts: February 2023 article</a>.</p><p>Compared with the same quarter a year ago, the GDP implied deflator increased by 2.9% in Quarter 2 2026, mainly caused by household expenditure, exports, and gross capital formation (Figure 2).</p><p>
|
||||
|
||||
|
||||
|
||||
|
||||
</p><p>Output is estimated to have increased by 0.4% in Quarter 2 (Apr to June) 2026, following an increase of 0.6% in Quarter 1 (Jan to Mar) 2026. Overall, there were increases in 15 out of 20 subsectors of GDP in the latest quarter.</p><p>In Quarter 2 2026, the services sector increased by 0.5%, while the construction sector increased by 0.3% and the production sector showed no growth.</p><p>Our <a>monthly GDP figures</a> published today also show that GDP grew by 0.3% in June 2026, after showing no growth in May 2026 (revised down from a growth of 0.1% in our previous publication) and following an unrevised fall of 0.1% in April 2026.</p><p>Services output increased by 0.5% in Quarter 2 2026, following an increase of 0.8% in Quarter 1 2026. Services output is estimated to be 1.5% higher than it was in the same quarter a year ago.</p><p>In Quarter 2 2026, non-consumer-facing services (business-facing services) grew by 0.5%, while consumer-facing services grew by 0.3%.</p><p>Figure 3 shows that 8 of the 14 services subsectors contributed positively to services growth in Quarter 2 2026. The largest positive contributors to growth were information and communication, and professional, scientific and technical activities.</p><p>In Quarter 2 2026, information and communication was up 2.7%, mainly driven by a growth of 3.7% in computer programming, consultancy and related activities. Professional, scientific and technical activities was up 1.7%, driven by growths in advertising and market research (up 4.3%), scientific research and development (up 3.9%), and legal activities (up 2.5%).</p><p>The largest negative contributor to growth in Quarter 2 2026 was administrative and support service activities, which fell by 0.9%, mainly because of falls of 2.8% in office administrative, office support, and other business support activities, as well as falls of 7.9% in security and investigation activities.</p><p>
|
||||
|
||||
|
||||
|
||||
|
||||
</p><p>The production sector is estimated to have shown no growth in Quarter 2 2026, following a 0.2% increase in the previous quarter. Production output is estimated to be 0.3% higher than it was in the same quarter a year ago.</p><p>Within production, there were increases of 1.0% and 0.2% in manufacturing and mining and quarrying, respectively. These were offset by falls in electricity, gas, steam, and air conditioning supply, which fell by 2.3%, and in water supply; sewerage, waste management, and remediation activities, which fell by 3.7% in Quarter 2 2026.</p><p>Looking at the manufacturing sector in more detail, 7 out of 13 manufacturing subsectors contributed positively to manufacturing growth in the latest quarter (Figure 4). The largest positive contribution to the growth was the manufacture of basic pharmaceutical products and pharmaceutical preparations (up 4.2%).</p><p>
|
||||
|
||||
|
||||
|
||||
|
||||
</p><p>Construction output is estimated to have increased by 0.3% in Quarter 2 2026, but remains 2.0% lower compared with the same quarter a year ago. Both new work and repair and maintenance grew over the period, increasing by 0.4% and 0.2%, respectively. Within new work, the largest positive contribution came from infrastructure new work, which grew by 1.9%. In repair and maintenance, the largest positive contribution came from public housing repair and maintenance, which grew by 2.5%.</p><p>Further detail on construction output growth rates can be found in our <a>Construction output in Great Britain: June 2026, new orders and Construction Output Price Indices, April to June 2026 bulletin</a>.</p><p>Expenditure is estimated to have grown by 0.4% in Quarter 2 (Apr to June) 2026, mainly because of increases in gross fixed capital formation and household consumption (Figure 5).</p><p>
|
||||
|
||||
|
||||
|
||||
|
||||
</p><p>There was a 0.3% increase in real household final consumption expenditure in Quarter 2 2026, and it is now estimated to be up by 1.0% compared with the same quarter a year ago.</p><p>Within household consumption in the latest quarter, growth was caused by increases in nearly all main categories, with the largest contributions coming from recreation and culture, and household goods and services.</p><p>Net tourism made a negative contribution to growth in household consumption in the latest quarter. Net tourism is offset within trade, so there is no effect on the gross domestic product (GDP) aggregate. Information on how we measure net tourism is provided in our <a>National Accounts articles: Treatment of tourism in the UK National Accounts article</a>. Excluding net tourism, domestic consumption grew by 0.4% in the latest quarter.</p><p>Real government consumption expenditure fell by 0.3% in Quarter 2 2026, and is now estimated to be 1.4% higher than it was in the same quarter a year ago.</p><p>The fall in government consumption in the latest quarter mainly reflects declines in health and education. The decline in education may be because of the closure of some schools during the heatwave conditions seen across much of the UK in June.</p><p>Within gross capital formation, gross fixed capital formation (GFCF) is now estimated to have increased by 1.2% in Quarter 2 2026, and to be 2.7% higher than it was in the same quarter a year ago. The main drivers of the growth are increases in information and communication technology, and other machinery and equipment, especially hardware investment.</p><p>Within GFCF, business investment is estimated to have increased by 1.7% in the latest quarter and is now estimated to be 0.8% higher than it was in the same quarter a year ago.</p><p>Excluding the alignment adjustments, early estimates show that chained volume inventories fell by £1,382 million in Quarter 2 2026 (Table 2), mainly because of a reduction in manufacturing inventories.</p><p>
|
||||
</p><table class="table">
|
||||
<caption class="table__caption">Table 2: Change in inventories, including and excluding balancing and alignment adjustments <br><span class="table__subtitle">UK, Quarter 1 (Jan to Mar) 2025 to Quarter 2 (Apr to June) 2026</span></caption>
|
||||
<colgroup><col><col><col><col><col><col></colgroup>
|
||||
<tr class="table__header-row"><td class="align-left"></td><td class="align-left"></td><th class="align-right">Change in Inventories</th><th class="align-right">Of which alignment</th><th class="align-right">Of which balancing</th><th class="align-right">Change in Inventories excluding alignment and balancing</th></tr>
|
||||
<tr><th class="align-left">Q1 2025</th><th class="align-left">Current price</th><td class="align-right">1529</td><td class="align-right">-562</td><td class="align-right">0</td><td class="align-right">2091</td></tr>
|
||||
<tr><th class="align-left">Q1 2025</th><th class="align-left">Chained volume measure</th><td class="align-right">1279</td><td class="align-right">-537</td><td class="align-right">0</td><td class="align-right">1816</td></tr>
|
||||
<tr><th class="align-left">Q2 2025</th><th class="align-left">Current price</th><td class="align-right">1575</td><td class="align-right">1876</td><td class="align-right">0</td><td class="align-right">-301</td></tr>
|
||||
<tr><th class="align-left">Q2 2025</th><th class="align-left">Chained volume measure</th><td class="align-right">2886</td><td class="align-right">1744</td><td class="align-right">0</td><td class="align-right">1142</td></tr>
|
||||
<tr><th class="align-left">Q3 2025</th><th class="align-left">Current price</th><td class="align-right">958</td><td class="align-right">750</td><td class="align-right">0</td><td class="align-right">208</td></tr>
|
||||
<tr><th class="align-left">Q3 2025</th><th class="align-left">Chained volume measure</th><td class="align-right">1050</td><td class="align-right">691</td><td class="align-right">0</td><td class="align-right">359</td></tr>
|
||||
<tr><th class="align-left">Q4 2025</th><th class="align-left">Current price</th><td class="align-right">-2228</td><td class="align-right">-2064</td><td class="align-right">500</td><td class="align-right">-664</td></tr>
|
||||
<tr><th class="align-left">Q4 2025</th><th class="align-left">Chained volume measure</th><td class="align-right">-1589</td><td class="align-right">-1898</td><td class="align-right">0</td><td class="align-right">309</td></tr>
|
||||
<tr><th class="align-left">Q1 2026</th><th class="align-left">Current price</th><td class="align-right">3675</td><td class="align-right">-2113</td><td class="align-right">0</td><td class="align-right">5788</td></tr>
|
||||
<tr><th class="align-left">Q1 2026</th><th class="align-left">Chained volume measure</th><td class="align-right">1680</td><td class="align-right">-1921</td><td class="align-right">-1000</td><td class="align-right">4601</td></tr>
|
||||
<tr><th class="align-left">Q2 2026</th><th class="align-left">Current price</th><td class="align-right">1641</td><td class="align-right">3049</td><td class="align-right">500</td><td class="align-right">-1908</td></tr>
|
||||
<tr><th class="align-left">Q2 2026</th><th class="align-left">Chained volume measure</th><td class="align-right">1880</td><td class="align-right">2762</td><td class="align-right">500</td><td class="align-right">-1382</td></tr>
|
||||
</table><p>The UK's trade deficit for goods and services is now estimated at 2.1% of nominal GDP in Quarter 2 2026. However, this includes <a>non-monetary gold</a> and other precious metals, which is an erratic series. It can be useful to exclude this from the trade balance.</p><p>Excluding non-monetary gold and other precious metals, the trade deficit is now estimated at 1.0% of nominal GDP in Quarter 2 2026 (Figure 6).</p><p>
|
||||
|
||||
|
||||
|
||||
|
||||
</p><p>Export volumes increased by 0.5% in the latest quarter and are now 2.4% higher than they were in the same quarter a year ago.</p><p>The increase in the latest quarter was mainly caused by a 0.1% growth in goods exports, and a 0.8% increase in services exports. Within goods exports, the growth was mainly caused by increases in chemicals. The growth in services exports was mainly because of other business service activities and transport.</p><p>Import volumes are estimated to have increased by 0.5% in the latest quarter and are now 2.9% higher than they were in the same quarter a year ago. Goods imports increased by 0.6%, mainly because of increases in fuels. Services imports increased by 0.3%, mainly because of transportation and intellectual property.</p><p>Nominal gross domestic product (GDP) grew by 0.8% in Quarter 2 (Apr to June) 2026 and is up 4.1% compared with the same quarter a year ago. Growth in nominal GDP in the latest quarter was mainly driven by an increase in gross operating surplus (Figure 7).</p><p>
|
||||
|
||||
|
||||
|
||||
|
||||
</p><p>Compensation of employees increased by 0.2% in the latest quarter and is up 5.3% compared with the same quarter a year ago. Growth in Quarter 2 2026 was caused by an increase of 0.7% in wages and salaries, which offset a 1.7% fall in employers' social contributions.</p><p>Early estimates of private sector wages and salaries are based on estimates of the number of employees in the economy, from our Labour Force Survey (LFS), and average earnings from our average weekly earnings statistics. </p><p>However, we continue to use additional information, including from our <a>Earnings and employment from Pay As You Earn (PAYE) Real Time Information UK bulletin</a>. This helps us improve both the accuracy of the income measure of GDP and its coherence with related statistics, such as those in the Sector Accounts.</p><p>Other income is now estimated to have increased by 0.2% in the latest quarter and is 3.8% higher than it was in the same quarter a year ago. Growth in the latest quarter was caused by an increase in household gross operating surplus.</p><p>Taxes less subsidies are estimated to have fallen by 1.8% in Quarter 2 2026 and are now 4.0% higher than they were in the same quarter a year ago.</p><p>There was a 0.1% fall in taxes and a 15.6% increase in subsidies, which contribute negatively to GDP. The 15.6% increase in subsidies was mainly because of other economic and service subsidies (energy) and housing equity injection.</p><p>Total gross operating surplus (GOS) of corporations, excluding the alignment adjustment, increased by 1.9% in Quarter 2 2026 (Table 3). This is mainly because of an increase in private non-financial corporations (PNFC).</p><p>Estimates of non-financial corporations within the GOS of corporations remains subject to uncertainty. This is because we do not have up-to-date quarterly information on the gross trading profits of businesses. These data are collected from HM Revenue and Customs (HMRC) and are available with a lag of approximately two years. We rely on contextual data from other sources to inform these quarterly estimates, as outlined in our <a>Profitability of UK companies quality and methodology information (QMI)</a>.</p><p>
|
||||
</p><table class="table">
|
||||
<caption class="table__caption">Table 3: Gross operating surplus of corporations, including and excluding alignment adjustments <br><span class="table__subtitle">UK, Quarter 1 (Jan to Mar) 2025 to Quarter 2 (Apr to June) 2026</span></caption>
|
||||
<colgroup><col><col><col><col><col></colgroup>
|
||||
<tr class="table__header-row"><td class="align-left"></td><th class="align-right">Gross operating surplus of corporations</th><th class="align-right">Of which alignment</th><th class="align-right">Gross operating surplus of corporations excluding alignment </th><th class="align-right">Gross operating surplus of corporations excluding alignment </th></tr>
|
||||
<tr class="table__header-row"><td class="align-left"></td><td class="align-right"></td><td class="align-right"></td><td class="align-right"></td><th class="align-right">Quarter-on-quarter growth</th></tr>
|
||||
<tr><th class="align-left">Q1 2025</th><td class="align-right">160239</td><td class="align-right">-1104</td><td class="align-right">161343</td><td class="align-right">-0.7</td></tr>
|
||||
<tr><th class="align-left">Q2 2025</th><td class="align-right">167734</td><td class="align-right">2823</td><td class="align-right">164911</td><td class="align-right">2.2</td></tr>
|
||||
<tr><th class="align-left">Q3 2025</th><td class="align-right">165079</td><td class="align-right">1163</td><td class="align-right">163916</td><td class="align-right">-0.6</td></tr>
|
||||
<tr><th class="align-left">Q4 2025</th><td class="align-right">163310</td><td class="align-right">-2882</td><td class="align-right">166192</td><td class="align-right">1.4</td></tr>
|
||||
<tr><th class="align-left">Q1 2026</th><td class="align-right">164459</td><td class="align-right">-2762</td><td class="align-right">167221</td><td class="align-right">0.6</td></tr>
|
||||
<tr><th class="align-left">Q2 2026</th><td class="align-right">170760</td><td class="align-right">366</td><td class="align-right">170394</td><td class="align-right">1.9</td></tr>
|
||||
</table><p>We produce estimates of gross domestic product (GDP) per head (or per capita), which divides UK GDP by the total UK population. This is one proxy indicator of welfare, rather than production, which reflects a country's living standards. It captures the volume of goods and services available to the average person. Further information on this is available in our <a>Trends in UK real GDP per head: 2022 to 2024 article</a>.</p><p>Real GDP per head is estimated to have increased by 0.4% in Quarter 2 2026 and is up 1.0% compared with the same quarter a year ago. There have been some small revisions to GDP per head figures from 2021 onwards, reflecting revisions to population estimates.</p><p>Population figures for up to mid-2021 are based on our <a>mid-year UK population estimates</a>, published on 26 September 2025. Population figures for mid-2021 to mid-2025 are based on:</p><p><a>Population estimates for England and Wales: mid-2025</a>, published on 29 July 2026</p><p><a>Population estimates for mid-2022 to mid-2025 for Scotland</a>, published on 14 July 2026</p><p><a>Population estimates for mid-2022 to mid-2024 for Northern Ireland</a>, published on 11 September 2025</p><p><a>National population projections: 2024-based</a>, published on 28 April 2026</p><p>Population figures for Quarter 3 (July to Sept) 2025 to Quarter 1 (Jan to Mar) 2026 are based on an interpolation between mid-year estimates (projection for Northern Ireland) and our <a>2024-based national population projections</a>, published on 28 April 2026, using the principal variant. Figures for Quarter 2 (Apr to June) 2026 are based on our 2024-based national population projections.</p><p>
|
||||
|
||||
|
||||
|
||||
|
||||
</p><p>There are no revisions to previously published gross domestic product (GDP) data in this quarterly release, in line with our <a>National Accounts Revisions Policy</a>. Data revisions from 1997 to 2024 will be published in our upcoming <a>Blue Book 2026: GDP impacts and expenditure components article</a>, on 20 August 2026. Any additional updates to data from 2025 onwards will be published in our upcoming <a>Quarterly national accounts bulletin</a>, publishing on 30 September 2026.</p><p>Early estimates of GDP are subject to positive or negative revision, as described in our <a>Why GDP figures are revised article</a>. For more information, please refer to our <a>GDP revisions in Blue Book: 2025 article</a>, published on 31 October 2025. The GDP growth vintages to 1 decimal place are shown in Table 4.</p><p>
|
||||
</p><table class="table">
|
||||
<caption class="table__caption">Table 4: Quarter-on-quarter growth for real GDP at different publication vintages <br><span class="table__subtitle">Quarter 1 (Jan to Mar) 2025 to Quarter 2 (Apr to June) 2026</span></caption>
|
||||
<colgroup><col><col><col><col><col><col><col></colgroup>
|
||||
<tr class="table__header-row"><th class="align-left">Relating to Period</th><th class="align-right">Q1 2025</th><th class="align-right">Q2 2025</th><th class="align-right">Q3 2025</th><th class="align-right">Q4 2025</th><th class="align-right">Q1 2026</th><th class="align-right">Q2 2026</th></tr>
|
||||
<tr><th class="align-left">May 2025</th><td class="align-right">0.7</td><td class="align-right"></td><td class="align-right"></td><td class="align-right"></td><td class="align-right"></td><td class="align-right"></td></tr>
|
||||
<tr><th class="align-left">Jun 2025</th><td class="align-right">0.7</td><td class="align-right"></td><td class="align-right"></td><td class="align-right"></td><td class="align-right"></td><td class="align-right"></td></tr>
|
||||
<tr><th class="align-left">Aug 2025</th><td class="align-right">0.7</td><td class="align-right">0.3</td><td class="align-right"></td><td class="align-right"></td><td class="align-right"></td><td class="align-right"></td></tr>
|
||||
<tr><th class="align-left">Sept 2025</th><td class="align-right">0.7</td><td class="align-right">0.3</td><td class="align-right"></td><td class="align-right"></td><td class="align-right"></td><td class="align-right"></td></tr>
|
||||
<tr><th class="align-left">Nov 2025</th><td class="align-right">0.7</td><td class="align-right">0.3</td><td class="align-right">0.1</td><td class="align-right"></td><td class="align-right"></td><td class="align-right"></td></tr>
|
||||
<tr><th class="align-left">Dec 2025</th><td class="align-right">0.7</td><td class="align-right">0.2</td><td class="align-right">0.1</td><td class="align-right"></td><td class="align-right"></td><td class="align-right"></td></tr>
|
||||
<tr><th class="align-left">Feb 2026</th><td class="align-right">0.7</td><td class="align-right">0.2</td><td class="align-right">0.1</td><td class="align-right">0.1</td><td class="align-right"></td><td class="align-right"></td></tr>
|
||||
<tr><th class="align-left">Mar 2026</th><td class="align-right">0.7</td><td class="align-right">0.2</td><td class="align-right">0.1</td><td class="align-right">0.1</td><td class="align-right"></td><td class="align-right"></td></tr>
|
||||
<tr><th class="align-left">May 2026</th><td class="align-right">0.6</td><td class="align-right">0.1</td><td class="align-right">0.2</td><td class="align-right">0.2</td><td class="align-right">0.6</td><td class="align-right"></td></tr>
|
||||
<tr><th class="align-left">Jun 2026</th><td class="align-right">0.6</td><td class="align-right">0.2</td><td class="align-right">0.1</td><td class="align-right">0.1</td><td class="align-right">0.6</td><td class="align-right"></td></tr>
|
||||
<tr><th class="align-left">Latest estimate: Aug 2026</th><td class="align-right">0.6</td><td class="align-right">0.2</td><td class="align-right">0.1</td><td class="align-right">0.1</td><td class="align-right">0.6</td><td class="align-right">0.4</td></tr>
|
||||
<tr><th class="align-left">Total revision between first and latest estimate</th><td class="align-right">-0.1</td><td class="align-right">-0.1</td><td class="align-right">0.0</td><td class="align-right">0.0</td><td class="align-right">0.0</td><td class="align-right">..</td></tr>
|
||||
</table><p>
|
||||
</p><table class="table">
|
||||
<caption class="table__caption">Table 5: Real GDP growth for the G7 economies <br><span class="table__subtitle">Percentage change, quarter-on-quarter and annual growth, real gross domestic product (GDP) for 2025 and 2026</span></caption>
|
||||
<colgroup><col><col><col><col><col><col><col><col></colgroup>
|
||||
<tr class="table__header-row"><td class="align-left"></td><th class="align-center">Quarter on previous quarter (%)</th><th class="align-right">Annual (%)</th></tr>
|
||||
<tr class="table__header-row"><th class="align-left">Country</th><th class="align-right">Q1 2025</th><th class="align-right">Q2 2025</th><th class="align-right">Q3 2025</th><th class="align-right">Q4 2025</th><th class="align-right">Q1 2026</th><th class="align-right">Q2 2026</th><th class="align-right">2025</th></tr>
|
||||
<tr><th class="align-left">Canada</th><td class="align-right">0.7</td><td class="align-right">-0.2</td><td class="align-right">0.5</td><td class="align-right">-0.2</td><td class="align-right">0.0</td><td class="align-right">0.8</td><td class="align-right">1.9</td></tr>
|
||||
<tr><th class="align-left">France</th><td class="align-right">0.2</td><td class="align-right">0.2</td><td class="align-right">0.4</td><td class="align-right">0.3</td><td class="align-right">-0.1</td><td class="align-right">0.2</td><td class="align-right">0.9</td></tr>
|
||||
<tr><th class="align-left">Germany</th><td class="align-right">0.1</td><td class="align-right">0.0</td><td class="align-right">0.0</td><td class="align-right">0.3</td><td class="align-right">0.4</td><td class="align-right">0.2</td><td class="align-right">0.3</td></tr>
|
||||
<tr><th class="align-left">Italy</th><td class="align-right">0.3</td><td class="align-right">0.0</td><td class="align-right">0.2</td><td class="align-right">0.3</td><td class="align-right">0.3</td><td class="align-right">0.2</td><td class="align-right">0.7</td></tr>
|
||||
<tr><th class="align-left">Japan</th><td class="align-right">0.5</td><td class="align-right">0.3</td><td class="align-right">-0.6</td><td class="align-right">0.2</td><td class="align-right">0.5</td><td class="align-right">..</td><td class="align-right">1.1</td></tr>
|
||||
<tr><th class="align-left">UK</th><td class="align-right">0.6</td><td class="align-right">0.2</td><td class="align-right">0.1</td><td class="align-right">0.1</td><td class="align-right">0.6</td><td class="align-right">0.4</td><td class="align-right">1.3</td></tr>
|
||||
<tr><th class="align-left">United States</th><td class="align-right">-0.2</td><td class="align-right">0.9</td><td class="align-right">1.1</td><td class="align-right">0.1</td><td class="align-right">0.5</td><td class="align-right">0.4</td><td class="align-right">2.1</td></tr>
|
||||
</table><p>
|
||||
</p><table class="table">
|
||||
<caption class="table__caption">Table 6: Real GDP per head growth for the G7 economies <br><span class="table__subtitle">Percentage change, quarter-on-quarter and annual growth, real gross domestic product (GDP) per head for 2025 and 2026</span></caption>
|
||||
<colgroup><col><col><col><col><col><col><col><col></colgroup>
|
||||
<tr class="table__header-row"><td></td><th class="align-center">Quarter on previous quarter (%)</th><th>Annual (%)</th></tr>
|
||||
<tr class="table__header-row"><th>Country</th><th>2025 Q1</th><th>2025 Q2</th><th>2025 Q3</th><th>2025 Q4</th><th>2026 Q1</th><th>Q2 2026</th><th>2025</th></tr>
|
||||
<tr><th>Canada</th><td>0.5</td><td>-0.3</td><td>0.4</td><td>-0.1</td><td>0.2</td><td>..</td><td>0.7</td></tr>
|
||||
<tr><th>France</th><td>0.1</td><td>0.2</td><td>0.4</td><td>0.2</td><td>-0.2</td><td>..</td><td>0.6</td></tr>
|
||||
<tr><th>Germany</th><td>0.1</td><td>0.0</td><td>0.0</td><td>0.3</td><td>0.5</td><td>..</td><td>0.3</td></tr>
|
||||
<tr><th>Italy</th><td>0.4</td><td>0.0</td><td>0.2</td><td>0.3</td><td>0.3</td><td>..</td><td>0.7</td></tr>
|
||||
<tr><th>Japan</th><td>0.6</td><td>0.3</td><td>-0.5</td><td>0.4</td><td>..</td><td>..</td><td>1.6</td></tr>
|
||||
<tr><th>UK</th><td>0.5</td><td>0.1</td><td>0.0</td><td>0.0</td><td>0.6</td><td>0.4</td><td>1.0</td></tr>
|
||||
<tr><th>United States</th><td>-0.3</td><td>0.8</td><td>1.0</td><td>0.0</td><td>0.5</td><td>0.3</td><td>1.6</td></tr>
|
||||
</table><p></p><p><a>GDP — data tables</a><br> Dataset | Released 13 August 2026<br> Annual and quarterly data for UK gross domestic product (GDP) estimates, in chained volume measures and current market prices.</p><p><a>GDP in chained volume measures — real-time database (ABMI)</a><br>Dataset | Released 13 August 2026<br> Quarterly levels for UK gross domestic product (GDP), in chained volume measures at market prices.</p><p><a>GDP at current prices — real-time database (YBHA)</a><br> Dataset | Released 13 August 2026<br> Quarterly levels for UK gross domestic product (GDP) at current market prices. </p><p></p><p>The embedded visualisation below may not display correctly without JavaScript enabled. <a class="underline-link">View it in full screen</a>.</p><p>Quarterly GDP is a balanced measure of three approaches. The GDP monthly estimate focuses on gross value added (GVA) and output as a proxy for GDP. This results in data differences, in both levels and growth terms, between our quarterly bulletins (average GDP) and our <a>GDP monthly estimate bulletins</a> (output approach to GDP). Quarterly GDP is the lead measure of GDP because of its higher data content and inclusion of variables that enable the conversion from a GVA concept to a GDP basis.</p><p>Information on the methods we use is in our <a>Balancing the output, income and expenditure approaches to measuring GDP report</a>.</p><p>Alignment adjustments, found in Table M of our <a>GDP data tables</a>, have a target limit of plus or minus £3,000 million on any quarter. However, in periods where the data sources are particularly difficult to balance, larger alignment adjustments are sometimes needed. This is explained in more detail in our <a>Recent challenges of balancing the three approaches of GDP article</a>.</p><p>As a standard, we prefer the alignment adjustment to be out of tolerance, rather than to over-adjust individual GDP components to achieve a balance. This is most likely to occur in the latest quarter, where the constraints are larger, and where we must align to the output estimate for the change in GDP, and where the data content is at its lowest.</p><p>To achieve a balanced GDP dataset through alignment, we apply balancing adjustments to the components of GDP where data content is particularly weak in each quarter because of a higher level of forecast content. Table 7 shows the balancing adjustments applied to our GDP quarterly dataset.</p><p>
|
||||
</p><table class="table">
|
||||
<caption class="table__caption">Table 7: Balancing adjustments applied to the GDP first quarterly estimate dataset <br><span class="table__subtitle">Quarter 2 (Apr to June) 2026</span></caption>
|
||||
<colgroup><col><col><col></colgroup>
|
||||
<tr class="table__header-row table__nowrap"><th class="align-left">GDP measurement approach and component adjustment applied to </th><th class="align-right">Q2 2026</th></tr>
|
||||
<tr><th class="table__nowrap align-left">Expenditure </th><td class="align-left"></td><td class="align-right"></td></tr>
|
||||
<tr><th class="table__nowrap align-left">Inventories</th><td class="align-left">Current price</td><td class="align-right">500</td></tr>
|
||||
<tr><td class="align-left"></td><td class="align-left">Chained volume measures</td><td class="align-right">500</td></tr>
|
||||
<tr><th class="table__nowrap align-left">Trade in services exports </th><td class="align-left">Current price</td><td class="align-right">250</td></tr>
|
||||
<tr><td class="align-left"></td><td class="align-left">Chained volume measures</td><td class="align-right">250</td></tr>
|
||||
<tr><th class="table__nowrap align-left">Trade in services imports</th><td class="align-left">Current price</td><td class="align-right">-250</td></tr>
|
||||
<tr><td class="align-left"></td><td class="align-left">Chained volume measures</td><td class="align-right">-250</td></tr>
|
||||
<tr><td class="align-center"></td><td class="align-center"></td><td class="align-right"></td></tr>
|
||||
<tr><th class="table__nowrap align-left">Income</th><td class="align-left"></td><td class="align-right"></td></tr>
|
||||
<tr><th class="table__nowrap align-left">Private non-financial corporation gross operating surplus</th><td class="align-left">Current price</td><td class="align-right">-8000</td></tr>
|
||||
</table><p>Since the UK left the EU on 31 January 2020, arrangements for how the UK trades with the EU changed. HM Revenue and Customs (HMRC) implemented some data collection changes following Brexit, which affected statistics on UK trade in goods with the EU.</p><p>We have made adjustments to our estimates of goods imports from the EU in 2021 and 2022 to account for these changes. However, a structural break remains in the full time series for goods imports from, and exports to, the EU from January 2021. Therefore, we advise caution when interpreting and drawing conclusions from these statistics. More detail is provided in our <a>Impact of trade in goods data collection changes on UK trade statistics: summary of adjustments and the structural break from 2021 article</a>.</p><p>From September 2025 until early 2027, International Trade in Services (ITIS) data (which account for approximately 50% of total Trade in Services) will be processed once each quarterly period. During this period, the data will be based on a robust survey response rate of between approximately 60% and 70%. This will facilitate more focus on improving processing systems and ensuring methods and quality in the future.</p><p>ITIS-based data in Trade in Services estimates at first quarterly estimate will be forecast until early 2027.</p><p>The International Passenger Survey (IPS), which is the source of travel services estimates (accounting for approximately 8% of total trade), is being transformed as part of our <a>Improving our travel and tourism statistics project</a>. Travel services estimates have been forecast since Quarter 3 (July to Sept) 2024. Estimates will be forecast during the period of the travel and tourism transformation.</p><p>Our <a>Financial Services Survey (FSS) is undergoing transformation</a> to improve the quality of our financial sector statistics. During the period of transformation, starting from Quarter 1 (Jan to Mar) 2024, financial services trade statistics in this publication are based on forecasts.</p><p>There are three approaches to measuring gross domestic product (GDP):</p><p>the output approach</p><p>the expenditure approach</p><p>the income approach</p><p>The data and data quality are different for each approach, and this dictates the approach taken in balancing quarterly data. There are more data available on output in the UK in the short term than in the other two approaches. To get the best estimate of GDP, our published figure, estimates from all three approaches are balanced to produce an average, except in the latest two quarters, where the output data take the lead because of the larger data content.</p><p>The three approaches to measuring GDP allow us to confront our data sources within the national accounts framework. Figure 3 in our <a>GDP quarterly national accounts, UK: January to March 2026 bulletin</a> showed that there are differences in the three approaches at this stage in the production cycle for 2025, with real growth estimated in a range of 1.2% to 1.5%. There will be uncertainty at the component level at this stage in the production cycle for 2024 onwards, until these data have been confronted through the supply and use tables framework (SUTs). This uncertainty may be for various reasons and is further discussed ahead in this section.</p><p>In the output approach, we do not currently have final estimates for intermediate consumption (the value of goods and services purchased to be used up in the production of goods and services). This is outlined in our <a>Blue Book 2025: advanced aggregate estimates article</a>. Initially, we use turnover and output as a proxy for changes in gross value added. We assume that the intermediate consumption ratio by industry, calculated in 2023, holds constant into 2024 onwards. More information on this is provided in Section 11: Data sources and quality of our <a>GDP first quarterly estimate, UK: April to June 2024 bulletin</a>.</p><p>In the expenditure approach, we currently have lower response rates for areas such as the Living Costs and Food Survey, which is one of many data sources that inform our estimates of household consumption. Therefore, we rely on additional indicators, such as our Monthly Business Survey, to quality-adjust some of our estimates in the short term.</p><p>In the income approach, we do not have up-to-date quarterly information on the gross trading profits of businesses. These data are collected from HM Revenue and Customs (HMRC) and are available with a lag of approximately two years.</p><p>We rely on contextual data from other sources to inform these quarterly estimates, as outlined in our <a>Profitability of UK companies quality and methodology information (QMI)</a>. There is currently more uncertainty around the compensation of employees figures in this release because of lower response rates in our Labour Force Survey (LFS), as described in our <a>LFS: planned improvements and its reintroduction methodology</a>. We have uLine truncated
|
||||
+187
@@ -0,0 +1,187 @@
|
||||
<html><body><h1 class="padding-bottom--0 padding-top--0 margin-top--2 font-weight-700 margin-bottom--2 ">GDP first quarterly estimate, UK: January to March 2025</h1><p class="page-bulletins--Summary margin-right-md--2 margin-bottom--3 padding-bottom--0 padding-top--0">
|
||||
|
||||
|
||||
First quarterly estimate of gross domestic product (GDP). Contains current and constant price data on the value of goods and services to indicate the economic performance of the UK.
|
||||
|
||||
</p><p class="alert-release-banner__title">This is not the latest release.
|
||||
<a class="alert-release-banner__link">View latest release</a>
|
||||
</p><p class="col col--md-12 col--lg-15 margin-bottom-sm--1 margin-bottom-md--3 margin-top-sm--1 padding-bottom--0 padding-top--0">
|
||||
<span class="font-weight-700">Contact: </span><br><a class="text--white"><span class="visuallyhidden">Email </span>Gross Domestic Product team</a>
|
||||
</p><p class="col col--md-one-third col--lg-one-third margin-bottom-sm--1 margin-bottom-md--3 margin-top--0 padding-bottom--0 padding-top--0">
|
||||
<span class="font-weight-700">Release date: </span><br>15 May 2025<br>
|
||||
|
||||
</p><p class="col col--md-one-third col--lg-one-third margin-bottom-sm--3 margin-bottom-md--3 margin-top--0 padding-bottom--0 padding-top--0">
|
||||
<span class="font-weight-700">Next release: </span><br>30 June 2025
|
||||
</p><h2 class="table-of-contents__title">Table of contents</h2><p class="text-right--md padding-top-md--0 padding-bottom-md--0 height--5 margin-bottom-md--0 print--hide nojs--hide js--show">
|
||||
<a class="link-complex nojs--hide js--show js-print-page">
|
||||
Print this <span class="lowercase">
|
||||
Statistical bulletin
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
</a>
|
||||
<span class="icon icon-print--dark"></span>
|
||||
</p><p class="text-right--md padding-top-md--0 padding-bottom-md--0 height--5 margin-top-md--1 print--hide">
|
||||
<a class="link-complex js-pdf-dl-link">
|
||||
Download as PDF
|
||||
</a>
|
||||
<span class="icon icon-download--dark"></span>
|
||||
</p><p>UK gross domestic product (GDP) is estimated to have grown by 0.7% in Quarter 1 (Jan to Mar) 2025, following growth of 0.1% in the previous quarter.</p><p>In output terms, growth in Quarter 1 2025 was driven by an increase of 0.7% in the services sector, production also grew, by 1.1%, while the construction sector showed no growth.</p><p>In expenditure terms, growth in the latest quarter was driven by increases in gross fixed capital formation, net trade and household consumption.</p><p>Nominal GDP is estimated to have increased by 1.6% in Quarter 1 2025, mainly driven by an increase in compensation of employees.</p><p>Real GDP per head is estimated to have grown by 0.5% in Quarter 1 2025, following two consecutive quarterly falls.</p><p>UK real gross domestic product (GDP) is estimated to have increased by 0.7% in Quarter 1 (Jan to Mar) 2025 (Figure 1). Real GDP is estimated to have increased by 1.3%, compared with the same quarter a year ago.</p><p>Monthly GDP is estimated to have grown by 0.2% in March 2025 because of growth in the services and construction sectors, as shown in our <a>GDP monthly estimate, UK: March 2025 bulletin</a>. This follows an unrevised increase of 0.5% in February 2025 and an unrevised no growth in January 2025.</p><p><a>Early estimates of GDP are subject to revision</a> (positive or negative). Previous analysis shows that the revision between the first quarterly GDP estimate and the same quarterly estimate three years later is typically up to plus or minus 0.2 percentage points, when more detailed information becomes available through the comprehensive annual supply and use balancing process, as the data content increases. For more information, please refer to our <a>GDP revisions in Blue Book: 2024 article</a>. The GDP growth vintages from 2023 onwards are shown in Table 4. We give more information on uncertainty in <a>Section 11: Data sources and quality</a>.</p><p>In line with our <a>National Accounts Revisions Policy</a>, no quarterly periods are open to revision in this publication.</p><p>
|
||||
|
||||
|
||||
|
||||
|
||||
</p><p>Real GDP per head is estimated to have grown by 0.5% in Quarter 1 2025 and is up 0.3%, compared with the same quarter a year ago. See <a>Section 6: Real GDP per head</a> for more information. </p><p>
|
||||
</p><table class="table">
|
||||
<caption class="table__caption">Table 1: Headline national accounts indicators for the UK<br><span class="table__subtitle">Percentage growth</span></caption>
|
||||
<colgroup><col><col><col><col><col></colgroup>
|
||||
<tr class="table__header-row table__nowrap"><td></td><th class="align-right">GDP (Chained<br>volume<br>measures)</th><th class="align-right">GDP per head<br>(Chained volume<br>measures) [Note<br>3]</th><th class="align-right">GDP (Current<br>market prices)</th><th class="align-right">GDP implied<br>deflator</th></tr>
|
||||
<tr><th class="table__nowrap align-left">Seasonally<br>adjusted</th><td class="align-right"></td><td class="align-right"></td><td class="align-right"></td><td class="align-right"></td></tr>
|
||||
<tr><td class="align-left"></td><td class="align-right"></td><td class="align-right"></td><td class="align-right"></td><td class="align-right"></td></tr>
|
||||
<tr><th class="table__nowrap align-left">2024</th><td class="align-right">1.1</td><td class="align-right">0.0</td><td class="align-right">5.2</td><td class="align-right">4.0</td></tr>
|
||||
<tr><td class="align-left"></td><td class="align-right"></td><td class="align-right"></td><td class="align-right"></td><td class="align-right"></td></tr>
|
||||
<tr><th class="table__nowrap align-left">Q1 2024</th><td class="align-right">0.9</td><td class="align-right">0.6</td><td class="align-right">2.1</td><td class="align-right">1.2</td></tr>
|
||||
<tr><th class="table__nowrap align-left">Q2 2024</th><td class="align-right">0.5</td><td class="align-right">0.2</td><td class="align-right">1.2</td><td class="align-right">0.7</td></tr>
|
||||
<tr><th class="table__nowrap align-left">Q3 2024</th><td class="align-right">0.0</td><td class="align-right">-0.2</td><td class="align-right">1.8</td><td class="align-right">1.8</td></tr>
|
||||
<tr><th class="table__nowrap align-left">Q4 2024</th><td class="align-right">0.1</td><td class="align-right">-0.1</td><td class="align-right">1.1</td><td class="align-right">1.0</td></tr>
|
||||
<tr><th class="table__nowrap align-left">Q1 2025</th><td class="align-right">0.7</td><td class="align-right">0.5</td><td class="align-right">1.6</td><td class="align-right">0.8</td></tr>
|
||||
</table><p>Nominal GDP is estimated to have increased by 1.6% in Quarter 1 2025, mainly driven by an increase in compensation of employees. Nominal GDP is estimated to have increased by 5.8%, compared with the same quarter a year ago.</p><p>The implied GDP deflator is the broadest measure of inflation in the domestic economy, reflecting changes in the price of all goods and services that make up GDP. The GDP deflator covers the whole of the domestic economy, not just consumer spending. It also reflects the change in the relative price of exports to imports. For more information on the implied GDP deflator, see our <a>Measuring price changes of the UK national accounts: February 2023 article</a>.</p><p>The implied price of GDP rose by 0.8% in Quarter 1 2025, mainly driven by higher prices in household consumption. The GDP implied deflator grew by 4.5%, compared with the same quarter a year ago (Figure 2).</p><p>
|
||||
|
||||
|
||||
|
||||
|
||||
</p><p>Output is estimated to have increased by 0.7% in Quarter 1 (Jan to Mar) 2025, following 0.1% growth in the previous quarter.</p><p>The services sector increased by 0.7% in the latest quarter and was the largest contributor to overall output growth. Construction output remained unchanged from the previous quarter, while production increased by 1.1% following consecutive falls in the previous 3 quarters. Early estimates show 14 out of 20 of the subsectors grew across Quarter 1 2025, which is up from 13 in the previous quarter.</p><p>Services output increased by 0.7% in the latest quarter, following 0.1% growth in the previous quarter. Services output is estimated to have increased by 1.5%, compared with the same quarter a year ago. Non-consumer-facing services (business-facing services) increased by 0.7% in Quarter 1 2025, while consumer-facing services increased by 0.9%.</p><p>In the latest quarter, 10 of the 14 services sectors increased. However, as activities of households as employers has a small weight, this means that 9 out of 14 services subsectors contributed positively to growth to two decimal places. The largest positive contributor to growth was administrative and support service activities, which increased by 3.3%. Within this subsector, 5 of the 6 industries contributed positively to growth.</p><p>The second largest positive contribution to growth was from wholesale retail trade; repair of motor vehicles and motorcycles, which increased by 1.6%. Within this subsector, all 3 industries contributed positively to growth, including a 1.5% increase in retail trade, except of motor vehicles and motorcycles. More information can be found in our <a>Retail Sales publication</a>.</p><p>The largest negative contributor to growth in Quarter 1 2025 was education, which fell by 0.6%.</p><p>
|
||||
|
||||
|
||||
|
||||
|
||||
</p><p>The production sector is estimated to have grown by 1.1% in Quarter 1 2025, following falls in the previous three quarters. Production output is estimated to have fallen by 0.2%, compared with the same quarter a year ago.</p><p>The growth in production in Quarter 1 2025 was largely driven by a 0.8% increase in manufacturing and a 4.0% increase in water supply; sewerage, waste management and remediation activities. Elsewhere, electricity, gas, steam and air conditioning supply increased by 1.8% while mining and quarrying fell by 0.5%.</p><p>Manufacturing output grew by 0.8% in Quarter 1 2025, following a 0.6% fall in the previous quarter. Figure 4 shows there were increases in 10 out of 13 manufacturing subsectors in the latest quarter. The largest positive contributions were from the manufacture of transport equipment, which grew by 2.7%, and the manufacture of machinery and equipment n.e.c, which grew by 3.8%. The growth in transport equipment was largely driven by manufacture of motor vehicles, trailers and semi-trailers, although this industry remains 5.5% below its level a year ago. This is supported by the Society of Motor Manufacturers and Traders (<a>SMMT: UK Car Manufacturing & Production Data</a>).</p><p>The manufacture of basic metals and metal products fell by 3.0% in the latest quarter, driven by a 3.6% decline in the manufacture of fabricated metal products. </p><p>
|
||||
|
||||
|
||||
|
||||
|
||||
</p><p>Construction output is estimated to have shown no growth in Quarter 1 2025, following 0.3% growth in the previous quarter. The level of construction output was 0.9% higher in Quarter 1 2025 compared with the same quarter a year ago.</p><p>Further detail on construction output can be found in our <a>Construction output in Great Britain: March 2025, new orders and Construction Output Price Indices, January to March 2025</a> bulletin.</p><p>Looking at the expenditure approach to measuring gross domestic product (GDP), growth in the latest quarter was driven by increases in gross fixed capital formation, net trade and household consumption (Figure 5). </p><p>
|
||||
|
||||
|
||||
|
||||
|
||||
</p><p>There was an increase of 0.2% in real household expenditure in Quarter 1 2025 and it is now 0.7% higher compared with the same quarter a year ago. Within household consumption, growth was driven by higher spending on household goods and services, miscellaneous and housing.</p><p>Net tourism contributed negatively to growth in household consumption in the latest quarter. Net tourism is offset within trade, so there is no impact on the GDP aggregate. Information on how we measure net tourism is provided in our <a>National Accounts articles: Treatment of tourism in the UK National Accounts</a>. Excluding net tourism, domestic consumption grew by 0.4% in the latest quarter.</p><p>Real government consumption expenditure fell by 0.5% in the latest quarter and is 1.3% higher, compared with the same quarter a year ago. The fall in government consumption in the latest quarter mainly reflects lower expenditure on health and education.</p><p>Within gross capital formation, early estimates of gross fixed capital formation (GFCF) showed a 2.9% increase in Quarter 1 2025 and is now up 4.4% compared with the same quarter a year ago. The increase in the latest quarter was mainly driven by a large increase in transport (mainly because of increased aircraft imports), as well as increases in ICT equipment and other machinery and equipment, and other buildings and structures.</p><p>Within GFCF, business investment is estimated to have increased by 5.9% in Quarter 1 2025 and is up 8.1%, compared with the same quarter a year ago.</p><p>Excluding the alignment and balancing adjustments, early estimates show that real inventories increased by £6.7 billion in Quarter 1 2025 (Table 2). This was driven by higher stocks in manufacturing.</p><p>
|
||||
</p><table class="table">
|
||||
<caption class="table__caption">Table 2: Change in inventories, including and excluding balancing and alignment adjustments<br><span class="table__subtitle">UK, Quarter 1 (Jan to Mar) 2024 to Quarter 1 2025 </span></caption>
|
||||
<colgroup><col><col><col><col><col><col></colgroup>
|
||||
<tr class="table__header-row table__nowrap"><td class="align-left"></td><td class="align-left"></td><th class="align-right">Change in<br>Inventories</th><th class="align-right">Of which<br>alignment</th><th class="align-right">Of which<br>balancing</th><th class="align-right">Change in<br>Inventories<br>excluding<br>alignment<br>and<br>balancing</th></tr>
|
||||
<tr><th class="table__nowrap align-left">Q1 2024</th><th class="table__nowrap align-left">Current price</th><td class="align-right">-2869</td><td class="align-right">-3003</td><td class="align-right">-1500</td><td class="align-right">1634</td></tr>
|
||||
<tr><th class="table__nowrap align-left">Q1 2024</th><th class="table__nowrap align-left">Chained volume measure</th><td class="align-right">-4911</td><td class="align-right">-2743</td><td class="align-right">-1000</td><td class="align-right">-1168</td></tr>
|
||||
<tr><th class="table__nowrap align-left">Q2 2024</th><th class="table__nowrap align-left">Current price</th><td class="align-right">2208</td><td class="align-right">2351</td><td class="align-right">-2000</td><td class="align-right">1857</td></tr>
|
||||
<tr><th class="table__nowrap align-left">Q2 2024</th><th class="table__nowrap align-left">Chained volume measure</th><td class="align-right">2038</td><td class="align-right">2148</td><td class="align-right">-4000</td><td class="align-right">3890</td></tr>
|
||||
<tr><th class="table__nowrap align-left">Q3 2024</th><th class="table__nowrap align-left">Current price</th><td class="align-right">3110</td><td class="align-right">-1014</td><td class="align-right">-1500</td><td class="align-right">5624</td></tr>
|
||||
<tr><th class="table__nowrap align-left">Q3 2024</th><th class="table__nowrap align-left">Chained volume measure</th><td class="align-right">270</td><td class="align-right">-890</td><td class="align-right">-2000</td><td class="align-right">3160</td></tr>
|
||||
<tr><th class="table__nowrap align-left">Q4 2024</th><th class="table__nowrap align-left">Current price</th><td class="align-right">5418</td><td class="align-right">1666</td><td class="align-right">-1000</td><td class="align-right">4752</td></tr>
|
||||
<tr><th class="table__nowrap align-left">Q4 2024</th><th class="table__nowrap align-left">Chained volume measure</th><td class="align-right">6716</td><td class="align-right">1485</td><td class="align-right"> </td><td class="align-right">5231</td></tr>
|
||||
<tr><th class="table__nowrap align-left">Q1 2025</th><th class="table__nowrap align-left">Current price</th><td class="align-right">8</td><td class="align-right">-3334</td><td class="align-right"> </td><td class="align-right">3342</td></tr>
|
||||
<tr><th class="table__nowrap align-left">Q1 2025</th><th class="table__nowrap align-left">Chained volume measure</th><td class="align-right">3866</td><td class="align-right">-2920</td><td class="align-right"> </td><td class="align-right">6786</td></tr>
|
||||
</table><p>The UK's trade deficit for goods and services was 1.4% of nominal GDP in Quarter 1 2025. However, this includes non-monetary gold and other precious metals, which is an erratic series. It can be useful to exclude this from the trade balance. Excluding non-monetary gold and other precious metals, the trade deficit was 0.9% of nominal GDP in Quarter 1 2025 estimate (Figure 6).</p><p>It is important to note that in the first quarterly estimate of Quarter 1 2025, the International Trade In Services (ITIS) survey figures are forecast using time series data; this forecast is combined with additional data sources to make up trade in services totals. This forecast will be reviewed and replaced at the Quarterly National Accounts using ITIS survey data.</p><p>
|
||||
|
||||
|
||||
|
||||
|
||||
</p><p>Export volumes increased by 3.5%, following three consecutive quarterly declines. The increase in the latest quarter was mainly driven by a 5.6% increase in goods exports and a 2.0% increase in services exports. The increase in goods exports was mainly caused by rises in exports of material manufactures, whereas growth in services exports was caused by rises in other business services and travel.</p><p>Import volumes increased by 2.1% in the latest quarter, driven by increases of 0.6% and 5.2% in goods and services imports, respectively. The increase in goods imports was driven by large movements in non-monetary gold and other precious metals. However, this series also appears within gross capital formation (GCF) as valuables, so the effect is GDP neutral. The increase in services imports were caused by increases in other business services and travel.</p><p>Nominal gross domestic product (GDP) grew by 1.6% in Quarter 1 (Jan to Mar) 2025 and is up 5.8% compared with the same quarter a year ago. Growth in nominal GDP was mainly driven by increases in compensation of employees (Figure 7). </p><p>
|
||||
|
||||
|
||||
|
||||
|
||||
</p><p>Compensation of employees increased by 1.4% in the latest quarter and is 7.1% higher compared with the same quarter a year ago. Growth in the latest quarter was driven by an increase of 1.6% in wages and salaries, and a 0.4% increase in employers' social contributions.</p><p>Early estimates of private sector wages and salaries are based on estimates of the number of employees in the economy from our Labour Force Survey (LFS) and average earnings from our average weekly earnings statistics. However, there is some additional <a>uncertainty</a> around the employees estimates used to derive our figures of wages and salaries because of low response rates in the LFS. We have therefore used additional information from our<a>Earnings and employment from Pay As You Earn Real Time Information UK</a> to help improve the accuracy of the income measure of GDP.</p><p>Other income increased by 0.9% in the latest quarter. This was driven by growth in mixed income, from self-employment and rental income, and other gross operating surplus, from households.</p><p>Taxes less subsidies are estimated to have increased by 1.2% in Quarter 1 2025. There was a 1.8% increase in taxes (mainly Value Added Tax), which was partially offset by a 6.5% increase in subsidies, which contribute negatively to GDP.</p><p>Total gross operating surplus (GOS) of corporations excluding the alignment adjustment fell by 0.2% in Quarter 1 2025 (Table 3). This is mainly because of a decline in private non-financial corporations.</p><p>There is uncertainty around estimates of non-financial corporations within GOS of corporations. This is because we do not have up-to-date quarterly information on the gross trading profits of businesses. These data are collected from HM Revenue and Customs (HMRC) and are available with a lag of approximately two years. We rely on contextual data from other sources to inform these quarterly estimates, as outlined in our <a>Profitability of UK companies Quality and Methodology Information (QMI)</a>.</p><p>
|
||||
</p><table class="table">
|
||||
<caption class="table__caption">Table 3: Gross operating surplus of corporations, including and excluding alignment adjustments<br><span class="table__subtitle">UK, Quarter 1 (Jan to Mar) 2024 to Quarter 1 2025</span></caption>
|
||||
<colgroup><col><col><col><col><col></colgroup>
|
||||
<tr class="table__header-row table__nowrap"><td class="align-left"></td><th class="align-right">Gross operating<br>surplus of<br>corporations</th><th class="align-right">Of which<br>alignment</th><th class="align-right">Gross operating<br>surplus of<br>corporations<br>excluding alignment</th><th class="align-right">Gross operating<br>surplus of<br>corporations<br>excluding alignment</th></tr>
|
||||
<tr class="table__header-row table__nowrap"><td class="align-left"></td><td class="align-right"></td><td class="align-right"></td><td class="align-right"></td><th class="align-right">Quarter-on-quarter<br>growth</th></tr>
|
||||
<tr><th class="table__nowrap align-left">Q1 2024</th><td class="align-right">144665</td><td class="align-right">-576</td><td class="align-right">145241</td><td class="align-right">1.5</td></tr>
|
||||
<tr><th class="table__nowrap align-left">Q2 2024</th><td class="align-right">146952</td><td class="align-right">2151</td><td class="align-right">144801</td><td class="align-right">-0.3</td></tr>
|
||||
<tr><th class="table__nowrap align-left">Q3 2024</th><td class="align-right">150372</td><td class="align-right">36</td><td class="align-right">150336</td><td class="align-right">3.8</td></tr>
|
||||
<tr><th class="table__nowrap align-left">Q4 2024</th><td class="align-right">148024</td><td class="align-right">-1611</td><td class="align-right">149635</td><td class="align-right">-0.5</td></tr>
|
||||
<tr><th class="table__nowrap align-left">Q1 2025</th><td class="align-right">152043</td><td class="align-right">2744</td><td class="align-right">149299</td><td class="align-right">-0.2</td></tr>
|
||||
</table><p>We produce estimates of gross domestic product (GDP) per head (or per capita), which divides UK GDP by the total UK population. This is one proxy indicator of welfare, rather than production, which reflects a country's living standards. It captures the volume of goods and services available to the average person. Further information on this is available in our <a>Trends in UK real GDP per head: 2022 to 2024 article</a>.</p><p>Real GDP per head is estimated to have grown by 0.5% in Quarter 1 2025 (Figure 8) and is up 0.3%, compared with the same quarter a year ago. The population estimates for 2023 onwards are in line with our <a>National population projections: 2022-based bulletin</a>, published on 28 January 2025. The estimates use migration statistics from our <a>Long-term international migration, provisional: year ending June 2024 bulletin</a>.</p><p>
|
||||
|
||||
|
||||
|
||||
|
||||
</p><p>It is also important to note that early estimates of gross domestic product (GDP) are subject to positive or negative revision, as described in our <a>Why GDP figures are revised article</a>. For more information, please refer to our <a>GDP revision in Blue Book: 2024 article</a>. The GDP growth vintages are shown in Table 4.</p><p>In line with our <a>National Accounts Revisions Policy</a>, no quarterly periods are open to revision in this publication.</p><p>
|
||||
</p><table class="table">
|
||||
<caption class="table__caption">Table 4: Quarter-on-quarter growth for real GDP at different publication vintages <br><span class="table__subtitle">Quarter 1 (Jan to Mar) 2023 to Quarter 1 2025</span></caption>
|
||||
<colgroup><col><col><col><col><col><col><col><col><col><col></colgroup>
|
||||
<tr class="table__header-row table__nowrap"><th class="align-left">Relating<br>to Period</th><th class="align-right">Q1 2023</th><th class="align-right">Q2 2023</th><th class="align-right">Q3 2023</th><th class="align-right">Q4 2023</th><th class="align-right">Q1 2024</th><th class="align-right">Q2 2024</th><th class="align-right">Q3 2024</th><th class="align-right">Q4 2024</th><th class="align-right">Q1 2025</th></tr>
|
||||
<tr><th class="table__nowrap align-left">May 23</th><td class="align-right">0.1</td><td class="align-right"> </td><td class="align-right"></td><td class="align-right"> </td><td class="align-right"> </td><td class="align-right"> </td><td class="align-right"> </td><td class="align-right"> </td><td class="align-right"></td></tr>
|
||||
<tr><th class="table__nowrap align-left">Jun 23</th><td class="align-right">0.1</td><td class="align-right"> </td><td class="align-right"></td><td class="align-right"> </td><td class="align-right"> </td><td class="align-right"> </td><td class="align-right"> </td><td class="align-right"> </td><td class="align-right"></td></tr>
|
||||
<tr><th class="table__nowrap align-left">Aug 23</th><td class="align-right">0.1</td><td class="align-right">0.2</td><td class="align-right"></td><td class="align-right"> </td><td class="align-right"> </td><td class="align-right"> </td><td class="align-right"> </td><td class="align-right"> </td><td class="align-right"></td></tr>
|
||||
<tr><th class="table__nowrap align-left">Sep 23</th><td class="align-right">0.3</td><td class="align-right">0.2</td><td class="align-right"></td><td class="align-right"> </td><td class="align-right"> </td><td class="align-right"> </td><td class="align-right"> </td><td class="align-right"> </td><td class="align-right"></td></tr>
|
||||
<tr><th class="table__nowrap align-left">Nov 23</th><td class="align-right">0.3</td><td class="align-right">0.2</td><td class="align-right">0.0</td><td class="align-right"> </td><td class="align-right"> </td><td class="align-right"> </td><td class="align-right"> </td><td class="align-right"> </td><td class="align-right"></td></tr>
|
||||
<tr><th class="table__nowrap align-left">Dec 23</th><td class="align-right">0.3</td><td class="align-right">0.0</td><td class="align-right">-0.1</td><td class="align-right"> </td><td class="align-right"> </td><td class="align-right"> </td><td class="align-right"> </td><td class="align-right"> </td><td class="align-right"></td></tr>
|
||||
<tr><th class="table__nowrap align-left">Feb 24</th><td class="align-right">0.2</td><td class="align-right">0.0</td><td class="align-right">-0.1</td><td class="align-right">-0.3</td><td class="align-right"> </td><td class="align-right"> </td><td class="align-right"> </td><td class="align-right"> </td><td class="align-right"></td></tr>
|
||||
<tr><th class="table__nowrap align-left">Mar 24</th><td class="align-right">0.2</td><td class="align-right">0.0</td><td class="align-right">-0.1</td><td class="align-right">-0.3</td><td class="align-right"> </td><td class="align-right"> </td><td class="align-right"> </td><td class="align-right"> </td><td class="align-right"></td></tr>
|
||||
<tr><th class="table__nowrap align-left">May 24</th><td class="align-right">0.2</td><td class="align-right">0.0</td><td class="align-right">-0.1</td><td class="align-right">-0.3</td><td class="align-right">0.6</td><td class="align-right"> </td><td class="align-right"> </td><td class="align-right"> </td><td class="align-right"></td></tr>
|
||||
<tr><th class="table__nowrap align-left">Jun 24</th><td class="align-right">0.2</td><td class="align-right">0.0</td><td class="align-right">-0.1</td><td class="align-right">-0.3</td><td class="align-right">0.7</td><td class="align-right"> </td><td class="align-right"> </td><td class="align-right"> </td><td class="align-right"></td></tr>
|
||||
<tr><th class="table__nowrap align-left">Aug 24</th><td class="align-right">0.2</td><td class="align-right">0.0</td><td class="align-right">-0.1</td><td class="align-right">-0.3</td><td class="align-right">0.7</td><td class="align-right">0.6</td><td class="align-right"> </td><td class="align-right"> </td><td class="align-right"></td></tr>
|
||||
<tr><th class="table__nowrap align-left">Sep 24</th><td class="align-right">0.1</td><td class="align-right">0.0</td><td class="align-right">-0.1</td><td class="align-right">-0.3</td><td class="align-right">0.7</td><td class="align-right">0.5</td><td class="align-right"> </td><td class="align-right"> </td><td class="align-right"></td></tr>
|
||||
<tr><th class="table__nowrap align-left">Nov 24</th><td class="align-right">0.1</td><td class="align-right">0.0</td><td class="align-right">-0.1</td><td class="align-right">-0.3</td><td class="align-right">0.7</td><td class="align-right">0.5</td><td class="align-right">0.1</td><td class="align-right"> </td><td class="align-right"></td></tr>
|
||||
<tr><th class="table__nowrap align-left">Dec 24</th><td class="align-right">0.1</td><td class="align-right">0.0</td><td class="align-right">-0.1</td><td class="align-right">-0.3</td><td class="align-right">0.7</td><td class="align-right">0.4</td><td class="align-right">0.0</td><td class="align-right"> </td><td class="align-right"></td></tr>
|
||||
<tr><th class="table__nowrap align-left">Feb 25</th><td class="align-right">0.1</td><td class="align-right">0.0</td><td class="align-right">-0.1</td><td class="align-right">-0.3</td><td class="align-right">0.8</td><td class="align-right">0.4</td><td class="align-right">0.0</td><td class="align-right">0.1</td><td class="align-right"></td></tr>
|
||||
<tr><th class="table__nowrap align-left">Mar 25</th><td class="align-right">0.1</td><td class="align-right">0.0</td><td class="align-right">-0.1</td><td class="align-right">-0.2</td><td class="align-right">0.9</td><td class="align-right">0.5</td><td class="align-right">0.0</td><td class="align-right">0.1</td><td class="align-right"></td></tr>
|
||||
<tr><th class="table__nowrap align-left">Latest<br>estimate:<br>May 25</th><td class="align-right">0.1</td><td class="align-right">0.0</td><td class="align-right">-0.1</td><td class="align-right">-0.2</td><td class="align-right">0.9</td><td class="align-right">0.5</td><td class="align-right">0.0</td><td class="align-right">0.1</td><td class="align-right">0.7</td></tr>
|
||||
<tr><th class="table__nowrap align-left">Total<br>revision<br>between<br>first and<br>latest<br>estimate</th><td class="align-right">0.0</td><td class="align-right">-0.2</td><td class="align-right">-0.1</td><td class="align-right">0.1</td><td class="align-right">0.3</td><td class="align-right">-0.1</td><td class="align-right">-0.1</td><td class="align-right">0.0</td><td class="align-right">-</td></tr>
|
||||
</table><p>
|
||||
</p><table class="table">
|
||||
<caption class="table__caption">Table 5: Real GDP growth for the G7 economies <br><span class="table__subtitle">Percentage change, quarter on quarter and annual growth, real gross domestic product (GDP) for 2024 to 2025</span></caption>
|
||||
<colgroup><col><col><col><col><col><col><col></colgroup>
|
||||
<tr class="table__header-row table__nowrap"><td class="align-center"></td><th class="align-center">Quarter on previous quarter (%)</th><th class="align-center">Annual growth<br>(%)</th></tr>
|
||||
<tr class="table__header-row table__nowrap"><th class="align-left">Country</th><th class="align-right">Q1<br>2024</th><th class="align-right">Q2<br>2024</th><th class="align-right">Q3<br>2024</th><th class="align-right">Q4<br>2024</th><th class="align-right">Q1<br>2025</th><th class="align-right">2024</th></tr>
|
||||
<tr><th class="table__nowrap align-left">Canada</th><td class="align-right">0.5</td><td class="align-right">0.7</td><td class="align-right">0.5</td><td class="align-right">0.6</td><td class="align-right">0.4</td><td class="align-right">1.5</td></tr>
|
||||
<tr><th class="table__nowrap align-left">France</th><td class="align-right">0.1</td><td class="align-right">0.3</td><td class="align-right">0.4</td><td class="align-right">-0.1</td><td class="align-right">0.1</td><td class="align-right">1.1</td></tr>
|
||||
<tr><th class="table__nowrap align-left">Germany</th><td class="align-right">0.2</td><td class="align-right">-0.3</td><td class="align-right">0.1</td><td class="align-right">-0.2</td><td class="align-right">0.2</td><td class="align-right">-0.2</td></tr>
|
||||
<tr><th class="table__nowrap align-left">Italy</th><td class="align-right">0.2</td><td class="align-right">0.2</td><td class="align-right">0.0</td><td class="align-right">0.2</td><td class="align-right">0.3</td><td class="align-right">0.5</td></tr>
|
||||
<tr><th class="table__nowrap align-left">Japan</th><td class="align-right">-0.5</td><td class="align-right">0.8</td><td class="align-right">0.4</td><td class="align-right">0.6</td><td class="align-right">..</td><td class="align-right">0.1</td></tr>
|
||||
<tr><th class="table__nowrap align-left">UK</th><td class="align-right">0.9</td><td class="align-right">0.5</td><td class="align-right">0.0</td><td class="align-right">0.1</td><td class="align-right">0.7</td><td class="align-right">1.1</td></tr>
|
||||
<tr><th class="table__nowrap align-left">United<br>States</th><td class="align-right">0.4</td><td class="align-right">0.7</td><td class="align-right">0.8</td><td class="align-right">0.6</td><td class="align-right">-0.1</td><td class="align-right">2.8</td></tr>
|
||||
</table><p>
|
||||
</p><table class="table">
|
||||
<caption class="table__caption">Table 6: Real GDP per head growth for the G7 economies<br><span class="table__subtitle">Percentage change, quarter-on-quarter and annual growth, real gross domestic product (GDP)</span></caption>
|
||||
<colgroup><col><col><col><col><col><col><col></colgroup>
|
||||
<tr class="table__header-row"><td></td><th class="align-center">Quarter on previous quarter (%)</th><th class="align-right">Annual<br>(%)</th></tr>
|
||||
<tr class="table__header-row"><th class="align-left">Country</th><th class="align-right">Q1<br>2024</th><th class="align-right">Q2<br>2024</th><th class="align-right">Q3<br>2024</th><th class="align-right">Q4<br>2024</th><th class="align-right">Q1<br>2025</th><th class="align-right">2024</th></tr>
|
||||
<tr><th class="align-left">Canada</th><td class="align-right">-0.2</td><td class="align-right">0.1</td><td class="align-right">-0.1</td><td class="align-right">0.2</td><td class="align-right">..</td><td class="align-right">-1.4</td></tr>
|
||||
<tr><th class="align-left">France</th><td class="align-right">0.0</td><td class="align-right">0.2</td><td class="align-right">0.3</td><td class="align-right">-0.2</td><td class="align-right">..</td><td class="align-right">0.8</td></tr>
|
||||
<tr><th class="align-left">Germany</th><td class="align-right">0.2</td><td class="align-right">-0.4</td><td class="align-right">0.1</td><td class="align-right">-0.2</td><td class="align-right">..</td><td class="align-right">-0.4</td></tr>
|
||||
<tr><th class="align-left">Italy</th><td class="align-right">0.2</td><td class="align-right">0.2</td><td class="align-right">0.0</td><td class="align-right">0.1</td><td class="align-right">..</td><td class="align-right">0.5</td></tr>
|
||||
<tr><th class="align-left">Japan</th><td class="align-right">-0.4</td><td class="align-right">0.8</td><td class="align-right">0.5</td><td class="align-right">0.7</td><td class="align-right">..</td><td class="align-right">0.5</td></tr>
|
||||
<tr><th class="align-left">UK</th><td class="align-right">0.6</td><td class="align-right">0.2</td><td class="align-right">-0.2</td><td class="align-right">-0.1</td><td class="align-right">0.5</td><td class="align-right">0.0</td></tr>
|
||||
<tr><th class="align-left">United<br>States</th><td class="align-right">0.2</td><td class="align-right">0.5</td><td class="align-right">0.6</td><td class="align-right">0.5</td><td class="align-right">-0.2</td><td class="align-right">1.9</td></tr>
|
||||
</table><p></p><p><a>GDP - data tables</a><br> Dataset | Released 15 May 2025<br> Annual and quarterly data for UK gross domestic product (GDP) estimates, in chained volume measures and current market prices.</p><p><a>GDP in chained volume measures - real-time database (ABMI)</a><br> Dataset | Released 15 May 2025<br> Quarterly levels for UK gross domestic product (GDP), in chained volume measures at market prices.</p><p><a>GDP at current prices - real-time database (YBHA)</a><br> Dataset | Released 15 May 2025<br> Quarterly levels for UK gross domestic product (GDP) at current market prices. </p><p></p><p>The embedded visualisation below may not display correctly without JavaScript enabled. <a class="underline-link">View it in full screen</a>.</p><p>There is different data content and quality of the three approaches: the output approach, the expenditure approach and the income approach. This dictates the approach taken in balancing quarterly data. There are more data available on output in the UK in the short term than in the other two approaches. To get the best estimate of GDP (gross domestic product), our published figure, estimates from all three approaches are balanced to produce an average, except in the latest two quarters where the output data take the lead because of the larger data content.</p><p>The three approaches to measuring GDP allow us to confront our data sources within the national accounts framework. Figure 9 showed that the three approaches to measuring GDP are closely aligned. However, there can still be uncertainty at the component level at this stage in the production cycle for 2023 and 2024 until these data have been confronted through the supply and use tables (SUTs) framework. This uncertainty may be for various reasons and is further discussed in this section.</p><p>In the output approach, we do not currently have final estimates for intermediate consumption (the value of goods and services purchased to be used up in the production of goods and services). This is outlined in our <a>Blue Book 2024: advanced aggregate estimates release</a>. Initially, we use turnover and output as a proxy for changes in gross value added. We assume that the intermediate consumption ratio by industry, calculated in 2022, holds constant into 2023 onwards. More information on this is provided in Section 11: Data sources and quality of our <a>GDP quarterly national accounts, UK: April to June 2024 bulletin</a>.</p><p>In the expenditure approach, we currently have lower response rates for areas, such as the Living Costs and Food Survey, which is one of many data sources that inform our estimates of household consumption. We therefore rely on additional indicators, such as our Monthly Business Survey, to quality adjust some of our estimates in the short term.</p><p>In the income approach, we do not have up-to-date quarterly information on the gross trading profits of businesses. These data are collected from HM Revenue and Customs (HMRC) and are available with a lag of approximately two years. We rely on contextual data from other sources to inform these quarterly estimates, as outlined in our <a>Profitability of UK companies Quality and Methodology Information (QMI)</a>. There is currently more uncertainty around the compensation of employees figures in this release because of lower response rates in our Labour Force Survey (LFS), as described in our <a>LFS: planned improvements and its reintroduction methodology</a>. We have used additional information from our <a>Earnings and employment Pay As You Earn Real Time Information, UK: January 2025 bulletin</a> to help inform the estimates.</p><p>
|
||||
|
||||
|
||||
|
||||
|
||||
</p><p>Quarterly GDP is a balanced measure of the three approaches. The GDP monthly estimate focuses on gross value added (GVA) and output as a proxy for GDP. This results in data differences, in both levels and growth terms, between our quarterly bulletins (average GDP) and our <a>GDP monthly estimate bulletins</a> (output approach to GDP). Quarterly GDP is the lead measure of GDP because of its higher data content and inclusion of variables, which enable the conversion from a GVA concept to a GDP basis.</p><p>Information on the methods we use is in our <a>Balancing the output, income and expenditure approaches to measuring GDP report</a>.</p><p>Alignment adjustments, found in Table M of our <a>GDP data tables</a>, have a target limit of plus or minus £3,000 million on any quarter. However, in periods where the data sources are particularly difficult to balance, larger alignment adjustments are sometimes needed, as explained in our <a>Recent challenges of balancing the three approaches of GDP article</a>. Our standard practice is to prefer that the alignment adjustment be out of tolerance rather than over-adjust individual GDP components to achieve a balance. This is most likely to occur in the latest quarter where the constraints are larger, where we must align to the output estimate for the change in GDP, and where the data content is at its lowest.</p><p>To achieve a balanced GDP dataset through alignment, we apply balancing adjustments to the components of GDP where data content is particularly weak in each quarter because of a higher level of forecast content. The balancing adjustments applied in this estimate are shown in Table 7. The resulting series should be considered accordingly.</p><p>
|
||||
</p><table class="table">
|
||||
<caption class="table__caption">Table 7: Balancing adjustments applied to the GDP first quarterly estimate dataset<br><span class="table__subtitle">Quarter 1 (Jan to Mar) 2025</span></caption>
|
||||
<colgroup><col><col><col></colgroup>
|
||||
<tr class="table__header-row table__nowrap"><th class="align-left">GDP measurement<br>approach and<br>component adjustment<br>applied to</th><td></td><th class="align-right">Q1 2025</th></tr>
|
||||
<tr><th class="table__nowrap align-left">Income</th><td></td><td></td></tr>
|
||||
<tr><th class="table__nowrap align-left">Private non-financial corporations gross<br>operating surplus</th><th class="table__nowrap">Current prices</th><td class="align-right">500</td></tr>
|
||||
</table><p>Since the UK left the EU on 31 January 2020, the arrangements for how the UK trades with the EU changed. HMRC implemented some data collection changes following Brexit, which affected statistics on UK trade in goods with the EU. We have made adjustments to our estimates of goods imports from the EU in 2021 and 2022 to account for these changes. However, a structural break remains in the full time series for goods imports from and exports to the EU from January 2021.</p><p>We advise caution when interpreting and drawing conclusions from these statistics. More detail is in our <a>Impact of trade in goods data collection changes on UK trade statistics: summary of adjustments and the structural break from 2021 article</a>.</p><p>Producer prices publications are being paused while work is in progress to improve the systems used to create the Producer Price Index (PPI) and the Services Producer Price Indices (SPPI), as explained in our <a>Producer prices publications update</a>. This is because our quality assurance identified a problem with the chain-linking methods used to calculate the PPI and SPPI indices.</p><p>Our investigations so far have concluded that the problem affects the period from December 2008 onwards. However, investigations suggest that the main impact on annual producer price inflation rates occurred in 2022 and 2023, because of the large movements in relative prices during that period.</p><p>As these detailed price data are used within our GDP calculations, this may lead to impacts on the level of some industries, with revisions to estimates for services, production and construction particularly likely in 2022 and 2023. At an aggregate level for GDP, these revisions should be offsetting to an extent, while taken alongside regular data deliveries. Early indications suggest that there will not be a notable change in the recent economic trends seen in these data, but we will update users once more information becomes available. We do not plan any changes to the publication timetable for monthly, quarterly or annual GDP and will continue to use the current PPI estimates in these publications until updated data are available.</p><p>The UK national accounts are drawn together using data from many different sources. This ensures that they are comprehensive and provide different perspectives on the economy, for example, sales by retailers and purchases by households. Further information on measuring GDP can be found in our <a>Guide to the UK National Accounts</a>. More quality and methodology information is available in our <a>GDP QMI</a>.</p><p>The headline estimates of quarterly GDP are seasonally adjusted. Seasonal adjustment is the process of removing the variations associated with the time of year, or the arrangement of the calendar, from a data time series.</p><p>GDP estimates, as for many data time series, are difficult to analyse using raw data because seasonal effects dominate short-term movements. Identifying and removing the seasonal component leaves the trend and irregular components.</p><p>The ONS uses the X-13-ARIMA-SEATS approach to seasonal adjustment. Seasonal adjustment parameters are monitored closely and regularly reviewed. For more information, please see our <a>seasonal adjustment methodology page</a>.</p><p>In our quarterly GDP estimates seasonal adjustment is applied at a low level and the seasonally adjusted series are aggregated to create estimates by sector and total output. As part of our quality assurance approach, residual seasonality checks are regularly completed by our time series analysis team on both the directly seasonally adjusted series and also the indirectly derived aggregate time series.</p><p>This topic is explored further in our <a>Assessing residual seasonality in published outputs article</a> published 09 May 2025.</p><p>There are common pitfalls in interpreting data series. These include:</p><p>expectations of accuracy and reliability in early estimates are often too high</p><p>revisions are an inevitable consequence of the trade-off between timeliness and accuracy</p><p>early estimates are often based on incomplete data</p><p>Very few statistical revisions arise because of "errors" in the popular sense of the word. All estimates, by definition, are subject to statistical "error".</p><p>Many different approaches can be used to summarise revisions. The section on Accuracy and reliability in our <a>GDP QMI</a> analyses the mean average revision and the mean absolute revision for GDP estimates over data publication iterations.</p><p>These <a>accredited official statistics</a> were independently reviewed by the<a>Office for Statistics Regulation</a> in October 2016. They comply with the standards of trustworthiness, quality and value in the <a>Code of Practice for Statistics</a> and should be labelled "accredited official statistics".</p><p></p><p><a>GDP monthly estimates, UK: March 2025</a><br> Bulletin | Released 15 May 2025<br> Gross doLine truncated
|
||||
+227
@@ -0,0 +1,227 @@
|
||||
<html><body><h1 class="padding-bottom--0 padding-top--0 margin-top--2 font-weight-700 margin-bottom--2 ">GDP quarterly national accounts, UK: October to December 2025</h1><p class="page-bulletins--Summary margin-right-md--2 margin-bottom--3 padding-bottom--0 padding-top--0">
|
||||
|
||||
|
||||
Revised quarterly estimate of gross domestic product (GDP) for the UK. Uses additional data to provide a more precise indication of economic growth than the first estimate.
|
||||
|
||||
</p><p class="alert-release-banner__title">This is not the latest release.
|
||||
<a class="alert-release-banner__link">View latest release</a>
|
||||
</p><p class="col col--md-12 col--lg-15 margin-bottom-sm--1 margin-bottom-md--3 margin-top-sm--1 padding-bottom--0 padding-top--0">
|
||||
<span class="font-weight-700">Contact: </span><br><a class="text--white"><span class="visuallyhidden">Email </span>Gross Domestic Product team</a>
|
||||
</p><p class="col col--md-one-third col--lg-one-third margin-bottom-sm--1 margin-bottom-md--3 margin-top--0 padding-bottom--0 padding-top--0">
|
||||
<span class="font-weight-700">Release date: </span><br>31 March 2026<br>
|
||||
|
||||
</p><p class="col col--md-one-third col--lg-one-third margin-bottom-sm--3 margin-bottom-md--3 margin-top--0 padding-bottom--0 padding-top--0">
|
||||
<span class="font-weight-700">Next release: </span><br>14 May 2026
|
||||
</p><h2 class="table-of-contents__title">Table of contents</h2><p class="text-right--md padding-top-md--0 padding-bottom-md--0 height--5 margin-bottom-md--0 print--hide nojs--hide js--show">
|
||||
<a class="link-complex nojs--hide js--show js-print-page">
|
||||
Print this <span class="lowercase">
|
||||
Statistical bulletin
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
</a>
|
||||
<span class="icon icon-print--dark"></span>
|
||||
</p><p class="text-right--md padding-top-md--0 padding-bottom-md--0 height--5 margin-top-md--1 print--hide">
|
||||
<a class="link-complex js-pdf-dl-link">
|
||||
Download as PDF
|
||||
</a>
|
||||
<span class="icon icon-download--dark"></span>
|
||||
</p><p>UK real gross domestic product (GDP) is estimated to have increased by an unrevised 0.1% in Quarter 4 (Oct to Dec) 2025, following unrevised growth of 0.1% in the previous quarter (Figure 1).</p><p>In line with the <a>National Accounts Revisions Policy</a>, this release includes revisions to data from Quarter 1 (Jan to Mar) 2024 to Quarter 4 (Oct to Dec) 2025 as a result of updated source data and a review of seasonal adjustment. There have been no revisions to the quarterly path of total real GDP across 2024 and 2025, however, there have been some revisions to underlying components.</p><p><a>Early estimates of GDP are subject to revision</a> (positive or negative). Our recently published analysis shows that the mean absolute revision between the quarterly national accounts GDP estimate, and the same quarterly estimate three years later is, on average, plus or minus 0.24 percentage points. Revisions are made when more detailed information becomes available through the comprehensive annual supply and use balancing process, as the data content increases. For more information, please refer to our <a>GDP revisions in Blue Book: 2025 article</a>.</p><p>In our next monthly GDP publication on 16 April 2026, we will now be revising our estimates from January 2024 to reflect the latest data. These updates will also be incorporated into the GDP first quarterly estimate being published on 14 May 2026, where there will be revisions from Quarter 1 2024.</p><p>Please see the <a>updated National Accounts Revision Policy</a> for more details, including future releases.</p><p>The GDP growth vintages from 2024 onwards are shown in Table 4. We give more information on <a>uncertainty</a> in <a>Section 12: Data sources and quality</a>.</p><p>
|
||||
|
||||
|
||||
|
||||
|
||||
</p><p>Q1 refers to Quarter 1 (Jan to Mar), Q2 refers to Quarter 2 (Apr to June), Q3 refers to Quarter 3 (July to Sept) and Q4 refers to Quarter 4 (Oct to Dec). </p><p>Chart shows the quarter on previous quarter growth rounded to 1 decimal place (%). </p><p>Real GDP per head is estimated to have decreased by 0.1% in the latest quarter, but it is up 0.6% compared with the same quarter a year ago. See <a>Section 6 for more information</a>. </p><p>
|
||||
</p><table class="table">
|
||||
<caption class="table__caption">Table 1: Headline National Accounts indicators for the UK <br><span class="table__subtitle">% growth </span></caption>
|
||||
<colgroup><col><col><col><col><col><col></colgroup>
|
||||
<tr class="table__header-row"><td class="align-left"></td><th class="align-right">GDP (Chained volume measures)</th><th class="align-right">GDP per head (Chained volume measures) [Note 3]</th><th class="align-right">Real household<br>dispoable income<br>per head<br>[Note 3]</th><th class="align-right">GDP (Current market prices)</th><th class="align-right">GDP implied deflator</th></tr>
|
||||
<tr><th class="align-left">Seasonally adjusted</th><td class="align-right"></td><td class="align-right"></td><td class="align-right"></td><td class="align-right"></td><td class="align-right"></td></tr>
|
||||
<tr><td class="align-left"></td><td class="align-right"></td><td class="align-right"></td><td class="align-right"></td><td class="align-right"></td><td class="align-right"></td></tr>
|
||||
<tr><th class="align-left">2024</th><td class="align-right">1.1</td><td class="align-right">0.0</td><td class="align-right">3.0</td><td class="align-right">5.1</td><td class="align-right">3.9</td></tr>
|
||||
<tr><th class="align-left">2025</th><td class="align-right">1.4</td><td class="align-right">1.1</td><td class="align-right">0.6</td><td class="align-right">5.1</td><td class="align-right">3.7</td></tr>
|
||||
<tr><td class="align-left"></td><td class="align-right"></td><td class="align-right"></td><td class="align-right"></td><td class="align-right"></td><td class="align-right"></td></tr>
|
||||
<tr><th class="align-left">2024 Q1</th><td class="align-right">0.8</td><td class="align-right">0.5</td><td class="align-right">1.7</td><td class="align-right">2.2</td><td class="align-right">1.4</td></tr>
|
||||
<tr><th class="align-left">2024 Q2</th><td class="align-right">0.6</td><td class="align-right">0.3</td><td class="align-right">0.2</td><td class="align-right">1.7</td><td class="align-right">1.1</td></tr>
|
||||
<tr><th class="align-left">2024 Q3</th><td class="align-right">0.2</td><td class="align-right">0.1</td><td class="align-right">1.6</td><td class="align-right">1.7</td><td class="align-right">1.4</td></tr>
|
||||
<tr><th class="align-left">2024 Q4</th><td class="align-right">0.3</td><td class="align-right">0.3</td><td class="align-right">1.3</td><td class="align-right">1.1</td><td class="align-right">0.8</td></tr>
|
||||
<tr><th class="align-left">2025 Q1</th><td class="align-right">0.7</td><td class="align-right">0.6</td><td class="align-right">-0.9</td><td class="align-right">1.3</td><td class="align-right">0.7</td></tr>
|
||||
<tr><th class="align-left">2025 Q2</th><td class="align-right">0.2</td><td class="align-right">0.1</td><td class="align-right">0.0</td><td class="align-right">1.3</td><td class="align-right">1.1</td></tr>
|
||||
<tr><th class="align-left">2025 Q3</th><td class="align-right">0.1</td><td class="align-right">0.0</td><td class="align-right">-1.2</td><td class="align-right">0.9</td><td class="align-right">0.8</td></tr>
|
||||
<tr><th class="align-left">2025 Q4</th><td class="align-right">0.1</td><td class="align-right">-0.1</td><td class="align-right">1.2</td><td class="align-right">0.6</td><td class="align-right">0.5</td></tr>
|
||||
</table><p>Nominal GDP is estimated to have increased by 0.6% in Quarter 4 2025 and is now 4.2% higher compared with the same quarter a year ago.</p><p>The implied GDP deflator is the broadest measure of inflation in the domestic economy, reflecting changes in the price of all goods and services that make up GDP. The GDP deflator covers the whole of the domestic economy, not just consumer spending. It also reflects the change in the relative price of exports to imports. For more information on the implied GDP deflator, see our <a>Measuring price changes of the UK national accounts: February 2023 article</a>.</p><p>Compared with the same quarter a year ago, the GDP implied deflator increased by 3.2% in Quarter 4 2025, mainly caused by household expenditure, gross capital formation, general government, and exports (Figure 2).</p><p>
|
||||
|
||||
|
||||
|
||||
|
||||
</p><p>Q1 refers to Quarter 1 (Jan to Mar), Q2 refers to Quarter 2 (Apr to June), Q3 refers to Quarter 3 (July to Sept) and Q4 refers to Quarter 4 (Oct to Dec). </p><p>Component contributions do not sum to total because of rounding. </p><p>An increase in import prices contributes negatively to the implied GDP deflator, while a decrease in import prices contributes positively to the implied GDP deflator. </p><p>Real annual GDP is estimated to have increased by 1.4% in 2025, revised up from the first estimate of 1.3% (Figure 3). Compared with the first estimate, the three approaches are now more closely aligned, mainly reflecting upwards revisions in the expenditure approach, which is discussed later in this bulletin. Growth in 2024 remains unrevised at 1.1%, with the three approaches showing growth in the range of 0.9% to 1.2%.</p><p>There will be uncertainty at the component level at this stage in the production cycle for 2024 onwards until these data have been confronted through the supply and use tables framework (SUTs). There are various reasons for this uncertainty, and these are further discussed in <a>Section 12: Data sources and quality</a>.</p><p>
|
||||
|
||||
|
||||
|
||||
|
||||
</p><p>Output is estimated to have increased by an unrevised 0.1% in Quarter 4 (Oct to Dec) 2025, following unrevised growth of 0.1% in the previous quarter. Overall, in Quarter 4 2025, there were increases in 12 out of 20 of the subsectors of GDP.</p><p>The production sector increased by 1.2%, while the construction sector decreased by 2.0% (revised up from a fall of 2.1%), and services showed no growth.</p><p>Services output showed no growth in Quarter 4 2025, following an increase of 0.2% in Quarter 3 (July to Sept) 2025. Services output is estimated to be 1.0% higher compared with the same quarter a year ago. Non-consumer-facing services (business-facing services) showed no growth in Quarter 4 2025, while consumer-facing services increased by 0.2%.</p><p>Figure 4 shows that 7 of the 14 services subsectors contributed positively to services growth. The largest positive contributor to growth was information and communication, and transportation and storage subsectors. Information and communication increased by 0.7%, mainly caused by increases of 9.0% in information service activities, and 9.0% in motion picture, video and TV programme production, sound recording, and music publishing activities.</p><p>The transportation and storage subsector increased by 1.1%, mainly because of rises in five out of the six industries.</p><p>The largest negative contributor to growth in Quarter 4 2025 was professional, scientific, and technical activities which decreased by 1.4%.</p><p>
|
||||
|
||||
|
||||
|
||||
|
||||
</p><p>Across 2024 and 2025, the services sector saw revisions for the following reasons:</p><p>some businesses replied late and updated their Monthly Business Survey returns, along with other source data updates</p><p>Value Added Tax (VAT) data for Quarter 3 (Jul to Sept) 2025 was incorporated for the first time</p><p>revisions were made across 2024 to the retail trade, except of motor vehicles and motorcycles because of updated returns to the Retail Sales Index (RSI) survey; these revisions are discussed in more detail in our <a>Retail sales December 2025 bulletin</a>, published on 23 January 2026</p><p>The production sector is estimated to have grown by 1.2% in Quarter 4 2025, following a 1.0% decrease in the previous quarter. Production output is estimated to be 0.6% higher compared with the same quarter a year ago, revised down from the previous estimate of 1.0%.</p><p>The growth in production output in the latest quarter was mainly because of a growth of 0.8% in manufacturing, and a growth of 3.4% in electricity, gas, steam, and air conditioning supply. Mining and quarrying (up by 0.8%), and water supply; sewerage, waste management and remediation activities (up by 1.0%) also grew in the latest quarter.</p><p>Looking at the manufacturing sector in more detail, 8 out of 13 manufacturing subsectors contributed positively to manufacturing growth in the latest quarter (Figure 5). The largest positive contributions to the growth were other manufacturing and repair, which grew by 4.0%, and the manufacture of machinery and equipment not elsewhere classified, which grew by 3.6%.</p><p>
|
||||
|
||||
|
||||
|
||||
|
||||
</p><p>Across 2024 and 2025, the production sector sees revisions to growth mainly caused by manufacturing.</p><p>Reasons for revisions to production:</p><p>some businesses replied late and updated their Monthly Business Survey returns, along with other source data updates</p><p>Value Added Tax (VAT) data for Quarter 3 (Jul to Sept) 2025 was incorporated for the first time</p><p>a review of seasonal adjustment models</p><p>Construction output is estimated to have decreased by 2.0% in Quarter 4 2025 (previously estimated as a 2.1% decrease), following growth of 0.5% in the previous quarter. Repair and maintenance decreased by 1.5%, and new work decreased by 2.3% over the period. Within repair and maintenance, the largest negative contributor came from private housing repair and maintenance, which decreased by 2.4%. In new work, the largest negative contributor came from private housing new work, which decreased by 3.6%.</p><p>Expenditure is estimated to have grown by an unrevised 0.1% in Quarter 4 (Oct to Dec) 2025, which was mainly caused by increases in gross capital formation: other, household consumption and government consumption (Figure 6).</p><p>Within gross capital formation: other, the largest contribution was from acquisitions less disposals of valuables, which increased by £5.9 billion between Quarter 3 and Quarter 4 of 2025. This component is largely made up of non-monetary gold, which also appears within net trade and so the effect is GDP neutral.</p><p>
|
||||
|
||||
|
||||
|
||||
|
||||
</p><p>There was a 0.1% increase in real household final consumption expenditure in Quarter 4 2025, revised down from the first estimate increase of 0.2%. Household consumption is now estimated to be up by 0.4% compared with the same quarter a year ago and increased by 0.8% across 2025 as a whole.</p><p>Within household consumption in the latest quarter, growth was caused by transport, miscellaneous, housing, and clothing and footwear.</p><p>Net tourism made little contribution to growth in household consumption in the latest quarter. Net tourism is offset within trade, so there is no effect on the gross domestic product (GDP) aggregate. Information on how we measure net tourism is provided in our <a>National Accounts articles: Treatment of tourism in the UK National Accounts</a>. Excluding net tourism, domestic consumption grew by 0.1% in the latest quarter.</p><p>Revisions to household consumption across 2025 are mainly because of updated data and a review of seasonal adjustment models in areas such as transport, financial intermediation services indirectly measured (FISIM), and education.</p><p>Real government consumption expenditure grew by 0.1% in Quarter 4 2025, revised down from the first estimate increase of 0.4%. Government consumption is now estimated to be up by 1.1% compared with the same quarter a year ago and increased by 1.7% across 2025.</p><p>The growth in government consumption in the latest quarter mainly reflects increases in health, education, and social care.</p><p>Revisions in government consumption partly reflect revised source data and updates to our seasonal adjustment model for the volume of education.</p><p>Within gross capital formation, gross fixed capital formation (GFCF) increased by 0.2% in Quarter 4 2025, revised up from the first estimate decrease of 0.1%. GFCF is now estimated to be 4.2% higher compared with the same quarter a year ago and increased by 4.3% across 2025.</p><p>Within GFCF, business investment is estimated to have decreased by 2.5% in Quarter 4 2025, following growth of 1.1% in the previous quarter. Business investment is now 2.0% higher compared with the same quarter a year ago. Business investment increased by 4.3% across 2025, compared with 2024.</p><p>Revisions in GFCF and business investment mainly reflect updated Quarterly Acquisitions and Disposals of Capital Assets Survey (QCAS) data and other source data.</p><p>Excluding the alignment adjustments, early estimates show that chained volume inventories fell by £627 million in Quarter 4 2025 (Table 2).</p><p>
|
||||
</p><table class="table">
|
||||
<caption class="table__caption">Table 2: Change in inventories, including and excluding balancing and alignment adjustments <br><span class="table__subtitle">Quarter 1 (Jan to Mar) 2024 to Quarter 4 (Oct to Dec) 2025, UK </span></caption>
|
||||
<colgroup><col><col><col><col><col><col></colgroup>
|
||||
<tr class="table__header-row"><td class="align-left"></td><td class="align-left"></td><th class="align-right">Change in Inventories</th><th class="align-right">Of which alignment</th><th class="align-right">Of which balancing</th><th class="align-right">Change in Inventories excluding alignment and balancing</th></tr>
|
||||
<tr><th class="align-left">2024 Q1</th><th class="align-left">Current price</th><td class="align-right">1085</td><td class="align-right">-293</td><td class="align-right">0</td><td class="align-right">1378</td></tr>
|
||||
<tr><th class="align-left">2024 Q1</th><th class="align-left">Chained volume measure</th><td class="align-right">-244</td><td class="align-right">-293</td><td class="align-right">0</td><td class="align-right">49</td></tr>
|
||||
<tr><th class="align-left">2024 Q2</th><th class="align-left">Current price</th><td class="align-right">4090</td><td class="align-right">3067</td><td class="align-right">750</td><td class="align-right">273</td></tr>
|
||||
<tr><th class="align-left">2024 Q2</th><th class="align-left">Chained volume measure</th><td class="align-right">3650</td><td class="align-right">2958</td><td class="align-right">750</td><td class="align-right">-58</td></tr>
|
||||
<tr><th class="align-left">2024 Q3</th><th class="align-left">Current price</th><td class="align-right">636</td><td class="align-right">-1965</td><td class="align-right">-500</td><td class="align-right">3101</td></tr>
|
||||
<tr><th class="align-left">2024 Q3</th><th class="align-left">Chained volume measure</th><td class="align-right">-1372</td><td class="align-right">-1889</td><td class="align-right">-500</td><td class="align-right">1017</td></tr>
|
||||
<tr><th class="align-left">2024 Q4</th><th class="align-left">Current price</th><td class="align-right">2118</td><td class="align-right">-809</td><td class="align-right">0</td><td class="align-right">2927</td></tr>
|
||||
<tr><th class="align-left">2024 Q4</th><th class="align-left">Chained volume measure</th><td class="align-right">3347</td><td class="align-right">-776</td><td class="align-right">0</td><td class="align-right">4123</td></tr>
|
||||
<tr><th class="align-left">2025 Q1</th><th class="align-left">Current price</th><td class="align-right">112</td><td class="align-right">-1908</td><td class="align-right">-500</td><td class="align-right">2520</td></tr>
|
||||
<tr><th class="align-left">2025 Q1</th><th class="align-left">Chained volume measure</th><td class="align-right">231</td><td class="align-right">-1795</td><td class="align-right">-500</td><td class="align-right">2526</td></tr>
|
||||
<tr><th class="align-left">2025 Q2</th><th class="align-left">Current price</th><td class="align-right">2052</td><td class="align-right">2090</td><td class="align-right">-1000</td><td class="align-right">962</td></tr>
|
||||
<tr><th class="align-left">2025 Q2</th><th class="align-left">Chained volume measure</th><td class="align-right">3169</td><td class="align-right">1949</td><td class="align-right">500</td><td class="align-right">720</td></tr>
|
||||
<tr><th class="align-left">2025 Q3</th><th class="align-left">Current price</th><td class="align-right">-194</td><td class="align-right">222</td><td class="align-right">-500</td><td class="align-right">84</td></tr>
|
||||
<tr><th class="align-left">2025 Q3</th><th class="align-left">Chained volume measure</th><td class="align-right">355</td><td class="align-right">211</td><td class="align-right">-500</td><td class="align-right">644</td></tr>
|
||||
<tr><th class="align-left">2025 Q4</th><th class="align-left">Current price</th><td class="align-right">-2015</td><td class="align-right">-404</td><td class="align-right">0</td><td class="align-right">-1611</td></tr>
|
||||
<tr><th class="align-left">2025 Q4</th><th class="align-left">Chained volume measure</th><td class="align-right">-992</td><td class="align-right">-365</td><td class="align-right">0</td><td class="align-right">-627</td></tr>
|
||||
</table><p>The UK's trade deficit for goods and services is now estimated at 1.6% of nominal GDP in Quarter 4 2025. However, this includes <a>non-monetary gold</a> and other precious metals, which is an erratic series. It can be useful to exclude this from the trade balance.</p><p>Excluding non-monetary gold and other precious metals, the trade deficit is now estimated at 0.3% of nominal GDP in Quarter 4 2025 (Figure 7).</p><p>There have been notable revisions to trade in goods from Quarter 1 (Jan to Mar) 2024. This reflects revisions to exports because of new merchanting data. There was also a previous processing error in our <a>last UK trade: December 2025 bulletin</a>, in ship transactions data and an improvement to the methodology for removing double counting of precious metals across different data sources. In addition, precious metals imports seen a large revision in the last quarter of 2025, reflecting updated source data.</p><p>
|
||||
|
||||
|
||||
|
||||
|
||||
</p><p>Export volumes decreased by 0.7% in the latest quarter and are now 1.2% higher compared with the same quarter a year ago.</p><p>The decrease in the latest quarter was mainly caused by a 2.4% decline in goods exports, which offset a 0.6% increase in services exports. Within goods exports, the decline was mainly caused by decreases in machinery and transport equipment, chemicals, material manufactures and fuels. The increase in services exports was mainly because of other business services and transport.</p><p>Import volumes are estimated to have increased by 0.7% in the latest quarter and are now 1.9% higher compared with the same quarter a year ago. Services imports increased by 2.3%, mainly because of insurance and pension services, and intellectual property. Goods imports decreased by 0.2%, with large movements in non-monetary gold offset by falls in machinery and transport equipment. However, this series also appears within gross capital formation (GCF) as valuables, so the effect is GDP neutral.</p><p>Nominal gross domestic product (GDP) grew by an unrevised 0.6% in Quarter 4 (Oct to Dec) 2025 and is up by 4.2% compared with the same quarter a year ago. Growth in nominal GDP in the latest quarter was mainly caused by increases in compensation of employees (Figure 8).</p><p>
|
||||
|
||||
|
||||
|
||||
|
||||
</p><p>Q1 refers to Quarter 1 (Jan to Mar), Q2 refers to Quarter 2 (Apr to June), Q3 refers to Quarter 3 (July to Sept) and Q4 refers to Quarter 4 (Oct to Dec). </p><p>Components contributions may not sum to total because of rounding </p><p>Please note, the alignment adjustment is included in the Gross Operating Surplus of nominal GDP. </p><p>Compensation of employees increased by 1.0% in the latest quarter, revised down from 1.4% in the first estimate. It is up by 6.0% compared with the same quarter a year ago. Growth in Quarter 4 2025 was caused by increases of 1.2% in employers' social contributions (mainly in National Insurance contributions) and 0.9% in wages and salaries.</p><p>Early estimates of private sector wages and salaries are based on estimates of the number of employees in the economy, from our Labour Force Survey (LFS), and average earnings from our average weekly earnings statistics. However, there is some additional <a>uncertainty</a> around the employee estimates used to derive our figures of wages and salaries, because of low response rates in the LFS. We have therefore used additional information from our <a>Earnings and employment from Pay As You Earn (PAYE) Real Time Information UK bulletin</a> to help improve the accuracy of the income measure of GDP. This is reflected in revisions across the quarters open to revision, where balancing adjustments have been applied to improve alignment to PAYE Real Time Information estimates.</p><p>Other income is now estimated to have increased by 0.6% in the latest quarter and is 1.5% higher compared with the same quarter a year ago. This was caused by an increase in household gross operating surplus.</p><p>Taxes less subsidies are estimated to have increased by 0.9% in Quarter 4 2025, and are now 5.0% higher compared with the same quarter a year ago.</p><p>There was a 1.0% increase in taxes (mainly Value Added Tax (VAT)), and a 2.1% increase in subsidies that contribute negatively to GDP.</p><p>Total gross operating surplus (GOS) of corporations, excluding the alignment adjustment, grew by 2.2% in Quarter 4 2025 (Table 3). This is mainly because of an increase in private non-financial corporations.</p><p>There is uncertainty around estimates of non-financial corporations within the GOS of corporations. This is because we do not have up-to-date quarterly information on the gross trading profits of businesses. These data are collected from HM Revenue and Customs (HMRC) and are available with a lag of approximately two years. We rely on contextual data from other sources to inform these quarterly estimates, as outlined in our <a>Profitability of UK companies quality and methodology information (QMI)</a>.</p><p>
|
||||
</p><table class="table">
|
||||
<caption class="table__caption">Table 3: Gross operating surplus of corporations, including and excluding alignment adjustments<br><span class="table__subtitle">Quarter 1 (Jan to Mar) 2024 to Quarter 4 (Oct to Dec) 2025, UK </span></caption>
|
||||
<colgroup><col><col><col><col><col></colgroup>
|
||||
<tr class="table__header-row"><td class="align-left"></td><th class="align-right">Gross operating surplus of corporations</th><th class="align-right">Of which alignment</th><th class="align-right">Gross operating surplus of corporations excluding alignment </th><th class="align-right">Gross operating surplus of corporations excluding alignment </th></tr>
|
||||
<tr class="table__header-row"><td class="align-left"></td><td class="align-right"></td><td class="align-right"></td><td class="align-right"></td><th class="align-right">Quarter-on-quarter growth</th></tr>
|
||||
<tr><th class="align-left">2024 Q1</th><td class="align-right">154096</td><td class="align-right">-2266</td><td class="align-right">156362</td><td class="align-right">1.8</td></tr>
|
||||
<tr><th class="align-left">2024 Q2</th><td class="align-right">160801</td><td class="align-right">2792</td><td class="align-right">158009</td><td class="align-right">1.1</td></tr>
|
||||
<tr><th class="align-left">2024 Q3</th><td class="align-right">163237</td><td class="align-right">1027</td><td class="align-right">162210</td><td class="align-right">2.7</td></tr>
|
||||
<tr><th class="align-left">2024 Q4</th><td class="align-right">160919</td><td class="align-right">-1553</td><td class="align-right">162472</td><td class="align-right">0.2</td></tr>
|
||||
<tr><th class="align-left">2025 Q1</th><td class="align-right">160338</td><td class="align-right">-2184</td><td class="align-right">162522</td><td class="align-right">0.0</td></tr>
|
||||
<tr><th class="align-left">2025 Q2</th><td class="align-right">167410</td><td class="align-right">3012</td><td class="align-right">164398</td><td class="align-right">1.2</td></tr>
|
||||
<tr><th class="align-left">2025 Q3</th><td class="align-right">166004</td><td class="align-right">1728</td><td class="align-right">164276</td><td class="align-right">-0.1</td></tr>
|
||||
<tr><th class="align-left">2025 Q4</th><td class="align-right">165265</td><td class="align-right">-2556</td><td class="align-right">167821</td><td class="align-right">2.2</td></tr>
|
||||
</table><p>We produce estimates of gross domestic product (GDP) per head (or per capita), which divides UK GDP by the total UK population. This is one proxy indicator of welfare, rather than production, which reflects a country's living standards. It captures the volume of goods and services available to the average person. Further information on this is available in our <a>Trends in UK real GDP per head: 2022 to 2024 article</a>.</p><p>Real GDP per head is estimated to have decreased by 0.1% in the latest quarter, but it is up 0.6% compared with the same quarter a year ago. (Figure 9). There have been some small revisions to GDP per head figures across 2025, reflecting some small revisions to GDP £ million figures as discussed at the start of this bulletin.</p><p>Real GDP per head is estimated to have increased by 1.1% annually in 2025, following no growth in 2024.</p><p>Population figures for up to mid-2024 are based on <a>mid-year UK population estimates</a> published on 26 September 2025. Figures for Quarter 3 (July to Sept) 2024 to Quarter 1 (Jan to Mar) 2025 are based on an interpolation between the mid-2024 estimate and the <a>provisional mid-2025 estimate</a> published on 27 November 2025.</p><p>For Quarter 2 (Apr to June) 2025, the population figure is based on the provisional mid-2025 estimate. The population figure for Quarter 3 2025 and Quarter 4 2025 is based on an interpolation between UK 2022-based population projections for mid-2026 (as published on 28 January 2025) using the migration category variant and the mid-2025 provisional UK population estimate.</p><p>
|
||||
|
||||
|
||||
|
||||
|
||||
</p><p>We estimate Real Household Disposable Income (RHDI) per head, by dividing RHDI by the total UK population. RHDI per head has increased by 1.2% in Quarter 4 (Oct to Dec) 2025, following a decrease of 1.2% in the previous quarter. The components of this measure are further broken down in <a>section 7 of this bulletin</a>.</p><p>
|
||||
|
||||
|
||||
|
||||
|
||||
</p><p>Real household disposable income (RHDI) per head increased by 1.2% in Quarter 4 (Oct to Dec) 2025, following a decrease of 1.2% in the previous quarter.</p><p>The increase in RHDI is because of several factors. Nominal gross disposable income increased by 1.7% this quarter, following a decrease of 0.3% in the previous quarter. This was caused by increases in wages and salaries of £2.9 billion and social benefits other than social transfers in kind of £1.5 billion, together with a decrease in taxes on income and wealth of £1.3 billion.</p><p>The seasonal pattern of PAYE receipts can be driven by many factors, including the timing of public sector pay awards.</p><p>This was partially offset by a decrease in net property income of £1.1 billion. The implied deflator (used to remove the effects of inflation) grew by 0.4% in the latest quarter, which tempers the increase in RHDI per head.</p><p>
|
||||
|
||||
|
||||
|
||||
|
||||
</p><p>The households' saving ratio is estimated to have grown to 9.9% in the latest quarter, up from 9.1% in Quarter 3 (Jul to Sep) 2025. During Quarter 4 (Oct to Dec) 2025, the contribution of non-pension saving increased to 5.7 percentage points, up from 4.5 percentage points. Pension saving contributed 4.2 percentage points to the saving ratio, down from 4.6 percentage points in the previous quarter.</p><p>Final consumption expenditure grew by 0.4% this quarter, down from growth of 0.8% in the previous quarter. The growth was caused by increases in spending on Housing, water gas, electric and other, Restaurants and hotels and Food and non-alcoholic beverages. This is also evident in the financial account where households deposited £38.1 billion into their accounts in the latest quarter, compared with £15.2 billion in the previous quarter.</p><p>
|
||||
|
||||
|
||||
|
||||
|
||||
</p><p>In the latest quarter, general government and non-profit institutions serving households were net borrowers whilst non-financial corporations, financial corporations, households, and rest of the world were net lenders.</p><p>The UK's borrowing position with the rest of the world as a percentage of gross domestic product (GDP) is estimated to have increased to 2.5% in Quarter 4 (Oct to Dec) 2025 compared with 1.6% of GDP in Quarter 3 (Jul to Sep) 2025.</p><p>Non-financial corporations decreased their net lending to 0.1% of GDP in the latest quarter, from net lending of 1.0% of GDP in Quarter 3 2025. Within non-financial corporations, private non-financial corporations decreased their net lending to £0.4 billion in Quarter 4 2025, from net lending of £7.3 billion in the previous quarter. This decrease was caused by a fall in net distributed income of corporations of £8.5 billion, partially offset by a £3.0 billion decrease in gross capital formation.</p><p>Financial corporations net lending position was at 0.1% of GDP (£0.9 billion) in the latest quarter following lending of 0.4% of GDP in Quarter 3 2025. This was caused by an increase in gross capital formation of £8.1 billion and a decrease in social contributions of £1.5 billion partially offset by increases in net capital transfers of £3.3 billion and net property income of £2.2 billion.</p><p>General government net borrowing was unchanged from the previous quarter at 5.0% of GDP. Within general government, central government decreased their net borrowing to £34.6 billion, following net borrowing of £36.4 billion in the previous quarter. This decrease was caused by a fall in payments of interest of £4.8 billion partially offset by a rise of £2.8 billion in gross fixed capital formation.</p><p>Households increased their net lending position to 2.5% of GDP in the latest quarter, from 2.1% of GDP in Quarter 3 2025. The causes for this position are the same as those identified in the household saving ratio section.</p><p>In the latest quarter, general government were net borrowers, whilst non-financial corporations, financial corporations, households, non-profit institutions serving households and rest of the world were net lenders.</p><p>The UK's net borrowing position with the rest of the world as a percentage of gross domestic product (GDP) is estimated to have decreased to 1.2% in Quarter 4 (Oct to Dec) 2025 compared with 3.3% of GDP in Quarter 3 (Jul to Sep) 2025.</p><p>Non-financial corporations net lending was unchanged from the previous quarter at 0.3% in the latest quarter. Within this sector, private non-financial corporations increased their net lending to £1.8 billion in Quarter 4 2025 from net borrowing of £1.6 billion in the previous quarter. This was caused by a reduction in loan liabilities of £55.3 billion, an increase in net debt securities of £7.8 billion together with an increase in currency and deposits of £ £4.7 billion. Partially offset by a decrease in net equity and investment fund shares and units of £30.9 billion and a decrease in net other accounts of £20.7 billion.</p><p>Financial corporations decreased their net lending to 0.1% of GDP in the latest quarter, from 0.4% in Quarter 3 2025. This was caused by a decrease in net debt securities of £35.8 billion, a decrease in net equity and investment fund shares and units of £21.1 billion. Partially offset by an increase in net loans of £48.2 billion and an increase in net other accounts of £4.3 billion.</p><p>General government increased their net borrowing as a percentage of GDP to an estimated 5.8% in the latest quarter from 5.4% in Quarter 3 2025. Within general government, central government increased their net borrowing to £38.5 billion, following £38.3 billion in the previous quarter. This was caused by a decrease in net currency and deposits of £22.5 billion, partially offset by an increase in net other accounts of £17.8 billion.</p><p>Households increased their net lending as a percentage of GDP in the latest quarter to 4.1% from 1.3% in Quarter 3 2025. This was caused by an increase in net currency and deposits of £24.7 billion, a decrease in loans liabilities of £3.9 billion, partially offset by a decrease in net other accounts of £4.2 billion and a decrease in net equity and investment fund shares and units of £3.0 billion.</p><p>In line with our <a>National Accounts Revisions Policy</a>, this release includes revisions to data from Quarter 1 (Jan to Mar) 2024 to Quarter 4 (Oct to Dec) 2025.</p><p>Early estimates of gross domestic product (GDP) are subject to positive or negative revision, as described in our <a>Why GDP figures are revised article</a>. For more information, please refer to our <a>GDP revisions in Blue Book: 2025 article</a>, published on 31 October 2025. The GDP growth vintages to 1 decimal place are shown in Table 4.</p><p>
|
||||
</p><table class="table">
|
||||
<caption class="table__caption"> Table 4: Quarter-on-quarter growth for real GDP at different publication vintages <br><span class="table__subtitle">Quarter 1 (Jan to Mar) 2024 to Quarter 4 (Oct to Dec) 2025 </span></caption>
|
||||
<colgroup><col><col><col><col><col><col><col><col><col></colgroup>
|
||||
<tr class="table__header-row"><th class="align-left">Relating to Period</th><th class="align-right">2024 Q1</th><th class="align-right">2024 Q2</th><th class="align-right">2024 Q3</th><th class="align-right">2024 Q4</th><th class="align-right">2025 Q1</th><th class="align-right">2025 Q2</th><th class="align-right">2025 Q3</th><th class="align-right">2025 Q4</th></tr>
|
||||
<tr><th class="align-left">May-24</th><td class="align-right">0.6</td><td class="align-right"></td><td class="align-right"></td><td class="align-right"></td><td class="align-right"></td><td class="align-right"></td><td class="align-right"></td><td class="align-right"></td></tr>
|
||||
<tr><th class="align-left">Jun-24</th><td class="align-right">0.7</td><td class="align-right"></td><td class="align-right"></td><td class="align-right"></td><td class="align-right"></td><td class="align-right"></td><td class="align-right"></td><td class="align-right"></td></tr>
|
||||
<tr><th class="align-left">Aug-24</th><td class="align-right">0.7</td><td class="align-right">0.6</td><td class="align-right"></td><td class="align-right"></td><td class="align-right"></td><td class="align-right"></td><td class="align-right"></td><td class="align-right"></td></tr>
|
||||
<tr><th class="align-left">Sep-24</th><td class="align-right">0.7</td><td class="align-right">0.5</td><td class="align-right"></td><td class="align-right"></td><td class="align-right"></td><td class="align-right"></td><td class="align-right"></td><td class="align-right"></td></tr>
|
||||
<tr><th class="align-left">Nov-24</th><td class="align-right">0.7</td><td class="align-right">0.5</td><td class="align-right">0.1</td><td class="align-right"></td><td class="align-right"></td><td class="align-right"></td><td class="align-right"></td><td class="align-right"></td></tr>
|
||||
<tr><th class="align-left">Dec-24</th><td class="align-right">0.7</td><td class="align-right">0.4</td><td class="align-right">0.0</td><td class="align-right"></td><td class="align-right"></td><td class="align-right"></td><td class="align-right"></td><td class="align-right"></td></tr>
|
||||
<tr><th class="align-left">Feb-25</th><td class="align-right">0.8</td><td class="align-right">0.4</td><td class="align-right">0.0</td><td class="align-right">0.1</td><td class="align-right"></td><td class="align-right"></td><td class="align-right"></td><td class="align-right"></td></tr>
|
||||
<tr><th class="align-left">Mar-25</th><td class="align-right">0.9</td><td class="align-right">0.5</td><td class="align-right">0.0</td><td class="align-right">0.1</td><td class="align-right"></td><td class="align-right"></td><td class="align-right"></td><td class="align-right"></td></tr>
|
||||
<tr><th class="align-left">May-25</th><td class="align-right">0.9</td><td class="align-right">0.5</td><td class="align-right">0.0</td><td class="align-right">0.1</td><td class="align-right">0.7</td><td class="align-right"></td><td class="align-right"></td><td class="align-right"></td></tr>
|
||||
<tr><th class="align-left">Jun-25</th><td class="align-right">0.9</td><td class="align-right">0.5</td><td class="align-right">0.0</td><td class="align-right">0.1</td><td class="align-right">0.7</td><td class="align-right"></td><td class="align-right"></td><td class="align-right"></td></tr>
|
||||
<tr><th class="align-left">Aug-25</th><td class="align-right">0.9</td><td class="align-right">0.5</td><td class="align-right">0.0</td><td class="align-right">0.1</td><td class="align-right">0.7</td><td class="align-right">0.3</td><td class="align-right"></td><td class="align-right"></td></tr>
|
||||
<tr><th class="align-left">Sep-25</th><td class="align-right">0.8</td><td class="align-right">0.6</td><td class="align-right">0.2</td><td class="align-right">0.2</td><td class="align-right">0.7</td><td class="align-right">0.3</td><td class="align-right"></td><td class="align-right"></td></tr>
|
||||
<tr><th class="align-left">Nov-25</th><td class="align-right">0.8</td><td class="align-right">0.6</td><td class="align-right">0.2</td><td class="align-right">0.2</td><td class="align-right">0.7</td><td class="align-right">0.3</td><td class="align-right">0.1</td><td class="align-right"></td></tr>
|
||||
<tr><th class="align-left">Dec-25</th><td class="align-right">0.8</td><td class="align-right">0.6</td><td class="align-right">0.2</td><td class="align-right">0.3</td><td class="align-right">0.7</td><td class="align-right">0.2</td><td class="align-right">0.1</td><td class="align-right"></td></tr>
|
||||
<tr><th class="align-left"> Feb-26</th><td class="align-right">0.8</td><td class="align-right">0.6</td><td class="align-right">0.2</td><td class="align-right">0.3</td><td class="align-right">0.7</td><td class="align-right">0.2</td><td class="align-right">0.1</td><td class="align-right">0.1</td></tr>
|
||||
<tr><th class="align-left">Latest estimate: Mar-26</th><td class="align-right">0.8</td><td class="align-right">0.6</td><td class="align-right">0.2</td><td class="align-right">0.3</td><td class="align-right">0.7</td><td class="align-right">0.2</td><td class="align-right">0.1</td><td class="align-right">0.1</td></tr>
|
||||
<tr><th class="align-left">Total revision between first and latest estimate</th><td class="align-right">0.2</td><td class="align-right">0.0</td><td class="align-right">0.1</td><td class="align-right">0.2</td><td class="align-right">0.0</td><td class="align-right">-0.1</td><td class="align-right">0.0</td><td class="align-right">0.0</td></tr>
|
||||
</table><p>
|
||||
</p><table class="table">
|
||||
<caption class="table__caption">Table 5: Real GDP growth for the G7 economies <br><span class="table__subtitle">Percentage change, quarter on quarter and annual growth, real gross domestic product (GDP) for 2025 </span></caption>
|
||||
<colgroup><col><col><col><col><col><col></colgroup>
|
||||
<tr class="table__header-row table__nowrap"><td class="align-left"></td><th class="align-right">Quarter on previous quarter (%)</th><th class="align-right">Annual (%)</th></tr>
|
||||
<tr class="table__header-row table__nowrap"><th class="align-left">Country</th><th class="align-right">2025 Q1</th><th class="align-right">2025 Q2</th><th class="align-right">2025 Q3</th><th class="align-right">2025 Q4</th><th class="align-right">2025</th></tr>
|
||||
<tr><th class="table__nowrap align-left">Canada</th><td class="align-right">0.5</td><td class="align-right">-0.2</td><td class="align-right">0.6</td><td class="align-right">-0.2</td><td class="align-right">1.7</td></tr>
|
||||
<tr><th class="table__nowrap align-left">France</th><td class="align-right">0.1</td><td class="align-right">0.3</td><td class="align-right">0.5</td><td class="align-right">0.2</td><td class="align-right">0.9</td></tr>
|
||||
<tr><th class="table__nowrap align-left">Germany</th><td class="align-right">0.4</td><td class="align-right">-0.2</td><td class="align-right">0.0</td><td class="align-right">0.3</td><td class="align-right">0.4</td></tr>
|
||||
<tr><th class="table__nowrap align-left">Italy</th><td class="align-right">0.3</td><td class="align-right">0.0</td><td class="align-right">0.2</td><td class="align-right">0.3</td><td class="align-right">0.7</td></tr>
|
||||
<tr><th class="table__nowrap align-left">Japan</th><td class="align-right">0.3</td><td class="align-right">0.6</td><td class="align-right">-0.7</td><td class="align-right">0.3</td><td class="align-right">1.2</td></tr>
|
||||
<tr><th class="table__nowrap align-left">UK</th><td class="align-right">0.7</td><td class="align-right">0.2</td><td class="align-right">0.1</td><td class="align-right">0.1</td><td class="align-right">1.4</td></tr>
|
||||
<tr><th class="table__nowrap align-left">United States</th><td class="align-right">-0.2</td><td class="align-right">0.9</td><td class="align-right">1.1</td><td class="align-right">0.2</td><td class="align-right">2.1</td></tr>
|
||||
</table><p>
|
||||
</p><table class="table">
|
||||
<caption class="table__caption">Table 6: Real GDP per head growth for the G7 economies <br><span class="table__subtitle">Percentage change, quarter on quarter and annual growth, real gross domestic product (GDP) per head for 2025 </span></caption>
|
||||
<colgroup><col><col><col><col><col><col></colgroup>
|
||||
<tr class="table__header-row table__nowrap"><th class="align-left">Country</th><th class="align-right">2025 Q1</th><th class="align-right">2025 Q2</th><th class="align-right">2025 Q3</th><th class="align-right">2025 Q4</th><th class="align-right">2025</th></tr>
|
||||
<tr><th class="table__nowrap align-left">Canada</th><td class="align-right">0.3</td><td class="align-right">-0.3</td><td class="align-right">0.5</td><td class="align-right">0.0</td><td class="align-right">0.6</td></tr>
|
||||
<tr><th class="table__nowrap align-left">France</th><td class="align-right">0.1</td><td class="align-right">0.3</td><td class="align-right">0.5</td><td class="align-right">0.1</td><td class="align-right">0.7</td></tr>
|
||||
<tr><th class="table__nowrap align-left">Germany</th><td class="align-right">0.4</td><td class="align-right">-0.2</td><td class="align-right">0.0</td><td class="align-right">0.3</td><td class="align-right">0.3</td></tr>
|
||||
<tr><th class="table__nowrap align-left">Italy</th><td class="align-right">0.4</td><td class="align-right">0.0</td><td class="align-right">0.2</td><td class="align-right">0.2</td><td class="align-right">0.7</td></tr>
|
||||
<tr><th class="table__nowrap align-left">Japan</th><td class="align-right">0.4</td><td class="align-right">0.6</td><td class="align-right">-0.5</td><td class="align-right">0.5</td><td class="align-right">1.7</td></tr>
|
||||
<tr><th class="table__nowrap align-left">UK</th><td class="align-right">0.6</td><td class="align-right">0.1</td><td class="align-right">0.0</td><td class="align-right">-0.1</td><td class="align-right">1.1</td></tr>
|
||||
<tr><th class="table__nowrap align-left">United States</th><td class="align-right">-0.3</td><td class="align-right">0.8</td><td class="align-right">1.0</td><td class="align-right">0.1</td><td class="align-right">1.6</td></tr>
|
||||
</table><p></p><p><a>GDP - data tables</a><br> Dataset | Released 31 March 2026<br> Annual and quarterly data for UK gross domestic product (GDP) estimates, in chained volume measures and current market prices.</p><p><a>GDP in chained volume measures - real-time database (ABMI)</a><br> Dataset | Released 31 March 2026<br> Quarterly levels for UK gross domestic product (GDP), in chained volume measures at market prices.</p><p><a>GDP at current prices - real-time database (YBHA)</a><br> Dataset | Released 31 March 2026<br> Quarterly levels for UK gross domestic product (GDP) at current market prices. </p><p></p><p>The embedded visualisation below may not display correctly without JavaScript enabled. <a class="underline-link">View it in full screen</a>.</p><p>Quarterly GDP is a balanced measure of three approaches. The GDP monthly estimate focuses on gross value added (GVA) and output as a proxy for GDP. This results in data differences, in both levels and growth terms, between our quarterly bulletins (average GDP) and our <a>GDP monthly estimate bulletins</a> (output approach to GDP). Quarterly GDP is the lead measure of GDP because of its higher data content and inclusion of variables that enable the conversion from a GVA concept to a GDP basis.</p><p>Information on the methods we use is in our <a>Balancing the output, income and expenditure approaches to measuring GDP report</a>.</p><p>Alignment adjustments, found in Table M of our <a>GDP data tables</a>, have a target limit of plus or minus £3,000 million on any quarter. However, in periods where the data sources are particularly difficult to balance, larger alignment adjustments are sometimes needed. This is explained in more detail in our <a>Recent challenges of balancing the three approaches of GDP article</a>.</p><p>Our standard practice is to prefer that the alignment adjustment be out of tolerance rather than over-adjust individual GDP components to achieve a balance. This is most likely to occur in the latest quarter, where the constraints are larger, and where we must align to the output estimate for the change in GDP, and where the data content is at its lowest.</p><p>To achieve a balanced GDP dataset through alignment, we apply balancing adjustments to the components of GDP where data content is particularly weak in each quarter because of a higher level of forecast content. Table 7 shows the balancing adjustments applied to the GDP quarterly dataset.</p><p>
|
||||
</p><table class="table">
|
||||
<caption class="table__caption">Table 7: Balancing adjustments applied to the GDP quarterly national accounts dataset <br><span class="table__subtitle">Quarter 1 (Jan to Mar) 2024 to Quarter 4 (Oct to Dec) 2025, UK </span></caption>
|
||||
<colgroup><col><col><col><col><col><col><col><col><col><col></colgroup>
|
||||
<tr class="table__header-row"><th class="align-left">GDP measurement approach and component adjustment applied to </th><td class="align-left"></td><th class="align-right">2024 Q1</th><th class="align-right">2024 Q2</th><th class="align-right">2024 Q3</th><th class="align-right">2024 Q4</th><th class="align-right">2025 Q1 </th><th class="align-right">2025 Q2 </th><th class="align-right">2025 Q3</th><th class="align-right">2025 Q4</th></tr>
|
||||
<tr><th class="align-left">Expenditure </th><td class="align-left"></td><td class="align-right"></td><td class="align-right"></td><td class="align-right"></td><td class="align-right"></td><td class="align-right"></td><td class="align-right"></td><td class="align-right"></td><td class="align-right"></td></tr>
|
||||
<tr><th class="align-left">Household consumption</th><th class="align-left">Current price</th><td class="align-right">-500</td><td class="align-right"></td><td class="align-right">-500</td><td class="align-right"></td><td class="align-right">500</td><td class="align-right"></td><td class="align-right"></td><td class="align-right"></td></tr>
|
||||
<tr><td class="align-left"></td><th class="align-left">Chained volume measures</th><td class="align-right">-500</td><td class="align-right"></td><td class="align-right">-500</td><td class="align-right">-500</td><td class="align-right"></td><td class="align-right"></td><td class="align-right"></td><td class="align-right"></td></tr>
|
||||
<tr><th class="align-left">Gross fixed capital formation</th><th class="align-left">Current price</th><td class="align-right"></td><td class="align-right"></td><td class="align-right"></td><td class="align-right"></td><td class="align-right">-500</td><td class="align-right"></td><td class="align-right">-500</td><td class="align-right">-500</td></tr>
|
||||
<tr><td class="align-left"></td><th class="align-left">Chained volume measures</th><td class="align-right"></td><td class="align-right"></td><td class="align-right"></td><td class="align-right"></td><td class="align-right">-500</td><td class="align-right"></td><td class="align-right">-500</td><td class="align-right">-500</td></tr>
|
||||
<tr><th class="align-left">Inventories</th><th class="align-left">Current price</th><td class="align-right"></td><td class="align-right">750</td><td class="align-right">-500</td><td class="align-right"></td><td class="align-right">-500</td><td class="align-right">-1000</td><td class="align-right">-500</td><td class="align-right"></td></tr>
|
||||
<tr><td class="align-left"></td><th class="align-left">Chained volume measures</th><td class="align-right"></td><td class="align-right">750</td><td class="align-right">-500</td><td class="align-right"></td><td class="align-right">-500</td><td class="align-right">500</td><td class="align-right">-500</td><td class="align-right"></td></tr>
|
||||
<tr><th class="align-left">Trade in services exports </th><th class="align-left">Current price</th><td class="align-right"></td><td class="align-right">1000</td><td class="align-right">-1000</td><td class="align-right"></td><td class="align-right"></td><td class="align-right"></td><td class="align-right">-500</td><td class="align-right"></td></tr>
|
||||
<tr><td class="align-left"></td><th class="align-left">Chained volume measures</th><td class="align-right">-500</td><td class="align-right">1000</td><td class="align-right">-1000</td><td class="align-right"></td><td class="align-right"></td><td class="align-right"></td><td class="align-right">-500</td><td class="align-right">-500</td></tr>
|
||||
<tr><th class="align-left">Trade in services imports</th><th class="align-left">Current price</th><td class="align-right"></td><td class="align-right">-250</td><td class="align-right">500</td><td class="align-right">500</td><td class="align-right">500</td><td class="align-right"></td><td class="align-right"></td><td class="align-right"></td></tr>
|
||||
<tr><td class="align-left"></td><th class="align-left">Chained volume measures</th><td class="align-right">1000</td><td class="align-right">750</td><td class="align-right">2000</td><td class="align-right">1500</td><td class="align-right">1500</td><td class="align-right">1000</td><td class="align-right">1000</td><td class="align-right">1000</td></tr>
|
||||
<tr><td class="align-left"></td><td class="align-left"></td><td class="align-right"></td><td class="align-right"></td><td class="align-right"></td><td class="align-right"></td><td class="align-right"></td><td class="align-right"></td><td class="align-right"></td><td class="align-right"></td></tr>
|
||||
<tr><th class="align-left">Income</th><td class="align-left"></td><td class="align-right"></td><td class="align-right"></td><td class="align-right"></td><td class="align-right"></td><td class="align-right"></td><td class="align-right"></td><td class="align-right"></td><td class="align-right"></td></tr>
|
||||
<tr><th class="align-left">Compensation of employees</th><th class="align-left">Current price</th><td class="align-right"></td><td class="align-right"></td><td class="align-right"></td><td class="align-right">-1000</td><td class="align-right">-1500</td><td class="align-right">-1500</td><td class="align-right">-1500</td><td class="align-right">-1500</td></tr>
|
||||
<tr><th class="align-left">Private non-financial corporation gross operating surplus</th><th class="align-left">Current price</th><td class="align-right">-500</td><td class="align-right">500</td><td class="align-right"></td><td class="align-right"></td><td class="align-right">-3000</td><td class="align-right">-1500</td><td class="align-right">-1500</td><td class="align-right">-3500</td></tr>
|
||||
<tr><th class="align-left">Financial corporations gross operating surplus</th><th class="align-left">Current price</th><td class="align-right">-500</td><td class="align-right">500</td><td class="align-right"></td><td class="align-right"></td><td class="align-right"></td><td class="align-right"></td><td class="align-right"></td><td class="align-right">-500</td></tr>
|
||||
</table><p>Since the UK left the EU on 31 January 2020, arrangements for how the UK trades with the EU changed. HM Revenue and Customs (HMRC) implemented some data collection changes following Brexit, which affected statistics on UK trade in goods with the EU.</p><p>We have made adjustments to our estimates of goods imports from the EU in 2021 and 2022 to account for these changes. However, a structural break remains in the full time series for goods imports from, and exports to, the EU from January 2021, therefore we advise caution when interpreting and drawing conclusions from these statistics. More detail is provided in our <a>Impact of trade in goods data collection changes on UK trade statistics: summary of adjustments and the structural break from 2021 article</a>.</p><p>From September 2025 until early 2027, International Trade in Services (ITIS) data (which account for approximately 50% of total Trade in Services) will be processed once each quarterly period. During this period, the data will be based on a robust survey response rate of between approximately 60% and 70%. This will enable more focus on improving processing systems and ensuring methods and quality in the future.</p><p>ITIS-based data in Trade in Services estimates at first quarterly estimate will be forecast until early 2027.</p><p>The International Passenger Survey (IPS), which is the source of travel services estimates (accounting for approximately 8% of total trade), is being transformed as part of our <a>Improving our travel and tourism statistics project</a>, and travel services estimates have been forecast since Quarter 3 (July to Sept) 2024. Estimates will be forecast during the period of the travel and tourism transformation.</p><p>Our <a>Financial Services Survey (FSS) is undergoing transformation</a> to improve the quality of our financial sector statistics. During the period of transformation, starting from Quarter 1 2024, financial services trade statistics in this publication are based on forecasts.</p><p>There are three approaches to measuring gross domestic product (GDP):</p><p>the output approach</p><p>the expenditure approach</p><p>the income approach</p><p>The data and data quality are different for each approach, and this dictates the approach taken in balancing quarterly data. There are more data available on output in the UK in the short term, than in the other two approaches. To get the best estimate of GDP, our published figure, estimates from all three approaches are balanced to produce an average, except in the latest two quarters where the output data take the lead, because of the larger data content.</p><p>The three approaches to measuring GDP allow us to confront our data sources within the national accounts framework. Figure 3 shows there are differences in the three approaches at this stage in the production cycle for 2025, with real growth estimated in a range of 1.3% to 1.5%. There will be uncertainty at the component level at this stage in the production cycle for 2024 onwards until these data have been confronted through the supply and use tables framework (SUTs). This uncertainty may be for various reasons and is discussed further later in this section.</p><p>In the output approach, we do not currently have final estimates for intermediate consumption (the value of goods and services purchased to be used up in the production of goods and services). This is outlined in our <a>Blue Book 2025: advanced aggregate estimates article</a>. Initially, we use turnover and output as a proxy for changes in gross value added. We assume that the intermediate consumption ratio by industry, calculated in 2023, holds constant into 2024 onwards. More information on this is provided in Section 11: Data sources and quality of our <a>GDP first quarterly estimate, UK: April to June 2024 bulletin</a>.</p><p>In the expenditure approach, we currently have lower response rates for areas, such as the Living Costs and Food Survey, which is one of many data sources that inform our estimates of household consumption. We therefore rely on additional indicators, such as our Monthly Business Survey, to quality adjust some of our estimates in the short term.</p><p>In the income approach, we do not have up-to-date quarterly information on the gross trading profits of businesses. These data are collected from HM Revenue and Customs (HMRC) and are available with a lag of approximately two years.</p><p>We rely on contextual data from other sources to inform these quarterly estimates, as outlined in our <a>Profitability of UK companies quality and methodology information (QMI)</a>. There is currently more uncertainty around the compensation of employees figures in this release because of lower response rates in our Labour Force Survey (LFS), as described in our <a>LFS: planned improvements and its reintroduction methodology</a>. We have used additional information from our <a>Earnings and employment Pay As You Earn Real Time InformLine truncated
|
||||
+46
@@ -0,0 +1,46 @@
|
||||
<html><head></head><body><h1 class="padding-bottom--0 padding-top--0 margin-top--2 font-weight-700 margin-bottom--2 ">Labour market overview, UK: October 2026</h1><p class="page-bulletins--Summary margin-right-md--2 margin-bottom--3 padding-bottom--0 padding-top--0">
|
||||
|
||||
|
||||
Estimates of employment, unemployment, economic inactivity, and other employment-related statistics for the UK.
|
||||
|
||||
</p><p class="alert-release-banner__title">This is the latest release.
|
||||
<a>View previous releases</a>
|
||||
</p><p class="col col--md-12 col--lg-15 margin-bottom-sm--1 margin-bottom-md--3 margin-top-sm--1 padding-bottom--0 padding-top--0">
|
||||
<span class="font-weight-700">Contact: </span><br><a class="text--white"><span class="visuallyhidden">Email </span>Labour Market team</a>
|
||||
</p><p class="col col--md-one-third col--lg-one-third margin-bottom-sm--1 margin-bottom-md--3 margin-top--0 padding-bottom--0 padding-top--0">
|
||||
<span class="font-weight-700">Release date: </span><br>20 October 2026<br>
|
||||
|
||||
</p><p class="col col--md-one-third col--lg-one-third margin-bottom-sm--3 margin-bottom-md--3 margin-top--0 padding-bottom--0 padding-top--0">
|
||||
<span class="font-weight-700">Next release: </span><br>17 November 2026
|
||||
</p><p class="text-right--md padding-top-md--0 padding-bottom-md--0 height--5 margin-bottom-md--0 print--hide nojs--hide js--show">
|
||||
<a class="link-complex nojs--hide js--show js-print-page">
|
||||
Print this <span class="lowercase">
|
||||
Statistical bulletin
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
</a>
|
||||
<span class="icon icon-print--dark"></span>
|
||||
</p><p class="text-right--md padding-top-md--0 padding-bottom-md--0 height--5 margin-top-md--1 print--hide">
|
||||
<a class="link-complex js-pdf-dl-link">
|
||||
Download as PDF
|
||||
</a>
|
||||
<span class="icon icon-download--dark"></span>
|
||||
</p><p><a>Average weekly earnings in Great Britain</a></p><p><a>Earnings and employment from Pay As You Earn Real Time Information, UK</a></p><p><a>Employment in the UK</a></p><p><a>Labour market in the regions of the UK</a></p><p><a>Vacancies and jobs in the UK</a></p><p>The labour market remains broadly flat in 2026. There has been a slight increase in the employment rate, while the unemployment rate has seen a small fall, in the latest quarter. Over the same period, the number of payrolled employees has fallen, although early estimates for the latest period show little change on the month.</p><p>The number of vacancies has seen its largest fall since the start of the year. This is mainly from smaller firms, who continue to suggest that they may not be recruiting because of increased labour costs.</p><p>Regular wage growth has remained relatively stable. However, total pay is at its lowest level in nearly six years.</p><p></p><p>The embedded visualisation below may not display correctly without JavaScript enabled. <a class="underline-link">View it in full screen</a>.</p><p>Estimates for payrolled employees in the UK fell by 111,000 (0.4%) between August 2025 and August 2026, but it remained largely unchanged between July and August 2026, increasing by 1,000 (0.0%). This is based on administrative data from HM Revenue and Customs (HMRC).</p><p>When looking at June to August 2026, the period comparable with our Labour Force Survey (LFS) estimates, the number of payrolled employees fell by 92,000 (0.3%) over the year and by 37,000 (0.1%) over the quarter.</p><p>The early estimate of payrolled employees for September 2026 decreased by 66,000 (0.2%) on the year, but remained largely unchanged between August and September 2026, increasing by 13,000 (0.0%) to 30.3 million. Figures for September should be treated as provisional estimates and are likely to be revised when more data are received next month.</p><p>The UK employment rate (based on the LFS) for people aged 16 to 64 years, including both employees and self-employed, was estimated at 75.3% for June to August 2026. This is up by 0.2 percentage points on both the year and the latest quarter.</p><p>The UK unemployment rate for people aged 16 years and over was estimated at 4.7% in June to August 2026. This is down by 0.1 percentage points on the both the year and the latest quarter.</p><p>The UK economic inactivity rate for people aged 16 to 64 years was estimated at 20.9% in June to August 2026. This is down by 0.2 percentage points on the year and down by 0.1 percentage points in the latest quarter.</p><p>The UK Claimant Count for September 2026 increased on the month and on the year to an estimated 1.701 million.</p><p>The Claimant Count figure for the latest month is provisional and is subject to revisions after first publication. This is the result of later amendments to records in the administrative systems, for example, as work capability assessments conclude and more information is available about benefit claimants' ability to work.</p><p>The estimated number of vacancies in the UK decreased in the latest quarter. Early estimates for July to September 2026 suggest a decrease of 21,000 (2.9%) to 691,000, compared with April to June 2026. This is the largest quarterly fall since January to March 2026, which was also a fall of 21,000 vacancies. </p><p>Estimates have remained broadly flat since the start of the year, decreasing by 28,000 since January to March 2026. On the year, vacancies decreased by 37,000 (5.1%).</p><p>Outside of the coronavirus (COVID-19) pandemic period, the last time there were 691,000 or fewer vacancies was in July to September 2014, when there were 686,000 vacancies.</p><p>Feedback from our Vacancy Survey continues to suggest that smaller firms may not be recruiting because of increases in labour costs.</p><p>Annual growth in employees' average regular earnings (excluding bonuses) was 3.7% in June to August 2026 and has been relatively stable over the past six consecutive three-month periods, after a year of slowing growth.</p><p>Annual growth in total earnings (including bonuses) was 3.7% in June to August 2026, down from 3.9% on the previous three-month period. It was last lower than 3.7% in August to October 2020, when it was 2.8%.</p><p>Annual average regular earnings growth was 6.3% for the public sector and 3.0% for the private sector. Public sector annual pay growth continues to be affected by variations in the timing of pay awards this year. More information on this can be found in our <a>Average Weekly Earnings in Great Britain October 2026 bulletin</a>.</p><p>Annual growth in real terms, adjusted for inflation using the Consumer Prices Index including owner occupiers' housing costs (CPIH), was 0.6% for regular pay and 0.7% for total pay in June to August 2026. When using the Consumer Prices Index excluding owner occupiers' housing costs (CPI), annual growth in real terms for regular pay was 0.8%, and for total pLine truncated
|
||||
@@ -0,0 +1 @@
|
||||
<html><body><a href="/releases/greenhousegasemissionsukprovisionalestimates2025" class="ons-u-fs-m ons-u-td-no ons-u-d-b" data-gtm-release-title="Greenhouse gas emissions, UK: provisional estimates, 2025" data-gtm-release-url="/releases/greenhousegasemissionsukprovisionalestimates2025" data-gtm-release-date="20261028" data-gtm-release-time="09:30" data-gtm-release-calendar-page="1" data-gtm-release-calendar-position="1">Greenhouse gas emissions, UK: provisional estimates, 2025</a><a href="/releases/deathsregisteredweeklyinenglandandwalesprovisionalweekending16october2026" class="ons-u-fs-m ons-u-td-no ons-u-d-b" data-gtm-release-title="Deaths registered weekly in England and Wales, provisional: week ending 16 October 2026" data-gtm-release-url="/releases/deathsregisteredweeklyinenglandandwalesprovisionalweekending16october2026" data-gtm-release-date="20261028" data-gtm-release-time="09:30" data-gtm-release-calendar-page="1" data-gtm-release-calendar-position="2">Deaths registered weekly in England and Wales, provisional: week ending 16 October 2026</a><a href="/releases/economicactivityandsocialchangeintheukrealtimeindicators29october2026" class="ons-u-fs-m ons-u-td-no ons-u-d-b" data-gtm-release-title="Economic activity and social change in the UK, real-time indicators: 29 October 2026" data-gtm-release-url="/releases/economicactivityandsocialchangeintheukrealtimeindicators29october2026" data-gtm-release-date="20261029" data-gtm-release-time="09:30" data-gtm-release-calendar-page="1" data-gtm-release-calendar-position="3">Economic activity and social change in the UK, real-time indicators: 29 October 2026</a><a href="/releases/businessdemographyquarterlyukjulytoseptember2026" class="ons-u-fs-m ons-u-td-no ons-u-d-b" data-gtm-release-title="Business demography, quarterly, UK: July to September 2026" data-gtm-release-url="/releases/businessdemographyquarterlyukjulytoseptember2026" data-gtm-release-date="20261029" data-gtm-release-time="09:30" data-gtm-release-calendar-page="1" data-gtm-release-calendar-position="4">Business demography, quarterly, UK: July to September 2026</a><a href="/releases/uknationalaccountsthebluebook2026" class="ons-u-fs-m ons-u-td-no ons-u-d-b" data-gtm-release-title="UK National Accounts, The Blue Book: 2026" data-gtm-release-url="/releases/uknationalaccountsthebluebook2026" data-gtm-release-date="20261030" data-gtm-release-time="09:30" data-gtm-release-calendar-page="1" data-gtm-release-calendar-position="5">UK National Accounts, The Blue Book: 2026</a><a href="/releases/grossfixedcapitalformationdeflatorcatalogue" class="ons-u-fs-m ons-u-td-no ons-u-d-b" data-gtm-release-title="Gross Fixed Capital Formation Deflator Catalogue" data-gtm-release-url="/releases/grossfixedcapitalformationdeflatorcatalogue" data-gtm-release-date="20261030" data-gtm-release-time="09:30" data-gtm-release-calendar-page="1" data-gtm-release-calendar-position="6">Gross Fixed Capital Formation Deflator Catalogue</a><a href="/releases/cpatocoicopconverterforhouseholdfinalconsumptionexpenditure" class="ons-u-fs-m ons-u-td-no ons-u-d-b" data-gtm-release-title="CPA to COICOP converter for household final consumption expenditure" data-gtm-release-url="/releases/cpatocoicopconverterforhouseholdfinalconsumptionexpenditure" data-gtm-release-date="20261030" data-gtm-release-time="09:30" data-gtm-release-calendar-page="1" data-gtm-release-calendar-position="7">CPA to COICOP converter for household final consumption expenditure</a><a href="/releases/inputoutputsupplyandusetables2026edition" class="ons-u-fs-m ons-u-td-no ons-u-d-b" data-gtm-release-title="Input-output supply and use tables: 2026 edition" data-gtm-release-url="/releases/inputoutputsupplyandusetables2026edition" data-gtm-release-date="20261030" data-gtm-release-time="09:30" data-gtm-release-calendar-page="1" data-gtm-release-calendar-position="8">Input-output supply and use tables: 2026 edition</a><a href="/releases/gdprevisionsinbluebook2026" class="ons-u-fs-m ons-u-td-no ons-u-d-b" data-gtm-release-title="GDP revisions in Blue Book: 2026" data-gtm-release-url="/releases/gdprevisionsinbluebook2026" data-gtm-release-date="20261030" data-gtm-release-time="09:30" data-gtm-release-calendar-page="1" data-gtm-release-calendar-position="9">GDP revisions in Blue Book: 2026</a><a href="/releases/annualgrossfixedcapitalformationbyindustryandassetoctober2026" class="ons-u-fs-m ons-u-td-no ons-u-d-b" data-gtm-release-title="Annual gross fixed capital formation by industry and asset: October 2026" data-gtm-release-url="/releases/annualgrossfixedcapitalformationbyindustryandassetoctober2026" data-gtm-release-date="20261030" data-gtm-release-time="09:30" data-gtm-release-calendar-page="1" data-gtm-release-calendar-position="10">Annual gross fixed capital formation by industry and asset: October 2026</a><a href="/releases/supplyandusetablesdatasourcescatalogue2026" class="ons-u-fs-m ons-u-td-no ons-u-d-b" data-gtm-release-title=" Supply and use tables data sources cataLine truncated
|
||||
+214
@@ -0,0 +1,214 @@
|
||||
<html><head></head><body><h1 class="padding-bottom--0 padding-top--0 margin-top--2 font-weight-700 margin-bottom--2 ">GDP quarterly national accounts, UK: April to June 2026</h1><p class="page-bulletins--Summary margin-right-md--2 margin-bottom--3 padding-bottom--0 padding-top--0">
|
||||
|
||||
|
||||
Revised quarterly estimate of gross domestic product (GDP) for the UK. Uses additional data to provide a more precise indication of economic growth than the first estimate.
|
||||
|
||||
</p><p class="alert-release-banner__title">This is the latest release.
|
||||
<a>View previous releases</a>
|
||||
</p><p class="col col--md-12 col--lg-15 margin-bottom-sm--1 margin-bottom-md--3 margin-top-sm--1 padding-bottom--0 padding-top--0">
|
||||
<span class="font-weight-700">Contact: </span><br><a class="text--white"><span class="visuallyhidden">Email </span>Gross Domestic Product team</a>
|
||||
</p><p class="col col--md-one-third col--lg-one-third margin-bottom-sm--1 margin-bottom-md--3 margin-top--0 padding-bottom--0 padding-top--0">
|
||||
<span class="font-weight-700">Release date: </span><br>30 September 2026<br>
|
||||
|
||||
</p><p class="col col--md-one-third col--lg-one-third margin-bottom-sm--3 margin-bottom-md--3 margin-top--0 padding-bottom--0 padding-top--0">
|
||||
<span class="font-weight-700">Next release: </span><br>12 November 2026
|
||||
</p><p class="text-right--md padding-top-md--0 padding-bottom-md--0 height--5 margin-bottom-md--0 print--hide nojs--hide js--show">
|
||||
<a class="link-complex nojs--hide js--show js-print-page">
|
||||
Print this <span class="lowercase">
|
||||
Statistical bulletin
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
</a>
|
||||
<span class="icon icon-print--dark"></span>
|
||||
</p><p class="text-right--md padding-top-md--0 padding-bottom-md--0 height--5 margin-top-md--1 print--hide">
|
||||
<a class="link-complex js-pdf-dl-link">
|
||||
Download as PDF
|
||||
</a>
|
||||
<span class="icon icon-download--dark"></span>
|
||||
</p><p>UK gross domestic product (GDP) is estimated to have grown by 0.5% in Quarter 2 (Apr to June) 2026 (revised up by 0.1 percentage points from the previous estimate), following an unrevised increase of 0.6% in Quarter 1 (Jan to Mar) 2026.</p><p>GDP for 2025 as a whole is estimated to have increased by 1.2%, revised down by 0.1 percentage points from the previous estimate. </p><p>The level of GDP in Quarter 2 2026 compared with Quarter 4 (Oct to Dec) 2024 is now estimated to be 2.0% higher, revised up from the first estimate of 1.9%. </p><p>Real household disposable income per head increased by 1.0% in Quarter 2 2026, following a decrease of 0.8% in Quarter 1 2026. </p><p>The household saving ratio increased by 0.2 percentage points to 8.8% in Quarter 2 2026, driven by a rise in the contribution of non-pension saving. </p><p>The UK’s borrowing position with the rest of the world as a percentage of GDP is estimated to have decreased to 2.8% in Quarter 2 2026, compared with 2.9% in Quarter 1 2026. </p><p>In line with our National Accounts Revisions Policy, this release contains data that are consistent with the UK National Accounts, the Blue Book 2026, which will be released on 30 October 2026.</p><p>UK real gross domestic product (GDP) is estimated to have increased by 0.5% in Quarter 2 (Apr to June) 2026 (previously 0.4%), following unrevised growth of 0.6% in Quarter 1 (Jan to Mar) 2026. </p><p>Figure 1 shows there have been some revisions to quarterly GDP across 2025 and 2026, ranging from negative 0.2 percentage points to positive 0.1 percentage points. The level of GDP in Quarter 2 2026 compared with Quarter 4 (Oct to Dec) 2024 is now estimated to be 2.0% higher, revised up from the first estimate of 1.9%. The cumulative increase in real GDP over this period is largely unchanged. </p><p>
|
||||
|
||||
|
||||
|
||||
|
||||
</p><p>In line with our <a>National Accounts Revisions Policy</a>, this release contains data that are consistent with the UK National Accounts, the Blue Book 2026, which will be released on 30 October 2026. </p><p>Our <a>Blue Book 2026: GDP impacts and main components article</a> published on 20 August 2026 showed the preannounced revisions to nominal and real GDP annual and quarterly growth up to Quarter 4 2024. Today's release now includes revisions up to Quarter 2 2026 as a result of the Blue Book 2026 methodological changes, and additional updated data, which includes new Value Added Tax (VAT) turnover data for Quarter 1 2026. </p><p>Based on these new data, we have also reviewed the balancing of the three approaches to measuring GDP from 2025 onwards. In particular, data for Quarter 3 (July to Sept) and Quarter 4 2025 now reflect an average of the three approaches to measuring GDP, whereas these were previously balanced to the output approach, which takes the lead measure in the short run because of the higher data content. </p><p>The <a>early estimates of GDP are subject to revision</a> (positive or negative). Our recently published analysis shows that since Quarter 1 2000, there is a mean revision of positive 0.08 percentage points between the first estimate and the final one that is published three years later. The mean absolute revision between the first estimate, and this final one is 0.24 percentage points.</p><p>Revisions are made when more detailed information becomes available through the comprehensive annual supply and use balancing process, as the data content increases. For more information, please refer to our <a>GDP revisions in Blue Book: 2025 article</a> and our recent <a>blog on managing the trade-off between timeliness and accuracy</a> when producing GDP, including how the properties of revisions can change over time. </p><p>The GDP growth vintages from 2025 onwards are shown in Table 4 in <a>Section 8: Revisions to GDP</a>, and in addition we include a summary of revisions by quarter. We give more information on <a>uncertainty</a> in <a>Section 12: Data sources and quality</a>.</p><p>Real GDP per head is estimated to have increased by 0.5% in Quarter 2 2026 and is up by 1.2% compared with the same quarter a year ago. See <a>Section 6: Real GDP per head and real household disposable income per head</a> for more information. </p><p>
|
||||
</p><table class="table">
|
||||
<caption class="table__caption">Table 1: Headline national accounts indicators for the UK<br><span class="table__subtitle">Percentage growth</span></caption>
|
||||
<colgroup><col><col><col><col><col></colgroup>
|
||||
<tr class="table__header-row table__nowrap"><td class="align-left"></td><th class="align-right">GDP (Chained <br>volume measures)</th><th class="align-right">GDP per head <br>(Chained volume <br>measures) [Note 3]</th><th class="align-right">GDP (Current <br>market prices)</th><th class="align-right">GDP implied <br>deflator</th></tr>
|
||||
<tr class="table__header-row table__nowrap"><th class="align-left">Seasonally adjusted</th><td class="align-right"></td><td class="align-right"></td><td class="align-right"></td><td class="align-right"></td></tr>
|
||||
<tr><td class="align-left"></td><td class="align-right"></td><td class="align-right"></td><td class="align-right"></td><td class="align-right"></td></tr>
|
||||
<tr><th class="table__nowrap align-left">2025</th><td class="align-right">1.2</td><td class="align-right">0.9</td><td class="align-right">4.8</td><td class="align-right">3.6</td></tr>
|
||||
<tr><td class="align-left"></td><td class="align-right"></td><td class="align-right"></td><td class="align-right"></td><td class="align-right"></td></tr>
|
||||
<tr><th class="table__nowrap align-left">Q1 2025</th><td class="align-right">0.6</td><td class="align-right">0.5</td><td class="align-right">1.5</td><td class="align-right">0.9</td></tr>
|
||||
<tr><th class="table__nowrap align-left">Q2 2025</th><td class="align-right">0.0</td><td class="align-right">-0.1</td><td class="align-right">1.0</td><td class="align-right">1.0</td></tr>
|
||||
<tr><th class="table__nowrap align-left">Q3 2025</th><td class="align-right">0.2</td><td class="align-right">0.1</td><td class="align-right">0.9</td><td class="align-right">0.7</td></tr>
|
||||
<tr><th class="table__nowrap align-left">Q4 2025</th><td class="align-right">0.0</td><td class="align-right">0.0</td><td class="align-right">0.6</td><td class="align-right">0.6</td></tr>
|
||||
<tr><th class="table__nowrap align-left">Q1 2026</th><td class="align-right">0.6</td><td class="align-right">0.6</td><td class="align-right">1.5</td><td class="align-right">0.8</td></tr>
|
||||
<tr><th class="table__nowrap align-left">Q2 2026</th><td class="align-right">0.5</td><td class="align-right">0.5</td><td class="align-right">0.8</td><td class="align-right">0.3</td></tr>
|
||||
</table><p>Nominal GDP is estimated to have increased by an unrevised 0.8% in Quarter 2 2026 and is now 3.8% higher compared with the same quarter a year ago. </p><p>The implied GDP deflator is the broadest measure of inflation in the domestic economy, reflecting changes in the price of all goods and services that make up GDP. The GDP deflator covers the whole of the domestic economy, not just consumer spending. It also reflects the change in the relative price of exports to imports. For more information on the implied GDP deflator, see our <a>Measuring price changes of the UK national accounts: February 2023 article</a>. </p><p>Compared with the same quarter a year ago, the GDP implied deflator increased by 2.4% in Quarter 2 2026, mainly caused by household expenditure, exports and gross capital formation (Figure 2).</p><p>
|
||||
|
||||
|
||||
|
||||
|
||||
</p><p>Real annual GDP in 2025 is estimated to have increased by 1.2%, revised down by 0.1 percentage points from the previous estimate (Figure 3). </p><p>While the three approaches to measuring GDP remain closely aligned compared with the first estimate, there can still be uncertainty at the component level at this stage in the production cycle for 2025 onwards until these data have been confronted through the supply and use tables framework (SUTs). This uncertainty has various reasons and is further discussed in <a>Section 12: Data sources and quality</a>.</p><p>
|
||||
|
||||
|
||||
|
||||
|
||||
</p><p>Output is estimated to have increased by 0.5% in Quarter 2 (Apr to June) 2026 (previously a 0.4% increase), following an unrevised increase of 0.6% in Quarter 1 (Jan to Mar) 2026. Overall, in the latest quarter, there were increases in 13 out of 20 subsectors of gross domestic product (GDP).</p><p>In Quarter 2 (Apr to June) 2026, the services sector increased by 0.6%, the construction sector increased by 0.8% and the production sector decreased by 0.1%.</p><p>From 2025 to 2026, the output approach to measuring GDP saw revisions for the following reasons:</p><p>some businesses replied late and updated their Monthly Business Survey (MBS) returns, along with other source data updates</p><p>Value Added Tax (VAT) data for Quarter 1 2026 were incorporated for the first time, as well as revisions to previous quarters</p><p>a review of seasonal adjustment models</p><p>the industry weights have also been updated and will affect the contribution of each industry to overall services growth; please see our <a>GDP output approach – low level aggregates dataset</a> for the latest weights</p><p>Services output increased by 0.6% in Quarter 2 2026 (previously a 0.5% increase), following a revised increase of 0.7% in Quarter 1 2026. Services output is estimated to be 1.7% higher compared with the same quarter a year ago.</p><p>In Quarter 2 2026, non-consumer-facing services (business-facing services) grew by 0.7%, while consumer-facing services grew by 0.4%.</p><p>Figure 4 shows that 9 of the 14 services subsectors contributed positively to services growth in Quarter 2 2026. The largest positive contributors to growth were the professional, scientific and technical activities, and information and communication subsectors.</p><p>Professional, scientific and technical activities increased by 2.3% in the latest quarter, driven by growths in advertising and market research (up by 5.4%), scientific research and development (up by 6.7%) and legal activities (up 3.3%). Information and communication increased by 2.5%, mainly because of growth of 3.6% in computer programming, consultancy and related activities.</p><p>The largest negative contributor to growth in Quarter 2 2026 was education, which fell by 0.4%, because of a fall in non-market education. This was the result of the closure of some schools during the heatwave conditions seen across much of the UK during June.</p><p>
|
||||
|
||||
|
||||
|
||||
|
||||
</p><p>The production sector is estimated to have fallen by 0.1% in Quarter 2 2026 (revised down from the first estimate of no growth), following a 0.3% increase in the previous quarter. Production output is estimated to be 0.4% higher than the same quarter a year ago. </p><p>Within production, there were declines in electricity, gas, steam and air conditioning supply, which fell by 0.8% and in water supply; sewerage, waste management, and remediation activities, which fell by 4.5%. These were partially offset by increases of 0.5% and 2.1% in manufacturing, and mining and quarrying, respectively. </p><p>Looking at the manufacturing sector in more detail, 6 out of 13 manufacturing subsectors contributed positively to manufacturing growth in the latest quarter (Figure 5). The largest positive contribution to the growth was the manufacture of basic pharmaceutical products and pharmaceutical preparations (up by 4.0%). </p><p>
|
||||
|
||||
|
||||
|
||||
|
||||
</p><p>Construction output is estimated to have increased by 0.8% in Quarter 2 2026 but is 1.0% lower compared with the same quarter a year ago.</p><p>Both new work, and repair and maintenance grew over the period, increasing by 0.9% and 0.8%, respectively. Within new work, the largest positive contribution came from private commercial and infrastructure new work, which grew by 4.5% and 2.9%, respectively. In repair and maintenance, the largest positive contribution came from non-housing repair and maintenance, which grew by 1.0%.</p><p>Expenditure is estimated to have grown by 0.5% in Quarter 2 (Apr to June) 2026, mainly because of increases in net trade.</p><p>The previous and latest contributions to expenditure growth in Quarter 2 2026 are shown in Figure 6. There have also been revisions across 2025 and 2026, which is further discussed in this section.</p><p>
|
||||
|
||||
|
||||
|
||||
|
||||
</p><p>There was a 0.3% increase in real household final consumption expenditure in Quarter 2 2026, and it is now estimated to be up by 1.2% compared with the same quarter a year ago.</p><p>Within household consumption in the latest quarter, growth was caused by increases in nearly all main categories, with the largest contributions from clothing and footwear, restaurants and hotels, and housing.</p><p>Net tourism made a positive contribution to growth in household consumption in the latest quarter. Net tourism is offset within trade, so there is no effect on the gross domestic product (GDP) aggregate. Information on how we measure net tourism is provided in our <a>National Accounts articles: Treatment of tourism in the UK National Accounts</a>. Excluding net tourism, domestic consumption grew by 0.3% in the latest quarter.</p><p>Revisions to household consumption across 2025 and 2026 are mainly a result of a variety of data source updates, which includes the Living Costs and Food Survey.</p><p>Real government consumption expenditure fell by 0.5% in Quarter 2 2026 and is now estimated to be 1.2% higher compared with the same quarter a year ago.</p><p>The fall in government consumption in the latest quarter mainly reflects a decline in education, which was caused by the closure of some schools during the heatwave conditions seen across much of the UK during June.</p><p>Over the course of 2025 and 2026, government consumption sees revisions mainly as a result of:</p><p>updated data for a number of components, including our annual health benchmark data, where we capture more detailed information on services delivered by the NHS</p><p>improvements introduced as part of <a>Blue Book 2026</a></p><p>a review of seasonal adjustment models.</p><p>Within gross capital formation, gross fixed capital formation (GFCF) is now estimated to have increased by 0.9% in Quarter 2 2026 and to be 3.1% higher compared with the same quarter a year ago. The main drivers of the growth are increases in other buildings and structures, partially offset by a fall in transport.</p><p>Within GFCF, business investment is estimated to have increased by 1.8% in the latest quarter and is now estimated to be 5.2% higher compared with the same quarter a year ago.</p><p>Revisions reflect:</p><p>the incorporation of improved and new methodology as part of <a>Blue Book 2026</a></p><p>updated Quarterly Acquisitions and Disposals of Capital Assets Survey (QCAS) data and other source data (mostly affecting the latest period)</p><p>a review of seasonal adjustment models</p><p>Excluding the alignment adjustments, revised estimates show that chained volume inventories fell by £3.4 billion in Quarter 2 2026 (Table 2), mainly because of a reduction in manufacturing inventories.</p><p>
|
||||
</p><table class="table">
|
||||
<caption class="table__caption">Table 2: Change in inventories, including and excluding balancing and alignment adjustments<br><span class="table__subtitle">UK, Quarter 1 (Jan to Mar) 2025 to Quarter 2 (Apr to June) 2026</span></caption>
|
||||
<colgroup><col><col><col><col><col><col></colgroup>
|
||||
<tr class="table__header-row table__nowrap"><td class="align-left"></td><td class="align-left"></td><th class="align-right">Change in <br>Inventories</th><th class="align-right">Of which <br>alignment</th><th class="align-right">Of which <br>balancing</th><th class="align-right">Change in <br>Inventories <br>excluding alignment <br>and balancing</th></tr>
|
||||
<tr><th class="table__nowrap align-left">Q1 2025</th><th class="table__nowrap align-left">Current <br>price</th><td class="align-right">-371</td><td class="align-right">-1441</td><td class="align-right">500</td><td class="align-right">570</td></tr>
|
||||
<tr><th class="table__nowrap align-left">Q1 2025</th><th class="table__nowrap align-left">Chained <br>volume <br>measure</th><td class="align-right">-1650</td><td class="align-right">-1406</td><td class="align-right"></td><td class="align-right">-244</td></tr>
|
||||
<tr><th class="table__nowrap align-left">Q2 2025</th><th class="table__nowrap align-left">Current <br>price</th><td class="align-right">2</td><td class="align-right">584</td><td class="align-right"></td><td class="align-right">-582</td></tr>
|
||||
<tr><th class="table__nowrap align-left">Q2 2025</th><th class="table__nowrap align-left">Chained <br>volume <br>measure</th><td class="align-right">1382</td><td class="align-right">569</td><td class="align-right">500</td><td class="align-right">313</td></tr>
|
||||
<tr><th class="table__nowrap align-left">Q3 2025</th><th class="table__nowrap align-left">Current <br>price</th><td class="align-right">2072</td><td class="align-right">1858</td><td class="align-right"></td><td class="align-right">214</td></tr>
|
||||
<tr><th class="table__nowrap align-left">Q3 2025</th><th class="table__nowrap align-left">Chained <br>volume <br>measure</th><td class="align-right">2373</td><td class="align-right">1790</td><td class="align-right"></td><td class="align-right">583</td></tr>
|
||||
<tr><th class="table__nowrap align-left">Q4 2025</th><th class="table__nowrap align-left">Current <br>price</th><td class="align-right">-1811</td><td class="align-right">-1001</td><td class="align-right"></td><td class="align-right">-810</td></tr>
|
||||
<tr><th class="table__nowrap align-left">Q4 2025</th><th class="table__nowrap align-left">Chained <br>volume <br>measure</th><td class="align-right">-1792</td><td class="align-right">-953</td><td class="align-right"></td><td class="align-right">-839</td></tr>
|
||||
<tr><th class="table__nowrap align-left">Q1 2026</th><th class="table__nowrap align-left">Current <br>price</th><td class="align-right">1361</td><td class="align-right">-2979</td><td class="align-right"></td><td class="align-right">4340</td></tr>
|
||||
<tr><th class="table__nowrap align-left">Q1 2026</th><th class="table__nowrap align-left">Chained <br>volume <br>measure</th><td class="align-right">421</td><td class="align-right">-2823</td><td class="align-right">-750</td><td class="align-right">3994</td></tr>
|
||||
<tr><th class="table__nowrap align-left">Q2 2026</th><th class="table__nowrap align-left">Current <br>price</th><td class="align-right">-4028</td><td class="align-right">-730</td><td class="align-right">500</td><td class="align-right">-3798</td></tr>
|
||||
<tr><th class="table__nowrap align-left">Q2 2026</th><th class="table__nowrap align-left">Chained <br>volume <br>measure</th><td class="align-right">-4103</td><td class="align-right">-689</td><td class="align-right"></td><td class="align-right">-3414</td></tr>
|
||||
</table><p>The UK's trade deficit for goods and services is now estimated at 1.6% of nominal GDP in Quarter 2 2026. However, this includes <a>non-monetary gold</a> and other precious metals, which is an erratic series. It can be useful to exclude this from the trade balance.</p><p>Excluding non-monetary gold and other precious metals, the trade deficit is now estimated at 0.5% of nominal GDP in Quarter 2 2026 (Figure 7). </p><p>The trade deficit, excluding non-monetary gold and other precious metals, is shown in Figure 7 as a percentage of nominal GDP in this release compared with the first quarterly estimate. Revisions reflect: </p><p>improvements introduced as part of <a>Blue Book 2026,</a> particularly the results from the Annual International Trade in Services (ITIS) Survey</p><p>updated ITIS data replacing forecasts used in the first estimate for the latest quarter, particularly through merchanting of fuels</p><p>updated globalisation figures for chemicals</p><p>
|
||||
|
||||
|
||||
|
||||
|
||||
</p><p>Export volumes increased by 2.8% in the latest quarter (revised up from the first estimate increase of 0.5%) and are now 4.2% higher compared with the same quarter a year ago. </p><p>The increase in the latest quarter was mainly caused by a 3.7% growth in goods exports and a 2.0% increase in services exports. Within goods exports, the growth was mainly caused by rises in fuels. The growth in services exports was mainly because of other business service activities and travel. </p><p>Import volumes are estimated to have shown no growth in the latest quarter (revised down from a first estimate increase of 0.5%) and are now 2.5% higher compared with the same quarter a year ago. Goods imports fell by 0.5% mainly because of decreases in machinery and transport equipment. Services imports increased by 1.0%, mainly because of travel and transportation.</p><p>Nominal gross domestic product (GDP) grew by 0.8% in Quarter 2 (Apr to June) 2026 and is up by 3.8% compared with the same quarter a year ago. Growth in nominal GDP in the latest quarter was mainly driven by an increase in gross operating surplus and taxes less subsidies. </p><p>The previous and latest contributions to nominal GDP growth in Quarter 2 2026 are shown in Figure 8. There have also been revisions across 2025 and 2026, which is further discussed in this section. </p><p>
|
||||
|
||||
|
||||
|
||||
|
||||
</p><p>Compensation of employees showed no growth in Quarter 2 2026, but is now estimated to be 4.1% higher compared with the same quarter a year ago. There was an increase of 0.9% in wages and salaries, which offset a 3.4% fall in employers' social contributions. </p><p>Early estimates of private sector wages and salaries have historically been based on estimates of employee numbers from the Labour Force Survey (LFS) and average earnings from the Average Weekly Earnings (AWE) statistics. Enhancements to the LFS, introduced since January 2024, mean that movements in the LFS since then reflect both underlying developments in the economy and improved survey quality. Despite the improvement in LFS responses, some volatility remains in estimates of employee numbers. </p><p>To therefore improve the accuracy of the income measure of GDP and maintain coherence with related statistics, including the sector accounts, we continue to use additional information from Pay As You Earn (PAYE) Real Time Information (RTI), as published in our <a>Earnings and employment from Pay As You Earn Real Time Information, UK bulletin</a>. </p><p>Revisions in compensation of employees mainly reflect: </p><p>new annual HM Revenue and Customs (HMRC) PAYE benchmark data for 2024 to 2025 </p><p>review of seasonal adjustment </p><p>updated labour market indicators and other source data (replacing forecasts in the later period) </p><p>Other income is now estimated to have fallen by 0.2% in Quarter 2 2026 and is 2.5% higher compared with the same quarter a year ago. The fall in the latest quarter was caused by a decline in household gross operating surplus. </p><p>Taxes less subsidies are estimated to have increased by 3.2% in Quarter 2 2026 and are now 7.7% higher compared with the same quarter a year ago. </p><p>There was a 4.1% increase in taxes and an 11.9% increase in subsidies, which contribute negatively to GDP. The 11.9% increase in subsidies was mainly because of other economic and service subsidies (partially from a new energy subsidy).</p><p>Taxes for this quarter were revised upwards from the Quarter 2 2026 first quarterly estimate partially because of a <a>change in HMRC methodology</a> applied from April 2026. There was a <a>published correction</a> to taxes and subsidies published in August 2026, which affected the back series between March and May 2026. HMRC has also implemented a new reconciliation exercise effective from September 2026. </p><p>Total gross operating surplus (GOS) of corporations, excluding the alignment adjustment, increased by 2.1% in Quarter 2 2026 (Table 3). This is mainly because of an increase in private non-financial corporations (PNFC) of 3.0%. </p><p>Estimates of non-financial corporations within the GOS of corporations remains subject to uncertainty. This is because we do not have up-to-date quarterly information on the gross trading profits of businesses. These data are collected from HM Revenue and Customs (HMRC) and are available with a lag of approximately two years. We rely on contextual data from other sources to inform these quarterly estimates, as outlined in our <a>Profitability of UK companies quality and methodology information (QMI)</a>.</p><p>
|
||||
</p><table class="table">
|
||||
<caption class="table__caption">Table 3: Gross operating surplus of corporations, including and excluding alignment adjustments<br><span class="table__subtitle">UK, Quarter 1 (Jan to Mar) 2025 to Quarter 2 (Apr to June) 2026</span></caption>
|
||||
<colgroup><col><col><col><col><col></colgroup>
|
||||
<tr class="table__header-row table__nowrap"><td class="align-left"></td><th class="align-right">Gross operating <br>surplus of <br>corporations</th><th class="align-right">Of which <br>alignment</th><th class="align-right">Gross operating <br>surplus of corporations <br>excluding alignment</th><th class="align-right">Gross operating <br>surplus of corporations <br>excluding alignment</th></tr>
|
||||
<tr class="table__header-row table__nowrap"><td class="align-left"></td><td class="align-right"></td><td class="align-right"></td><td class="align-right"></td><th class="align-right">Quarter-on-quarter growth</th></tr>
|
||||
<tr><th class="table__nowrap align-left">Q1 2025</th><td class="align-right">161520</td><td class="align-right">20</td><td class="align-right">161500</td><td class="align-right">-0.7</td></tr>
|
||||
<tr><th class="table__nowrap align-left">Q2 2025</th><td class="align-right">166108</td><td class="align-right">1034</td><td class="align-right">165074</td><td class="align-right">2.2</td></tr>
|
||||
<tr><th class="table__nowrap align-left">Q3 2025</th><td class="align-right">165009</td><td class="align-right">1126</td><td class="align-right">163883</td><td class="align-right">-0.7</td></tr>
|
||||
<tr><th class="table__nowrap align-left">Q4 2025</th><td class="align-right">162807</td><td class="align-right">-2180</td><td class="align-right">164987</td><td class="align-right">0.7</td></tr>
|
||||
<tr><th class="table__nowrap align-left">Q1 2026</th><td class="align-right">166087</td><td class="align-right">-214</td><td class="align-right">166301</td><td class="align-right">0.8</td></tr>
|
||||
<tr><th class="table__nowrap align-left">Q2 2026</th><td class="align-right">170066</td><td class="align-right">333</td><td class="align-right">169733</td><td class="align-right">2.1</td></tr>
|
||||
</table><p>We produce estimates of gross domestic product (GDP) per head (or per capita), which divides UK GDP by the total UK population. This is one proxy indicator of welfare, rather than production, which reflects a country's living standards. It captures the volume of goods and services available to the average person. Further information on this is available in our <a>Trends in UK real GDP per head: 2022 to 2024 article</a>. </p><p>Real GDP per head is estimated to have increased by 0.5% in Quarter 2 (Apr to June) 2026 and is up by 1.2% compared with the same quarter a year ago (Figure 9). There have been some revisions to GDP per head figures, reflecting revisions to GDP estimates rather than population numbers. </p><p>Population figures up to mid-2021 for the UK are based on <a>mid-year UK population estimates</a>. Population figures for mid-2022 to mid-2025 are based on:</p><p><a>population estimates for mid-2022 to mid-2025 for England and Wales</a>, published on 29 July 2026</p><p><a>population estimates for mid-2022 to mid-2025 for Scotland</a>, published on 14 July 2026</p><p><a>population estimates for mid-2022 to mid-2024 for Northern Ireland</a>, published on 11 September 2025</p><p><a>2024 based population projections for mid-2025 for Northern Ireland</a>, published on 28 April 2026</p><p>Population figures for Quarter 3 (July to Sept) 2025 up to Quarter 1 (Jan to Mar) 2026 are based on an interpolation between mid-year estimates (projection for Northern Ireland) and 2024-based national population projections using the principal variant published on 28 April 2026. Figures for Quarter 2 2026 are based on the <a>2024-based national population projections</a>. </p><p>
|
||||
|
||||
|
||||
|
||||
|
||||
</p><p>We estimate real household disposable income (RHDI) per head, by dividing RHDI by the total UK population. RHDI per head has increased by 1.0% in Quarter 2 2026, following a decrease of 0.8% in the previous quarter (Figure 10). The components of this measure are further broken down in <a>Section 7: Quarterly sector accounts</a>.</p><p>
|
||||
|
||||
|
||||
|
||||
|
||||
</p><p>Real household disposable income (RHDI) per head increased by 1.0% to £6,577 in Quarter 2 (Apr to June) 2026, following a decrease of 0.8% in the previous quarter. </p><p>The increase in RHDI per head is because of the nominal gross disposable income position increasing by 1.6%. This was partially offset by the growth in the implied deflator (used to remove the effects of inflation) of 0.5% in the latest quarter. </p><p>Contributing to the growth in the latest quarter: </p><p>net social benefits other than transfers in kind rose by £5.3 billion</p><p>net social contributions rose by £3.4 billion</p><p>wages and salaries rose by £2.8 billion</p><p>taxes on income and wealth fell by £0.6 billion </p><p>This is partially offset by a decrease in employers' social contributions of £2.9 billion (Figure 11).</p><p>
|
||||
|
||||
|
||||
|
||||
|
||||
</p><p>The households' saving ratio is estimated to have risen to 8.8% in Quarter 2 2026, up from 8.6% in Quarter 1 (Jan to Mar) 2026. This was driven by non-pension saving, which increased to 4.5%, up from 3.8% (Figure 12).</p><p>Pension saving contributed 4.3 percentage points to the saving ratio, down from 4.8 percentage points in the previous quarter. Households' consumption expenditure grew by 0.9% this quarter, following growth of 1.5% in the previous quarter. Within households' expenditure, the main areas of growth are transport fuels and lubricants, restaurants and cafés, and imputed and actual rentals for housing. </p><p>
|
||||
|
||||
|
||||
|
||||
|
||||
</p><p>In Quarter 2 2026, general government and financial corporations were net borrowers while non-financial corporations, households, non-profit institutions serving households, and the rest of the world were net lenders. </p><p>The UK's borrowing position with the rest of the world as a percentage of gross domestic product (GDP) is estimated to have slightly decreased to 2.8% in Quarter 2 2026 compared with 2.9% of GDP in Quarter 1 2026. </p><p>Non-financial corporations switched their lending to 0.6% of GDP in the latest quarter, from borrowing of 0.0% (negative £323 million) of GDP in Quarter 1 2026. Within non-financial corporations, private non-financial corporations switched to net lending of £4.3 billion in Quarter 2 2026, from net borrowing of £1.3 billion in the previous quarter. This increase was driven by a rise in gross operating surplus of £4.5 billion and a fall in gross capital formation of £2.2 billion, partially offset by a rise in taxes on income and wealth of £1.2 billion. </p><p>Financial corporations net borrowing position was at 0.4% of GDP in the latest quarter following borrowing of 0.7% of GDP in Quarter 1 2026. This was driven by a rise in other capital transfers receivable of £2.6 billion and a fall in the adjustment for pension entitlements of £1.9 billion, partially offset by a rise in gross capital formation of £1.6 billion. </p><p>General government net borrowing as a percentage of GDP increased to 5.2% in Quarter 2 2026, from borrowing of 4.2% of GDP in Quarter 1 2026. Within general government, central government increased their net borrowing to £38.5 billion, following £28.3 billion in the previous quarter. This increase was driven by a fall in net social contributions and benefits of £6.7 billion, a fall in net capital transfers of £5.1 billion and an increase in interest payments of £1.9 billion, partially offset by a rise in taxes on production and imports of £3.7 billion and a fall in gross fixed capital formation of £1.1 billion. </p><p>Households increased their net lending position to 2.4% of GDP in the latest quarter, from 2.3% of GDP in Quarter 1 2026. The drivers for this position are the same as those identified in the real household disposable income section. </p><p>In Quarter 2 2026, general government were net borrowers, while non-financial corporations, financial corporations, households, non-profit institutions serving households, and the rest of the world were net lenders. </p><p>The UK's net borrowing position with the rest of the world as a percentage of gross domestic product (GDP) is estimated to have increased to 3.8% in Quarter 2 2026 compared with 1.8% of GDP in Quarter 1 2026. </p><p>Non-financial corporations switched to net lending of 0.2% of GDP in the latest quarter following net borrowing of 1.1% of GDP in the previous quarter. Within this sector, private non-financial corporations switched to net lending to £0.6 billion in Quarter 2 2026 from net borrowing of £9.6 billion in the previous quarter. This was driven by a rise in net loans of £37.0 billion and a rise in net currency and deposits of £29.4 billion. A fall in net other accounts of £24.0 billion and fall in net debt securities of £19.5 billion partially offset this. </p><p>Financial corporations switched to net lending of 0.2% of GDP in the latest quarter, from net borrowing of 2.5% in Quarter 1 2026. This was driven by a rise in the acquisition of long-term debt securities issued by UK central government of £108.2 billion. A fall in net currency and deposits of £67.4 billion partially offset this. </p><p>General government switched to net borrowing of 8.0% of GDP in the latest quarter, from lending of 0.8% in Quarter 1 2026. Within general government, central government switched to net borrowing of £68.4 billion following net lending of £13.9 billion in the previous quarter. This was driven by a rise in the liabilities of UK central government long-term securities of £96.9 billion together with a fall in assets in other long-term loans of £4.1 billion. A rise in net currency and deposits of £15.4 billion and a rise in net other accounts of £12.2 billion partially offset this. </p><p>Households increased their net lending as a percentage of GDP, to 3.4% in the latest quarter, from 0.8% in Quarter 1 2026. This was driven by a rise in net other accounts of £11.7 billion, a rise in deposits with UK monetary financial institutions of £10.4 billion, and a rise in the acquisition of UK unlisted shares of £5.7 billion. An increase in the acquisition of long-term loans secured on dwellings of £4.5 billion partially offset this. </p><p>In line with our <a>National Accounts Revisions Policy</a>, this release contains data that are consistent with the UK National Accounts, the Blue Book 2026, which will be released on 30 October 2026. </p><p>Revisions across the full-time period, in particular Quarter 2 2024, are primarily because of updateLine truncated
|
||||
</p><table class="table">
|
||||
<caption class="table__caption">Table 4: Quarter-on-quarter growth for real GDP at different publication vintages<br><span class="table__subtitle">Quarter 1 (Jan to Mar) 2025 to Quarter 2 (Apr to June) 2026</span></caption>
|
||||
<colgroup><col><col><col><col><col><col><col></colgroup>
|
||||
<tr class="table__header-row table__nowrap"><th class="align-left">Relating to <br>Period</th><th class="align-right">Q1 2025</th><th class="align-right">Q2 2025</th><th class="align-right">Q3 2025</th><th class="align-right">Q4 2025</th><th class="align-right">Q1 2026</th><th class="align-right">Q2 2026</th></tr>
|
||||
<tr><th class="table__nowrap align-left">May 2025</th><td class="align-right">0.7</td><td class="align-right"></td><td class="align-right"></td><td class="align-right"></td><td class="align-right"></td><td class="align-right"></td></tr>
|
||||
<tr><th class="table__nowrap align-left">Jun 2025</th><td class="align-right">0.7</td><td class="align-right"></td><td class="align-right"></td><td class="align-right"></td><td class="align-right"></td><td class="align-right"></td></tr>
|
||||
<tr><th class="table__nowrap align-left">Aug 2025</th><td class="align-right">0.7</td><td class="align-right">0.3</td><td class="align-right"></td><td class="align-right"></td><td class="align-right"></td><td class="align-right"></td></tr>
|
||||
<tr><th class="table__nowrap align-left">Sept 2025</th><td class="align-right">0.7</td><td class="align-right">0.3</td><td class="align-right"></td><td class="align-right"></td><td class="align-right"></td><td class="align-right"></td></tr>
|
||||
<tr><th class="table__nowrap align-left">Nov 2025</th><td class="align-right">0.7</td><td class="align-right">0.3</td><td class="align-right">0.1</td><td class="align-right"></td><td class="align-right"></td><td class="align-right"></td></tr>
|
||||
<tr><th class="table__nowrap align-left">Dec 2025</th><td class="align-right">0.7</td><td class="align-right">0.2</td><td class="align-right">0.1</td><td class="align-right"></td><td class="align-right"></td><td class="align-right"></td></tr>
|
||||
<tr><th class="table__nowrap align-left">Feb 2026</th><td class="align-right">0.7</td><td class="align-right">0.2</td><td class="align-right">0.1</td><td class="align-right">0.1</td><td class="align-right"></td><td class="align-right"></td></tr>
|
||||
<tr><th class="table__nowrap align-left">Mar 2026</th><td class="align-right">0.7</td><td class="align-right">0.2</td><td class="align-right">0.1</td><td class="align-right">0.1</td><td class="align-right"></td><td class="align-right"></td></tr>
|
||||
<tr><th class="table__nowrap align-left">May 2026</th><td class="align-right">0.6</td><td class="align-right">0.1</td><td class="align-right">0.2</td><td class="align-right">0.2</td><td class="align-right">0.6</td><td class="align-right"></td></tr>
|
||||
<tr><th class="table__nowrap align-left">Jun 2026</th><td class="align-right">0.6</td><td class="align-right">0.2</td><td class="align-right">0.1</td><td class="align-right">0.1</td><td class="align-right">0.6</td><td class="align-right"></td></tr>
|
||||
<tr><th class="table__nowrap align-left">Aug-26</th><td class="align-right">0.6</td><td class="align-right">0.2</td><td class="align-right">0.1</td><td class="align-right">0.1</td><td class="align-right">0.6</td><td class="align-right">0.4</td></tr>
|
||||
<tr><th class="table__nowrap align-left">Latest estimate: <br>Sept 2026</th><td class="align-right">0.6</td><td class="align-right">0.0</td><td class="align-right">0.2</td><td class="align-right">0.0</td><td class="align-right">0.6</td><td class="align-right">0.5</td></tr>
|
||||
<tr><th class="table__nowrap align-left">Total revision <br>between first <br>and latest estimate</th><td class="align-right">-0.1</td><td class="align-right">-0.3</td><td class="align-right">0.1</td><td class="align-right">-0.1</td><td class="align-right">0.0</td><td class="align-right">0.1</td></tr>
|
||||
</table><p>
|
||||
</p><table class="table">
|
||||
<caption class="table__caption">Table 5: Real GDP growth for the G7 economies<br><span class="table__subtitle">Percentage change, quarter on quarter and annual growth, real gross domestic product (GDP) for 2025 and 2026</span></caption>
|
||||
<colgroup><col><col><col><col><col><col><col><col></colgroup>
|
||||
<tr class="table__header-row table__nowrap"><td class="align-left"></td><th class="align-center">Quarter on previous quarter (%)</th><th class="align-right">Annual (%)</th></tr>
|
||||
<tr class="table__header-row table__nowrap"><th class="align-left">Country</th><th class="align-right">Q1 2025</th><th class="align-right">Q2 2025</th><th class="align-right">Q3 2025</th><th class="align-right">Q4 2025</th><th class="align-right">Q1 2026</th><th class="align-right">Q2 2026</th><th class="align-right">2025</th></tr>
|
||||
<tr><th class="table__nowrap align-left">Canada</th><td class="align-right">0.7</td><td class="align-right">-0.2</td><td class="align-right">0.5</td><td class="align-right">-0.2</td><td class="align-right">0.1</td><td class="align-right">0.8</td><td class="align-right">1.9</td></tr>
|
||||
<tr><th class="table__nowrap align-left">France</th><td class="align-right">0.2</td><td class="align-right">0.2</td><td class="align-right">0.4</td><td class="align-right">0.3</td><td class="align-right">-0.2</td><td class="align-right">0.0</td><td class="align-right">0.9</td></tr>
|
||||
<tr><th class="table__nowrap align-left">Germany</th><td class="align-right">0.1</td><td class="align-right">0.0</td><td class="align-right">0.0</td><td class="align-right">0.3</td><td class="align-right">0.4</td><td class="align-right">0.3</td><td class="align-right">0.3</td></tr>
|
||||
<tr><th class="table__nowrap align-left">Italy</th><td class="align-right">0.3</td><td class="align-right">0.0</td><td class="align-right">0.2</td><td class="align-right">0.3</td><td class="align-right">0.3</td><td class="align-right">0.2</td><td class="align-right">0.7</td></tr>
|
||||
<tr><th class="table__nowrap align-left">Japan</th><td class="align-right">0.5</td><td class="align-right">0.1</td><td class="align-right">-0.4</td><td class="align-right">0.3</td><td class="align-right">0.5</td><td class="align-right">0.4</td><td class="align-right">1.2</td></tr>
|
||||
<tr><th class="table__nowrap align-left">UK</th><td class="align-right">0.6</td><td class="align-right">0.0</td><td class="align-right">0.2</td><td class="align-right">0.0</td><td class="align-right">0.6</td><td class="align-right">0.5</td><td class="align-right">1.2</td></tr>
|
||||
<tr><th class="table__nowrap align-left">United States</th><td class="align-right">-0.2</td><td class="align-right">0.9</td><td class="align-right">1.1</td><td class="align-right">0.1</td><td class="align-right">0.5</td><td class="align-right">0.4</td><td class="align-right">2.1</td></tr>
|
||||
</table><p>
|
||||
</p><table class="table">
|
||||
<caption class="table__caption">Table 6: Real GDP per head growth for the G7 economies<br><span class="table__subtitle">Percentage change, quarter on quarter and annual growth, real gross domestic product (GDP) per head for 2025 and 2026</span></caption>
|
||||
<colgroup><col><col><col><col><col><col><col><col></colgroup>
|
||||
<tr class="table__header-row table__nowrap"><td class="align-left"></td><th class="align-center">Quarter on previous quarter (%)</th><th class="align-right">Annual (%)</th></tr>
|
||||
<tr class="table__header-row table__nowrap"><th class="align-left">Country</th><th class="align-right">2025 Q1</th><th class="align-right">2025 Q2</th><th class="align-right">2025 Q3</th><th class="align-right">2025 Q4</th><th class="align-right">2026 Q1</th><th class="align-right">Q2 2026</th><th class="align-right">2025</th></tr>
|
||||
<tr><th class="table__nowrap align-left">Canada</th><td class="align-right">0.5</td><td class="align-right">-0.3</td><td class="align-right">0.4</td><td class="align-right">-0.1</td><td class="align-right">0.3</td><td class="align-right">1.0</td><td class="align-right">0.7</td></tr>
|
||||
<tr><th class="table__nowrap align-left">France</th><td class="align-right">0.1</td><td class="align-right">0.2</td><td class="align-right">0.4</td><td class="align-right">0.2</td><td class="align-right">-0.2</td><td class="align-right">..</td><td class="align-right">0.6</td></tr>
|
||||
<tr><th class="table__nowrap align-left">Germany</th><td class="align-right">0.1</td><td class="align-right">0.0</td><td class="align-right">0.0</td><td class="align-right">0.3</td><td class="align-right">0.5</td><td class="align-right">0.4</td><td class="align-right">0.3</td></tr>
|
||||
<tr><th class="table__nowrap align-left">Italy</th><td class="align-right">0.4</td><td class="align-right">0.0</td><td class="align-right">0.2</td><td class="align-right">0.3</td><td class="align-right">0.3</td><td class="align-right">0.2</td><td class="align-right">0.7</td></tr>
|
||||
<tr><th class="table__nowrap align-left">Japan</th><td class="align-right">0.6</td><td class="align-right">0.1</td><td class="align-right">-0.3</td><td class="align-right">0.5</td><td class="align-right">0.6</td><td class="align-right">0.3</td><td class="align-right">1.6</td></tr>
|
||||
<tr><th class="table__nowrap align-left">UK</th><td class="align-right">0.5</td><td class="align-right">-0.1</td><td class="align-right">0.1</td><td class="align-right">0.0</td><td class="align-right">0.6</td><td class="align-right">0.5</td><td class="align-right">0.9</td></tr>
|
||||
<tr><th class="table__nowrap align-left">United States</th><td class="align-right">-0.3</td><td class="align-right">0.8</td><td class="align-right">1.0</td><td class="align-right">0.0</td><td class="align-right">0.5</td><td class="align-right">0.3</td><td class="align-right">1.6</td></tr>
|
||||
</table><p></p><p><a>GDP – data tables</a><br> Dataset | Released 30 September 2026<br> Annual and quarterly data for UK gross domestic product (GDP) estimates, in chained volume measures and current market prices.</p><p><a>GDP in chained volume measures – real-time database (ABMI)</a><br> Dataset | Released 30 September 2026<br> Quarterly levels for UK gross domestic product (GDP), in chained volume measures at market prices.</p><p><a>GDP at current prices – real-time database (YBHA)</a><br> Dataset | Released 30 September 2026<br> Quarterly levels for UK gross domestic product (GDP) at current market prices. </p><p></p><p>The embedded visualisation below may not display correctly without JavaScript enabled. <a class="underline-link">View it in full screen</a>.</p><p>Quarterly GDP is a balanced measure of three approaches. The GDP monthly estimate focuses on gross value added (GVA) and output as a proxy for GDP. This results in data differences, in both levels and growth terms, between our quarterly bulletins (average GDP) and our <a>GDP monthly estimate bulletins</a> (output approach to GDP). Quarterly GDP is the lead measure of GDP because of its higher data content and inclusion of variables that enable the conversion from a GVA concept to a GDP basis.</p><p>Information on the methods we use is in our <a>Balancing the output, income and expenditure approaches to measuring GDP report</a>.</p><p>Alignment adjustments, found in Table M of our <a>GDP data tables</a>, have a target limit of plus or minus £3,000 million on any quarter. However, in periods where the data sources are particularly difficult to balance, larger alignment adjustments are sometimes needed. This is explained in more detail in our <a>Recent challenges of balancing the three approaches of GDP article</a>.</p><p>Our standard practice is to prefer that the alignment adjustment be out of tolerance rather than over-adjust individual GDP components to achieve a balance. This is most likely to occur in the latest quarter, where the constraints are larger, and where we must align to the output estimate for the change in GDP, and where the data content is at its lowest.</p><p>To achieve a balanced GDP dataset through alignment, we apply balancing adjustments to the components of GDP where data content is particularly weak in each quarter because of a higher level of forecast content. Table 7 shows the balancing adjustments applied to the GDP quarterly dataset.</p><p>
|
||||
</p><table class="table">
|
||||
<caption class="table__caption">Table 7: Balancing adjustments applied to the GDP quarterly national accounts dataset<br><span class="table__subtitle">Quarter 1 (Jan to Mar) 2025 to Quarter 2 (Apr to June) 2026</span></caption>
|
||||
<colgroup><col><col><col><col><col><col><col><col></colgroup>
|
||||
<tr class="table__header-row table__nowrap"><th class="align-left">GDP <br>measurement <br>approach and <br>component <br>adjustment <br>applied to</th><td class="align-right"></td><th class="align-right">Q1 <br>2025</th><th class="align-right">Q2 <br>2025</th><th class="align-right">Q3 <br>2025</th><th class="align-right">Q4 <br>2025</th><th class="align-right">Q1 <br>2026</th><th class="align-right">Q2 <br>2026</th></tr>
|
||||
<tr><th class="table__nowrap align-left">Expenditure </th><td class="align-right"></td><td class="align-right"></td><td class="align-right"></td><td class="align-right"></td><td class="align-right"></td><td class="align-right"></td><td class="align-right"></td></tr>
|
||||
<tr><th class="table__nowrap align-left">Non-profit <br>institution <br>serving <br>households</th><th class="table__nowrap align-right">Current <br>price</th><td class="align-right"></td><td class="align-right"></td><td class="align-right"></td><td class="align-right"></td><td class="align-right"></td><td class="align-right"></td></tr>
|
||||
<tr><td class="align-left"></td><th class="table__nowrap align-right">Chained <br>volume <br>measure</th><td class="align-right">200</td><td class="align-right">600</td><td class="align-right">600</td><td class="align-right">600</td><td class="align-right">600</td><td class="align-right">600</td></tr>
|
||||
<tr><th class="table__nowrap align-left">Gross fixed <br>capital formation</th><th class="table__nowrap align-right">Current <br>price</th><td class="align-right">500</td><td class="align-right">500</td><td class="align-right">500</td><td class="align-right">500</td><td class="align-right">-500</td><td class="align-right">-500</td></tr>
|
||||
<tr><td class="align-left"></td><th class="table__nowrap align-right">Chained <br>volume <br>measure</th><td class="align-right"></td><td class="align-right"></td><td class="align-right"></td><td class="align-right"></td><td class="align-right">-1000</td><td class="align-right">-1500</td></tr>
|
||||
<tr><th class="table__nowrap align-left">Inventories</th><th class="table__nowrap align-right">Current <br>price</th><td class="align-right">500</td><td class="align-right"></td><td class="align-right"></td><td class="align-right"></td><td class="align-right"></td><td class="align-right">500</td></tr>
|
||||
<tr><td class="align-left"></td><th class="table__nowrap align-right">Chained <br>volume <br>measures</th><td class="align-right"></td><td class="align-right">500</td><td class="align-right"></td><td class="align-right"></td><td class="align-right">-750</td><td class="align-right"></td></tr>
|
||||
<tr><th class="table__nowrap align-left">Trade in <br>services exports</th><th class="table__nowrap align-right">Current <br>price</th><td class="align-right">500</td><td class="align-right">-1500</td><td class="align-right">-500</td><td class="align-right">-500</td><td class="align-right"></td><td class="align-right"></td></tr>
|
||||
<tr><td class="align-left"></td><th class="table__nowrap align-right">Chained <br>volume <br>measures</th><td class="align-right"></td><td class="align-right">1000</td><td class="align-right">500</td><td class="align-right"></td><td class="align-right"></td><td class="align-right">-500</td></tr>
|
||||
<tr><th class="table__nowrap align-left">Trade in <br>services imports</th><th class="table__nowrap align-right">Current <br>price</th><td class="align-right"></td><td class="align-right"></td><td class="align-right"></td><td class="align-right">-500</td><td class="align-right"></td><td class="align-right"></td></tr>
|
||||
<tr><td class="align-left"></td><th class="table__nowrap align-right">Chained <br>volume <br>measures</th><td class="align-right">-1000</td><td class="align-right">-1000</td><td class="align-right">-500</td><td class="align-right">-1000</td><td class="align-right">-500</td><td class="align-right">-500</td></tr>
|
||||
<tr><td class="align-left"></td><td class="align-right"></td><td class="align-right"></td><td class="align-right"></td><td class="align-right"></td><td class="align-right"></td><td class="align-right"></td><td class="align-right"></td></tr>
|
||||
<tr><th class="table__nowrap align-left">Income</th><td class="align-right"></td><td class="align-right"></td><td class="align-right"></td><td class="align-right"></td><td class="align-right"></td><td class="align-right"></td><td class="align-right"></td></tr>
|
||||
<tr><th class="table__nowrap align-left">Private non-financial <br>corporation gross <br>operating surplus</th><th class="table__nowrap align-right">Current <br>price</th><td class="align-right">-3500</td><td class="align-right">1000</td><td class="align-right"></td><td class="align-right">-2500</td><td class="align-right">3500</td><td class="align-right">-1000</td></tr>
|
||||
<tr><th class="table__nowrap align-left">Compensation <br>of employees</th><th class="table__nowrap align-right">Current <br>price</th><td class="align-right">-2000</td><td class="align-right">-2000</td><td class="align-right">-2000</td><td class="align-right">-2000</td><td class="align-right">-2000</td><td class="align-right">-2000</td></tr>
|
||||
</table><p>Since the UK left the EU on 31 January 2020, arrangements for how the UK trades with the EU changed. HM Revenue and Customs (HMRC) implemented some data collection changes following Brexit, which affected statistics on UK trade in goods with the EU.</p><p>We have made adjustments to our estimates of goods imports from the EU in 2021 and 2022 to account for these changes. However, a structural break remains in the full time series for goods imports from, and exports to, the EU from January 2021, therefore we advise caution when interpreting and drawing conclusions from these statistics. More detail is provided in our <a>Impact of trade in goods data collection changes on UK trade statistics: summary of adjustments and the structural break from 2021 article</a>.</p><p>From September 2025 until early 2027, International Trade in Services (ITIS) data (which account for approximately 50% of total Trade in Services) will be processed once each quarterly period. During this period, the data will be based on a robust survey response rate of between approximately 60% and 70%. This will enable more focus on improving processing systems and ensuring methods and quality in the future.</p><p>ITIS-based data in Trade in Services estimates at first quarterly estimate will be forecast until early 2027.</p><p>The International Passenger Survey (IPS), which is the source of travel services estimates (accounting for approximately 8% of total trade), is being transformed as part of our <a>Improving our travel and tourism statistics project</a>, and travel services estimates have been forecast since Quarter 3 (July to Sept) 2024. Estimates will be forecast during the period of the travel and tourism transformation.</p><p>Our <a>Financial Services Survey (FSS) is undergoing transformation</a> to improve the quality of our financial sector statistics. During the period of transformation, starting from Quarter 1 2024, financial services trade statistics in this publication are based on forecasts.</p><p>There are three approaches to measuring gross domestic product (GDP):</p><p>the output approach</p><p>the expenditure approach</p><p>the income approach</p><p>The data and data quality are different for each approach, and this dictates the approach taken in balancing quarterly data. There are more data available on output in the UK in the short term, than in the other two approaches. To get the best estimate of GDP, our published figure, estimates from all three approaches are balanced to produce an average, except in the latest two quarters where the output data take the lead, because of the larger data content.</p><p>The three approaches to measuring GDP allow us to confront our data sources within the national accounts framework. Figure 3 shows that there are differences in the three approaches at this stage in the production cycle for 2025, with real growth estimated in a range of 1.1% to 1.4%. There will be uncertainty at the component level at this stage in the production cycle for 2025 onwards until these data have been confronted through the supply and use tables framework (SUTs). This uncertainty may be for various reasons and is discussed further later in this section.</p><p>In the output approach, we do not currently have final estimates for intermediate consumption (the value of goods and services purchased to be used up in the production of goods and services). This is outlined in our <a>Blue Book 2025: advanced aggregate estimates article</a>. Initially, we use turnover and output as a proxy for changes in gross value added. We assume that the intermediate consumption ratio by industry, calculated in 2024, holds constant into 2025 onwards.</p><p>In the expenditure approach, we currently have lower response rates for areas, such as the Living Costs and Food Survey, which is one of many data sources that inform our estimates of household consumption. We therefore rely on additional indicators, such as our Monthly Business Survey, to quality adjust some of our estimates in the short term.</p><p>In the income approach, we do not have up-to-date quarterly information on the gross trading profits of businesses. These data are collected from HM Revenue and Customs (HMRC) and are available with a lag of approximately two years.</p><p>We rely on contextual data from other sources to inform these quarterly estimates, as outlined in our <a>Profitability of UK companies quality and methodology information (QMI)</a>.</p><p>The UK National Accounts are drawn together using data from many different sources. This ensures that they are comprehensive and provide different perspectives on the economy, for example, sales by retailers and purchases by households. Further information on measuring GDP can be found in our <a>Guide to the UK National Accounts</a>. More quality and methodology information is available in our <a>GDP quality and methodology information (QMI)</a>.</p><p>The headline estimates of quarterly GDP are seasoLine truncated
|
||||
@@ -0,0 +1,219 @@
|
||||
import asyncio
|
||||
from datetime import UTC, date, datetime
|
||||
from types import SimpleNamespace
|
||||
|
||||
import pytest
|
||||
|
||||
from alphapulse.calendar.archives import parse_announcements, parse_bls_text
|
||||
from alphapulse.calendar.parsers import bls_periods, release_metadata
|
||||
from alphapulse.calendar.umich import current_result, monthly_series, parse_schedule
|
||||
|
||||
|
||||
@pytest.mark.parametrize("title,period,stage", [
|
||||
("Gross Domestic Product, 4th Quarter and Year 2024 (Advance Estimate)", "2024-Q4", "advance"),
|
||||
("GDP (Third Estimate), Industries, 2nd Quarter 2026", "2026-Q2", "third"),
|
||||
("Gross Domestic Product, 3rd Quarter 2025 (Initial Estimate)", "2025-Q3", "initial"),
|
||||
("Gross Domestic Product, 3rd Quarter 2025 (Updated Estimate)", "2025-Q3", "updated"),
|
||||
("Gross Domestic Product", None, None),
|
||||
])
|
||||
def test_quarter_and_stage_follow_explicit_official_title(title, period, stage):
|
||||
assert release_metadata("gdp", title) == (period, stage)
|
||||
|
||||
|
||||
def test_bls_schedule_statistical_period_is_not_inferred_from_release_month():
|
||||
body = "<table><tr><td>September 2025</td><td>Oct. 24, 2025</td><td>08:30 AM</td></tr></table>"
|
||||
assert bls_periods(body) == {datetime(2025, 10, 24, 12, 30, tzinfo=UTC): "2025-09"}
|
||||
assert release_metadata("cpi", "Consumer Price Index") == (None, None)
|
||||
with pytest.raises(ValueError, match="统计月份"):
|
||||
bls_periods("<html>Access denied</html>")
|
||||
|
||||
|
||||
def test_umich_historical_final_can_be_released_in_following_month():
|
||||
events = parse_schedule("Jul 2025 7/18/2025 8/1/2025\nDec 2025 12/5/2025 12/19/2025")
|
||||
assert events[1].period == "2025-07" and events[1].stage == "final"
|
||||
assert events[1].at == datetime(2025, 8, 1, 14, tzinfo=UTC)
|
||||
assert events[3].at.hour == 15 # 冬令时
|
||||
|
||||
|
||||
def test_umich_annual_schedule_preserves_separate_stages():
|
||||
events = parse_schedule("RELEASE DATES FOR 2026\nJanuary 9 January Prelim\nJanuary 23 January Final")
|
||||
assert [(e.period, e.stage) for e in events] == [("2026-01", "preliminary"), ("2026-01", "final")]
|
||||
with pytest.raises(ValueError, match="重复"):
|
||||
parse_schedule("RELEASE DATES FOR 2026\nJanuary 9 January Prelim\nJanuary 9 January Prelim")
|
||||
with pytest.raises(ValueError):
|
||||
parse_schedule("Access denied")
|
||||
|
||||
|
||||
def test_umich_current_heading_and_table_must_agree_and_previous_is_final():
|
||||
html = """<h1>Preliminary Results for October 2026</h1><table id="front_table">
|
||||
<tr><td></td><td>Oct</td><td>Sep</td></tr><tr><td></td><td>2026</td><td>2026</td></tr>
|
||||
<tr><td>Index of Consumer Sentiment</td><td>49.0</td><td>48.1</td></tr></table>"""
|
||||
period, stage, values = current_result(html)
|
||||
assert (period, stage) == ("2026-10", "preliminary")
|
||||
assert values["umich_sentiment"]["previous_basis"] == "2026-09 官方上月终值"
|
||||
with pytest.raises(ValueError, match="表头"):
|
||||
current_result(html.replace("<td>Oct</td>", "<td>Sep</td>"))
|
||||
|
||||
|
||||
def test_current_series_has_no_invented_release_timestamp_and_rejects_duplicates():
|
||||
csv = "Month,YYYY,ICS_ALL\nDecember,2024,74.0\nJanuary,2025,71.7\n"
|
||||
assert monthly_series(csv) == [("2024-12", "74.0"), ("2025-01", "71.7")]
|
||||
with pytest.raises(ValueError, match="重复"):
|
||||
monthly_series(csv + "January,2025,72.0\n")
|
||||
with pytest.raises(ValueError, match="列名"):
|
||||
monthly_series("Month,YYYY,ICS\nJanuary,2025,71.7\n")
|
||||
|
||||
|
||||
@pytest.mark.parametrize("text,payrolls,rate", [
|
||||
("Total nonfarm payroll employment changed little in July (+73,000). The unemployment rate changed little at 4.2 percent.", "7.3", "4.2"),
|
||||
("Total nonfarm payroll employment declined by 92,000. The unemployment rate edged up to 4.4 percent.", "-9.2", "4.4"),
|
||||
("Total nonfarm payroll employment increased by 177,000. The unemployment rate was unchanged at 4.2 percent.", "17.7", "4.2"),
|
||||
("Total nonfarm payroll employment edged down by 92,000. The unemployment rate changed little at 4.4 percent.", "-9.2", "4.4"),
|
||||
("Total nonfarm payroll employment edged up by 119,000. The unemployment rate, at 4.4 percent, changed little.", "11.9", "4.4"),
|
||||
])
|
||||
def test_archived_jobs_wording_units_and_negative_values(text, payrolls, rate):
|
||||
values = parse_bls_text("jobs", text)
|
||||
assert values["payrolls"]["actual"] == payrolls and values["unemployment"]["actual"] == rate
|
||||
|
||||
|
||||
def test_pce_combined_release_has_two_periods_and_no_false_previous():
|
||||
html = b'''<html><body>January 22, 2026 10:00 a.m.
|
||||
<h1>Personal Income and Outlays, October and November 2025</h1>
|
||||
<div class="field--name-body"><p>From the same month one year ago, the PCE price index increased 2.7 percent in October,
|
||||
followed by an increase of 2.8 percent in November. Excluding food and energy, the PCE price index also increased
|
||||
2.7 percent followed by an increase of 2.8 percent.</p></div>
|
||||
<table><tr><td></td><td>October</td><td>November</td></tr>
|
||||
<tr><td>PCE price index</td><td>0.2</td><td>0.2</td></tr>
|
||||
<tr><td>PCE price index, excluding food and energy</td><td>0.2</td><td>0.2</td></tr></table></body></html>'''
|
||||
first, second = parse_announcements("pce", html)
|
||||
assert (first.period, second.period) == ("2025-10", "2025-11")
|
||||
assert first.at == second.at == datetime(2026, 1, 22, 15, tzinfo=UTC)
|
||||
assert first.values["pce_yoy"]["actual"] == "2.7" and second.values["pce_yoy"]["actual"] == "2.8"
|
||||
assert all(v["previous"] is None for a in (first, second) for v in a.values.values())
|
||||
with pytest.raises(ValueError, match="表头"):
|
||||
parse_announcements("pce", html.replace(b"<td>October</td>", b"<td>September</td>"))
|
||||
|
||||
|
||||
def test_pce_rounded_zero_comes_from_official_table_not_imprecise_prose():
|
||||
from alphapulse.calendar.parsers import parse_values
|
||||
html = '''<div class="field--name-body"><p>From the preceding month, the PCE price index for March decreased less than 0.1 percent.
|
||||
Excluding food and energy, the PCE price index increased less than 0.1 percent.</p>
|
||||
<p>From the same month one year ago, the PCE price index increased 2.3 percent. Excluding food and energy,
|
||||
the PCE price index increased 2.6 percent.</p></div><table><tr><td>PCE price index</td><td>0.0</td></tr>
|
||||
<tr><td>PCE price index, excluding food and energy</td><td>0.0</td></tr></table>'''
|
||||
assert parse_values("pce", html)["pce_mom"] == {"actual": "0.0", "previous": None}
|
||||
with pytest.raises(ValueError, match="精确月率"):
|
||||
parse_values("pce", html.split("<table>")[0])
|
||||
|
||||
|
||||
def test_legacy_bls_html_encoding_and_double_dash_heading():
|
||||
html = '''<html><body>January 9, 2026 8:30 a.m.<div id="bodytext">
|
||||
THE EMPLOYMENT SITUATION -- DECEMBER 2025
|
||||
Both total nonfarm payroll employment (+50,000) and the unemployment rate (4.4 percent) changed little.
|
||||
Historical note — revised.</div></body></html>'''.encode("cp1252")
|
||||
[announcement] = parse_announcements("jobs", html)
|
||||
assert announcement.period == "2025-12" and announcement.values["payrolls"]["actual"] == "5"
|
||||
assert announcement.at == datetime(2026, 1, 9, 13, 30, tzinfo=UTC)
|
||||
|
||||
|
||||
def test_official_missing_cpi_monthly_is_not_zero_or_two_month_change(trading):
|
||||
from pathlib import Path
|
||||
from alphapulse.calendar.parsers import parse_values
|
||||
from alphapulse.calendar.service import release_rows
|
||||
body = (Path(__file__).parent / "fixtures/calendar/cpi.html").read_text()
|
||||
# 官方停摆期表格用横线标识单月读数缺失;正文的累计变化不能代替它。
|
||||
from parsel import Selector
|
||||
sel = Selector(text=body)
|
||||
for node in sel.css("#cpi_pressa tr"):
|
||||
cells = node.xpath("./th|./td")
|
||||
if len(cells) == 9:
|
||||
cells[-2].root.text = "-"
|
||||
cells[-3].root.text = "-"
|
||||
values = parse_values("cpi", sel.get())
|
||||
assert values["cpi_mom"]["actual"] is None and values["cpi_mom"]["previous"] is None
|
||||
assert values["cpi_yoy"]["actual"] is not None
|
||||
now = datetime.now(UTC)
|
||||
row = SimpleNamespace(id=1, family="cpi", source="bls", title="CPI", period="2025-11", stage=None,
|
||||
scheduled_at=now, schedule_status="scheduled", first_received_at=now, values=values,
|
||||
last_checked_at=now, error=None, release_url=None, schedule_url="https://www.bls.gov", revision_no=2)
|
||||
[mom, _, core, _] = release_rows(row, now)
|
||||
assert mom["status"] == core["status"] == "unavailable"
|
||||
assert "两个月" in mom["explanation"] and mom["impact"] == "uncertain"
|
||||
|
||||
|
||||
def test_archive_discovery_uses_real_links_and_excludes_state_gdp(trading):
|
||||
from alphapulse.calendar.backfill import archive_links
|
||||
body = """<a href="/news/2025/pce">Personal Income and Outlays, December 2024</a>
|
||||
<a href="/news/2025/state">Gross Domestic Product by State, 2025</a>
|
||||
<a href="/news/2024/old">Personal Income and Outlays, November 2024</a>
|
||||
<li class="pager__item--next"><a href="?page=1">Next</a></li>"""
|
||||
links, following = archive_links("bea", body, "https://www.bea.gov/news/archive", date(2025, 1, 1), date(2025, 12, 31))
|
||||
assert links == ["https://www.bea.gov/news/2025/pce"]
|
||||
assert following == "https://www.bea.gov/news/archive?page=1"
|
||||
|
||||
|
||||
def test_result_cannot_cross_period_or_stage_and_does_not_change_first_arrival(trading):
|
||||
from alphapulse.calendar.service import save_result
|
||||
row = SimpleNamespace(period="2025-07", stage="preliminary", values={})
|
||||
with pytest.raises(ValueError, match="统计期或发布阶段"):
|
||||
save_result(None, row, {}, "url", 1, datetime.now(UTC), period="2025-07", stage="final")
|
||||
assert row.values == {}
|
||||
|
||||
|
||||
def test_umich_poll_waits_for_final_instead_of_reusing_preliminary(trading):
|
||||
import httpx
|
||||
from unittest.mock import AsyncMock
|
||||
from alphapulse.calendar.worker import CalendarWorker
|
||||
async def check():
|
||||
worker = CalendarWorker()
|
||||
html = """<h1>Preliminary Results for October 2026</h1><table id="front_table">
|
||||
<tr><td></td><td>Oct</td><td>Sep</td></tr><tr><td></td><td>2026</td><td>2026</td></tr>
|
||||
<tr><td>Index of Consumer Sentiment</td><td>49.0</td><td>48.1</td></tr></table>"""
|
||||
worker.fetch = AsyncMock(return_value=(httpx.Response(200, text=html, request=httpx.Request("GET", "https://www.sca.isr.umich.edu/")), 1))
|
||||
row = SimpleNamespace(source="umich", family="umich", period="2026-10", stage="final", scheduled_at=datetime.now(UTC))
|
||||
try:
|
||||
assert await worker.result_page(row) is None
|
||||
row.period = "2026-09"
|
||||
with pytest.raises(ValueError, match="历史期次"):
|
||||
await worker.result_page(row)
|
||||
finally:
|
||||
await worker.http.aclose()
|
||||
await worker.bls.aclose()
|
||||
asyncio.run(check())
|
||||
|
||||
|
||||
@pytest.mark.parametrize("limited_path,status", [("/news.release/cpi_02122025.htm", 429),
|
||||
("/news.release/cpi_02122025.htm", 503),
|
||||
("/bls/news-release/cpi.htm", 429)])
|
||||
def test_archive_limit_stops_entire_source_preserves_documents_and_continues_other_source(trading, monkeypatch, limited_path, status):
|
||||
import httpx
|
||||
from unittest.mock import AsyncMock
|
||||
from alphapulse.calendar import backfill
|
||||
|
||||
async def check():
|
||||
calls = []
|
||||
def respond(request):
|
||||
path = request.url.path
|
||||
calls.append(path)
|
||||
if path == limited_path:
|
||||
return httpx.Response(status, headers={"Retry-After": "120"})
|
||||
if path == "/bls/news-release/cpi.htm":
|
||||
return httpx.Response(200, text=''.join(f'<a href="/news.release/cpi_{d}.htm">CPI</a>' for d in ("01152025", "02122025", "03122025")))
|
||||
if path == "/news/archive":
|
||||
return httpx.Response(200, text='<a href="/news/2025/pce">Personal Income and Outlays</a>')
|
||||
if path in ("/news.release/cpi_01152025.htm", "/news/2025/pce"):
|
||||
return httpx.Response(200, text="Original announcement")
|
||||
raise AssertionError(f"限流后不应继续请求:{request.url}")
|
||||
client = httpx.AsyncClient
|
||||
monkeypatch.setattr(backfill.httpx, "AsyncClient", lambda **kwargs: client(**kwargs, transport=httpx.MockTransport(respond)))
|
||||
monkeypatch.setattr(backfill, "ensure_quiet_window", AsyncMock())
|
||||
# 跳过测试中的请求间隔;实际 HTTP 边界与来源停止行为保持不变。
|
||||
monkeypatch.setattr(backfill.asyncio, "sleep", AsyncMock())
|
||||
errors = []
|
||||
docs = await backfill.fetch_documents(date(2025, 1, 1), date(2025, 12, 31), set(), errors, sources={"bls", "bea"})
|
||||
assert [d.source for d in docs] == (["bls", "bea"] if "news.release" in limited_path else ["bea"])
|
||||
assert len(errors) == 1 and errors[0]["source"] == "bls"
|
||||
assert errors[0]["retry_after"] == "120" and "不完整" in errors[0]["stop_reason"]
|
||||
assert limited_path in errors[0]["url"]
|
||||
assert "/bls/news-release/ppi.htm" not in calls and "/news.release/cpi_03122025.htm" not in calls
|
||||
asyncio.run(check())
|
||||
@@ -0,0 +1,197 @@
|
||||
"""欧洲真实官方样例:数值口径、时区和初终值隔离。"""
|
||||
from datetime import UTC, date, datetime
|
||||
import hashlib
|
||||
from pathlib import Path
|
||||
|
||||
import pytest
|
||||
|
||||
from alphapulse.calendar.europe import family_for, local_at, parse_announcement, parse_schedule
|
||||
from alphapulse.core.official_sources import feed_entries, official_url, relevant_news
|
||||
|
||||
FIXTURES = Path(__file__).parent / "fixtures" / "europe"
|
||||
|
||||
|
||||
def fixture(name):
|
||||
return (FIXTURES / name).read_text()
|
||||
|
||||
|
||||
@pytest.mark.parametrize("family,name,period,stage,expected", [
|
||||
("ecb_rate", "ecb_rate", None, None, {"ecb_deposit": "2.5", "ecb_main": "2.65", "ecb_marginal": "2.9"}),
|
||||
("boe_rate", "boe_decision", None, None, {"bank_rate": "3.75"}),
|
||||
("uk_cpi", "ons_cpi", "2026-09", None, {"eu_cpi_yoy": "3.5", "eu_cpi_mom": "0.4", "eu_core_cpi_yoy": "2.8"}),
|
||||
("uk_jobs", "ons_jobs", "2026-08", None, {"uk_unemployment": "4.7"}),
|
||||
("uk_gdp", "ons_gdp", "2026-Q2", "initial", {"gdp_qoq": "0.4", "gdp_yoy": "1.2"}),
|
||||
("uk_gdp", "uk_final", "2026-Q2", "final", {"gdp_qoq": "0.5", "gdp_yoy": None}),
|
||||
("ea_hicp", "ea_cpi", "2026-09", "final", {"hicp_yoy": "3.8", "hicp_mom": "0.6", "core_hicp_yoy": "2.5"}),
|
||||
("ea_hicp", "ea_flash", "2026-09", "flash", {"hicp_yoy": "3.8", "hicp_mom": "0.6", "core_hicp_yoy": "2.5"}),
|
||||
("ea_jobs", "ea_jobs", "2026-08", None, {"ilo_unemployment": "6.4"}),
|
||||
("ea_gdp", "ea_gdp", "2026-Q2", "preliminary", {"gdp_qoq": "0.4", "gdp_yoy": "1"}),
|
||||
("ea_gdp", "ea_gdp_flash", "2026-Q2", "flash", {"gdp_qoq": "0.4", "gdp_yoy": "1"}),
|
||||
("ea_gdp", "ea_gdp_final", "2026-Q2", "final", {"gdp_qoq": "0.6", "gdp_yoy": "1.2"}),
|
||||
("de_cpi", "de_cpi", "2026-09", "final", {"eu_cpi_yoy": "3.3", "eu_cpi_mom": "0.6", "hicp_yoy": "3.3", "hicp_mom": "0.6"}),
|
||||
("de_gdp", "de_gdp", "2026-Q2", "initial", {"gdp_qoq": "0.2", "gdp_yoy": "0.9"}),
|
||||
("de_jobs", "de_jobs", "2026-08", None, {"ilo_unemployment": "4"}),
|
||||
("fr_cpi", "fr_cpi", "2026-09", "final", {"eu_cpi_yoy": "3.1", "eu_cpi_mom": "-0.3", "hicp_yoy": "3.4", "hicp_mom": "-0.3"}),
|
||||
("fr_cpi", "fr_cpiflash", "2026-09", "preliminary", {"eu_cpi_yoy": "3", "eu_cpi_mom": "-0.3", "hicp_yoy": "3.4", "hicp_mom": "-0.4"}),
|
||||
("fr_gdp", "fr_gdp", "2026-Q2", "final", {"gdp_qoq": "0", "gdp_yoy": None}),
|
||||
("fr_gdp", "fr_initial", "2026-Q2", "initial", {"gdp_qoq": "0.2", "gdp_yoy": None}),
|
||||
("fr_jobs", "fr_jobs", "2026-Q2", None, {"ilo_unemployment": "8.3"}),
|
||||
("ecb_rate", "ecb_hold", None, None, {"ecb_deposit": "2", "ecb_main": "2.15", "ecb_marginal": "2.4"}),
|
||||
("uk_cpi", "ons_columns", "2026-06", None, {"eu_cpi_yoy": "2.6", "eu_cpi_mom": "0.1", "eu_core_cpi_yoy": "2.6"}),
|
||||
("uk_cpi", "ons_core_label", "2026-02", None, {"eu_cpi_yoy": "3", "eu_cpi_mom": "0.4", "eu_core_cpi_yoy": "3.2"}),
|
||||
("uk_cpi", "ons_footnote", "2025-05", None, {"eu_cpi_yoy": "3.4", "eu_cpi_mom": "0.2", "eu_core_cpi_yoy": "3.5"}),
|
||||
("uk_gdp", "ons_gdp_old", "2025-Q1", "initial", {"gdp_qoq": "0.7", "gdp_yoy": "1.3"}),
|
||||
("uk_gdp", "ons_gdp_order", "2025-Q4", "final", {"gdp_qoq": "0.1", "gdp_yoy": None}),
|
||||
("fr_cpi", "fr_stable", "2025-02", "preliminary", {"eu_cpi_yoy": "0.8", "eu_cpi_mom": "0", "hicp_yoy": "0.9", "hicp_mom": "0"}),
|
||||
("fr_cpi", "fr_rebound", "2026-02", "preliminary", {"eu_cpi_yoy": "1", "eu_cpi_mom": "0.7", "hicp_yoy": "1.1", "hicp_mom": "0.8"}),
|
||||
])
|
||||
def test_official_announcement_contract(family, name, period, stage, expected):
|
||||
result = parse_announcement(family, fixture(name + ".html"))
|
||||
assert (result.period, result.stage) == (period, stage)
|
||||
assert {key: v["actual"] for key, v in result.values.items()} == expected
|
||||
for key, actual in expected.items():
|
||||
if actual is None:
|
||||
assert result.values[key]["unavailable_reason"]
|
||||
assert result.at.tzinfo is UTC
|
||||
|
||||
|
||||
def test_monthly_previous_is_previous_month_not_same_month_last_year():
|
||||
result = parse_announcement("uk_cpi", fixture("ons_cpi.html"))
|
||||
assert result.values["eu_cpi_mom"]["previous"] == "0.5"
|
||||
assert result.values["eu_core_cpi_yoy"]["previous"] == "2.6"
|
||||
|
||||
|
||||
@pytest.mark.parametrize("period,expected", [("December 2024 to February 2025", "2025-02"),
|
||||
("December 2025 to February 2026", "2026-02"),
|
||||
("June to August 2026", "2026-08")])
|
||||
def test_ons_unemployment_period_uses_end_of_complete_three_month_range(period, expected):
|
||||
body = f'<html><body><h1>Labour market overview, UK: April 2026</h1><p>Release date: 21 April 2026</p><p>The UK unemployment rate for people aged 16 years and over was estimated at 4.9% in {period}. This is above estimates of a year ago.</p></body></html>'
|
||||
result = parse_announcement("uk_jobs", body)
|
||||
assert result.period == expected and result.values["uk_unemployment"]["actual"] == "4.9"
|
||||
|
||||
|
||||
def test_boe_publication_uses_this_article_not_related_article_timestamp():
|
||||
result = parse_announcement("boe_rate", fixture("boe_july.html"))
|
||||
assert result.at == datetime(2026, 7, 30, 11, tzinfo=UTC)
|
||||
|
||||
|
||||
def test_french_preliminary_and_final_are_distinct_vintages():
|
||||
initial = parse_announcement("fr_cpi", fixture("fr_cpiflash.html"))
|
||||
final = parse_announcement("fr_cpi", fixture("fr_cpi.html"))
|
||||
assert initial.period == final.period
|
||||
assert initial.stage != final.stage and initial.at < final.at
|
||||
assert initial.values["hicp_mom"]["actual"] == "-0.4"
|
||||
assert final.values["hicp_mom"]["actual"] == "-0.3"
|
||||
|
||||
|
||||
@pytest.mark.parametrize("source,suffix,families", [
|
||||
("ecb", "html", {"ecb_rate"}), ("boe", "html", {"boe_rate"}),
|
||||
("ons", "html", {"uk_cpi", "uk_jobs", "uk_gdp"}),
|
||||
("destatis", "html", {"de_cpi", "de_jobs", "de_gdp"}),
|
||||
("eurostat", "json", {"ea_hicp", "ea_gdp", "ea_jobs"}),
|
||||
("insee", "json", {"fr_cpi", "fr_gdp", "fr_jobs"}),
|
||||
])
|
||||
def test_calendar_families_and_stable_identity(source, suffix, families):
|
||||
events = parse_schedule(source, fixture(f"{source}_schedule.{suffix}"))
|
||||
assert {e.family for e in events} == families
|
||||
assert len({e.external_id for e in events}) == len(events)
|
||||
assert all(e.at.tzinfo is UTC for e in events)
|
||||
|
||||
|
||||
def test_summer_time_and_official_placeholder_calendar_times():
|
||||
assert local_at("ecb", date(2026, 9, 10), "14:15") == datetime(2026, 9, 10, 12, 15, tzinfo=UTC)
|
||||
assert local_at("ecb", date(2026, 10, 29), "14:15") == datetime(2026, 10, 29, 13, 15, tzinfo=UTC)
|
||||
german = parse_schedule("destatis", fixture("destatis_schedule.html"))
|
||||
assert next(e for e in german if e.family == "de_cpi").at == datetime(2026, 10, 30, 13, tzinfo=UTC)
|
||||
assert next(e for e in german if e.family == "de_gdp").stage == "initial"
|
||||
euro = parse_schedule("eurostat", fixture("eurostat_schedule.json"))
|
||||
assert euro[0].at.hour == 9
|
||||
|
||||
|
||||
@pytest.mark.parametrize("source", ["ecb", "boe", "eurostat", "ons", "destatis", "insee"])
|
||||
def test_public_feed_contract(source):
|
||||
entries = feed_entries((FIXTURES / f"{source}_feed.xml").read_bytes(), source)
|
||||
assert entries and all(e.at.tzinfo is UTC for e in entries)
|
||||
assert all(len(e.identity) == 64 for e in entries)
|
||||
assert all(official_url(source, e.url) == e.url for e in entries)
|
||||
|
||||
|
||||
def test_source_filters_exclude_wrong_statistical_contracts():
|
||||
assert not relevant_news("eurostat", "Government debt at 88.8% of GDP in euro area", "")
|
||||
assert family_for("ons", "GDP first quarterly estimate, UK: July to September 2026 time series") is None
|
||||
assert family_for("ons", "UK Labour Market: November 2026") == ("uk_jobs", None)
|
||||
assert official_url("ecb", "https://www.ecb.europa.eu//press/key/date/a.en.html") == "https://www.ecb.europa.eu/press/key/date/a.en.html"
|
||||
with pytest.raises(ValueError, match="官方 HTTPS"):
|
||||
official_url("ons", "https://example.com/private")
|
||||
|
||||
|
||||
def test_missing_values_fail_without_zero_fallback():
|
||||
with pytest.raises(ValueError):
|
||||
parse_announcement("ecb_rate", "<html><body><h1>Monetary policy decisions</h1>Data not available</body></html>")
|
||||
with pytest.raises(ValueError):
|
||||
feed_entries(b"<html>Access denied</html>", "boe")
|
||||
|
||||
|
||||
def test_history_capture_preserves_raw_bytes_time_language_and_news_identity(trading):
|
||||
import base64
|
||||
|
||||
from alphapulse.calendar.backfill import Document
|
||||
from alphapulse.crawler.europe_history import capture
|
||||
from alphapulse.crawler.import_history import article_item
|
||||
|
||||
body = fixture("de_cpi.html").encode()
|
||||
url = "https://www.destatis.de/EN/Press/2026/10/PE26_365_611.html"
|
||||
at = datetime(2026, 10, 25, tzinfo=UTC)
|
||||
result = capture(Document("destatis", url, body, at, headers={"content-type": "text/html"}))
|
||||
assert result.fetched_at == at and result.articles[0].published_at < at
|
||||
assert base64.b64decode(result.body) == body
|
||||
assert result.headers == {"content-type": "text/html"}
|
||||
item = article_item("destatis", result.articles[0], result, 42)
|
||||
assert item["extra"]["language"] == "en" # 英文历史公报不能误标成德文实时 RSS。
|
||||
assert item["extra"]["historical_backfill"] is True
|
||||
assert item["published_at"] == parse_announcement("de_cpi", body.decode()).at
|
||||
assert item["external_id"] == hashlib.sha256(url.encode()).hexdigest()
|
||||
|
||||
|
||||
def test_historical_rate_limit_stops_source_and_preserves_prior_documents():
|
||||
import asyncio
|
||||
|
||||
import httpx
|
||||
|
||||
from alphapulse.calendar.backfill import Document
|
||||
from alphapulse.calendar.europe_archives import collect
|
||||
|
||||
index = '<a href="/monetary-policy-summary-and-minutes/2025/january-2025">One</a><a href="/monetary-policy-summary-and-minutes/2025/february-2025">Two</a><a href="/monetary-policy-summary-and-minutes/2025/march-2025">Three</a>'
|
||||
calls, errors = [], []
|
||||
|
||||
async def fetch(source, url):
|
||||
calls.append(url)
|
||||
if len(calls) == 3:
|
||||
response = httpx.Response(429, headers={"Retry-After": "120"}, request=httpx.Request("GET", url))
|
||||
response.raise_for_status()
|
||||
return Document(source, url, index.encode(), datetime.now(UTC))
|
||||
|
||||
docs = asyncio.run(collect("boe", date(2025, 1, 1), date(2025, 12, 31), fetch, set(), errors))
|
||||
assert len(docs) == 1 and len(calls) == 3
|
||||
assert errors[-1]["retry_after"] == "120" and "不完整" in errors[-1]["error"]
|
||||
|
||||
|
||||
def test_ons_release_alias_does_not_download_stored_bulletin_again():
|
||||
import asyncio
|
||||
from alphapulse.calendar.backfill import Document
|
||||
from alphapulse.calendar.europe_archives import collect
|
||||
|
||||
bulletin = "https://www.ons.gov.uk/economy/inflationandpriceindices/bulletins/consumerpriceinflation/september2026"
|
||||
alias = "https://www.ons.gov.uk/releases/consumerpriceinflationukseptember2026"
|
||||
calls, errors, known = [], [], {bulletin}
|
||||
async def fetch(source, url):
|
||||
calls.append(url)
|
||||
if "/releasecalendar?" in url:
|
||||
body = f'<a data-gtm-release-title="Consumer price inflation, UK: September 2026" href="{alias}">Release</a>'
|
||||
else:
|
||||
assert url == alias
|
||||
body = f'<h1>Consumer price inflation, UK: September 2026</h1><a href="{bulletin}">Bulletin</a>'
|
||||
return Document(source, url, body.encode(), datetime.now(UTC))
|
||||
docs = asyncio.run(collect("ons", date(2025, 1, 1), date(2026, 10, 25), fetch, known, errors))
|
||||
assert docs == [] and errors == []
|
||||
assert bulletin not in calls and calls.count(alias) == 1 and alias in known
|
||||
@@ -0,0 +1,185 @@
|
||||
import asyncio
|
||||
import base64
|
||||
import gzip
|
||||
import hashlib
|
||||
import json
|
||||
from datetime import UTC, datetime
|
||||
from types import SimpleNamespace
|
||||
|
||||
import pytest
|
||||
|
||||
|
||||
def capture(articles, source="coindesk"):
|
||||
return {
|
||||
"source": source, "url": "https://www.coindesk.com/api/v1/articles/timeline?size=16",
|
||||
"status": 200, "headers": {"content-type": "application/json"}, "body": "{\"articles\":[]}",
|
||||
"fetched_at": "2026-10-22T04:00:00+00:00", "articles": articles,
|
||||
}
|
||||
|
||||
|
||||
def article(**overrides):
|
||||
return {"guid": "original-guid", "url": "https://www.coindesk.com/markets/2025/01/02/story",
|
||||
"title": "Bitcoin announcement", "summary": "Public summary <script> is text & data",
|
||||
"published_at": "2025-01-02T08:30:00-05:00", "tags": ["Bitcoin"], **overrides}
|
||||
|
||||
|
||||
def importer(module, tmp_path, data, source="coindesk"):
|
||||
path = tmp_path / "captures.jsonl.gz"
|
||||
with gzip.open(path, "wt") as file:
|
||||
file.write(json.dumps(data) + "\n")
|
||||
spider = module.HistoryImportSpider(source, str(path), datetime(2025, 1, 1, tzinfo=UTC))
|
||||
spider.crawler = SimpleNamespace(spider=spider)
|
||||
return spider
|
||||
|
||||
|
||||
def test_archive_import_preserves_rss_identity_time_and_public_summary_provenance(trading):
|
||||
from scrapy.http import Request, XmlResponse
|
||||
|
||||
from alphapulse.crawler.import_history import ArchivedArticle, Capture, article_item
|
||||
from alphapulse.crawler.spiders.rss import CoinDeskSpider
|
||||
|
||||
response = XmlResponse("https://www.coindesk.com/rss", body=b'''<rss><channel><item>
|
||||
<guid>original-guid</guid><title>Bitcoin announcement</title>
|
||||
<link>https://www.coindesk.com/markets/2025/01/02/story</link>
|
||||
<pubDate>Thu, 02 Jan 2025 13:30:00 GMT</pubDate><description>Public summary</description>
|
||||
</item></channel></rss>''', request=Request("https://www.coindesk.com/rss", meta={"raw_response_id": 1}))
|
||||
rss_item, = CoinDeskSpider().parse_feed(response)
|
||||
data = Capture.model_validate(capture([article()]))
|
||||
item = article_item("coindesk", ArchivedArticle.model_validate(article()), data, 42)
|
||||
assert item["external_id"] == rss_item["external_id"]
|
||||
assert item["published_at"] == rss_item["published_at"]
|
||||
assert "<script>" not in item["content_html"] and "<script>" in item["content_html"]
|
||||
assert item["summary"] == item["content_text"] == article()["summary"]
|
||||
assert item["extra"]["historical_backfill"] is True
|
||||
assert item["extra"]["content_scope"] == "public_summary"
|
||||
assert item["extra"]["archive_fetched_at"] == data.fetched_at.isoformat()
|
||||
assert item["raw_response_id"] == 42
|
||||
|
||||
|
||||
def test_archive_import_skips_existing_ids_links_and_out_of_range_articles(trading, monkeypatch, tmp_path):
|
||||
from alphapulse.crawler import import_history
|
||||
|
||||
class Session:
|
||||
async def __aenter__(self):
|
||||
return self
|
||||
async def __aexit__(self, *args):
|
||||
pass
|
||||
async def scalar(self, statement):
|
||||
return 42
|
||||
|
||||
monkeypatch.setattr(import_history, "SessionLocal", Session)
|
||||
data = capture([
|
||||
article(guid="known-id"), article(guid="other-id", url="https://bea.gov/news/2025/known"),
|
||||
article(guid="old", published_at="2024-12-31T10:00:00Z"),
|
||||
article(guid="future", published_at="2099-01-01T00:00:00Z"), article(), article(),
|
||||
])
|
||||
spider = importer(import_history, tmp_path, data)
|
||||
spider.known_ids.add(hashlib.sha256(b"known-id").hexdigest())
|
||||
spider.known_urls.add("https://www.bea.gov/news/2025/known")
|
||||
async def run():
|
||||
return [item async for item in spider.start()]
|
||||
items = asyncio.run(run())
|
||||
assert len(items) == 1 and items[0]["external_id"] == hashlib.sha256(b"original-guid").hexdigest()
|
||||
assert not spider.run.errors
|
||||
|
||||
|
||||
def test_pdf_archive_import_passes_original_bytes_to_raw_storage(trading, monkeypatch, tmp_path):
|
||||
from alphapulse.crawler import import_history
|
||||
|
||||
body = b"%PDF-1.7\n%\xff\x80\xfe\x00\r\n"
|
||||
received = []
|
||||
|
||||
class Session:
|
||||
async def __aenter__(self):
|
||||
return self
|
||||
async def __aexit__(self, *args):
|
||||
pass
|
||||
async def scalar(self, statement):
|
||||
assert hashlib.sha256(body).hexdigest() in statement.compile().params.values()
|
||||
return None
|
||||
async def execute(self, statement):
|
||||
pass
|
||||
async def commit(self):
|
||||
pass
|
||||
|
||||
class RawWriter:
|
||||
def __init__(self, crawler):
|
||||
pass
|
||||
async def process_response(self, request, response):
|
||||
received.append(response.body)
|
||||
assert response.headers[b"Content-Type"] == b"application/pdf"
|
||||
request.meta["raw_response_id"] = 42
|
||||
return response
|
||||
|
||||
monkeypatch.setattr(import_history, "SessionLocal", Session)
|
||||
monkeypatch.setattr(import_history, "RawResponseMiddleware", RawWriter)
|
||||
data = capture([article()], source="bls")
|
||||
data.update(url="https://www.dol.gov/newsroom/economicdata/cpi_01152025.pdf",
|
||||
headers={"content-type": "application/pdf"},
|
||||
body=base64.b64encode(body).decode(), body_encoding="base64")
|
||||
spider = importer(import_history, tmp_path, data, source="bls")
|
||||
|
||||
async def run():
|
||||
return [item async for item in spider.start()]
|
||||
|
||||
item, = asyncio.run(run())
|
||||
assert received == [body]
|
||||
assert item["raw_response_id"] == 42
|
||||
assert item["extra"]["archive_url"] == data["url"]
|
||||
assert not spider.run.errors
|
||||
|
||||
|
||||
@pytest.mark.parametrize("broken", ["different_source", "malformed_capture", "invalid_base64", "unknown_encoding"])
|
||||
def test_invalid_archive_input_fails_visibly_before_writing(trading, monkeypatch, tmp_path, broken):
|
||||
from alphapulse.crawler import import_history
|
||||
|
||||
def unexpected_db_access():
|
||||
pytest.fail("invalid capture must not write to the database")
|
||||
monkeypatch.setattr(import_history, "SessionLocal", unexpected_db_access)
|
||||
data = capture([article()])
|
||||
if broken == "different_source":
|
||||
data["source"] = "fed"
|
||||
elif broken == "malformed_capture":
|
||||
data = {"source": "coindesk"}
|
||||
elif broken == "invalid_base64":
|
||||
data.update(body="%PDF-1.7", body_encoding="base64")
|
||||
else:
|
||||
data["body_encoding"] = "latin-1"
|
||||
spider = importer(import_history, tmp_path, data)
|
||||
async def run():
|
||||
return [item async for item in spider.start()]
|
||||
with pytest.raises(ValueError):
|
||||
asyncio.run(run())
|
||||
assert spider.run.errors and not spider.completed
|
||||
|
||||
|
||||
@pytest.mark.parametrize("source,feed_url,bulletin_url", [
|
||||
("eurostat", "https://ec.europa.eu/eurostat/product?code=2-16102026-ap", "https://ec.europa.eu/eurostat/en/web/products-euro-indicators/w/2-16102026-ap"),
|
||||
("eurostat", "https://ec.europa.eu/eurostat/product?code=2-16102026-ap", "https://ec.europa.eu/eurostat/web/products-euro-indicators/w/2-16102026-ap"),
|
||||
("ons", "https://www.ons.gov.uk/releases/consumerpriceinflationukseptember2026", "https://www.ons.gov.uk/economy/inflationandpriceindices/bulletins/consumerpriceinflation/september2026"),
|
||||
("ons", "https://www.ons.gov.uk/releases/uklabourmarketoctober2026", "https://www.ons.gov.uk/employmentandlabourmarket/peopleinwork/employmentandemployeetypes/bulletins/uklabourmarket/october2026"),
|
||||
("ons", "https://www.ons.gov.uk/releases/gdpquarterlynationalaccountsukapriltojune2026", "https://www.ons.gov.uk/economy/grossdomesticproductgdp/bulletins/quarterlynationalaccounts/apriltojune2026"),
|
||||
("ons", "https://www.ons.gov.uk/releases/gdpfirstquarterlyestimateukapriltojune2026", "https://www.ons.gov.uk/economy/grossdomesticproductgdp/bulletins/gdpfirstquarterlyestimateuk/apriltojune2026"),
|
||||
])
|
||||
def test_import_skips_feed_release_alias_without_losing_other_announcements(trading, monkeypatch, tmp_path, source, feed_url, bulletin_url):
|
||||
from alphapulse.crawler import import_history
|
||||
|
||||
class Session:
|
||||
async def __aenter__(self):
|
||||
return self
|
||||
async def __aexit__(self, *args):
|
||||
pass
|
||||
async def scalar(self, statement):
|
||||
return 42
|
||||
|
||||
monkeypatch.setattr(import_history, "SessionLocal", Session)
|
||||
other_url = bulletin_url.replace("2026", "2025")
|
||||
data = capture([article(guid=bulletin_url, url=bulletin_url), article(guid=other_url, url=other_url)], source=source)
|
||||
data["url"] = bulletin_url
|
||||
spider = importer(import_history, tmp_path, data, source=source)
|
||||
spider.known_urls.add(import_history.identity_url(feed_url))
|
||||
async def run():
|
||||
return [item async for item in spider.start()]
|
||||
items = asyncio.run(run())
|
||||
assert len(items) == 1 and items[0]["url"] == other_url
|
||||
assert items[0]["extra"]["archive_url"] == bulletin_url
|
||||
Generated
+75
@@ -177,8 +177,10 @@ dependencies = [
|
||||
{ name = "fastapi" },
|
||||
{ name = "httpx" },
|
||||
{ name = "openai" },
|
||||
{ name = "pillow" },
|
||||
{ name = "pydantic-settings" },
|
||||
{ name = "pyjwt" },
|
||||
{ name = "pypdf" },
|
||||
{ name = "redis" },
|
||||
{ name = "scrapy" },
|
||||
{ name = "scrapy-redis" },
|
||||
@@ -201,8 +203,10 @@ requires-dist = [
|
||||
{ name = "fastapi", specifier = ">=0.143.0" },
|
||||
{ name = "httpx", specifier = ">=0.28.1" },
|
||||
{ name = "openai", specifier = ">=3.30.0" },
|
||||
{ name = "pillow", specifier = ">=13.0.0" },
|
||||
{ name = "pydantic-settings", specifier = ">=2.15.0" },
|
||||
{ name = "pyjwt", specifier = ">=2.15.1" },
|
||||
{ name = "pypdf", specifier = ">=6.21.2" },
|
||||
{ name = "redis", specifier = ">=8.1.0" },
|
||||
{ name = "scrapy", specifier = ">=2.19.0" },
|
||||
{ name = "scrapy-redis", specifier = ">=0.9.1" },
|
||||
@@ -1609,6 +1613,68 @@ wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/e9/44/2ff782553b581b3d55632eb4f9de1dc792ca99de7e47f69e22af28a9ef2d/parsel-1.12.1-py3-none-any.whl", hash = "sha256:cf74e09857329bddc02c13ae239a9b46f410dc5bd1d05361c8c2643a1a5a7149", size = 15674, upload-time = "2026-09-28T14:15:52.232Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "pillow"
|
||||
version = "13.0.0"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/ce/a4/9cc30690a394a8305e8be4c9036aa16d0dfddadd09079860b582f562496d/pillow-13.0.0.tar.gz", hash = "sha256:cdcd1ba258178f7356d74170c9a81ba4eab6a5d55748bc402a5a2a6fe6be3510", size = 47058631, upload-time = "2026-10-16T22:18:09.718Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/82/e2/9132d38df320e8099e2642d9fa538f18a7dfebf68a875a31725dc2a115aa/pillow-13.0.0-cp313-cp313-ios_13_0_arm64_iphoneos.whl", hash = "sha256:e98b4f91f99b24b1da72e10621ba181f7281922384a7403094debb4199de6c00", size = 4190620, upload-time = "2026-10-16T22:16:02.527Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/cb/be/436dac0996876f65ef1916ffb711c5ef4af2ebc57414b6f16642e07f6b47/pillow-13.0.0-cp313-cp313-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:34fb3db1149c879343861831728c243c432d4a5afc8f1878ca7612ef8de2a033", size = 4290286, upload-time = "2026-10-16T22:16:04.861Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/60/16/7c1007162e4169ea0d5bec47e2e0b2174f56c50cf5b8c02a1dc23e41037e/pillow-13.0.0-cp313-cp313-ios_13_0_x86_64_iphonesimulator.whl", hash = "sha256:2d50500a4a3bc6469adcdb319cf05d688b08ca3bf0f22a05339f3b25b433a599", size = 3723169, upload-time = "2026-10-16T22:16:06.956Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/08/bc/578ab2eaa04705a8978bd9be0fe15c3d43a8fc95097c4f7e39540e79e4fa/pillow-13.0.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:ef5fe6b7db3f501c56000ba8fe7c7e1a35ca1d45824fbeb95a67daa85cff4dbe", size = 5568469, upload-time = "2026-10-16T22:16:08.664Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/98/c8/ccede3dcc4f274b80fb49199eed1ef34ba05566c8b71976b9d1f111da2e3/pillow-13.0.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f11a3c1358bb3c68012a7b1f41b223c3db9f7bfde90b481df028cfe1c3363313", size = 4852187, upload-time = "2026-10-16T22:16:10.693Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/fb/3c/cd0770e96d20bfd990db024bcbd43897ff3e88da1f4782cf90ea231b1d4f/pillow-13.0.0-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:19b66ca0a4d25cc0200b381ce824c7ea090db61427315e73cfb05dbf1b35c369", size = 6515908, upload-time = "2026-10-16T22:16:12.896Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/ef/fe/f5cdaa2d1c4086e757430f368c271a58ee29cfe7378e7ae7b9d964015c25/pillow-13.0.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5f56499c1a74d2b862beb0c33b8016f99d095858455df9d21583bbbc1c15b582", size = 7142544, upload-time = "2026-10-16T22:16:14.844Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/fb/b5/a54f6d44adbcd23737c8c12953f42be107e4cca64e247c0ca3a5b563061c/pillow-13.0.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a2a14cd73d5e6c927f644b0110ee81f59c4ef506259ec9183904747f2caacc81", size = 6613097, upload-time = "2026-10-16T22:16:16.893Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/e6/b4/9e6c1207c21b2e91db0d15c16d30f3701ce5add1bd4da0e787761e66cb6e/pillow-13.0.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:08b826a9bf1265c76de04a42061d61ea6b109418b7826f28ff1ecdfaa26c5502", size = 7224846, upload-time = "2026-10-16T22:16:19.195Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/78/9f/d3c3cb0518f3dd1eee0ef501535f53d15597a53c5c4118d178086143397a/pillow-13.0.0-cp313-cp313-win32.whl", hash = "sha256:12b0fa15879fe5a9d9eebe66e4e2d74128a773b1a4448010c9c714f45e04b9d8", size = 6516013, upload-time = "2026-10-16T22:16:21.389Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/d7/ed/1b16fb66a37e1b9e41370b93b2c614c7da761a5b2a41dc333f7af4639962/pillow-13.0.0-cp313-cp313-win_amd64.whl", hash = "sha256:9dda0788a9932776a75d8bcc020076edc308ce2508b51f6739a45e3158b3fc42", size = 7284777, upload-time = "2026-10-16T22:16:23.393Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/87/7d/8d02eba9f7ecc87f8e90f731e032cc4773802f2a843763afd0c66a535ff4/pillow-13.0.0-cp313-cp313-win_arm64.whl", hash = "sha256:40a266371ece581e5de13b6635ef78d7487824af80561b6ca27694a88c19bc0f", size = 2698826, upload-time = "2026-10-16T22:16:25.382Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/8e/45/fbad9c7f5e2f1745c373a434d46072bc84eddfefaa28b852425ac957fda6/pillow-13.0.0-cp314-cp314-ios_13_0_arm64_iphoneos.whl", hash = "sha256:44629d4498c9cb6b2051806155f22141df0d8a929c56134b166655232dfb2f8c", size = 4190721, upload-time = "2026-10-16T22:16:27.524Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/a2/bf/2074902a259a90692c5dbf132885d21671644cbbd3f690047516243a55db/pillow-13.0.0-cp314-cp314-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:bf97ba1b5542050e9b0c74e632323b6d8136cc99d64e193abebee22fe6013c76", size = 4290236, upload-time = "2026-10-16T22:16:29.562Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/ff/a5/3d1bb93b8ea38d15d21356c1b8e9f50971ac592aaa248f7fb71739094c0e/pillow-13.0.0-cp314-cp314-ios_13_0_x86_64_iphonesimulator.whl", hash = "sha256:aa694c49787040943570d61c9b8fc01271bd2a2cfdd55f0d896f8aecdce1a981", size = 3723093, upload-time = "2026-10-16T22:16:31.249Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/84/a1/be060135d85187b25fa8b2573786c0e45c62ae27527fff5257675eb97f4a/pillow-13.0.0-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:49c12af515073e9bf511e4ef736743bf70d531a643668722279314b937742ba4", size = 5572253, upload-time = "2026-10-16T22:16:33.103Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/b5/f4/0bf6f1ac9ba7ee2ffe9914aeb410a1035a0c1a3c42f122388d7fc950bc4b/pillow-13.0.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:d9b0a2bee3f3e03e9f29057aedb807dbf1e1d96ee1b9d0f422d9db6c8583271d", size = 4852269, upload-time = "2026-10-16T22:16:35.102Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/83/16/b603274617b3e6728da3a0133d4fba1ea8d7fbe0c4ea5fef9cbffa398b8b/pillow-13.0.0-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5933fcea5a5ba64c686f55c886a115cbfd92f2900460784a1e79909fdbafd7b6", size = 6516058, upload-time = "2026-10-16T22:16:37.228Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/1d/f2/1371707ce438ba9a43f9d24089828494ec6f9396e28cd7903aa704dd6306/pillow-13.0.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e91c2b1cbeae768c98752e67e717e283d68dae45717b41f2d91eaee648e37b7d", size = 7142574, upload-time = "2026-10-16T22:16:39.172Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/b9/a9/62cf68587f910bc87c5951bcb6e9430c7643a65076adf5f18b4bf350e2bd/pillow-13.0.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:7f6299e494e46253d40c34653cac369412f44ca53b5f85d848d3f95b1ed0546c", size = 6614295, upload-time = "2026-10-16T22:16:41.117Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/6c/c9/9e9b48178649730299be0bafbf5f810a5b6977538f5a92d47e4ba5f5d608/pillow-13.0.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:f9bd7d260d986f3553518c5d723544346fa48031f8aef3265d786aeb59845bc0", size = 7224841, upload-time = "2026-10-16T22:16:43.118Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/8f/48/c44e91384b1b6c072a714a63d00608acc16a6a968735e478e4be4384e5ac/pillow-13.0.0-cp314-cp314-win32.whl", hash = "sha256:2e31c4e68cffd7b1f116127626813b82fcba19edf6b940a7b0c266d6484d0055", size = 6508694, upload-time = "2026-10-16T22:16:45.883Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/50/e2/7ad17747517e4c813dca78257d6bb593466f8231baf1384bc98d92745edb/pillow-13.0.0-cp314-cp314-win_amd64.whl", hash = "sha256:f7cbb7a64e7ec664775195e4f81923bc8a93d9451b963f844e59118f63147a7a", size = 7281830, upload-time = "2026-10-16T22:16:47.725Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/41/9f/e5b51f2ce8ef4563215334035403ce61a244f93a2e65c24a940131618f87/pillow-13.0.0-cp314-cp314-win_arm64.whl", hash = "sha256:a6aaa7871aebca081eb5c45f83e845bbd9712ae99fa9286dbfdcee835e63f4b4", size = 2695468, upload-time = "2026-10-16T22:16:49.515Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/97/73/a53502f731f6c84805a4ce87a8881e86d07a65aee64728b900d112dc703e/pillow-13.0.0-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:7b999816b5850a35ada08443e6e03945f1f6488144a83afe2d37b240a552aafa", size = 5578196, upload-time = "2026-10-16T22:16:51.291Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/21/50/7e949959a56b5559c78ef172b70fc6025706acb289f3f648a15329e4fa6f/pillow-13.0.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:67871a13cf47275201553b536c025da777f997fa562a19eb798af4ad4b97c18f", size = 4857276, upload-time = "2026-10-16T22:16:53.399Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/c9/52/43ded0ac08e77e39d17bd6d894162572201b5e8fdc4a022b14c55a1960a4/pillow-13.0.0-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e8ca8f69b7c77fa96dad99f8638c1fc4f1c0bed4acaa1baf7a3c31bdb80a0ab1", size = 6607008, upload-time = "2026-10-16T22:16:55.525Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/0d/2e/4a57ed216d5bf877387cba4d44c02aa87abe51ad2e06404aa6b597c4da39/pillow-13.0.0-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6bce6a29c3898191f4c9998e4d4e8f69790caeabde46e54da4bc235ce5bde683", size = 7224281, upload-time = "2026-10-16T22:16:57.738Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/5c/3d/2929b248e135752d63aaeabf53f6de797e905b7b6263f9c1e2adade20aba/pillow-13.0.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:816752a5ef76a80484c8c441c85593b7ea9304f6231fc5776ad1fbff7e773058", size = 6695600, upload-time = "2026-10-16T22:16:59.842Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/bc/33/fb0da992cf084ed1ee6ee05e96b6191e35c351eb707ca2df874feb24ce47/pillow-13.0.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:5bdb38ba220b61b4ec31dd1046dea6b016d3c6850a23f43ed8b58332b2fc668e", size = 7300589, upload-time = "2026-10-16T22:17:01.686Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/bb/af/c30dd9ef6a3dce84ecb1b2393cac629047a32e66279056c6cb46c3ffd65c/pillow-13.0.0-cp314-cp314t-win32.whl", hash = "sha256:06903aac074d00c988e77a1fc435286dc498506d4ca8d6f69df9babddf4ecc15", size = 6517204, upload-time = "2026-10-16T22:17:03.722Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/85/d5/ef3a8ae7609c8ab26570abf18194882534b480d245a9148b895a2262c004/pillow-13.0.0-cp314-cp314t-win_amd64.whl", hash = "sha256:9a635068d9793c7f0d929f39f18b58f1bd86c236e8e7b64167b86af9232ebca0", size = 7286695, upload-time = "2026-10-16T22:17:05.543Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/84/3c/0861db0c69a03689ebe3e7599d35668a414deb5aaafd8255215e4e62e3d3/pillow-13.0.0-cp314-cp314t-win_arm64.whl", hash = "sha256:0d1a9cf7bc6917538b20f8d06b9ab2147e542f68849e96fc58eb66bdf6acc692", size = 2698098, upload-time = "2026-10-16T22:17:07.674Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/6e/eb/e86a41962a3a31ad495a3d6a912d9002b01bba4a6fa71c28703abdca7f69/pillow-13.0.0-cp315-cp315-ios_13_0_arm64_iphoneos.whl", hash = "sha256:7d5e097eabd5d4915c27ac9f6e9325bb1e01a7c94d7348b5c4451d3fc30e8521", size = 4191213, upload-time = "2026-10-16T22:17:09.449Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/dd/04/7e7445e706afec84ef06dc25b2c77f9cecff242c23730c62928ad1089d4a/pillow-13.0.0-cp315-cp315-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:51ebb529fc5e8abdd55302f6c3f8943037348ec2384329a3e55677f69ae2fdfc", size = 4290650, upload-time = "2026-10-16T22:17:11.196Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/46/85/d534089068ac40c0f61f650389a296c812eab745a8a733f81feec39ae955/pillow-13.0.0-cp315-cp315-ios_13_0_x86_64_iphonesimulator.whl", hash = "sha256:c87a04e7f152ee4db5dbe15f0bfa3fe628a1aeedbe66b81c43b87f52c813f9ac", size = 3723078, upload-time = "2026-10-16T22:17:12.772Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/ce/2b/00b5c3b401df538b5dbe311d3899730fae5ba1e21cb8b80a128887ac6747/pillow-13.0.0-cp315-cp315-macosx_10_15_x86_64.whl", hash = "sha256:20722cd5375533ad754053363a80b8fb30c79d37930a6f7228030e237ce3bd5d", size = 5572292, upload-time = "2026-10-16T22:17:14.539Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/72/f5/a6b0610f946e9b54ae888ba7ad29d6e2f8d9b11f69e212d70416b7186c09/pillow-13.0.0-cp315-cp315-macosx_11_0_arm64.whl", hash = "sha256:04a63720f79e22fd54d897c233a68314c50ca0603360f54ce2bd5db8f0f43782", size = 4852222, upload-time = "2026-10-16T22:17:16.521Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/1e/d0/c0ff25bb0427ec70f32aac995453321fc3c4494a46c7292ff02d9d260b04/pillow-13.0.0-cp315-cp315-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4f8db54177035a2b5f717f94475b74907e12a96dc74f6d487f3966b0a4694071", size = 6527349, upload-time = "2026-10-16T22:17:18.534Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/85/11/e46fa0bcc0fc117f1eacc206b3d51f04d583fab328b4b740672d0438d83f/pillow-13.0.0-cp315-cp315-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8f36aa77f74b14a2103622b196402c71330e4e7cf4122ee45c854e9a01e0eecf", size = 7152873, upload-time = "2026-10-16T22:17:20.415Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/7c/53/2bdeca705f3a58679fa9201233193c86a30238340ca29b3a152c3fcc719b/pillow-13.0.0-cp315-cp315-musllinux_1_2_aarch64.whl", hash = "sha256:149a1c323ba366f90b48e6f1a6db6582eb50512df374588de56fc909abc0f0f3", size = 6626871, upload-time = "2026-10-16T22:17:22.361Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/14/de/3829030f209722ade3753bb456b805a0e7f885cf885b483407365c82e9ca/pillow-13.0.0-cp315-cp315-musllinux_1_2_x86_64.whl", hash = "sha256:e892354a424b1e82a78ba16785822bdd40de06f19446a3d4a28047df1a4f8932", size = 7236439, upload-time = "2026-10-16T22:17:24.352Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/44/b1/67fc37388382bc036a74f04da5bb6fcbf90ec3ac1f45893e06176c373fd3/pillow-13.0.0-cp315-cp315-win32.whl", hash = "sha256:8e459b613cf31f8980f584387b4fe47bf08e076e288d61aa8eba1f7fd4ddbb81", size = 6508688, upload-time = "2026-10-16T22:17:26.314Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/44/05/fdb6a79aee10861165526b41b7b440e36ee1ff58613b2fbefe3acbf06d4f/pillow-13.0.0-cp315-cp315-win_amd64.whl", hash = "sha256:d4737f50d23ddd11d6685faacbb9252887dde0bc7997127757247983d74399d6", size = 7281107, upload-time = "2026-10-16T22:17:28.198Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/e6/9c/6c6f7dc2a566467baf121394e83de25ac287cffe34cc030726beb4be0224/pillow-13.0.0-cp315-cp315-win_arm64.whl", hash = "sha256:2310e2adfc13c6d457d7d0f2ffdd5c56a74a317650cf765887df8d515a647ac0", size = 2695513, upload-time = "2026-10-16T22:17:30.013Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/23/16/e9120defdb8bff693b582d035312acc6f530cdc2bc5238a87f410efccd82/pillow-13.0.0-cp315-cp315t-macosx_10_15_x86_64.whl", hash = "sha256:21c32061a5512dc13f87cc7303e120e4d77c2f70df89a35af0e3ce246e5ac57f", size = 5578129, upload-time = "2026-10-16T22:17:31.642Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/47/22/76faf2bb2448f48a84cf894c1e2bb1090d7d2b1aa521ece131cb2f05d631/pillow-13.0.0-cp315-cp315t-macosx_11_0_arm64.whl", hash = "sha256:1c774b9c0ba0d0b356f71530677b39028878a2cae5a93e0a13779cfd17120f88", size = 4857428, upload-time = "2026-10-16T22:17:33.43Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/b3/64/0861ea4e03c50b14af9ed9dd8b9f388ab42f445c623a9fcbab19aef7aa55/pillow-13.0.0-cp315-cp315t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:20822140c9a2ba9c5e42df342b0a892ab2e102fc0e3db967a133bb9ce3f898bb", size = 6612582, upload-time = "2026-10-16T22:17:35.415Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/5c/20/cd1e9b3f60a9f3d5ebe46da36955c26004092a501f7f2c42f9fcc26611bc/pillow-13.0.0-cp315-cp315t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ffea6b2986a797c84b6d1d27d4f43e0b83c73fc16281a930891cd237cf0d08fe", size = 7230176, upload-time = "2026-10-16T22:17:37.362Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/b6/ef/ffb0a2fc85690714fb7ac662956949645d57f15bf4426f520da361e7b6e3/pillow-13.0.0-cp315-cp315t-musllinux_1_2_aarch64.whl", hash = "sha256:05cd2cd39055d0b9650060e4513ef4a9a0aea870083950bd046a0d6490f93a22", size = 6703640, upload-time = "2026-10-16T22:17:39.313Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/e0/c2/6402ee3ccb3363aeed8fdb3f9fe56703ac5377a539f0b81b53999d7e121f/pillow-13.0.0-cp315-cp315t-musllinux_1_2_x86_64.whl", hash = "sha256:c6fd031333dedcad7ce3e03d244093f43504f209e86925ebdb2b868fa4037630", size = 7309231, upload-time = "2026-10-16T22:17:41.021Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/fc/96/d6b82e8b8c06ad143b66b12e0b31051e4bf489b4fabca1f390a14fe1ebde/pillow-13.0.0-cp315-cp315t-win32.whl", hash = "sha256:c50c80e3591e5cf9a8dfa6007d4f10732f02e32263850999286e56ccd650cfb2", size = 6517200, upload-time = "2026-10-16T22:17:42.886Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/60/d4/0062e6005e9b270b165015aafd343364ac378ec5a685431ea42baad33357/pillow-13.0.0-cp315-cp315t-win_amd64.whl", hash = "sha256:adb3c2124c68e480f4632d06cb7caa3b48a51678475f483b4edb1c6dee29ea43", size = 7287488, upload-time = "2026-10-16T22:17:45.56Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/e4/81/b8eb349746be7bce47dd95337c6634e84910af91b59aaa9159c034c614fa/pillow-13.0.0-cp315-cp315t-win_arm64.whl", hash = "sha256:4a25756244bdcce3b50580baadf320fa48297f0eeb8e114ba64139a40d4d0fc8", size = 2698073, upload-time = "2026-10-16T22:17:47.556Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "platformdirs"
|
||||
version = "4.13.0"
|
||||
@@ -1894,6 +1960,15 @@ wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/51/ad/2cf6d3fa2fae5c79e1ed9960c0d42badd0f94d81dd12b50604cdc839e648/pyopenssl-26.4.0-py3-none-any.whl", hash = "sha256:f0eb0cb2d581d3ad2b9c489468485e7f2ab6727d08401bcf9d824c3caddf3c1c", size = 56026, upload-time = "2026-08-01T19:50:48.94Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "pypdf"
|
||||
version = "6.21.2"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/06/28/081f1cbcca7042441dafc8de00f48ba60853f89e5bff92c5f26477346d81/pypdf-6.21.2.tar.gz", hash = "sha256:0a3e1c5c886a1be03646c16a04827cc166c2a0575c971b26a4bf89686551c2d4", size = 7144571, upload-time = "2026-10-21T16:44:55.272Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/1b/4d/c9d2d67f204eff463237a1a8f5e25a6923b7b1043982b91fcaf104c8ef60/pypdf-6.21.2-py3-none-any.whl", hash = "sha256:1d44d1a3a200f25062adff0085b02040e4646431ac2ccac22e42679e91466084", size = 407766, upload-time = "2026-10-21T16:44:53.626Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "pypydispatcher"
|
||||
version = "2.1.2"
|
||||
|
||||
Reference in new issue
Block a user