Development Status
- 4 - Beta
Framework
- AsyncIO
Intended Audience
- Developers
License
- OSI Approved :: MIT License
Natural Language
- English
Operating System
- OS Independent
Programming Language
- Python :: 3
- Python :: 3.9
- Python :: 3.10
- Python :: 3.11
- Python :: 3.12
- Python :: 3.13
Topic
- Internet :: WWW/HTTP :: Dynamic Content
- Internet :: WWW/HTTP :: Indexing/Search
- Scientific/Engineering :: Artificial Intelligence
- Software Development :: Libraries :: Python Modules
Typing
- Typed
Scavio Python SDK
The official Python SDK for the Scavio Search API. Access real-time data from Google, Amazon, Walmart, YouTube, Reddit, X, TikTok, TikTok Shop, Instagram, and LinkedIn with a single API key. Built for AI agents, LLM applications, and data pipelines.
One API key, ten data sources, structured JSON with knowledge graphs. A powerful alternative to Tavily, SerpAPI, and ScraperAPI for developers who need more than just web search.
Why Scavio
| Feature | Scavio | Tavily | SerpAPI | ScraperAPI |
|---|---|---|---|---|
| Google Search | Yes | Yes | Yes | Yes |
| Amazon Products | Yes | No | Yes | No |
| Walmart Products | Yes | No | No | No |
| YouTube Search | Yes | No | Yes | No |
| Reddit Data (12 endpoints) | Yes | No | No | No |
| X Data (11 endpoints) | Yes | No | No | No |
| TikTok Data (11 endpoints) | Yes | No | No | No |
| TikTok Shop Data (8 endpoints) | Yes | No | No | No |
| Instagram Data (12 endpoints) | Yes | No | No | No |
| LinkedIn Data (14 endpoints) | Yes | No | No | No |
| Data Sources | 10 | 1 | 1 per plan | 1 |
| Structured JSON | Yes | Yes | Yes | Raw HTML |
| Knowledge Graphs | Yes | No | Yes | No |
| Async Client | Yes | Yes | No | No |
| Single API Key | Yes | Yes | No | No |
| Rate Limiting Built-in | Yes | No | No | No |
| Automatic Retries + Backoff | Yes | No | No | No |
| Fully Typed Parameters | Yes | No | No | No |
| Type Hints (PEP 561) | Yes | Yes | No | No |
Tavily focuses on AI-optimized web search. SerpAPI offers SERP parsing across search engines with separate plans. ScraperAPI provides raw web scraping with proxy rotation. Scavio combines multi-source structured data in a single search API for AI agents with one SDK and one API key.
Installation
pip install scavio
Quick Start
Get your free API key at dashboard.scavio.dev.
from scavio import ScavioClient
client = ScavioClient(api_key="sk_...") # or set SCAVIO_API_KEY env var
results = client.search("best noise cancelling headphones 2026")
for r in results["organic_results"]:
print(r["title"], r["link"])
Every method returns the raw API response as a plain dict (response shapes are
passed through from the upstream providers and vary by endpoint).
Fully typed parameters
Every endpoint exposes all of its parameters as explicit, documented,
autocomplete-friendly keyword arguments with Literal types for enums. Your
editor shows the full parameter set, allowed enum values, and defaults inline.
# Google web search with the full parameter surface
results = client.google.search(
"electric cars",
gl="us", # country of the search
hl="en", # UI language
location="Austin, Texas, United States",
time_period="last_month",
device="mobile",
)
# YouTube filters. The digit-named API fields (4k, 360, 3d) are exposed as
# valid Python identifiers: four_k, video_360, video_3d.
client.youtube.search("drone footage", four_k=True, hdr=True, duration="long")
# Amazon product lookup: pass the ASIN (sent to the API as `query`).
client.amazon.product("B09XS7JWHH", domain="co.uk", currency="GBP")
Forward-compatible passthrough
Any parameter the API adds in the future can be passed via **extra and is sent
verbatim, so you never have to wait for an SDK release:
client.google.search("openai", **{"some_new_param": "value"})
Retries and resilience
The client automatically retries transient failures (HTTP 429 and 5xx, plus
network/timeout errors) with exponential backoff, jitter, and Retry-After
support. Configure or disable it with max_retries.
1. AI Web Research -- Feed Search Results to an LLM
from scavio import ScavioClient
client = ScavioClient()
results = client.search("latest advances in quantum computing 2026")
context = "\n\n".join(
f"[{r['title']}]({r['link']})\n{r.get('snippet', '')}"
for r in results["organic_results"]
)
prompt = f"Based on these search results, summarize the latest advances:\n\n{context}"
# Pass `prompt` to your LLM of choice (OpenAI, Anthropic, etc.)
print(prompt[:500])
2. Price Comparison -- Amazon vs Walmart
from scavio import ScavioClient
client = ScavioClient()
query = "sony wh-1000xm5"
amazon = client.amazon.search(query, domain="com")
walmart = client.walmart.search(query)
print("Amazon:")
for p in amazon["data"]["products"][:3]:
print(f" ${p['price']} - {p['title'][:60]}")
print("\nWalmart:")
for p in walmart["data"]["products"][:3]:
print(f" ${p['price']} - {p['title'][:60]}")
3. Product Lookup by ASIN
from scavio import ScavioClient
client = ScavioClient()
product = client.amazon.product("B0BS1PRC4L")
data = product["data"]
print(f"Brand: {data['brand']}")
print(f"Title: {data['title']}")
print(f"Rating: {data['rating']} ({data['reviews_count']} reviews)")
print(f"Price: ${data['buybox'][0]['price']}")
4. SEO Competitor Analysis
from scavio import ScavioClient
client = ScavioClient()
results = client.search("best project management software", gl="us")
for r in results["organic_results"]:
print(f"{r['position']}. {r['title']}")
print(f" {r['link']}")
5. News Aggregation
from scavio import ScavioClient
client = ScavioClient()
news = client.google.news("AI startups")
for article in news["news_results"][:5]:
print(f"[{article['source']}] {article['title']}")
print(f" {article['link']}")
print()
6. YouTube Content Discovery
from scavio import ScavioClient
client = ScavioClient()
videos = client.youtube.search("python tutorial", sort_by="view_count")
for v in videos["data"]["results"][:5]:
print(f"{v['title']} ({v['view_count']:,} views)")
print(f" {v['url']}")
# Full details for a specific video (metadata() is a deprecated alias of video())
video = client.youtube.video("dQw4w9WgXcQ")
print(f"\n{video['data']['title']}")
print(f" {video['data']['view_count']:,} views")
# Transcript, related videos, comments, channel, and streams
transcript = client.youtube.transcript("dQw4w9WgXcQ", format="text")
related = client.youtube.related("dQw4w9WgXcQ")
comments = client.youtube.comments("dQw4w9WgXcQ")
channel_id = client.youtube.channel_resolve("@mkbhd")["data"]["channel_id"]
channel = client.youtube.channel(channel_id)
streams = client.youtube.streams("dQw4w9WgXcQ")
7. Reddit Market Research
from scavio import ScavioClient
client = ScavioClient()
posts = client.reddit.search("best mechanical keyboard")
for post in posts["data"]["results"]:
print(f"r/{post['subreddit']} - {post['title']}")
print(f" {post['url']}")
print()
# Drill into a subreddit, a post's comments, or a redditor
feed = client.reddit.subreddit_posts("MechanicalKeyboards", sort="TOP")
comments = client.reddit.post_comments("t3_1v6ngaf", sort="TOP")
history = client.reddit.user_posts("spez")
popular = client.reddit.popular()
trending = client.reddit.trending()
8. TikTok Hashtag Analysis
from scavio import ScavioClient
client = ScavioClient()
hashtag = client.tiktok.hashtag(hashtag_name="python")
info = hashtag["data"]["challengeInfo"]
print(f"#{info['challenge']['title']}")
print(f" Views: {int(info['statsV2']['viewCount']):,}")
print(f" Videos: {int(info['statsV2']['videoCount']):,}")
9. Instagram Profile and Posts
from scavio import ScavioClient
client = ScavioClient()
profile = client.instagram.profile(username="instagram")
user = profile["data"]["user"]
print(f"@{user['username']} - {user['edge_followed_by']['count']:,} followers")
posts = client.instagram.user_posts(username="instagram", count=12)
reels = client.instagram.user_reels(username="instagram")
hashtags = client.instagram.search_hashtags("fashion")
10. X Search and Profiles
from scavio import ScavioClient
client = ScavioClient()
tweets = client.x.search("AI agents", search_type="Latest")
for t in tweets["data"]["timeline"][:5]:
print(f"@{t['screen_name']}: {t['text'][:80]}")
# Profile, a user's tweets, followers, and a single tweet's replies
profile = client.x.user("elonmusk")
timeline = client.x.user_tweets("elonmusk")
followers = client.x.user_followers("elonmusk")
replies = client.x.tweet_comments("1808168603721650364", rank="top")
trending = client.x.trending(country="UnitedStates")
11. LinkedIn People and Companies
from scavio import ScavioClient
client = ScavioClient()
# Member profile and their recent posts (1 credit each). A handle or a full
# LinkedIn URL works anywhere.
person = client.linkedin.person(username="williamhgates")
person_posts = client.linkedin.person_posts(url="https://www.linkedin.com/in/williamhgates/")
# Company profile and its recent posts
company = client.linkedin.company(company="microsoft")
company_posts = client.linkedin.company_posts(company="microsoft")
# Jobs: search, then pull full detail for one listing
job_results = client.linkedin.search_jobs("software engineer", location="United States")
job = client.linkedin.job(job_id=job_results["data"]["data"][0]["id"])
# A post and its comments (10 per page)
post = client.linkedin.post(post_id="7488618410256523265")
comments = client.linkedin.post_comments(post_id="7488618410256523265", page=1)
Retired endpoints. The upstream provider withdrew the datasets behind
person_contact,company_people,company_jobs,search_peopleandsearch_posts. They remain callable but always return HTTP 410 and are never billed.company()still returnsfeatured_employees(a small sample of staff), andsearch_jobs()with a company name substitutes forcompany_jobs.
12. TikTok Shop Product Research
from scavio import ScavioClient
client = ScavioClient()
# Listings carry exact prices
results = client.tiktok_shop.search("phone case")
for p in results["data"]["products"][:5]:
print(p["title"], p["price"]["current"], p["shop"]["shop_name"])
# Detail adds description, variants, stock and shipping -- but NOT a price
# (upstream masks it), and it resolves only about 44% of the ids search returns.
# A 404 there is a normal outcome, not an error: skip the item, do not retry.
from scavio import NotFoundError
product_id = results["data"]["products"][0]["product_id"]
try:
detail = client.tiktok_shop.product(product_id)
print(detail["data"]["title"], len(detail["data"]["variants"]), "variants")
except NotFoundError:
pass # no detail data upstream for this product; skip it, do not retry
reviews = client.tiktok_shop.product_reviews(product_id, page_size=200, sort="relevant")
catalog = client.tiktok_shop.shop_products("7495514739648989419") # exact prices
tree = client.tiktok_shop.categories()
resolved = client.tiktok_shop.resolve("https://vt.tiktok.com/ZT2AHoGsE/")
13. Social Media Monitoring
from scavio import ScavioClient
client = ScavioClient()
brand = "scavio"
reddit = client.reddit.search(brand)
tiktok = client.tiktok.search_videos(brand, count=5)
print(f"Reddit mentions ({len(reddit['data']['results'])}):")
for post in reddit["data"]["results"][:3]:
print(f" r/{post['subreddit']}: {post['title']}")
tiktok_videos = tiktok["data"].get("search_item_list", [])
print(f"\nTikTok mentions ({len(tiktok_videos)}):")
for v in tiktok_videos[:3]:
desc = v["aweme_info"].get("desc", "No description")
print(f" {desc[:80]}")
14. Price Drop Alert
from scavio import ScavioClient
client = ScavioClient()
product = client.walmart.product("123456789")
price = product["data"]["price"]
title = product["data"]["title"]
threshold = 50.00
if price and price < threshold:
print(f"PRICE DROP: {title[:60]}")
print(f" Now ${price} (threshold: ${threshold})")
else:
print(f"{title[:60]}: ${price}")
15. Async Multi-Source Search
import asyncio
from scavio import AsyncScavioClient
async def main():
async with AsyncScavioClient() as client:
google = await client.search("mechanical keyboard")
amazon = await client.amazon.search("mechanical keyboard", domain="com")
print(f"Google: {len(google['organic_results'])} results")
print(f"Amazon: {len(amazon['data']['products'])} products")
for r in google["organic_results"][:3]:
print(f" Web: {r['title'][:60]}")
for p in amazon["data"]["products"][:3]:
print(f" Amazon: ${p['price']} - {p['title'][:50]}")
asyncio.run(main())
16. Check API Usage
from scavio import ScavioClient
client = ScavioClient()
usage = client.get_usage()
print(f"Plan: {usage['plan']}")
print(f"Credits remaining: {usage['credit_balance']}")
Error Handling
from scavio import (
ScavioClient,
InvalidAPIKeyError,
RateLimitError,
InsufficientCreditsError,
NotFoundError,
BadRequestError,
ScavioConnectionError,
ScavioTimeoutError,
ScavioAPIError,
ScavioError,
)
client = ScavioClient(api_key="sk_...")
try:
results = client.search("query")
except InvalidAPIKeyError:
print("Check your API key")
except RateLimitError:
print("Too many requests - upgrade your plan")
except InsufficientCreditsError:
print("Out of credits - purchase more at dashboard.scavio.dev")
except ScavioAPIError as e:
# Any other non-2xx response; inspect the details:
print(e.status_code, e.response_body)
All exceptions inherit from ScavioError. HTTP errors (BadRequestError 400,
InvalidAPIKeyError 401, InsufficientCreditsError 402, NotFoundError 404,
RateLimitError 429, ScavioAPIError for anything else) carry .status_code
and .response_body. Network failures raise ScavioConnectionError /
ScavioTimeoutError after retries are exhausted.
Configuration
client = ScavioClient(
api_key="sk_...",
base_url="https://api.scavio.dev", # custom base URL
timeout=30.0, # request timeout in seconds
max_requests_per_second=1, # client-side rate limit (1-10)
max_retries=2, # retries on 429/5xx/network (0 disables)
)
Async client
The async client mirrors the sync one method-for-method. It keeps a single
pooled httpx.AsyncClient alive for its lifetime; close it with
await client.aclose() or use the async context manager.
import asyncio
from scavio import AsyncScavioClient
async def main():
async with AsyncScavioClient(api_key="sk_...") as client:
return await client.google.search("openai", gl="us")
asyncio.run(main())
Integrations
Scavio works with popular AI/LLM frameworks:
- LangChain --
pip install langchain-scavio - MCP Server -- for Claude, Cursor, and other MCP clients
- n8n -- no-code workflow automation
API Reference
| Service | Endpoints | Credits |
|---|---|---|
search, ai_mode, maps_search, maps_place, maps_reviews, shopping, shopping_product, shopping_stores, flights, hotels, hotels_detail, news, trends, trending |
1 each | |
| Amazon | search, product, options |
1 each (options free) |
| Walmart | search, product |
1 each |
| YouTube | search, shorts, suggestions, video, metadata (deprecated alias of video), comments, comment_replies, transcript, related, channel_search, channel, channel_videos, channel_shorts, channel_community, channel_resolve, streams |
search/shorts 2, transcript 8, streams 3, rest 1 each |
search, search_suggestions, post, post_comments, comment_replies, subreddit, subreddit_posts, user, user_posts, user_comments, popular, trending |
1 each | |
| X | search, tweet, tweet_comments, tweet_retweeters, user, user_tweets, user_replies, user_media, user_followers, user_followings, trending |
1 each |
| TikTok | profile, user_posts, video, video_comments, comment_replies, search_videos, search_users, hashtag, hashtag_videos, user_followers, user_followings |
1 each |
| TikTok Shop | search, search_suggestions, product, product_reviews, categories, category_products, shop_products, resolve |
1 each |
profile, user_posts, user_reels, user_tagged, user_stories, post, post_comments, comment_replies, search_users, search_hashtags, user_followers, user_followings |
8 each (user_posts 2) |
|
person, person_about, person_posts, person_contact, company, company_posts, company_people, company_jobs, search_people, search_jobs, search_posts, job, post, post_comments |
4 each (company/company_posts 1) |
Every method's full parameter list is available inline in your editor (typed keyword arguments with docstrings). See the API docs for field-level details.
Links
License
MIT
About Scavio
Scavio is a unified search API built for AI agents — one API key, structured JSON, no scraping or proxies. A real-time Tavily alternative and SerpAPI alternative with data from:
- Google Search API — SERP results, news, images, maps, and knowledge graph
- Amazon Product API and Walmart Product API — product search and details
- YouTube API, TikTok API, and Instagram API — video and social media data
- TikTok Shop API — product search, detail, reviews, categories, and shop catalogs
- Reddit API — posts, comments, subreddits, and trending
- X API and LinkedIn API — tweets, profiles, companies, and jobs
For a detailed head-to-head breakdown, see Tavily vs Scavio.
Get a free API key and explore the documentation.