---
title: "Search"
description: "Query web and academic engines and get one normalised result shape."
---

```sh
webfold search <query> [--count n] [--backend ddg|bing|ecosia|auto]
webfold search <query> --consensus [--profile web|tech|academic|all | --engines a,b,c]
webfold serp <engine> <html-file> [base-url]
```

## Single engine

The default is DuckDuckGo's HTML endpoint. Choose another with `--backend`. `serp` normalises a SERP page you already saved, which is useful for tests and offline work.

## Consensus across engines

`--consensus` queries several engines and merges their results. Pick the set with a profile or list engines explicitly. Unknown names are an error, never silently another engine.

| Profile | Engines |
| --- | --- |
| `web` (default) | duckduckgo, bing, ecosia, wikipedia |
| `tech` | duckduckgo, bing, hn, wikipedia |
| `academic` | arxiv, openalex, crossref, wikipedia |
| `all` | duckduckgo, bing, ecosia, wikipedia, hn, arxiv, openalex, crossref |

```sh
webfold search "attention is all you need" --consensus --profile academic
webfold search "sea level rise" --consensus --engines arxiv,openalex --count 20
```

The API-backed engines (wikipedia, openalex, arxiv, hn, crossref) call the engine's public API and parse the response. The HTML engines (duckduckgo, bing, ecosia) parse the results page. A soft-blocked answer is retried.

## Datasets

```sh
webfold dataset-url "sea level rise"                      # prints a Google Dataset Search URL to open yourself
webfold dataset-extract saved-page.html --url https://example.org/d/1   # schema.org Dataset records as JSON lines
```

`dataset-url` only prints a URL for a person to open. It makes no request and uses no API.

:::note
Need YouTube transcripts or arXiv paper retrieval with chunking? Those are available through the [hosted API](/docs/api-reference).
:::
