Skip to content

Link Preview & Metadata Extractor

Try for free

Turn any list of URLs into link previews: title, description, image, favicon, logo, site name, Open Graph, Twitter cards, oEmbed, author, dates, canonical URL and redirect chain. Fast HTTP, no browser needed.

🔗 Link Preview & Metadata Extractor

Turn any list of URLs into rich link previews: title, description, preview image, favicon, logo, site name, Open Graph and Twitter card data, oEmbed embeds, author, publish date, canonical URL and the full redirect chain. Built for chat apps, CMSs, bookmarking tools and AI agents that need to "unfurl" links quickly and cheaply. No login, no browser by default, many URLs in parallel.

✨ Why use Link Preview & Metadata Extractor?

  • ⚡ Fast and light: plain HTTP with real browser TLS fingerprints, up to 100 URLs in parallel, and it stops reading a page as soon as the <head> is complete.
  • 🖼️ Complete previews: Open Graph, Twitter cards, HTML meta, JSON-LD and <link> tags are merged into one clean record, with fallbacks for the image (Twitter, JSON-LD, image_src, first large image), the logo and the favicon.
  • 🎬 oEmbed built in: embed HTML, author, thumbnail and size for YouTube, Vimeo, X/Twitter, TikTok, Spotify, SoundCloud, Reddit and every page that advertises oEmbed.
  • 🛡️ Gets past blocks: a site that blocks the datacenter proxy gets an automatic retry over a residential IP, and an optional hosted-browser fallback.
  • 🧭 Redirects and status: final URL, HTTP status, each redirect hop (including meta refresh) and the canonical URL.
  • 💸 Only successful previews are billed: dead links, blocked pages and invalid URLs come back with a clear error and cost nothing.

🎯 Use cases

  • 💬 Chat and social apps: unfurl links pasted by users into cards with title, image and site name.
  • 📰 CMS and newsletters: auto-fill link cards, thumbnails and authors for curated links.
  • 🔖 Bookmark managers and read-later apps: store a title, description, favicon and image for every saved URL.
  • 🤖 AI agents and RAG: give an agent a quick, compact summary of what a URL is before deciding to read it in full.
  • 🔍 SEO and social checks: find pages with a missing og:image, wrong canonical, broken redirects or no Twitter card.
  • 🧹 Link hygiene: check large URL lists for dead links, redirects and blocked pages.

🚀 How to use

  1. Paste your URLs, one per line (a missing https:// is fine).
  2. Optional: turn oEmbed, schema.org types or raw tags on or off, and set the number of parallel requests.
  3. Click Start. Previews stream into the dataset as they finish.
  4. Export as JSON, CSV, Excel or HTML, or read the results through the API or MCP.

📥 Input

FieldDescription
urlsURLs to unfurl, one per line. Duplicates and tracking parameters (utm_*, fbclid, ...) are removed.
maxItemsProcess at most this many URLs (0 = all).
includeOembedFetch oEmbed data (default on).
includeJsonLdTypesAdd schema.org types from JSON-LD (default on).
includeRawMetaAdd every Open Graph, Twitter and meta tag as objects (default off).
maxConcurrencyParallel requests (default 20, up to 100).
requestTimeoutSecsTimeout per request (default 15 s).
residentialRetryRetry blocked sites over a residential IP (default on).
browserFallbackLoad still-blocked pages in a hosted browser (default off).
{
  "urls": ["github.com", "https://www.youtube.com/watch?v=dQw4w9WgXcQ", "https://stripe.com"],
  "includeOembed": true,
  "maxConcurrency": 20
}

📤 Output

FieldDescription
url, finalUrl, status, ok, redirectChainWhat was requested, where it ended up and how.
title, description, image, imageWidth, imageHeight, imageAltThe preview card. imageSource says where the image came from.
siteName, type, canonicalUrl, languageSite and page identity.
favicon, appleTouchIcon, logo, themeColorBranding.
author, publishedAt, modifiedAt, keywordsArticle details when the page has them.
twitterCard, twitterSite, twitterCreatorTwitter / X card data.
video, audio, feedUrlMedia and RSS/Atom feed links.
oembedtype, title, author_name, provider_name, thumbnail_url, html, width, height, ...
jsonLdTypes, jsonLdPrimaryTypeSchema.org types found on the page.
contentType, fetchedVia, responseTimeMs, fetchedAt, errorFetch details.

Fields are left out when a page does not have them. Example:

{
  "url": "https://stripe.com",
  "finalUrl": "https://stripe.com/en-ch",
  "ok": true,
  "status": 200,
  "redirectChain": [{ "url": "https://stripe.com", "status": 307 }],
  "contentType": "text/html",
  "title": "Stripe | Financial Infrastructure to Grow Your Revenue",
  "description": "Stripe is a financial services platform that helps all types of businesses accept payments, build flexible billing models and manage money movement.",
  "image": "https://b.stripecdn.com/mkt-ssr-statics/assets/_next/static/media/stripe.37119086.jpg",
  "imageSource": "og",
  "siteName": "Stripe",
  "type": "website",
  "canonicalUrl": "https://stripe.com/en-ch",
  "favicon": "https://images.stripeassets.com/fzn2n1nzq965/4vVgZi0ZMoEzOhkcv7EVwK/8cce6fdcf2733b2ec8e99548908847ed/favicon.png?w=96&h=96",
  "logo": "https://images.stripeassets.com/fzn2n1nzq965/1hgcBNd12BfT9VLgbId7By/01d91920114b124fb4cf6d448f9f06eb/favicon.svg",
  "language": "en-CH",
  "twitterCard": "summary_large_image",
  "twitterSite": "@stripe",
  "jsonLdTypes": ["WebSite", "Organization"],
  "jsonLdPrimaryType": "Organization",
  "responseTimeMs": 579,
  "error": null
}

💰 Pricing

You pay $1.50 per 1,000 link previews ($0.0015 per successful preview), plus platform usage: a little compute, datacenter proxy traffic, and residential traffic only for sites that block the datacenter proxy. A preview usually transfers well under 100 KB because the actor stops after the page <head>.

Example: 1,000 URLs with 950 successful previews cost $1.43 in previews plus usage. Failed, blocked and invalid URLs are free.

❓ FAQ

Do I need a login, API key or my own proxy? No. Pages are fetched through the built-in datacenter proxy, with a residential retry for sites that block it.

Is it legal? The actor reads the public metadata websites publish for exactly this purpose (link previews and social cards). Respect each site's terms and use the data responsibly.

Why is a field empty? Many pages do not publish every tag. Fields a page does not have are left out of its row. The image falls back to the Twitter card, JSON-LD, image_src or the first large image; the favicon falls back to /favicon.ico.

What about X/Twitter, TikTok or Reddit posts? Their oEmbed endpoints give a title, author, text and embed HTML even when the page itself shows a login or bot wall.

How many URLs can I send? There is no fixed limit. Runs stream results and keep memory flat; use maxItems and the run's spending limit to cap a job.

Can I call it from the API, MCP or on a schedule? Yes. Each run writes one row per URL to its default dataset.

⚠️ Limits

  • Pages that build their meta tags only with JavaScript need the browser fallback (off by default).
  • Strong bot walls can still block a page after the residential retry; those URLs are returned with ok: false and are not charged.
  • The actor reads link-preview metadata only. For full schema.org entities, crawling and validation use a structured-data extractor; for page text use a content crawler.

Related actors

G2
4.7/5
Excellent
Trustpilot

The internet is full of data.
Start owning yours.

Scrape.ly gives you the infrastructure, the tooling, and the team to extract, process, and operationalize web data at any scale. Setup takes minutes. The advantage lasts forever.

No credit card. No setup calls.