ScavioScavio
ProductPricingDocs
Sign InGet Started
  1. Home
  2. Tutorials
  3. How to Build a Thin API Layer Over Scavio for Per-Query SEO Billing
Tutorial

How to Build a Thin API Layer Over Scavio for Per-Query SEO Billing

Build a thin API layer over Scavio that tracks per-query SEO costs. Perfect for light users who want to avoid monthly subscriptions.

Get Free API KeyAPI Docs

An r/SideProject user was tired of paying $29+ monthly for SEO tools they barely used. This tutorial builds a thin API layer that wraps Scavio, tracks per-query costs, and lets you (or your users) see exact usage. Think of it as a metered SEO API you control.

Prerequisites

  • Scavio API key
  • Python 3.8+ with Flask or FastAPI
  • SQLite for usage tracking

Walkthrough

Step 1: Set up the API server

Minimal FastAPI app that proxies to Scavio with usage tracking.

Python
from fastapi import FastAPI, Header, HTTPException
from pydantic import BaseModel
import requests, os, sqlite3, datetime

app = FastAPI()
H = {'x-api-key': os.environ['SCAVIO_API_KEY']}
conn = sqlite3.connect('usage.db', check_same_thread=False)
conn.execute('CREATE TABLE IF NOT EXISTS usage (ts TEXT, user TEXT, query TEXT, cost REAL)')

class SearchRequest(BaseModel):
    query: str
    country_code: str = 'us'

Step 2: Proxy search requests with cost tracking

Each request logs the cost.

Python
@app.post('/seo/rank-check')
async def rank_check(req: SearchRequest, x_user: str = Header()):
    data = requests.post('https://api.scavio.dev/api/v1/search',
        headers=H,
        json={'platform': 'google', 'query': req.query,
              'country_code': req.country_code}).json()
    # Log usage: $0.005 per query
    conn.execute('INSERT INTO usage VALUES (?, ?, ?, ?)',
        (datetime.datetime.now().isoformat(), x_user, req.query, 0.005))
    conn.commit()
    return {'results': data.get('organic_results', []), 'cost': 0.005}

Step 3: Add usage dashboard endpoint

Let users see their usage and costs.

Python
@app.get('/usage/{user}')
async def get_usage(user: str):
    rows = conn.execute(
        'SELECT date(ts) as day, count(*) as queries, sum(cost) as total '
        'FROM usage WHERE user=? GROUP BY date(ts) ORDER BY day DESC LIMIT 30',
        (user,)).fetchall()
    return {'user': user,
            'daily_usage': [{'date': r[0], 'queries': r[1], 'cost': r[2]} for r in rows],
            'total_cost': sum(r[2] for r in rows)}

Step 4: Add budget limits

Prevent users from exceeding a monthly budget.

Python
@app.post('/seo/rank-check-metered')
async def rank_check_metered(req: SearchRequest, x_user: str = Header()):
    monthly_spend = conn.execute(
        'SELECT sum(cost) FROM usage WHERE user=? AND ts >= date("now", "start of month")',
        (x_user,)).fetchone()[0] or 0
    budget = 5.00  # $5/month default budget
    if monthly_spend >= budget:
        raise HTTPException(429, f'Monthly budget of ${budget} exceeded. Current: ${monthly_spend:.2f}')
    return await rank_check(req, x_user)

Python Example

Python
# Self-hosted metered SEO API:
# $0.005 per rank check via Scavio
# SQLite tracks per-user usage
# Budget limits prevent overuse
# 100 queries/month = $0.50 vs $29+ for Ahrefs Starter

JavaScript Example

JavaScript
// Express.js equivalent:
app.post('/seo/rank-check', async (req, res) => {
  const data = await fetch('https://api.scavio.dev/api/v1/search', {
    method: 'POST',
    headers: {'x-api-key': process.env.SCAVIO_API_KEY, 'Content-Type': 'application/json'},
    body: JSON.stringify({platform: 'google', query: req.body.query})
  }).then(r => r.json());
  // log usage to DB
  res.json({results: data.organic_results, cost: 0.005});
});

Expected Output

JSON
Self-hosted metered SEO API with per-query cost tracking, usage dashboard, and budget limits. 100 queries/month = $0.50 vs Ahrefs Starter at $29/mo.

Related Tutorials

  • How to Build a Pay-Per-Query SEO Rank Checker
  • How to Build a Solo SaaS MVP with a 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.

Scavio API key. Python 3.8+ with Flask or FastAPI. SQLite for usage tracking. 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

Glossary

Usage-Based API Billing

Read more
Best Of

Best API for Agency SEO Reporting in 2026

Read more
Best Of

Best API Alternatives to AppSumo SEO Tools (2026)

Read more
Solution

Build a Predictable-Cost SEO API Layer

Read more
Use Case

Usage-Based SEO Monitoring

Read more
Solution

SEO Tool Cost-Per-Query Reduction

Read more

Start Building

Build a thin API layer over Scavio that tracks per-query SEO costs. Perfect for light users who want to avoid monthly subscriptions.

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