Chase down new Semrush Site Audit errors after every crawl

After each weekly Semrush crawl, the errors that are new since the last one, the pages affected, and a question: send them to the developers?

Runs
Wednesdays at 8:00
Uses
Semrush
Posts
Asks you

From your apps to your board

How the skill works: your agent reads last two crawls from Semrush; site audit project id from What you tell it, wednesdays at 8:00, and gives you a question for you and a telegram ping and the report in the chat.

Reads

  • SemrushLast two crawls
  • What you tell itSite Audit project ID
reads
Your agentClaude Code, Codex, Cursor or GeminiWednesdays at 8:00
posts

You get

  • A question for youOn your board, answered with a tap
  • A Telegram pingOnly when it needs your answer, if you connect Telegram
  • The report in the chatEvery run, with or without Briefkin

What you get

  • Site Health score now and after the previous crawl.
  • New and growing errors: issue, pages affected, change since the last crawl.
  • Example URLs for each, with the detail (status code, broken link target).
  • Who fixes what: developer issues first, then content issues.
  • The ask: draft a ticket, fix it yourself, recrawl, or leave it.

The card on the right is a sample. Yours shows your own numbers and updates in place every run.

What lands on your board

example.comSemrush site audit errors · Claude Code

12 new crawl errors since last week

7 broken internal links, 3 pages returning 5xx and 2 duplicate title tags are new since last week. Shall I draft a ticket for the developers with the example URLs?

Tuesday's crawl found 12 new errors across 3 issues, and Site Health fell from 91% to 87%. All three 5xx pages sit under /integrations/, so one template is the likely cause.

IssuePagesExample
Broken internal links7/blog/invoice-vs-bill → /guides/old-vat-rules (404)
5xx errors3/integrations/xero (502)
Duplicate title tags2/templates/estimate, /templates/quote
Site Health 87%For developers: 10For content: 2
Resolve
An example with made-up numbers. Your agent posts your real ones.

What it does

A Site Audit report with 140 errors is not a to-do list; most of them were there last month and the month before. What matters after a crawl is the difference: the broken links a content update just introduced, the pages that started returning 5xx, the duplicate titles from a new template.

The agent reads the latest snapshot and the one before through the Semrush API, keeps only errors that are new or growing, and asks whether to hand them to the developers with example URLs attached. Warnings and notices stay out unless one of them jumps.

How it works

  1. 1Find the last two crawls

    Call the Site Audit API GET /reports/v1/projects/{project_id}/siteaudit/snapshots and take the two most recent snapshot IDs. siteaudit/info gives the Site Health score and error counts for the latest crawl.

  2. 2Compare the issues

    Read each snapshot with siteaudit/snapshot?snapshot_id=<id> and match issues by ID, with titles from siteaudit/meta/issues. An error is new when its count went from zero to anything, and growing when it rose by 20% or more.

  3. 3Get example pages

    For each new or growing error, request its pages from the snapshot's issue report (siteaudit/snapshot/{snapshot_id}/issue/{issue_id}) and keep up to 5 URLs with the detail, such as the broken link target or the status code.

  4. 4

    4Sort by who fixes it

    Server errors, redirect chains, broken internal links and blocked resources go to developers; duplicate titles, missing descriptions and thin pages go to content. Developer issues come first, since one template bug can touch hundreds of pages.

  5. 5

    5Ask what to do

    Post an action card with the new errors, their counts and example URLs, and ask whether to draft a ticket. A warning or notice only appears if its count doubled.

  6. Post it to the board

    With BRIEFKIN_TOKEN set, the agent sends the result as one card that updates in place every run. Without it, you get the report in the chat.

Install and run it

Pick your agent, where the data comes from and how to schedule it; the commands below follow.

Agent
Data
Schedule
  1. Install the skill

    One command. It puts the SKILL.md in ~/.claude/skills and in ~/.agents/skills, which Codex, Cursor, Gemini CLI, Copilot CLI and OpenCode read too.

    shellcurl -fsSL https://briefkin.dev/skills/semrush-site-audit-errors/install | sh
  2. Run it

    Ask Claude Code:

    promptRun the semrush-site-audit-errors skill

    Or paste the prompt instead of installing:

    promptCompare the last two crawls of my Semrush Site Audit project [project_id] with the Semrush API: list snapshots (siteaudit/snapshots), read both snapshots and match issues by ID (titles from siteaudit/meta/issues). Show the Site Health score for both. List errors that are new (were zero) or grew by 20% or more, with the number of pages and up to 5 example URLs each, including the status code or broken link target. Ignore warnings and notices unless one doubled. Split the list into developer fixes and content fixes, and ask me whether to draft a ticket for the developers.
  3. Put it on a schedule

    Wednesdays at 8:00, from cron on any machine where Claude Code is signed in:

    crontab0 8 * * 3 claude -p "Run the semrush-site-audit-errors skill"

    Add it with crontab -e. A laptop asleep at that time runs it when it wakes if you use launchd or Task Scheduler instead; GitHub Actions works for the API route.

  4. Send it to your board

    Connect Briefkin once with curl -fsSL https://briefkin.dev/install | sh and every run lands on your board as a question for you. How setup works

View the SKILL.mdRaw file
SKILL.md---
name: semrush-site-audit-errors
description: "After each weekly Semrush crawl, the errors that are new since the last one, the pages affected, and a question: send them to the developers?. Use when the user asks for this, or when it runs on a schedule."
---

# Semrush site audit errors

After each weekly Semrush crawl, the errors that are new since the last one, the pages affected, and a question: send them to the developers?

A Site Audit report with 140 errors is not a to-do list; most of them were there last month and the month before. What matters after a crawl is the difference: the broken links a content update just introduced, the pages that started returning 5xx, the duplicate titles from a new template.

The agent reads the latest snapshot and the one before through the Semrush API, keeps only errors that are new or growing, and asks whether to hand them to the developers with example URLs attached. Warnings and notices stay out unless one of them jumps.

## Two ways to get the data

Use the API or MCP route when you have an MCP server, a CLI or an API token for the app. Otherwise, if you can drive a browser the user is signed in to (Claude in Chrome, a Playwright or Chrome DevTools MCP server), use the browser route. Say which one you used.

## Route A: API or MCP server

### What you need

- A Semrush Site Audit project for the site, crawling on a weekly schedule, and its project ID.
- Semrush API access with the key in `SEMRUSH_API_KEY`; the Projects API needs a Business subscription and API units. The official Semrush MCP server does not list Site Audit, so use the API unless yours exposes it.

If something is missing, say what and stop; do not invent numbers.

### Steps

1. **Find the last two crawls** (Semrush): Call the Site Audit API `GET /reports/v1/projects/{project_id}/siteaudit/snapshots` and take the two most recent snapshot IDs. `siteaudit/info` gives the Site Health score and error counts for the latest crawl.
2. **Compare the issues** (Semrush): Read each snapshot with `siteaudit/snapshot?snapshot_id=<id>` and match issues by ID, with titles from `siteaudit/meta/issues`. An error is new when its count went from zero to anything, and growing when it rose by 20% or more.
3. **Get example pages** (Semrush): For each new or growing error, request its pages from the snapshot's issue report (`siteaudit/snapshot/{snapshot_id}/issue/{issue_id}`) and keep up to 5 URLs with the detail, such as the broken link target or the status code.
4. **Sort by who fixes it**: Server errors, redirect chains, broken internal links and blocked resources go to developers; duplicate titles, missing descriptions and thin pages go to content. Developer issues come first, since one template bug can touch hundreds of pages.
5. **Ask what to do**: Post an action card with the new errors, their counts and example URLs, and ask whether to draft a ticket. A warning or notice only appears if its count doubled.

## Route B: the browser

### What you need

- Signed in to Semrush with access to the Site Audit project; a shared project with view rights is enough.

If something is missing, say what and stop; do not invent numbers.

### Steps

Start at https://www.semrush.com/siteaudit/. The user is signed in already; never type passwords or codes, and ask if a sign-in page appears.

1. **Open the latest crawl**: Open `https://www.semrush.com/siteaudit/` and click the project for `example.com`. On the `Overview` tab read `Site Health`, the error count and the number of crawled pages, with the crawl date.
2. **Compare with the crawl before**: Open the `Compare Crawls` tab, set the latest crawl against the previous one, and read the Site Health and error counts for both plus the new and fixed issue counts.
3. **List new and growing errors**: On the `Issues` tab filter to `Errors`. Issues marked new since the last crawl, and those whose count rose by 20% or more, are the list; ignore warnings and notices unless one doubled.
4. **Collect example URLs**: Click the page count next to each issue to open its pages and copy up to 5 URLs with the detail (status code, broken link target). `Why and how to fix it` gives the one-line explanation.
5. **Sort by owner and ask**: Put server errors, redirect chains, broken internal links and blocked resources under developers, and titles, descriptions and thin pages under content. Then ask whether to draft a ticket.

Note: Compare Crawls needs at least two crawls in the project, and Semrush keeps a limited number of past crawls. Issue page lists paginate; use the Export button on an issue when it touches hundreds of URLs.

## The report

- **Site Health** score now and after the previous crawl.
- **New and growing errors**: issue, pages affected, change since the last crawl.
- **Example URLs** for each, with the detail (status code, broken link target).
- **Who fixes what**: developer issues first, then content issues.
- The ask: draft a ticket, fix it yourself, recrawl, or leave it.

## Post it to Briefkin

When `BRIEFKIN_TOKEN` is set, or `~/.config/briefkin/env` exists (the installer from https://briefkin.dev/docs writes it), also send the result to the user's Briefkin board as one card. Keep the `item_key` the same on every run so the card updates in place, use a new `event_id` per run, and put today's real numbers in place of the example ones. If the request fails, say so once and carry on.

```bash
[ -n "${BRIEFKIN_TOKEN:-}" ] || . ~/.config/briefkin/env
curl -sS -X POST "${BRIEFKIN_URL:-https://briefkin.dev}/v1/events" \
  -H "authorization: Bearer $BRIEFKIN_TOKEN" \
  -H "content-type: application/json" \
  -d @- <<'JSON'
{
  "v": 1,
  "event_id": "semrush-site-audit-errors/<date of this run, e.g. 2026-10-16>",
  "item_key": "semrush-site-audit-errors",
  "project": "example.com",
  "source": "Semrush site audit errors skill",
  "kind": "action",
  "title": "12 new crawl errors since last week",
  "summary": "Tuesday's crawl found **12 new errors** across 3 issues, and Site Health fell from 91% to 87%. All three 5xx pages sit under /integrations/, so one template is the likely cause.",
  "action": {
    "request": "7 broken internal links, 3 pages returning 5xx and 2 duplicate title tags are new since last week. Shall I draft a ticket for the developers with the example URLs?",
    "options": [
      "Draft the ticket",
      "I'll fix them",
      "Recrawl first",
      "Leave them"
    ]
  },
  "widget": [
    {
      "type": "Table",
      "props": {
        "columns": [
          "Issue",
          "Pages",
          "Example"
        ],
        "align": [
          "left",
          "right",
          "left"
        ],
        "rows": [
          [
            "Broken internal links",
            7,
            "/blog/invoice-vs-bill → /guides/old-vat-rules (404)"
          ],
          [
            "5xx errors",
            3,
            "/integrations/xero (502)"
          ],
          [
            "Duplicate title tags",
            2,
            "/templates/estimate, /templates/quote"
          ]
        ]
      }
    },
    {
      "type": "Badges",
      "props": {
        "items": [
          {
            "label": "Site Health 87%",
            "tone": "warn"
          },
          {
            "label": "For developers: 10",
            "tone": "bad"
          },
          {
            "label": "For content: 2",
            "tone": "info"
          }
        ]
      }
    }
  ]
}
JSON
```

Widgets come from the Briefkin catalog (https://briefkin.dev/v1/catalog). Without a token, just give the user the report.

## Run it on a schedule

Suggested: Wednesdays at 8:00 (`0 8 * * 3`). From cron, with the agent signed in on that machine:

```bash
0 8 * * 3 claude -p "Run the semrush-site-audit-errors skill"
# Codex: codex exec, Gemini CLI: gemini -p, Copilot CLI: copilot -p, OpenCode: opencode run
```

Or use the agent's own scheduler (Claude Code routines, Codex automations, Claude or ChatGPT scheduled tasks): https://briefkin.dev/skills/semrush-site-audit-errors#schedule

Source: https://briefkin.dev/skills/semrush-site-audit-errors

What your agent needs

  • A Semrush Site Audit project for the site, crawling on a weekly schedule, and its project ID.

  • Semrush API access with the key in SEMRUSH_API_KEY; the Projects API needs a Business subscription and API units. The official Semrush MCP server does not list Site Audit, so use the API unless yours exposes it.

Connecting Semrush

  1. Semrush MCP, Semrush's official remote server at https://mcp.semrush.com/v2/mcp. In Claude it is the Semrush app under connectors; in other agents add the URL and sign in with OAuth, or send Authorization: Apikey <key> where OAuth isn't supported (docs).
  2. API with a key. Store the key in SEMRUSH_API_KEY and call the SEO API, for example https://api.semrush.com/?type=domain_organic&domain=example.com&database=us&display_limit=100&key=.... Some plans include 50,000 API units; larger unit packages are sold separately.

Semrush MCP reads Projects API data but can't create or change projects, which keeps Position Tracking and Site Audit settings out of the agent's reach.

Questions

Can it start a crawl itself?

The API has a launch call (siteaudit/launch), but it is better to let Semrush crawl on its own schedule and run this skill the morning after, so every comparison covers the same pages with the same crawl settings.

Errors jumped and nobody changed anything. Why?

Check the crawl settings first: a higher page limit, a different crawl source (sitemap instead of the home page) or another user agent changes what Semrush finds. The agent compares the number of pages crawled in both snapshots and says when the crawl itself changed.

Do I need Briefkin to use the Semrush site audit errors skill?

No. The skill runs with your own agent and gives you the report in the chat. With a Briefkin token set, each run also posts it to your board as a asks you, so you can glance at it instead of asking again.

Which agents can run it?

Claude Code, Codex, Cursor, Gemini CLI, GitHub Copilot CLI, OpenCode, Windsurf and Amp all read SKILL.md files. The install command puts it in ~/.claude/skills and ~/.agents/skills, where they look. ChatGPT, the Claude app and Grok take the prompt instead. Pick your agent under "Install and run it" and the commands change to match.

Can it work without an API or MCP server, from my browser?

Yes. Switch the data source to "Your browser" and the steps change to the Semrush pages themselves: the agent opens www.semrush.com/siteaudit in a browser you are signed in to and reads the numbers off the page. Claude Code, Codex, Cursor, Claude app and ChatGPT can drive a browser out of the box; Gemini CLI, Copilot CLI and OpenCode need a Playwright or Chrome DevTools MCP server first. It is slower than the API and needs you signed in, so it suits a report you run by hand or from a scheduler on your own computer.

Answer your agents from one board, or from Telegram

Skills are free to use with any agent. Briefkin is where their results land: one board for every report, number and question your agents send, with a ping when something needs you.

Free during the open beta. No card.