Skip to content
Eden Engine

Website Font Detector (by Domain or URL)

omnial/web-fonts

Given a domain or a direct page URL, detects which fonts a live web page uses, the HTML tags each one is applied to, roughly how much of the page's elements and words render in it, and any declared CSS fallback fonts. Useful for checking a site's own typography or seeing what a competitor's page uses.

activeper callv1
Provider
Web & Business Data Network
Category
web-extraction
Provider price
$0.0061425 per call
Latency p50 / p95
— / —
Success rate
—
Verified
—

Provider list price; Omnial MCP charges provider cost plus a platform markup on top.

Contract

input_schema.json
{
  "type": "object",
  "anyOf": [
    {
      "required": [
        "domain"
      ]
    },
    {
      "required": [
        "directUrl"
      ]
    }
  ],
  "properties": {
    "domain": {
      "type": "string",
      "minLength": 3,
      "description": "Domain to detect fonts on, e.g. 'example.com'. Mutually exclusive with directUrl."
    },
    "maxAgeMs": {
      "type": "integer",
      "default": 7776000000,
      "maximum": 9007199254740991,
      "minimum": 0,
      "description": "Maximum age in milliseconds of cached results before the upstream provider hard-refreshes it. Default 7776000000 (3 months); values are clamped to [86400000 (1 day), 31536000000 (1 year)]."
    },
    "directUrl": {
      "type": "string",
      "format": "uri",
      "description": "Exact URL to use, bypassing domain resolution (e.g. 'https://example.com/pricing'). Mutually exclusive with domain."
    },
    "timeoutMS": {
      "type": "integer",
      "maximum": 300000,
      "minimum": 1000,
      "description": "Upstream timeout in milliseconds (max 300000). The upstream provider aborts the call with a 408 when exceeded. Keep it below the endpoint's requestTimeoutMs so the provider answers before the platform's own budget expires."
    }
  },
  "additionalProperties": false
}
output_schema.json
{
  "type": "object",
  "properties": {
    "fonts": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "font": {
            "type": "string",
            "description": "The font family name as it appears in the page's CSS, e.g. \"sohne-var\", or a generic keyword like \"system-ui\" when the page declares no custom font."
          },
          "uses": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Lowercase HTML tag names this font is applied to, e.g. \"body\", \"h1\", \"button\"."
          },
          "fallbacks": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "The CSS fallback font stack declared alongside this font, e.g. \"sans-serif\"."
          },
          "num_words": {
            "type": "number",
            "description": "Count of words rendered in this font."
          },
          "num_elements": {
            "type": "number",
            "description": "Count of DOM elements rendered in this font."
          },
          "percent_words": {
            "type": "number",
            "description": "Share of all detected words that use this font, 0-100."
          },
          "percent_elements": {
            "type": "number",
            "description": "Share of all detected elements that use this font, 0-100."
          }
        },
        "additionalProperties": true
      },
      "description": "One entry per distinct font detected in use on the page."
    },
    "domain": {
      "type": "string",
      "description": "The domain that was actually analyzed -- echoes the input `domain`, or the domain resolved from `directUrl` when that was supplied instead."
    },
    "status": {
      "type": "string",
      "description": "Observed as \"ok\" on every real call."
    },
    "finalDOMState": {
      "type": "string",
      "description": "Observed as \"loaded\" on every real call -- whether the page finished rendering before fonts were detected."
    },
    "cache_metadata": {
      "type": "object",
      "properties": {
        "age_ms": {
          "type": "number",
          "description": "Age of the cached result in milliseconds."
        },
        "status": {
          "type": "string",
          "description": "Observed value: \"hit\" (served from cache) on both real calls captured. A fresh-fetch value is unconfirmed."
        }
      },
      "description": "Whether this result was served from cache or freshly fetched.",
      "additionalProperties": true
    }
  },
  "description": "The font-detection record, as returned at the result path.",
  "additionalProperties": true
}

Pricing

Every real charge, itemised. A model that quietly omits one is a slow financial leak, so nothing here is rolled up, and a charge that only applies to some inputs says so rather than being added in.

Prices in this catalog are the provider's own list price, not your bill: Omnial MCP charges provider cost plus a platform markup on top, so what you are charged is higher than the figure shown. For the exact amount a specific call will cost, run omnial_execute with dry_run: true; that number includes the markup and is what we hold while the call runs. It is a quote, not a cap on the charge.

ChargeRate
Per call
Flat, regardless of what comes back
$0.0061425
Cost basis
Not recorded

This tool's catalog entry does not record how its final bill is determined, so we will not tell you whether its cost is fixed before the call or reported by the provider afterwards. Either way what is held is a quote rather than a cap: you are charged what the call actually costs, bounded at 2x the quote.

Updated
Sep 23, 2026