ScavioScavio
ProductPricingDocs
Sign InGet Started
  1. Home
  2. Tutorials
  3. How to Compare SERP API Pricing Models Programmatically
Tutorial

How to Compare SERP API Pricing Models Programmatically

Build a cost calculator that compares per-search, credit pack, and queue-based SERP API pricing for your actual usage pattern. Python and JS examples.

Get Free API KeyAPI Docs

SERP APIs charge in four fundamentally different ways: per-search (SerpAPI), credit packs with expiry (Serper.dev), per-credit flat rate (Scavio), and queue-vs-live tiers (DataForSEO). The billing model you pick determines whether your cost scales linearly with usage or penalizes you for idle months. This tutorial builds a cost calculator that takes your monthly query volume, latency tolerance, and platform needs, then outputs the cheapest option with exact dollar amounts.

Prerequisites

  • Python 3.8+ or Node.js 18+
  • Basic understanding of SERP API pricing tiers
  • Your estimated monthly query volume

Walkthrough

Step 1: Define pricing models as structured data

Encode each API's pricing tiers, per-query costs, and constraints into a data structure your calculator can evaluate.

Python
import json

PRICING_MODELS = {
    'scavio': {
        'model': 'per_credit',
        'per_query': 0.005,
        'plans': [
            {'name': 'Free', 'monthly': 0, 'credits': 250},
            {'name': 'Project', 'monthly': 30, 'credits': 7000},
            {'name': 'Bootstrap', 'monthly': 100, 'credits': 28000},
            {'name': 'Startup', 'monthly': 250, 'credits': 85000},
            {'name': 'Growth', 'monthly': 500, 'credits': 200000},
        ],
        'overage': 0.005,
        'platforms': ['google', 'amazon', 'youtube', 'walmart', 'reddit', 'tiktok'],
    },
    'dataforseo': {
        'model': 'queue_tiers',
        'tiers': [
            {'name': 'Standard Queue', 'per_query': 0.0006, 'latency_min': 5},
            {'name': 'Priority Queue', 'per_query': 0.0012, 'latency_min': 1},
            {'name': 'Live', 'per_query': 0.002, 'latency_min': 0},
        ],
        'min_deposit': 50,
        'platforms': ['google'],
    },
    'serper': {
        'model': 'credit_packs',
        'packs': [
            {'credits': 50000, 'price': 50, 'per_query': 0.001},
            {'credits': 500000, 'price': 375, 'per_query': 0.00075},
        ],
        'expiry_months': 6,
        'platforms': ['google'],
    },
    'serpapi': {
        'model': 'subscription',
        'plans': [
            {'name': 'Free', 'monthly': 0, 'searches': 100},
            {'name': 'Starter', 'monthly': 25, 'searches': 1000},
            {'name': 'Business', 'monthly': 275, 'searches': 30000},
        ],
        'platforms': ['google', 'bing', 'yahoo', 'baidu'],
    },
}

Step 2: Build the cost calculation engine

For each API, calculate the monthly cost at a given query volume. Handle plan selection, overage, pack sizing, and queue tier optimization.

Python
def calculate_cost(api_name, monthly_queries, need_realtime=True):
    api = PRICING_MODELS[api_name]
    model = api['model']
    if model == 'per_credit':
        best_cost = float('inf')
        best_plan = None
        for plan in api['plans']:
            if monthly_queries <= plan['credits']:
                cost = plan['monthly']
            else:
                cost = plan['monthly'] + (monthly_queries - plan['credits']) * api['overage']
            if cost < best_cost:
                best_cost = cost
                best_plan = plan['name']
        return {'api': api_name, 'plan': best_plan, 'monthly_cost': round(best_cost, 2)}
    elif model == 'queue_tiers':
        tier = api['tiers'][0] if not need_realtime else api['tiers'][-1]
        cost = max(monthly_queries * tier['per_query'], api['min_deposit'])
        return {'api': api_name, 'plan': tier['name'], 'monthly_cost': round(cost, 2)}
    elif model == 'credit_packs':
        best_pack = api['packs'][0]
        for pack in api['packs']:
            if monthly_queries * api['expiry_months'] <= pack['credits']:
                best_pack = pack
                break
        monthly_cost = best_pack['price'] / api['expiry_months']
        return {'api': api_name, 'plan': f"{best_pack['credits']:,} pack", 'monthly_cost': round(monthly_cost, 2)}
    elif model == 'subscription':
        best_plan = api['plans'][-1]
        for plan in api['plans']:
            if monthly_queries <= plan['searches']:
                best_plan = plan
                break
        return {'api': api_name, 'plan': best_plan['name'], 'monthly_cost': best_plan['monthly']}

Step 3: Compare all APIs and rank by cost

Run the calculator across all APIs for your volume and output a ranked comparison.

Python
def compare_all(monthly_queries, need_realtime=True):
    results = []
    for api_name in PRICING_MODELS:
        result = calculate_cost(api_name, monthly_queries, need_realtime)
        result['per_query'] = round(result['monthly_cost'] / max(monthly_queries, 1), 5)
        results.append(result)
    results.sort(key=lambda x: x['monthly_cost'])
    print(f'Cost comparison for {monthly_queries:,} queries/month (realtime={need_realtime}):')
    for i, r in enumerate(results):
        marker = ' << CHEAPEST' if i == 0 else ''
        print(f"  {r['api']:12} | {r['plan']:20} | ${r['monthly_cost']:>8.2f}/mo{marker}")
    return results

compare_all(5000, need_realtime=True)
compare_all(50000, need_realtime=False)

Step 4: Validate with a live API test call

Run a test query against the Scavio API to confirm one credit equals one request regardless of platform.

Python
import os, requests

API_KEY = os.environ['SCAVIO_API_KEY']

def test_pricing():
    for platform in ['google', 'amazon', 'youtube']:
        body = {'query': 'test', 'platform': platform, 'country_code': 'us'}
        if platform == 'amazon': body['marketplace'] = 'US'
        resp = requests.post('https://api.scavio.dev/api/v1/search',
            headers={'x-api-key': API_KEY, 'Content-Type': 'application/json'}, json=body)
        print(f'{platform}: {resp.status_code}, {len(resp.json().get("organic_results", resp.json().get("products", [])))} results')
    print('Total: 3 credits ($0.015)')

test_pricing()

Python Example

Python
import os, requests

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

PRICING = {
    'scavio': lambda q: min(p['mo'] + max(0, q - p['cr']) * 0.005
        for p in [{'mo': 0, 'cr': 250}, {'mo': 30, 'cr': 7000}, {'mo': 100, 'cr': 28000}]),
    'dataforseo_queue': lambda q: max(q * 0.0006, 50),
    'serper': lambda q: 50 / 6 if q * 6 <= 50000 else 375 / 6,
    'serpapi': lambda q: 0 if q <= 100 else 25 if q <= 1000 else 275,
}

def compare(queries):
    costs = {k: round(v(queries), 2) for k, v in PRICING.items()}
    for k, v in sorted(costs.items(), key=lambda x: x[1]):
        print(f'{k:20}: ${v:.2f}/mo')

compare(5000)
compare(50000)

JavaScript Example

JavaScript
const PRICING = {
  scavio: (q) => Math.min(
    ...[{ mo: 0, cr: 250 }, { mo: 30, cr: 7000 }, { mo: 100, cr: 28000 }]
      .map(p => p.mo + Math.max(0, q - p.cr) * 0.005)
  ),
  dataforseo_queue: (q) => Math.max(q * 0.0006, 50),
  serper: (q) => q * 6 <= 50000 ? 50 / 6 : 375 / 6,
  serpapi: (q) => q <= 100 ? 0 : q <= 1000 ? 25 : 275,
};

function compare(queries) {
  console.log(`--- ${queries.toLocaleString()} queries/mo ---`);
  Object.entries(PRICING)
    .map(([k, v]) => ({ api: k, cost: Math.round(v(queries) * 100) / 100 }))
    .sort((a, b) => a.cost - b.cost)
    .forEach(c => console.log(`  ${c.api.padEnd(20)} $${c.cost.toFixed(2)}/mo`));
}
compare(5000);
compare(50000);

Expected Output

JSON
Cost comparison for 5,000 queries/month (realtime=True):
  serper       | 50,000 pack          |     $8.33/mo << CHEAPEST
  scavio       | Project              |    $30.00/mo
  dataforseo   | Live                 |    $50.00/mo
  serpapi      | Business             |   $275.00/mo

Cost comparison for 50,000 queries/month (realtime=False):
  dataforseo   | Standard Queue       |    $50.00/mo << CHEAPEST
  serper       | 500,000 pack         |    $62.50/mo
  scavio       | Growth               |   $500.00/mo
  serpapi      | Business             |   $275.00/mo

Related Tutorials

  • How to Fetch Google Search Results in Python
  • How to Optimize Your AI Agent's Search Budget
  • How to Choose Between Queue and Live SERP Modes

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+ or Node.js 18+. Basic understanding of SERP API pricing tiers. Your estimated monthly query volume. 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 SERP API by Pricing Model in 2026

Read more
Best Of

Best SERP API Providers Ranked by Price in 2026

Read more
Glossary

Search API Provider Landscape (2026)

Read more
Solution

Compare SERP API Costs Across Billing Models

Read more
Glossary

SERP API Unit Semantics

Read more
Workflow

Search API Vendor Evaluation Pipeline

Read more

Start Building

Build a cost calculator that compares per-search, credit pack, and queue-based SERP API pricing for your actual usage pattern. Python and JS examples.

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