The installation badge
Every website in your dashboard shows a real-time installation status badge. It updates automatically — no refresh needed.| Badge | Meaning |
|---|---|
| 🟡 Script not yet detected | The script has never pinged from this website |
| 🟢 Script active · Last seen 3m ago | Script is installed and running correctly |
| ⚪ Script detected (inactive) | Script was seen more than 24h ago — check if it’s still on the page |
Manual verification
If the badge stays amber, verify the script is correctly installed:1. View page source
In any browser, pressCtrl+U (Windows) or Cmd+U (Mac) to view the raw HTML source. Search for openhermit — you should see:
- The script is only on the homepage, not all pages — add it to your layout/template
- The
data-api-keyis empty or wrong — copy it again from the dashboard - The script URL is wrong — it must be
https://openhermit.com/script.js
2. Check the browser console
Open DevTools (F12) → Console. The script logs a warning if something is wrong:script.js).
3. Check network requests
In DevTools → Network tab, filter byopenhermit. You should see:
- A request to
script.js(status 200) - A POST to
/api/ping(status 200) - A POST to
/api/actions/sync(status 200)
Forms not detected?
If the script is confirmed active but no actions appear in your dashboard: The form might be on a different page. The script only detects forms on the current page. Make sure you visit the specific page containing the form — not just the homepage. The form might be loaded dynamically. React, Vue, and Angular apps often render forms after the initial page load. The script has a MutationObserver that handles this, but there can be a short delay. Wait 2–3 seconds after the form appears before checking. The form might not look like a form. If a “form” is built entirely withdiv and onClick handlers (not real <form> and <input> tags), the script can’t detect it. Consider adding data-mcp-action attributes manually.
Third-party widgets need special handling. Calendly, Typeform, HubSpot etc. are detected by checking for their JavaScript objects or DOM elements. If a widget is embedded via a plain iframe with no identifying attributes, it won’t be detected.

