Zero Hour is the eBay sniper Chrome extension that runs entirely in your browser. It's the first major eBay sniper built as a true Chrome extension rather than a server-side service with a web dashboard. The difference matters: your eBay password never leaves your machine because the extension never asks for it.
Why a Chrome extension is the right architecture for sniping
For two decades, every eBay sniper has been a website. You'd visit gixen.com or esnipe.com, log in with credentials they collected, paste the eBay URL of the item you want, and trust that their server would fire the bid. That architecture made sense when "in the browser" meant slow JavaScript and limited storage. It doesn't make sense in 2026.
A modern Chrome extension has direct access to everything a sniping tool actually needs:
- Your eBay cookies, via
chrome.cookies.getAll, read fresh at bid time and never stored. - Reliable scheduling, via
chrome.alarmsplussetTimeout, with sub-second precision. - Local storage, via
chrome.storage.local, so your snipes live on your machine. - System notifications, via
chrome.notifications, that reach you across tabs. - Page injection, via content scripts, so the "Snipe this auction" button appears on every eBay listing.
None of those capabilities require a server. None of them require credentials. The first sniper to actually use them was Zero Hour.
What the Chrome extension does, end to end
1. Install
From the Chrome Web Store. The permissions screen explicitly lists each capability with plain-English justification. The extension never asks for any login or signup.
2. Identity (instant, invisible)
The first time you open the popup, the extension generates a random UUID called your install ID and stores it in chrome.storage.sync. That ID, and only that ID, is sent to zerohourbid.com/api/entitlement to check whether you're on the Free or Pro plan. There is no email, no password, no profile, no account to recover.
3. Sniping (the only flow)
Two ways to add a snipe:
- On any eBay auction page: click the injected "Snipe this auction" pill that appears bottom-right. Item details load directly into the popup.
- From the popup itself: tap the + FAB, paste any eBay URL.
Either path lands you on the Add Snipe sheet: thumbnail, title, current price, end-time, max-bid input, and an advanced lead-time slider (default 3 seconds). Tap Save. The snipe slides into your Active list.
4. Firing (the moment)
30 seconds before close, Chrome wakes the extension's service worker. The worker opens (or reuses) a background tab pointed at the eBay listing so it loads in the page's native context — cookies, anti-bot fingerprinting, the lot. At T-3s (or your configured lead time), a content script running inside that tab reads the live bid-layer tokens, constructs the bid POST, and fires it directly from the eBay origin. The response is forwarded back to the service worker, parsed, and the result is displayed in real time inside the popup. If the worker opened the tab itself, it closes it once the result is in.
5. Notification
A Chrome system notification appears immediately: YOU WON — [item] — Final $X. Click it to open the popup with a celebratory overlay: cyan and gold particle burst, the word ACQUIRED resolving from a glitch animation, and the final price in monospace gold.
What makes the popup different
The popup is 400 by 600 pixels, Chrome's max practical size. That's the entire app. There are no nested screens, no settings page. Every state lives in one window.
Design choices that took a while:
- Circular countdown rings around each snipe thumbnail, shifting from cyan to amber to red as the auction approaches.
- Mechanical split-flap countdowns on the snipe detail view. Each digit flips with a 220ms ease-out, the same physics as airport departure boards.
- Glitch scan-line animation when item details load and during the result reveal. Custom CSS, no library.
- A breathing FAB in the bottom centre, scaling from 1.0 to 1.05 in a 2-second loop.
- Glassmorphic listing image cards with
backdrop-filter: blur(12px). - Status badges: WON $47 in gold, LOST in subdued red, FAILED · RETRY with inline action.
Permissions, in plain English
The Chrome Web Store will show you these. They sound scary. Each one is tightly scoped.
cookies: to read your eBay session cookies at bid time. Read once, never stored.alarms: to wake the service worker at the right moment.storage: for snipes and settings, on your machine only.notifications: to tell you when you win.activeTab: so the "Snipe this auction" button works on the eBay page you're viewing.- Host permissions limited to eBay domains and
zerohourbid.comfor the entitlement check.
The complete walkthrough lives on the why-these-permissions page, with every API call quoted from the extension's source.
Manifest V3 compatibility
Zero Hour is built for Manifest V3 (Chrome 120+). Service workers replace the deprecated background pages. The scheduling stack uses chrome.alarms plus in-memory setTimeout for sub-minute precision rather than the long-deprecated chrome.alarms.delayInMinutes. The popup is a self-contained React 18 app.
Firefox support follows in v1.1 from the same codebase. Safari is explicitly out of scope. Apple's extension model lacks the storage and cookie APIs the architecture depends on.
Source code transparency
Zero Hour ships unminified. Right-click the icon, choose Inspect popup, open Sources, and you're looking at the literal JavaScript executing on your machine. Variables have real names. Functions are commented. The bid placement module is in src/content-script/bidder.ts, which runs in the eBay page context; the scheduler that drives it is in src/service-worker/placeBid.ts.
This is rare. We think it should be the norm for any extension that touches sensitive accounts. A separately published GitHub repo can drift from what's actually shipped. The binary on your machine cannot.