# Improving search results

> Choose sources, retrieve full page text, and narrow Search1API results by site, time, and language.

Canonical URL: https://s1.dev/docs/guides/improving-search-results

Begin with the default search behavior, then add constraints only when the results show that you need them.

## Start with the default source

If you omit `search_service`, Search1API searches Google, the same as sending `"search_service": "google"`. Keep this default when you want general web coverage.

Set `search_service` when the source itself is part of the request:

```json
{ "query": "rust async runtime", "search_service": "reddit" }
```

For example, Reddit is useful for experience reports, GitHub for code and issues, arXiv for papers, and YouTube for video.

## Available web search sources

| Source | Useful for |
| --- | --- |
| `google` | General web |
| `bing` | General web |
| `bingcn` | Chinese-language Bing |
| `duckduckgo` | General web |
| `yahoo` | General web |
| `yandex` | General web, especially Russian and CIS |
| `x` | Posts and reactions on X |
| `reddit` | Discussions and experience reports |
| `github` | Repositories, issues, pull requests, and discussions |
| `youtube` | Video |
| `arxiv` | Preprints and academic papers |
| `wikipedia` | Encyclopedic background |
| `grokipedia` | English-language encyclopedic background from Grokipedia (Powered by xAI) |
| `imdb` | Google-indexed IMDb pages about films, people and credits |
| `wechat` | WeChat public-account articles |
| `bilibili` | Chinese-language video |
| `baidu` | Chinese-language general web |
| `quark` | Chinese-language general web |
| `360` | Chinese-language general web |

`/news` uses a separate source set: `google`, `bing`, `duckduckgo`, `yahoo`, `hackernews`, and `reuters`. Omitting `search_service` also enables the default multi-source behavior for news.

Community sources add optional structured fields in each result's `metadata`. Common fields (`title`, `link`, `snippet`, optional `content` and `published_date`) remain at the result top level. `metadata` is omitted when no engine-specific fields apply:

- `github` results carry `metadata.kind` (`repo`, `issue`, `pr` or `discussion`). Repositories add `metadata.stars` and `metadata.language`; issues, pull requests and discussions add `metadata.num_comments`, and their `snippet` starts with `owner/repo · issue · open · N comments`. A query like "tanstack start hydration error" returns the matching issues and discussions, not only repositories; append a GitHub qualifier such as `is:issue` or `stars:>1000` to search one type only. With `time_range`, results are limited to repositories and threads *created* in the window.
- `hackernews` results (`/news`) link to the Hacker News thread, with the submitted article in `metadata.story_url` (omitted for text posts without an article URL) and the vote and comment counts in `metadata.points` and `metadata.num_comments`. Multi-word queries match stories containing any of the words, best matches first.
- `reddit` results are ordered so that posts whose title or subreddit mentions the query terms come first.

`/trending` supports `github` and `hackernews`, and requires `search_service`.

`grokipedia` searches [Grokipedia](https://grokipedia.com), xAI's encyclopedia.
Entries are in English, so write the query in English; `language` and
`time_range` are ignored. Results link to the entry page and carry its opening
text as `snippet`. Grokipedia content is provided by xAI under the
[xAI Community License](https://huggingface.co/xai-org/grok-2/blob/main/LICENSE);
products that show it should display "Powered by xAI".

`imdb` searches IMDb-domain pages through Google's index. It returns webpage
titles, links and snippets, not structured IMDb catalogue metadata. Keep the
film/person and the information you need in `query`; there is no need to reduce
it to a title alone. Index coverage is not exhaustive, and results do not
guarantee reusable image rights, external interviews or archive downloads.

## Read the results, not just the snippets

Search results include a short `snippet`. When a model needs the source text, set `crawl_results` to crawl the top results and populate their `content` fields:

```bash
curl -X POST https://api.search1api.com/search \
  -H "Authorization: Bearer $SEARCH1API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "query": "postgres connection pooling best practices",
    "max_results": 10,
    "crawl_results": 3
  }'
```

This returns up to ten ranked results and attempts to add full text to the top three. `crawl_results` must be no greater than `max_results`.

> **info:** A search costs 1 credit, plus 1 credit for each page crawled successfully. See [Credits and limits](https://s1.dev/docs/essentials/credits-and-limits#search-with-full-page-content).

## Narrow by site

Use `include_sites` to search only selected domains and `exclude_sites` to remove unwanted ones:

```json
{
  "query": "vector database benchmarks",
  "include_sites": ["github.com", "news.ycombinator.com"],
  "exclude_sites": ["pinterest.com"]
}
```

> **warn:** A narrow `include_sites` list combined with a specific query can produce an empty `results` array — a completed, charged search that simply found no matches. Remove constraints one at a time to widen the match pool.

## Narrow by time or language

`time_range` accepts `day`, `week`, `month`, or `year`. Use it when freshness matters instead of adding words such as “latest” to the query.

Each result carries `published_date` when the source exposes one, so a model can check how fresh a result is or pick between conflicting sources. The value is ISO 8601: `YYYY-MM-DD` when only the day is known (typical for web search engines, `arxiv`, and `youtube` videos older than a day), or a UTC timestamp such as `2026-09-03T10:00:00Z` when the source carries a time (`x`, `reddit`, `github`, `bilibili`, `wechat`, `yandex` with `time_range`, and `/news` feeds). Treat the field as optional: `duckduckgo`, `wikipedia`, `grokipedia`, and most Chinese web engines return no date; `yandex` also omits it unless `time_range` is set; and other web engines only show one for a subset of pages.

`language` accepts a language code such as `en`, `zh-CN`, or `fr`. Search1API does not expose a separate country or region parameter.

## Control result count

`max_results` defaults to 5 and accepts values from 1 to 50. The gateway clamps numeric values above 50 to 50.

## Paginate native SERP results

`page` is native search-engine pagination, not an offset into a fused result list. It is honoured only for `bing`, `bingcn`, `baidu`, and `grokipedia`. Other engines, including `yandex`, ignore it.

```json
{
  "query": "vector database",
  "search_service": "bing",
  "page": 2
}
```

For the complete request schema, image results, batch bodies, and response fields, see the [Search API reference](https://s1.dev/docs/basic/search).