sfoln/url-metadata · Developer tools, SEO tools, Automation
Extract metadata from any list of URLs: title, meta description, canonical, language, favicon, Open Graph and Twitter Card tags, JSON-LD types, feeds, H1, word and link counts. One fast HTTP fetch per URL, no browser. $1 per 1,000 URLs; failed and missing pages are free.
URL Metadata & Open Graph Extractor turns a list of URLs into clean, structured page metadata: title, meta description, canonical URL, language, favicon, Open Graph and Twitter Card tags, JSON-LD schema types, publish/modify dates, author, robots and generator tags, the first H1, a visible word count, internal/external link counts and RSS/Atom feed links. Built for link previews, SEO audits, content inventories, lead enrichment and AI agents that need to know what a page is about without rendering it.
Price
Price per delivered record
Event
Price
Per 1,000
Charged for
URL metadata record url-metadata
$0.001
$1 / 1,000
Charged once per URL whose page was fetched and analysed (status ok). Missing pages (404/410), dead domains, blocked or invalid URLs and failed fetches are not charged.
Apify free plan: up to 10 items per run. Paid plans have no per-run cap; set maxTotalChargeUsd to cap spend.
POST https://api.apify.com/v2/actors/sfoln~url-metadata/runs?maxTotalChargeUsd=1
GET https://api.apify.com/v2/actor-runs/{runId} # until status is SUCCEEDED
GET https://api.apify.com/v2/datasets/{defaultDatasetId}/items?format=json
Authenticate with an Apify API token. MCP clients can instead sign in with OAuth when prompted. Example prompt for an agent: Get the title, description, Open Graph image and canonical URL of https://apify.com and https://blog.apify.com for a link preview.
Input
Input fields
Paste URLs (one per line). Each URL produces one dataset record with page metadata and a `status` field.
Field
Type
Default
Meaning
urls *
array
required
URLs Pages to analyse, one per line. `https://` is added when the scheme is missing. Duplicates are removed. Objects with a `url` key are accepted too. Accounts on the Apify free plan can process up to 10 URLs per run.
maxUrls
integer
1000
Max URLs Safety cap on how many URLs are processed in this run. Range 1–100000.
timeoutSecs
integer
10
Fetch timeout (seconds) Maximum time to wait for one page (redirects included). Slow pages are retried once. Range 3–30.
concurrency
integer
5
Concurrency How many pages are fetched in parallel. Range 1–10.
includeRaw
boolean
false
Include fetch details Attach low-level fetch details (detected charset) under `raw`.
Records land in the run's dataset; a synchronous call returns them directly. Each has a status (ok is charged; everything else is free) and a charged flag. The run's OUTPUT record totals items and charges.
Field
Type
Meaning
input
string | object
Input The URL as given in the input.
url
string
URL Normalized requested URL. e.g. "https://apify.com/"
finalUrl
string | null
Final URL URL after redirects.
redirected
boolean | null
Redirected True when the request was redirected.
statusCode
integer | null
HTTP status Final HTTP status code. e.g. 200
contentType
string | null
Content type Content-Type response header.
title
string | null
Title <title> text.
description
string | null
Meta description <meta name=description> content.
canonical
string | null
Canonical URL Absolute <link rel=canonical> URL.
language
string | null
Language <html lang>, Content-Language meta/header or og:locale.
favicon
string | null
Favicon Absolute icon URL (falls back to /favicon.ico).
ogTitle
string | null
og:title
ogDescription
string | null
og:description
ogImage
string | null
og:image Absolute image URL.
ogType
string | null
og:type
ogSiteName
string | null
og:site_name
ogUrl
string | null
og:url
ogLocale
string | null
og:locale
twitterCard
string | null
twitter:card
twitterTitle
string | null
twitter:title
twitterDescription
string | null
twitter:description
twitterImage
string | null
twitter:image
twitterSite
string | null
twitter:site
twitterCreator
string | null
twitter:creator
jsonLdTypes
array
JSON-LD types Distinct schema.org @type values found in JSON-LD blocks (incl. @graph).
publishedTime
string | null
Published article:published_time or equivalent (as written on the page).
modifiedTime
string | null
Modified article:modified_time / og:updated_time or equivalent.
author
string | null
Author
robots
string | null
Robots meta
xRobotsTag
string | null
X-Robots-Tag header
generator
string | null
Generator CMS / site generator meta.
keywords
string | null
Meta keywords
themeColor
string | null
Theme color
h1
string | null
First H1
h1Count
integer
H1 count
wordCount
integer
Word count Visible-text word estimate.
linksInternal
integer
Internal links Distinct same-host link targets.
linksExternal
integer
External links Distinct other-host link targets.
feeds
array
Feeds RSS / Atom / JSON Feed links: { url, type, title }.
pageBytes
integer | null
Bytes analysed
truncated
boolean | null
Truncated True when the page exceeded 1 MB.
responseTimeMs
integer | null
Response time (ms)
status
string
Status ok | not_found | error | skipped_invalid | skipped_budget | skipped_free_plan e.g. "ok"
charged
boolean
Charged Whether this record incurred a pay-per-event charge.
source
string
Source Data source (selfhosted = fetched by this Actor).
fetchedAt
string
Fetched at ISO timestamp.
Example record
{
"input": "https://apify.com",
"url": "https://apify.com/",
"finalUrl": "https://apify.com/",
"redirected": false,
"statusCode": 200,
"contentType": "text/html; charset=utf-8",
"title": "Apify: Full-stack web scraping and data extraction platform",
"description": "Cloud platform for web scraping, browser automation, AI agents, and data for AI...",
"canonical": "https://apify.com/",
"language": "en",
"favicon": "https://apify.com/favicon.ico",
"ogTitle": "Apify: Full-stack web scraping and data extraction platform",
"ogDescription": "Cloud platform for web scraping...",
"ogImage": "https://apify.com/og-image.png",
"ogType": "website",
"ogSiteName": "Apify",
"twitterCard": "summary_large_image",
"twitterSite": "@apify",
"jsonLdTypes": [
"Organization",
"WebSite"
],
"publishedTime": null,
"modifiedTime": null,
"author": null,
"robots": "index, follow",
"generator": null,
"h1": "Build reliable web scrapers. Fast.",
"h1Count": 1,
"wordCount": 1432,
"linksInternal": 118,
"linksExternal": 21,
"feeds": [],
"pageBytes": 412339,
"truncated": false,
"responseTimeMs": 312,
"status": "ok",
"charged": true,
"chargedEvent": "url-metadata",
"source": "selfhosted",
"fetchedAt": "2026-10-14T10:00:00.000Z"
}