Check any URL's Open Graph tags programmatically. Free, no authentication required.
| Parameter | Type | Required | Description |
|---|---|---|---|
| url | string | Yes | The URL to check. Must be publicly accessible. |
| Field | Type | Description |
|---|---|---|
| url | string | The fetched URL (after redirects) |
| title | string? | og:title or <title> fallback |
| description | string? | og:description or meta description fallback |
| image | string? | og:image URL |
| imageWidth | number? | og:image:width |
| imageHeight | number? | og:image:height |
| siteName | string? | og:site_name |
| type | string? | og:type (website, article, etc.) |
| twitterCard | string? | twitter:card value |
| twitterImage | string? | twitter:image URL |
| favicon | string? | Resolved favicon URL |
| score | number | Quality score 0-100 |
| issues | array | Validation issues with severity, tag, message, suggestion |
| allTags | array | All meta tags found (property, name, content) |
JavaScript / TypeScript
const res = await fetch(
"https://unfurli.com/api/v1/og?url=https://example.com"
);
const data = await res.json();
console.log(data.title); // "Example Domain"
console.log(data.score); // 85
console.log(data.issues); // [{ severity: "warning", ... }]cURL
curl "https://unfurli.com/api/v1/og?url=https://example.com"
Python
import requests
r = requests.get(
"https://unfurli.com/api/v1/og",
params={"url": "https://example.com"}
)
data = r.json()
print(data["title"]) # "Example Domain"
print(data["score"]) # 85The API allows 10 requests per hour per IP address. Responses are cached for 5 minutes.
| Header | Description |
|---|---|
| X-RateLimit-Limit | Max requests per window (10) |
| X-RateLimit-Remaining | Requests remaining in current window |
| X-Cache | HIT or MISS — whether the response was served from cache |
| Retry-After | Seconds to wait when rate limited (429 response) |
Missing or invalid URL parameter, or the target URL could not be reached.
{ "error": "Could not reach the URL." }You've exceeded 10 requests per hour. Wait for the Retry-After period.
{ "error": "Rate limit exceeded.", "resetAt": "2026-03-30T12:00:00Z" }Check OG tags on every deploy. Fail the build if the score drops below your threshold.
Build internal tools that show how shared links will appear across platforms.
Scan client sites programmatically and generate OG health reports.
Validate OG tags before publishing blog posts or product pages.