macOS deletes a notification the moment it's dismissed. Pingr copies it out first, then makes the whole pile searchable.
📋
Codes on the clipboard as they land
Safari can fill in a code from Messages. Chrome, Firefox and Edge can't, and nothing can for a code that arrived by mail, from an authenticator, or in a Slack message. Pingr can put it on the clipboard the moment it appears, once per code, and the menu says it did. Off until you turn it on.
Every browser
📤
Export what you're looking at
Save the current search as CSV, JSON or Markdown: not the whole archive, the rows on screen. "Everything Slack sent me last week" is a search you already ran, so it's the one that gets written out.
CSV · JSON · Markdown
↗️
Straight back to the app
Found the thing you lost? Now go and deal with it. One click brings the app the notification came from to the front. The button isn't there for an app you've since uninstalled, rather than being there and doing nothing.
One click
🔍
Full-text search across everything
Every notification by app, title, or message body, indexed with SQLite FTS5 and prefix matching, so results narrow as you type. The thing you swiped away this morning is three keystrokes away.
FTS5
🔐
One-time codes, one click
Pingr recognizes 2FA codes and puts a copy button directly on them. A code that just landed is also one click away in the menu bar: the icon grows a badge the moment it arrives.
The headline
⏱️
A real timeline
Everything your Mac told you, in order, grouped by app and by day. Not a stack of three cards that vanish when you glance at them.
By app, by day
🔔
Four states, one icon
The menu bar bell tells you what's waiting at a glance. Two bits, four states, no guessing.
Menu bar
⚡
Sub-second capture
Pingr watches the notification store's write-ahead log with a vnode source and re-arms across checkpoints, so a notification is archived within a second of arriving, well before you can swipe it away.
Not a polling loop
🧱
Survives Apple moving things
The record payload is an undocumented binary plist, so every field is decoded defensively. A key that moves in a macOS update costs one field, never a crash. A bundled self-test proves the whole pipeline against the real store on your Mac.
Defensive decode
🚫
Per-app exclusions
Keep whole apps out of the archive entirely. Excluding one also deletes what Pingr already has from it, so it names the app and counts what is about to go before it does, and asks nothing at all when there is no history to lose.
Retroactive, and it asks
↩️
Undo a delete
This is an archive of things macOS has already thrown away, which makes a permanent delete the one mistake it cannot afford. ⌘⌫ still deletes, but the toast now carries Undo and stays up long enough to reach, and ⌘Z works from anywhere in the window. The notification comes back whole: its code, its thread, and its place in the timeline.
⌘Z
🌍
Thirteen languages, and you choose
English, German, Spanish, French, Italian, Japanese, Korean, Dutch, Polish, Portuguese (Brazil), Russian, Turkish and Simplified Chinese. The language is picked in Pingr's own Settings rather than inherited from your Mac, and takes effect on the next redraw. Light and dark, and WCAG 2.1 AA in both, with the timeline drivable from the keyboard: type in the search field, walk the results with the arrow keys, ⌘W to close.
13 languages
🔒
Local only
One SQLite file on your Mac. No account, no server, no usage analytics, no sync. The only connection it makes is the update check and, if you enter a business license key, the check that activates it.
No network
🍎
Signed, notarized, universal
Developer ID signed and notarized by Apple, so it opens with a double-click. One universal build runs natively on Apple Silicon and Intel.
macOS 13+
🧭
Sort and filter the timeline
Newest first, oldest first, or grouped by app, with a count on every day and app heading. Narrow to All, Codes or a single app. The choice of order is remembered, and the footer always says how much of the archive is on screen, including when the list is capped.
Sort · Filter
🖱️
A menu on every row
Right-click a notification to copy its code or text, open the app it came from, show only that app, exclude that app, or delete it. Excluding still names the app and counts what is about to go.
Right-click
✋
Drag it out
Drag a row into Notes, Mail or a chat box. Drag the big code card straight into the field asking for it, without touching your clipboard. A dragged row leads with its code, so a login field gets the code and a document gets the whole notification.
Drag and drop
⏸️
Pause when you need to
Pause capture from the menu bar or Settings. Nothing that arrives while paused is archived, resuming starts from the moment you resume, and the pause survives quitting.
Survives relaunch
🚀
Start at login
Pingr can only archive while it is running, so there is a switch to open it when you log in. If macOS is holding the login item for your approval, Pingr says so and takes you to Login Items.
Login item
🔔
A menu bar you control
The bell fills in until you open the timeline. Choose whether the menu shows a code's digits (off, it still copies), and how long a new code stays on offer: 2, 5, 10 or 30 minutes, or never.
Menu bar settings
⌨️
Every shortcut in one panel
Press ⌘/ or the Shortcuts button for the full list: ⌘F to search, ⌘1 and ⌘2 for All and Codes, ⇧⌘A for the selected app, ⌥⌘1 to ⌥⌘3 for sort order, ⌘E to export, ⌘O to open the source app, ⌘, for Settings.
⌘/
🌗
Light, dark, or follow your Mac
Appearance is a setting inside Pingr: System, Light or Dark. It changes every window the moment you pick it.
Appearance
♿
Built for VoiceOver
Each row reads as one sentence, codes are spelled digit by digit instead of read as a number, and copying, deleting, sorting and pausing are announced. Day and app headings are real headings you can jump between, and a code is never spoken aloud when the menu is set to hide it.
Screen reader
🛡️
Bulk deletes ask first
Keeping less history, or clearing all of it, names how many notifications will go, warns that one-time codes are among them, and says it can't be undone. Clear All History is in the menu bar and in Settings.
Asks first
🔄
Updates on your terms
About once a week Pingr asks twoplus11.com whether a newer version is out, sending the app version and nothing else. A separate switch decides whether it installs on its own. Turn it off and Pingr asks first. You can also check by hand from the Updates button or the menu.
Two switches
🩺
Diagnostics in Settings
See whether Full Disk Access is granted, the store's schema version, whether Pingr is reading directly or from a snapshot, which search index is in use, and how many notifications are archived. The archive's location has a Reveal in Finder button.
Settings
🛟
A damaged archive is set aside, not lost
If Pingr can't open its archive, it moves the old files aside, starts a fresh one, and tells you where the old copy is kept.
Rescue copy
📴
History stays when access goes
If Full Disk Access is turned off, recording stops and a banner says so, with buttons for Privacy Settings and Recheck. Everything already archived stays browsable and searchable.
Still searchable
🔤
History outlives the app
A notification from an app you've since uninstalled keeps a tile with the app's initial and its name on the row, so old history doesn't turn into a column of identical gray placeholders.
Monogram tiles