Skip to content

Supported Engines

OmniSerp supports multiple search engine backends through a unified interface.

Available Engines

Serper

  • Package: github.com/plexusone/omniserp/client/serper
  • Environment Variable: SERPER_API_KEY
  • Website: serper.dev
  • Supported Operations: All 12 search types including Lens

SerpAPI

  • Package: github.com/plexusone/omniserp/client/serpapi
  • Environment Variable: SERPAPI_API_KEY
  • Website: serpapi.com
  • Supported Operations: 11 search types (no Lens support)

Note

SearchLens() is not supported by SerpAPI and will return ErrOperationNotSupported

  • Package: github.com/plexusone/omniserp/client/brave
  • Environment Variable: BRAVE_API_KEY
  • Website: brave.com/search/api
  • Supported Operations: Web, News, Images, Videos, Autocomplete

Brave Search provides privacy-focused search results with excellent coverage and fast response times. It includes:

  • Goggles - Customizable result filtering
  • Summarizer - AI-powered result summaries
  • Discussions - Forum and community results
import "github.com/plexusone/omniserp/client/brave"

engine := brave.New(brave.Config{
    APIKey: os.Getenv("BRAVE_API_KEY"),
})

// Web search
result, err := engine.Search(ctx, client.SearchParams{
    Query:      "golang concurrency patterns",
    NumResults: 10,
})

// News search
news, err := engine.SearchNews(ctx, client.SearchParams{
    Query: "tech news",
})

Exa.ai

  • Package: github.com/plexusone/omniserp/client/exa
  • Environment Variable: EXA_API_KEY
  • Website: exa.ai
  • Supported Operations: Web Search (multiple modes)

Exa.ai provides neural search optimized for LLM applications with multiple search modes:

Mode Description Use Case
auto Automatic mode selection General purpose
instant Fastest results Real-time applications
fast Balanced speed/quality Most queries
deep High-quality results Research tasks
deep-lite Deep with lower latency Time-sensitive research
deep-reasoning Best quality Complex queries
import "github.com/plexusone/omniserp/client/exa"

engine := exa.New(exa.Config{
    APIKey: os.Getenv("EXA_API_KEY"),
})

// Neural search with deep mode
result, err := engine.Search(ctx, client.SearchParams{
    Query:      "latest AI research papers 2026",
    NumResults: 10,
    Options: map[string]any{
        "mode": "deep",
    },
})

Exa Features

  • Contents Extraction - Get full page content, not just snippets
  • Highlights - Key passages relevant to query
  • Autoprompt - Automatic query optimization
  • Date Filtering - Filter by publication date

Feature Comparison

Operation Serper SerpAPI Brave Exa
Web Search
News Search
Image Search
Video Search
Places Search
Maps Search
Reviews Search
Shopping Search
Scholar Search
Lens Search
Autocomplete
Webpage Scrape
Neural Search
Content Extract
Summarizer

Engine Interface

All engines implement the Engine interface:

type Engine interface {
    // Metadata
    GetName() string
    GetVersion() string
    GetSupportedTools() []string

    // Search methods
    Search(ctx context.Context, params SearchParams) (*SearchResult, error)
    SearchNews(ctx context.Context, params SearchParams) (*SearchResult, error)
    SearchImages(ctx context.Context, params SearchParams) (*SearchResult, error)
    SearchVideos(ctx context.Context, params SearchParams) (*SearchResult, error)
    SearchPlaces(ctx context.Context, params SearchParams) (*SearchResult, error)
    SearchMaps(ctx context.Context, params SearchParams) (*SearchResult, error)
    SearchReviews(ctx context.Context, params SearchParams) (*SearchResult, error)
    SearchShopping(ctx context.Context, params SearchParams) (*SearchResult, error)
    SearchScholar(ctx context.Context, params SearchParams) (*SearchResult, error)
    SearchLens(ctx context.Context, params SearchParams) (*SearchResult, error)
    SearchAutocomplete(ctx context.Context, params SearchParams) (*SearchResult, error)

    // Utility
    ScrapeWebpage(ctx context.Context, params ScrapeParams) (*SearchResult, error)
}

Selecting an Engine

Via Environment Variable

export SEARCH_ENGINE="serper"  # or "serpapi", "brave", "exa"

Programmatically

// Use default (from SEARCH_ENGINE env var)
c, err := client.New()

// Specify explicitly
c, err := client.NewWithEngine("brave")

// Switch at runtime
c.SetEngine("exa")

Engine Selection Guide

Engine Best For Pricing
Serper Full-featured SERP data Pay per search
SerpAPI Google SERP scraping Pay per search
Brave Privacy-focused, fast Free tier + paid
Exa LLM applications, research Pay per search

Checking Engine Capabilities

c, _ := client.New()

// Check current engine
fmt.Printf("Engine: %s v%s\n", c.GetName(), c.GetVersion())

// List supported tools
tools := c.GetSupportedTools()
fmt.Printf("Supported: %v\n", tools)

// Check specific operation
if c.SupportsOperation(client.OpSearchLens) {
    // Lens is supported
}