Resources
2Install
npx skillscat add romainjeff/linkup-skill/web-fetch-linkup Install via the SkillsCat registry.
Web Fetch with Linkup
Fetch clean web content via the Linkup API using a standalone Python script.
Prerequisites
A .env file in the skill directory (.claude/skills/web-fetch-linkup/.env) with:
LINKUP_API_KEY=your_api_key_hereSee .env.example for the template.
Workflow
Step 1: Collect the URL
Get the URL from the user via AskUserQuestion or directly if provided in the request.
Step 2: Fetch the content
Run the script using Bash:
python3 .claude/skills/web-fetch-linkup/fetch.py "<URL>"Options:
| Flag | Effect |
|---|---|
--no-render-js |
Disable JavaScript rendering (default: enabled) |
--extract-images |
Include image URLs in output |
--include-raw-html |
Include raw HTML in output |
Examples:
# Standard fetch (JS rendering enabled)
python3 .claude/skills/web-fetch-linkup/fetch.py "https://example.com/article"
# Static page, faster
python3 .claude/skills/web-fetch-linkup/fetch.py "https://example.com" --no-render-js
# With images
python3 .claude/skills/web-fetch-linkup/fetch.py "https://example.com" --extract-imagesStep 3: Parse the response
The script outputs JSON on stdout with:
url— The fetched URLmarkdown— The extracted content in Markdown formatimages— (only with--extract-images) List of image URLsrawHtml— (only with--include-raw-html) Raw HTML source
Step 4: Save the content
Create a file in fetched-content/ with the format:
Filename: {domain}-{YYYYMMDD-HHmmss}.md
Structure:
---
source: <URL>
fetched_at: <ISO timestamp>
---
# <Title inferred from content>
<Extracted markdown content>Step 5: Confirm
Inform the user of the created file path.
Exit codes
| Code | Meaning |
|---|---|
| 0 | Success |
| 1 | .env missing or LINKUP_API_KEY not set |
| 3 | 401 — Invalid or expired API key |
| 4 | 429 — Rate limit exceeded |
| 5 | Other HTTP error |
| 6 | Network error (DNS, timeout, etc.) |
Error handling
| Error | Action |
|---|---|
| Exit 1 | Check .claude/skills/web-fetch-linkup/.env exists with LINKUP_API_KEY |
| Exit 3 | API key is invalid or expired — get a new one at https://app.linkup.so |
| Exit 4 | Rate limit — wait before retrying |
| Exit 5 | Check stderr for HTTP status details |
| Exit 6 | Network issue — retry with --no-render-js if timeout |
Usage examples
Fetch an article:
"Fetch the content of https://example.com/article"
Fetch documentation:
"Use linkup to scrape https://docs.example.com/api"
Dynamic page:
"Extract content from this React page: https://app.example.com/dashboard"