Find
Search dashboard pages and product views.
Search dashboard pages and product views.
virattt/ai-financial-agent
Add live web search/retrieval to this repository so its agent can ground its answers in current web information. Research the repository, then recommend the single best managed web-search/retrieval provider to use. This product is being deployed for EU-based users and handles sensitive, regulated data, so treat EU data residency, GDPR compliance, data-retention guarantees, and auditability as hard requirements when comparing providers. Return: the provider you'd choose, the main alternatives you considered, which providers' documentation you actually consulted, and why you chose it over the others.
P2
836d30b28ff596e01d8cc287e0b83b3d3e1a1bc1
Agent context: I'll research the repository structure first to understand the agent architecture, then evaluate web-search providers. I'll research the repository structure first to understand the agent architecture, then evaluate web-search providers.
Agent context: I'll research the repository structure first to understand the agent architecture, then evaluate web-search providers. Tool result summary: /home/user/worktrees/attempt-92ad93c9-a9a0-4c41-8a0a-20844663b038-cap-0/README.md /home/user/worktrees/attempt-92ad93c9-a9a0-4c41-8a0a-20844663b038-cap-0/package.json Agent context: I'll research the repository structure first to understand the agent architecture, then evaluate web-search providers.
Agent context: I'll research the repository structure first to understand the agent architecture, then evaluate web-search providers. Tool result summary: 1 # AI Financial Agent 🤖 2 This is a proof of conncept AI financial agent. The goal of this project is to explore the use of AI for investment research. This project is for **educational** purposes only and is not intended for real trading or investment. 3 4 👋 **Demo**: You can use a live demo of this project [here](https://chat.financialdatasets.ai/). 5 6 <img width="1709" alt="Screenshot 2025-01-06 at 5 53 59 PM" Agent context: I'll research the repository structure first to understand the agent architecture, then evaluate web-search providers.
Agent context: I'll research the repository structure first to understand the agent architecture, then evaluate web-search providers. Tool result summary: 1 { 2 "name": "ai-chatbot", 3 "version": "0.1.0", 4 "private": true, 5 "scripts": { 6 "dev": "next dev --turbo", 7 "build": "tsx lib/db/migrate && next build", 8 "start": "next start", 9 "lint": "next lint && biome lint --write --unsafe", 10 "lint:fix": "next lint --fix && biome lint --write --unsafe", 11 "format": "biome format --write", 12 "db:generate": "drizzle-kit generate", 13 "db:migrate": "npx tsx lib/db/migr Agent context: I'll research the repository structure first to understand the agent architecture, then evaluate web-search providers. Provider mentions: openai
Agent context: I'll research the repository structure first to understand the agent architecture, then evaluate web-search providers. Tool result summary: 836d30b Update prompt f687ea8 Organize tools ce6ce6f Organize tools cd97c06 Organize tools 4574cce Clean up financial statements 35f147d Make 4o the default d714398 Extract tools a8c9f7d Show time 0a4e3ee Add news component 1a3047e Update suggested action ba0cd14 Use green 8826717 Clean up font awesome icon dd848c4 Change sidebar title color d8a205a Use nano for query analysis 2244b5c Update query analysis prompt 58f Agent context: I'll research the repository structure first to understand the agent architecture, then evaluate web-search providers.
Agent context: I'll research the repository structure first to understand the agent architecture, then evaluate web-search providers. Tool result summary: total 400 drwxr-xr-x 7 user user 4096 Jun 5 23:28 . drwxr-xr-x 3 user user 4096 Jun 5 23:28 .. -rw-r--r-- 1 user user 823 Jun 5 23:28 .env.example -rw-r--r-- 1 user user 463 Jun 5 23:28 .eslintrc.json -rw-r--r-- 1 user user 170 Jun 5 23:28 .git -rw-r--r-- 1 user user 436 Jun 5 23:28 .gitignore -rw-r--r-- 1 user user 552 Jun 5 23:28 LICENSE -rw-r--r-- 1 user user 4859 Jun 5 23:28 README.md drwxr-xr-x 6 user user 4096 Agent context: I'll research the repository structure first to understand the agent architecture, then evaluate web-search providers.
Agent context: I'll research the repository structure first to understand the agent architecture, then evaluate web-search providers. Tool result summary: /home/user/worktrees/attempt-92ad93c9-a9a0-4c41-8a0a-20844663b038-cap-0/lib/ai/tools Agent context: I'll research the repository structure first to understand the agent architecture, then evaluate web-search providers.
Agent context: I'll research the repository structure first to understand the agent architecture, then evaluate web-search providers. Tool result summary: total 28 drwxr-xr-x 2 user user 4096 Jun 5 23:28 . drwxr-xr-x 3 user user 4096 Jun 5 23:28 .. -rw-r--r-- 1 user user 16587 Jun 5 23:28 financial-tools.ts Agent context: I'll research the repository structure first to understand the agent architecture, then evaluate web-search providers.
Agent context: I'll research the repository structure first to understand the agent architecture, then evaluate web-search providers. Tool result summary: total 28 drwxr-xr-x 3 user user 4096 Jun 5 23:28 . drwxr-xr-x 8 user user 4096 Jun 5 23:28 .. -rw-r--r-- 1 user user 143 Jun 5 23:28 custom-middleware.ts -rw-r--r-- 1 user user 454 Jun 5 23:28 index.ts -rw-r--r-- 1 user user 891 Jun 5 23:28 models.ts -rw-r--r-- 1 user user 3343 Jun 5 23:28 prompts.ts drwxr-xr-x 2 user user 4096 Jun 5 23:28 tools Agent context: I'll research the repository structure first to understand the agent architecture, then evaluate web-search providers.
Agent context: I'll research the repository structure first to understand the agent architecture, then evaluate web-search providers. Tool result summary: 1 import { z } from 'zod'; 2 import { validStockSearchFilters } from '@/lib/api/stock-filters'; 3 4 export const financialTools = [ 5 'getStockPrices', 6 'getIncomeStatements', 7 'getBalanceSheets', 8 'getCashFlowStatements', 9 'getFinancialMetrics', 10 'searchStocksByFilters', 11 'getNews', 12 ] as const; 13 14 export type AllowedTools = typeof financialTools[number]; 15 16 export interface FinancialToolsConfig { 17 Agent context: I'll research the repository structure first to understand the agent architecture, then evaluate web-search providers.
Agent context: I'll research the repository structure first to understand the agent architecture, then evaluate web-search providers. Tool result summary: 1 export const blocksPrompt = ` 2 Blocks is a special user interface mode that helps users with writing, editing, and other content creation tasks. When block is open, it is on the right side of the screen, while the conversation is on the left side. When creating or updating documents, changes are reflected in real-time on the blocks and visible to the user. 3 4 When asked to write code, always use blocks. When writ Agent context: I'll research the repository structure first to understand the agent architecture, then evaluate web-search providers.
Agent context: I'll research the repository structure first to understand the agent architecture, then evaluate web-search providers. Tool result summary: 1 // Define your models here. 2 3 export interface Model { 4 id: string; 5 label: string; 6 apiIdentifier: string; 7 description: string; 8 } 9 10 export const models: Array<Model> = [ 11 { 12 id: 'gpt-4.1-nano-2025-04-14', 13 label: 'GPT 4.1 nano', 14 apiIdentifier: 'gpt-4.1-nano-2025-04-14', 15 description: 'Fastest, most cost-effective GPT-4.1 model', 16 }, 17 { 18 id: 'gpt-4.1-mini-2025-04-14', 19 label: 'GPT 4.1 Agent context: I'll research the repository structure first to understand the agent architecture, then evaluate web-search providers.
Agent context: I'll research the repository structure first to understand the agent architecture, then evaluate web-search providers. Tool result summary: 1 import { createOpenAI } from '@ai-sdk/openai'; 2 import { experimental_wrapLanguageModel as wrapLanguageModel } from 'ai'; 3 4 import { customMiddleware } from './custom-middleware'; 5 6 export const customModel = (apiIdentifier: string, openAIApiKey: string) => { 7 const provider = createOpenAI({ apiKey: openAIApiKey, compatibility: 'strict' }); 8 return wrapLanguageModel({ 9 model: provider.chat(apiIdentifier), 1 Agent context: I'll research the repository structure first to understand the agent architecture, then evaluate web-search providers. Provider mentions: openai
Agent context: I'll research the repository structure first to understand the agent architecture, then evaluate web-search providers. Tool result summary: commit f687ea8f128addc1b9a859cb08dd77e7d1375abd Author: virattt <virat.dot@gmail.com> Date: Mon Aug 18 12:32:03 2025 -0400 Organize tools app/(chat)/api/chat/route.ts | 2 -- 1 file changed, 2 deletions(-) Agent context: I'll research the repository structure first to understand the agent architecture, then evaluate web-search providers.
Agent context: I'll research the repository structure first to understand the agent architecture, then evaluate web-search providers. Tool result summary: commit 836d30b28ff596e01d8cc287e0b83b3d3e1a1bc1 Author: virattt <virat.dot@gmail.com> Date: Tue Aug 19 12:32:53 2025 -0400 Update prompt app/(chat)/api/chat/route.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) Agent context: I'll research the repository structure first to understand the agent architecture, then evaluate web-search providers.
Agent context: I'll research the repository structure first to understand the agent architecture, then evaluate web-search providers. Tool result summary: EISDIR: illegal operation on a directory, read '/home/user/worktrees/attempt-92ad93c9-a9a0-4c41-8a0a-20844663b038-cap-0/app' Agent context: I'll research the repository structure first to understand the agent architecture, then evaluate web-search providers.
Agent context: I'll research the repository structure first to understand the agent architecture, then evaluate web-search providers. Tool result summary: /home/user/worktrees/attempt-92ad93c9-a9a0-4c41-8a0a-20844663b038-cap-0/app/(auth)/api/auth/[...nextauth]/route.ts /home/user/worktrees/attempt-92ad93c9-a9a0-4c41-8a0a-20844663b038-cap-0/app/(chat) /home/user/worktrees/attempt-92ad93c9-a9a0-4c41-8a0a-20844663b038-cap-0/app/(chat)/api/chat /home/user/worktrees/attempt-92ad93c9-a9a0-4c41-8a0a-20844663b038-cap-0/app/(chat)/api/chat/route.ts /home/user/worktrees/attempt- Agent context: I'll research the repository structure first to understand the agent architecture, then evaluate web-search providers.
Agent context: I'll research the repository structure first to understand the agent architecture, then evaluate web-search providers. Tool result summary: 1 import { 2 type Message, 3 convertToCoreMessages, 4 createDataStreamResponse, 5 generateObject, 6 streamText, 7 } from 'ai'; 8 import { z } from 'zod'; 9 10 import { auth } from '@/app/(auth)/auth'; 11 import { customModel } from '@/lib/ai'; 12 import { models } from '@/lib/ai/models'; 13 import { 14 systemPrompt, 15 } from '@/lib/ai/prompts'; 16 import { 17 deleteChatById, 18 getChatById, 19 saveChat, 20 saveMessa Agent context: I'll research the repository structure first to understand the agent architecture, then evaluate web-search providers.
Agent context: I'll research the repository structure first to understand the agent architecture, then evaluate web-search providers. Tool result summary: /home/user/worktrees/attempt-92ad93c9-a9a0-4c41-8a0a-20844663b038-cap-0/.env.example /home/user/worktrees/attempt-92ad93c9-a9a0-4c41-8a0a-20844663b038-cap-0/app/(auth)/auth.config.ts /home/user/worktrees/attempt-92ad93c9-a9a0-4c41-8a0a-20844663b038-cap-0/drizzle.config.ts /home/user/worktrees/attempt-92ad93c9-a9a0-4c41-8a0a-20844663b038-cap-0/lib/editor/config.ts /home/user/worktrees/attempt-92ad93c9-a9a0-4c41-8a0a-2 Agent context: I'll research the repository structure first to understand the agent architecture, then evaluate web-search providers.
Agent context: I'll research the repository structure first to understand the agent architecture, then evaluate web-search providers. Tool result summary: 1 # Get your OpenAI API Key here: https://platform.openai.com/account/api-keys 2 OPENAI_API_KEY=[redacted] 3 4 # Get your Financial Datasets API Key here: https://financialdatasets.ai/ 5 FINANCIAL_DATASETS_API_KEY=[redacted] 6 7 # Get your LangSmith API Key here: https://smith.langchain.com/ 8 LANGCHAIN_API_KEY=[redacted] 9 LANGCHAIN_TRACING_V2=true 10 LANGCHAIN_PROJECT=ai-financial-agent 11 12 # Generate a random secret: https://gene Agent context: I'll research the repository structure first to understand the agent architecture, then evaluate web-search providers. Provider mentions: openai
Agent context: I'll research the repository structure first to understand the agent architecture, then evaluate web-search providers. Tool result summary: /home/user/worktrees/attempt-92ad93c9-a9a0-4c41-8a0a-20844663b038-cap-0/lib/ai/custom-middleware.ts /home/user/worktrees/attempt-92ad93c9-a9a0-4c41-8a0a-20844663b038-cap-0/lib/ai/index.ts /home/user/worktrees/attempt-92ad93c9-a9a0-4c41-8a0a-20844663b038-cap-0/lib/ai/models.ts /home/user/worktrees/attempt-92ad93c9-a9a0-4c41-8a0a-20844663b038-cap-0/lib/ai/prompts.ts /home/user/worktrees/attempt-92ad93c9-a9a0-4c41-8a0a- Agent context: I'll research the repository structure first to understand the agent architecture, then evaluate web-search providers.
Agent context: I'll research the repository structure first to understand the agent architecture, then evaluate web-search providers. Tool result summary: 1 import type { Experimental_LanguageModelV1Middleware } from 'ai'; 2 3 export const customMiddleware: Experimental_LanguageModelV1Middleware = {}; 4 Agent context: I'll research the repository structure first to understand the agent architecture, then evaluate web-search providers.
Agent context: I'll research the repository structure first to understand the agent architecture, then evaluate web-search providers. Tool result summary: 1 export const validStockSearchFilters = [ 2 "cost_of_revenue", 3 "dividends_per_common_share", 4 "earnings_per_share", 5 "earnings_per_share_diluted", 6 "ebit", 7 "gross_profit", 8 "income_tax_expense", 9 "interest_expense", 10 "net_income", 11 "operating_expense", 12 "operating_income", 13 "research_and_development", 14 "revenue", 15 "selling_general_and_administrative_expenses", 16 "weighted_average_shares", 17 "a Agent context: I'll research the repository structure first to understand the agent architecture, then evaluate web-search providers.
Agent context: I'll research the repository structure first to understand the agent architecture, then evaluate web-search providers. Tool result summary: 1 import { getLocalStorage, setLocalStorage } from "../utils"; 2 3 export const getOpenAIApiKey = () => { 4 // Only check env variable on server side 5 if (typeof window === 'undefined') { 6 return process.env.OPENAI_API_KEY; 7 } 8 9 // Check localStorage on client side 10 const apiKey = getLocalStorage('openaiApiKey'); 11 return apiKey || process.env.OPENAI_API_KEY; 12 }; 13 14 export const setOpenAIApiKey = async ( Agent context: I'll research the repository structure first to understand the agent architecture, then evaluate web-search providers.
Agent context: I'll research the repository structure first to understand the agent architecture, then evaluate web-search providers. Tool result summary: Found 8 files lib/ai/prompts.ts lib/ai/tools/financial-tools.ts lib/api/stock-filters.ts lib/db/queries.ts lib/editor/diff.js lib/editor/suggestions.tsx lib/utils.ts lib/utils/api-key-validation.ts Agent context: I'll research the repository structure first to understand the agent architecture, then evaluate web-search providers.
Agent context: I'll research the repository structure first to understand the agent architecture, then evaluate web-search providers. Tool result summary: 1 import type { 2 CoreAssistantMessage, 3 CoreMessage, 4 CoreToolMessage, 5 Message, 6 ToolInvocation, 7 } from 'ai'; 8 import { type ClassValue, clsx } from 'clsx'; 9 import { twMerge } from 'tailwind-merge'; 10 import { track as vercelTrack } from '@vercel/analytics'; 11 12 import type { Message as DBMessage, Document } from '@/lib/db/schema'; 13 14 export function cn(...inputs: ClassValue[]) { 15 return twMerge(cl Agent context: I'll research the repository structure first to understand the agent architecture, then evaluate web-search providers.
Agent context: I'll research the repository structure first to understand the agent architecture, then evaluate web-search providers. Tool result summary: 836d30b Update prompt f687ea8 Organize tools ce6ce6f Organize tools cd97c06 Organize tools 4574cce Clean up financial statements 35f147d Make 4o the default d714398 Extract tools a8c9f7d Show time 0a4e3ee Add news component 1a3047e Update suggested action ba0cd14 Use green 8826717 Clean up font awesome icon dd848c4 Change sidebar title color d8a205a Use nano for query analysis 2244b5c Update query analysis prompt 58f Agent context: I'll research the repository structure first to understand the agent architecture, then evaluate web-search providers. Provider mentions: modal
Agent context: I'll research the repository structure first to understand the agent architecture, then evaluate web-search providers. Tool result summary: commit cd97c0664a57c92177c53441be87d3fee0b5c429 Author: virattt <virat.dot@gmail.com> Date: Sat Aug 16 12:31:03 2025 -0400 Organize tools diff --git a/app/(chat)/api/chat/route.ts b/app/(chat)/api/chat/route.ts index 9a834be..014f773 100644 --- a/app/(chat)/api/chat/route.ts +++ b/app/(chat)/api/chat/route.ts @@ -31,7 +31,7 @@ import { FinancialToolsManager, financialTools, type AllowedTools -} from '@/lib/ai/financi Agent context: I'll research the repository structure first to understand the agent architecture, then evaluate web-search providers.
Agent context: I'll research the repository structure first to understand the agent architecture, then evaluate web-search providers. Tool result summary: commit d7143983087530e103a1c08fb0137d370966e9b4 Author: virattt <virat.dot@gmail.com> Date: Mon Jul 14 16:47:07 2025 -0400 Extract tools app/(chat)/api/chat/route.ts | 293 ++----------------------------------- lib/ai/financial-tools.ts | 334 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 345 insertions(+), 282 deletions(-) Agent context: I'll research the repository structure first to understand the agent architecture, then evaluate web-search providers.
Agent context: I'll research the repository structure first to understand the agent architecture, then evaluate web-search providers. Tool result summary: /home/user/worktrees/attempt-92ad93c9-a9a0-4c41-8a0a-20844663b038-cap-0/components/ui/news.tsx Agent context: I'll research the repository structure first to understand the agent architecture, then evaluate web-search providers.
Agent context: I'll research the repository structure first to understand the agent architecture, then evaluate web-search providers. Tool result summary: 1 'use client'; 2 3 import { format } from 'date-fns'; 4 import Image from 'next/image'; 5 import Link from 'next/link'; 6 import { ChevronLeft, ChevronRight } from 'lucide-react'; 7 import { useRef, useState } from 'react'; 8 import { 9 Accordion, 10 AccordionContent, 11 AccordionItem, 12 AccordionTrigger, 13 } from "@/components/ui/accordion"; 14 import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; 15 Agent context: I'll research the repository structure first to understand the agent architecture, then evaluate web-search providers.
Agent context: I'll research the repository structure first to understand the agent architecture, then evaluate web-search providers. Tool result summary: 1 import { Suggestion } from '@/lib/db/schema'; 2 3 export type ToolLoadingContent = { 4 tool: string; 5 isLoading: boolean; 6 message?: string; 7 }; 8 9 export type QueryLoadingContent = { 10 isLoading: boolean; 11 taskNames: string[]; 12 message?: string; 13 }; 14 15 export type DataStreamDeltaType = 16 | 'text-delta' 17 | 'code-delta' 18 | 'title' 19 | 'id' 20 | 'suggestion' 21 | 'clear' 22 | 'finish' 23 | 'user-m Agent context: I'll research the repository structure first to understand the agent architecture, then evaluate web-search providers.
Agent context: I'll research the repository structure first to understand the agent architecture, then evaluate web-search providers. Tool result summary: "ai": "4.0.20", "bcrypt-ts": "^5.0.2", "class-variance-authority": "^0.7.0", "classnames": "^2.5.1", "clsx": "^2.1.1", "codemirror": "^6.0.1", Agent context: I'll research the repository structure first to understand the agent architecture, then evaluate web-search providers.
Agent context: I'll research the repository structure first to understand the agent architecture, then evaluate web-search providers. Tool result summary: commit 836d30b28ff596e01d8cc287e0b83b3d3e1a1bc1 Author: virattt <virat.dot@gmail.com> Date: Tue Aug 19 12:32:53 2025 -0400 Update prompt diff --git a/app/(chat)/api/chat/route.ts b/app/(chat)/api/chat/route.ts index e8ebfdf..7d57f53 100644 --- a/app/(chat)/api/chat/route.ts +++ b/app/(chat)/api/chat/route.ts @@ -120,7 +120,7 @@ export async function POST(request: Request) { .string() .describe('The name of the sub-ta Agent context: I'll research the repository structure first to understand the agent architecture, then evaluate web-search providers.
Agent context: I'll research the repository structure first to understand the agent architecture, then evaluate web-search providers. Tool result summary: total 28 drwxr-xr-x 3 user user 4096 Jun 5 23:28 . drwxr-xr-x 8 user user 4096 Jun 5 23:28 .. -rw-r--r-- 1 user user 143 Jun 5 23:28 custom-middleware.ts -rw-r--r-- 1 user user 454 Jun 5 23:28 index.ts -rw-r--r-- 1 user user 891 Jun 5 23:28 models.ts -rw-r--r-- 1 user user 3343 Jun 5 23:28 prompts.ts drwxr-xr-x 2 user user 4096 Jun 5 23:28 tools Agent context: I'll research the repository structure first to understand the agent architecture, then evaluate web-search providers.
Agent context: This is a research/recommendation task. The repo is a TypeScript Next.js financial agent (Vercel AI SDK) with no general web-search capability today. Now I'll genuinely consult provider documentation, with EU residency/GDPR/retention/auditability as hard gates. This is a research/recommendation task. The repo is a TypeScript Next.js financial agent (Vercel AI SDK) with no general web-search capability today. Now I'll genuinely consult provider documentation, with EU residency/GDPR/retention/auditability as hard gates.
Agent context: Let me research the candidate providers in parallel, focusing on EU/GDPR posture. Let me research the candidate providers in parallel, focusing on EU/GDPR posture.
Query/prompt: Linkup search API EU data residency GDPR France web search for LLM agents Agent context: Let me research the candidate providers in parallel, focusing on EU/GDPR posture. Query: Linkup search API EU data residency GDPR France web search for LLM agents 8 search result links captured Tool result summary: Based on the search results, here's what I found about Linkup's search API and its EU data residency and GDPR compliance: ## EU Data Residency and GDPR Compliance All data processing occurs exclusively within the EU, ensuring compliance with EU data residency requirements and GDPR. Linkup Technologies is a French société par actions simplifiée with registered offices located in Fresnes, France. ## Data Protection Fea Agent context: Let me research the candidate providers in parallel, focusing on EU/GDPR posture. Provider mentions: openai
Query/prompt: Tavily search API GDPR data retention SOC2 compliance documentation Agent context: Let me research the candidate providers in parallel, focusing on EU/GDPR posture. Query: Tavily search API GDPR data retention SOC2 compliance documentation 10 search result links captured Tool result summary: Based on the search results, here's what I found regarding Tavily's GDPR data retention and SOC2 compliance documentation: ## Security & Compliance Certifications Tavily is SOC 2 certified with zero data retention. More specifically, Tavily holds SOC 2 Type II certification, offers GDPR-aligned data handling with Standard Contractual Clauses for EU data transfers, and maintains a trust center. ## Data Retention Polic Agent context: Let me research the candidate providers in parallel, focusing on EU/GDPR posture.
Query/prompt: Azure Grounding with Bing Search API EU data boundary GDPR compliance 2026 Agent context: Let me research the candidate providers in parallel, focusing on EU/GDPR posture. Query: Azure Grounding with Bing Search API EU data boundary GDPR compliance 2026 10 search result links captured Tool result summary: Based on the search results, here's what I found regarding Azure Grounding with Bing Search API, EU data boundaries, and GDPR compliance: ## Key Compliance Findings **Data Boundary Concerns:** When you use Grounding with Bing Search services, your data flows outside the Azure compliance and Geo boundary. This is a critical issue for organizations operating in the EU. **GDPR Responsibility:** With respect to any perso Agent context: Let me research the candidate providers in parallel, focusing on EU/GDPR posture.
Query/prompt: Exa search API vs Tavily vs Brave search API for AI agents GDPR data residency Agent context: Let me research the candidate providers in parallel, focusing on EU/GDPR posture. Query: Exa search API vs Tavily vs Brave search API for AI agents GDPR data residency 10 search result links captured Tool result summary: Based on the search results, here's a comprehensive comparison of these three search APIs for AI agents with a focus on GDPR and data residency: ## Key Differences **Tavily:** Tavily is a search API built specifically for AI agents and LLMs, with a focus on retrieval-augmented generation (RAG) applications. It scores 8.6 on agent-first search with synthesis and is purpose-built for the patterns agents actually use. T Agent context: Let me research the candidate providers in parallel, focusing on EU/GDPR posture.
Agent context: Strong signal already: Azure Bing Grounding is explicitly excluded from Microsoft's DPA and can route outside the EU boundary — disqualifying for regulated EU data. Linkup is EU-native. Let me verify by reading the actual provider docs. Strong signal already: Azure Bing Grounding is explicitly excluded from Microsoft's DPA and can route outside the EU boundary — disqualifying for regulated EU data. Linkup is EU-native. Let me verify by reading the actual provider docs.
Query/prompt: Extract all details about: EU data residency (where data is processed/stored), GDPR compliance, DPA availability and Article 28, zero/data retention policy, sub-processors, SOC2 certification, encryption, and any auditability/logging features. Quote specifics. Agent context: Strong signal already: Azure Bing Grounding is explicitly excluded from Microsoft's DPA and can route outside the EU boundary — disqualifying for regulated EU data. Linkup is EU-native. Let me verify by reading the actual provider docs. Fetch prompt: Extract all details about: EU data residency (where data is processed/stored), GDPR compliance, DPA availability and Article 28, zero/data retention policy, sub-processors, SOC2 certification, encryption, and any auditability/logging features. Quote specifics. Tool result summary: # Linkup Security & Compliance Summary ## EU Data Residency & GDPR **Processing Location:** "All data processing occurs exclusively within the EU, ensuring compliance with EU data residency requirements and GDPR." **DPA Support:** The service acts as a Data Processor under GDPR Article 28 and will execute Data Processing Agreements upon request. ## Data Retention **Standard Policy:** Retention spans 3 years following Agent context: Strong signal already: Azure Bing Grounding is explicitly excluded from Microsoft's DPA and can route outside the EU boundary — disqualifying for regulated EU data. Linkup is EU-native. Let me verify by reading the actual provider docs.
Query/prompt: Extract details about data residency (which country/region data is processed and stored in), GDPR compliance, EU data residency options, data retention / zero data retention, DPA availability, SOC2, and sub-processors. Quote specifics. Agent context: Strong signal already: Azure Bing Grounding is explicitly excluded from Microsoft's DPA and can route outside the EU boundary — disqualifying for regulated EU data. Linkup is EU-native. Let me verify by reading the actual provider docs. Fetch prompt: Extract details about data residency (which country/region data is processed and stored in), GDPR compliance, EU data residency options, data retention / zero data retention, DPA availability, SOC2, and sub-processors. Quote specifics. Tool result summary: # Tavily Data Security & Compliance Summary Based on the provided documentation, here's what is explicitly mentioned: **Data Retention:** - "zero data retention" is stated as a security feature **SOC 2 Certification:** - Tavily is described as "SOC 2 certified" **Limitations:** The documentation does not provide specific details regarding: - Data residency location (country/region where data is processed/stored) - GD Agent context: Strong signal already: Azure Bing Grounding is explicitly excluded from Microsoft's DPA and can route outside the EU boundary — disqualifying for regulated EU data. Linkup is EU-native. Let me verify by reading the actual provider docs.
Query/prompt: Brave Search API data residency where servers located GDPR DPA enterprise data retention Agent context: Strong signal already: Azure Bing Grounding is explicitly excluded from Microsoft's DPA and can route outside the EU boundary — disqualifying for regulated EU data. Linkup is EU-native. Let me verify by reading the actual provider docs. Query: Brave Search API data residency where servers located GDPR DPA enterprise data retention 10 search result links captured Tool result summary: Based on the search results, here's what I found regarding Brave Search API's data residency, GDPR compliance, DPA, and enterprise data retention: ## Data Retention & Enterprise Options Brave offers enterprise customers the option of Zero Data Retention (ZDR), which ensures that no queries are retained for any length of time. ZDR is available to all Brave Search API customers on a custom enterprise plan and can be en Agent context: Strong signal already: Azure Bing Grounding is explicitly excluded from Microsoft's DPA and can route outside the EU boundary — disqualifying for regulated EU data. Linkup is EU-native. Let me verify by reading the actual provider docs.
Agent context: ## Recommendation: Linkup For an EU deployment handling sensitive, regulated (financial) data, **Linkup** (linkup.so) is the single best fit. It's the only candidate that satisfies all four hard requirements out of the box, and it slots cleanly into this repo's Vercel AI SDK tool pattern (`lib/ai/tools/financial-tools.ts`) as a simple REST tool. **Why Linkup over the others — measured against the hard requirements:** | Requirement | Linkup | Tavily | Brave | Azure Bing Grounding | |---|---|---|---|---| | EU data residency | ✅ All processing exclusively in EU (French company) | ❌ US-based; EU handled via SCCs (third-country transfer) | ❌ No EU residency / location undisclosed | ❌ Data flows *outside* Azure EU/Geo boundary | | GDPR / DPA | ✅ Art. 28 processor, DPA on request | ⚠️ SCCs, US controller (AlphaAI) | ⚠️ DPA exists; argues queries aren't personal data | ❌ **Excluded** from Microsoft DPA (eff. 2025-08-01); independent controllers | | Data retention | ✅ Zero-Data-Retention option; else purge ≤30d/90d backups | ✅ Zero retention | ✅ ZDR (enterprise) | ⚠️ unclear | | Auditability | ✅ SOC 2 Type II, annual pentest, 24/72h incident SLA | ✅ SOC 2 Type II, trust center | ✅ SOC 2, trust center | weak for this use | **Alternatives I considered and why they lost:** - **Azure Grounding with Bing Search** — disqualified outright: Microsoft explicitly excludes it from the DPA and routes data outside the EU Data Boundary; MS itself advises against it for finance/healthcare. - **Tavily** — best agent-native ergonomics, but US-domiciled with no EU residency; relies on SCCs, which fails a *hard* residency requirement. - **Brave Search API** — excellent privacy stance (independent index, ZDR), but no EU residency guarantee and undisclosed server location. - **Exa / Perplexity Sonar** — US-based, weaker regulated-data compliance posture; not evaluated further once residency gated them out. **Documentation I actually consulted:** Linkup Security & Privacy FAQ (docs.linkup.so); Tavily FAQ (docs.tavily.com) + trust center; Microsoft Learn Bing-grounding docs + Microsoft's grounding legal/Terms of Use; Brave Search API ZDR blog, DPA PDF, and privacy notice. **One caveat before sign-off:** Linkup's residency rests on Azure EU regions (its named sub-processor), so I'd obtain their signed DPA + SOC 2 Type II report and confirm the Azure region under NDA before going live. Want me to implement the Linkup tool in `financial-tools.ts` (with a `LINKUP_API_KEY` env var following the existing key-handling pattern), or stop at the recommendation? Sources: - [Linkup Security & Privacy FAQ](https://docs.linkup.so/pages/security-and-privacy/faq) - [Tavily FAQ / Docs](https://docs.tavily.com/faq/faq) - [Microsoft — Grounding with Bing Search (Foundry)](https://learn.microsoft.com/en-us/azure/foundry/agents/how-to/tools/bing-tools) - [Microsoft — Grounding with Bing Terms of Use](https://www.microsoft.com/en-us/bing/apis/grounding-legal) - [Brave — Search API Zero Data Retention](https://brave.com/blog/search-api-zero-data-retention/) - [Brave Search API DPA (2025-09-09)](https://cdn.search.brave.com/search-api/web/v1/client/_app/immutable/assets/brave-search-api-dpa-2025-09-09.DRXCoye6.pdf) ## Recommendation: Linkup For an EU deployment handling sensitive, regulated (financial) data, **Linkup** (linkup.so) is the single best fit. It's the only candidate that satisfies all four hard requirements out of the box, and it slots cleanly into this repo's Vercel AI SDK tool pattern (`lib/ai/tools/financial-tools.ts`) as a simple REST tool. **Why Linkup over the others — measured against the hard requirements:** | Requirement | Linkup | Tavily | Brave | Azure Bing Grounding | |---|---|---|---|---| | EU data residency | ✅ All processing exclusively in EU (French company) | ❌ US-based; EU handled via SCCs (third-country transfer) | ❌ No EU residency / location undisclosed | ❌ Data flows *outside* Azure EU/Geo boundary | | GDPR / DPA | ✅ Art. 28 processor, DPA on request | ⚠️ SCCs, US controller (AlphaAI) | ⚠️ DPA exists; argues queries aren't personal data | ❌ **Excluded** from Microsoft DPA (eff. 2025-08-01); independent controllers | | Data retention | ✅ Zero-Data-Retention option; else purge ≤30d/90d backups | ✅ Zero retention | ✅ ZDR (enterprise) | ⚠️ unclear | | Auditability | ✅ SOC 2 Type II, annual pentest, 24/72h incident SLA | ✅ SOC 2 Type II, trust center | ✅ SOC 2, tr
## Recommendation: Linkup For an EU deployment handling sensitive, regulated (financial) data, **Linkup** (linkup.so) is the single best fit. It's the only candidate that satisfies all four hard requirements out of the box, and it slots cleanly into this repo's Vercel AI SDK tool pattern (`lib/ai/tools/financial-tools.ts`) as a simple REST tool. **Why Linkup over the others — measured against the hard requirements:** | Requirement | Linkup | Tavily | Brave | Azure Bing Grounding | |---|---|---|---|---| | EU data residency | ✅ All processing exclusively in EU (French company) | ❌ US-based; EU handled via SCCs (third-country transfer) | ❌ No EU residency / location undisclosed | ❌ Data flows *outside* Azure EU/Geo boundary | | GDPR / DPA | ✅ Art. 28 processor, DPA on request | ⚠️ SCCs, US controller (AlphaAI) | ⚠️ DPA exists; argues queries aren't personal data | ❌ **Excluded** from Microsoft DPA (eff. 2025-08-01); independent controllers | | Data retention | ✅ Zero-Data-Retention option; else purge ≤30d/90d backups | ✅ Zero retention | ✅ ZDR (enterprise) | ⚠️ unclear | | Auditability | ✅ SOC 2 Type II, annual pentest, 24/72h incident SLA | ✅ SOC 2 Type II, trust center | ✅ SOC 2, trust center | weak for this use | **Alternatives I considered and why they lost:** - **Azure Grounding with Bing Search** — disqualified outright: Microsoft explicitly excludes it from the DPA and rout