API

Pull the latest site-quality score, grade and category breakdown for any domain. Read-only, free, and open to anyone — generate a key below. Built for AI agents, gamified dashboards and SEO tools.

1. Generate your key

Enter your project name and email. Your key is shown once below and emailed to you — it's never sent over chat or social.

Your API key (save it now):

2. Use it

GET https://whydoesmysitesuck.com/api/public/domain/{domain}
Header: X-API-Key: YOUR_KEY

# example
curl -H "X-API-Key: YOUR_KEY" \
  https://whydoesmysitesuck.com/api/public/domain/example.com

Response

{
  "domain": "example.com",
  "score": 84,
  "grade": "B",
  "scanned_at": "2026-06-02 19:11:45",
  "categories": [{"category": "Security", "score": 95}, ...],
  "report_url": "https://whydoesmysitesuck.com/scan/<id>"
}

Pass a bare domain (example.com), not a full URL.

First-time domains

If we have no scan on record for a domain, we start one automatically and return 202 instead of 404 — just poll the same URL again in ~30 seconds to get the score:

{
  "domain": "example.com",
  "status": "scanning",
  "scan_id": "<id>",
  "retry_after": 30
}

A scan that's older than 30 days is still returned immediately (with "stale": true) while a fresh one runs in the background, so your next poll picks up newer data.

Rate limits

Free keys may start 3 new scans per minute and make 60 requests per minute. Cached lookups always work even when you are out of scan budget — running out costs you the right to trigger a crawl, not access to scores we already hold. Over the limit you get 429 with Retry-After: 60.

Building something that needs more? Email us and we'll lift the cap.

Machine-readable spec

OpenAPI 3.1: /openapi.json