ScavioScavio
ProductPricingDocs
Sign InGet Started
  1. Home
  2. Workflows
  3. Surfer SEO + SERP API Daily Rank Tracking Flow
Workflow

Surfer SEO + SERP API Daily Rank Tracking Flow

Daily workflow that tracks keyword rankings via SERP API to complement Surfer SEO content optimization with live competitive data.

Start FreeAPI Docs

Overview

Run daily SERP queries for your Surfer SEO target keywords to track ranking positions, AI Overview appearances, and competitor movements. Feed live SERP data into content optimization decisions.

Trigger

Daily cron at 06:00 UTC

Schedule

Daily at 06:00 UTC

Workflow Steps

1

Load keyword list

Read target keywords from a JSON file, database, or Google Sheet. Each keyword includes the target URL to track position for.

2

Query SERP for each keyword

Search Google via Scavio for each keyword with AI Overview enabled. Extract full organic rankings, AI Overview presence, and People Also Ask.

3

Find target position

Scan organic results for the target URL. Record its position, or mark as 'not found' if outside top 100.

4

Detect AI Overview changes

Check if the keyword triggers an AI Overview and whether the target domain is cited. Log changes from previous day.

5

Store and alert

Append daily snapshot to a time-series database or CSV. Send alerts on position drops greater than 3 or AI Overview citation changes.

Python Implementation

Python
import requests, os, json
from datetime import date

H = {'x-api-key': os.environ['SCAVIO_API_KEY']}

def track_keyword(keyword, target_domain):
    r = requests.post('https://api.scavio.dev/api/v1/search', headers=H,
        json={'platform': 'google', 'query': keyword, 'ai_overview': True},
        timeout=10).json()
    organic = r.get('organic', [])
    position = None
    for o in organic:
        if target_domain in o.get('link', ''):
            position = o.get('position')
            break
    aio = r.get('ai_overview', {}) or {}
    aio_text = aio.get('text', '')
    return {
        'date': str(date.today()),
        'keyword': keyword,
        'position': position,
        'top_3': [{'domain': o.get('link', '').split('/')[2] if '/' in o.get('link', '') else '',
                    'title': o['title']} for o in organic[:3]],
        'has_ai_overview': bool(r.get('ai_overview')),
        'cited_in_aio': target_domain in aio_text.lower(),
        'paa_count': len(r.get('people_also_ask', [])),
    }

keywords = [
    ('best project management tool 2026', 'example.com'),
    ('project management software comparison', 'example.com'),
]
for kw, domain in keywords:
    result = track_keyword(kw, domain)
    pos = result['position'] or 'not found'
    aio = 'CITED' if result['cited_in_aio'] else 'not cited'
    print(f"{kw}: #{pos} | AIO: {result['has_ai_overview']} ({aio})")

JavaScript Implementation

JavaScript
const H = {"x-api-key": process.env.SCAVIO_API_KEY, "Content-Type": "application/json"};

async function trackKeyword(keyword, targetDomain) {
  const r = await fetch("https://api.scavio.dev/api/v1/search", {
    method: "POST", headers: H,
    body: JSON.stringify({platform: "google", query: keyword, ai_overview: true})
  }).then(r => r.json());
  const organic = r.organic || [];
  const match = organic.find(o => (o.link || "").includes(targetDomain));
  const aio = r.ai_overview || {};
  return {
    date: new Date().toISOString().split("T")[0],
    keyword,
    position: match ? match.position : null,
    top3: organic.slice(0, 3).map(o => ({
      domain: (o.link || "").split("/")[2] || "", title: o.title
    })),
    hasAiOverview: Boolean(r.ai_overview),
    citedInAio: (aio.text || "").toLowerCase().includes(targetDomain),
    paaCount: (r.people_also_ask || []).length,
  };
}

(async () => {
  const keywords = [
    ["best project management tool 2026", "example.com"],
    ["project management software comparison", "example.com"],
  ];
  for (const [kw, domain] of keywords) {
    const r = await trackKeyword(kw, domain);
    const pos = r.position || "not found";
    console.log(`${kw}: #${pos} | AIO: ${r.hasAiOverview} (${r.citedInAio ? "CITED" : "not cited"})`);
  }
})();

Platforms Used

Google

Web search with knowledge graph, PAA, and AI overviews

Frequently Asked Questions

Run daily SERP queries for your Surfer SEO target keywords to track ranking positions, AI Overview appearances, and competitor movements. Feed live SERP data into content optimization decisions.

This workflow uses a daily cron at 06:00 utc. Daily at 06:00 UTC.

This workflow uses the following Scavio platforms: google. Each platform is called via the same unified API endpoint.

Yes. Scavio's free tier includes 50 credits on signup with no credit card required. That is enough to test and validate this workflow before scaling it.

Surfer SEO + SERP API Daily Rank Tracking Flow

Daily workflow that tracks keyword rankings via SERP API to complement Surfer SEO content optimization with live competitive data.

Get Your API KeyRead the Docs
ScavioScavio

Real-time search API for AI agents. Search every platform, not just Google.

Product

  • Features
  • Pricing
  • Dashboard
  • Affiliates

Developers

  • Documentation
  • API Reference
  • Quickstart
  • MCP Integration
  • Python SDK

Alternatives

  • Tavily Alternative
  • SerpAPI Alternative
  • Firecrawl Alternative
  • Exa Alternative

Tools

  • JSON Formatter
  • cURL to Code
  • Token Counter
  • All Tools

© 2026 Scavio. All rights reserved.

Featured on TAAFT
Terms of ServicePrivacy Policy