Skip to content

Website metadata API for developers

Turn any URL into normalized JSON. A single REST endpoint that executes JavaScript, merges Open Graph, JSON-LD, and HTML tags, and returns structured data instantly.

Detected
  • title
  • description
  • lang
  • author
  • publisher
  • date
  • url
  • image
  • logo
  • video
  • audio

Send the URL Get the metadata back

2.0
secs
P95 cold response
loading…
99.9
%
SLA Guaranteed
Sources merged
Open GraphTwitter CardsJSON-LDoEmbedMicrodataHTML
https://api.microlink.io?palette&url=https://stripe.com

Build social previews
that actually render

Microlink returns a unified JSON response — plus the brand color palette, logo, and favicon. Everything you need to render a pixel-perfect link preview or URL preview on the first try.
Every source merged, zero parsing
Open Graph, Twitter Cards, JSON-LD, oEmbed, microdata, RDFa, and HTML tags combined into one unified schema. Stop writing per-site fallback logic and ship consistent previews at scale.
Brand-ready visuals out of the box
Get high-resolution images, logos, favicons, and the dominant color palette for every URL — perfect for rich link cards and theming without manual art direction.
Real browser, SPA-ready rendering
Every request runs in a real headless Chrome session that executes JavaScript, hydrates SPAs, and waits for selectors — so you get accurate metadata from dynamic pages that plain scrapers miss.
Production-grade edge infrastructure
Global CDN caching, automatic retries, and 99.9% uptime handle the scraping complexity for you — with a free tier of 25 requests per day to get started.

Metadata API
in

The Microlink website metadata API delivers unified structured data through a developer-friendly HTTP endpoint. One URL in, normalized metadata out — ready to power link previews, URL previews, content ingestion, and social card generation.

The following examples show how to use the Microlink API with CLI, cURL, JavaScript, Python, Ruby, PHP & Golang, targeting 'https://stripe.com' URL with 'meta' API parameter:

CLI Microlink API example

microlink https://stripe.com&meta

cURL Microlink API example

curl -G "https://api.microlink.io" \
  -d "url=https://stripe.com" \
  -d "meta=true"

JavaScript Microlink API example

import mql from '@microlink/mql'

const { data } = await mql('https://stripe.com', {
  meta: true
})

Python Microlink API example

import requests

url = "https://api.microlink.io/"

querystring = {
    "url": "https://stripe.com",
    "meta": "true"
}

response = requests.get(url, params=querystring)

print(response.json())

Ruby Microlink API example

require 'uri'
require 'net/http'

base_url = "https://api.microlink.io/"

params = {
  url: "https://stripe.com",
  meta: "true"
}

uri = URI(base_url)
uri.query = URI.encode_www_form(params)

http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true

request = Net::HTTP::Get.new(uri)
response = http.request(request)

puts response.body

PHP Microlink API example

<?php

$baseUrl = "https://api.microlink.io/";

$params = [
    "url" => "https://stripe.com",
    "meta" => "true"
];

$query = http_build_query($params);
$url = $baseUrl . '?' . $query;

$curl = curl_init();

curl_setopt_array($curl, [
    CURLOPT_URL => $url,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_ENCODING => "",
    CURLOPT_MAXREDIRS => 10,
    CURLOPT_TIMEOUT => 30,
    CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
    CURLOPT_CUSTOMREQUEST => "GET"
]);

$response = curl_exec($curl);
$err = curl_error($curl);

curl_close($curl);

if ($err) {
    echo "cURL Error #: " . $err;
} else {
    echo $response;
}

Golang Microlink API example

package main

import (
    "fmt"
    "net/http"
    "net/url"
    "io"
)

func main() {
    baseURL := "https://api.microlink.io"

    u, err := url.Parse(baseURL)
    if err != nil {
        panic(err)
    }
    q := u.Query()
    q.Set("url", "https://stripe.com")
    q.Set("meta", "true")
    u.RawQuery = q.Encode()

    req, err := http.NewRequest("GET", u.String(), nil)
    if err != nil {
        panic(err)
    }

    client := &http.Client{}
    resp, err := client.Do(req)
    if err != nil {
        panic(err)
    }
    defer resp.Body.Close()

    body, err := io.ReadAll(resp.Body)
    if err != nil {
        panic(err)
    }

    fmt.Println(string(body))
}
Last month usage
200M
reqs per month
16%
cache hit rate
9TB
data served
some clients

Start free, scale when ready

No login required. No credit card needed. The website metadata API is free to use — just start calling it.
Pro
For production workloads.
$49
/month
$1.07 per 1,000 requests
46,000requests / month
Cancel anytime · No setup fees
Free
Try the API in seconds. No card.
$0
/month
25 requests per day
Enterprise
Dedicated infra for high-volume.
Custom
From $625 / month
One API, every layer of context

Metadata is the foundation.
Stack the rest on top.

Use the metadata API on its own to power link previews, knowledge graphs, content moderation, or SEO tooling. Combine it with the other Microlink utilities in a single request to enrich the response with screenshots, PDFs, clean markdown, and brand colors — no extra roundtrips, same predictable JSON, same browser session.

Try it live, right now

Skip the setup. Our sharing debugger tool lets you paste any URL, see every extracted metadata field, and preview how link unfurls render on facebook, X, linkedin, whatsapp, and slack in real time.

The most complete website metadata API built for production workloads

Six metadata sources merged into one JSON response.
From Open Graph to JSON-LD, Microlink extracts the full picture in a single round-trip — no brittle scrapers, no partial results.

Start now

Get 25 requests/day with zero commitment — the website metadata API is free to use, no account, and no credit card. Just call the API and go from URL to metadata in seconds.
No login needed
25 reqs/day free
No credit card

Product Information

Everything you need to know about
the Microlink metadata API.

What is a website metadata API and how does it work?

A website metadata API takes any URL as input, loads the page with a full headless browser, and returns a unified JSON response containing title, description, image, logo, favicon, color palette, language, author, date, and more. Think of it as a programmable link to metadata: one URL in, fully normalized metadata out.
Microlink normalizes seven sources into one response: , Twitter Cards, , oEmbed, , , and HTML head tags.
The API prioritizes the most accurate source per field automatically — you get the best title, description, image, logo, author, date, language, and palette without writing custom parsing logic or maintaining brittle scrapers.
Use the metadata API as a URL preview and link preview endpoint. Send an HTTPS GET request to https://api.microlink.io?url=<your-url> and you will receive JSON with the normalized metadata — including og:title, og:description, og:image, og:type, and og:site_name.
No authentication is required for the free tier. The response merges Open Graph with Twitter Cards, JSON-LD, and HTML fallbacks so you always get a complete preview — see the metadata guide for all fields.
Yes. Unlike regex-based scrapers, Microlink runs a full Chromium headless browser. So React, Vue, Next.js, and other SPAs that inject meta tags at runtime are captured correctly.
Metadata added by frameworks like next/head, react-helmet, or Nuxt useHead hooks is detected just as reliably as server-rendered tags. Stale SSR or partial hydration edge cases are handled out of the box.

Can I extract favicons, logos, and brand color palettes?

Yes. Microlink returns the logo and favicon URLs for every page, with dimensions and MIME type.
Add palette=true to the query and you also get the dominant color palette extracted from the og:image or the logo. Perfect for theming link preview cards, chat unfurls, and brand-aware UI without manual design work.

Why use a metadata API instead of scraping the HTML myself?

Metadata extraction looks simple until it is not. Social networks use inconsistent tag naming, some sites inject tags at runtime, JSON-LD can be deeply nested, requires provider-specific endpoints, and encoding bugs are everywhere.
Microlink handles headless browser rendering, rule-based normalization with , proxy rotation, caching, and concurrency at scale — so you ship features instead of fighting the long tail of the web.

Is there a free tier for the metadata API?

Yes. The metadata API is free to use with 25 requests per day — no login, no credit card, and no setup required. Just call the endpoint and get normalized metadata back.
For production workloads that need higher volume, automatic proxy rotation, custom headers, configurable TTL, and priority support, see our Pro plans starting at €39/month.

How do I integrate the metadata API with Node.js or Python?

In minutes. Visit our documentation for interactive playground examples, official SDKs (Node.js, Python, Ruby, Go), and copy-paste code snippets for any language.
The Microlink SDK turns the metadata response into a rendered link preview component with 250+ verified providers supported out of the box.

What is metascraper and how does it power the API?

is the open-source rule-based library that underpins Microlink. It evaluates each desired field (title, image, date, etc.) against a series of rules and only accepts values that satisfy a strict data shape.
This approach means when the API detects a field, you can be confident it is what it claims to be — no false positives from truncated strings, empty images, or malformed dates. The library is and you can contribute rules for your own edge cases.

What is your uptime SLA and expected latency?

We guarantee enterprise-grade reliability with a 99.9% uptime SLA. Every request runs in an isolated browser instance to guarantee security and avoid shared-state leaks. Check real-time availability on the status page.
For latency: metadata responses are distributed via Cloudflare's +330 edge locations, meaning cached responses are delivered in milliseconds. Our optimized Chromium pool handles cold starts efficiently for consistent P95 performance.

Other questions?

We’re always available at .