# RAG Web Search: Top Google Pages as Clean Markdown

> RAG web search in one call: search Google and get the top result pages as clean Markdown, text or HTML for your LLM or AI agent. No API keys needed.

URL: https://cliqtomedia.com/actors/rag-web-search/

Category: AI-ready content & documents · Status: live on Apify Store · Apify page: https://apify.com/cliqtomedia/rag-web-search?fpr=cliqto

Type a question or topic and get the top Google pages as clean text. Each page is one row with its link. It gives your model fresh web context in one step.

## How to use it: 3 steps

1. **Make a free Apify account.** Apify is the cloud platform where our tools run. The free plan gives you $5 of usage every month, no credit card needed. You pay Apify, not us.
2. **Paste your input and press Start.** No code needed: you fill in a form (the input). It already has a working example. For example: `apify actors` in Search query or URL. Each start is one run.
3. **Download the results.** When the run ends, the results are in a table (the dataset). Open Output, press Export and pick Excel or CSV. JSON and the API are there too.

## What it does

Type a search query and get the top Google result pages as clean Markdown, plain text or HTML, one Dataset row per page. It is a RAG web search tool for LLM apps and AI agents: no login and no API key, and a typical run with 3 pages takes a few seconds and costs about $0.009.

- Searches Google for your query in the country you choose.
- Takes the organic results in order. Ads and Google's own pages are skipped. URLs are the real page addresses, not Google redirect links.
- Opens each page with a normal HTTP request and keeps only the main content: no menus, footers, cookie banners or scripts.
- Saves each readable page as one row with the content in one field: `markdown`, `text` or `html`.
- Stops when it has the number of readable pages you asked for, or when the time budget ends.

### Good for

- Give an LLM or agent fresh web context for a question (retrieval-augmented generation).
- Collect the readable text of the top results for a topic before chunking and embedding.
- Read one known URL as Markdown inside the same workflow.

### Not a good fit

- No JavaScript rendering. Pages that build their text in the browser (many web apps, YouTube) come back as `empty`.
- No login, cookies or paywall bypass. Such pages come back as `login_required` or `paywall`.
- Up to 10 pages per run and English-language Google results. For more queries, start more runs.
- PDF and other files are not converted (`not_html` row).

## Price

Pay per event. Apify bills you, not us.

| What you pay for | Price | When |
|---|---|---|
| Search | $0.003 (from $0.00255 on paid Apify plans) | One answered request: a Google search (also when Google has no results) or one URL read. |
| Readable page | $0.002 (from $0.0017 on paid Apify plans) | One saved page with content (fetchStatus ok). Blocked, login, paywall and empty pages are free. |

- One result: about $0.002.
- 1,000 results: about $2.00.
- Every day 100 results, for 30 days: about $6.00 a month.

Free to try: the Apify free plan gives you $5 of usage every month, no credit card needed.

Prices checked on 24 October 2026. Current price: https://apify.com/cliqtomedia/rag-web-search?fpr=cliqto

## Questions

### Do I need a Google API key?

No. You do not need a key or a login.

### Why is a page empty?

Some sites build their text with JavaScript. This tool does not run JavaScript, so it marks them as empty.

### Does it give ads in the results?

No. Ads and Google's own pages are skipped. You get real page addresses.

### Can it read PDF results?

No. PDF and other files are not converted. They get a not_html row.

### Is the content complete and up to date?

It is the page as served at `fetchedAt`, main content only. Text that loads with JavaScript, comments and hidden blocks are not included. Some sites repeat a lead paragraph in their HTML; it then appears twice.

### Can I search in other languages?

Google results are requested in English (`hl=en`); `countryCode` changes the country. Pages in other languages are returned as they are.

## Data fields

- `query` (string): The search query (or the URL in URL mode).
- `rank` (integer): Position among Google organic results (1 = top). Ads and Google's own links are skipped.
- `url` (string): Real page URL from Google (no Google redirect wrapper, no tracking parameters).
- `title` (string): Page title, or the Google result title when the page could not be read.
- `description` (string): Google result snippet.
- `markdown` (string): Main content as Markdown when outputFormat is markdown. null on status rows.
- `text` (string): Main content as plain text when outputFormat is text. null on status rows.
- `html` (string): Cleaned main-content HTML when outputFormat is html. null on status rows.
- `wordCount` (integer): Words in the returned content (0 on status rows).
- `fetchStatus` (string): ok = content returned and charged. Other values are free status rows: blocked (anti-bot or refused), login_required, paywall, not_html (PDF, file), empty (under 50 words), timeout, error.
- `httpStatus` (integer): HTTP status of the page response.
- `error` (string): Why the page has no content. null for ok rows.
- `fetchedAt` (string): When the page was read (ISO 8601).

## Input settings

- `query` (string, required): What to search on Google, e.g. 'rag chunking strategies'. Google operators work (site:, quotes, -word). A single http(s) URL skips the search and reads only that page. Up to 500 characters.
- `maxResults` (integer): How many readable pages to return (1–10). Blocked, login, paywall and empty pages do not count: the Actor moves on to the next Google results to fill the number.
- `outputFormat` (string): Format of the page content. The Dataset field is named after it: markdown, text or html.
- `countryCode` (string): Two-letter country code for Google results (gl), e.g. us, gb, de. Results are in English.
- `timeoutSecs` (integer): The Actor stops reading pages after this many seconds and returns what it has (10–120). Slow sites are skipped as timeout rows.

## Step by step on Apify

1. Open the Input tab.
2. Keep the prefilled Search query or URL (`query`) `apify actors`, or type your own question.
3. Keep Pages to return (`maxResults`) at the prefilled 3.
4. Click Start.
5. Open the Output tab. The Results view shows rank, URL, title, word count and status; the Markdown view shows the page content.

## Use cases

| Task | Input | You get | Key fields | Next step |
|---|---|---|---|---|
| Web context for an LLM answer | `query` = the user's question, `maxResults` 3–5 | one row per page | `url`, `title`, `markdown` | pass `markdown` to the model with `url` as the source |
| Topic corpus for a vector database | `query` per topic, `maxResults` 10, `outputFormat` `text` | one row per page | `text`, `wordCount`, `url` | chunk `text`, keep `url` as metadata |
| Read one known page | `query` = a single `https://` URL | one row | `markdown`, `httpStatus`, `fetchStatus` | same as above |

## Tips

- Ask for 3 to 5 pages for a quick answer. One run gives up to 10 pages.
- Check the status of each row. Login, paywall and empty pages are marked and not charged.
- Start several runs for several queries. One run handles one search.

## Limits



- 1–10 readable pages per run; Google results from up to 2 result pages are tried.
- One page request waits up to 15 seconds; the whole run follows `timeoutSecs` (10–120).
- Page size up to 5 MB; content up to 200,000 characters.
- 256 MB memory is enough; measured runs used under 60 MB.

## Sample result

```json
{
  "query": "apify actors",
  "rank": 1,
  "url": "https://apify.com/actors",
  "title": "Automate anything with Apify Actors · Apify",
  "description": "Actors are web data automations that power your AI and operations. Run them in the cloud or locally to scrape websites, process data, or connect APIs, all ...",
  "markdown": "# Automate anything with Apify Actors\n\nActors are web data automations that power your AI and operations. …",
  "wordCount": 427,
  "fetchStatus": "ok",
  "httpStatus": 200,
  "error": null,
  "fetchedAt": "2026-10-15T04:12:15.881Z"
}
```

## Use it from code

Actor ID: `cliqtomedia/rag-web-search`

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("cliqtomedia/rag-web-search").call(run_input={
    "query": "apify actors",
    "maxResults": 3
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)
```

```bash
curl -X POST "https://api.apify.com/v2/acts/cliqtomedia~rag-web-search/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"query": "apify actors", "maxResults": 3}'
```

```python
# pip install langchain-apify
# set APIFY_TOKEN in your environment
from langchain_apify import ApifyActorsTool

tool = ApifyActorsTool("cliqtomedia/rag-web-search")
result = tool.invoke({"run_input": {"query": "apify actors", "maxResults": 3}})
print(result)
```

run-sync waits up to 300 seconds; for longer runs start a run and use a webhook. LlamaIndex and MCP: https://cliqtomedia.com/actors/ai-agents/

## Similar tools

- [PDF & Image to Text OCR for AI Agents - No Login](https://cliqtomedia.com/actors/pdf-text-ocr/)
- [Website Metadata & Open Graph Scraper](https://cliqtomedia.com/actors/website-metadata-open-graph-scraper/)
- [RSS & Atom Feed Reader / Monitor](https://cliqtomedia.com/actors/rss-atom-feed-reader-monitor/)
- [WordPress Posts & Pages Scraper](https://cliqtomedia.com/actors/wordpress-posts-pages-scraper/)
- [News Article Extractor: RSS, URLs & Clean Text](https://cliqtomedia.com/actors/news-article-extractor/)
- [Website Screenshot & PDF Generator: Full Page & Mobile](https://cliqtomedia.com/actors/website-screenshot-pdf/)
