Skip to main content

langchain-tinyfish

PyPI version License: MIT

TinyFish gives AI agents every level of web access through one platform. Four primitives, each built for a different layer:

  • Search: live web results, structured and ready for LLM consumption. Free.
  • Fetch: renders pages in a real browser, returns clean markdown, HTML, or JSON. Token-efficient for LLM pipelines. Free.
  • Web Agent: autonomous agents that navigate, authenticate, and extract from real websites. Uses credits.
  • Browser: remote Chromium sessions with full CDP access. Bring your own Playwright or Puppeteer scripts. Uses credits.

This package wraps all four as LangChain tools. Get your API key ->

Installation

pip install langchain-tinyfish
export TINYFISH_API_KEY="your-api-key"

Tools

All four tools can be used standalone or passed to a LangChain agent:

from langchain_tinyfish import (
    TinyFishSearch,
    TinyFishFetch,
    TinyFishWebAutomation,
    TinyFishBrowserSession,
)

Tool calls return strings. Successful responses are JSON strings produced from the TinyFish SDK response.

Search the web and get structured results with titles, snippets, and URLs. Free, no credits required.

from langchain_tinyfish import TinyFishSearch

search = TinyFishSearch()
results = search.invoke({
    "query": "latest LLM benchmarks 2025",
    "location": "US",
})
print(results)

Supported inputs:

Parameter Required Description
query Yes Search query
location No Optional location/country scope, such as "US"
language No Optional language code, such as "en"

Fetch

Extract clean content from up to 10 URLs at once. Returns markdown, HTML, or JSON. Free, no credits required.

from langchain_tinyfish import TinyFishFetch

fetch = TinyFishFetch()
content = fetch.invoke({
    "urls": ["https://docs.tinyfish.ai"],
    "format": "markdown",
    "links": True,
})
print(content)

Supported inputs:

Parameter Required Description
urls Yes List of 1-10 URLs
format No "markdown", "html", or "json"; defaults to "markdown"
links No Include extracted page links
image_links No Include extracted image links

Web Agent

Run complex, goal-oriented tasks on live websites. TinyFish handles navigation, anti-bot protection, and returns structured JSON. Uses credits.

from langchain_tinyfish import TinyFishWebAutomation

agent_tool = TinyFishWebAutomation()
result = agent_tool.invoke({
    "url": "https://finance.yahoo.com/quote/NVDA/",
    "goal": "Extract the current stock price of NVIDIA",
})
print(result)

Supported inputs:

Parameter Required Description
url Yes Starting URL for the automation
goal Yes Natural-language instructions for what to do and what to return

When TinyFishWebAutomation runs inside a LangGraph execution context, it uses TinyFish's streaming endpoint and emits progress events through LangGraph's stream writer. Outside LangGraph, it falls back to a blocking TinyFish run.

Browser Session

Launch a remote Chromium browser and get a CDP (Chrome DevTools Protocol) URL to connect with Playwright or Puppeteer. Sessions include remote browser infrastructure for direct CDP control. Uses credits.

from langchain_tinyfish import TinyFishBrowserSession

browser = TinyFishBrowserSession()
session = browser.invoke({
    "url": "https://example.com",
    "timeout_seconds": 300,
})
print(session)
# Returns a JSON string with: {"session_id": "...", "cdp_url": "wss://...", "base_url": "https://..."}

Supported inputs:

Parameter Required Description
url No Optional target URL to open when the browser session starts
timeout_seconds No Optional inactivity timeout for the browser session

With a LangChain Agent

Give your agent access to multiple TinyFish tools. The agent decides which primitive to use based on the task.

Install the optional agent dependencies:

pip install langchain langchain-openai langgraph
from langchain.agents import create_agent
from langchain_tinyfish import (
    TinyFishSearch,
    TinyFishFetch,
    TinyFishWebAutomation,
)

tools = [TinyFishSearch(), TinyFishFetch(), TinyFishWebAutomation()]
agent = create_agent(
    model="openai:gpt-5.5",
    tools=tools,
)

result = agent.invoke({
    "messages": [
        {
            "role": "user",
            "content": "Find the top 3 results for 'best open source LLMs' and extract the full content of the first result",
        }
    ]
})

for message in result["messages"]:
    print(message.content)

You can also pass the TinyFish tools to LangGraph's prebuilt agents, including langgraph.prebuilt.create_react_agent, if your application already uses LangGraph directly.

Stealth Mode and Proxies

For Web Agent runs on sites with bot protection (Cloudflare, CAPTCHAs, etc.), configure stealth browsing and geo-targeted proxies:

from langchain_tinyfish import TinyFishAPIWrapper, TinyFishWebAutomation

wrapper = TinyFishAPIWrapper(
    browser_profile="stealth",
    proxy_enabled=True,
    proxy_country_code="US",  # Also: GB, CA, DE, FR, JP, AU
)

agent_tool = TinyFishWebAutomation(api_wrapper=wrapper)

browser_profile and proxy settings are currently applied by TinyFishWebAutomation. Search, Fetch, and Browser Session tools can share the same wrapper for API key and timeout configuration, but they do not pass Web Agent browser profile or proxy options.

Configuration

All tools share a TinyFishAPIWrapper for API key and timeout configuration:

Parameter Default Description
api_key $TINYFISH_API_KEY Your TinyFish API key
browser_profile "lite" Web Agent browser profile: "lite" or "stealth"
proxy_enabled False Enable proxy routing for Web Agent runs
proxy_country_code "US" Proxy exit country for Web Agent runs: US, GB, CA, DE, FR, JP, AU
timeout 300 Request/poll timeout in seconds
from langchain_tinyfish import TinyFishAPIWrapper, TinyFishWebAutomation

wrapper = TinyFishAPIWrapper(
    browser_profile="stealth",
    timeout=600,
)
tool = TinyFishWebAutomation(api_wrapper=wrapper)

Parallel Web Agents

Every Web Agent run gets its own isolated remote browser. Run multiple agents concurrently with asyncio.gather:

import asyncio
from langchain_tinyfish import TinyFishWebAutomation

async def main():
    agent = TinyFishWebAutomation()

    tasks = [
        agent.ainvoke({"url": "https://example.com/page-1", "goal": "Extract the main heading"}),
        agent.ainvoke({"url": "https://example.com/page-2", "goal": "Extract the main heading"}),
        agent.ainvoke({"url": "https://example.com/page-3", "goal": "Extract the main heading"}),
    ]

    results = await asyncio.gather(*tasks)
    for result in results:
        print(result)

asyncio.run(main())

Async Usage

All tools support async with ainvoke:

import asyncio
from langchain_tinyfish import TinyFishSearch, TinyFishFetch

async def main():
    search = TinyFishSearch()
    fetch = TinyFishFetch()

    results = await search.ainvoke({"query": "TinyFish web agent"})
    content = await fetch.ainvoke({
        "urls": ["https://tinyfish.ai"],
        "format": "markdown",
    })

    print(results)
    print(content)

asyncio.run(main())

Development

# Install package + dev dependencies
pip install -e .
pip install -r requirements-dev.txt

# Run unit tests
make test

# Run linter
make lint

# Run integration tests (requires TINYFISH_API_KEY)
make integration_test

Resources

Support

Questions or issues? Reach out at support@tinyfish.ai or join our Discord.

Metadata

Release files for langchain-tinyfish 0.1.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for langchain-tinyfish 0.1.1
File Size Uploaded Provenance
langchain_tinyfish-0.1.1.tar.gz 17.6 kB Without provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for langchain-tinyfish 0.1.1
File Interpreter ABI Platform
langchain_tinyfish-0.1.1-py3-none-any.whl Python 3 none any Details

Total release size: 30.5 kB

Release files / langchain_tinyfish-0.1.1.tar.gz

Download URL langchain_tinyfish-0.1.1.tar.gz
Size 17.6 kB
Tags Source
SHA-256 checksum
How to use checksums
445c563d6f39a1b9f694aa29dc61dbe3bb397aba8581cec3c134a374168d1662
BLAKE2b-256 checksum
How to use checksums
1eff1321baaa1e3b7e5bc924b1eb336a266541f5d456b4a2eea4665d230f8861
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.12

Release files / langchain_tinyfish-0.1.1-py3-none-any.whl

Download URL langchain_tinyfish-0.1.1-py3-none-any.whl
Size 12.9 kB
Tags Python 3
SHA-256 checksum
How to use checksums
0769403a804b5972b962dbb61ffc8cd5dade9f2b125bc0dc10faeba100e6cead
BLAKE2b-256 checksum
How to use checksums
f96b5c7012752769b2b28fe63e05134fab95ee36b0c1f872808ee5f75dced265
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.12

Security for langchain-tinyfish 0.1.1

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release

0.1.1 This release

2 release files No provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page