MoizIbnYousaf/marketing-cli

exa-search

Call Exa Search (POST /search) for semantic web retrieval with ranked results, filters, freshness, highlights/text, structured output, or streaming. Use when the agent needs open-ended web search, competitor discovery, news, people, or research papers and does not already have URLs. Prefer Exa MCP web_search_exa / web_search_advanced_exa when available; otherwise raw HTTP with EXA_API_KEY. NOT for known-URL extraction (use exa-contents or firecrawl) or multi-step list-building (use company-resea

88CollectingNetwork accessSends data out
See how to use itView GitHub source
npx skills add https://github.com/MoizIbnYousaf/marketing-cli --skill "skills/exa-search"
Automated source guide

Source checked Jul 28, 2026·Refresh due Oct 26, 2026

Reorganized from the pinned upstream SKILL.md

Turn exa-search's source instructions into a guide you can follow

According to the pinned SKILL.md from MoizIbnYousaf/marketing-cli: 1. Read brand/positioning.md, brand/competitors.md, and brand/landscape.md if present. Use them to sharpen queries and exclusions. All optional - works at zero brand context. 2. Confirm Exa auth: Exa MCP connected, or EXAAPIKEY set (mktg doctor --json --fields integrations). If…

npx skills add https://github.com/MoizIbnYousaf/marketing-cli --skill "skills/exa-search"
Check the pinned source

Best fit

  • Use when the agent needs open-ended web search, competitor discovery, news, people, or research papers and does not already have URLs.
  • Call Exa Search (POST /search) for semantic web retrieval with ranked results, filters, freshness, highlights/text, structured output, or streaming. Use when the agent needs open-ended web search, competitor discovery, news, people, or research papers and does not already have URLs. Prefer Exa MCP web_search_exa / web_search_advanced_exa when available; otherwise raw HTTP with EXA_API_KEY. NOT for known-URL extraction (use exa-contents or firecrawl) or multi-step list-building (use company-resea

Bring this context

  • A concrete task that matches the documented purpose of exa-search.
  • The files, examples, or context the task depends on.
  • Your constraints, target environment, and definition of done.

Expected outputs

  • Use systemPrompt for behavior and outputSchema for shape.
  • Keep schemas compact and bounded. Do not add citation fields to the schema; grounding is returned separately in output.grounding.

Key source sections

Read exa-search through these 5 source sections

Sections are extracted automatically from the pinned SKILL.md and link back to the source.

01

Quick Start (cURL)

Review the “Quick Start (cURL)” section in the pinned source before continuing.

SKILL.md · Quick Start (cURL)
Review and apply the “Quick Start (cURL)” source section.
02

On Activation

1. Read brand/positioning.md, brand/competitors.md, and brand/landscape.md if present. Use them to sharpen queries and exclusions. All optional - works at zero brand context. 2. Confirm Exa auth: Exa MCP connected, or EXAAPIKEY set (mktg doctor --json --fields integrations). If…

SKILL.md · On Activation
Read brand/positioning.md, brand/competitors.md, and brand/landscape.md if present. Use them to sharpen queries and exclusions. All optional - works at zero brand context.Confirm Exa auth: Exa MCP connected, or EXAAPIKEY set (mktg doctor --json --fields integrations). If neither, stop and surface: get a key at https://dashboard.exa.ai/api-keys then export EXAAPIKEY=....Prefer MCP tools when present; otherwise use the cURL examples below.
03

Exa Search

Requires API key: Get one at https://dashboard.exa.ai/api-keys Header: x-api-key: $EXAAPIKEY

SKILL.md · Exa Search
Keep text, highlights, and summary inside contents on /search.Do not send top-level text, highlights, or summary; that shape belongs to /contents.Do not send tokensNum; use contents.text.maxCharacters to cap extracted text.
04

Basic search

Review the “Basic search” section in the pinned source before continuing.

SKILL.md · Basic search
Review and apply the “Basic search” source section.
05

Search with highlights

Review the “Search with highlights” section in the pinned source before continuing.

SKILL.md · Search with highlights
Review and apply the “Search with highlights” source section.

SkillSignal prompt templates

Provide the task, context, and acceptance criteria

These prompts were written by SkillSignal from the source structure; they are not upstream text.

Task-start prompt

Confirm source fit, inputs, and outputs before acting.

Use exa-search to help me with: [specific task]. Context: [files, data, or background]. Constraints: [environment, scope, and prohibited actions]. Before acting, check the pinned SKILL.md and explain which sections apply, what inputs are still missing, and what you will deliver.

Source-guided execution

Make the Agent explicitly follow the key extracted sections.

Apply the pinned exa-search source to [task]. Pay particular attention to these source sections: “Quick Start (cURL)”, “On Activation”, “Exa Search”, “Basic search”, “Search with highlights”. Preserve the important decision at each step. Mark facts not covered by the source as “needs confirmation” instead of inventing them. Then verify the result against my acceptance criteria: [criteria].

Result-review prompt

Check omissions, permissions, and source drift before delivery.

Review the current exa-search result: (1) does it satisfy the original task; (2) were any applicable steps or limits in the pinned SKILL.md missed; (3) did it perform any unauthorized file, command, network, or data action; and (4) which conclusions remain unverified? List issues first, then fix only what the source or user authorization supports.

Output checklist

Verify each item before delivery

The task matches the purpose documented in the SKILL.md.

The source section “Quick Start (cURL)” has been checked.

The source section “On Activation” has been checked.

The source section “Exa Search” has been checked.

The source section “Basic search” has been checked.

Inputs, constraints, and acceptance criteria are explicit.

Unverified facts, compatibility, and outcome claims are clearly marked.

Any file, command, network, or data action has been reviewed.

Choose a different workflow

When another Skill is the better fit

FAQ

What does exa-search do?

1. Read brand/positioning.md, brand/competitors.md, and brand/landscape.md if present. Use them to sharpen queries and exclusions. All optional - works at zero brand context. 2. Confirm Exa auth: Exa MCP connected, or EXAAPIKEY set (mktg doctor --json --fields integrations). If…

How do I start using exa-search?

The catalog detected this source-specific install command: npx skills add https://github.com/MoizIbnYousaf/marketing-cli --skill "skills/exa-search". Inspect the command and pinned source before running it.

Which Agent platforms does it declare?

No dedicated Agent platform is declared in the pinned source record.

Repository stars
27
Repository forks
5
Quality
88/100
Source repository last pushed

Quality breakdown

Based on traceable docs and repository signals; stars are not treated as quality.

88/100
Documentation30/30
Specificity18/25
Maintenance20/20
Trust signals20/25

Compare before choosing

Related Agent Skills and source variants

These links are selected from shared tasks, functions, stacks, platforms, and same-name variants. Compare the source owner, documentation, permissions, and maintenance signals.

exa-search by affaan-m

Neural search via Exa MCP for web, code, and company research. Use when the user needs web search, code examples, company intel, people lookup, or AI-powered deep research with Exa's neural search engine.

exa-search by affaan-m

Neural search via Exa MCP for web, code, and company research. Use when the user needs web search, code examples, company intel, people lookup, or AI-powered deep research with Exa's neural search engine.

exa-search by k-dense-ai

Web toolkit powered by Exa, tuned for scientific and technical content. Use this skill when the user needs to search the web or fetch/extract URL content. Covers: web search (semantic lookups, research, current info — with optional research-paper category and academic domain filtering) and URL extraction (fetching pages, articles, academic PDFs in batch). Use this skill for web-related tasks when the user wants high-quality search or scholarly filtering via category=research paper. Triggers on r

exa-search by affaan-m

Exa MCPによるウェブ、コード、企業調査のためのニューラル検索。ユーザーがウェブ検索、コード例、企業情報、人物検索、またはExaのニューラル検索エンジンを使ったAI駆動の詳細調査を必要とする場合に使用します。

exa-search by affaan-m

通过Exa MCP进行神经搜索,适用于网络、代码和公司研究。当用户需要网络搜索、代码示例、公司情报、人员查找,或使用Exa神经搜索引擎进行AI驱动的深度研究时使用。

View original Skill.mdThis page is parsed directly from the repository SKILL.md without editorial rewriting. Collected: Jul 28, 2026 · about 7 min

On Activation

  1. Read brand/positioning.md, brand/competitors.md, and brand/landscape.md if present. Use them to sharpen queries and exclusions. All optional - works at zero brand context.
  2. Confirm Exa auth: Exa MCP connected, or EXA_API_KEY set (mktg doctor --json --fields integrations). If neither, stop and surface: get a key at https://dashboard.exa.ai/api-keys then export EXA_API_KEY=....
  3. Prefer MCP tools when present; otherwise use the cURL examples below.
  4. After discovery, chain firecrawl or exa-contents only when a known URL needs deeper extraction.

Exa Search

Requires API key: Get one at https://dashboard.exa.ai/api-keys

Header: x-api-key: $EXA_API_KEY

Use POST https://api.exa.ai/search for semantic web retrieval, ranked results, and optional result-level extraction in one raw HTTP call. Start with type: "auto" for general retrieval. Add contents only when the caller needs page text, highlights, summaries, freshness-controlled crawling, subpages, or extracted links.

Quick Start (cURL)

Basic search

curl -sS -X POST "https://api.exa.ai/search" \
  -H "Content-Type: application/json" \
  -H "x-api-key: $EXA_API_KEY" \
  -d '{
    "query": "latest developments in LLMs",
    "type": "auto",
    "numResults": 10
  }'

Search with highlights

curl -sS -X POST "https://api.exa.ai/search" \
  -H "Content-Type: application/json" \
  -H "x-api-key: $EXA_API_KEY" \
  -d '{
    "query": "latest developments in LLMs",
    "type": "auto",
    "numResults": 5,
    "contents": {
      "highlights": true
    }
  }'

With filters and freshness

curl -sS -X POST "https://api.exa.ai/search" \
  -H "Content-Type: application/json" \
  -H "x-api-key: $EXA_API_KEY" \
  -d '{
    "query": "AI regulation policy updates",
    "type": "auto",
    "category": "news",
    "numResults": 10,
    "includeDomains": ["reuters.com", "bbc.com"],
    "startPublishedDate": "2025-01-01",
    "contents": {
      "text": {
        "maxCharacters": 2000
      },
      "maxAgeHours": 24,
      "livecrawlTimeout": 12000
    }
  }'

Deep search

curl -sS -X POST "https://api.exa.ai/search" \
  -H "Content-Type: application/json" \
  -H "x-api-key: $EXA_API_KEY" \
  -d '{
    "query": "map the major technical and commercial tradeoffs in sodium-ion batteries for grid storage",
    "type": "deep",
    "numResults": 8
  }'

Endpoint

POST https://api.exa.ai/search

Authentication: x-api-key: <API_KEY> header. Exa also accepts Authorization: Bearer <API_KEY>, but prefer x-api-key in cURL examples for consistency.

Use this endpoint when the agent needs search results. If the agent already has URLs and only needs extraction, use POST /contents instead.

Parameters

Core request parameters

ParameterTypeRequiredDefaultDescription
querystringYes-Natural-language search query. Long, semantically rich descriptions work well.
typestringNoautoSearch method: auto, fast, instant, deep-lite, deep, or deep-reasoning.
numResultsintegerNo10Number of results to return. Use small values for agent loops; maximum is 100.
categorystringNo-Specialized result type: company, people, research paper, news, personal site, or financial report.
includeDomainsstring[]No-Only return results from these domains, paths, or wildcard patterns. Max 1200.
excludeDomainsstring[]No-Exclude these domains, paths, or wildcard patterns. Max 1200.
startPublishedDatestringNo-ISO 8601 lower bound for result publication date.
endPublishedDatestringNo-ISO 8601 upper bound for result publication date.
userLocationstringNo-Two-letter ISO country code such as US or GB.
moderationbooleanNofalseFilter unsafe content from results.
additionalQueriesstring[]No-Extra query variants for deep-search variants. Use alongside the main query.
systemPromptstringNo-Instructions for synthesized output and deep-search planning, such as source preferences.
outputSchemaobjectNo-JSON Schema controlling output.content. Adds synthesized output and grounding.
streambooleanNofalseIf true, returns SSE instead of a single JSON response.
compliancestringNo-Enterprise-only compliance mode, such as hipaa, when enabled for the account.

Content parameters nested under contents

On /search, text, highlights, and summary must be nested under contents.

ParameterTypeRequiredDefaultDescription
contents.textboolean or objectNo-Return full page text as markdown. Object form supports maxCharacters, includeHtmlTags, verbosity, includeSections, and excludeSections.
contents.highlightsboolean or objectNo-Return query-relevant excerpts. Prefer true for agent workflows unless a fixed character budget is required.
contents.summaryboolean or objectNo-Return per-result LLM summaries. Use sparingly because each result adds synthesis work.
contents.maxAgeHoursintegerNo-Freshness control. 0 always live crawls; -1 uses cache only; omit for default cache-first behavior with crawl fallback.
contents.livecrawlTimeoutintegerNo10000Timeout for live crawling in milliseconds. Use 10000 to 15000 for most freshness-sensitive calls.
contents.subpagesintegerNo0Number of linked subpages to crawl per result.
contents.subpageTargetstring or string[]No-Terms used to prioritize which subpages matter, such as ["api", "pricing"].
contents.extras.linksintegerNo0Number of links to extract from each result page.
contents.extras.imageLinksintegerNo0Number of image URLs to extract from each result page.

Text object options

ParameterTypeDefaultDescription
maxCharactersinteger-Character limit for returned text. Use this instead of tokensNum.
includeHtmlTagsbooleanfalsePreserve HTML tags in output.
verbositystringcompactcompact, standard, or full. Pair fresh section-aware extraction with contents.maxAgeHours: 0.
includeSectionsstring[]-Only include selected sections: header, navigation, banner, body, sidebar, footer, metadata.
excludeSectionsstring[]-Exclude selected sections from the same section list.

Highlights object options

Prefer contents.highlights: true for the highest-quality default. Only use object form when the agent needs a custom focus or budget.

ParameterTypeDefaultDescription
querystring-Custom query guiding which excerpts are returned.
maxCharactersinteger-Cap highlight characters per URL. Omit unless the caller has a strict budget.

Summary object options

ParameterTypeDefaultDescription
querystring-Custom query for the summary.
schemaobject-JSON Schema for structured per-result summaries.

Search Types

Search type controls the retrieval and synthesis mode. Pick the mode for the workflow, not just the output format. outputSchema can be used with any search type; use deeper modes when the search process itself needs more planning, synthesis, or reasoning.

TypeBest forTradeoff
autoGeneral default search and most new integrationsBalances speed and quality without requiring the caller to tune retrieval strategy.
fastLow-latency agent loops and product pathsFaster than auto; use when responsiveness matters more than maximum reasoning depth.
instantReal-time UI, chat, voice, and autocomplete-style pathsLowest latency path; use for quick retrieval rather than deep synthesis.
deep-liteLightweight research or synthesisAdds more planning and synthesis than auto while staying lighter than full deep.
deepMulti-step research, comparisons, and synthesis-heavy retrievalHigher latency; better when the query needs exploration across several sources.
deep-reasoningHard research tasks with high ambiguity or complex tradeoffsHighest latency and reasoning depth.

Use auto unless latency or reasoning depth is the primary constraint. Use fast or instant for time-sensitive calls. Use deep, deep-lite, or deep-reasoning when the query needs multi-step source discovery, comparison, or synthesis.

Mode-only examples

{
  "query": "recent product launches from major AI chip companies",
  "type": "fast",
  "numResults": 5
}
{
  "query": "compare competing explanations for the recent rise in grid-scale battery deployments",
  "type": "deep",
  "numResults": 8
}

Structured Output

Use systemPrompt for behavior and outputSchema for shape.

curl -sS -X POST "https://api.exa.ai/search" \
  -H "Content-Type: application/json" \
  -H "x-api-key: $EXA_API_KEY" \
  -d '{
    "query": "compare the latest frontier AI model releases",
    "type": "deep",
    "systemPrompt": "Prefer official sources and avoid duplicate results.",
    "outputSchema": {
      "type": "object",
      "properties": {
        "models": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "name": { "type": "string" },
              "notable_claims": {
                "type": "array",
                "items": { "type": "string" }
              }
            },
            "required": ["name", "notable_claims"]
          }
        }
      },
      "required": ["models"]
    },
    "contents": {
      "highlights": true
    }
  }'

Keep schemas compact and bounded. Do not add citation fields to the schema; grounding is returned separately in output.grounding.

Streaming

Streaming applies to synthesized output, so include outputSchema along with -N, Accept: text/event-stream, and stream: true. Without outputSchema, the endpoint returns the normal JSON search response even when stream is true.

curl -sS -N -X POST "https://api.exa.ai/search" \
  -H "Content-Type: application/json" \
  -H "Accept: text/event-stream" \
  -H "x-api-key: $EXA_API_KEY" \
  -d '{
    "query": "recent grid-scale battery deployments",
    "type": "deep",
    "stream": true,
    "outputSchema": {
      "type": "object",
      "properties": {
        "summary": { "type": "string" }
      },
      "required": ["summary"]
    },
    "contents": {
      "highlights": true
    }
  }'

Treat streaming as SSE rather than JSON. Each data: frame contains an OpenAI-compatible chat completion chunk; read partial text from choices[0].delta.content and handle completion or error frames defensively.

Response Fields

FieldTypeDescription
requestIdstringUnique request identifier.
resultsarrayRanked result objects.
results[].titlestringPage title.
results[].urlstringPage URL.
results[].publishedDatestring or nullEstimated publication date when available.
results[].authorstring or nullAuthor when available.
results[].textstringReturned when contents.text is requested.
results[].highlightsstring[]Returned when contents.highlights is requested.
results[].highlightScoresnumber[]Similarity scores for highlights.
results[].summarystringReturned when contents.summary is requested.
results[].subpagesarrayNested result objects from subpage crawling.
results[].extras.linksstring[]Extracted links when requested.
output.contentstring or objectSynthesized output when outputSchema is provided.
output.groundingarrayCitations and confidence labels for synthesized fields.
costDollars.totalnumberTotal request cost when returned.
searchTimenumberSearch latency when returned.

Anti-Patterns

  • Keep text, highlights, and summary inside contents on /search.
  • Do not send top-level text, highlights, or summary; that shape belongs to /contents.
  • Do not send tokensNum; use contents.text.maxCharacters to cap extracted text.
  • Do not use useAutoprompt, numSentences, or highlightsPerUrl in new requests.
  • Prefer contents.maxAgeHours over older livecrawl examples.
  • Use documented categories only: company, people, research paper, news, personal site, and financial report.
  • Avoid invalid category/filter combinations. company and people do not support startPublishedDate or endPublishedDate. company supports excludeDomains; people does not, and people only accepts LinkedIn domains in includeDomains.
  • Pick one of contents.highlights, contents.text, or contents.summary by default. Stack modes only when the caller truly needs multiple views of each page.
  • Expect SSE only when stream: true is paired with outputSchema; otherwise /search returns its normal JSON response.

Attribution

Ported from exa-labs/agent-skills - adapted for mktg's drop-in contract on 2026-07-18.

Upstream commit: 390ffee2d7e1d0dce2ed8efe4994c2b3c1c0173b

Drift detection: if the upstream skill changes, re-run mktg-steal https://github.com/exa-labs/agent-skills to evaluate the diff.

Skill path
skills/exa-search/SKILL.md
Commit SHA
f12fbcbe4929
Repository license
MIT
Data collected