ScavioScavio
ProductPricingDocs
Sign InGet Started
  1. Home
  2. Tutorials
  3. How to Build SEO Dashboard with Raw APIs
Tutorial

How to Build SEO Dashboard with Raw APIs

Build an SEO dashboard using raw SERP API calls instead of expensive SEO tools. Track rankings, SERP features, and competitors.

Get Free API KeyAPI Docs

SEMrush and Ahrefs charge $100-450/month for SEO dashboards. You can build the same core functionality with raw SERP API calls at $0.005/query. This tutorial builds a rank tracker, SERP feature monitor, and competitor comparison dashboard. 100 daily keyword checks cost $0.50/day.

Prerequisites

  • Python 3.8+
  • requests library
  • A Scavio API key from scavio.dev
  • List of target keywords and competitor domains

Walkthrough

Step 1: Build keyword rank tracker

Track your domain position for target keywords daily.

Python
import os, requests, json
from datetime import datetime

API_KEY = os.environ['SCAVIO_API_KEY']
SH = {'x-api-key': API_KEY, 'Content-Type': 'application/json'}

DOMAIN = 'yourdomain.com'
KEYWORDS = ['search api for agents', 'serp api python', 'web search api 2026', 'mcp search tool']

def check_rank(keyword, domain):
    data = requests.post('https://api.scavio.dev/api/v1/search',
        headers=SH, json={'query': keyword, 'country_code': 'us'}).json()
    organic = data.get('organic_results', [])
    for i, r in enumerate(organic):
        if domain in r.get('link', ''):
            return {'position': i + 1, 'title': r.get('title', ''), 'link': r.get('link', '')}
    return {'position': None, 'title': '', 'link': ''}

print(f'=== Rank Tracker - {DOMAIN} - {datetime.now().strftime("%Y-%m-%d")} ===')
ranks = []
for kw in KEYWORDS:
    result = check_rank(kw, DOMAIN)
    pos = f'#{result["position"]}' if result['position'] else 'Not in top 10'
    print(f'  {kw:40} | {pos}')
    ranks.append({'keyword': kw, **result})
print(f'\nCost: ${len(KEYWORDS) * 0.005:.3f}')

Step 2: Monitor SERP features per keyword

Detect AI Overviews, featured snippets, PAA boxes, and local packs.

Python
def serp_features(keyword):
    data = requests.post('https://api.scavio.dev/api/v1/search',
        headers=SH, json={'query': keyword, 'country_code': 'us'}).json()
    features = []
    if data.get('ai_overview') or data.get('answer_box'):
        features.append('AI Overview')
    if data.get('featured_snippet'):
        features.append('Featured Snippet')
    if data.get('people_also_ask'):
        features.append(f'PAA ({len(data["people_also_ask"])} questions)')
    if data.get('local_results'):
        features.append(f'Local Pack ({len(data["local_results"])} results)')
    if data.get('shopping_results'):
        features.append('Shopping')
    return features

print(f'\n=== SERP Features ===')
for kw in KEYWORDS:
    features = serp_features(kw)
    print(f'  {kw:40} | {" | ".join(features) if features else "Organic only"}')

Step 3: Compare against competitors

Check competitor positions for the same keywords.

Python
COMPETITORS = ['tavily.com', 'serpapi.com', 'serper.dev']

def competitor_comparison(keywords, domain, competitors):
    print(f'\n=== Competitor Comparison ===')
    header = f'{"Keyword":30} | {domain:15}'
    for c in competitors:
        header += f' | {c:15}'
    print(header)
    print('-' * len(header))
    for kw in keywords:
        data = requests.post('https://api.scavio.dev/api/v1/search',
            headers=SH, json={'query': kw, 'country_code': 'us'}).json()
        organic = data.get('organic_results', [])
        positions = {}
        for i, r in enumerate(organic):
            link = r.get('link', '')
            if domain in link:
                positions[domain] = i + 1
            for c in competitors:
                if c in link:
                    positions[c] = i + 1
        row = f'{kw[:30]:30} | {str(positions.get(domain, "-")):15}'
        for c in competitors:
            row += f' | {str(positions.get(c, "-")):15}'
        print(row)
    total_queries = len(keywords)
    print(f'\nCost: ${total_queries * 0.005:.3f} (competitors checked in same query)')

competitor_comparison(KEYWORDS, DOMAIN, COMPETITORS)

Python Example

Python
import os, requests
SH = {'x-api-key': os.environ['SCAVIO_API_KEY'], 'Content-Type': 'application/json'}

def rank_check(keyword, domain):
    data = requests.post('https://api.scavio.dev/api/v1/search',
        headers=SH, json={'query': keyword, 'country_code': 'us'}).json()
    for i, r in enumerate(data.get('organic_results', [])):
        if domain in r.get('link', ''):
            return i + 1
    return None

for kw in ['search api', 'serp api python']:
    pos = rank_check(kw, 'scavio.dev')
    print(f'{kw}: #{pos}' if pos else f'{kw}: not found')
print('Cost: $0.010')

JavaScript Example

JavaScript
const SH = { 'x-api-key': process.env.SCAVIO_API_KEY, 'Content-Type': 'application/json' };
async function rankCheck(keyword, domain) {
  const data = await fetch('https://api.scavio.dev/api/v1/search', {
    method: 'POST', headers: SH,
    body: JSON.stringify({ query: keyword, country_code: 'us' })
  }).then(r => r.json());
  const pos = (data.organic_results || []).findIndex(r => r.link?.includes(domain));
  console.log(`${keyword}: ${pos >= 0 ? '#' + (pos+1) : 'not found'}`);
}
await rankCheck('search api', 'scavio.dev');

Expected Output

JSON
=== Rank Tracker - yourdomain.com ===
  search api for agents                    | #3
  serp api python                          | #5
  web search api 2026                      | #2
  mcp search tool                          | Not in top 10

Cost: $0.020

=== SERP Features ===
  search api for agents                    | AI Overview | PAA (4 questions)
  serp api python                          | Featured Snippet

=== Competitor Comparison ===
Keyword                        | yourdomain.com  | tavily.com      | serpapi.com
search api for agents          | 3               | 7               | 4

Related Tutorials

  • How to Build a Custom SEO Dashboard with a Search API
  • How to Build a DIY Keyword Rank Tracker
  • How to Build a Budget Rank Tracker with the Scavio Search API

Frequently Asked Questions

Most developers complete this tutorial in 15 to 30 minutes. You will need a Scavio API key (free tier works) and a working Python or JavaScript environment.

Python 3.8+. requests library. A Scavio API key from scavio.dev. List of target keywords and competitor domains. A Scavio API key gives you 50 free credits on signup.

Yes. The free tier includes 50 credits on signup, which is more than enough to complete this tutorial and prototype a working solution.

Scavio has a native LangChain package (langchain-scavio), an MCP server, and a plain REST API that works with any HTTP client. This tutorial uses the raw REST API, but you can adapt to your framework of choice.

Related Resources

Best Of

Best API for Custom SEO Dashboards in 2026

Read more
Best Of

Best API-Based Rank Trackers for SEO in 2026

Read more
Use Case

SEO Dashboard Raw API

Read more
Solution

Build Reliable Local Rank Tracking with Scavio API

Read more
Glossary

Search API Provider Landscape (2026)

Read more
Comparison

Semrush API vs Raw SERP API

Read more

Start Building

Build an SEO dashboard using raw SERP API calls instead of expensive SEO tools. Track rankings, SERP features, and competitors.

Get Free 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