A Chrome extension that fills HubSpot’s test-email recipient field with pre-defined address lists, so you don’t have to type them by hand every time. Very useful if you have several groups of test recipients you use regularly.
- Recipient lists — save named groups of email addresses and reuse them across tests
- In-page fill bar — appears directly below the recipient field when the HubSpot send-test dialog is open; no need to open the popup
- Replace or Append — choose whether to overwrite the current recipients or add to them
- Manage from the popup — create, rename, and delete lists; add or remove individual addresses
- Multilingual — English, German, French, Spanish, Italian, Dutch, and Portuguese, following the browser locale automatically
The extension is not published to the Chrome Web Store. Load it unpacked:
- Clone or download this repository.
- Open
chrome://extensionsin Chrome. - Enable Developer mode (toggle in the top-right corner).
- Click Load unpacked and select the repository root folder.
The extension icon appears in the toolbar. Pin it for quick access.
Open a HubSpot email draft, click Send test to open the test-send dialog. The extension detects the recipient field and inserts a small bar directly below it:
- Pick a recipient list from the dropdown.
- Choose Replace (clears existing recipients first) or Append (adds to them).
- Click Fill.
Click the extension icon to open the popup. The Fill tab mirrors the in-page bar; it is only active when a HubSpot test-send dialog is open in the current tab.
Use the Manage tab to maintain your recipient lists:
| Action | How |
|---|---|
| Create a list | Type a name in the input at the top, press Enter or click Add set |
| Rename a list | Click the list name directly and edit it in place; click away to save |
| Delete a list | Click Delete on the list header |
| Add an address | Expand a list, type in the address field, press Enter or click Add |
| Remove an address | Click × next to any address |
The extension uses the Chrome i18n API. The active locale is picked automatically from the browser language setting, with English as the fallback.
| Locale | Status |
|---|---|
English (en) |
Included |
German (de) |
Included |
French (fr) |
Included |
Spanish (es) |
Included |
Italian (it) |
Included |
Dutch (nl) |
Included |
Portuguese, Brazil (pt_BR) |
Included |
Portuguese, Portugal (pt_PT) |
Included |
To add another language, create _locales/<locale>/messages.json using _locales/en/messages.json as a template. All keys must be present; no code changes are required.
If a translation in your language sounds off, please open a GitHub issue with the corrected wording — contributions are welcome.
Prerequisites: Node.js (for tests and scripts).
npm install # install dev dependencies
npm test # run Jest unit testsLoad unpacked from chrome://extensions — there is no build step.
Formatting runs automatically via a Prettier post-edit hook when using Claude Code. To format manually:
npx prettier --write ._locales/ Chrome i18n message files
de/messages.json
en/messages.json
es/messages.json
fr/messages.json
it/messages.json
nl/messages.json
pt_BR/messages.json
pt_PT/messages.json
icons/ Extension icons (16 px, 48 px, 128 px)
scripts/ Utility scripts (icon generation, CLAUDE.md sync)
src/
content.js Injected into HubSpot pages — detects the recipient field
and renders the in-page fill bar
popup.html Extension popup markup
popup.js Popup logic — Fill and Manage tabs
storage.js chrome.storage.local helpers (getSets, createSet, …)
styles.css Shared styles for both the popup and the in-page bar
tests/ Jest unit tests
manifest.json Chrome MV3 manifest
- Manifest V3 only
- Recipient sets are stored in
chrome.storage.local— neverchrome.storage.sync(intentionally local to the browser profile) - The content script does not use ES module imports (blocked by HubSpot’s CSP);
chrome.i18nandchrome.storageare used directly
MIT — see LICENSE.