A Chrome extension that enters Goodreads giveaways in one click instead of like 5. Hit the ⚡ Enter Giveaway button and it queues the entry in the background — picking your saved address and agreeing to the terms for you — using your existing logged-in session. No Selenium, no stored credentials.
- Go to
chrome://extensions - Enable Developer mode (top right)
- Click Load unpacked and select this folder
- Open Settings (extension popup → Settings) and set your preferred shipping address (a substring of the address, e.g. a city, or its numeric id)
- Browse
goodreads.com/giveaway(or any giveaway page) while logged in. - Each Enter Giveaway button now shows a ⚡. Click it — a toast confirms
✓ Queued, and the entry is submitted in the background. - Click the toolbar icon to see the queue: status per giveaway, the address used, retry/remove, and clickable titles that open the giveaway page.
| Option | What it does |
|---|---|
| Preferred shipping address | Substring (case-insensitive) or numeric id of the saved address to use. Blank = first saved address. |
| Concurrent entries | How many entries process at once (keep low, 1–2). |
| Min delay between entries | Throttle so you don't hammer Goodreads. |
| Max retries | Retry attempts per giveaway on transient failure. |
Goodreads' entry flow is two POSTs, replayed with fetch using your session
cookies and the page's CSRF token:
POST /giveaway/enter_choose_address/{id}?address={addressId}— select addressPOST /giveaway/enter_print_giveaway/{id}?address={addressId}— agree to terms + submit
A background service worker runs the queue (with concurrency limit, throttle,
retries, persisted across restarts). HTML is parsed in an offscreen document
(DOMParser isn't available in MV3 workers). The content script never mutates
Goodreads' DOM — the ⚡ is CSS-only — to avoid crashing its React app.
based on some pre-claude exploratory work i did with goodreads in an earlier project
manifest.json— MV3 configcontent.js/content.css— ⚡ marker + click interception + toastbackground.js— queue + entry logic (dryRun/enterNow/debugEnterconsole helpers)offscreen.html/offscreen.js— form/address parsingpopup.html/popup.js— queue UIoptions.html/options.js— settings
- Be reasonable with concurrency/delay — rapid automated entries risk rate limiting or flagging your account.
- If the ⚡ buttons stop working after reloading the extension, refresh the Goodreads tab (the old tab holds a stale content script).