You can have your own Chrome extension running in about ten minutes, without writing code. Claude writes the files. You load them into Chrome through a switch called Developer mode. This guide starts with ideas for HubSpot users, then walks through the whole route using a real example we built and tested.
The best extensions remove a small, repeated annoyance. Think about the things you do in HubSpot ten times a day: the copying, the checking, the switching between tabs. Each of those is a candidate. Here are eleven to start from.
| Extension | What it does for you | Keeping it simple and safe |
|---|---|---|
| Portal time tracker | Logs how long a HubSpot portal is open, grouped by portal. Handy for anyone who works across several portals and needs to know where the hours went. We built one of these for our own team first. | Only runs on HubSpot pages. Reads the portal ID from the address bar, nothing else. |
| Which portal am I in? | Puts a coloured banner across the top of HubSpot showing the portal's name, and a red one for production. Stops the classic mistake of editing a live portal when you meant the sandbox. | You set the names and colours yourself, once. |
| Internal names on show | Shows each property's internal name next to its label on record pages. Saves admins a trip into Settings every time a workflow, import or integration asks for the internal name. | Admin tool. Toggle it on and off from the toolbar. |
| Deal stage checklist | A small panel on deal pages listing what should be filled in before a deal moves stage, with the missing fields highlighted. | Your checklist, your stages. Nudges; it does not block. |
| Import pre-flight | Drop a CSV into the popup before importing. It flags bad email addresses, duplicates, blank required columns and odd date formats. | The file never leaves your computer. |
| Meeting prep in one click | On a company record, one click opens the company website, a LinkedIn search and a news search in new tabs. | No data is sent anywhere. It just opens tabs. |
| UTM builder to house rules | A popup that builds campaign links using your agreed naming convention, so every link in HubSpot's campaign reports lines up. | Pick from dropdowns rather than typing. |
| Name checker for workflows and lists | On the workflows or lists page, highlights names that break your naming convention. Useful before an audit or a handover. | Reads the names on screen. Changes nothing. |
| Screenshot-safe mode | Blurs email addresses and phone numbers on screen, so you can take screenshots for training material or support tickets without sharing personal data. | One click on, one click off. |
| Snippets everywhere | Your most-used lines (intro, follow-up, booking link) available on LinkedIn, webmail or any text box, not just inside HubSpot. | Stored in your browser only. |
| Focus view | Hides the HubSpot notification bell and chat widget for 25 minutes while you get a task done. | Everything comes back when the timer ends. |
Tell Claude three things: where it runs, what triggers it, and what you see. For example:
Build me a Chrome extension that only runs on app.hubspot.com. Show a thin coloured banner across the top of the page with the name of the portal I'm in, taken from a list of portal IDs and names I can edit in the extension's settings. Make the banner red for any portal I mark as production. Use Manifest V3, keep permissions as narrow as possible, explain each permission in one line, and send the files as a zip.
If your portal is on the EU data centre, your address bar says app-eu1.hubspot.com. Tell Claude which one you use.
HubSpot's App Marketplace does not allow apps that overlay the HubSpot platform itself. That rule covers the Marketplace only. You can still build an extension like the ones above and run it yourself, outside the Marketplace, which is the route this guide takes.
So treat these as tools for you and your team, loaded through Developer mode (or a private Chrome Web Store listing). They are not something you could submit to HubSpot as a Marketplace app.
A Chrome extension is a small folder of files. One file, manifest.json, tells Chrome what the extension is called and what it is allowed to do. The others do the work: usually an HTML page for the little window that pops up, and a JavaScript file behind it. Chrome turns the folder into a button on your toolbar.
The worked example below is a button called Reading Time. Click it on any web page and it tells you how long that page takes to read. It is deliberately simple. The same five steps build any of the ideas above.
The five steps: ask Claude, unzip the files, load them into Chrome, pin the button, and change it whenever you like.
Describe what should happen when you click the button. Be concrete about what you see, not how it works. Then ask for the files as a zip, so they arrive as one download.
Build me a Chrome extension. When I click its icon, it should tell me how long the page I'm on takes to read. Send the files as a zip.
Claude sent back a zip holding six files: manifest.json, popup.html, popup.js and three icon sizes. The manifest asks Chrome for two permissions: activeTab, which lets it read the page you are looking at only when you click, and scripting, which lets it count the words.
Download the zip and double-click it. On a Mac it unzips in place; on Windows, right-click and choose Extract All. You now have a folder called something like reading-time next to the zip.
Chrome wants the folder, not the zip. This is the most common reason a first attempt fails. Check manifest.json sits directly inside the folder, not one level further down.
Move the folder somewhere it will live, such as Documents. Chrome loads it from that spot every time it starts, so if you delete or move the folder, the extension stops working.
This is the developer route. It installs the extension straight from the folder on your computer, with no store and no review.
[Screenshot: Developer mode on, showing Load unpacked]
The extension appears as a card, with its name, version, description and an on/off switch. The long ID is Chrome's own reference; you can ignore it.
[Screenshot: Reading Time loaded as an unpacked extension]
New extensions hide in the jigsaw menu at the right of the toolbar. Click the jigsaw, find Reading Time, and click the pin beside it. The icon now sits on your toolbar.
Go to any article and click the icon. Ours reported 1,381 words and six minutes on a test page.
[Screenshot: the Reading Time popup]
Some pages refuse. Chrome blocks extensions from its own pages (anything starting chrome://) and the Chrome Web Store.
Go back to the same conversation and ask for the change. We asked: "Can it show listening time as well?" Claude sent a new zip, version 1.1.
The version number on the card updates, which confirms the new files took.
[Screenshot: after reload, the card shows version 1.1]
Most failures show up the moment you click Load unpacked, as a red error box. Copy the whole message and paste it back to Claude.
| What you see | What it means | What to do |
|---|---|---|
| "Manifest file is missing or unreadable" | Wrong folder, often the one above the real one | Select the folder with manifest.json directly inside |
| "Could not load icon" | The manifest names an image that isn't there | Ask Claude to add the icons, or remove the icon lines |
| An Errors button on the card | Something failed while it ran | Click it, copy the message, paste it to Claude |
| Nothing changes after an edit | Chrome is running the old files | Press reload on the card, then refresh the page |
| Popup is blank | The script behind it failed | Right-click the popup, Inspect, copy the red Console text to Claude |
The store gets an extension to other people with one click and automatic updates. It takes more than the developer route, and it is the subject of the next article. In outline: