MCPInstall

serp-analyzer

Analyze Google search results (SERP) for any keyword. Use when the user says "analyze the SERP", "what ranks for", "SERP analysis", "competitive analysis for keyword", "content brief", "what's ranking", "search results for", "who ranks for", or asks about ranking content patterns for a keyword.

Installs
442
Last 24h
—
Trending rank
—
Security
Not audited

Install

Works with every agent the skills CLI supports.

npx skills add https://github.com/openclaudia/openclaudia-skills --skill serp-analyzer
  1. 01

    Install

    Run the command in your project. The CLI asks which agents to install for.

  2. 02

    Describe the task

    Ask your agent for something this skill covers. It loads serp-analyzer automatically when relevant.

  3. 03

    Review the result

    The agent follows the SKILL.md steps, scripts and references bundled with the skill.

SKILL.md

The instructions your agent reads when the skill is triggered.

SERP Analyzer Skill

You are an expert SERP analyst. Given a target keyword, analyze what currently ranks in Google, identify content patterns, and produce an actionable content brief for outranking the competition.

Prerequisites

Optional API keys for enriched data (the skill can work without any of them using web search):

  • SEMRUSH_API_KEY - for keyword and organic results data
  • SERPAPI_API_KEY - for real-time Google SERP data including SERP features
  • DATAFORSEO_LOGIN and DATAFORSEO_PASSWORD - for advanced SERP data
  • SERPINGAPI_API_KEY - for real-time Google SERP data (free tier available)

Analysis Process

Step 1: Collect SERP Data

Use multiple data sources to build a complete SERP picture:

Method A: SemRush API (if available)

# Get organic results for keyword
https://api.semrush.com/?type=phrase_organic&key={KEY}&phrase={keyword}&database=us&export_columns=Dn,Ur,Fk,Fp&display_limit=20

Columns: Dn=Domain, Ur=URL, Fk=SERP Features, Fp=Position

Method B: Web Search (always do this) Use the WebSearch tool to search for the exact keyword. This gives you real-time SERP data.

Method C: Fetch top results Use WebFetch on the top 5-10 ranking URLs to analyze actual content.

Method D: SerpAPI (if SERPAPI_API_KEY available)

Real-time Google SERP data with structured SERP features:

# Real-time Google SERP data via SerpAPI
curl -s "https://serpapi.com/search.json?q={keyword}&api_key=${SERPAPI_API_KEY}&num=20&gl=us&hl=en"

The JSON response includes:

  • organic_results - Array of organic listings with position, title, link, snippet, displayed_link
  • related_questions - People Also Ask questions with question, snippet, title, link
  • knowledge_graph - Knowledge panel data with title, description, entity_type, and attributes
  • shopping_results - Product listings (if present) with title, price, link, source
  • local_results - Local Pack listings (if present) with title, address, rating, reviews
  • inline_images - Image pack results
  • answer_box - Featured snippet content with type (paragraph, list, table), snippet, title
  • related_searches - Related search queries

Parse example:

# Extract organic results
curl -s "https://serpapi.com/search.json?q={keyword}&api_key=${SERPAPI_API_KEY}&num=20&gl=us&hl=en" | \
  jq '.organic_results[] | {position, title, link, snippet}'

# Extract People Also Ask questions
curl -s "https://serpapi.com/search.json?q={keyword}&api_key=${SERPAPI_API_KEY}&num=20&gl=us&hl=en" | \
  jq '.related_questions[] | {question, snippet}'

# Check for knowledge graph
curl -s "https://serpapi.com/search.json?q={keyword}&api_key=${SERPAPI_API_KEY}&num=20&gl=us&hl=en" | \
  jq '.knowledge_graph | {title, description, entity_type}'

SerpAPI is especially useful for mapping SERP features in Step 2, as it returns structured data for every feature type.

Method E: DataForSEO (if DATAFORSEO_LOGIN and DATAFORSEO_PASSWORD available)

Advanced SERP data with detailed item types and ranking metrics:

# DataForSEO SERP API
curl -s -X POST "https://api.dataforseo.com/v3/serp/google/organic/live/advanced" \
  -H "Authorization: Basic $(echo -n '${DATAFORSEO_LOGIN}:${DATAFORSEO_PASSWORD}' | base64)" \
  -H "Content-Type: application/json" \
  -d '[{"keyword": "{keyword}", "location_code": 2840, "language_code": "en"}]'

The response provides:

  • result[0].items - Array of all SERP items, each with a type field:
    • "organic" - Standard organic results with url, title, description, rank_group, rank_absolute
    • "featured_snippet" - Featured snippet with description, url, type (paragraph/list/table)
    • "people_also_ask" - PAA questions with items[].title (the questions)
    • "knowledge_graph" - Knowledge panel data
    • "local_pack" - Local results
    • "shopping" - Shopping results
    • "video" - Video carousel items
    • "images" - Image pack
    • "related_searches" - Related search suggestions
  • result[0].item_types - Array listing which SERP feature types are present (useful for Step 2 feature mapping)
  • result[0].se_results_count - Total search results count

Location codes: 2840 = US, 2826 = UK, 2124 = Canada, 2036 = Australia. Change location_code for geo-targeted analysis.

Method F: Serping API (if SERPINGAPI_API_KEY available)

Real-time Google SERP data as Serper-style JSON from a single endpoint. Get a key at https://serpingapi.com (free tier available) and set SERPINGAPI_API_KEY.

# Real-time Google SERP data via Serping API (POST, JSON body)
curl -s -X POST "https://api.serpingapi.com/v1/search" \
  -H "X-API-Key: ${SERPINGAPI_API_KEY}" \
  -H "Content-Type: application/json" \
  -d '{"q": "{keyword}", "gl": "us", "hl": "en", "num": 20}'

The JSON response includes (sections appear only when Google returns them):

  • organic - Array of organic listings with position, title, link, snippet (sometimes sitelinks, date, rating)
  • peopleAlsoAsk - People Also Ask questions with question, snippet, title, link
  • answerBox - Featured snippet / direct answer
  • knowledgeGraph - Knowledge panel data with title, type, description, attributes
  • relatedSearches - Related search queries as { "query": ... }
  • searchParameters - Echo of the parameters the search ran with

Parse example:

# Extract organic results
curl -s -X POST "https://api.serpingapi.com/v1/search" \
  -H "X-API-Key: ${SERPINGAPI_API_KEY}" -H "Content-Type: application/json" \
  -d '{"q": "{keyword}", "gl": "us", "hl": "en", "num": 20}' | \
  jq '.organic[] | {position, title, link, snippet}'

# Extract People Also Ask questions
curl -s -X POST "https://api.serpingapi.com/v1/search" \
  -H "X-API-Key: ${SERPINGAPI_API_KEY}" -H "Content-Type: application/json" \
  -d '{"q": "{keyword}", "gl": "us", "hl": "en", "num": 20}' | \
  jq '.peopleAlsoAsk[] | {question, snippet}'

# Check for featured snippet / knowledge graph
curl -s -X POST "https://api.serpingapi.com/v1/search" \
  -H "X-API-Key: ${SERPINGAPI_API_KEY}" -H "Content-Type: application/json" \
  -d '{"q": "{keyword}", "gl": "us", "hl": "en", "num": 20}' | \
  jq '{answerBox, knowledgeGraph: (.knowledgeGraph | {title, type, description})}'

Optional parameters: location (e.g. "Seattle, Washington, United States"), page (starting at 1), tbs for a time filter (qdr:d day, qdr:w week, qdr:m month, qdr:y year). Web search only — no ads, shopping, or local pack sections.

Errors come back as {"error": {"code": "...", "message": "..."}}: 401 invalid_api_key means the key is wrong or revoked; 429 quota_exceeded means the monthly quota is used up (resets on the 1st, UTC). In either case tell the user the specific error and fall back to Method B.

Step 2: Map SERP Features

Document every SERP feature present for this keyword:

FeaturePresent?Who owns it?Can you win it?
Featured SnippetYes/No{domain}{assessment}
People Also AskYes/No{list questions}-
Knowledge PanelYes/No{entity}-
Image PackYes/No{position in SERP}{assessment}
Video CarouselYes/No{platforms}{assessment}
Local PackYes/No-{assessment}
Shopping ResultsYes/No-{assessment}
News ResultsYes/No{sources}{assessment}
SitelinksYes/No{domain}-
Reviews/StarsYes/No{domains}{assessment}
FAQ Rich ResultsYes/No{domains}{assessment}
BreadcrumbsYes/No{domains}-

SERP Intent Signal Analysis:

  • Mostly blog posts/guides = Informational intent
  • Mostly product/service pages = Transactional intent
  • Mix of reviews + product pages = Commercial investigation
  • Brand homepage + login pages = Navigational intent
  • Featured snippet present = Strong informational component

Step 3: Analyze Top 10 Results

For each of the top 10 organic results, fetch and analyze:

FactorWhat to measure
URLFull URL
DomainDomain authority/reputation
Title tagExact title, length, keyword placement
Meta descriptionExact description, length, call-to-action
Content typeBlog post, landing page, tool, directory, video, etc.
Word countTotal content length
Heading structureH1, number of H2s/H3s, heading keywords
Content formatListicle, how-to, comparison, guide, definition, etc.
VisualsNumber of images, videos, infographics, tables
DatePublished date, last updated date
AuthorNamed author, credentials shown
Unique angleWhat differentiates this from others
Internal linksNumber of internal links
External linksNumber of outbound links, sources cited
Schema markupTypes of structured data used
Reading levelApproximate Flesch-Kincaid grade level

Step 4: Identify Patterns

After analyzing all top 10 results, find commonalities:

Content Pattern Analysis:

## Content Patterns for "{keyword}"

### Dominant Content Type: {type}
{X} of 10 results are {blog posts/landing pages/tools/etc.}

### Average Metrics:
- Word count: {average} (range: {min}-{max})
- Number of headings: {average}
- Number of images: {average}
- Number of links (internal): {average}
- Number of links (external): {average}

### Common Topics Covered:
1. {topic} - covered by {X}/10 results
2. {topic} - covered by {X}/10 results
3. {topic} - covered by {X}/10 results
...

### Common H2 Headings:
1. "{heading}" or similar - used by {X}/10
2. "{heading}" or similar - used by {X}/10
...

### Featured Snippet Format:
Type: {paragraph/list/table/video}
Content: {what the snippet shows}
How to win it: {specific advice}

Step 5: Find Content Gaps

Identify what the top results are MISSING:

  • Topics mentioned by only 1-2 results (opportunity to be comprehensive)
  • Outdated information (opportunity for freshness)
  • Missing media types (no videos, no infographics, no interactive tools)
  • Missing perspectives (no expert quotes, no data, no case studies)
  • Unanswered "People Also Ask" questions
  • Missing schema markup types
  • Poor user experience (slow, no mobile optimization, intrusive ads)

Step 6: Analyze Competitive Positioning

For each top 5 competitor, create a positioning map:

Competitor 1 ({domain}): {Positioning summary - e.g., "Beginner-friendly, surface-level guide"}
  Strengths: {what they do well}
  Weaknesses: {what they miss or do poorly}

Competitor 2 ({domain}): {Positioning summary}
  Strengths: ...
  Weaknesses: ...

Find your differentiation angle:

  • Can you be more comprehensive? (10x content)
  • Can you be more actionable? (templates, tools, checklists)
  • Can you be more current? (latest data, 2025 updates)
  • Can you be more authoritative? (expert interviews, original research)
  • Can you serve a different sub-audience? (beginners vs. advanced)
  • Can you provide a unique format? (interactive tool vs. blog post)

Step 7: Generate Content Brief

Produce a complete content brief based on the analysis:

# Content Brief: {Target Keyword}

## Target Keyword
- **Primary:** {keyword} (Volume: {vol}, KD: {kd})
- **Secondary:** {keyword2}, {keyword3}, {keyword4}
- **Long-tail:** {keyword5}, {keyword6}

## Search Intent
**Primary intent:** {Informational/Commercial/Transactional}
**User goal:** {What the searcher wants to accomplish}
**Stage in funnel:** {Awareness/Consideration/Decision}

## Content Specifications

| Spec | Recommendation | Reasoning |
|------|---------------|-----------|
| Content type | {blog/landing/tool} | {X}/10 results are this type |
| Word count | {target} words | Top 3 average {avg}, aim for {target} |
| Format | {listicle/how-to/guide} | Dominant format in SERP |
| Reading level | Grade {X} | Match audience expectation |
| Visuals | {X} images, {X} custom graphics | Top results average {Y} |
| Videos | {Yes/No - embed or create} | {Reasoning} |

## Title Tag Recommendations
Write 3 options following these patterns from top results:
1. "{Title option 1}" ({length} chars)
2. "{Title option 2}" ({length} chars)
3. "{Title option 3}" ({length} chars)

## Meta Description Recommendations
1. "{Meta option 1}" ({length} chars)
2. "{Meta option 2}" ({length} chars)

## Recommended Outline

### H1: {Heading}

### H2: {Section 1 - from pattern analysis}
- Key points to cover: {points}
- Data/examples needed: {specifics}

### H2: {Section 2}
- Key points: ...

### H2: {Section 3}
...

### H2: FAQ
- {Question from People Also Ask}
- {Question from People Also Ask}
- {Question from gap analysis}

## Content Gaps to Exploit
1. **{Gap}** - Only {X}/10 competitors cover this. Include {specific content}.
2. **{Gap}** - No competitors have {data/tool/visual}. Create {specific asset}.
3. **{Gap}** - Top results are outdated on {topic}. Include {current data}.

## Schema Markup to Include
- {Type}: {Brief description of properties}
- {Type}: {Brief description}

## Internal Linking Targets
- Link TO this page from: {related pages on your site}
- Link FROM this page to: {related pages on your site}

## Differentiation Strategy
{2-3 sentences on how this content will stand out from current SERP}

Output Format

Always present:

  1. SERP Overview - Feature map and intent analysis
  2. Top 10 Analysis Table - Key metrics for each result
  3. Pattern Summary - What the SERP rewards
  4. Content Gaps - Opportunities to differentiate
  5. Content Brief - Complete brief ready for a writer

Notes

  • If you cannot fetch a URL (paywall, auth, blocking), note it and work with available data.
  • Always note the date of analysis. SERPs change; this is a snapshot.
  • For local keywords, note if the Local Pack dominates (this changes the strategy significantly).
  • If the SERP shows extreme domain authority concentration (all DR 90+ sites), flag this as a difficulty indicator regardless of KD score.
  • For "Your Money or Your Life" (YMYL) topics (health, finance, legal), note the elevated E-E-A-T requirements.

FAQ

What does the serp-analyzer skill do?

Analyze Google search results (SERP) for any keyword. Use when the user says "analyze the SERP", "what ranks for", "SERP analysis", "competitive analysis for keyword", "content brief", "what's ranking", "search results for", "who ranks for", or asks about ranking content patterns for a keyword.

How do I install serp-analyzer?

Run npx skills add https://github.com/openclaudia/openclaudia-skills --skill serp-analyzer in your project. The skills CLI detects the agents you use and copies the skill into the right folder. For Claude Code you can also place the skill folder at ~/.claude/skills/serp-analyzer/ (personal) or .claude/skills/serp-analyzer/ (project).

Which AI agents can use serp-analyzer?

Any agent that supports the open Agent Skills format (a folder with a SKILL.md file), including Claude Code, Codex, Cursor, GitHub Copilot, Gemini CLI, Windsurf, Cline, OpenCode and more.

Is serp-analyzer safe to install?

No partner security audit is available yet. Skills can run commands and scripts, so read the SKILL.md and any bundled files before installing.

Who maintains serp-analyzer?

It is published by openclaudia in openclaudia/openclaudia-skills. It has 442 recorded installs.

More from openclaudia/openclaudia-skills

View all →

feishu-lark

openclaudia/openclaudia-skills

Send messages and interactive cards to Feishu (飞书) and Lark channels via webhooks or Bot API. Create rich-text announcements, marketing updates, and team notifications. Trigger phrases: "post to feishu", "feishu message", "lark message", "feishu webhook", "lark webhook", "send to feishu", "send to lark", "feishu bot", "lark bot", "飞书", "飞书机器人".

facebook-ads

openclaudia/openclaudia-skills

Create Facebook and Meta ad campaigns, write ad copy, define audiences, and plan budgets. Use when the user asks about Facebook Ads, Instagram Ads, Meta Ads, social media advertising, carousel ads, retargeting campaigns, lookalike audiences, or ad creative for Meta platforms. Trigger phrases include "Facebook Ads", "Meta Ads", "Instagram Ads", "social ads", "carousel ad", "lookalike audience", "retargeting", "ad creative", "Facebook campaign", "boost post".

Marketing & SEO1K installs

video-ad-analysis

openclaudia/openclaudia-skills

Deconstruct and analyze video ad creatives for marketing insights. Use when the user says "analyze this ad", "ad creative analysis", "deconstruct this video ad", "video ad review", "ad breakdown", "why does this ad work", "creative analysis", or provides a video ad URL and asks for marketing insights.

Media & Creative718 installs

content-calendar

openclaudia/openclaudia-skills

Plan and schedule social media and content marketing calendars. Monthly and weekly planning, content mix ratios, theme days, platform-specific timing, and batch creation workflows. Trigger phrases: "content calendar", "posting schedule", "social media calendar", "content plan", "weekly schedule", "monthly content plan", "social media schedule", "when to post", "content cadence", "batch content", "plan my posts".

youtube-analytics

openclaudia/openclaudia-skills

Analyze YouTube channel and video performance using the YouTube Data API. Use when the user says "YouTube analytics", "check my channel", "video performance", "YouTube stats", "channel analysis", "compare YouTube channels", "YouTube SEO", or asks about YouTube metrics, views, subscribers, or content performance.

Data & Databases588 installs

google-ads

openclaudia/openclaudia-skills

Write Google Ads copy and build campaign structures. Use when the user asks to create Google Ads, write ad copy for search or display, set up PPC campaigns, optimize Quality Score, choose bidding strategies, or generate responsive search ads. Trigger phrases include "Google Ads", "PPC", "search ads", "display ads", "Performance Max", "ad copy", "headlines and descriptions", "keyword match types", "ad extensions", "Quality Score".

Marketing & SEO562 installs

Popular other skills

View category →

hyperframes-cli

heygen-com/hyperframes

The HyperFrames CLI by job - scaffold, check, look at frames, edit the timeline, preview, render locally or in the cloud, publish, project history - plus reading its JSON and recovering from build or render failures.

1.3M installs

triage

mattpocock/skills

Move issues and external PRs through a state machine of triage roles, categorise, verify, grill if needed, and write agent-ready briefs.

1M installs

ask-matt

mattpocock/skills

Ask which skill or flow fits your situation. A router over the skills in this repo.

778.4K installs

to-questionnaire

mattpocock/skills

Turn a decision you can't fully answer into a questionnaire for someone else to fill in.

508.9K installs

wait-what

mattpocock/skills

Stop. That last message did not land: re-pitch it.

459.7K installs

loop-me

mattpocock/skills

Grill me about specs for the workflows I want to build, within this workspace.

447.9K installs