Google Search Console
VKirill/claude-lane-stack
[RU: Google Search Console API, гугл серч консоль, вебмастер гугл, gsc] GSC (Webmasters) API v1 — OAuth 2.0 + service account, searchanalytics.query (dimensions, filter operators, 25k row cap +…
Generate comprehensive SEO analysis reports from Google Search Console data with PDF export.
$ npx skills add LeoYeAI/openclaw-master-skills --skill search-console-report -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install LeoYeAI/openclaw-master-skills search-console-report --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/LeoYeAI/openclaw-master-skills.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/search-console-report .claude/skills/search-console-report && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "search-console-report" agent skill from https://github.com/LeoYeAI/openclaw-master-skills/tree/main/skills/search-console-report into .claude/skills/search-console-report/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "search-console-report", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/LeoYeAI/openclaw-master-skills/tree/main/skills/search-console-reportType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add LeoYeAI/openclaw-master-skills --skill search-console-report -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install LeoYeAI/openclaw-master-skills search-console-report --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/LeoYeAI/openclaw-master-skills.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skills/search-console-report .agents/skills/search-console-report && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "search-console-report" agent skill from https://github.com/LeoYeAI/openclaw-master-skills/tree/main/skills/search-console-report into .agents/skills/search-console-report/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "search-console-report", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add LeoYeAI/openclaw-master-skills --skill search-console-report -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install LeoYeAI/openclaw-master-skills search-console-report --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/LeoYeAI/openclaw-master-skills.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skills/search-console-report .cursor/skills/search-console-report && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "search-console-report" agent skill from https://github.com/LeoYeAI/openclaw-master-skills/tree/main/skills/search-console-report into .cursor/skills/search-console-report/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "search-console-report", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/LeoYeAI/openclaw-master-skills.git --path skills/search-console-report--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add LeoYeAI/openclaw-master-skills --skill search-console-report -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install LeoYeAI/openclaw-master-skills search-console-report --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/LeoYeAI/openclaw-master-skills.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skills/search-console-report .gemini/skills/search-console-report && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "search-console-report" agent skill from https://github.com/LeoYeAI/openclaw-master-skills/tree/main/skills/search-console-report into .gemini/skills/search-console-report/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "search-console-report", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install LeoYeAI/openclaw-master-skills search-console-reportInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add LeoYeAI/openclaw-master-skills --skill search-console-report -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/LeoYeAI/openclaw-master-skills.git skills-src && mkdir -p .github/skills && cp -r skills-src/skills/search-console-report .github/skills/search-console-report && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "search-console-report" agent skill from https://github.com/LeoYeAI/openclaw-master-skills/tree/main/skills/search-console-report into .github/skills/search-console-report/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "search-console-report", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add LeoYeAI/openclaw-master-skills --skill search-console-report -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install LeoYeAI/openclaw-master-skills search-console-report --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/LeoYeAI/openclaw-master-skills.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skills/search-console-report .opencode/skills/search-console-report && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "search-console-report" agent skill from https://github.com/LeoYeAI/openclaw-master-skills/tree/main/skills/search-console-report into .opencode/skills/search-console-report/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "search-console-report", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
search-console-reportGenerate comprehensive SEO analysis reports from Google Search Console data with PDF export.
Search Console Report is an agent skill from LeoYeAI/openclaw-master-skills. Generate comprehensive SEO analysis reports from Google Search Console data with PDF export. Use when the user wants to analyze search performance, get SEO insights, view traffic trends, top pages, top keywords, country/device distribution, or generate a professional PDF report for one or more websites using Google Search Console API. Requires a Google Cloud Service Account JSON key with Search Console read access.
Its SKILL.md is about 4.6k tokens, which your agent loads only when the skill is triggered. The skill folder holds 1 other file (for example `_meta.json`).
It sits in Documents & Office, covering PDF and SEO audit. It works with Google Search Console, Google Cloud and Python. The repository describes itself as: 🧠 Curated collection of 1209+ best OpenClaw skills — weekly updated by MyClaw.ai. The licence is MIT.
12 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit e5199b5. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
pippython3From the folder's file list and the shell code blocks in SKILL.md.
Hosts in commands or code, which the agent is likely to contact:
googleapis.comoauth2.googleapis.comAlso links to:
console.cloud.google.comFrom URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Search Console Report loads about 4.6k tokens when it runs. Until then it costs about 110 tokens; SKILL.md has 1,235 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from LeoYeAI/openclaw-master-skills at commit e5199b5, republished under its MIT licence (© LeoYeAI). 1,235 words, ~4,562 tokens.
.claude/skills/search-console-report/SKILL.md (or your agent's skills folder). This skill also uses 1 other file; get the full folder from GitHub.Generate professional, chart-rich PDF reports from Google Search Console data. Covers traffic trends, top pages, top keywords, country/device distribution, growth analysis, and actionable SEO recommendations.
Before running this skill, verify these requirements:
You need a Google Cloud Service Account JSON key file with access to the Search Console properties. The file looks like:
{
"type": "service_account",
"project_id": "...",
"private_key_id": "...",
"private_key": "-----BEGIN PRIVATE KEY-----\n...",
"client_email": "xxx@project.iam.gserviceaccount.com",
"token_uri": "https://oauth2.googleapis.com/token",
...
}Ask the user for the path to their key file. Common locations: ~/Downloads/*.json, project directory.
If the user doesn't have one yet, guide them through:
The script requires these packages: pyjwt, cryptography, requests, matplotlib, pandas, reportlab.
Set up a virtual environment to avoid system conflicts:
python3 -m venv /tmp/sc-env
/tmp/sc-env/bin/pip install pyjwt cryptography requests matplotlib pandas reportlabIMPORTANT: Always use /tmp/sc-env/bin/python to run scripts, not the system Python.
Timeout warning: Package installation and first matplotlib import can be slow (60-120s). Set bash timeout to 180000ms for these operations.
The PDF uses STHeiti for proper CJK + Latin + symbol rendering. Register it like this:
from reportlab.pdfbase import pdfmetrics
from reportlab.pdfbase.ttfonts import TTFont
pdfmetrics.registerFont(TTFont('CNFont', '/System/Library/Fonts/STHeiti Medium.ttc', subfontIndex=0))
pdfmetrics.registerFont(TTFont('CNFontLight', '/System/Library/Fonts/STHeiti Light.ttc', subfontIndex=0))
pdfmetrics.registerFontFamily('CNFont', normal='CNFontLight', bold='CNFont')CRITICAL font rules:
UnicodeCIDFont('STSong-Light') — it causes English letter spacing to be too narrow and Unicode symbols like • (U+2022) to render as garbage characters (e.g. "煉").TTFont for proper mixed CJK/Latin rendering.fc-list :lang=zh file or look for Noto Sans CJK / WenQuanYi.Ask for or determine:
https://www.example.com/)Use JWT-based Service Account authentication. Here is the exact authentication code:
import json, time, jwt, requests
def get_access_token(key_file):
with open(key_file) as f:
creds = json.load(f)
now = int(time.time())
payload = {
"iss": creds["client_email"],
"scope": "https://www.googleapis.com/auth/webmasters.readonly",
"aud": creds["token_uri"],
"iat": now,
"exp": now + 3600,
}
signed_jwt = jwt.encode(payload, creds["private_key"], algorithm="RS256")
resp = requests.post(creds["token_uri"], data={
"grant_type": "urn:ietf:params:oauth:grant-type:jwt-bearer",
"assertion": signed_jwt,
})
resp.raise_for_status()
return resp.json()["access_token"]Error handling: If authentication fails with 403, the API may not be enabled or the service account may not have Search Console access. Tell the user which to check.
Use the Search Analytics API endpoint for each site. The base query function:
import datetime
END_DATE = datetime.date.today() - datetime.timedelta(days=3) # Data has ~3 day lag
START_DATE = END_DATE - datetime.timedelta(days=89)
def query_sc(token, site_url, dimensions, start=None, end=None, row_limit=100):
"""Query Search Console Search Analytics API.
Args:
token: OAuth2 access token
site_url: Full property URL, e.g. "https://www.example.com/"
dimensions: List of dimensions. Valid values:
- "date" — daily breakdown
- "query" — search keywords
- "page" — page URLs
- "country" — ISO 3166-1 alpha-3 country codes (lowercase)
- "device" — "DESKTOP", "MOBILE", "TABLET"
- "searchAppearance" — rich result types
Can combine: ["query", "page"] for keyword-page matrix
start: Start date (datetime.date). Defaults to START_DATE.
end: End date (datetime.date). Defaults to END_DATE.
row_limit: Max rows (max 25000).
Returns:
List of row dicts with keys: "keys" (list), "clicks", "impressions", "ctr", "position"
Note: "ctr" is a decimal (0.05 = 5%), multiply by 100 for display.
"""
url = f"https://www.googleapis.com/webmasters/v3/sites/{requests.utils.quote(site_url, safe='')}/searchAnalytics/query"
body = {
"startDate": (start or START_DATE).isoformat(),
"endDate": (end or END_DATE).isoformat(),
"dimensions": dimensions,
"rowLimit": row_limit,
}
resp = requests.post(url, headers={"Authorization": f"Bearer {token}"}, json=body)
resp.raise_for_status()
return resp.json().get("rows", [])For each site, fetch ALL of the following data (this is the complete list — do not skip any):
| # | Query | Dimensions | row_limit | Purpose |
|---|---|---|---|---|
| 1 | Daily traffic trend | ["date"] | 25000 | Time series for charts |
| 2 | Top pages | ["page"] | 50 | Most visited pages |
| 3 | Top queries | ["query"] | 50 | Most searched keywords |
| 4 | Country distribution | ["country"] | 30 | Geographic breakdown |
| 5 | Device distribution | ["device"] | 10 | Desktop/Mobile/Tablet split |
| 6 | Search appearance | ["searchAppearance"] | 20 | Rich result types |
| 7 | Query-page combos | ["query", "page"] | 100 | Which keywords drive which pages |
| 8 | Period comparison (first half) | ["page"] with first-half dates | 500 | Growth analysis |
| 9 | Period comparison (second half) | ["page"] with second-half dates | 500 | Growth analysis |
Period comparison logic: Split the date range in half. For each page URL, compare clicks between the two halves. Categorize pages as:
For each site, compute:
daily = site_data["daily_trend"]
total_clicks = sum(d["clicks"] for d in daily)
total_impressions = sum(d["impressions"] for d in daily)
avg_ctr = sum(d["ctr"] for d in daily) / len(daily) # Already *100 if you stored it that way
avg_position = sum(d["position"] for d in daily) / len(daily)
# Trend: compare last 30 days vs first 30 days
if len(daily) >= 60:
first_30_clicks = sum(d["clicks"] for d in daily[:30])
last_30_clicks = sum(d["clicks"] for d in daily[-30:])
click_trend_pct = ((last_30_clicks - first_30_clicks) / max(first_30_clicks, 1)) * 100
# Same for impressionsSave all fetched data to sc_detailed_data.json for reproducibility:
with open(f"{output_dir}/sc_detailed_data.json", "w") as f:
json.dump(all_data, f, ensure_ascii=False, indent=2)IMPORTANT: Always set matplotlib.use('Agg') BEFORE importing pyplot (no display server available).
Generate these charts (save as PNG, dpi=150):
%m-%d, rotated 45 degrees# 7-day moving average calculation
if len(clicks) >= 7:
ma7 = [sum(clicks[max(0,i-6):i+1]) / min(7, i+1) for i in range(len(clicks))]COUNTRY_NAMES = {
'idn': 'Indonesia', 'hkg': 'Hong Kong', 'mac': 'Macau', 'kor': 'South Korea',
'usa': 'United States', 'jpn': 'Japan', 'sgp': 'Singapore', 'mys': 'Malaysia',
'twn': 'Taiwan', 'tha': 'Thailand', 'phl': 'Philippines', 'ind': 'India',
'vnm': 'Vietnam', 'gbr': 'United Kingdom', 'deu': 'Germany', 'fra': 'France',
'aus': 'Australia', 'can': 'Canada', 'bra': 'Brazil', 'mex': 'Mexico',
'chn': 'China', 'pak': 'Pakistan', 'bgd': 'Bangladesh', 'lka': 'Sri Lanka',
'mmr': 'Myanmar', 'khm': 'Cambodia', 'npl': 'Nepal', 'are': 'UAE',
'sau': 'Saudi Arabia', 'tur': 'Turkey', 'egy': 'Egypt', 'nga': 'Nigeria',
'ken': 'Kenya', 'zaf': 'South Africa', 'col': 'Colombia', 'arg': 'Argentina',
'per': 'Peru', 'chl': 'Chile', 'nzl': 'New Zealand', 'ita': 'Italy',
'esp': 'Spain', 'nld': 'Netherlands', 'rus': 'Russia', 'pol': 'Poland',
}Use reportlab with A4 page size. The report has 7 sections:
Cover Page
- Report title (in user's language)
- Subtitle: "Google Search Console Data Analysis & Recommendations"
- Report date, data range, data source, covered sites
Section 1: Executive Summary
- Summary table (all sites: clicks, impressions, avg CTR, avg position, trends)
- Key findings (5-6 bullet points highlighting most important insights)
Section 2: Traffic Trends
- Combined traffic trend chart (all sites)
- Per-site detail charts (clicks + position)
Section 3: Top Pages (TOP 10)
- Table per site: rank, page path, clicks, impressions, CTR, position
- Shorten long URLs: if > 45 chars, truncate with "..."
Section 4: Top Keywords (TOP 15)
- Table per site: rank, keyword, clicks, impressions, CTR, position
Section 5: Country & Device Distribution
- Device pie charts
- Country bar charts (for major sites)
- Country tables (all sites, top 10)
Section 6: Growth Analysis
- Per site: growing pages table (green header), declining pages table (red header)
- New page count, lost page count
Section 7: Recommendations & Action Plan
- AI-generated recommendations based on the data (see analysis guidelines below)
- Priority action table (P0/P1/P2)from reportlab.lib.pagesizes import A4
from reportlab.lib.units import mm, cm
from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle
from reportlab.lib.enums import TA_CENTER
from reportlab.platypus import (SimpleDocTemplate, Paragraph, Spacer, Table,
TableStyle, Image, PageBreak, HRFlowable)
from reportlab.lib import colors as rl_colors
doc = SimpleDocTemplate(pdf_path, pagesize=A4,
leftMargin=2*cm, rightMargin=2*cm,
topMargin=2*cm, bottomMargin=2*cm)
# Define styles — use 'CNFont' (the registered STHeiti font)
styles = getSampleStyleSheet()
styles.add(ParagraphStyle(name='CNTitle', fontName='CNFont', fontSize=22,
alignment=TA_CENTER, spaceAfter=6*mm, leading=28))
styles.add(ParagraphStyle(name='CNSubtitle', fontName='CNFont', fontSize=12,
alignment=TA_CENTER, textColor=rl_colors.grey, spaceAfter=10*mm))
styles.add(ParagraphStyle(name='CNHeading1', fontName='CNFont', fontSize=16,
spaceAfter=4*mm, spaceBefore=8*mm, leading=22,
textColor=rl_colors.HexColor('#1a73e8')))
styles.add(ParagraphStyle(name='CNHeading2', fontName='CNFont', fontSize=13,
spaceAfter=3*mm, spaceBefore=5*mm, leading=18,
textColor=rl_colors.HexColor('#333333')))
styles.add(ParagraphStyle(name='CNBody', fontName='CNFont', fontSize=10,
spaceAfter=2*mm, leading=16))
styles.add(ParagraphStyle(name='CNSmall', fontName='CNFont', fontSize=8,
textColor=rl_colors.grey, leading=12))
styles.add(ParagraphStyle(name='CNBullet', fontName='CNFont', fontSize=10,
spaceAfter=1.5*mm, leading=16, leftIndent=10*mm,
bulletIndent=5*mm))Use this consistent style for all data tables:
table_style = TableStyle([
('FONTNAME', (0,0), (-1,-1), 'CNFont'),
('FONTSIZE', (0,0), (-1,-1), 7), # Small font for dense data
('BACKGROUND', (0,0), (-1,0), rl_colors.HexColor('#1a73e8')), # Blue header
('TEXTCOLOR', (0,0), (-1,0), rl_colors.white),
('ALIGN', (2,0), (-1,-1), 'RIGHT'), # Numbers right-aligned
('ALIGN', (0,0), (0,-1), 'CENTER'), # Rank column centered
('GRID', (0,0), (-1,-1), 0.5, rl_colors.HexColor('#dddddd')),
('ROWBACKGROUNDS', (0,1), (-1,-1), [rl_colors.white, rl_colors.HexColor('#f8f9fa')]),
('TOPPADDING', (0,0), (-1,-1), 2),
('BOTTOMPADDING', (0,0), (-1,-1), 2),
])Use Unicode bullet character \u2022 (•) for list items:
story.append(Paragraph(f"\u2022 {text}", styles['CNBullet']))This renders correctly with STHeiti font. Do NOT use other bullet approaches.
Analyze the data and generate recommendations following these guidelines:
After generating the PDF:
| Error | Cause | Solution |
|---|---|---|
403 Forbidden on API call | Service account not added to Search Console | Add the service account email as a user in Search Console settings |
403 Google Search Console API has not been enabled | API not enabled | Enable it at https://console.cloud.google.com/apis/library/searchconsole.googleapis.com |
Empty rows in response | No data for that site/date range | Check if the site URL exactly matches the Search Console property (trailing slash matters!) |
jwt.encode error | Missing cryptography package | pip install cryptography |
| PDF shows garbled Chinese | Wrong font | Use TTFont with STHeiti, NOT UnicodeCIDFont with STSong-Light |
| Matplotlib timeout on first run | Building font cache | Set bash timeout to 180000ms; this only happens once |
MPLCONFIGDIR warning | No write access to ~/.matplotlib | Harmless; matplotlib creates a temp cache automatically |
User: "Help me generate an SEO report for my websites using Search Console" → Ask for key file path and site URLs, then run the full pipeline.
User: "Analyze search performance for example.com over the last 90 days and export to PDF" → Run with default 90-day range, generate full report.
User: "Compare search traffic between my 3 sites" → Run for all 3 sites, emphasize the comparison aspects in the summary table and trends chart.
| File | Description |
|---|---|
sc_detailed_data.json | Raw API data for all sites (reproducible) |
report_charts/*.png | Generated chart images |
search_console_report.pdf | Final PDF report |
© LeoYeAI, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 1 other file in skills/search-console-report of LeoYeAI/openclaw-master-skills.
Open the folder on GitHubat commit e5199b5
Search Console Report next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Search Console Report this skillLeoYeAI/openclaw-master-skills | 2.2k | — | ~4.6k | Automated safety check: Pass | MIT | |
| Google Search ConsoleVKirill/claude-lane-stack | 122 | — | ~4.9k | Automated safety check: Pass | MIT | |
| Jev SEOAgriciDaniel/jev-seo | 543 | — | ~2.5k | Automated safety check: Notes | MIT | |
| PDF ToolkitXiaomiMiMo/MiMo-Code | 14k | — | ~1.7k | Automated safety check: Pass | Apache-2.0 | |
| PDF Generation, Forms and Extractionpipeshub-ai/pipeshub-ai | 3.8k | — | ~2.9k | Automated safety check: Pass | Apache-2.0 | |
| MineruNebutra/MinerU-Skill | 123 | — | ~1.4k | Automated safety check: Pass | MIT |
VKirill/claude-lane-stack
[RU: Google Search Console API, гугл серч консоль, вебмастер гугл, gsc] GSC (Webmasters) API v1 — OAuth 2.0 + service account, searchanalytics.query (dimensions, filter operators, 25k row cap +…
AgriciDaniel/jev-seo
Full live SEO audit of any website from its homepage URL, powered by Jev (TypeSafe's System One model).
XiaomiMiMo/MiMo-Code
Reads, transforms, composes and fills PDFs with Python scripts for extraction, merging, watermarking, encryption, OCR and form filling.
pipeshub-ai/pipeshub-ai
Picks the right library for generating a new PDF, filling an existing PDF form, or extracting text and tables, defaulting to Node where possible.
Nebutra/MinerU-Skill
An AI-Native skill for parsing PDF / Office / image files into clean Markdown with MinerU — a fast, zero-config document parser for AI agents.
bowenliang123/markdown-exporter
Convert Markdown text to DOCX, PPTX, XLSX, PDF, PNG, SVG, HTML, IPYNB, MD, CSV, JSON, JSONL, XML files, and extract code blocks in Markdown to Python, Bash,JS and etc files.
LeoYeAI/openclaw-master-skills
Manages pipelines on a DevOps quality and efficiency platform through its OpenAPI: list workspaces and templates, create, update, run and cancel pipelines, and read run records.
LeoYeAI/openclaw-master-skills
Patches OpenClaw's Feishu extension so an edited document triggers an isolated agent session that reads the doc and replies inline, turning it into a live chat space.
LeoYeAI/openclaw-master-skills
Multi-context memory management system for OpenClaw agents with group-isolated storage, global shared memory, workspace organization, and group-specific skills isolation.
LeoYeAI/openclaw-master-skills
Runs a brand's AI-search visibility work end to end: diagnosing how AI platforms represent it, repositioning it, producing AI-optimized content and monitoring ongoing mentions.
LeoYeAI/openclaw-master-skills
Installs and authenticates the gws CLI, then automates Gmail, Drive, Sheets, Calendar, Docs, Chat and Tasks with ready-made recipes, persona bundles and security audits.
LeoYeAI/openclaw-master-skills
Runs four advisor roles, a fitness coach, nutritionist, data analyst and TCM practitioner, to build a health profile and track workouts, diet and wellness over time.
Works with
Categories
Generate comprehensive SEO analysis reports from Google Search Console data with PDF export. Search Console Report is an agent skill from LeoYeAI/openclaw-master-skills. Generate comprehensive SEO analysis reports from Google Search Console data with PDF export.
Search Console Report fits situations like: the user wants to analyze search performance; get SEO insights; view traffic trends; country/device distribution.
Run `npx skills add LeoYeAI/openclaw-master-skills --skill search-console-report -a claude-code`. Or copy the skill folder (skills/search-console-report in LeoYeAI/openclaw-master-skills) into .claude/skills/search-console-report in your project. Claude Code loads it when a task matches its description.
Run `npx skills add LeoYeAI/openclaw-master-skills --skill search-console-report -a codex`. Or copy the skill folder (skills/search-console-report in LeoYeAI/openclaw-master-skills) into .agents/skills/search-console-report in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add LeoYeAI/openclaw-master-skills --skill search-console-report -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/search-console-report, .gemini/skills/search-console-report, .github/skills/search-console-report and .opencode/skills/search-console-report in your project.
Going by SKILL.md and its folder, Search Console Report needs the command-line tools its instructions call (pip and python3). Our summary lists: Python 3.
SKILL.md names 3 domains. In commands or code: googleapis.com and oauth2.googleapis.com; the agent is likely to contact these when it follows the instructions. As links in the text: console.cloud.google.com. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Search Console Report is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 4.6k tokens (SKILL.md is roughly 18k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Search Console Report: Google Search Console (VKirill/claude-lane-stack, 122 stars), Jev SEO (AgriciDaniel/jev-seo, 543 stars), PDF Toolkit (XiaomiMiMo/MiMo-Code, 14k stars) and PDF Generation, Forms and Extraction (pipeshub-ai/pipeshub-ai, 3.8k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
LeoYeAI (a GitHub user) maintains it in LeoYeAI/openclaw-master-skills, which has 2,161 GitHub stars. The repository holds 1,235 skills in this directory. The repository was last updated on July 20, 2026.
Source: LeoYeAI/openclaw-master-skills on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.