Skip to content

Repository files navigation

InPost Parcel Tracker

Release Downloads HACS License

💬 Questions or feedback? Join the discussion on the Home Assistant community.

ℹ️ New carrier — the detailed status list is still growing

You sign in, your parcels appear as sensors and events, and a locker parcel shows as at_pickup_point. The auth flow, payload shape and happy path are confirmed against a real account; InPost's detailed status string has ~60 values and only one (avizo) has actually been seen on a real parcel so far. An unrecognised one still lands in a sensible bucket rather than breaking — see How you can help if you spot one.

A custom Home Assistant integration that tracks your InPost parcels. Choose either your InPost account in Poland or Italy (sign in on InPost's own page, parcels imported automatically) or a public tracking-number hub for Poland, Italy, Portugal, the United Kingdom or Spain.

What makes InPost worth its own integration is the locker: a parcel waiting for you reports at_pickup_point, and its Paczkomat's name comes along with it — so "notify me when a parcel is ready to collect" is a one-line automation.

Part of the ha-parcel-integrations family: it publishes the same canonical parcel format, statuses and events as the other carrier integrations, so it plugs straight into the Parcel Aggregator and cross-carrier automations.

Contents

Features

  • Signs in on InPost's own sign-in page — phone number plus an SMS code, just like the app — and then reads your whole parcel inbox automatically. Nothing to type per parcel.
  • Public tracking-number hubs for PL, IT, PT, GB and ES; add codes through Configure or inpost.track_parcel.
  • Per-parcel sensor with the canonical status (in_transit / out_for_delivery / at_pickup_point / delivered / …), InPost's own status text, and — for a parcel waiting in a locker — the Paczkomat name.
  • Summary sensors: incoming parcels, parcels awaiting pickup and recently delivered parcels.
  • Events + device triggers for no-code automations (parcel registered, status changed, delivered).
  • Opt-in per-parcel status history.
  • Manual refresh button and a diagnostic last-update sensor.

Requirements

  • An InPost account in Poland or Italy (the InPost Mobile app), reachable by SMS on its phone number — for the account path only
  • A browser to sign in with once; it does not have to run on the Home Assistant machine

Installation

HACS (recommended)

  1. In HACS, choose the three-dot menu → Custom repositories.
  2. Add https://github.com/ha-parcel-integrations/ha-inpost as an Integration.
  3. Install InPost and restart Home Assistant.

Manual

Copy custom_components/inpost into your config/custom_components/ folder and restart Home Assistant.

Configuration

Add the integration via Settings → Devices & Services → Add Integration → InPost, then choose one of these paths:

  • Account (auto-import): choose the country your account is registered in (Poland or Italy), then sign in on InPost's own page and paste back the address it lands on.
  • Tracking codes: select the delivery market (PL, IT, PT, GB or ES), then add tracking codes through Configure or the services below. Create another hub for a different market when needed.

For the account path:

  1. Choose the country your InPost account is registered in.
  2. The next form shows a sign-in link. Open it in any browser.
  3. Sign in with the phone number registered with your InPost account and the SMS code InPost texts you.
  4. The page then stops loading on an address starting with https://account.inpost-group.com/callback?code=. That is expected. Copy the whole address from the address bar and paste it into the form.

That is it — your parcels appear on the next refresh. InPost's sign-in page needs a captcha, which is why the sign-in happens in your browser rather than inside Home Assistant. If the session ever expires, Home Assistant asks you to sign in again the same way; nothing else changes.

You can add more than one account (each is a separate phone number), also one per country. For parcels in Portugal, the United Kingdom or Spain, use a tracking-code hub.

Italian accounts are new. Signing in and reading the parcel list are confirmed with a real Italian account, but no Italian parcel has been seen yet, so the parcel details are not confirmed yet. If the log says an Italian parcel "differs from the shape we modelled", please share a diagnostics file. Italian parcels show their status, sender, pickup point and history; weight and dimensions follow once a real parcel shows their units.

Already set up with an SMS code before this version? Nothing changes for you: your setup keeps working as it is. The next time InPost asks you to sign in again, you use the new sign-in page, and your sensors and automations stay as they are.

The public tracking endpoint deliberately does not expose sender/receiver details, locker or pickup-point detail, or an ETA. Its status vocabulary is still being observed, so new public-tracking statuses safely report as unknown until confirmed.

Services

Service Fields Description
inpost.track_parcel tracking_code, country (default PL) Add a code to that public-tracking hub.
inpost.untrack_parcel tracking_code, country (default PL) Remove a code from that public-tracking hub.

Options

Open Configure on the integration entry:

Section Option Default Description
Delivered parcels Filter by / amount last 7 days How long delivered parcels stay visible on the delivered sensor.
Parcel history Include status history off Adds a history attribute per parcel with each status update.

Polling adapts automatically to parcel state: active delivery is checked more often, quieter states less often, with no regular checks overnight except the daily anchors. Public tracking hubs suspend polling when no active parcels remain and resume immediately after a tracking code is added.

Removal

Standard HA removal applies: Settings → Devices & Services → InPost → ⋮ → Delete.

Sensors

Entity IDs include the account's phone number, so multiple accounts stay distinct.

Entity Description
sensor.inpost_<phone>_incoming_parcels Number of active parcels, full list under the parcels attribute
sensor.inpost_<phone>_parcel_<number> One per parcel; state is the canonical status, attributes carry the full normalised parcel
sensor.inpost_<phone>_next_delivery Earliest expected delivery moment across all active parcels
sensor.inpost_<phone>_awaiting_pickup Number of parcels currently waiting to be collected (at_pickup_point), full list under the parcels attribute — on a tracking hub, the Paczkomat name is not part of that attribute, only the status
sensor.inpost_<phone>_delivered_parcels Recently collected parcels (see the retention option)
sensor.inpost_<phone>_last_successful_update Diagnostic: when InPost was last polled successfully

A collected parcel moves from its per-parcel sensor to the delivered sensor automatically.

A Deliveries calendar entity and a Refresh button entity are also created per account; the button forces an immediate poll without waiting for the next scheduled interval.

Note on the deliveries calendar and "next delivery" sensor: InPost does not publish a delivery time window, so these stay empty. They are kept for consistency with the other integrations and will light up if InPost ever exposes an ETA.

Parcel status reference

The status field is the carrier-agnostic enum shared by the whole integration family:

Status Meaning
registered The sender announced the parcel; not in the network yet
in_transit Moving through the network, including customs
out_for_delivery With the courier, or on its way to your locker
at_pickup_point Waiting for you in a Paczkomat or point
delivered Collected
returning Going back to the sender
problem InPost reports an exception (failed delivery, expired pickup, …)
unknown A status we have not mapped yet

InPost's own detailed status string is always available as raw_status. When a parcel is waiting for you, the pickup_point attribute holds the Paczkomat name.

Events

The integration fires these on the event bus (also available as device triggers on the InPost device):

Event When
inpost_parcel_registered A new parcel appears in your inbox
inpost_parcel_status_changed A parcel's canonical status changes (old_status / new_status in the payload), except the final hop to delivered
inpost_parcel_delivered A parcel is collected

Every payload is the full normalised parcel plus the hub's device_id. Events are suppressed on the first refresh after start-up.

Examples

Ready-to-paste automations live in examples/ — including notifying a phone when a parcel is ready to collect.

Community Lovelace cards

Third-party cards that work with this integration's sensors:

Debugging

logger:
  logs:
    custom_components.inpost: debug

How you can help

InPost describes a parcel's state with a detailed status string — ready_to_pickup, out_for_delivery, collected_by_customer, and dozens more. This release maps the documented set, but the list is not guaranteed complete.

An unrecognised status still lands the parcel in a sensible bucket (via InPost's coarse status group) rather than breaking, and writes one line to your log:

Unrecognised InPost status — help us map it. Open an issue and paste this line: …
  status=some_new_status → reported as 'unknown'

Opening that issue with the logged line is all it takes. Equally useful: a status that reads wrong rather than unknown — say a parcel marked delivered while it is still in the locker.

Troubleshooting

  • A parcel shows unknown — its status is one we do not map yet; see How you can help.
  • Home Assistant asks me to sign in again — InPost sessions expire; open the new sign-in link, sign in and paste the address back, and everything resumes. This is normal, not a fault.
  • The address bar never shows …/callback?code= — some browsers move on from that page straight away. Open the browser's developer tools (F12) on the Network tab with Preserve log on, sign in again with the same link, and copy the URL of the callback request.
  • "That sign-in was for an InPost account in a different country" — your browser was probably still signed in to another InPost account and skipped the sign-in. Open the link in a private window and sign in with the right account.
  • "That sign-in was for a different InPost account" during a reauth — sign in with the phone number this entry was set up with, or remove the entry and add the other account separately.

Related integrations

This integration is part of ha-parcel-integrations — a family of parcel-carrier integrations that all publish the same canonical parcel format, statuses and events.

Disclaimer

This is an independent, community-built project. It is not affiliated with, endorsed by, sponsored by, or supported by InPost, Home Assistant, or any other third party referenced in this project. Please don't contact InPost for support with this integration.

All third-party trademarks, trade names, product names, logos, and other brand assets are the property of their respective owners. References to them are solely to identify the relevant carrier or service and do not imply affiliation, sponsorship, or endorsement. Nothing in this project grants or implies any licence or right to use third-party brand assets.

This integration may rely on public, unofficial, or undocumented carrier interfaces, accessed with your own account or API key where required. These may change or be withdrawn without notice and may be subject to InPost's terms. Data is sent only to InPost's own services or those of its group; this project operates no servers of its own. You are responsible for ensuring that your use complies with applicable law and those terms. Use is at your own risk; see the licence for warranty limitations.

This integration talks to the same private mobile API the InPost app uses.

Contributing

Pull requests and issues are welcome. Please open an issue before submitting a large change.

License

MIT

Releases

Sponsor this project

Used by

Contributors

Languages