# Exa web search

Perform a search with an Exa prompt-engineered query and retrieve a list of relevant results. Needs query.

Exa web search (neural, fast, deep), by Exa. Perform a search with an Exa prompt-engineered query and retrieve a list of relevant results. Categories cover companies, people, news, publications and financial reports; type fast suits code search with highlights. Price: $0.007 per request up to 10 results, +$0.001 per extra result; deep-lite and deep $0.012, deep-reasoning $0.015 per request; +$0.001 per page for each of text, highlights and summary, subpages counted as pages. Billed at the cost Exa reports for the call (costDollars.total); the quote is the upper bound.

- Tool ID: `exa/search`
- Name in the catalog: Exa web search (neural, fast, deep)
- Provider: [Exa](/providers/exa.md)
- Capability: [Web search for agents](/tools/web-search/web-search.md)
- Price: usage based, the maximum is shown before a run
- Authentication: an authorised Agentik workspace is required for execution, including zero-price tools.

## Pricing contract

Billed at the cost the provider reports for the call, never above $2. Your agent sees the maximum before running.


```json
{
  "model": "reported",
  "costPath": "costDollars.total",
  "maxUsdDefault": 0.007,
  "maxUsdCap": 2,
  "multipliers": [
    {
      "when": {
        "field": "type",
        "in": [
          "deep-lite",
          "deep"
        ]
      },
      "setUsd": 0.012
    },
    {
      "when": {
        "field": "type",
        "equals": "deep-reasoning"
      },
      "setUsd": 0.015
    },
    {
      "addUsdPer": {
        "field": "numResults",
        "default": 10,
        "max": 100,
        "usd": 0.001,
        "minus": 10
      }
    },
    {
      "when": {
        "field": "contents.text",
        "truthy": true
      },
      "addUsdPer": {
        "field": "numResults",
        "usd": 0.001,
        "default": 10,
        "max": 100
      }
    },
    {
      "when": {
        "field": "contents.highlights",
        "truthy": true
      },
      "addUsdPer": {
        "field": "numResults",
        "usd": 0.001,
        "default": 10,
        "max": 100
      }
    },
    {
      "when": {
        "field": "contents.summary",
        "truthy": true
      },
      "addUsdPer": {
        "field": "numResults",
        "usd": 0.001,
        "default": 10,
        "max": 100
      }
    },
    {
      "when": {
        "field": "contents.subpages",
        "gte": 1
      },
      "addUsdPer": {
        "field": "contents.subpages",
        "usd": 0.003,
        "max": 100,
        "timesField": "numResults",
        "timesDefault": 10,
        "timesMax": 100
      }
    },
    {
      "when": {
        "field": "outputSchema",
        "truthy": true
      },
      "addUsd": 0.001
    }
  ]
}
```

Pricing source: [https://exa.ai/pricing](https://exa.ai/pricing). $0.007 per request up to 10 results, +$0.001 per extra result; deep-lite and deep $0.012, deep-reasoning $0.015 per request; +$0.001 per page for each of text, highlights and summary, subpages counted as pages..

Price verification date: 2026-10-08.

## Complete input schema


```json
{
  "type": "object",
  "properties": {
    "includeDomains": {
      "anyOf": [
        {
          "maxItems": 1200,
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "List of domains or domain paths to include in the search. Each entry can be a hostname (for example, `example.com`), a hostname with a path prefix (for example, `example.com/docs`), or a wildcard subdomain (for example, `*.example.com`). If specified, results will only come from the matching domains or paths. Use this parameter for domain or path filtering instead of adding a `site:` operator to the query."
        },
        {
          "type": "null"
        }
      ]
    },
    "excludeDomains": {
      "anyOf": [
        {
          "maxItems": 1200,
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "List of domains or domain paths to exclude from search results. Each entry can be a hostname (for example, `example.com`), a hostname with a path prefix (for example, `example.com/docs`), or a wildcard subdomain (for example, `*.example.com`). If specified, no results will be returned from the matching domains or paths. Use this parameter for domain or path filtering instead of adding a `site:` operator to the query."
        },
        {
          "type": "null"
        }
      ]
    },
    "startPublishedDate": {
      "anyOf": [
        {
          "type": "string",
          "description": "Only links with a published date after this will be returned. Must be specified in ISO 8601 format.",
          "format": "date-time"
        },
        {
          "type": "null"
        }
      ]
    },
    "endPublishedDate": {
      "anyOf": [
        {
          "type": "string",
          "description": "Only links with a published date before this will be returned. Must be specified in ISO 8601 format.",
          "format": "date-time"
        },
        {
          "type": "null"
        }
      ]
    },
    "numResults": {
      "anyOf": [
        {
          "type": "integer",
          "minimum": 1,
          "maximum": 100,
          "description": "Number of results to return. Limits vary by search type. The maximum public limit is 100 results. Contact sales (hello@exa.ai) to discuss higher limits.",
          "default": 10
        },
        {
          "type": "null"
        }
      ]
    },
    "moderation": {
      "anyOf": [
        {
          "type": "boolean",
          "description": "Enable content moderation to filter unsafe content from search results.",
          "default": false
        },
        {
          "type": "null"
        }
      ]
    },
    "contents": {
      "anyOf": [
        {
          "type": "object",
          "properties": {
            "text": {
              "anyOf": [
                {
                  "description": "Text extraction options for each result.",
                  "oneOf": [
                    {
                      "type": "boolean",
                      "title": "Simple text retrieval",
                      "description": "If true, returns full page text with default settings. If false, disables text return.",
                      "default": false
                    },
                    {
                      "type": "object",
                      "properties": {
                        "maxCharacters": {
                          "anyOf": [
                            {
                              "type": "integer",
                              "minimum": 1,
                              "maximum": 1000000,
                              "description": "Maximum character limit for the full page text. Useful for controlling response size and API costs."
                            },
                            {
                              "type": "null"
                            }
                          ]
                        },
                        "includeHtmlTags": {
                          "anyOf": [
                            {
                              "type": "boolean",
                              "description": "If true, include lightweight HTML tags in returned text instead of plain markdown-style text. Use maxAgeHours: 0 when you need this applied to freshly fetched content.",
                              "default": false
                            },
                            {
                              "type": "null"
                            }
                          ]
                        },
                        "verbosity": {
                          "anyOf": [
                            {
                              "type": "string",
                              "enum": [
                                "compact",
                                "standard",
                                "full"
                              ],
                              "description": "Controls text rendering verbosity. compact focuses on main content, standard includes more surrounding page context, and full requests the most complete rendered text. Some pages may produce identical standard and full output. Use maxAgeHours: 0 when you need this applied to freshly fetched content.",
                              "default": "compact"
                            },
                            {
                              "type": "null"
                            }
                          ]
                        },
                        "includeSections": {
                          "anyOf": [
                            {
                              "type": "array",
                              "items": {
                                "type": "string",
                                "enum": [
                                  "header",
                                  "navigation",
                                  "banner",
                                  "body",
                                  "sidebar",
                                  "footer",
                                  "metadata"
                                ]
                              },
                              "description": "Best-effort. Only include content classified into these semantic page sections. Section classification may be unavailable or incomplete for some pages; validate output if strict filtering is required. Use maxAgeHours: 0 when you need this applied to freshly fetched content."
                            },
                            {
                              "type": "null"
                            }
                          ]
                        },
                        "excludeSections": {
                          "anyOf": [
                            {
                              "type": "array",
                              "items": {
                                "type": "string",
                                "enum": [
                                  "header",
                                  "navigation",
                                  "banner",
                                  "body",
                                  "sidebar",
                                  "footer",
                                  "metadata"
                                ]
                              },
                              "description": "Exclude content classified into these semantic page sections. Section classification is best-effort. Use maxAgeHours: 0 when you need this applied to freshly fetched content."
                            },
                            {
                              "type": "null"
                            }
                          ]
                        }
                      },
                      "title": "Advanced text options",
                      "description": "Advanced options for controlling text extraction. Use this when you need to limit text length or include HTML structure."
                    }
                  ]
                },
                {
                  "type": "null"
                }
              ]
            },
            "highlights": {
              "anyOf": [
                {
                  "description": "Text snippets the LLM identifies as most relevant from each page.",
                  "oneOf": [
                    {
                      "type": "boolean",
                      "title": "Simple highlights retrieval",
                      "description": "If true, returns highlights with default settings. If false, disables highlights.",
                      "default": false
                    },
                    {
                      "type": "object",
                      "properties": {
                        "query": {
                          "anyOf": [
                            {
                              "type": "string",
                              "description": "Custom query that guides which highlights the LLM picks."
                            },
                            {
                              "type": "null"
                            }
                          ]
                        },
                        "verbosity": {
                          "anyOf": [
                            {
                              "type": "string",
                              "enum": [
                                "low",
                                "medium",
                                "high"
                              ],
                              "description": "Preset highlight length: `low`, `medium`, and `high` allocate progressively larger token budgets for the returned highlights. With highlights.dynamic, the preset sets a single shared budget across the whole result set instead of a per-URL budget. Exact budgets are tuned by Exa and may change. Not compatible with maxCharacters or numSentences. Beta: requires the `Exa-Beta: dynamic-highlights-2026-08-28` request header; requests setting `verbosity` without it are rejected.",
                              "x-exa-lifecycle": "beta",
                              "x-exa-beta-flag": "dynamic-highlights-2026-08-28",
                              "x-mint": {
                                "post": [
                                  "Beta"
                                ]
                              }
                            },
                            {
                              "type": "null"
                            }
                          ]
                        },
                        "dynamic": {
                          "anyOf": [
                            {
                              "type": "boolean",
                              "description": "Enable Dynamic Highlights (research preview): considers all results together and allocates a single shared context budget across the result set instead of a per-document budget. Not compatible with maxCharacters. Beta: requires the `Exa-Beta: dynamic-highlights-2026-08-28` request header; requests setting `dynamic` without it are rejected.",
                              "x-exa-lifecycle": "beta",
                              "x-exa-beta-flag": "dynamic-highlights-2026-08-28",
                              "x-mint": {
                                "post": [
                                  "Beta"
                                ]
                              }
                            },
                            {
                              "type": "null"
                            }
                          ]
                        },
                        "maxCharacters": {
                          "anyOf": [
                            {
                              "type": "integer",
                              "minimum": 1,
                              "maximum": 1000000,
                              "description": "Maximum number of characters to return for highlights. Controls the total length of highlight text returned per URL. Not compatible with highlights.dynamic."
                            },
                            {
                              "type": "null"
                            }
                          ]
                        },
                        "numSentences": {
                          "anyOf": [
                            {
                              "type": "integer",
                              "minimum": 1,
                              "description": "Deprecated. Use `maxCharacters` instead. Currently mapped to a character budget of about 1333 characters per sentence. Pass highlights: true for default highlights, or { query } to guide selection with your own query.",
                              "x-exa-lifecycle": "deprecated",
                              "x-exa-replacement": "maxCharacters"
                            },
                            {
                              "type": "null"
                            }
                          ]
                        },
                        "highlightsPerUrl": {
                          "anyOf": [
                            {
                              "type": "integer",
                              "minimum": 1,
                              "description": "Deprecated. Currently ignored. Pass highlights: true for default highlights, or { query } to guide selection with your own query.",
                              "x-exa-lifecycle": "deprecated"
                            },
                            {
                              "type": "null"
                            }
                          ]
                        }
                      },
                      "title": "Advanced highlights options",
                      "description": "Advanced options for steering highlight extraction. Pass highlights: true for the highest-quality default; supply this object only when you need to guide selection with your own query."
                    }
                  ]
                },
                {
                  "type": "null"
                }
              ]
            },
            "summary": {
              "anyOf": [
                {
                  "type": "object",
                  "properties": {
                    "query": {
                      "anyOf": [
                        {
                          "type": "string",
                          "description": "Custom query for the LLM-generated summary."
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "schema": {
                      "anyOf": [
                        {
                          "type": "object",
                          "propertyNames": {
                            "type": "string"
                          },
                          "additionalProperties": {
                            "description": "Any JSON value.",
                            "oneOf": [
                              {
                                "type": "null"
                              },
                              {
                                "type": "boolean"
                              },
                              {
                                "type": "number"
                              },
                              {
                                "type": "string"
                              },
                              {
                                "type": "array",
                                "items": {}
                              },
                              {
                                "type": "object",
                                "propertyNames": {
                                  "type": "string"
                                },
                                "additionalProperties": {}
                              }
                            ]
                          },
                          "description": "JSON schema for structured output from summary. See https://json-schema.org/overview/what-is-jsonschema for JSON Schema documentation."
                        },
                        {
                          "type": "null"
                        }
                      ]
                    }
                  },
                  "description": "Summary of the webpage."
                },
                {
                  "type": "null"
                }
              ]
            },
            "extras": {
              "anyOf": [
                {
                  "type": "object",
                  "properties": {
                    "links": {
                      "anyOf": [
                        {
                          "type": "integer",
                          "minimum": 0,
                          "maximum": 1000,
                          "description": "Number of URLs to return from each webpage.",
                          "default": 0
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "imageLinks": {
                      "anyOf": [
                        {
                          "type": "integer",
                          "minimum": 0,
                          "maximum": 1000,
                          "description": "Number of images to return for each result.",
                          "default": 0
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "richImageLinks": {
                      "anyOf": [
                        {
                          "type": "integer",
                          "minimum": 0,
                          "maximum": 1000,
                          "description": "Number of rich image links to return for each result.",
                          "default": 0
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "richLinks": {
                      "anyOf": [
                        {
                          "type": "integer",
                          "minimum": 0,
                          "maximum": 1000,
                          "description": "Number of rich links to return for each result.",
                          "default": 0
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "codeBlocks": {
                      "anyOf": [
                        {
                          "type": "integer",
                          "minimum": 0,
                          "maximum": 1000,
                          "description": "Number of code blocks to return for each result.",
                          "default": 0
                        },
                        {
                          "type": "null"
                        }
                      ]
                    }
                  },
                  "description": "Extra parameters to pass."
                },
                {
                  "type": "null"
                }
              ]
            },
            "livecrawlTimeout": {
              "anyOf": [
                {
                  "type": "integer",
                  "exclusiveMinimum": 0,
                  "maximum": 90000,
                  "description": "The timeout for livecrawling in milliseconds.",
                  "default": 10000
                },
                {
                  "type": "null"
                }
              ]
            },
            "maxAgeHours": {
              "anyOf": [
                {
                  "type": "integer",
                  "minimum": -1,
                  "maximum": 720,
                  "description": "Maximum age of cached content in hours. Positive values use cached content if it is less than this many hours old; 0 fetches fresh content and is the supported way to apply text rendering options to newly fetched pages; -1 always uses cache; omitted uses fallback fetching when cached content is unavailable. Maximum supported value is 720 hours."
                },
                {
                  "type": "null"
                }
              ]
            },
            "snapshotAsOf": {
              "anyOf": [
                {
                  "description": "Return the newest stored version of each page as of this instant. Accepts an ISO 8601 date-time (`2026-01-15T00:00:00Z`) or a date-only value (`2026-01-15`), which is interpreted as midnight UTC. Historical requests are served from stored versions only and never fetch the live page.",
                  "oneOf": [
                    {
                      "type": "string",
                      "description": "ISO 8601 date-time.",
                      "format": "date-time"
                    },
                    {
                      "type": "string",
                      "description": "ISO 8601 date (`YYYY-MM-DD`), interpreted as midnight UTC.",
                      "format": "date"
                    }
                  ]
                },
                {
                  "type": "null"
                }
              ]
            },
            "subpages": {
              "anyOf": [
                {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 100,
                  "description": "The number of subpages to crawl. The actual number crawled may be limited by system constraints.",
                  "default": 0
                },
                {
                  "type": "null"
                }
              ]
            },
            "subpageTarget": {
              "anyOf": [
                {
                  "description": "Term to find specific subpages of search results. Can be a single string or an array of strings.",
                  "oneOf": [
                    {
                      "type": "string",
                      "minLength": 1,
                      "maxLength": 100
                    },
                    {
                      "minItems": 0,
                      "maxItems": 100,
                      "type": "array",
                      "items": {
                        "type": "string",
                        "minLength": 1,
                        "maxLength": 100
                      }
                    }
                  ]
                },
                {
                  "type": "null"
                }
              ]
            }
          }
        },
        {
          "type": "null"
        }
      ]
    },
    "query": {
      "type": "string",
      "minLength": 1,
      "description": "The query string for the search."
    },
    "additionalQueries": {
      "anyOf": [
        {
          "minItems": 1,
          "maxItems": 10,
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "Additional query variations for deep-search variants. Only works with a deep-search type. When provided, these queries are used alongside the main query for broader results."
        },
        {
          "type": "null"
        }
      ]
    },
    "type": {
      "anyOf": [
        {
          "type": "string",
          "enum": [
            "instant",
            "fast",
            "auto",
            "deep-lite",
            "deep",
            "deep-reasoning"
          ],
          "description": "The search mode to use. `auto` (default) is a balanced mode that optimizes for both quality and speed and is recommended for most applications. `fast` returns high-quality results with reduced latency, making it a good fit for user-facing search and interactive workflows. `instant` is optimized for minimum response time, trading some search depth for speed in real-time experiences such as chat, voice agents, and autocomplete. `deep-lite` performs lightweight research with synthesized results and a consistent 4-second latency, lower than full deep search. `deep` conducts comprehensive multi-step research with synthesis, while `deep-reasoning` adds stronger reasoning for complex analysis and decision-making tasks.",
          "default": "auto"
        },
        {
          "type": "null"
        }
      ]
    },
    "category": {
      "anyOf": [
        {
          "type": "string",
          "enum": [
            "company",
            "publication",
            "news",
            "personal site",
            "financial report",
            "people"
          ],
          "description": "A data category to focus on. Known categories include `company`, `publication`, `news`, `personal site`, `financial report`, and `people`. Other strings are accepted and used as category hints for search. The `people` and `company` categories have improved quality for finding people profiles and company pages. The `publication` category surfaces scholarly publications such as research papers, preprints, and journal articles, with structured metadata like authors, venue, and citations. Note: The `company` and `people` categories only support a limited set of filters. The following parameters are NOT supported for these categories: `startPublishedDate`, `endPublishedDate`, `excludeDomains`. Using unsupported parameters will result in a 400 error."
        },
        {
          "type": "null"
        }
      ]
    },
    "userLocation": {
      "anyOf": [
        {
          "type": "string",
          "description": "The two-letter ISO country code of the user, e.g. US."
        },
        {
          "type": "null"
        }
      ]
    },
    "outputSchema": {
      "anyOf": [
        {
          "oneOf": [
            {
              "type": "object",
              "properties": {
                "type": {
                  "type": "string",
                  "const": "text"
                },
                "description": {
                  "type": "string"
                }
              },
              "required": [
                "type"
              ]
            },
            {
              "type": "object",
              "properties": {
                "type": {
                  "type": "string",
                  "const": "object"
                },
                "description": {
                  "type": "string"
                },
                "properties": {
                  "type": "object",
                  "propertyNames": {
                    "type": "string"
                  },
                  "additionalProperties": {
                    "description": "Any JSON value.",
                    "oneOf": [
                      {
                        "type": "null"
                      },
                      {
                        "type": "boolean"
                      },
                      {
                        "type": "number"
                      },
                      {
                        "type": "string"
                      },
                      {
                        "type": "array",
                        "items": {}
                      },
                      {
                        "type": "object",
                        "propertyNames": {
                          "type": "string"
                        },
                        "additionalProperties": {}
                      }
                    ]
                  }
                },
                "required": {
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                },
                "additionalProperties": {
                  "type": "boolean"
                }
              },
              "required": [
                "type"
              ],
              "additionalProperties": {
                "description": "Any JSON value.",
                "oneOf": [
                  {
                    "type": "null"
                  },
                  {
                    "type": "boolean"
                  },
                  {
                    "type": "number"
                  },
                  {
                    "type": "string"
                  },
                  {
                    "type": "array",
                    "items": {}
                  },
                  {
                    "type": "object",
                    "propertyNames": {
                      "type": "string"
                    },
                    "additionalProperties": {}
                  }
                ]
              }
            }
          ],
          "description": "JSON schema for synthesized output. Supported root types are \"text\" and \"object\". When provided, the response includes an output object whose content matches this schema. Works with every search type and adds about 2 seconds of synthesis latency on top of the selected search type. Object schemas are limited to 10 properties in total (nested and array items properties count toward the limit) and 2 levels of nesting, and every array must define items.",
          "type": "object"
        },
        {
          "type": "null"
        }
      ]
    },
    "objective": {
      "anyOf": [
        {
          "type": "string",
          "maxLength": 4096
        },
        {
          "type": "null"
        }
      ],
      "description": "The broader goal this search serves: the task the caller is working on, beyond the query itself. When exposing this field to an agent as a tool parameter, describe it as: \"Goal for this search turn; say which documents should rank first, which should be excluded, and what specific facts or figures to pull from them.\""
    },
    "systemPrompt": {
      "anyOf": [
        {
          "type": "string",
          "description": "Additional instructions that guide generated output or agent behavior. Use this for source preferences, novelty constraints, duplication constraints, or other behavior guidance."
        },
        {
          "type": "null"
        }
      ]
    }
  },
  "required": [
    "query"
  ],
  "additionalProperties": false
}
```

## Published example

This is the provider tool’s published example. Replace example values with the user’s requested inputs, respecting the schema; do not execute an example merely to test a connection.


```json
{
  "tool_id": "exa/search",
  "input": {
    "query": "Agentik pay per call tools for AI agents",
    "type": "fast",
    "numResults": 1
  }
}
```

## Execute and retrieve

Inspect again before execution, explain the price and obtain the required authority. Use MCP run_tool or POST /v1/run with this tool ID, valid input and an idempotency key. Save the returned run ID and follow the actual state. If Agentik answers that the tool is temporarily unavailable, do not retry it blindly; use discovery to propose an alternative.

A partial or uncertain result can still have consumed provider resources. Consult [billing](/docs/billing.md), [idempotency](/docs/idempotency.md) and [asynchronous results](/docs/async.md).

[Provider documentation](https://exa.ai/docs/reference/search)

[REST inspection](https://api.agentik.cc/v1/tools/exa/search) · [OpenAPI](/openapi.json) · [Connection guide](/connect.md)

---

[HTML page](/providers/exa/search) · [Agent index](/llms.txt)
