---
name: stableenrich.dev
description: stableenrich.dev provides web search and content enrichment capabilities across multiple backends: Serper (Google News and Images), Firecrawl, and Exa (neural search, URL content extraction, and AI-generated answers). It returns structured metadata including titles, URLs, snippets, publication dates, and image dimensions. It does not offer financial data, real-time streaming feeds, or authenticated-URL scraping.
host: stableenrich.dev
---

# stableenrich.dev

stableenrich.dev aggregates several third-party search and enrichment APIs into a single host, serving agents that need to discover web content, retrieve news articles, find images of people, or extract and summarize content from known URLs. It covers the full discovery-to-enrichment pipeline: query a search engine, get ranked results, then fetch and enrich the content of specific URLs. It is backend-agnostic in that it exposes both Serper-based (Google-index) and Exa-based (neural-index) search, letting agents choose the retrieval style that fits their task.

## When to use this host

Use stableenrich.dev when an agent needs to search the web (general or news), retrieve structured image results, or extract and summarize content from known URLs. Prefer search-exa-web for semantic or concept-driven queries; prefer search-web-firecrawl or fetch-google-news-serper when Google-index recency and news-specific metadata matter. Use fetch-exa-answer when the goal is a direct cited answer rather than a list of results. Do not use this host for real-time financial or market data — use a dedicated financial data API instead. Do not use it for reverse image search, image analysis, or authenticated-URL scraping. It is not a streaming data source. If the agent already knows the target URL and only needs content, go directly to fetch-exa-url-contents rather than running a search first.

## Capabilities

### Web Search and Discovery

Finds relevant web pages and articles by keyword or semantic query, returning ranked results with titles, URLs, descriptions, and content snippets. Covers both traditional Google-index search via Firecrawl and neural semantic search via Exa.

- **`search-web-firecrawl`** — Searches the web via Firecrawl and returns up to 10 enriched results, each with title, URL, description, and a markdown content snippet.
- **`search-exa-web`** — Performs a neural web search via Exa's index and returns ranked results with title, URL, published date, author, and optional content enrichment.

### News Search

Retrieves ranked Google News articles for a topic or keyword, with structured metadata including headline, source, publication date, and image URL, with optional country and language filtering.

- **`fetch-google-news-serper`** — Queries Google News via Serper and returns ranked news articles with title, link, snippet, date, source, and image URL for a given search query.

### AI-Answered Factual Lookup

Submits a natural-language question to Exa and returns a synthesized answer string with cited web sources, suitable for direct factual resolution without manual result parsing.

- **`fetch-exa-answer`** — Submits a natural-language query to Exa-backed search and returns an AI-generated answer string with source citations including URL, title, author, and published date.

### URL Content Enrichment

Crawls one or more known URLs via Exa and returns extracted text, summaries, highlights, and subpage links, enabling deep content extraction after URLs have been discovered.

- **`fetch-exa-url-contents`** — Crawls one or more URLs via Exa and returns extracted text, highlights, summaries, subpages, and link extras for each URL in a single response.

### Image Search

Queries Google Images via Serper for general images or person-specific headshots, returning direct image URLs, dimensions, thumbnails, and source page attribution.

- **`search-google-images`** — Queries Google Images via Serper and returns a ranked list of image results with URLs, dimensions, thumbnails, and source metadata.
- **`search-people-images`** — Performs a Google Images search tuned for people and headshots via Serper, returning ranked image results with URLs, dimensions, source domain, and page link.

## Workflows

### Discover and Enrich Web Content

*Use when an agent needs to find relevant web pages on a topic and then extract full content or summaries from the top results.*

1. **`search-exa-web`** — Perform a semantic search to discover ranked URLs relevant to the query, with optional domain and date filters.
2. **`fetch-exa-url-contents`** — Pass the discovered URLs to extract full text, highlights, and summaries from each page for downstream processing.

### News Research with Source Enrichment

*Use when an agent needs to surface recent news articles on a topic and then read the full content of the most relevant ones.*

1. **`fetch-google-news-serper`** — Search Google News for the topic to get ranked article headlines, sources, dates, and links.
2. **`fetch-exa-url-contents`** — Fetch and extract full text and summaries from the article URLs returned by the news search.

### Person Research with Photo

*Use when an agent needs to compile a profile of a named individual, including factual background and a headshot image.*

1. **`fetch-exa-answer`** — Submit a natural-language query about the person to get a cited factual summary covering role, background, and recent activity.
2. **`search-people-images`** — Search for a headshot or photo of the person, scoped by name and optionally company or title, to retrieve a direct image URL.

## Skill reference

### `fetch-google-news-serper`

**Serper Google News Search** — Queries Google News via Serper and returns ranked news articles with title, link, snippet, date, source, and image URL for a given search query.

*Use when:* Use when an agent needs fresh Google News results for a topic, keyword, or event — including filtering by country, language, or location — and requires structured article metadata such as headlines, sources, and publication dates.

*Not for:* Do not use for general web search results (non-news); use a Serper web search endpoint instead. Not suitable for real-time streaming news feeds or historical news archives.

**Inputs:**

- `q` (string, required) — Google News search query string.
- `num` (integer) — Number of news results to return. Must be between 1 and 100.
- `gl` (string) — Two-letter country code to localize results (e.g. 'us', 'gb').
- `hl` (string) — Language code for results (e.g. 'en', 'fr').
- `location` (string) — Geographic location string to further localize results (e.g. 'New York, NY').

**Returns:** Returns a searchParameters object echoing the query config and a news array of ranked articles each with title, URL, snippet, relative date, source name, and image URL.

**Example:** `{"q":"OpenAI announces new AI model release May 2026","gl":"us","hl":"en","num":8,"location":"San Francisco, CA, United States"}`

---

### `search-web-firecrawl`

**Firecrawl Web Search** — Searches the web via Firecrawl and returns up to 10 enriched results, each with title, URL, description, and a markdown content snippet.

*Use when:* Use when an agent needs current web search results with source URLs and content snippets for a given query, such as researching recent events, product releases, or factual lookups.

*Not for:* Do not use for full-page content extraction or scraping a specific known URL; use a dedicated crawl/scrape endpoint instead. Not suitable for real-time streaming data feeds.

**Inputs:**

- `query` (string, required) — Search query to find relevant web pages.
- `limit` (number) — Maximum number of results to return. Must be between 1 and 10. Defaults to 5.

**Returns:** Returns a results array of up to 10 objects each with title, url, description, and markdown snippet, plus the echoed query string and a resultCount integer.

**Example:** `{"query": "OpenAI GPT-4o release date and official announcement", "limit": 10}`

---

### `fetch-exa-answer`

**Exa Answer API** — Submits a natural-language query to Exa-backed search and returns an AI-generated answer string with source citations including URL, title, author, and published date.

*Use when:* Use when an agent needs a direct, cited answer to a factual question by searching the web — e.g., looking up current leadership, recent events, or verifiable facts that require live web sources.

*Not for:* Do not use for streaming responses without setting stream=true; not suitable for bulk document retrieval or structured data extraction — use a dedicated search or scrape API instead.

**Inputs:**

- `query` (string, required) — The question or query to answer. Must be at least 1 character.
- `stream` (boolean) — Whether to stream the response. Defaults to false.
- `text` (boolean) — Whether to include full text content in citation results. Defaults to false.

**Returns:** Returns an answer string with inline citation markers and a citations array of source objects (url, title, author, publishedDate, image, favicon), plus a costDollars.total field.

**Example:** `{"query": "Who is the CEO of Stripe?"}`

---

### `fetch-exa-url-contents`

**Exa Content Enricher** — Crawls one or more URLs via Exa and returns extracted text, highlights, summaries, subpages, and link extras for each URL in a single response.

*Use when:* Use when an agent needs to retrieve and enrich the full or partial content of known URLs — including extracted text, per-URL summaries, highlighted sentences, or subpage discovery — before processing or summarizing web content.

*Not for:* Do not use for open-ended web search where URLs are unknown; use a search API to discover URLs first. Not suitable for real-time streaming content or APIs that require authentication per URL.

**Inputs:**

- `urls` (array, required) — Array of URLs to crawl and enrich.
- `text` (object) — Controls text extraction. Pass true for defaults, or an object with maxCharacters (number) and includeHtmlTags (boolean).
- `highlights` (object) — Controls highlight extraction. Properties: numSentences (number), highlightsPerUrl (number), query (string).
- `summary` (object) — Controls per-URL summarization. Properties: query (string) and schema (object) for structured output.
- `livecrawl` (string) — Controls live crawl behavior. One of: never, fallback, always, preferred.
- `livecrawlTimeout` (number) — Timeout in milliseconds for live crawl requests.
- `subpages` (number) — Number of subpages to crawl per URL.
- `subpageTarget` (string) — Target path or array of paths to focus subpage crawling on.
- `extras` (object) — Controls extraction of extra data. Properties: links (number of links to return) and imageLinks (number of image links to return).

**Returns:** Returns a requestId and a results array where each entry contains the URL's id, title, url, author, and extracted text for each input URL.

**Example:** `{"urls": ["https://www.ietf.org/rfc/rfc7231.txt", "https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Type"], "text": {"maxCharacters": 9000}, "highlights": {"numSentences": 3, "highlightsPerUrl": 2, "query": "HTTP semantics"}, "summary": {"query": "What is this page about?"}, "livecrawl": "fallback"}`

---

### `search-exa-web`

**Exa Search** — Performs a neural web search via Exa's index and returns ranked results with title, URL, published date, author, and optional content enrichment.

*Use when:* Use when an agent needs to find relevant web pages, articles, or documentation by semantic query, optionally filtered by domain, crawl date, or publish date, and wants structured result metadata back.

*Not for:* Do not use for real-time data feeds or live stock/price lookups; use a dedicated financial data API instead. Not suitable for fetching full page content without setting the contents field.

**Inputs:**

- `query` (string, required) — The natural-language or keyword search query sent to Exa's neural index.
- `numResults` (number) — Number of results to return. Minimum 1, maximum 100. Defaults to 5.
- `includeDomains` (array) — Restrict results to pages from these domains only.
- `excludeDomains` (array) — Exclude results from these domains.
- `startCrawlDate` (string) — ISO 8601 date string; only return pages crawled on or after this date.
- `endCrawlDate` (string) — ISO 8601 date string; only return pages crawled on or before this date.
- `startPublishedDate` (string) — ISO 8601 date string; only return pages published on or after this date.
- `endPublishedDate` (string) — ISO 8601 date string; only return pages published on or before this date.
- `includeText` (array) — Only return results whose page text contains all of these strings.
- `excludeText` (array) — Exclude results whose page text contains any of these strings.
- `contents` (object) — Optional object controlling what page content is returned alongside each result. Supports text (boolean or object with maxCharacters/includeHtmlTags), highlights (numSentences, highlightsPerUrl, query), summary (query, schema), and livecrawl (never/fallback/...).

**Returns:** Returns a requestId, resolvedSearchType, searchTime, costDollars breakdown, and a results array of up to N items each with id, title, url, publishedDate, and optional author/image/favicon fields.

**Example:** `{"query": "best resources for learning Rust beginner to intermediate", "numResults": 5, "startPublishedDate": "2024-10-01", "endPublishedDate": "2025-03-31", "includeDomains": ["doc.rust-lang.org", "github.com"]}`

---

### `search-people-images`

**People Image Search** — Performs a Google Images search tuned for people and headshots via Serper, returning ranked image results with URLs, dimensions, source domain, and page link.

*Use when:* Use when an agent needs to find a headshot or photo of a named person, optionally scoped by company, title, or location context, and requires direct image URLs along with source attribution.

*Not for:* Do not use for general image search unrelated to people; use a general image search endpoint instead. Not suitable for retrieving LinkedIn profile photos when the profile is private or returns a default avatar — retry with public non-LinkedIn source terms in the query.

**Inputs:**

- `q` (string, required) — Exact-name plus company/context query string, e.g. '"Jane Doe" "Acme" LinkedIn headshot'. For ambiguous people, resolve profile slug, company, or title first before querying.
- `num` (integer) — Number of image results to return (Serper num). Must be between 1 and 100.
- `gl` (string) — Two-letter country code to localize results (e.g. 'us').
- `hl` (string) — Language code to localize results (e.g. 'en').
- `location` (string) — Geographic location string to further localize results (e.g. 'New York, NY').

**Returns:** Returns a searchParameters echo and an images array of up to N results, each with imageUrl, dimensions, thumbnailUrl, source name, domain, page link, and Google image result URL.

**Example:** `{"q":"Patrick Collison Stripe CEO headshot","gl":"us","hl":"en","num":5,"location":"San Francisco, CA"}`

---

### `search-google-images`

**Serper Image Search** — Queries Google Images via Serper and returns a ranked list of image results with URLs, dimensions, thumbnails, and source metadata.

*Use when:* Use when an agent needs Google Images search results for a given query, including direct image URLs, thumbnail URLs, image dimensions, and source page links.

*Not for:* Do not use for web page or news search results; use a Serper web or news search endpoint instead. Not suitable for reverse image search or image analysis.

**Inputs:**

- `q` (string, required) — Google Images search query string.
- `num` (integer) — Number of image results to return (1–100).
- `gl` (string) — Two-letter country code to localize results (e.g. 'us').
- `hl` (string) — Language code to localize results (e.g. 'en').
- `location` (string) — Location string to further localize results (e.g. 'San Francisco, CA').

**Returns:** Returns a searchParameters object and an images array where each entry includes title, imageUrl, imageWidth, imageHeight, thumbnailUrl, source domain, source page link, and ranked position.

**Example:** `{"q":"golden retriever puppy","gl":"us","hl":"en","num":5,"location":"San Francisco, CA"}`

---
