New: Pro unlocks multi-account sync — $3/mo, $30/yr, or $50 forever

v0.2.0 · Field suggestions are here

Stop chasing verification codes in your inbox.

Simple OTP's browser extension catches fresh Gmail codes and offers them beside any OTP field — with a live countdown, one-click fill, and nothing ever leaving your device.

On a Mac? Get the menu-bar app →

  • Free
  • No account needed
  • Chrome + Firefox
  • No analytics

The extension reads the code on-device and offers it exactly where you type.

Works where you do

Features

Everything codes need.
Nothing they don't.

One job, done end to end: detect the code, prove it's fresh, hand it over, clean up after.

Live countdowns you can believe

“Expires in 5 minutes” in the email becomes a real ticking timer. No statement? A conservative 10-minute default takes over.

Field suggestions

A suggestion appears beside any focused OTP field. You hit Fill — it never submits for you.

Ephemeral capture

AutoFill, clipboard auto-catch and Paste & Parse keep just the code in memory for ≤ 5 minutes. Never logged, never synced.

Multi-account sync

Each Gmail keeps its own resumable cursor, so refreshes read only what changed. First account free.

History search

Used and expired codes stay searchable for 1, 7 or 30 days — then they're gone. Filter fresh, used, expired.

Automation-friendly

simple-otp doctor · list · history · copy · use — script the whole lifecycle from your terminal.

$ simple-otp list
● Google······482 913··04:37
○ GitHub······394 102··03:12

Surfaces

One flow, three surfaces.

Fill without the round-trip

Standalone Gmail client for Chrome and Firefox. With the Mac app installed, the extension reads its shared local snapshot — Gmail is fetched once, both products read the same result. Fill only ever happens on your explicit action.

Chrome · Firefox

How it works

From inbox to field
in seconds.

  1. 1

    Connect Gmail

    Google's own browser flow, accounts you pick. Read-only by default; refresh tokens stay in your browser profile or Keychain.

  2. 2

    We catch it

    Incremental sync decodes new messages in memory, extracts the code, discards the body.

  3. 3

    You use it

    Hit Fill beside the field, or copy from the popup. Used codes step aside automatically.

Security

Local-first isn't a slogan. It's the architecture.

No Simple OTP cloud. No inbox database. No analytics pipeline. A stateless broker only exchanges OAuth tokens; messages and codes never pass through it.

  • Read-only by defaultGmail scope is gmail.readonly unless you opt further.
  • Auto Archive is off by defaultEnabling it requests gmail.modify separately, per account.
  • Surgical by designOnly the exact message that produced a code loses its INBOX label — it stays in Gmail All Mail.
  • Denying the separate Auto Archive permission does not affect these read-only features.
Gmailyour choice→Keychaintokens→Engineon-device→Youcopy · fill
Data protection
Tokens in Keychain / browser profile. Codes in local storage.
Retention and deletion
1, 7 or 30-day history. Ephemeral codes vanish in ≤ 5 min.
Limited Use & AI
No ads, no tracking, no model training. See Privacy for AI and machine learning + Limited Use.
Read the privacy statement →

Pricing

Start free. Upgrade when you have more inboxes.

Starter

$0forever

One Gmail account, full code inbox, countdowns, fill.

Get the Mac app

Lifetime

$50once

Pay once. Multi-account sync forever, no renewals.

Choose lifetime

Checkout by Polar — key arrives with the receipt, activated in extension Settings → Pro license. Tokens, messages and codes never leave your device; verification sends only the key.

FAQ

Answers, up front.

Which browsers are supported?

Chrome and Firefox — the extension is a standalone Gmail client in both.

Do you store my emails?

No. Bodies are decoded in memory and discarded; only code, sender and expiry persist locally.

What marks a code used?

Copying or filling does, automatically. Manual used / unused controls are always available.

Does it submit forms?

Never. Every fill is your explicit action; submit stays yours.

How does auto-archive work?

Off by default. With separate per-account consent it removes only the INBOX label from the exact OTP message (kept in Gmail All Mail) and retries safely on failure.

Do I need the Mac app for the extension?

No — the extension works standalone. With the app installed, both share one local snapshot instead of fetching twice.

Simple OTP app icon

Stop hunting. Start pasting.

Free. Set up in two minutes.

Open installed app ↗ Chrome + Firefox · No account required · Mac menu-bar app included