URL Metadata API
Unfurl any URL.
Get metadata instantly.
One API call returns title, description, OG image, favicon, canonical URL, word count, and detected tech stack. Works on any public URL. No headless browser, no JavaScript rendering. Just fast, clean JSON.
100 free requests on signup. No credit card required.
Live demo
// Response will appear here // Try: https://vercel.com or https://github.com
Response fields
Open Graph
- og.title
- og.description
- og.image
- og.type
- og.siteName
- og.url
Twitter Cards
- twitter.card
- twitter.title
- twitter.description
- twitter.image
- twitter.creator
Page info
- title
- description
- canonical
- favicon
- wordCount
- meta.author
Tech stack
- Next.js
- WordPress
- Shopify
- Vercel
- Cloudflare
- 20+ more...
Meta tags
- meta.keywords
- meta.robots
- meta.themeColor
Request info
- statusCode
- responseTime
- fetchedAt
- url (resolved)
How it works
01
Plain HTTP fetch
We request the URL with a standard HTTP client and parse the raw HTML. No headless browser, no Playwright, no Puppeteer. Fast and predictable.
02
Full metadata extraction
We extract all Open Graph tags, Twitter card tags, favicons, canonical URLs, word count, and detect which framework or CMS the site is using.
03
Clean JSON back to you
Consistent response schema every time. Null fields for missing data, not missing keys. Resolved absolute URLs for images and favicons.
Sample response
{
"url": "https://github.com",
"title": "GitHub: Let's build from here",
"description": "GitHub is where over 100 million developers shape the future of software.",
"favicon": "https://github.com/favicon.ico",
"og": {
"title": "GitHub: Let's build from here",
"image": "https://github.githubassets.com/images/modules/site/social-cards/homepage.png",
"type": "website"
},
"wordCount": 842,
"techStack": ["React", "Cloudflare"],
"responseTime": 187,
"fetchedAt": "2025-06-17T14:23:01.000Z"
}Code examples
cURL
curl -G https://ogfetch.dev/v1/fetch \ -H "X-Api-Key: ogf_your_key" \ --data-urlencode "url=https://github.com"
JavaScript
const res = await fetch(
'https://ogfetch.dev/v1/fetch?url=' +
encodeURIComponent('https://github.com'),
{ headers: { 'X-Api-Key': 'ogf_your_key' } }
);
const data = await res.json();
console.log(data.title, data.og.image);Python
import requests
r = requests.get(
"https://ogfetch.dev/v1/fetch",
headers={"X-Api-Key": "ogf_your_key"},
params={"url": "https://github.com"},
)
print(r.json()["title"])Pricing
Buy credits once, use them when you need them. Credits never expire.
| Free | Starter | Pro | Business | |
|---|---|---|---|---|
| Price | $0 | $3 | $10 | $20 |
| Credits | 100 / month | 1,000 | 5,000 | 15,000 |
| Expiry | Resets monthly | Never | Never | Never |
| Rate limit | 10 / min | 60 / min | 60 / min | 120 / min |
| Cost / request | free | $0.003 | $0.002 | $0.0013 |
FAQ
Does it handle JavaScript-rendered content?
No. We do a plain HTTP fetch and parse the returned HTML. Sites that load metadata via JavaScript after the page loads will not have that data in the response. For the vast majority of URLs (blogs, e-commerce, news sites, GitHub, etc.) the metadata is in the static HTML and this works perfectly.
What counts as a credit?
One successful response (HTTP 2xx from your target URL) consumes one credit. Requests that fail due to network errors, invalid URLs, or server errors on the target site do not consume credits.
How long do credits last?
Paid credit packs never expire. The free 100 credits reset monthly.
Can I try it without signing up?
Yes. The live demo above lets you test up to 8 URLs per hour without an account.
What happens if a site blocks bots?
We request pages with a real User-Agent string and handle redirects. Some sites will still block or return partial content. In that case the response will contain whatever metadata was in the blocked/redirected page.