
Website Content Crawler
scrape.ly/store/querystone/website-content-crawlerAIDeveloper tools
1 monthly user

Generate a spec-compliant llms.txt and llms-full.txt for any website: finds pages through the sitemap and navigation, extracts titles, descriptions and clean Markdown, groups them into sections and saves ready-to-upload files with download links.
Create a spec-compliant llms.txt and llms-full.txt for any website in one run. The generator finds your key pages through the sitemap and navigation, writes a clean title and note for each one, groups them into sections and saves ready-to-upload files with download links. No login, no API keys, no code.
## Sections with - [Title](url): note link lists, plus an ## Optional section for secondary pages./llms.txt so ChatGPT, Perplexity, Gemini and other AI assistants understand your site and cite the right pages./docs/).https://example.com).llms.txt and llms-full.txt from the links in the Generated files view (or the Output tab) and upload them to your site root, e.g. https://example.com/llms.txt.| Field | Default | What it does |
|---|---|---|
startUrls | (required) | Websites to generate files for, one per line. |
maxPagesPerSite | 30 | Pages read (and charged) per site. |
includeFullText | true | Also write llms-full.txt with the Markdown content of every page. |
siteName / siteSummary / siteDetails | auto | Override the H1, the blockquote summary, or add a details paragraph. |
useSitemap / crawlLinks | true | Find pages through the XML sitemap and internal links. |
includeUrlPatterns / excludeUrlPatterns | empty | Text or regex filters, e.g. /docs/ or /legal/. |
respectRobotsTxt | true | Skip pages that robots.txt disallows. |
includeNoindexPages | false | Pages marked noindex are left out by default. |
{
"startUrls": ["https://crawlee.dev/"],
"maxPagesPerSite": 30,
"includeFullText": true
}
Files (key-value store): llms-<domain>.txt and llms-full-<domain>.txt for every site, plus llms.txt and llms-full.txt when you generate a single site.
Example llms.txt (trimmed):
# Crawlee
> Crawlee helps you build and maintain your crawlers. It's open source, but built by developers who scrape millions of pages every day for a living.
## JavaScript: API
- [Crawlee for JavaScript](https://crawlee.dev/js/api)
- [@crawlee/basic](https://crawlee.dev/js/api/basic-crawler)
- [@crawlee/browser](https://crawlee.dev/js/api/browser-crawler)
## JavaScript: Docs
- [Deployment guides](https://crawlee.dev/js/docs/deployment): Here you can find guides on how to deploy your crawlers to various cloud providers.
- [Examples](https://crawlee.dev/js/docs/examples)
- [Experiments](https://crawlee.dev/js/docs/experiments)
## JavaScript
- [Crawlee for JavaScript](https://crawlee.dev/js)
Dataset: one site row per website and one page row per page.
| Field | Meaning |
|---|---|
type | site or page |
siteName, summary | H1 and blockquote used in llms.txt |
llmsTxtUrl, llmsFullTxtUrl | Direct download links to the files |
llmsTxt | The full llms.txt text |
sections | Section names with page counts |
existingLlmsTxt | Link to the site's current /llms.txt, if it already has one |
url, title, description, section | Each page as listed in llms.txt |
wordCount | Words of main content (what goes into llms-full.txt) |
Example site row (trimmed):
{
"type": "site",
"site": "crawlee.dev",
"status": "ok",
"siteName": "Crawlee",
"summary": "Crawlee helps you build and maintain your crawlers. It's open source, but built by developers who scrape millions of pages every day for a living.",
"pageCount": 30,
"sectionCount": 7,
"sections": [
{
"name": "JavaScript: API",
"pageCount": 6,
"optional": false
},
{
"name": "JavaScript: Docs",
"pageCount": 5,
"optional": false
},
{
"name": "JavaScript",
"pageCount": 1,
"optional": false
}
],
"llmsTxtUrl": "https://api.scrape.ly/v2/key-value-stores/<store>/records/llms-crawlee.dev.txt?signature=...",
"llmsFullTxtUrl": "https://api.scrape.ly/v2/key-value-stores/<store>/records/llms-full-crawlee.dev.txt?signature=...",
"llmsTxtBytes": 4394,
"llmsFullTxtBytes": 304676,
"existingLlmsTxt": "https://crawlee.dev/llms.txt"
}
Example page row:
{
"type": "page",
"site": "crawlee.dev",
"url": "https://crawlee.dev/js/api/browser-crawler",
"title": "@crawlee/browser | API",
"description": null,
"descriptionSource": null,
"section": "JavaScript: API",
"optional": false,
"wordCount": 525,
"lang": "en",
"foundVia": "sitemap",
"depth": 1
}
What is llms.txt? A proposed standard (llmstxt.org): a Markdown file at /llms.txt that tells AI assistants what a site is about and links its most useful pages. llms-full.txt contains the full text of those pages.
Is it legal? The generator reads public pages like a search engine does and respects robots.txt by default. Use it for sites you own or manage.
Do I need a login or proxy? No. Datacenter proxies are used by default and blocked pages are retried once over a residential proxy.
How are sections chosen? From the URL structure (/docs/, /blog/...), named after your navigation labels when they match, with big sections split one level deeper. Legal, careers, contact and similar pages go to ## Optional.
Can I edit the result? Yes. The files are plain Markdown: tweak them before uploading, or set the site name, summary and details in the input.
Can I schedule it or use the API? Yes. Run it weekly so your llms.txt follows new pages, or start runs and download the files through the API.
Every field below can be set in the run form, passed through the API, or saved as a task. Unset fields fall back to the defaults shown.
startUrlsarrayRequiredWebsites
One website per line (home page URL such as https://example.com). Each site gets its own llms.txt and llms-full.txt. A missing https:// is added automatically.
maxPagesPerSiteintegerOptionaldefault 30Max pages per site
How many pages are read (and charged) per site. Pages are picked across all sections of the site (docs, blog, products...), shallow pages first. Up to 5,000, because every page of a site is kept in memory until its llms.txt is built.
includeFullTextbooleanOptionaldefault trueAlso create llms-full.txt
Write llms-full.txt with the main content of every page as clean Markdown (navigation, footers and ads removed). Up to 8 MB per site.
Override what goes at the top of llms.txt.
siteNamestringOptionalSite name (H1)
Optional. The H1 title of llms.txt. Detected from the home page when empty. Best used with a single website.
siteSummarystringOptionalSummary (blockquote)
Optional. The one-paragraph summary under the title. Taken from the home page meta description when empty.
siteDetailsstringOptionalExtra details
Optional Markdown paragraph(s) placed after the summary, e.g. how to use the documentation or key facts.
How pages are found.
useSitemapbooleanOptionaldefault trueUse the sitemap
Find pages through the site's XML sitemap (robots.txt and the usual locations).
crawlLinksbooleanOptionaldefault trueFollow links
Also follow internal links from the home page and the pages read (needed for sites without a sitemap).
maxDepthintegerOptionaldefault 5Max link depth
How many clicks away from the home page links are followed.
includeUrlPatternsarrayOptionalOnly URLs matching
Only include URLs that contain one of these texts or regular expressions, e.g. /docs/ for a documentation-only llms.txt.
excludeUrlPatternsarrayOptionalSkip URLs matching
Leave out URLs that contain one of these texts or regular expressions, e.g. /tag/ or /legal/.
respectRobotsTxtbooleanOptionaldefault trueRespect robots.txt
Skip pages that robots.txt disallows.
includeNoindexPagesbooleanOptionaldefault falseInclude noindex pages
Pages marked noindex are left out by default.
includeSubdomainsbooleanOptionaldefault falseInclude subdomains
Also read pages on subdomains such as docs.example.com.
Speed and timeouts.
maxConcurrencyintegerOptionaldefault 8Parallel requests per site
How many pages of one site are downloaded at the same time.
requestTimeoutSecsintegerOptionaldefault 20Request timeout (seconds)
Give up on a page after this many seconds.
proxyConfigurationobjectOptionaldefault {"useScrapelyProxy":true,"scrapelyProxyGroups":["DATACENTER…Proxy configuration
Datacenter proxies work for most sites; blocked pages are retried once over a residential proxy automatically.
Every run writes its results to a dataset. Preview it in the dashboard, then export it or read it through the API.
| Field | Type | Description |
|---|---|---|
| type | string | site or page |
| site | string | null | |
| url | string | null | |
| title | string | null | |
| description | string | null | |
| section | string | null | |
| wordCount | number | null | |
| siteName | string | null | |
| summary | string | null | |
| pageCount | number | null | |
| llmsTxtUrl | string | null | |
| llmsFullTxtUrl | string | null | |
| llmsTxt | string | null | |
| status | string | null | |
| error | string | null |
You pay for the events the actor reports, such as each result or page it produces. Platform usage is included in the event prices.
| Event | Charged when | Price |
|---|---|---|
| Processed page | One page read, cleaned and added to llms.txt / llms-full.txt (failed, duplicate and noindex pages are free). | $0.003 |
| Generated site | llms.txt (and llms-full.txt) generated and saved for one website. Sites that cannot be reached are free. | $0.01 |
Run this actor from your own code. Swap in your API token and the examples work as-is.
import { ScrapelyClient } from 'scrapely-client'
const client = new ScrapelyClient({ token: process.env.SCRAPELY_TOKEN })
// Start the actor and wait for the run to finish.
const run = await client.actor('querystone/llms-txt-generator').call({
"startUrls": [
"https://crawlee.dev/"
],
"maxPagesPerSite": 30,
"proxyConfiguration": {
"useScrapelyProxy": true,
"scrapelyProxyGroups": [
"DATACENTER"
]
}
})
// Read the dataset the run produced.
const { items } = await client.dataset(run.defaultDatasetId).listItems()
console.log(items)Tokens live in your account settings. Keep them server-side: a token carries the full permissions of your account.
Connect the Scrape.ly MCP server once and your agent can run this actor as a tool. Pick your tool:
Fetch scrape.ly/agents.md and run querystone/llms-txt-generatorPaste into Claude Code, Codex, Cursor or any AI agent. It signs you in once in the browser.
{
"mcpServers": {
"scrapely": {
"url": "https://api.scrape.ly/mcp?tools=actors,runs,storage,docs&actors=querystone/llms-txt-generator"
}
}
}No key in the file: your client opens the browser to sign you in the first time it connects.
Inputs the developer prepared for common jobs. Open one to see its input, then copy it to your account to run it as-is or adjust it.
Docs-only llms.txt with a custom site name and summary.
A link index file without full page text.
Builds the file by crawling links two levels deep.
Scrape.ly gives you the infrastructure, the tooling, and the team to extract, process, and operationalize web data at any scale. Setup takes minutes. The advantage lasts forever.