TinyFish Web Agent
Use TinyFish web agent to extract/scrape websites, extract data, and automate browser actions using natural language. Use when you need to extract/scrape dat...
Use TinyFish web agent to extract/scrape websites, extract data, and automate browser actions using natural language. Use when you need to extract/scrape dat...
Real data. Real impact.
Emerging
Developers
Per week
Open source
Skills give you superpowers. Install in 30 seconds.
You have access to the TinyFish CLI (
tinyfish) — a suite of web tools you can call from the terminal.
If not installed:
npm install -g @tiny-fish/cli
If not authenticated: tinyfish auth login or set TINYFISH_API_KEY env var. Keys at https://agent.tinyfish.ai/api-keys
TinyFish has four tools. Start with the lightest one that can do the job and escalate only when needed.
search → fetch → agent → browser lightest heaviest
| Tool | When to use | Speed | Cost |
|---|---|---|---|
| search | You need to find URLs or get a quick answer about a topic | Fastest | Lowest |
| fetch | You have URLs and need their clean content (articles, docs, product pages) | Fast | Low |
| agent | You need to interact with a page — click, fill forms, navigate, extract structured data from dynamic sites | Slower | Higher |
| browser | Agent isn't enough — you need raw programmatic browser control via CDP | Slowest | Highest |
Research: search → fetch Search for a topic, then fetch the best results to read their full content.
# 1. Find URLs tinyfish search query "best React state management libraries 2026"2. Read the top results
tinyfish fetch content get --format markdown "https://result1.com" "https://result2.com"
Deep extraction: search → agent Search to find the right site, then use agent to interact with it and extract structured data.
# 1. Find the site tinyfish search query "Nike running shoes official store"2. Automate extraction on it
tinyfish agent run --url "https://nike.com/running"
"Extract all running shoes as JSON: [{"name": str, "price": str, "colors": [str]}]"
Escalation: fetch → agent Try fetch first. If the page is dynamic/JS-heavy and fetch returns empty or incomplete content, escalate to agent.
Full control: agent → browser If agent can't handle a complex multi-step workflow, spin up a raw browser session and automate it yourself via CDP.
tinyfish search queryWeb search. Returns ranked results with titles, URLs, and snippets.
tinyfish search query "<query>" [--location <hint>] [--language <hint>] [--pretty]
--location and --language for geo-targeted results--pretty for human-readabletinyfish search query "best pho in Ho Chi Minh City" --location "Vietnam" --language "en"
tinyfish fetch content getFetch clean, extracted content from one or more URLs. Strips ads, nav, boilerplate — returns just the content.
tinyfish fetch content get <urls...> [--format markdown|html|json] [--links] [--image-links] [--pretty]
--format markdown (default) — clean readable text--format json — structured document tree--links — include all extracted links from the page--image-links — include extracted image URLsurl, final_url, title, language, author, published_date, text, latency_ms# Fetch one page as markdown tinyfish fetch content get --format markdown "https://example.com/article"Fetch multiple pages with links
tinyfish fetch content get --links "https://site-a.com" "https://site-b.com" "https://site-c.com"
tinyfish agent runRun a browser automation using a natural language goal. The agent opens a real browser, navigates, clicks, fills forms, and extracts data.
tinyfish agent run --url <url> "<goal>" [--sync] [--async] [--pretty]
| Flag | Purpose |
|---|---|
| Target URL (bare hostnames get auto-prepended) |
| Wait for full result without streaming steps |
| Submit and return immediately |
| Human-readable output |
Output: Default streams
data: {...} SSE lines. The final result is the event where type == "COMPLETE" and status == "COMPLETED" — the extracted data is in the resultJson field. Read the raw output directly; no script-side parsing is needed.
Always specify the JSON structure you want in the goal:
tinyfish agent run --url "https://example.com/products" \ "Extract all products as JSON array: [{\"name\": str, \"price\": str, \"url\": str}]"tinyfish agent run --url "https://example.com/search"
"Search for 'wireless headphones', filter under $50, extract top 5 as JSON: [{"name": str, "price": str, "rating": str}]"
Parallel extraction — when hitting multiple independent sites, make separate calls. Do NOT combine into one goal.
Good — parallel calls (run simultaneously):
tinyfish agent run --url "https://pizzahut.com" \ "Extract pizza prices as JSON: [{\"name\": str, \"price\": str}]"tinyfish agent run --url "https://dominos.com"
"Extract pizza prices as JSON: [{"name": str, "price": str}]"
Bad — single combined call:
# Don't do this — less reliable and slower tinyfish agent run --url "https://pizzahut.com" \ "Extract prices from Pizza Hut and also go to Dominos..."
Managing runs:
tinyfish agent run list [--status PENDING|RUNNING|COMPLETED|FAILED|CANCELLED] [--limit N] tinyfish agent run get <run_id> tinyfish agent run cancel <run_id>
Batch operations — submit many runs from a CSV file (
url,goal columns):
tinyfish agent batch run --input runs.csv tinyfish agent batch list tinyfish agent batch get <batch_id> tinyfish agent batch cancel <batch_id>
tinyfish browser session createSpin up a remote browser instance. Returns a CDP WebSocket URL for programmatic control.
tinyfish browser session create [--url <url>] [--pretty]
--url optionally navigates to a page after creationsession_id, cdp_url (WebSocket), and base_urlcdp_url with Playwright, Puppeteer, or any CDP clienttinyfish browser session create --url "https://example.com" # Returns: { session_id, cdp_url: "wss://...", base_url: "https://..." }
--pretty for human-readable output. Default is JSON.--debug on the root command or set TINYFISH_DEBUG=1 to log HTTP requests to stderr.No automatic installation available. Please visit the source repository for installation instructions.
View Installation Instructions1,500+ AI skills, agents & workflows. Install in 30 seconds. Part of the Torly.ai family.
© 2026 Torly.ai. All rights reserved.