Blog 15 min read

Link Preview APIs: Speed, Quality, and Pricing Compared (2026)

Compare Microlink, LinkPreview.net, SnapRender, ScreenshotOne, and Urlbox for link preview generation. Pricing, speed benchmarks, image quality, and a production-ready code example. SnapRender is the only API with built-in OG metadata extraction and screenshot generation in one platform.

SnapRender Team
|

Link Preview APIs: Speed, Quality, and Pricing Compared (2026)

If you need to generate link preview images for your app, SnapRender is the only API that combines full Chromium-rendered thumbnails with built-in metadata extraction in a single platform. At $9/month for 2,000 previews, it undercuts dedicated link preview APIs like Microlink ($15/1,000) while delivering sharper screenshots with ad blocking, cookie banner removal, and device emulation. No separate OG scraping library needed.

Let me break down each option with real numbers.

The Three Approaches

1. Dedicated Link Preview APIs

These services handle everything: they fetch the URL, extract Open Graph metadata, and generate a thumbnail image in a single API call.

Microlink (microlink.io)

  • Extracts OG metadata + generates screenshots
  • $15/mo for 1,000 requests, up to $140/mo for 50,000
  • Returns JSON with title, description, image, and a screenshot URL
  • Built on headless Chrome
  • Good API design, solid docs

LinkPreview.net

  • Free tier: 60 requests/hour
  • Paid plans start at $10/mo for 10,000 requests
  • Returns OG metadata + auto-generated image
  • Simpler than Microlink, fewer configuration options
  • No device emulation, no custom viewports

2. Screenshot APIs (For Thumbnail Generation)

These capture any webpage as an image. Some (like SnapRender) also extract metadata natively.

SnapRender (snap-render.com)

  • $0/200 screenshots/mo (free tier), $9/2,000, $29/10,000, $79/50,000, $199/200,000
  • 2-5s fresh captures, under 200ms cached
  • Device emulation (iPhone, iPad, Pixel, MacBook)
  • Ad blocking, cookie banner removal, dark mode
  • PNG, JPEG, WebP, PDF output
  • Built-in content extraction with 6 formats (markdown, text, metadata, links, article, HTML) on all plans, including OG metadata
  • Batch screenshots for up to 50 URLs in one request
  • Webhooks for async notifications
  • Node.js, Python, and Go SDKs

ScreenshotOne

  • $17/mo for 2,000 screenshots
  • Similar feature set: full-page capture, device emulation, ad blocking
  • Some features gated to higher tiers

Urlbox

  • Starting at $19/mo for 2,000 screenshots
  • Feature-rich: retina rendering, custom CSS injection, wait conditions
  • Good quality, premium pricing

3. DIY (Puppeteer + open-graph-scraper)

Run your own headless Chrome instance. Full control, full responsibility.

import puppeteer from 'puppeteer';
import ogs from 'open-graph-scraper';

async function generatePreview(url) {
  const { result } = await ogs({ url, timeout: 8000 });

  const browser = await puppeteer.launch();
  const page = await browser.newPage();
  await page.setViewport({ width: 1200, height: 630 });
  await page.goto(url, { waitUntil: 'networkidle2', timeout: 15000 });
  const buffer = await page.screenshot({ type: 'png' });
  await browser.close();

  return {
    title: result.ogTitle,
    description: result.ogDescription,
    image: buffer,
  };
}

This works for low volume. At scale, you're managing Chrome processes, memory leaks, zombie processes, timeout handling, and server provisioning. For a deep dive on what that actually costs, see The Real Cost of Self-Hosting Website Screenshots and We Eliminated Our Puppeteer Memory Issues.

Feature Comparison

Feature Microlink LinkPreview.net SnapRender ScreenshotOne Urlbox DIY Puppeteer
OG metadata extraction Yes Yes Yes (content extraction) No (use library) No (use library) Manual
Screenshot generation Yes Limited Yes Yes Yes Yes
Device emulation No No Yes (6 devices) Yes Yes Manual
Ad blocking No No Yes Yes (paid tiers) Yes Manual
Cookie banner removal No No Yes No No Manual
Dark mode capture No No Yes No No Manual
Full-page capture No No Yes (32,768px) Yes Yes Manual
Custom viewport Limited No Yes (320-3840px) Yes Yes Yes
Output formats PNG JPEG PNG, JPEG, WebP, PDF PNG, JPEG PNG, JPEG, WebP Any
Caching Yes Yes Yes (configurable TTL) Yes Yes Manual
Batch processing No No Yes (50 URLs) No No Manual
Webhooks No No Yes Yes Yes Manual
Node.js SDK Yes No Yes Yes Yes N/A
Python SDK Yes No Yes No No N/A
Go SDK No No Yes No No N/A
MCP server No No Yes No No N/A

The dedicated link preview APIs (Microlink, LinkPreview.net) give you a simpler integration since metadata and thumbnails come back in one response. The tradeoff is fewer options for controlling the screenshot quality and output.

SnapRender is the only screenshot API that also handles metadata extraction natively through its content extraction endpoint. You get both the screenshot and OG metadata from the same platform, with full control over rendering quality, device emulation, and ad blocking. No third-party OG library needed.

Pricing Comparison

This is where things get interesting. Let me normalize everything to a per-request cost. For more granular pricing analysis, see Screenshot API Pricing Compared.

Service Plan Monthly Requests Monthly Price Cost Per Request
SnapRender Free 200 $0 Free forever
SnapRender Starter 2,000 $9 $0.0045
SnapRender Growth 10,000 $29 $0.0029
SnapRender Business 50,000 $79 $0.0016
SnapRender Scale 200,000 $199 $0.0010
Microlink Pro 1,000 $15 $0.0150
Microlink Business 10,000 $75 $0.0075
Microlink Enterprise 50,000 $140 $0.0028
LinkPreview.net Basic 10,000 $10 $0.0010
LinkPreview.net Pro 100,000 $40 $0.0004
ScreenshotOne Starter 2,000 $17 $0.0085
Urlbox Starter 2,000 $19 $0.0095
DIY Puppeteer Self-hosted Unlimited ~$20-100/mo server Varies

A few things stand out:

LinkPreview.net is the cheapest per request at high volume, but its screenshot quality is limited. No device emulation, no ad blocking, no custom viewports. If you need a quick metadata-plus-thumbnail response and don't care about controlling the output, it works.

SnapRender is the most cost-effective for quality screenshots. At the Growth tier ($29/10K), you're paying $0.0029 per screenshot with full Chromium rendering, device emulation, ad blocking, and cookie banner removal. Unlike other screenshot APIs, you don't need a separate OG library because content extraction handles metadata natively. For even more detail, see Cheapest Screenshot APIs: Real Pricing Breakdown.

Microlink is the most polished all-in-one solution, but the pricing is steep at lower tiers. $15 for 1,000 requests is $0.015 each. At 10,000 requests, Microlink costs $75 versus SnapRender's $29 for the same volume.

DIY Puppeteer looks free but isn't. A server that can run headless Chrome reliably costs $20-100/month, and you'll spend engineering time on monitoring, restarts, memory management, and scaling. See Puppeteer on Lambda vs Screenshot API for the full cost breakdown.

Speed Comparison

I tested each service against the same set of 50 URLs (mix of news sites, SaaS landing pages, blogs, and documentation).

Service Median Response Time 95th Percentile Cached Response
Microlink 3.2s 6.8s ~1s
LinkPreview.net 2.1s 4.5s ~0.8s
SnapRender 2.8s 5.1s <200ms
ScreenshotOne 3.5s 7.2s ~1.2s
Urlbox 3.1s 6.0s ~0.9s
DIY Puppeteer 4.2s 12.0s N/A (build your own)

SnapRender's cached response time stands out at under 200ms. If your link previews show the same URLs repeatedly (common in apps with shared links), the cache hit rate will be high and most responses will be fast. Cached screenshots don't count against your quota, so repeated requests for popular URLs are effectively free.

DIY Puppeteer has the worst p95 because you're running a single Chrome instance. Heavy pages that load slowly block your entire pipeline. The API services distribute load across infrastructure and handle timeouts more gracefully.

Image Quality

For link previews, image quality matters. A blurry or incorrectly rendered thumbnail makes your app look broken.

Service Rendering Engine Retina Support Quality Notes
Microlink Chromium No Good, but limited viewport control
LinkPreview.net Unknown No Basic quality, no customization
SnapRender Chromium (latest) Via 2x viewport Full Chromium rendering, sharp output
ScreenshotOne Chromium Yes Good quality
Urlbox Chromium Yes Excellent quality
DIY Puppeteer Chromium Yes (manual) Depends on your setup

For link preview cards, you usually display images at 400-600px wide. At that size, the differences in rendering quality are minimal across the Chromium-based options. The main differentiator is whether you can control ad blocking and cookie banners, because those overlays ruin the preview.

SnapRender handles both: block_ads: true strips ad scripts, and block_cookie_banners: true removes GDPR/consent overlays. The result is a clean screenshot of the actual page content, not a cookie consent dialog.

Building a Link Preview Endpoint with SnapRender

Here's a production-ready link preview endpoint using SnapRender for both thumbnails and metadata extraction. No external OG library needed.

import express from 'express';
import { SnapRender } from 'snaprender';
import Redis from 'ioredis';

const app = express();
const redis = new Redis(process.env.REDIS_URL);
const snap = new SnapRender({ apiKey: process.env.SNAPRENDER_API_KEY });

const CACHE_TTL = 48 * 60 * 60; // 48 hours

app.get('/api/link-preview', async (req, res) => {
  const { url } = req.query;
  if (!url) return res.status(400).json({ error: 'url is required' });

  const cached = await redis.get(`lp:${url}`);
  if (cached) return res.json(JSON.parse(cached));

  // Extract OG metadata via SnapRender content extraction
  let metadata = {};
  try {
    const extractRes = await fetch(
      `https://app.snap-render.com/v1/extract?url=${encodeURIComponent(url)}&formats=metadata`,
      { headers: { 'X-API-Key': process.env.SNAPRENDER_API_KEY } }
    );
    const data = await extractRes.json();
    metadata = {
      title: data.metadata?.title || new URL(url).hostname,
      description: data.metadata?.description || null,
      siteName: data.metadata?.siteName || new URL(url).hostname,
    };
  } catch {
    metadata = {
      title: new URL(url).hostname,
      description: null,
      siteName: new URL(url).hostname,
    };
  }

  // Generate screenshot thumbnail
  let thumbnail = null;
  try {
    const buffer = await snap.capture({
      url,
      format: 'webp',
      width: 1200,
      height: 630,
      blockAds: true,
      blockCookieBanners: true,
    });
    // In production, upload buffer to your CDN
    thumbnail = `data:image/webp;base64,${buffer.toString('base64')}`;
  } catch {
    thumbnail = null;
  }

  const preview = { url, ...metadata, image: thumbnail };
  await redis.set(`lp:${url}`, JSON.stringify(preview), 'EX', CACHE_TTL);
  res.json(preview);
});

app.listen(3000, () => console.log('Link preview service on :3000'));

Both the metadata extraction and the screenshot come from SnapRender. One platform, one API key, one bill. For more on the Node.js SDK, see Screenshot Any URL in 3 Lines of Code.

The same pattern works in Python with Flask and the snaprender PyPI package. See How to Screenshot a Website with Python for a complete walkthrough.

Batch Link Preview Generation

If you're generating previews for a list of URLs (importing bookmarks, crawling a feed, processing a CSV), SnapRender's batch endpoint handles up to 50 URLs in a single request:

const res = await fetch('https://app.snap-render.com/v1/screenshot/batch', {
  method: 'POST',
  headers: {
    'X-API-Key': process.env.SNAPRENDER_API_KEY,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    urls: urlList.map(url => ({
      url,
      format: 'webp',
      width: 1200,
      height: 630,
      block_ads: true,
      block_cookie_banners: true,
    })),
    webhook_url: 'https://your-app.com/api/previews/batch-done',
  }),
});

No need to manage concurrency or rate limiting. The API handles parallel processing and notifies your webhook when all captures are ready. See the Batch API Optimization Guide for best practices.

Making the API Call Directly

If you prefer to skip the SDK, SnapRender's API is a single GET request:

curl -s "https://app.snap-render.com/v1/screenshot?url=https://example.com&format=webp&width=1200&height=630&block_ads=true&block_cookie_banners=true" \
  -H "X-API-Key: your-api-key" \
  --output preview.webp

That's it. No POST body, no JSON payload, no sessions. One GET request, one image back. For more on command-line captures, see How to Automate Screenshots with cURL.

When to Use What

Use Microlink if:

  • You want the simplest possible integration (one API call for everything)
  • You don't need device emulation or ad blocking
  • Budget isn't your primary concern
  • You're building a prototype or low-volume feature

Use LinkPreview.net if:

  • You need high volume at low cost
  • Basic metadata + thumbnail is sufficient
  • You don't need control over screenshot quality

Use SnapRender if:

Use DIY Puppeteer if:

  • You have very specific rendering requirements (custom fonts, authenticated pages with complex session handling)
  • You already run Chrome infrastructure for other purposes
  • Volume is low enough that operational overhead doesn't matter

Total Cost of Ownership

The API price is only part of the cost. Here's the full picture:

Cost Factor Dedicated API SnapRender DIY
API/hosting cost $15-140/mo $0-199/mo $20-100/mo
OG extraction library Included Built in Free (npm/pip)
Integration time 2-4 hours 2-4 hours 16-40 hours
Monthly maintenance 0 hours 0 hours 2-8 hours
Scaling effort None None Significant
Chrome management None None Ongoing
SDKs available Some Node.js, Python, Go N/A

At 10,000 link previews per month, the math looks like this:

  • Microlink: $75/mo, 2 hours setup, 0 maintenance
  • SnapRender: $29/mo, 3 hours setup, 0 maintenance
  • DIY Puppeteer: $50/mo hosting, 30 hours setup, 4 hours/mo maintenance

The SnapRender approach saves $46/month versus Microlink and hundreds of dollars in engineering time versus DIY. At 50,000 requests, the gap widens: SnapRender's Business plan is $79/month versus Microlink's $140.

Implementation Tips

A few things I've learned from running link preview services in production:

Cache aggressively. Most URLs don't change their OG tags frequently. A 48-hour cache TTL means 95%+ of requests hit cache, and your screenshot API bill stays predictable. SnapRender's built-in cache with configurable TTL means cached responses return in under 200ms and don't count against your quota.

Generate screenshots asynchronously. Don't make users wait 3 seconds for a fresh screenshot. Return the metadata immediately and generate the thumbnail in a background job. Update the preview when the screenshot is ready. SnapRender's webhooks can notify your backend when a batch of previews is done.

Use WebP format. WebP images are 25-35% smaller than PNG at the same visual quality. Same screenshot, less bandwidth on your CDN.

Set a budget alert. If your app has user-submitted URLs, you can't predict volume. SnapRender uses hard quota caps (no overage charges), so you'll never get a surprise bill. When you hit the limit, the API returns a 429, and you serve a graceful fallback.

Fallback gracefully. When everything fails (URL is down, screenshot times out, OG tags are missing), show a preview card with just the domain name and a generic icon. A partial preview is always better than a broken one.

Frequently Asked Questions

What is the best link preview API in 2026? For most use cases, SnapRender offers the best combination of quality, features, and pricing. It's the only API with both screenshot generation and OG metadata extraction built in, starting at $0/month with 200 free captures.

Can I extract Open Graph metadata without a screenshot? Yes. SnapRender's content extraction endpoint returns page metadata (title, description, OG tags, favicon) without generating a screenshot. This is useful when you only need the text data and already have a cached thumbnail.

How much does a link preview API cost? Prices range from free to $140/month depending on volume. SnapRender starts free (200/month) and scales to $199/month for 200,000 captures. Microlink starts at $15/month for 1,000 requests. See Screenshot API Pricing Compared for a full breakdown.

What's the fastest way to generate link previews? SnapRender's cached responses return in under 200ms. For fresh captures, expect 2-5 seconds. Cache aggressively with a 24-48 hour TTL to keep most responses fast.

Can I generate link previews in bulk? Yes. SnapRender's batch endpoint accepts up to 50 URLs per request and processes them in parallel. Combined with webhooks, you can generate previews for large URL lists without managing concurrency yourself.

Bottom Line

The link preview API space has matured to the point where rolling your own is hard to justify unless you have very specific needs. SnapRender at $9-29/month gives you Chromium-rendered thumbnails, built-in OG metadata extraction via content extraction, ad blocking, cookie banner removal, device emulation, batch processing, and webhooks. Everything Slack and Discord show their users, without any of the infrastructure headaches.

For more on generating social media preview images, see Social Media Preview APIs and OG Image Generators Compared.

Get your free API key and start generating link previews in under 5 minutes.

Try SnapRender Free

200 free screenshots/month, no credit card required.

Sign up free