Skip to main content

LangChain integration for Scavio Search API -- real-time Google, Amazon, Walmart, YouTube, Reddit, and TikTok data with knowledge graphs and structured results

Project description

langchain-scavio

PyPI version PyPI - Downloads License: MIT Python 3.10+ LangChain

20 LangChain tools for real-time search across Google, Amazon, Walmart, YouTube, Reddit, and TikTok -- structured data with knowledge graphs, all through a single package.

pip install langchain-scavio

Get your free API key at dashboard.scavio.dev.

Why Scavio over Tavily?

Scavio Tavily SerpAPI
Platforms Google, Amazon, Walmart, YouTube, Reddit, TikTok Google only Google + others
Tools 20 1 1 per wrapper
Knowledge graphs Yes No Partial
Product data (price, rating, reviews) Yes No No
Pricing $0.005/credit $0.01/search $0.05/search
Amazon marketplace coverage 23 countries -- --
LangChain async Yes Yes Yes

What Can You Build?

  • Shopping agents -- search Amazon and Walmart, compare prices, find deals across 23 marketplaces
  • Product research agents -- Google reviews + Amazon listings + YouTube reviews + Reddit opinions in one query
  • Content research agents -- YouTube trends + Reddit sentiment + Google news in a single workflow
  • Brand monitoring -- track what Reddit and Google say about any topic in real time
  • Social media agents -- TikTok profile analytics, hashtag tracking, video comments, and trend discovery

Quick Start

import os
from langchain_scavio import ScavioSearch

os.environ["SCAVIO_API_KEY"] = "sk_live_..."

tool = ScavioSearch()
result = tool.invoke({"query": "best python web frameworks 2026"})

All 20 Tools

Tool Description
ScavioSearch Google web search with knowledge graphs, PAA questions, news
ScavioAmazonSearch Search Amazon product listings across 23 marketplaces
ScavioAmazonProduct Fetch full details for an Amazon product by ASIN
ScavioWalmartSearch Search Walmart product listings with price/fulfillment filters
ScavioWalmartProduct Fetch full details for a Walmart product by ID
ScavioYouTubeSearch Search YouTube videos with duration/date/type filters
ScavioYouTubeMetadata Fetch metadata for a YouTube video by video ID
ScavioRedditSearch Search Reddit posts or comments with sort/pagination
ScavioRedditPost Fetch a Reddit post's metadata and comment thread by URL
ScavioTikTokProfile Look up a TikTok user profile by username or sec_user_id
ScavioTikTokUserPosts Fetch a TikTok user's posted videos with statistics
ScavioTikTokVideo Fetch details for a single TikTok video
ScavioTikTokVideoComments Fetch comments on a TikTok video
ScavioTikTokCommentReplies Fetch replies to a specific comment on a TikTok video
ScavioTikTokSearchVideos Search TikTok videos by keyword with sort/time filters
ScavioTikTokSearchUsers Search TikTok users by keyword
ScavioTikTokHashtag Look up TikTok hashtag info (video count, views)
ScavioTikTokHashtagVideos Fetch TikTok videos for a specific hashtag
ScavioTikTokUserFollowers Fetch a TikTok user's followers
ScavioTikTokUserFollowings Fetch accounts a TikTok user is following

Use with a LangChain Agent

Scavio tools plug into the current create_agent API from langchain.agents:

from langchain.agents import create_agent
from langchain_scavio import (
    ScavioSearch,
    ScavioAmazonSearch, ScavioAmazonProduct,
    ScavioWalmartSearch,
    ScavioYouTubeSearch, ScavioYouTubeMetadata,
    ScavioRedditSearch, ScavioRedditPost,
    ScavioTikTokSearchVideos, ScavioTikTokProfile, ScavioTikTokVideo,
)

agent = create_agent(
    "openai:gpt-4o",
    tools=[
        ScavioSearch(max_results=5),
        ScavioAmazonSearch(max_results=5),
        ScavioAmazonProduct(),
        ScavioWalmartSearch(max_results=5),
        ScavioYouTubeSearch(max_results=5),
        ScavioYouTubeMetadata(),
        ScavioRedditSearch(max_results=5),
        ScavioRedditPost(),
        ScavioTikTokSearchVideos(max_results=5),
        ScavioTikTokProfile(),
        ScavioTikTokVideo(),
    ],
)

response = agent.invoke({
    "messages": [{"role": "user", "content": "Find me a Python book on Amazon under $30"}]
})

Async Support

All tools support async invocation:

result = await tool.ainvoke({"query": "async python frameworks"})

Configuration

Google Search

from langchain_scavio import ScavioSearch

tool = ScavioSearch(
    scavio_api_key="sk_live_...",       # or SCAVIO_API_KEY env var
    max_results=5,
    light_request=None,                  # None=light/1 credit, False=full/2 credits
    include_knowledge_graph=True,
    include_questions=True,
    include_related=False,
    country_code="us",
    language="en",
    search_type="classic",               # classic|news|maps|images|lens
    device="desktop",
)

Amazon

from langchain_scavio import ScavioAmazonSearch, ScavioAmazonProduct

search = ScavioAmazonSearch(
    max_results=5,
    pages=1,                             # number of result pages to fetch
    domain="com",                        # see supported marketplaces below
)

product = ScavioAmazonProduct()
result = product.invoke({"query": "B08N5WRWNW"})  # query = ASIN

Targeting a marketplace: use domain to pick which Amazon store to search -- do not use a country code. Supported domains: com (US), co.uk (UK), ca, de, fr, es, it, co.jp, in, com.au, com.br, com.mx, nl, pl, se, sg, ae, sa, eg, cn, com.be, com.tr.

Walmart

from langchain_scavio import ScavioWalmartSearch, ScavioWalmartProduct

search = ScavioWalmartSearch(max_results=5)
result = search.invoke({
    "query": "air fryer",
    "sort_by": "price_low",              # best_match|price_low|price_high|best_seller
    "max_price": 5000,                   # in cents
    "fulfillment_speed": "2_days",       # today|tomorrow|2_days|anytime
})

product = ScavioWalmartProduct()
result = product.invoke({"product_id": "123456789"})

YouTube

from langchain_scavio import ScavioYouTubeSearch, ScavioYouTubeMetadata

search = ScavioYouTubeSearch(max_results=5)
result = search.invoke({
    "query": "python tutorial",
    "duration": "medium",                # short|medium|long
    "upload_date": "this_month",         # last_hour|today|this_week|this_month|this_year
    "sort_by": "view_count",             # relevance|date|view_count|rating
    "video_type": "video",               # video|channel|playlist
})

metadata = ScavioYouTubeMetadata()
result = metadata.invoke({"video_id": "dQw4w9WgXcQ"})

Reddit

Reddit endpoints cost 2 credits each and typically take 5-15 seconds (JS rendering required).

from langchain_scavio import ScavioRedditSearch, ScavioRedditPost

search = ScavioRedditSearch(max_results=5)
result = search.invoke({
    "query": "langchain",
    "sort": "top",                       # new|relevance|hot|top|comments
    "type": "posts",                     # posts|comments
})

# Paginate by passing back the previous response's nextCursor
next_page = search.invoke({
    "query": "langchain",
    "sort": "top",
    "cursor": result["data"]["nextCursor"],
})

post = ScavioRedditPost()
result = post.invoke({
    "url": "https://www.reddit.com/r/programming/comments/abc123/example_post/"
})
# result["data"]["post"] + result["data"]["comments"] (flat list with `depth`)

TikTok

from langchain_scavio import (
    ScavioTikTokProfile, ScavioTikTokUserPosts, ScavioTikTokVideo,
    ScavioTikTokVideoComments, ScavioTikTokCommentReplies,
    ScavioTikTokSearchVideos, ScavioTikTokSearchUsers,
    ScavioTikTokHashtag, ScavioTikTokHashtagVideos,
    ScavioTikTokUserFollowers, ScavioTikTokUserFollowings,
)

# Look up a user profile (returns sec_uid needed by other tools)
profile = ScavioTikTokProfile()
result = profile.invoke({"username": "tiktok"})
sec_uid = result["data"]["user"]["sec_uid"]

# Fetch their recent posts
posts = ScavioTikTokUserPosts(max_results=5)
result = posts.invoke({"sec_user_id": sec_uid, "sort_type": "1"})  # popular

# Search videos by keyword
search = ScavioTikTokSearchVideos(max_results=5)
result = search.invoke({
    "keyword": "python tutorial",
    "sort_type": "1",                        # 0=relevance, 1=most likes
    "publish_time": "30",                    # 0=all, 1=day, 7=week, 30=month
})

# Get video details and comments
video = ScavioTikTokVideo()
result = video.invoke({"video_id": "7123456789012345678"})

comments = ScavioTikTokVideoComments(max_results=10)
result = comments.invoke({"video_id": "7123456789012345678"})

# Hashtag research
hashtag = ScavioTikTokHashtag()
result = hashtag.invoke({"hashtag_name": "python"})
hashtag_id = result["data"]["challengeInfo"]["challenge"]["id"]

hashtag_videos = ScavioTikTokHashtagVideos(max_results=5)
result = hashtag_videos.invoke({"hashtag_id": hashtag_id})

Agent-Controllable Parameters

ScavioSearch

Parameter Type Description
query str Search query
search_type classic|news|maps|images|lens Type of search
country_code str ISO 3166-1 alpha-2
language str ISO 639-1
device desktop|mobile Device type
page int Result page number

ScavioAmazonSearch

Parameter Type Description
query str Product search query
domain str Amazon marketplace -- the only way to select a store (com, co.uk, de, co.jp, ...)
sort_by str featured|most_recent|price_low_to_high|price_high_to_low|average_review|bestsellers
start_page int Page number
category_id str Category filter
merchant_id str Seller filter
language / currency str Localization
zip_code str Local pricing

ScavioWalmartSearch

Parameter Type Description
query str Product search query
sort_by str best_match|price_low|price_high|best_seller
min_price / max_price int Price range in cents
fulfillment_speed str today|tomorrow|2_days|anytime
delivery_zip str Delivery ZIP code

ScavioYouTubeSearch

Parameter Type Description
query str Search query
upload_date str last_hour|today|this_week|this_month|this_year
video_type str video|channel|playlist
duration str short|medium|long
sort_by str relevance|date|view_count|rating
hd / subtitles / live bool Content filters

ScavioRedditSearch

Parameter Type Description
query str Reddit search query (1-500 chars)
type str posts|comments
sort str new|relevance|hot|top|comments
cursor str Opaque pagination cursor from prior response's nextCursor

ScavioRedditPost

Parameter Type Description
url str Full Reddit post URL (www., old., or new. subdomains accepted)

ScavioTikTokProfile

Parameter Type Description
username str TikTok handle without @ (provide this or sec_user_id)
sec_user_id str Secure user ID from a previous lookup

ScavioTikTokUserPosts

Parameter Type Description
sec_user_id str Secure user ID from a profile lookup
cursor str Pagination cursor (from data.max_cursor)
count int Results per page (1-30, default 20)
sort_type str 0=latest (default), 1=popular

ScavioTikTokVideo

Parameter Type Description
video_id str TikTok video identifier

ScavioTikTokVideoComments

Parameter Type Description
video_id str TikTok video identifier
cursor str Pagination cursor
count int Results per page (1-50, default 20)

ScavioTikTokCommentReplies

Parameter Type Description
video_id str TikTok video identifier
comment_id str Comment ID from the comments endpoint
cursor str Pagination cursor
count int Results per page (1-50, default 20)

ScavioTikTokSearchVideos

Parameter Type Description
keyword str Search query (1-500 chars)
cursor str Pagination offset
count int Results per page (1-30, default 20)
sort_type str 0=relevance (default), 1=most likes
publish_time str 0=all, 1=day, 7=week, 30=month, 90=3mo, 180=6mo

ScavioTikTokSearchUsers

Parameter Type Description
keyword str Search query (1-500 chars)
cursor str Pagination offset
count int Results per page (1-30, default 20)

ScavioTikTokHashtag

Parameter Type Description
hashtag_name str Hashtag text without # (provide this or hashtag_id)
hashtag_id str Numeric hashtag identifier

ScavioTikTokHashtagVideos

Parameter Type Description
hashtag_id str Hashtag ID from the hashtag info endpoint
cursor str Pagination cursor
count int Results per page (1-30, default 20)

ScavioTikTokUserFollowers / ScavioTikTokUserFollowings

Parameter Type Description
sec_user_id str Secure user ID from a profile lookup
count int Results per page (1-20, default 20)
page_token str Pagination token from data.next_page_token
min_time int Pagination field from data.min_time

Error Handling

  • Empty results raise ToolException with actionable suggestions for the LLM
  • API errors return {"error": "message"} without crashing the agent
  • handle_tool_error=True ensures LangChain passes errors to the LLM as context

Architecture

ScavioBaseAPIWrapper                      # Auth, headers, sync/async HTTP POST
  +-- ScavioSearchAPIWrapper              # -> /api/v1/google
  +-- ScavioAmazonSearchAPIWrapper        # -> /api/v1/amazon/search
  +-- ScavioAmazonProductAPIWrapper       # -> /api/v1/amazon/product
  +-- ScavioWalmartSearchAPIWrapper       # -> /api/v1/walmart/search
  +-- ScavioWalmartProductAPIWrapper      # -> /api/v1/walmart/product
  +-- ScavioYouTubeSearchAPIWrapper       # -> /api/v1/youtube/search
  +-- ScavioYouTubeMetadataAPIWrapper     # -> /api/v1/youtube/metadata
  +-- ScavioRedditSearchAPIWrapper        # -> /api/v1/reddit/search
  +-- ScavioRedditPostAPIWrapper          # -> /api/v1/reddit/post
  +-- ScavioTikTokProfileAPIWrapper       # -> /api/v1/tiktok/profile
  +-- ScavioTikTokUserPostsAPIWrapper     # -> /api/v1/tiktok/user/posts
  +-- ScavioTikTokVideoAPIWrapper         # -> /api/v1/tiktok/video
  +-- ScavioTikTokVideoCommentsAPIWrapper # -> /api/v1/tiktok/video/comments
  +-- ScavioTikTokCommentRepliesAPIWrapper# -> /api/v1/tiktok/video/comments/replies
  +-- ScavioTikTokSearchVideosAPIWrapper  # -> /api/v1/tiktok/search/videos
  +-- ScavioTikTokSearchUsersAPIWrapper   # -> /api/v1/tiktok/search/users
  +-- ScavioTikTokHashtagAPIWrapper       # -> /api/v1/tiktok/hashtag
  +-- ScavioTikTokHashtagVideosAPIWrapper # -> /api/v1/tiktok/hashtag/videos
  +-- ScavioTikTokUserFollowersAPIWrapper # -> /api/v1/tiktok/user/followers
  +-- ScavioTikTokUserFollowingsAPIWrapper# -> /api/v1/tiktok/user/followings

Each tool splits parameters into init-only (developer-controlled, e.g. max_results, domain) and LLM-controllable (passed via args_schema at invocation time, e.g. query, sort_by).

Migrating from Tavily

- from langchain_tavily import TavilySearch
+ from langchain_scavio import ScavioSearch

- tool = TavilySearch(max_results=5)
+ tool = ScavioSearch(max_results=5)

See the full migration guide for parameter mapping and feature comparison.

License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

langchain_scavio-2.7.tar.gz (26.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

langchain_scavio-2.7-py3-none-any.whl (30.5 kB view details)

Uploaded Python 3

File details

Details for the file langchain_scavio-2.7.tar.gz.

File metadata

  • Download URL: langchain_scavio-2.7.tar.gz
  • Upload date:
  • Size: 26.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.11

File hashes

Hashes for langchain_scavio-2.7.tar.gz
Algorithm Hash digest
SHA256 dcef913618fdfda34188b3cc7dcc40bbaee54ddb59fec3026a97d39ba7f6a545
MD5 a1a587b7d7edf52ab304fde76cfea838
BLAKE2b-256 4b261185dcf27d9fc69badc933fc657bd9797284f86ef1afaf81f9d313b2bd34

See more details on using hashes here.

File details

Details for the file langchain_scavio-2.7-py3-none-any.whl.

File metadata

  • Download URL: langchain_scavio-2.7-py3-none-any.whl
  • Upload date:
  • Size: 30.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.11

File hashes

Hashes for langchain_scavio-2.7-py3-none-any.whl
Algorithm Hash digest
SHA256 399d765b531e83347d6dc7c9596f83d8fcfac4ea5b75e6da6ee01cc31686bf14
MD5 f040a5dfb2e66bc8a53560756fef9cd1
BLAKE2b-256 d05bbec075c0ded2354c235bdcbf96d2318dfe58c2f38978521145b45445add6

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page