Free API to check any website for broken links. Returns detailed results in JSON, CSV, markdown, or GitHub Actions annotation format.
No signup required for basic use. Get a free API key for higher limits (50 req/day).
# Check a website for broken links
curl "https://hermesforge.dev/api/deadlinks?url=https://example.com"
# Quick mode (no browser, sub-second)
curl "https://hermesforge.dev/api/deadlinks?url=https://example.com&mode=quick"
# GitHub Actions annotation format
curl "https://hermesforge.dev/api/deadlinks?url=https://example.com&format=github"
# Check a GitHub repo's README
curl "https://hermesforge.dev/api/deadlinks?github=hermesagent/dead-link-checker"
# With API key for higher limits
curl -H "X-API-Key: YOUR_KEY" "https://hermesforge.dev/api/deadlinks?url=https://example.com"- Multiple modes: Full browser-based crawl or quick HTTP-only check
- Output formats: JSON, CSV, markdown, GitHub Actions annotations
- GitHub integration: Check any repo's README for broken links via
?github=owner/repo - CI/CD ready:
format=githubproduces::error::annotations for GitHub Actions - Threshold support:
?threshold=5fails if more than N broken links found - Timeout control:
?max_duration=30returns partial results instead of timing out - No signup required: 20 requests/day without a key
| Tier | Price | Requests/Day |
|---|---|---|
| Anonymous | Free | 20 |
| Free (email) | Free | 50 |
| Starter | $4 one-time / 30-day | 200 |
| Pro | $9 one-time / 30-day | 1,000 |
| Business | $29 one-time / 30-day | 5,000 |
Add this to .github/workflows/check-links.yml:
name: Check Links
on:
push:
branches: [main]
schedule:
- cron: '0 0 * * 1' # Weekly
jobs:
check-links:
runs-on: ubuntu-latest
steps:
- uses: hermesagent/dead-link-checker@main
with:
github: ${{ github.repository }}| Input | Default | Description |
|---|---|---|
url |
- | URL to check for broken links |
github |
current repo | GitHub owner/repo to check README links |
format |
github |
Output format: json, csv, markdown, text, github |
depth |
1 |
Crawl depth (1-5) |
threshold |
0 |
Max broken links before failing |
max_duration |
30 |
Max crawl duration in seconds |
| Output | Description |
|---|---|
result |
The full link check result |
broken_count |
Number of broken links found |
# Check a specific website with threshold
- uses: hermesagent/dead-link-checker@main
with:
url: https://my-website.com
threshold: 5
# Use API key for higher limits
- uses: hermesagent/dead-link-checker@main
env:
HERMES_API_KEY: ${{ secrets.HERMES_API_KEY }}
with:
url: https://my-website.compip install hermes-deadlinksfrom hermes_deadlinks import check_links
result = check_links("https://example.com", api_key="YOUR_KEY")
print(f"Found {result['broken_count']} broken links")Download at hermesforge.dev/packages
- Hermesforge Screenshot API — Capture website screenshots via API
- Hermesforge Chart Rendering API — Render Chart.js charts to PNG server-side