Favicon analysis and download

The favicon checker is available as a JSON API. Give it the URL of a page: it returns every icon the page declares (plus the default locations), the web manifest, and a list of pass / warning / error checks. Icons under 300 KB come with a data: URI so you can download them straight from the response.

Request

GET https://easyfavicongenerator.com/api/check.php?url=https://example.com/
  • url (required): the page to analyze. The scheme is optional (https:// is assumed, then http://).
  • CORS is enabled: you can call it from a browser, from any origin.
  • Fair use: 20 requests per minute per IP address (HTTP 429 beyond).
curl "https://easyfavicongenerator.com/api/check.php?url=github.com"

# JavaScript
const r = await fetch('https://easyfavicongenerator.com/api/check.php?url=' + encodeURIComponent('github.com'));
const report = await r.json();
console.log(report.summary, report.icons.map(i => i.href));

Response

{
  "inputUrl": "https://github.com",
  "finalUrl": "https://github.com",
  "status": 200,
  "title": "GitHub ...",
  "icons": [
    {
      "kind": "icon",            // icon | apple | manifest | mask | tile
      "rel": "icon",
      "source": "html",          // html | default | manifest | browserconfig
      "href": "https://.../favicon.svg",
      "declared": "/favicons/favicon.svg",
      "sizes": "", "type": "image/svg+xml",
      "status": 200, "contentType": "image/svg+xml",
      "format": "svg",           // png | ico | svg | jpeg | gif | webp
      "width": 32, "height": 32, "sizesFound": [],   // ICO files list all their sizes
      "bytes": 959, "alpha": null,
      "preview": "data:image/svg+xml;base64,...",
      "error": null
    }
  ],
  "manifest": { "href": "...", "status": 200, "valid": true, "json": { "name": "...", ... } },
  "browserconfig": null,
  "themeColors": [ { "color": "#1e2327", "media": "" } ],
  "meta": { "apple-mobile-web-app-title": "..." },
  "checks": [
    { "level": "ok", "id": "svg", "section": "desktop", "title": "SVG favicon found", "message": "..." }
  ],
  "summary": { "ok": 10, "warning": 3, "error": 0, "info": 3 },
  "ms": 1830
}

Check levels

  • ok: requirement satisfied.
  • warning: works, but something should be improved.
  • error: something is broken (missing file, HTTP error, invalid manifest).
  • info: optional recommendation.

The section of a check is one of page, desktop, google, ios, android, windows, safari.

The google check follows Google Search’s current favicon guidance (docs updated 2026-10-27): a square raster icon of at least 48×48 pixels in a supported format (BMP, GIF, ICO, PNG, JPEG, …). SVG does not count, and the size does not need to be a multiple of 48. Safari 26+ uses SVG favicons in tabs, but Google Search still needs a separate raster.

Errors

Errors are returned as { "error": "message" } with an HTTP status: 400 for an invalid or forbidden URL, 429 when rate limited, 500 for an unexpected failure. A page which cannot be fetched is not an HTTP error: it is a regular report with an error level check.

Security and limits

  • Only http and https, on ports 80, 443, 8080 and 8443; no credentials in URLs.
  • Private, loopback, link-local and reserved addresses (IPv4 and IPv6) are refused, including after DNS resolution and on every redirect.
  • 5 redirects at most; page limited to 1.5 MB, each icon to 1 MB; 8 to 12 second timeouts.

Using it in CI

curl -s "https://easyfavicongenerator.com/api/check.php?url=https://your-site.com" | jq -e '.summary.error == 0'

The command exits with a non-zero status when the checker finds an error. Combine it with the MCP server to let an agent fix what it finds.