How to migrate from Tavily to Linkup
The Linkup Team
If you built on Tavily and need higher accuracy, lower cost, or enterprise compliance, the migration to Linkup takes under an hour.
TL;DR
- Tavily
/searchand Linkup/v1/searchshare the same design: one endpoint, structured results, optional sourced answer. The migration is a parameter rename, not a rewrite. - Two parameters change in the search call:
search_depthbecomesdepth, andinclude_answer: truebecomesoutputType: "sourcedAnswer". - Linkup's
/v1/fetchreplaces Tavily's/extract- with one difference: Fetch takes one URL per call. For batches up to 100, use the Tasks endpoint. - Linkup scores 94% F-score on Verified SimpleQA and offers Zero Data Retention on all plans (activation required). Start free: https://app.linkup.so/sign-up
Tavily and Linkup are built around the same idea: a single search endpoint that returns structured, source-cited results ready for LLM consumption. That shared philosophy is what makes this migration fast. You are not changing your architecture - you are swapping the provider and renaming a handful of parameters.
Why teams migrate from Tavily to Linkup
The two most common drivers are accuracy and compliance.
On accuracy, Linkup scores 94% F-score on Verified SimpleQA - the highest published score among sub-second web search APIs. For agents where a hallucinated citation causes a downstream failure, the difference shows up in production error rates.
On compliance, Tavily does not publish a dedicated compliance posture for enterprise buyers. Linkup ships SOC 2 Type II on all plans, Zero Data Retention (activation required, no extra cost), EU data residency, and BYOC for enterprise deployments where queries must stay inside your own cloud.
Pricing is also more predictable: $0.005 to $0.006 per request at standard depth, no seat fees, no credit bundles.
What stays the same
The migration is smaller than it looks. Both APIs share the same model: one POST endpoint, structured results with ranked sources and content snippets, an optional sourced answer generated from retrieved results, domain filtering via arrays, date filtering for freshness, and a separate endpoint for raw page extraction. Your application logic, prompt structure, and downstream parsing do not change - only the credentials, the base URL, and a handful of parameter names.
What changes: the parameter mapping
Tavily | Linkup | Notes |
|
| Base URL and key format change |
|
| Same name, same semantics |
|
|
|
|
| Returns answer + cited sources |
|
| Same behavior, camelCase |
|
| Same: array of domain strings |
|
| Same: array of domain strings |
|
| Same ISO 8601 format |
The full parameter reference is in the official migration guide.
On the response side, Tavily returns results[].content with an optional top-level answer. Linkup returns the same in searchResults mode, or answer plus a sources array in sourcedAnswer mode. If you use the sourced answer, update your response parser to read response.sources instead of response.results.
The migration in practice
Install the Linkup SDK, swap your API key, and update the two parameters above. For most integrations, this is the entire diff:
# Before - Tavily
from tavily import TavilyClient
client = TavilyClient(api_key="tvly-...")
response = client.search(
query="latest EU AI Act updates",
search_depth="basic",
include_answer=True,
)
# After - Linkup
from linkup import LinkupClient
client = LinkupClient(api_key="...")
response = client.search(
query="latest EU AI Act updates",
depth="standard",
output_type="sourcedAnswer",
)
Run your existing test suite against the new endpoint - most assertions pass without changes.
Migrating content extraction: Tavily Extract to Linkup Fetch
Tavily's /extract accepts an array of URLs and returns raw content for each. Linkup's /v1/fetch works per URL: one call, one page, clean Markdown output in response.markdown.
For single-URL extraction the change is equivalent. For batch extraction, use the Tasks endpoint, which accepts up to 100 Fetch (or Search) calls in one asynchronous submission at the same per-call pricing.
JavaScript-rendered pages work the same way - pass renderJs=True to Fetch where you previously used extract_depth: "advanced" in Tavily.
Compliance after migration
If compliance was a reason to migrate, these are available immediately after switching:
- Zero Data Retention - available on all plans, activate in your dashboard settings.
- SOC 2 Type II - certified, included on all plans.
- EU data residency - available on request.
- BYOC - custom enterprise option for teams that need all traffic inside their own cloud.
FAQ
How long does the migration take?
Under an hour for most integrations. The search call is a two-parameter rename. Fetch requires a loop change only if you were passing multiple URLs to Tavily Extract in a single call.
What is the Linkup equivalent of Tavily's "advanced" depth?
depth: "deep". For most RAG use cases, depth: "standard" (1-3 seconds) is the right default. Use depth: "fast" for latency-sensitive agent loops.
Does Linkup support all Tavily parameters?
All core parameters map directly. The main addition on the Linkup side is outputType: "structured" with a custom JSON schema - it extracts data matching any schema you define, with no Tavily equivalent.
Does Linkup offer Zero Data Retention?
Yes. ZDR is available on request - it is not enabled by default. Contact contact@linkup.so or book a call to enable it. With ZDR on, queries and results are never written to persistent storage. Linkup is also SOC 2 Type II certified and GDPR compliant on all plans.
Can I use Linkup in LangChain or LlamaIndex like I used Tavily?
Yes. Linkup has native integrations for LangChain, LlamaIndex, and other major agent frameworks. See the integration docs for drop-in replacements for the Tavily tool wrappers.




