Search email by meaning, not keywords.
InboxParse indexes every email thread with fulltext, semantic vectors, and hybrid retrieval - all available through a single search endpoint.
# Semantic search - find by meaning, not exact words
curl -X POST "https://inboxparse.com/api/v1/search" \
-H "Authorization: Bearer ip..." \
-H "Content-Type: application/json" \
-d '{"query": "renewal offer pricing", "mode": "semantic", "limit": 10}'
# Fulltext search - keyword matching
curl -X POST "https://inboxparse.com/api/v1/search" \
-H "Authorization: Bearer ip..." \
-H "Content-Type: application/json" \
-d '{"query": "invoice Q1 2026", "mode": "fulltext", "limit": 10}'
# Hybrid search - best of both worlds (recommended)
curl -X POST "https://inboxparse.com/api/v1/search" \
-H "Authorization: Bearer ip..." \
-H "Content-Type: application/json" \
-d '{"query": "customer churn risk", "mode": "hybrid", "limit": 10}'
# Response
{
"data": [
{
"id": "msg_01jxxx",
"thread_id": "thread_01jxxx",
"subject": "Re: Contract renewal - 20% discount offer",
"from": { "name": "Dana Miles", "email": "dana@acme.com" },
"ai": {
"summary": "Customer offered a 20% renewal discount...",
"labels": [{ "name": "sales", "confidence": 0.95 }],
"action": "reply_now"
}
}
],
"search_mode": "semantic"
}Three search modes
Fulltext (BM25), semantic (vector), and hybrid - switch with a single query parameter. No extra config.
Managed vector index
We embed and index every email automatically. No pgvector migrations, no Pinecone projects, no maintenance.
AI labels on every result
Each result carries AI labels, a summary, and a suggested action - route or filter retrieved threads by label in your own code.
Agent-ready endpoint
Give your LLM agent a tool that calls this endpoint. Agents can now search your entire email archive by intent.
MCP tool built-in
The search endpoint is also available as an MCP tool - Claude Desktop and Cursor can search your email natively.
Workspace-wide coverage
One search call spans every connected mailbox in your workspace. Works with IMAP and Gmail.
Build an email search tool for your LLM agent
Copy-and-paste ready. No boilerplate.
import { google } from "@ai-sdk/google"
import { generateText, tool } from "ai"
import { z } from "zod"
const result = await generateText({
model: google("gemini-flash-latest"),
tools: {
searchEmails: tool({
description: "Search the email archive by meaning. Returns relevant threads.",
parameters: z.object({
query: z.string().describe("What to search for"),
mode: z.enum(["semantic", "fulltext", "hybrid"]).default("hybrid"),
}),
execute: async ({ query, mode }) => {
const res = await fetch("https://inboxparse.com/api/v1/search", {
method: "POST",
headers: {
Authorization: "Bearer ip...",
"Content-Type": "application/json",
},
body: JSON.stringify({ query, mode, limit: 5 }),
})
const { data } = await res.json()
return data
},
}),
},
prompt: "Find all emails about contract renewals from enterprise customers.",
})
console.log(result.text)Frequently asked questions
What is the difference between fulltext, semantic, and hybrid search?+
Fulltext search uses BM25 keyword matching - fast and exact. Semantic search uses vector embeddings to find results by meaning, even when exact words differ. Hybrid combines both for the best precision and recall. Switch modes with a single query parameter.
Do I need to manage my own vector database?+
No. InboxParse embeds and indexes every email automatically. You get semantic search out of the box without setting up pgvector, Pinecone, or any other vector store.
Can I filter search results by AI labels?+
Every search result includes the AI labels, summary, and suggested action attached to the email, so you can filter or route results by label in your own code. Combine with semantic search for precise, intent-aware retrieval.
Explore more use cases
Your email archive is a knowledge base. Treat it like one.
Semantic search ready out of the box. No vector infra to manage.