---
title: Notifications
description: How the bell-icon badge, the Notifications panel, and the
  Notifications page work, what events trigger an unread notification, and how
  to clear or block them.
subtitle: How the app tells you something needs your attention.
sidebar:
  order: 88
  section: Your account
canonical_html_url: https://eb.app/learn/notifications/
---

# Notifications

Notifications are how the app tells you something has changed that you didn't do yourself. Most are about budgets you share with other people: an invite arrived, your access changed, someone left a budget you own. The other regular notification is an in-app prompt when a new version of the app has been released.

You read notifications inside the app. There are no push notifications on your phone's home screen and no notification emails; the bell icon at the top of every page is where new things land.

## Where you see new notifications

The **bell icon** sits in the top-right corner of every page after you sign in. When something new arrives, a small number appears on the bell, the bell does a quick ring animation, and the count goes up. The number tops out at "99+" if you have a lot of unread notifications at once.

<!-- SCREENSHOT: App header on a dashboard page. The bell icon in the top-right has a small badge showing "3" in red. The hamburger menu sits next to the bell. The rest of the header shows the page title and the budget chip. -->

Tapping the bell opens the **Notifications** panel directly underneath it. The panel splits the list into two sections: **Unread (N)** at the top, and **Earlier** below for everything you've already read. Each row shows an icon for the type of notification, a short title, a one-line description, and how long ago it arrived ("3 minutes ago", "yesterday").

<!-- SCREENSHOT: Notifications panel open from the bell icon. Header reads "Notifications". One section labeled "Unread (2)" with a budget invite row and an access-changed row. Below, a section labeled "Earlier" with two dimmed rows. A "Mark all read" link sits above the list. -->

The Home dashboard also has a **Notifications** card with the same list. The card's empty state reads "All caught up!" and tapping any row, or the card header, takes you to the full Notifications page.

## Opening the Notifications page

The panel that drops down from the bell is good for a quick scan. The full **Notifications** page gives you the same list with more room and an unread counter in the header. To open it:

- From the bell panel, tap the expand control in its header.
- From any page, open the hamburger menu and tap **Notifications**.
- From the Home dashboard, tap the **Notifications** card.

<!-- SCREENSHOT: Full Notifications page. Header reads "Notifications". A subhead shows "5 unread" on the left and a "Mark all read" link on the right. Below, a sticky "Unread (5)" divider, then a list of notification rows, then an "Earlier" divider with read rows. -->

The page shows up to the 100 most recent notifications. Older notifications drop off automatically; see [Behind the scenes](#behind-the-scenes).

## What you get notified about

The app sends a notification for these events:

- **Someone invited you to share their budget.** The row shows who invited you, which budget, and what permission level they're offering: view, edit, or owner.
- **Your access to a shared budget changed.** Someone with owner permission on a budget you collaborate on raised or lowered your access (for example, edit changed to view, or view changed to owner).
- **Your access to a shared budget was removed.** An owner removed you from a budget you'd been collaborating on, or your own Premium ended on a shared budget you owned with no other Premium owner remaining. The row attributes the removal to the person who acted, or to "System (subscription expired)" when Premium lapsed.
- **A collaborator left a shared budget you own.** If you own a budget and someone you'd shared it with leaves on their own, you (and any co-owners) get a row noting who left.
- **A bank you connected needs to be reconnected.** If your bank asks you to sign in again, the app posts a **Bank Reconnection Needed** row naming the institution. A separate **Bank Connection Expiring** row appears when the bank's consent window is closing soon. If the connection self-heals (sometimes a hiccup at the bank resolves on its own), a **Bank Connection Restored** row confirms it. The first two rows clear themselves when you successfully reconnect from **Settings**, **Linked Accounts**. See [Bank linking](https://eb.app/learn/bank-linking.md#notifications-you-may-see).
- **A new version of the app has been released.** When the app deploys a new version while you have it open, an "App Update Available" row shows the new version number and your current one, with an **Update Now** button that reloads the app on the new build. See [App updates](#app-updates).

## Reading and clearing

Unread rows are bolder than read rows. Read rows are dimmed and move under the **Earlier** divider on your next visit.

There is no per-row delete or dismiss. The way to clear the bell badge is to mark notifications as read:

- **Tap a row** to mark it as read. Rows that need a decision from you (budget invites, the App Update row) don't auto-mark on tap; they stay unread until you act on the buttons.
- **Tap "Mark all read"** above the list, or in the page's header bar, to clear the entire unread count in one step.

<!-- SCREENSHOT: Top of the Notifications page with a notification row partway through being tapped. The "Mark all read" link is highlighted in the header, and the unread badge above shows "5 unread" before tap and "0 unread" after, side-by-side or as a before-and-after. -->

Tapping a row only marks it as read. It does not navigate you to the budget the row is about. To open a budget after seeing one of its notifications, switch to your budgets list and tap it directly.

> **Why this default? Tapping does not jump to the budget.** The notifications list is meant for catching up at a glance, not for being a navigation menu. Several notifications can refer to the same budget, and a few (an access-revoked row, a budget the inviter later cancelled) do not have a budget you can usefully open. Keeping tap = "mark read" makes the list predictable: you can swipe through quickly without being thrown into a budget you didn't mean to open.

## Budget invites

Invites stand out from other notifications because they ask you for a decision. The row shows the inviter's username, the budget name, and which permission level they're offering. Three actions are available:

- **Accept** adds the budget to your list of budgets at the offered permission level. The next time you open your budgets list it appears alongside any others.
- **Decline** rejects the invite. The inviter sees that you declined.
- **Decline & block user** rejects the invite and adds the inviter to your blocked-users list, which prevents them from sending you any further invites.

<!-- SCREENSHOT: A single budget-invite row with the title "Budget Invitation" and a description like "alice invited you to \"Family Budget\" with edit access". Two main buttons read "Accept" and "Decline". A smaller link below reads "Decline & block user" with a no-entry icon. -->

Once you respond, the row stays on the list with a status next to the title (**Accepted**, **Declined**, or **Declined & blocked user**), but the buttons disappear so you cannot respond twice.

> **Why this default? Decline & block does not tell the inviter.** When you block someone through this flow, the invite stays "pending" from their side; they cannot tell you blocked them. This is to protect you from awkward replies, retaliatory contact, or someone working around the block from a different account. The invite simply never gets responded to from their perspective; on your side it is closed, and they cannot send you another one.

If two or more invites are pending at the same time, an **Accept All (N)** and **Decline All** pair appears above the list. Decline All asks you to confirm in a dialog ("Decline all N pending invites?") because you can't undo it. Accept All applies in one step.

If you've blocked someone and then unblock them later, any invite they had sent you while they were blocked, that they have not yet revoked, reappears as a fresh notification.

## App updates

When a new version of the app deploys, an **App Update Available** row shows up in the list with the version number and an **Update Now** button. Tapping **Update Now** reloads the app on the new version. The reload may take a couple of seconds because the app fetches the new bundle from the network instead of from the browser's cache, to make sure you actually get the new build.

<!-- SCREENSHOT: An "App Update Available" notification row with description "Version 2.4.0 is available (you're on 2.3.7)" and a primary "Update Now" button with a refresh icon. -->

If you ignore the row, the prompt comes back the next time the app rechecks (on reconnect, on a fresh page load, or when the next version after that deploys). You can keep using the app on the old version in the meantime, but the newest features and fixes only land once you update.

The **Mark all read** action does not hide the App Update row; the row sticks until you actually update. That keeps the prompt visible.

## Privacy

Notifications are personal to your account. Nobody else, including people you share budgets with, can see your notification list.

If someone has been added to your blocked-users list, their actions never produce a notification on your end. They cannot send you invites, and changes they make to a budget you collaborate on do not generate notifications back to you. See [Sharing](https://eb.app/learn/sharing.md#privacy-and-blocking) for how to manage blocked users from the Privacy & Blocking settings.

Reporting a public budget for breaking community guidelines is a different flow, with its own confirmation dialog and outcome (see [Public budgets](https://eb.app/learn/public-budgets.md)). The Notifications page does not include a reporting affordance.

## Behind the scenes

A few details that the screen does not surface directly:

- **No push notifications, no email.** The app does not send push notifications to your phone's home screen and does not send email when something new arrives. Notifications appear inside the app, on the bell. If you keep the app open, the bell rings the moment a new notification arrives. If you don't, you'll see the badge the next time you open the app.
- **List capped at 100.** The app keeps the 100 most recent notifications per account. Older ones drop off automatically. If you've responded to invites and read everything, the list stays short; if you let it grow, the oldest "Earlier" rows roll off without warning.
- **Real-time arrival.** While you have the app open, notifications appear within seconds of being created on the server. There is no manual refresh; the bell badge animates as soon as a new row is delivered. If your connection drops and reconnects (a flaky network, a deploy), the app refetches the list automatically.
- **Marking read is permanent.** Once a row is read, it stays read. There is no "mark unread" action. Marking a row read does not delete it; it just moves it from "Unread" to "Earlier". The row is still there for reference until it ages out at the 100-row cap.
- **Subscription changes leave the list intact.** Cancelling Premium or resubscribing later does not retroactively clear, recreate, or re-mark any of your existing notifications. Read rows stay read; older rows still age out under the same 100-row cap.

See also: [Sharing](https://eb.app/learn/sharing.md) for what happens after you accept or decline an invite, [Subscription](https://eb.app/learn/subscription.md) for what notifications appear when Premium ends, and [Bank Linking](https://eb.app/learn/bank-linking.md) for what each bank-connection notification means and how to act on it.

---

## About this document

This is a markdown mirror of [https://eb.app/learn/notifications/](https://eb.app/learn/notifications/).
The HTML version is the canonical form. This file exists so AI/LLM
tools can ingest the content without HTML parsing.
