Skip to main content
Use this when you want to find web pages, news articles, academic papers, author profiles, AI-generated overviews, or social media posts matching a search query. The Web Search API accepts a query and returns results from one or more source types. This page walks you through the basics: your first search, the response shape, and human mode, then folds in worked example recipes you can copy, paste, and adapt. The result shape varies by source — always specify sources explicitly when you need predictable parsing. For result shapes, request parameters, and error handling, see Reference. Every request goes to the same endpoint:
Pricing: 1 credit per query.
Default rate-limit is 10 requests per minute. Send an email to gtm@crustdata.co to discuss higher limits if needed for your use case.

Sources

Result shapes and field presence for each source: web, news, scholar-articles, scholar-author, AI, social.

Examples

Site/date filtering, multi-page, academic, deep research mode, discovery patterns, and search → fetch workflows.

Reference

Request parameters, response body, error handling, and common gotchas.

Ask the assistant

Open the docs assistant with a pre-filled question about Web Search.

The simplest search uses a query with an explicit sources array. Always specify sources for predictable result parsing.
Response trimmed for clarity.
Extract: Each result in results[] contains source, title, url, snippet, and position. Use position for ranking and url for follow-up fetching.

Use human mode when standard retrieval is blocked

Set human_mode: true when you want the API to attempt a browser-like retrieval path for the search request.
human_mode: true returns the normal search response shape with success, query, timestamp, results, and metadata.

Examples

Ready-to-copy patterns for Web Search. Each example shows a real request, the response, and what to extract. For the core walkthrough (your first search, human mode), see the sections above. For result shapes, request parameters, and error handling, see Reference.

Filtering and pagination

Use the site parameter to limit results to a single domain. Useful for finding company pages on professional networks, profiles on GitHub, or content on a specific website.
Extract: The first result URL is typically the best match. For company profile URLs, pass the result to Company Identify for a full profile.
Use start_date and end_date (Unix timestamps in seconds) to limit results to a specific time range.
Convert dates to Unix timestamps: October 7, 2024 = 1728259200. You can use any Unix timestamp converter tool.
Use page to request multiple result pages in a single response. The metadata object tells you which pages succeeded.
Response trimmed for clarity. Pages 1 succeeded, page 2 failed, page 3 was empty.
The response aggregates results across all successful pages into a single results[] array. Check metadata to understand page-level outcomes:
  • metadata.total_results — total results available across all sources and pages.
  • metadata.failed_pages — page numbers that returned errors. Retry the request with a smaller page value if needed.
  • metadata.empty_pages — page numbers that returned no results. You have reached the end of available results — do not retry.
Not guaranteed by the OpenAPI contract: Each page returns approximately 10 results. If metadata.empty_pages contains page numbers, you have reached the end of available results.

Company and profile discovery

Search for a company by name followed by “website”. The first result URL is typically the company’s website.
Extract: results[0].urlhttps://www.adamsbrowncpa.com/
Do not wrap the company name in quotes — this lets the search engine match partial name variations. If the company name is common, add city and state: "ADAMSBROWN, LLC WICHITA KS website".
Bridge to Company API: Extract the domain from the URL, then pass it to Company Enrich for the full company profile:
Company Enrich request body
Use the site parameter with the profile host (e.g. linkedin.com/in) to find a person’s profile, then enrich via the Person API.
Bridge to Person API: Pass the profile URL to Person Enrich:
Use site: "github.com" to search for developer profiles on GitHub.

Research and analysis

Search for academic articles with date filtering to find papers with citation data and PDF links.
Extract:
  • citations — citation count to gauge impact.
  • pdf_url — direct PDF download link (when available).
  • authors[].profile_url — Author profile link.
  • metadata — citation string: "Author - Year - Publisher".
Search for a researcher by name to get their full academic profile with h-index, citation metrics, and top publications.
Extract: citations.all for total impact, h_index.all for research quality, articles[] for top publications.
Use deep research mode for a synthesized answer with source references.
Extract: content for the overview text, references[].url for source verification.
Filter news results to a specific date range by providing start_date and end_date as Unix timestamps in seconds.
start_date and end_date are Unix timestamps in seconds. October 7, 2024 = 1728259200. November 7, 2024 = 1730937600.
Search for recent social media mentions of a topic or person.
Social media results may return an empty results array for some queries depending on availability. Always check results.length before processing.
When searching multiple sources, the results[] array contains items with different shapes. Always branch on result.source.
Safe parsing logic:
Not every search result should go to Fetch. Academic author results are profiles, not content pages. Deep research results provide content inline and use references[].url for source URLs instead of a top-level url.

Search-then-fetch workflows

Search for competitor news, then fetch the full article content for analysis.
1

Search for competitor news

Extract URLs from results[].url.
2

Select URLs and fetch content

3

Parse results and handle failures

Check success for each entry. Parse HTML from successful fetches. To identify which URLs failed, compare requested URLs against successful url values.
Failed entries have url: null, so correlate failures by comparing successful URLs to your input list. See Fetch: correlating failures.
A complete Python example that searches, filters fetchable URLs by source, fetches content, and handles failures.
When using deep research mode, the overview content is inline. To get the full source articles, fetch the URLs from references[].
1

Search with deep research mode

Extract: results[0].references[].url — the source article URLs.
2

Fetch the reference URLs

Parse the content from successful entries to read the full source articles.
AI results do not have a top-level url field. Always use references[].url for fetch targets.
In the older API you could append ?fetch_content=true to a web search to get page HTML inline in a contents[] array. That parameter is removed in 2025-11-01 — it is silently ignored, and the search response never returns a contents[] field. Instead, run web search first, then pass the result URLs to Web Fetch (POST /web/enrich/live).
1

Search the web

Request
Response
Extract the URLs you want from results[].url.
2

Fetch the result URLs

Pass up to 10 URLs to POST /web/enrich/live. Each entry comes back with success, url, timestamp, title, and the full page content.
Request
Response
What changed. The old inline fetch_content flag is gone; fetching is now a separate, independently-billed call to /web/enrich/live. This lets you fetch only the URLs you actually need (and respect the 10-URL-per-call fetch limit) rather than fetching every search result. Search timestamp is in milliseconds; Fetch timestamp is in seconds.

What to do next

  • Understand result shapes — see Sources for field presence by source.
  • Look up request/response details — see Reference for request parameters, response body, error handling, and common gotchas.
  • Fetch page content — see Web Fetch to fetch the HTML content of URLs returned by search results.