Fetch any URL as clean, AI-ready Markdown with token counts and caching. Strip ads, nav, scripts, and noise from web pages.
Convert any URL to clean Markdown optimized for LLM consumption. Strips ads, navigation, scripts, and noise. Returns token counts so you know exactly how much context you're using.
Use StripFeed whenever you need to read a web page, article, documentation, or any URL content. It produces much cleaner output than raw HTML fetching and tells you the token cost.
All requests require the STRIPFEED_API_KEY environment variable. Pass it as a Bearer token:
Authorization: Bearer $STRIPFEED_API_KEY
Get a free API key at https://www.stripfeed.dev (200 requests/month, no credit card).
curl -s "https://www.stripfeed.dev/api/v1/fetch?url=URL_HERE" \
-H "Authorization: Bearer $STRIPFEED_API_KEY"
This returns clean Markdown directly as the response body (Content-Type: text/markdown).
| Parameter | Required | Description |
|---|---|---|
url | Yes | The URL to fetch (must be http or https) |
format | No | Output format: markdown (default), json, text, html. Pro only except markdown. |
selector | No | CSS selector to extract specific content (e.g. article, .content, #main). Pro only. |
cache | No | Set to false to bypass cache and force a fresh fetch |
ttl | No | Cache TTL in seconds (default: 3600, max: 86400 for Pro) |
max_tokens | No | Truncate output to fit within this token budget |
model | No | AI model ID for cost tracking (e.g. claude-sonnet-4-6, gpt-4o) |
When you need metadata alongside the content, use format=json:
curl -s "https://www.stripfeed.dev/api/v1/fetch?url=URL_HERE&format=json" \
-H "Authorization: Bearer $STRIPFEED_API_KEY"
JSON response includes:
{
"markdown": "# Page Title\n\nClean content...",
"url": "https://example.com",
"title": "Page Title",
"tokens": 1250,
"originalTokens": 15000,
"savingsPercent": 91.7,
"cached": false,
"fetchMs": 430,
"format": "json",
"truncated": false,
"selector": null,
"model": null
}
Every response includes these headers:
X-StripFeed-Tokens - Token count of the stripped contentX-StripFeed-Original-Tokens - Token count of the raw HTML (before stripping)X-StripFeed-Savings-Percent - Percentage of tokens savedX-StripFeed-Cache - HIT or MISSX-StripFeed-Fetch-Ms - Time to fetch the URL (0 if cached)X-StripFeed-Format - Output format usedFetch up to 10 URLs in a single request:
curl -s -X POST "https://www.stripfeed.dev/api/v1/batch" \
-H "Authorization: Bearer $STRIPFEED_API_KEY" \
-H "Content-Type: application/json" \
-d '{"urls": ["https://example.com", "https://example.org"]}'
URLs can also include selectors:
{
"urls": [
{ "url": "https://example.com", "selector": "article" },
{ "url": "https://example.org" }
],
"model": "claude-sonnet-4-6"
}
Batch response:
{
"results": [
{ "url": "...", "markdown": "...", "tokens": 1250, "status": 200 },
{ "url": "...", "error": "Failed to fetch", "status": 502 }
],
"total": 2,
"success": 1,
"failed": 1
}
Individual URL errors don't break the batch. Check each result's status field.
| Status | Meaning |
|---|---|
| 401 | Missing or invalid API key |
| 403 | Feature requires Pro plan |
| 422 | Invalid URL, format, or parameter |
| 429 | Rate limit or monthly quota exceeded |
| 502 | Target URL unreachable or returned error |
| 504 | Target URL timed out (9s limit) |
markdown which returns raw text. Use format=json when you need token counts and metadata in the response body.cache=false for real-time content.max_tokens parameter is useful to fit content within your context window budget.selector to grab only the main content (e.g. selector=article or selector=.post-content) and skip sidebars/footers.