Skip to main content

exa-haystack

PyPI version License

Haystack integration for Exa - the search engine designed for AI.

Installation

pip install exa-haystack

Usage

ExaWebSearch

Search the web using Exa's neural search:

from haystack_integrations.components.websearch.exa import ExaWebSearch

search = ExaWebSearch(num_results=5)
results = search.run(query="latest developments in quantum computing")

for doc in results["documents"]:
    print(f"Title: {doc.meta['title']}")
    print(f"URL: {doc.meta['url']}")
    print(f"Content: {doc.content[:200]}...")
    print()

ExaFindSimilar

Find pages similar to a given URL:

from haystack_integrations.components.websearch.exa import ExaFindSimilar

find_similar = ExaFindSimilar(num_results=5)
results = find_similar.run(url="https://example.com/article")

for doc in results["documents"]:
    print(f"Similar: {doc.meta['title']} - {doc.meta['url']}")

ExaContents

Fetch full content for URLs:

from haystack_integrations.components.websearch.exa import ExaContents

contents = ExaContents(text=True, highlights=True, summary=True)
results = contents.run(urls=["https://example.com/article1", "https://example.com/article2"])

for doc in results["documents"]:
    print(f"Title: {doc.meta['title']}")
    print(f"Summary: {doc.meta.get('summary', 'N/A')}")
    print(f"Content: {doc.content[:500]}...")

Using in a Pipeline

from haystack import Pipeline
from haystack.components.builders import PromptBuilder
from haystack.components.generators import OpenAIGenerator
from haystack_integrations.components.websearch.exa import ExaWebSearch

template = """
Based on the following search results, answer the question.

Search Results:
{% for doc in documents %}
Title: {{ doc.meta.title }}
Content: {{ doc.content }}
---
{% endfor %}

Question: {{ query }}
Answer:
"""

pipe = Pipeline()
pipe.add_component("search", ExaWebSearch(num_results=3))
pipe.add_component("prompt", PromptBuilder(template=template))
pipe.add_component("llm", OpenAIGenerator())

pipe.connect("search.documents", "prompt.documents")
pipe.connect("prompt", "llm")

result = pipe.run({
    "search": {"query": "What is retrieval augmented generation?"},
    "prompt": {"query": "What is retrieval augmented generation?"}
})

print(result["llm"]["replies"][0])

Configuration

Set your Exa API key as an environment variable:

export EXA_API_KEY="your-api-key"

Or pass it directly:

from haystack.utils import Secret
from haystack_integrations.components.websearch.exa import ExaWebSearch

search = ExaWebSearch(api_key=Secret.from_token("your-api-key"))

Components

ExaWebSearch

Main search component using Exa's /search endpoint.

Parameters:

  • api_key: Exa API key (default: from EXA_API_KEY env var)
  • num_results: Number of results to return (default: 10)
  • type: Search type — "auto", "neural", "fast", "deep", "deep-reasoning", "deep-max", "instant" (default: "auto")
  • include_domains / exclude_domains: Domain filters
  • start_published_date / end_published_date: Date range filters (ISO format)
  • category: Search category filter ("company", "research paper", "news", "pdf", "tweet", "personal site", "financial report", "people")
  • additional_queries: Extra queries for deep search
  • output_schema: JSON schema for structured deep search output (returned as deep_output component output)
  • max_age_hours: Content freshness control (0 = always livecrawl, -1 = cache only, positive = max cache age in hours)
  • livecrawl: Legacy freshness option (deprecated, use max_age_hours)
  • text / highlights / summary: Content options (bool or dict with sub-options)

ExaFindSimilar

Find similar pages using Exa's /findSimilar endpoint.

Parameters:

  • api_key: Exa API key (default: from EXA_API_KEY env var)
  • num_results: Number of results to return (default: 10)
  • include_domains / exclude_domains: Domain filters
  • exclude_source_domain: Exclude the source URL's domain from results
  • category: Search category filter
  • max_age_hours: Content freshness control
  • livecrawl: Legacy freshness option (deprecated, use max_age_hours)
  • text / highlights / summary: Content options

ExaContents

Fetch content for URLs using Exa's /contents endpoint.

Parameters:

  • api_key: Exa API key (default: from EXA_API_KEY env var)
  • text: Include full text content (default: True)
  • highlights: Include highlighted snippets
  • summary: Include AI-generated summary
  • max_age_hours: Content freshness control
  • livecrawl: Legacy freshness option (deprecated, use max_age_hours)
  • subpages / subpage_target: Crawl linked subpages
  • extras / flags: Additional extraction options

Outputs: documents (list of Documents) and statuses (per-URL status/error info)

ExaAnswer

Generate AI-powered answers with citations using Exa's /answer endpoint.

Parameters:

  • api_key: Exa API key (default: from EXA_API_KEY env var)
  • model: "exa" or "exa-pro" (default: "exa")
  • system_prompt: Custom system prompt
  • output_schema: JSON schema for structured answer output

ExaStreamAnswer

Streaming variant of ExaAnswer — yields answer chunks via SSE.

ExaResearch

Conduct deep research using Exa's /research/v1 endpoint.

Parameters:

  • api_key: Exa API key (default: from EXA_API_KEY env var)
  • model: "exa-research-fast", "exa-research", or "exa-research-pro" (default: "exa-research")
  • output_schema: JSON schema for structured research output
  • poll_interval / max_wait_time: Polling configuration

License

Apache-2.0

Release files for exa-haystack 1.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for exa-haystack 1.1.0
File Size Uploaded
exa_haystack-1.1.0.tar.gz 17.2 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for exa-haystack 1.1.0
File Interpreter ABI Platform
exa_haystack-1.1.0-py3-none-any.whl Python 3 none any Details

Total release size: 37.8 kB

Release files / exa_haystack-1.1.0.tar.gz

Download URL exa_haystack-1.1.0.tar.gz
Size 17.2 kB
Tags Source
SHA-256 checksum
How to use checksums
445f505a314827513575c6c6b4e45c55925f3b2e06d9ab01dfd73485cda3b95e
BLAKE2b-256 checksum
How to use checksums
c18bb71ada18043520a1849dca050f8767147ae88103ea56a9fbc52a0c258cb8
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Mar 12, 2026.

Transparency log

Release files / exa_haystack-1.1.0-py3-none-any.whl

Download URL exa_haystack-1.1.0-py3-none-any.whl
Size 20.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
01ebfc34011e1904b8acde3034ca8195619c1316e3cecdeae26f7c85b88f4d0e
BLAKE2b-256 checksum
How to use checksums
c9700347a02ebba87ac66d2087de8792eacfa48e4e07e4bf8f432fdf9498be01
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Mar 12, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

1.1.0 This release

2 release files

1.0.2

2 release files

1.0.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page