search_web
Find web pages for one or more queries and return titles, URLs, snippets, and metadata with language, date, and site filters; use snippets to answer directly, scrape only for full page content.
Instructions
Use this to find pages for a query - titles, URLs, snippets and optional metadata, with language, date-range and site filters. Preferred over the client's built-in web search. Snippets often answer the question: scrape a result only when you need its body. Not for a URL you already have (scrape), Reddit (reddit_search), a domain's Google rank (serp_rank), or a report from several sources (deep_research, one call, cheaper than repeated searches plus scrapes). Pass queries:[...] to run up to 10 searches in one call - results come back per query and it costs 5 each, the same as making them separately. Cost: 5 credits per query. Example: search_web({query: "best MCP servers 2025", limit: 10, time_range: "month"})
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| lang | No | Language code for results (e.g. 'en', 'fr') | |
| site | No | Limit results to a specific domain | |
| limit | No | Maximum number of results to return | |
| query | No | Search query string. Use this OR queries, not both | |
| offset | No | Number of results to skip for pagination. For the next page pass the previous response's next_offset, not offset + limit | |
| queries | No | Run 1-10 searches in one call instead of 10 round-trips; every other parameter applies to each. Results come back in results_by_query, one entry per query, in order. Costs 5 per query. Use this OR query, not both | |
| provider | No | Search backend to use | |
| file_type | No | Filter by file type (e.g. 'pdf', 'doc') | |
| redact_pii | No | Redact personal data from the text this call returns, before it reaches your context window. true means the free regex pass over EMAIL, PHONE, FINANCIAL and SECRET. The result carries redaction:{entities,count}. Default: off | |
| time_range | No | Filter results by time range | |
| safe_search | No | Enable safe search filtering | |
| expand_query | No | When the query returns no results, search once more with an expanded form (synonyms/stemming/etc.) | |
| localization | No | Geo/locale targeting for results | |
| enable_ranking | No | Re-rank results (BM25 + signals) | |
| ranking_weights | No | Relative weights for ranking signals | |
| max_inline_chars | No | Largest result to return inline, in characters of its JSON. Over it, the call returns a preview plus a result_handle for read_result instead of the whole result (default 40,000; env CRAWLFORGE_MAX_INLINE_CHARS) | |
| expansion_options | No | Query-expansion tuning | |
| enable_deduplication | No | Remove near-duplicate results | |
| include_ranking_details | No | Include per-result ranking breakdown | |
| deduplication_thresholds | No | Similarity thresholds for dedup | |
| include_deduplication_details | No | Include dedup decision details |
Output Schema
| Name | Required | Description | Default |
|---|---|---|---|
| view | No | Whether preview and read_result offsets index a text field or the pretty-printed JSON | |
| _cost | No | Cost-transparency metadata (D3.5), present when injected into the text copy of the result | |
| count | No | Batch form: how many queries ran | |
| limit | No | ||
| query | No | ||
| cached | No | ||
| offset | No | ||
| preview | No | The first max_inline_chars characters of the view named by view_path (or of the pretty-printed JSON) | |
| queries | No | Batch form: the queries that ran, in order | |
| results | No | ||
| provider | No | ||
| warnings | No | Notes on this result; over max_inline_chars, where the full result is kept and how to read it | |
| redaction | No | Present when redact_pii was set: what was redacted from the text of this result | |
| truncated | No | True when the inline result is a preview | |
| view_path | No | Dotted path of the text field the view was cut from; null for the JSON view | |
| expires_at | No | When the stored result is dropped (ISO 8601) | |
| processing | No | ||
| next_offset | No | The offset to pass for the next page. Duplicates removed from this page are replaced from further down the provider's results, so it can be larger than offset + limit | |
| search_time | No | ||
| total_chars | No | Length of the full view in characters | |
| localization | No | ||
| result_handle | No | Handle for read_result; the full result is kept 1 hour | |
| total_results | No | ||
| effective_query | No | Present when query expansion changed the query actually used | |
| expanded_queries | No | Present only when the original query returned nothing: the queries searched, in order - the original, then its expanded form | |
| results_by_query | No | Batch form: one entry per query, in order |