Skip to main content
skill CX Codex

tracking-google-serp-rankings — Claude Code skill: Google rankings

A skill that pulls Google results for a keyword list: positions, URLs, titles, snippets and SERP features. Useful for SEO audits and competitor checks.

Install into Claude Code · Skills CLI (Vercel) All methods and platforms ↓
npx skills add apidojo-io/apidojo-skills --skill tracking-google-serp-rankings -a claude-code
Open on GitHub

What tracking-google-serp-rankings does

The skill runs the apidojo/google-search-scraper actor on Apify and parses the dataset. For each keyword it collects organic results with position, URL, title and description, plus the features on the page: featured snippet, People Also Ask, local pack, ads and related searches. Ask it about one domain and it finds every position that domain holds and averages them across the keyword set.

Execution goes through scripts/run_actor.js, which waits for the run and writes results to CSV or JSON. There is also an Apify MCP path using the apify:run-actor tool, and a plain POST to the Apify REST API as a fallback. You need APIFY_TOKEN in your environment or a .env file. Nothing runs without it, so check that first.

Inputs cover searchTerms or startUrls, country (countryCode, default US), language, pages per query and mobile layout. Google personalises results and positions shift between runs, so keep your checks at the same time of day and the same location if you want to compare them.

What it helps with

  • build a position table for a site across keywords
  • find who holds the top 3 for a query
  • pull featured snippets and People Also Ask questions
  • average a domain's position across a keyword group
  • map which SERP features show up for a topic

Example prompts for the agent

  • check where example.com ranks for these keywords on Google
  • pull the top 10 results for "buy coffee grinder", country TR
  • what featured snippets and People Also Ask boxes appear for this query

How to install tracking-google-serp-rankings

1Skills CLI (Vercel)

npx skills add apidojo-io/apidojo-skills --skill tracking-google-serp-rankings -a claude-code

2Manually: put the files in place

~/.claude/skills/tracking-google-serp-rankings/SKILL.md

Copy the whole skill folder; for one project use .claude/skills/tracking-google-serp-rankings/

Step by step, with commands for each platform: How to install skills in Claude Code: five ways

Questions about tracking-google-serp-rankings

How do I install tracking-google-serp-rankings in Claude?

Run npx skills add apidojo-io/apidojo-skills --skill tracking-google-serp-rankings -a claude-code. The skill file then sits at ~/.claude/skills/tracking-google-serp-rankings/SKILL.md.

What does tracking-google-serp-rankings do?

It scrapes Google results for your keywords through an Apify actor and returns position, URL, title, snippet and SERP feature type per result. It then builds a ranking and competitor report.

What do I need for it to work?

An APIFY_TOKEN environment variable. Optionally an Apify MCP server, in which case runs go through the apify:run-actor tool.

Source text

SKILL.md · Apache-2.0
---
name: tracking-google-serp-rankings
description: >
  Tracks Google search rankings and SERP features for any keyword using apidojo's Google Search scraper on Apify.
  Triggers when the user asks to: check Google rankings for a keyword, see who ranks on page 1 for a
  search term, track SERP positions for a list of keywords, monitor competitor rankings on Google, find
  featured snippets or People Also Ask boxes for a query, analyze the search results landscape for a
  topic, audit top-ranking content for a keyword, or research organic search competition for SEO.
  Returns ranking position, URL, title, snippet, and SERP feature type per result.
  Ideal for SEO managers, content strategists, and digital marketing agencies.
license: Apache-2.0
metadata:
  author: apidojo
  version: "1.0"
  apify-actor: apidojo/google-search-scraper
---

# Tracking Google SERP Rankings

Scrapes Google Search results for any keyword(s) to show who ranks where, what SERP features appear (featured snippets, PAA, local pack, ads), and how competitors are positioned. Use for SEO audits, content gap analysis, or keyword research.

## Prerequisites

- `APIFY_TOKEN` environment variable set
- Optional: Apify MCP server installed


## Inputs

| Parameter | Type | Required | Default | Notes |
|-----------|------|----------|---------|-------|
| `startUrls` | array | Optional | `[]` | Google search URLs |
| `searchTerms` | array | Optional | `[]` | Keywords to search on Google |
| `countryCode` | string | Optional | `US` | Country for Google search (e.g. `US`, `GB`, `TR`) |
| `languageCode` | string | Optional | — | Language for results (e.g. `en`) |
| `maxItems` | number | Optional | Unlimited | Maximum results to return across all queries |
| `maxPagesPerQuery` | integer | Optional | `1` | Maximum result pages per query |
| `mobileResults` | boolean | Optional | `false` | Fetch mobile SERP layout |
| `customMapFunction` | string | Optional | — | JavaScript function to transform each output object |
## Workflow

```
Progress:
- [ ] Step 1: Define keywords and search parameters
- [ ] Step 2: Run google-search-scraper
- [ ] Step 3: Fetch and parse SERP data
- [ ] Step 4: Map ranking positions and SERP features
- [ ] Step 5: Deliver ranking report
```

### Step 1: Clarify Parameters

Ask the user for:
- **Keywords** to track (1–20 keywords)
- **Country** (default: US)
- **Language** (default: English)
- **Number of results** per keyword (default: 20 = top 2 pages)
- **Device** — desktop or mobile (default: desktop)
- **Safe search** — on or off (default: off for unfiltered results)
- **Specific domain to track** (optional — e.g., "where does example.com rank for these keywords?")

### Step 2: Run the Actor


**Recommended — run_actor.js (handles waiting, output, and file saving automatically):**
```bash
# Quick answer (prints table to chat)
node scripts/run_actor.js \
  --actor "apidojo~google-search-scraper" \
  --input '{"param": "value"}'

# Save as CSV
node scripts/run_actor.js \
  --actor "apidojo~google-search-scraper" \
  --input '{"param": "value"}' \
  --output YYYY-MM-DD_results.csv --format csv

# Save as JSON
node scripts/run_actor.js \
  --actor "apidojo~google-search-scraper" \
  --input '{"param": "value"}' \
  --output YYYY-MM-DD_results.json --format json
```
> `APIFY_TOKEN` must be set in environment or `.env` file.

**If Apify MCP is available:**
```
Tool: apify:run-actor
Actor: "apidojo~google-search-scraper"
Input:
{
  "queries": ["[keyword1]", "[keyword2]", "[keyword3]"],
  "maxPagesPerQuery": 2,
  "countryCode": "US",
  "languageCode": "en",
  "mobileResults": false
}
```

**REST API fallback:**
```bash
curl -X POST \
  "https://api.apify.com/v2/acts/apidojo~google-search-scraper/runs?token=$APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "queries": ["[keyword1]", "[keyword2]"],
    "maxPagesPerQuery": 2,
    "countryCode": "US",
    "languageCode": "en"
  }'
```

### Step 3: Parse SERP Data

From dataset, for each keyword extract:
- Organic results: `position`, `url`, `title`, `description`, `displayedUrl`
- SERP features: `featuredSnippet`, `peopleAlsoAsk`, `localPack`, `ads`, `relatedSearches`
- Total organic results count

If tracking a specific domain: find all positions where `url` contains the target domain.

### Step 4: Map Rankings

For each keyword, build the position table. Calculate:
- Average position across all keywords (for a specific domain)
- Keywords where target domain appears in top 3 / top 10 / not at all
- Keywords owned by the same competitor (URL domain appears multiple times)

### Step 5: Format Report

## Output Format

```
# Google SERP Ranking Report
Keywords analyzed: [N] | Country: [US] | Device: [Desktop] | Date: [DATE]

## Rankings Summary (for [target domain], if specified)
- Keywords in top 3: [N]
- Keywords in top 10: [N]
- Keywords on page 2: [N]
- Keywords not ranking: [N]

## Keyword-by-Keyword Results

### "[keyword1]"
| Position | URL | Title | Type |
|----------|-----|-------|------|
| 1 | [url] | [title] | Organic |
| 2 | [url] | [title] | Organic |
| — | — | Featured Snippet: "[snippet text excerpt]" | Feature |
| — | — | People Also Ask: [N] questions | Feature |
| [pos] | [your domain] | [title] | **YOUR RANKING** |

SERP features present: [Featured Snippet / PAA / Local Pack / Ads]
Ranking difficulty signal: [Easy / Medium / Hard — based on DR of top results if available]

### "[keyword2]"
[same structure]

## Competitor Dominance Analysis
| Domain | Keywords Where They Rank Top 3 | Avg Position |
|--------|-------------------------------|--------------|
| [domain] | [N] | [X.X] |

## SERP Feature Opportunities
Keywords where a featured snippet exists but [your domain] is not the source:
- "[keyword]" — snippet currently owned by [domain]
- "[keyword]" — snippet currently owned by [domain]
```

## Troubleshooting

**Results vary between runs:** Google personalizes results and rotates positions. Run at the same time of day and same location for consistent tracking.
**No results for a keyword:** Very low-volume keywords may return limited results. Try broader variations.
**Ad-heavy SERPs:** Some keywords are dominated by ads — organic position 1 may appear lower on the page. Note this in the report.

© apidojo · Apache-2.0 · apidojo-io/apidojo-skills

Similar skills

Everything for SEO and GEO →

From the same set22

tracking-competitor-social-media-growth Pulls follower counts and engagement for competitor accounts on Twitter/X, TikTok and Instagram, then lines them up side by side. Useful when you need to compare how accounts grow. CX Codex +1 771installs discovering-tiktok-shop-sellers-by-niche Maps TikTok Shop sellers and products in a niche: who promotes what, which items move, where the gaps are. CX Codex +1 770installs tracking-brand-sentiment-across-platforms Pulls brand mentions from Twitter, Reddit and TikTok, scores sentiment per platform, and returns one brand health number from 0 to 100. CX Codex +1 767installs finding-tiktok-creators-by-location Finds TikTok creators and their videos by geographic location through apidojo's scraper on Apify. Useful for local campaigns and regional research. CX Codex +1 766installs scraping-google-search-results Pulls Google search results for any query: URLs, titles, snippets, positions and SERP feature types. Handy when you need raw SERP data for SEO or competitor work. CX Codex +1 759installs benchmarking-instagram-influencer-engagement Pulls recent Instagram posts and turns them into engagement benchmarks: followers, average likes and comments, ER, posting frequency. CX Codex +1 757installs monitoring-instagram-hashtag-trends Pulls Instagram posts per hashtag and works out which tags actually earn engagement. Useful when you need a hashtag set for a post or a brand comparison. CX Codex +1 740installs building-twitter-industry-watchlist Builds a curated list of key voices in an industry on X, with handle, follower count, engagement and an influence score. CX Codex +1 739installs

Project sponsors

Companies that keep this analytics open
Gold sponsor

Impressions, clicks and code copies — open statistics. We keep the numbers public for the same reason NeBlask itself is public. Become a sponsor