Track your packages in Home Assistant. This is a suite of custom integrations for 21 parcel carriers across Europe — PostNL, DHL, DPD, GLS, PostNord, Hermes, Swiss Post, Correos, Packeta, Österreichische Post and more — plus an aggregator that merges them into one set of sensors. Every integration speaks the same parcel contract, so your automations and dashboards work the same no matter who delivers.
Full documentation: https://ha-parcel-integrations.github.io/
All repositories: Home Assistant Parcel / Package Integrations · GitHub
Most carriers need nothing but a tracking number — no account, no API key, no developer portal.
Supported carriers
| Carrier | Country / region | What you need | |
|---|---|---|---|
| PostNL | Netherlands | Account — parcels and announced MyMail letters, incoming & outgoing | |
| DHL eCommerce | Netherlands | Account — incoming & outgoing | |
| DPD | Netherlands | myDPD account — incoming & outgoing | |
| GLS | Netherlands | Tracking number + postal code | |
| Trunkrs | Netherlands | Trunkrs number + postal code | |
| Dragonfly Shipping | Netherlands | Track & Trace code only | |
| Dynalogic | Netherlands — also sold as MediaMarkt, Samsung, Nespresso, Menken | Order number + postal code | |
| Vinted Go (formerly Homerr) | Benelux & France | Passwordless e-mail login — incoming & outgoing | |
| Hermes | Germany | Tracking number | |
| Österreichische Post | Austria | Tracking number | |
| Swiss Post | Switzerland | Tracking number | |
| Planzer | Switzerland & Liechtenstein — the carrier behind IKEA home delivery | Shipment number or IKEA order number | |
| Correos | Spain | Tracking number | |
| PostNord | Nordics | Tracking number | |
| Budbee | Nordics & Benelux — home delivery and Budbee Box lockers | Tracking or order number, no e-mail address needed | |
| Helthjem | Norway | Tracking number | |
| Packeta (Zásilkovna) | Central Europe — pickup points & lockers | “Z” tracking number | |
| Sameday | South-East Europe — easybox lockers | AWB number | |
| Cainiao | Cross-border | Tracking number — AliExpress, Temu, Shein and similar |
The carriers page has the same list with versions, what each one exposes, and which ones are still marked early release (they work, but their status vocabulary hasn’t been confirmed against enough real shipments yet).
Parcel Aggregator — all carriers, one set of sensors
Running more than one of the above? The optional Parcel Aggregator discovers them automatically and re-emits everything merged:
sensor.parcel_aggregator_incoming_parcels/_outgoing_parcels/_delivered_parcels/_awaiting_pickupsensor.parcel_aggregator_next_delivery— the earliest expected delivery across every carriercalendar.parcel_aggregator_deliveries— every expected delivery in one agenda- one unified event stream
Nothing to configure, no credentials. A carrier you install next month is picked up without a reload.
One automation, every carrier
triggers:
- trigger: event
event_type: parcel_aggregator_parcel_status_changed
event_data:
new_status: out_for_delivery
actions:
- action: notify.mobile_app
data:
title: "📦 On its way"
message: >-
{{ trigger.event.data.carrier }} is delivering
{{ trigger.event.data.sender or 'your parcel' }} today.
Without the aggregator the same recipe works per carrier — swap parcel_aggregator_ for postnl_, dhl_nl_, gls_, … The parcel data inside is identical either way, which is the whole point of the parcel contract: eight status values, one parcel shape, four events.
More paste-as-is examples: automations · dashboard cards
Missing your carrier, or your country?
That is the most useful thing you can tell me. Open a carrier request — writing the code is rarely the blocker, getting real tracking data to confirm the status vocabulary is. If a listed carrier already works in your country but isn’t enabled for it yet, say so too; that is usually a small change plus a tester.
Bugs and unknown statuses belong in the issue tracker of the integration itself — every carrier logs a warning with a ready-made report link when it meets a status it doesn’t know.




