# Site Checker Browseros

> \---

- Skill: `ralf-claude-skills/site-checker-browseros` (Agent Skill)
- Install (CLI): `npx skillmds@latest add ralf-claude-skills/site-checker-browseros`
- Raw SKILL.md: https://api.skillmd.com/api/skills/ralf-claude-skills/site-checker-browseros/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: ralf-claude-skills (https://skillmd.com/u/ralf-claude-skills)
- Updated: 2026-09-21
- Page: https://skillmd.com/skills/ralf-claude-skills/site-checker-browseros

---

\---

name: site-checker-browseros

description: Checks one or more business websites (via the connected BrowserOS MCP browser) and reports whether each has a chatbot/AI assistant widget and/or a login/customer portal. Pure detection only — no lead qualification, no email extraction, no filtering. Use when asked to check if a site has a chatbot or login, for one URL or a list. Triggers: "does this site have a chatbot", "check if this has a login", "check these sites for chatbots/login".

\---



\# Site Checker (BrowserOS)



\## Purpose



Given one or more site URLs, report two yes/no signals per site: does it have a chatbot/AI assistant widget, and does it have a login/customer portal. Nothing else — no filtering, no email lookup, no verdicts beyond the two flags.



\## Requires



\- BrowserOS MCP connected (`chrome://browseros/mcp`). If BrowserOS tools aren't in the current tool list, tell the user to check that page and reconnect — don't fall back to `web\\\_fetch`, since it can't see JS-injected chat widgets.



\## Input



URL(s) pasted directly in the chat message — one or more, one per line or comma-separated. Normalize each to include `https://` if missing. Do not read from an uploaded file.



\## Process — one tab, strictly sequential



Never open more than one tab at once.



1\. First URL: call `list\\\_pages`; reuse an existing page via `navigate\\\_page`, or call `new\\\_page` once if none exists. Every URL after that: `navigate\\\_page` on the same tab — never open a second tab.

2\. Call `get\\\_page\\\_content` and `get\\\_dom` (or `search\\\_dom`) on the loaded page. A plain fetch won't catch JS-injected widgets, which is why this goes through the real tab.

3\. \*\*Chatbot/AI assistant check\*\* — `search\\\_dom` for script/iframe `src` containing: `intercom`, `drift.com`, `tidio`, `crisp.chat`, `zdassets.com`/`zendesk`, `tawk.to`, `hs-scripts.com`/`hubspot`, `livechatinc`, `freshchat`, `manychat`, `chatra`, `olark`, `messenger.com` (embedded plugin, not just a link) — or a fixed-position bottom-corner element with class/id containing `chat`/`widget`/`bubble` and no vendor match. Does NOT count: a plain WhatsApp (`wa.me`) link, a Messenger hyperlink, a phone/text-us button — none are an installed widget.

4\. \*\*Login/portal check\*\* — `get\\\_page\\\_links`, scan link text/href for: `login`, `sign in`, `my account`, `client portal`, `member login`; or `/login`, `/account`, `/portal`, `/dashboard`, `/signin`, `/my-` in the path; or an external booking/scheduling SaaS link (`calendly.com`, `acuityscheduling.com`, `mindbodyonline.com`, `squareup.com/appointments`). Does NOT count: a plain "contact us to book" mailto/anchor with no external system.

5\. Record both flags, move to the next URL in the same tab.



\## Output



Respond directly in the chat as a markdown table — no spreadsheet, CSV, or any other file. The table below is the entire deliverable, rendered inline in the conversation:



| Website | Chatbot/AI Assistant | Login/Portal |

|---|---|---|

| https://example.com | Yes (Intercom) | No |

| https://another.com | No | Yes (calendly.com) |

| https://third.com | No | No |



If a site fails to load, put `N/A (site didn't load)` in both columns for that row instead of guessing.



No shortlist, no summary framing, no email lookup — just the table, one row per site, in the order given.


