Bright Data's SERP API requires a $499/month minimum commitment, zone configuration, proxy management, and IP whitelisting before you can run a single query. For teams that need structured search results without enterprise proxy infrastructure, a lightweight API like Scavio delivers the same organic results, featured snippets, and PAA data through a single POST endpoint at $0.005/credit with no minimum spend. This tutorial walks through both setups side by side so you can evaluate the trade-offs in under 15 minutes.
Prerequisites
- Python 3.8+ installed
- requests library installed (pip install requests)
- A Bright Data account (for the Bright Data path)
- A Scavio API key from scavio.dev (for the lightweight path)
Walkthrough
Step 1: Set up Bright Data SERP zone
Bright Data requires creating a SERP API zone in the dashboard, configuring proxy credentials, whitelisting your server IP, and choosing a billing plan ($499/month minimum for SERP API). You receive a zone username, password, and host.
# Bright Data setup (after dashboard configuration)
import requests
BD_HOST = 'brd.superproxy.io'
BD_PORT = 33335
BD_USER = 'brd-customer-CUST_ID-zone-ZONE_NAME'
BD_PASS = 'your_zone_password'
proxies = {
'http': f'http://{BD_USER}:{BD_PASS}@{BD_HOST}:{BD_PORT}',
'https': f'http://{BD_USER}:{BD_PASS}@{BD_HOST}:{BD_PORT}'
}
# Bright Data SERP request
resp = requests.get(
'https://www.google.com/search?q=best+crm+2026&gl=us',
proxies=proxies,
verify=False # Required for BD proxy
)
print(f'Status: {resp.status_code}, Length: {len(resp.text)}')
# You still need to parse raw HTML yourselfStep 2: Set up the lightweight API alternative
With a lightweight search API, there is no zone configuration, no proxy management, and no IP whitelisting. You get an API key and start querying immediately. The response is structured JSON, not raw HTML.
import requests, os
API_KEY = os.environ.get('SCAVIO_API_KEY', 'your_scavio_api_key')
resp = requests.post(
'https://api.scavio.dev/api/v1/search',
headers={'x-api-key': API_KEY, 'Content-Type': 'application/json'},
json={'query': 'best crm 2026', 'country_code': 'us'}
)
data = resp.json()
for r in data.get('organic_results', [])[:3]:
print(f"{r['title']} -> {r['link']}")Step 3: Compare response formats
Bright Data returns raw Google HTML that you must parse with BeautifulSoup or a custom parser. The lightweight API returns structured JSON with organic_results, featured_snippets, and people_also_ask already extracted.
# Bright Data: you must parse HTML yourself
from bs4 import BeautifulSoup
soup = BeautifulSoup(bd_response.text, 'html.parser')
results = []
for div in soup.select('div.g'):
title = div.select_one('h3')
link = div.select_one('a')
if title and link:
results.append({'title': title.text, 'link': link['href']})
# Fragile: selector changes break this regularly
# Lightweight API: structured JSON out of the box
organic = data.get('organic_results', [])
snippets = data.get('featured_snippets', [])
paa = data.get('people_also_ask', [])
print(f'{len(organic)} results, {len(snippets)} snippets, {len(paa)} PAA')Step 4: Compare costs at different volumes
Calculate the monthly cost for both options at common query volumes. Bright Data SERP API starts at $499/month. The lightweight API charges $0.005/credit with a free tier of 250 credits/month and plans starting at $30/7K credits.
volumes = [1000, 5000, 10000, 50000]
print(f'{"Queries/mo":<12} {"Bright Data":<15} {"Scavio":<15} {"Savings"}')
print('-' * 55)
for v in volumes:
bd_cost = max(499, v * 0.01) # ~$0.01/query on SERP API
# Scavio: $0.005/credit, 1 credit per query
if v <= 250:
sc_cost = 0
elif v <= 7000:
sc_cost = 30
elif v <= 28000:
sc_cost = 100
elif v <= 85000:
sc_cost = 250
else:
sc_cost = 500
savings = bd_cost - sc_cost
print(f'{v:<12} ${bd_cost:<14.0f} ${sc_cost:<14} ${savings:.0f}')Python Example
import requests, os, time
API_KEY = os.environ.get('SCAVIO_API_KEY', 'your_scavio_api_key')
ENDPOINT = 'https://api.scavio.dev/api/v1/search'
HEADERS = {'x-api-key': API_KEY, 'Content-Type': 'application/json'}
def lightweight_search(query: str, country: str = 'us') -> dict:
start = time.time()
resp = requests.post(ENDPOINT, headers=HEADERS,
json={'query': query, 'country_code': country})
resp.raise_for_status()
elapsed = time.time() - start
data = resp.json()
return {
'query': query,
'results': len(data.get('organic_results', [])),
'snippets': len(data.get('featured_snippets', [])),
'paa': len(data.get('people_also_ask', [])),
'latency_ms': round(elapsed * 1000)
}
queries = ['best crm 2026', 'crm pricing comparison', 'hubspot vs salesforce']
for q in queries:
stats = lightweight_search(q)
print(f"{stats['query']}: {stats['results']} results in {stats['latency_ms']}ms")
print(f" Snippets: {stats['snippets']}, PAA: {stats['paa']}")JavaScript Example
const API_KEY = process.env.SCAVIO_API_KEY || 'your_scavio_api_key';
const ENDPOINT = 'https://api.scavio.dev/api/v1/search';
const HEADERS = { 'x-api-key': API_KEY, 'Content-Type': 'application/json' };
async function lightweightSearch(query, country = 'us') {
const start = Date.now();
const resp = await fetch(ENDPOINT, {
method: 'POST',
headers: HEADERS,
body: JSON.stringify({ query, country_code: country })
});
if (!resp.ok) throw new Error(`HTTP ${resp.status}`);
const data = await resp.json();
return {
query,
results: (data.organic_results || []).length,
snippets: (data.featured_snippets || []).length,
paa: (data.people_also_ask || []).length,
latencyMs: Date.now() - start
};
}
async function main() {
const queries = ['best crm 2026', 'crm pricing comparison', 'hubspot vs salesforce'];
for (const q of queries) {
const stats = await lightweightSearch(q);
console.log(`${stats.query}: ${stats.results} results in ${stats.latencyMs}ms`);
console.log(` Snippets: ${stats.snippets}, PAA: ${stats.paa}`);
}
}
main().catch(console.error);Expected Output
Queries/mo Bright Data Scavio Savings
-------------------------------------------------------
1000 $499 $30 $469
5000 $499 $30 $469
10000 $499 $100 $399
50000 $500 $250 $250
best crm 2026: 10 results in 820ms
Snippets: 1, PAA: 4
crm pricing comparison: 10 results in 750ms
Snippets: 0, PAA: 3
hubspot vs salesforce: 10 results in 680ms
Snippets: 1, PAA: 5