Running continuous SEO analysis with OpenClaw and GSC Wizard

Most SEO problems are cheap to fix in week one and expensive by week six: a template change that drops a canonical, a page losing its featured snippet, a cluster slowly cannibalising itself. Nobody opens Search Console every morning to catch them. OpenClaw's Gateway is running anyway, and it already posts to your Slack or Telegram. Give it your Search Console data and a schedule, and you get an analyst that checks every day and only bothers you when something is worth acting on.

On this page
Setup time

About 20 minutes, with OpenClaw already running and a chat channel connected.

You'll need

A GSC Wizard account with your property connected, and a read-scoped API key.

What you get

A daily pulse, a weekly review and a monthly outlook, posted where your team already reads.

How it fits together

There are three moving parts, and each does one job:

  1. The GSC Wizard MCP server holds the data and does the arithmetic. It is hosted, keeps up to ten years of history for stored properties, and runs the heavy analysis (anomaly detection, change points, decay, cannibalisation, opportunity scoring) server side. The agent gets finished results, not raw rows it has to add up.
  2. An OpenClaw skill holds the procedure: which tools to call at each cadence, what counts as worth reporting, and how to format it. It is plain Markdown in your workspace, versioned like any other file.
  3. OpenClaw automations hold the schedule. Each run starts an isolated session, follows the skill, and announces the result to a Slack channel, a Telegram group, or a webhook.

Keeping these apart is what makes the setup maintainable. When you want a different threshold, you edit the skill, not three cron jobs. When the data changes, nothing on your side changes.

Step 1: Connect GSC Wizard

Create a read API key under Account → API keys. A read key is rejected by every mutation tool before the tool runs, so even a prompt-injected agent cannot submit, delete or change anything. Then add the server to ~/.openclaw/openclaw.json:

{
  mcp: {
    servers: {
      gscwizard: {
        url: "https://mcp.gscwizard.com/mcp",
        transport: "streamable-http",   // OpenClaw defaults to SSE if omitted
        headers: { Authorization: "Bearer gscw_live_..." }
      }
    }
  }
}

Check that the Gateway can actually reach it:

openclaw mcp doctor gscwizard --probe

Once it passes, move the key out of the literal header into OpenClaw's secrets mechanism; openclaw mcp doctor warns about literal tokens for good reason. More options (OAuth, tool filtering with --include) are in the OpenClaw MCP setup section.

Step 2: Write the skill

Skills live in a folder with a SKILL.md file. Workspace skills (~/.openclaw/workspace/skills/ by default) take precedence over everything else, so this is where yours goes. Save the following as skills/gsc-monitor/SKILL.md and replace the domain:

skills/gsc-monitor/SKILL.md
---
name: gsc-monitor
description: Daily, weekly and monthly Search Console monitoring for example.com using the gscwizard MCP server. Use when asked for a daily pulse, weekly SEO review or monthly SEO outlook.
version: 1.0.0
---

# GSC monitor for example.com

Data comes ONLY from the gscwizard MCP tools. Never estimate a number.
Every figure you report carries its tool name and date range.
Search Console data lags 2-3 days: compare complete days only and never
treat the last two days as a drop.

## Daily pulse
1. detect_anomalies (days: 90) once for clicks and once for impressions.
   Report only anomalies dated in the last 7 complete days.
2. detect_change_points on clicks (days: 90): any new level shift?
3. get_indexing_tracker: anything newly not indexed, or dropped.
Report ONLY items that need a human today. If there are none, reply with
exactly one line: "GSC pulse: nothing needs attention."

## Weekly review
1. get_ranking_changes: last 7 complete days vs the 7 before.
2. find_decaying_content: top 5 pages by clicks lost.
3. score_opportunities: top 5 striking-distance pages.
4. analyze_cannibalization: new or worsening query conflicts only.
5. list_algo_updates: note any Google update inside the window before
   blaming a page for a drop.
Output: three actions max, each with URL, evidence, and expected effect.
Then a short "watching" list. No tables over 10 rows.

## Monthly outlook
1. get_site_summary: this month vs last month and vs same month last year.
2. forecast_traffic for the next 90 days.
3. get_branded_performance: brand vs non-brand trend.
4. get_ga4_llm_traffic, if GA4 is connected; if it reports notConfigured,
   say so once and move on.
Output: five bullet summary, then the one thing to prioritise next month.

## Rules
- Never propose publishing new content unless a query has impressions and
  no page that ranks for it.
- Never call a tool that changes anything. This skill is read-only.
- If a tool errors with a rate limit, wait the seconds it returns, once.

Every tool named above exists on the GSC Wizard MCP; the GSC MCP page lists the rest. The "reply with one line if nothing is wrong" rule matters more than it looks. An analyst that posts a wall of green every morning gets muted by the second week.

Step 3: Schedule the automations

OpenClaw's scheduler is managed with openclaw automations (openclaw cron is the same command under its older name). Each job gets a cron expression, a time zone, an isolated session so runs do not pile context into your main chat, and a delivery target. Creating automations requires operator.admin.

# Daily pulse, weekdays 07:40
openclaw automations create "40 7 * * 1-5" \
  "Run the gsc-monitor skill: daily pulse." \
  --name "GSC daily pulse" \
  --tz "Europe/Amsterdam" \
  --session isolated \
  --announce --channel slack --to "channel:C0123456789"

# Weekly review, Monday 08:10
openclaw automations create "10 8 * * 1" \
  "Run the gsc-monitor skill: weekly review." \
  --name "GSC weekly review" \
  --tz "Europe/Amsterdam" \
  --session isolated \
  --announce --channel slack --to "channel:C0123456789"

# Monthly outlook, 3rd of the month (so the previous month is complete)
openclaw automations create "20 8 3 * *" \
  "Run the gsc-monitor skill: monthly outlook." \
  --name "GSC monthly outlook" \
  --tz "Europe/Amsterdam" \
  --session isolated \
  --announce --channel telegram --to "-1001234567890"

Replace the channel IDs with your own. If the findings should land in a ticketing system rather than a chat, swap --announce for --webhook <url>, which POSTs the finished run to your endpoint. The schedules avoid the top of the hour on purpose: plenty of other jobs fire at :00.

What each cadence checks, and why that cadence

Cadence Catches Why not more often
DailySharp breaks: a deploy that noindexed a section, a page dropping out of the index, a traffic step changeSearch Console updates roughly daily; checking hourly sees the same numbers
WeeklyRanking moves, decay, cannibalisation, striking-distance winsDaily rank noise is larger than most real moves; a week smooths weekday effects
MonthlyTrend, seasonality vs last year, brand vs non-brand, AI-assistant referralsThese are planning inputs, and they need complete months

A typical daily run makes three to five tool calls and a weekly run five to eight, comfortably inside the MCP surface's limits of 60 calls a minute and 1,000 an hour. The cost to watch is model tokens, not GSC Wizard calls, which is one more reason the skill asks for short output.

Why not Heartbeat?

OpenClaw's Heartbeat runs periodic agent turns in your main session, every 30 minutes by default. It is the right tool for "keep an eye on my inbox". It is the wrong one for Search Console: the data does not change every half hour, each turn spends tokens, and SEO output would crowd your main conversation. Use dated automations in isolated sessions. Also note that older guides telling you to write a HEARTBEAT.md are out of date: OpenClaw no longer reads that file.

Tuning after two weeks

  • Count the alerts you acted on. If the daily pulse fired five times and you ignored four, raise the threshold in the skill ("only anomalies over 20% on pages with 100+ weekly clicks").
  • Pin the property and filters. If you have several properties, name the exact site URL in the skill, and use a saved filter for the sections you care about rather than letting the agent decide.
  • Record your own changes. The agent explains drops better when it knows what you shipped. Add annotations in GSC Wizard when you deploy; the weekly review can read them. Writing annotations from the agent needs a separate write key. Keep it out of this read-only job.
  • Keep the browser out of this agent. If you want the agent to also open the affected pages, run that as a separate agent. OpenClaw's prompt-injection guidance recommends keeping web-reading tools away from agents that hold credentials.

Want the agent to go beyond reporting and actively keep the site lean (internal links, pruning, deindexed pages)? That routine is on the daily SEO agent page and adapts to an OpenClaw skill the same way. For the rules that keep any of this safe, read OpenClaw SEO best practices.

Frequently asked questions

Heartbeat or automation?

Automation. Heartbeat runs every 30 minutes in the main session by default, far more often than Search Console data changes.

How fresh is the data?

Search Console's finalised figures trail by about two to three days. The skill compares complete days only, so it does not alert on partial data.

Can the agent change my site?

Not with a read key. Mutation tools reject it before they run. Give any write job its own key and an approval step.

Do I need OpenClaw just for alerts?

No. GSC Wizard sends traffic alerts and scheduled reports to Slack, Teams and webhooks on its own. OpenClaw earns its place when you want the change investigated and explained, not just flagged.

Written by Jan-Willem Bobbink · Published October 5, 2026 · OpenClaw commands checked against docs.openclaw.ai on the same date