Full access is free during Beta. A paid subscription will be offered after Beta.

Exa AI — User Guide

Semantic search API for apps.

Visit website
Freemium
Strengths
  • Semantic search, understanding query intent rather than keyword matching
  • Designed specifically for AI applications, returning structured data
  • Supports obtaining the complete content of the web page (not just the summary)
  • You can filter results by date, domain name, etc.
  • Free credit is enough for testing and small projects
Best for
  • Provide real-time network search capabilities for AI Agents
  • Network data sources for building RAG systems
  • Data acquisition for research tools
  • Competitive product monitoring and industry information aggregation
  • Literature discovery for academic research

API basic usage

Exa provides a simple Python SDK that can integrate semantic search with just a few lines of code.

Scenario

Basic semantic search

Prompt example
from exa_py import Exa

exa = Exa(api_key="your-exa-api-key")

# Semantic search (not keyword search)
results = exa.search(
    "Latest breakthroughs in protein folding AI research",
    num_results=5,
    use_autoprompt=True # Automatically optimize queries
)

for result in results.results:
    print(f"Title: {result.title}")
    print(f"URL: {result.url}")
    print(f"Published time: {result.published_date}")
    print()
Output / what to expect
Returns 5 semantically related web pages, Better understanding of query intent than keyword search, The results are of higher quality.
Tips

use_autoprompt=True lets Exa automatically optimize the query, usually giving better results.

Scenario

Get the complete content of the web page

Prompt example
from exa_py import Exa

exa = Exa(api_key="your-exa-api-key")

# Search and get complete content
results = exa.search_and_contents(
    "AI regulation in Europe 2025",
    num_results=3,
    text=True, # Get the text of the article
    highlights=True, # Get key fragments
    start_published_date="2025-01-01" # Only content after 2025
)

for result in results.results:
    print(f"Title: {result.title}")
    print(f"Content summary: {result.text[:500]}...")
    print()
Output / what to expect
Get the full article content, Can be used directly in RAG systems, No additional web scraping steps required.
Tips

text=True will get the complete article content, which will consume more API quota and can be used on demand.

Starter & above

The rest of this guide

Additional scenarios and the full comparison table are included with Starter and above. Sign in with an eligible account to load them.

You're on the Free plan. Upgrade to Starter or higher to unlock the rest of this guide—additional scenarios and the full comparison table.

Loading full guide…