URL Metadata API — OpenGraph, Twitter Card, JSON-LD, canonical
Pricing
from $0.80 / 1,000 url processeds
URL Metadata API — OpenGraph, Twitter Card, JSON-LD, canonical
Turn any list of URLs into structured page metadata JSON: title, description, canonical, OpenGraph, Twitter Card, JSON-LD types, favicon, language. HTTP-only, no login, no personal data. Pay per URL.
Pricing
from $0.80 / 1,000 url processeds
Rating
0.0
(0)
Developer
Alex Lin
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
12 hours ago
Last modified
Categories
Share
Turn any list of URLs into structured page metadata: title, description, canonical URL, OpenGraph, Twitter
Card, JSON-LD @types, favicon, and language — one JSON item per URL, no browser required. Built for link
previews, content pipelines, SEO audits, and AI agents that need a plain get_page_metadata(url) tool. Every
URL is HTTP-only (fetch, no headless browser), so runs are fast and cheap, and one bad URL never fails the
whole run — it just comes back with an error field.
Sample output
Real output from a live run of this Actor (https://apify.com):
{"url": "https://apify.com","finalUrl": "https://apify.com/","status": 200,"title": "Apify: The largest marketplace of trusted tools for AI","description": "Thousands of tools to automate your business. Get real-time web data, track competitors, generate leads, and integrate your apps and AI agents.","canonical": "https://apify.com/","lang": "en","og": {"title": "Apify: The largest marketplace of trusted tools for AI","type": "website","site_name": "Apify","image": "https://apify.com/og-image?title=Thousands+of+tools%0Afor+your+AI"},"twitter": {"card": "summary_large_image","creator": "@apify"},"jsonLdTypes": ["Organization", "WebSite", "SoftwareApplication"],"favicon": "https://apify.com/favicon.ico?favicon.2653ilt32bing.ico?dpl=ff1ad5e33f","error": null}
A URL that 404s or isn't HTML still comes back as one item, with whatever was actually recoverable and an
error explaining what wasn't:
{ "url": "https://example.com/this-page-does-not-exist-404", "finalUrl": "https://example.com/this-page-does-not-exist-404","status": 404, "title": "Example Domain", "lang": "en", "favicon": "https://example.com/favicon.ico", "error": "HTTP 404" }
{ "url": "https://www.apify.com/favicon.ico", "finalUrl": "https://apify.com/favicon.ico", "status": 200,"title": null, "og": {}, "twitter": {}, "jsonLdTypes": [], "favicon": null,"error": "Not HTML (content-type: image/x-icon)" }
Download the dataset as JSON, CSV, Excel, or query it over the API.
Input
| Field | Type | Default | Notes |
|---|---|---|---|
urls | string[] | ["https://example.com", "https://apify.com"]* | Web page URLs to extract metadata from. |
maxConcurrency | integer | 10 | How many URLs to fetch in parallel (1–50). |
* The default only applies when urls is left empty — this is what a zero-config run uses, so it always
returns real metadata in a few seconds.
Pricing
Pay per event, no subscription:
| Event | Price | When |
|---|---|---|
| Actor start | $0.001 | Once per run |
| URL processed | $0.001 | Once per URL attempted — including 404s, timeouts, and non-HTML responses, since fetching them still consumes platform resources (primary event) |
Worked examples:
- 10 URLs: $0.001 + 10 × $0.001 = $0.011.
- 1,000 URLs: $0.001 + 1,000 × $0.001 = $1.001.
- The default sample run (example.com, apify.com — 2 items): $0.001 + 2 × $0.001 = $0.003.
- Free plan: this Actor is HTTP-only, 256–512 MB, and a 1,000-URL run finishes in well under a minute — the $5/month free platform usage covers a large volume of occasional runs on top of the event price.
The minimum spend guard (minimalMaxTotalChargeUsd) is $0.05 — small enough for an agent to call this tool
with a tiny budget.
Output fields
| Field | Description |
|---|---|
url | Requested URL. |
finalUrl | URL after redirects (null if the request failed outright). |
status | HTTP status code (0 = request never got a response). |
title | <title>. |
description | <meta name="description">. |
canonical | <link rel="canonical">, resolved to an absolute URL. |
lang | <html lang="...">. |
og | Open Graph tags (og:*), keyed by the part after og:. |
twitter | Twitter Card tags (twitter:*), keyed by the part after twitter:. |
jsonLdTypes | @type value(s) from every application/ld+json block on the page. |
favicon | Absolute favicon URL. Falls back to /favicon.ico when the page declares none (or an empty data: icon, which some sites use on purpose) — this is a best-effort guess, not verified to exist. |
error | Set when the URL couldn't be fetched, returned a non-2xx status, or wasn't HTML. The item (and its charge) still exists — resources were spent either way — but most fields will be null. |
Limitations & notes
- HTTP-only: pages that require JavaScript to render their metadata (rare — OpenGraph/Twitter Card/JSON-LD are meant to be readable from the raw HTML) won't get the client-rendered fields.
- Non-HTML responses (images, PDFs, etc.) are detected from the
Content-Typeheader and skipped before parsing; you still get a dataset item withstatusand anerror, and it is still charged. - Public page metadata only — no login, no personal data.
- Not affiliated with Google, Meta, Twitter/X, or any site this Actor is pointed at; OpenGraph, Twitter Card, and JSON-LD are open, documented HTML conventions, not proprietary APIs.
- Found a bug or want a field added? Open an issue on this Actor's Issues tab.