Link Preview API — Bulk OpenGraph & Metadata Unfurl avatar

Link Preview API — Bulk OpenGraph & Metadata Unfurl

Pricing

from $1.94 / 1,000 link previews

Go to Apify Store
Link Preview API — Bulk OpenGraph & Metadata Unfurl

Link Preview API — Bulk OpenGraph & Metadata Unfurl

Rising star

High-volume link previews: OpenGraph, Twitter Cards, JSON-LD, titles, images, favicons, canonicals, authors, dates, language and feeds. No fixed run timeout, browser or third-party API key.

Pricing

from $1.94 / 1,000 link previews

Rating

0.0

(0)

Developer

Technical Dost Solutions

Technical Dost Solutions

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

2

Monthly active users

21 hours ago

Last modified

Share

Turn a URL list into production-ready link previews and web metadata. The Actor combines OpenGraph, Twitter Cards, standard meta tags, canonical links, favicons, authors, dates, language, feeds, hreflang, and schema.org JSON-LD into one clean record per URL.

It uses fast HTTP requests instead of a headless browser, streams results as they finish, and keeps only a small concurrent window in memory. That makes it suitable for both single-link API calls and large batch jobs.

Why use this Actor?

  • Rich link previews — title, description, image, site name, favicon, canonical URL, and oEmbed.
  • OpenGraph + Twitter Cards — reconciled preview fields plus complete normalized openGraph and twitter objects.
  • JSON-LD and SEO metadata — schema types, authors, publishers, dates, robots, keywords, language, charset, theme color, hreflang, web manifests, and RSS/Atom feeds.
  • High-volume streaming — no arbitrary URL-count cap and no fixed overall run timeout. Results are saved and billed continuously instead of being buffered until every URL finishes.
  • Tunable performance — 1–50 concurrent requests, configurable per-URL timeout, and retries for temporary errors.
  • Low overhead — no browser and no third-party API key.
  • Fair billing — successful previews are charged atomically; failed URLs return free diagnostics.

There is no artificial batch-size limit in the Actor. Practical throughput still depends on Apify platform limits, the size of your input and dataset, target-site response times, rate limits, and the spending limit you set for a run.

Input

FieldTypeDefaultDescription
urlsarrayrequiredURL strings or { "url": "..." } objects. A missing scheme is upgraded to HTTPS.
maxItemsinteger0Optional safety cap; 0 processes every supplied URL.
maxConcurrencyinteger10Parallel requests, from 1 to 50.
requestTimeoutSecsinteger20Per-URL timeout, from 3 to 120 seconds. The overall Actor run has no fixed timeout.
maxRetriesinteger1Retries for timeouts, HTTP 429, and temporary 5xx errors; 0 to 3.
includeJsonLdbooleantrueReturn parsed JSON-LD and detected schema.org types.
includeRawTagsbooleanfalseReturn every normalized meta tag in metaTags; useful for audits but increases output size.
{
"urls": ["github.com", "https://stripe.com", "https://www.apify.com"],
"maxItems": 0,
"maxConcurrency": 10,
"requestTimeoutSecs": 20,
"maxRetries": 1,
"includeJsonLd": true,
"includeRawTags": false
}

Output

Each URL produces one dataset record. Existing link-preview fields remain stable; richer fields are additive.

{
"url": "https://example.com/article",
"finalUrl": "https://example.com/article",
"ok": true,
"status": 200,
"contentType": "text/html; charset=utf-8",
"responseTimeMs": 184,
"attempts": 1,
"title": "Example article",
"description": "A concise article description.",
"image": "https://example.com/article-cover.jpg",
"siteName": "Example",
"type": "article",
"canonical": "https://example.com/article",
"favicon": "https://example.com/favicon.ico",
"appleTouchIcon": "https://example.com/apple-touch-icon.png",
"manifestUrl": "https://example.com/site.webmanifest",
"feedUrl": "https://example.com/feed.xml",
"feeds": [{ "url": "https://example.com/feed.xml", "type": "application/rss+xml", "title": "Example feed" }],
"hreflang": [{ "language": "en", "url": "https://example.com/en/article" }],
"language": "en",
"charset": "utf-8",
"author": "Jane Doe",
"publisher": "Example",
"publishedTime": "2026-08-01T09:00:00Z",
"modifiedTime": "2026-08-20T12:00:00Z",
"robots": "index,follow",
"themeColor": "#ffffff",
"twitterCard": "summary_large_image",
"openGraph": { "title": "Example article", "type": "article" },
"twitter": { "card": "summary_large_image" },
"schemaTypes": ["Article", "Organization"],
"jsonLd": [{ "@context": "https://schema.org", "@type": "Article" }],
"fetchedAt": "2026-08-25T09:00:00.000Z"
}

Unreachable URLs, timeouts, and non-success HTTP responses produce ok: false records with an error message. Those diagnostic records are not charged as successful link previews.

Large-batch guidance

For tens of thousands of URLs, start with concurrency 1020. Increase it only when target sites tolerate the request rate. Use maxItems while testing and set Apify's per-run maximum charge to control spend. Because results stream into the dataset continuously, a slow URL or a stopped run does not discard already completed previews.

Common use cases

  • Link unfurling for chat, comments, CMS, CRM, and bookmarking apps.
  • Content and feed enrichment for AI agents, RAG pipelines, newsletters, and databases.
  • OpenGraph, Twitter Card, canonical, hreflang, and JSON-LD audits.
  • Metadata snapshots before and after site migrations.
  • Article author/date extraction and schema.org inventory across large URL lists.

API and exports

Run the Actor from Apify Console, API, JavaScript/Python clients, schedules, webhooks, Make, Zapier, n8n, or MCP. Download the dataset as JSON, CSV, Excel, XML, RSS, or HTML using Apify's standard dataset exports.

FAQ

Does it require an API key? No third-party API key is required. API calls to Apify use your normal Apify token.

Does it render JavaScript? No. It reads server-delivered HTML, where sites normally expose preview metadata. Pages that create metadata only after client-side JavaScript runs may return incomplete fields.

Is there a URL limit? The Actor imposes no arbitrary URL-count cap. Real limits come from the platform, input and dataset sizes, target sites, your run settings, and your spending limit.

Is there a timeout? The published Actor has no fixed overall run timeout. Each individual request has a configurable timeout so one unresponsive site cannot block a large job indefinitely.

What happens when the run spending limit is reached? The Actor stops scheduling new work. Successful results are saved and charged atomically, so it does not deliver successful paid output beyond the available run budget.

Pricing

Pay per successful link preview, plus the small start event shown on the Pricing tab. Failed URLs stay free. Always check the live Pricing tab for the current rate before starting a large run.