Agent skill
gtmos-seo-competitor-serp-watch
Track where your domain and your competitors appear in Google's top 10 and in AI answers (Google AI Mode, ChatGPT, Perplexity, Gemini) for buying keywords, and what changed since the last check.
Filed under Content and SEO and Positioning and messaging.
From ay-automate/gtmos-skills · 107 skill entries · 0 · pushed 2026-11-02
What it does when it runs
Track where your domain and your competitors appear in Google's top 10 and in AI answers (Google AI Mode, ChatGPT, Perplexity, Gemini) for buying keywords, and what changed since the last check. With GTM OS connected it adds the keywords as tracked prompts (seo_geo.create_tracked_prompt), queues the measured run with seo_geo.run_visibility under the per-run spend cap, and reads share of voice and drops from seo_geo.get_visibility and seo_geo.list_visibility_alerts. Use for \"competitor rankings\", \"SERP watch\", \"who ranks for our keywords\", \"AI answer share of voice\", \"did we lose positions\".
Automated analysis of the skill and the 0 files bundled beside it. A skill’s own description is written to be selected by an agent, so it describes the job and not the dependencies.
- Keys and connectors you must supply
- None found.
- Hosts it reaches
- api.looot.ai
- Tool permissions it declares
- No
allowed-toolsin the frontmatter. It only issues instructions, so there is nothing to bound. - Actions present in the files
- None. Instructions only.
Ask about gtmos-seo-competitor-serp-watch
Opens your assistant with this page's recorded context. Check the linked sources before relying on it.
Install it
View source on GitHub ↗git clone --depth 1 --filter=blob:none --sparse https://github.com/ay-automate/gtmos-skills.git /tmp/gtmos-skills git -C /tmp/gtmos-skills sparse-checkout set "skills/gtmos-seo-competitor-serp-watch" mkdir -p ~/.claude/skills/gtmos-seo-competitor-serp-watch cp -R "/tmp/gtmos-skills/skills/gtmos-seo-competitor-serp-watch/." ~/.claude/skills/gtmos-seo-competitor-serp-watch/
Picked up without a restart. A project skill of the same name is shadowed by your personal one. For one repository only, swap ~/.claude/skills for .claude/skills. Claude Code docs ↗
Or take the whole library
This repo ships a .claude-plugin manifest, so Claude Code can install all 107 skills at once. Plugin skills are invoked as /<plugin>:<skill>, so they never collide with your own.
/plugin marketplace add ay-automate/gtmos-skills /plugin
The folder is the same in every client that implements the format — 46 of them — so if yours is not above, only the destination changes.
The skill
Source on GitHub ↗Reproduced in full from ay-automate/gtmos-skills/blob/86780d2f545cdc0a1de971917aa04b41bb0b3ccd/skills/gtmos-seo-competitor-serp-watch/SKILL.md, which is licensed MIT (skill frontmatter). 971 words, 14 headings.
Competitor SERP watch
Part of GTM OS Skills. Adapted from
gtm-competitor-serp-watchin loootai/gtm-skills (MIT, Copyright (c) 2026 looot). Changed for GTM OS: the operating section below (tracked prompts and keywords, the measured visibility run and its spend cap, alerts replace the history file), rewritten cross-references. Notices: THIRD-PARTY-NOTICES.md (installed beside the skills asTHIRD-PARTY-NOTICES.md).
With GTM OS connected
Rules (GTMOS-RULES.md). Read
policy.get_dry_modefirst; in dry mode every effect stops at a draft. E-class operations are proposed and a different person approves them; never approve your own proposal. Numbers come only from operation results, named with the operation. Claims about results, customers or metrics must be backed by active proof fromproof.list.
Spend. Quote first (
capability.quote, orestimate: true), show the user the total, and run only after a yes that covers exactly that run; pass the quoted amount as the run's cap. The operations marked spends inline below are never granted to GTM OS pack agents: a person runs them, or you quote and hand the run over.
1. Readiness. Google Search Console is required for the SEO & GEO engine (seo_geo.gsc_properties Q, instance.readiness). seo_geo.list_tracked_prompts Q shows the prompts and keywords already tracked, with brand, aliases, competitors and target URLs.
2. Track the keywords. seo_geo.create_tracked_prompt D per buying keyword or AI prompt, tagged with the user's brand, up to the competitors the user names and the target URLs. seo_geo.get_visibility_settings Q shows the schedule, alert thresholds and the per-run spend cap; changing them is seo_geo.update_visibility_settings D.
3. Measure. seo_geo.run_visibility {tracked: "queue"} D (spends inline) records Search Console, Ahrefs and GA4 visibility and queues the paid tracked run: AI answer engines and Google rank through the governed broker, inside the per-call ceiling, the org budget and the per-run cap. Without tracked: "queue" nothing is bought. Tell the user the cap before you queue it.
4. Read the change. seo_geo.get_visibility Q gives share of voice per engine and per tracked prompt; seo_geo.list_visibility_alerts Q lists rank drops and AI-answer visibility drops; seo_geo.kpis Q the headline numbers with their previous values. The engine keeps the history, so the method's JSON file is only for the plain path. Content fixes go through gtmos-seo-page and are published only after a person approves.
Without GTM OS
Run the workflow below on looot directly: connect the looot MCP server (https://api.looot.ai/mcp) or use the looot skill in this repository. Searching and inspecting are free; runs are paid from the prepaid looot balance. Show the user the endpoint and its price, and run only after a yes.
The method below is looot's gtm-competitor-serp-watch workflow. Job ids are looot's; prices are the cheapest live provider in the public looot catalog on 2026-10-08 and the live price wins. With GTM OS connected, run the same steps through the operations above.
For each buying keyword ("best crm for startups", "clay alternative"), reads the Google top 10 and Google's AI Mode answer, records which of the user's and competitors' domains appear and where, and compares with the previous check saved in a JSON file.
Ask for these inputs
- 5 to 50 keywords people type when they are ready to buy.
- The user's domain and up to 10 competitor domains.
- Country and language (default
us,en). - Where to keep history (default
serp-watch.jsonin the working folder).
Steps and prices
Prices are the cheapest live provider in the public looot catalog on 2026-10-08. inspect shows the live price.
| # | Job id | Input | Price on 2026-10-08 |
|---|---|---|---|
| 1 | google.serp.organic | query, plus gl and hl | from $0.0009 per call |
| 2 | google.serp.ai-mode | query | from $0.002 per call |
| 3 (optional) | search.chatgpt | query | from $0.004 per call |
Expected total: about $0.003 per keyword, $0.15 for 50 keywords, with the optional ChatGPT check about $0.35.
Quote before you run
- Keywords × the steps chosen × the prices above.
- Tell the user the total and the
balance; wait for a yes. More than 100 runs: an explicit yes. - Cap each run with
fallback.maxCostUsd(0.02).
Run it
run {"endpointId": "job:google.serp.organic", "input": {"query": "clay alternative", "gl": "us", "hl": "en"}, "idempotencyKey": "serp-2026-10-08-clay-alternative", "fallback": {"maxAttempts": 3, "maxCostUsd": 0.02}}
run {"endpointId": "job:google.serp.ai-mode", "input": {"query": "clay alternative"}, "idempotencyKey": "aimode-2026-10-08-clay-alternative", "fallback": {"maxAttempts": 3, "maxCostUsd": 0.02}}
Put the date in the idempotency key, so the same day replays for free and the next week fetches fresh data.
For each keyword record: the position (1 to 10) of every tracked domain in the organic results (match on the host, ignore www.), and for AI Mode whether each domain is cited as a source or named in the answer text. Then load the previous check from the history file and compute the change.
Output format
A markdown report, then the updated history file.
# SERP watch, 2026-10-08 (us/en), 20 keywords, cost $0.06
## Share of voice
| Domain | Top 3 | Top 10 | Cited in AI Mode | Change vs 2026-10-01 |
|---|---|---|---|---|
| you.com | 4 | 11 | 3 | +2 top 10 |
| rival.com | 9 | 15 | 8 | -1 top 3 |
## Changes
- "clay alternative": rival.com 3 -> 1, you.com 7 -> 12 (dropped out)
## Per keyword
| Keyword | you.com | rival.com | other.com | AI Mode cites |
|---|---|---|---|---|
History file shape: {"checks": [{"date": "2026-10-08", "gl": "us", "keywords": {"<kw>": {"organic": {"<domain>": <pos>}, "aiMode": ["<domain>"]}}}]}.
Cost and stop rules
- One results page per keyword; do not page to 20 unless the user asks.
- Two failures on a keyword: mark it
errorin the report.
When not to use this skill
- One results page:
looot-google-serp. AI visibility for a brand across engines:looot-ai-search-visibility. Both.
Other skills for the same job
Different authors, same problem. Matched on the words in the skill name, across every library in the catalogue except this one.
- gtm-competitor-serp-watch by loootai · 0
- seo-competitor-gap by RouterGrowth · 2
- gtm-competitor-ad-watch by loootai · 0
- ai-seo by coreyhaines31 · 57,918
- competitor-profiling by coreyhaines31 · 57,918
- programmatic-seo by coreyhaines31 · 57,918
- seo-audit by coreyhaines31 · 57,918
- competitor-creative-analysis by irinabuht12-oss · 6,620
Need help setting it up?
This page tells you what gtmos-seo-competitor-serp-watch does and what it needs. Cheetah builds the agent setup it runs inside: data, CRM, sequencing and the guardrails.
Book a call →The directory stays free. There is nothing gated behind this.