Overview
Metadata Extractor works by parsing the HTML content of a web page to extract the metadata. It returns the meta title, meta description, and more in a structured format.
Live Test Webpage Metadata Skill Skill →
The tool
Once your client is connected to the VerveKit server, this appears in its tool list as WebpageMetadataSkill. It is read-only and open-world — it fetches and never mutates anything on your side — so most clients call it without asking you to confirm.
{
"name": "WebpageMetadataSkill",
"arguments": {
"url": "https://www.wikipedia.org"
}
}You do not name the tool yourself; the model picks it. Asking about https://www.wikipedia.org in the terms this skill covers is enough for it to reach for WebpageMetadataSkill on its own — naming it explicitly also works, and is the way to force the call.
Connecting
One server URL covers every skill in the catalog, including this one. Authorization is OAuth: the client opens a browser once, and there is no key to paste into a config file.
{
"mcpServers": {
"vervekit": {
"url": "https://api.vervekit.com/v1/mcp"
}
}
}https://api.vervekit.com/v1/mcpPer-client setup — Claude, Cursor, VS Code, ChatGPT — is on the MCP setup page.
Arguments
These are the properties on the tool's inputSchema, so a well-behaved client validates them before the call is made. Premium arguments are accepted on every plan but only take effect on plans that include them.
| Argument | Type | Description |
|---|---|---|
urlRequired | string | The URL of the web page to extract metadata from url |
What the model gets back
The result carries a structuredContent object matching the tool's declared outputSchema, so a client reads fields without parsing prose. status is "ok" and error is null on success; a null field means the value was not available for that input, not that the call failed.
{
"status": "ok",
"error": null,
"data": {
"requestUrl": "https://apiverve.com",
"url": "https://apiverve.com/",
"canonical": "",
"lang": "en",
"charset": "utf-8",
"title": "APIVerve — One key for 300+ production APIs",
"image": "",
"favicons": [
{
"rel": "icon",
"href": "/images/favicon.ico",
"sizes": "any"
},
{
"rel": "icon",
"type": "image/png",
"href": "/images/favicon.png"
},
{
"rel": "apple-touch-icon",
"href": "/images/apple-touch-icon.png"
}
],
"author": "",
"description": "Consistent schemas, predictable credit pricing, and an uptime SLA on every paid plan across 300+ production APIs. One key, one bill, zero glue code.",
"keywords": "",
"source": "",
"price": "",
"priceCurrency": "",
"availability": "",
"robots": "",
"jsonld": [],
"og:url": "https://apiverve.com",
"og:locale": "en_US",
"og:locale:alternate": "",
"og:title": "APIVerve — One key for 300+ production APIs",
"og:type": "website",
"og:description": "Consistent schemas, predictable credit pricing, and an uptime SLA on every paid plan across 300+ production APIs. One key, one bill, zero glue code.",
"og:determiner": "",
"og:site_name": "APIVerve",
"og:image": "https://apiverve.com/social-images/page-home.png",
"og:image:secure_url": "",
"og:image:type": "",
"og:image:width": "1200",
"og:image:height": "630",
"twitter:title": "APIVerve — One key for 300+ production APIs",
"twitter:description": "Consistent schemas, predictable credit pricing, and an uptime SLA on every paid plan across 300+ production APIs.",
"twitter:image": "https://apiverve.com/social-images/page-home.png",
"twitter:image:alt": "",
"twitter:card": "summary_large_image",
"twitter:site": "",
"twitter:site:id": "",
"twitter:url": "",
"twitter:account_id": "",
"twitter:creator": "",
"twitter:creator:id": "",
"twitter:player": "",
"twitter:player:width": "",
"twitter:player:height": "",
"twitter:player:stream": "",
"twitter:app:name:iphone": "",
"twitter:app:id:iphone": "",
"twitter:app:url:iphone": "",
"twitter:app:name:ipad": "",
"twitter:app:id:ipad": "",
"twitter:app:url:ipad": "",
"twitter:app:name:googleplay": "",
"twitter:app:id:googleplay": "",
"twitter:app:url:googleplay": "",
"headings": [
{
"level": "h1",
"text": "Every API your product needs, behind one key."
},
{
"level": "h2",
"text": "The boring parts of API integration, already solved."
},
{
"level": "h3",
"text": "One response envelope"
},
{
"level": "h3",
"text": "Flat credit pricing"
},
{
"level": "h3",
"text": "Backed by an uptime SLA"
},
{
"level": "h2",
"text": "Your first call takes two minutes."
},
{
"level": "h3",
"text": "Grab a key"
},
{
"level": "h3",
"text": "Call any endpoint"
},
{
"level": "h3",
"text": "Ship it"
},
{
"level": "h2",
"text": "Authenticate once. Point at anything."
},
{
"level": "h2",
"text": "Skip the integration work. Ship the feature."
},
{
"level": "h3",
"text": "User verification"
},
{
"level": "h3",
"text": "Commerce toolkit"
},
{
"level": "h3",
"text": "Data enrichment"
},
{
"level": "h3",
"text": "Docs & media"
},
{
"level": "h2",
"text": "Metrics from the last 24 hours."
},
{
"level": "h2",
"text": "Production APIs for the things you keep rebuilding."
},
{
"level": "h3",
"text": "Email Validator →"
},
{
"level": "h3",
"text": "IP Lookup →"
},
{
"level": "h3",
"text": "Weather →"
},
{
"level": "h3",
"text": "QR Code Generator →"
},
{
"level": "h3",
"text": "Currency Converter →"
},
{
"level": "h3",
"text": "Translator →"
},
{
"level": "h2",
"text": "450,000+ lookups, validations, and conversions a day, through one key."
},
{
"level": "h2",
"text": "Give your software a way to act on the world."
},
{
"level": "h3",
"text": "Scaling in production?"
},
{
"level": "h4",
"text": "Product"
},
{
"level": "h4",
"text": "Solutions"
},
{
"level": "h4",
"text": "Integrations"
},
{
"level": "h4",
"text": "Resources"
},
{
"level": "h4",
"text": "Compare"
},
{
"level": "h4",
"text": "SDKs"
},
{
"level": "h4",
"text": "Company"
},
{
"level": "h4",
"text": "Featured APIs"
},
{
"level": "h4",
"text": "More"
},
{
"level": "h4",
"text": "Legal"
},
{
"level": "h4",
"text": "Important disclaimer"
}
],
"imgTags": [
{
"src": "/images/favicon.png",
"alt": "",
"width": "26",
"height": "26"
},
{
"src": "/images/brands/brand01.png",
"alt": "Microsoft"
},
{
"src": "/images/brands/brand02.png",
"alt": "DuckDuckGo"
},
{
"src": "/images/brands/brand03.png",
"alt": "Topdanmark"
},
{
"src": "/images/brands/brand04.png",
"alt": "University of Maryland"
},
{
"src": "/images/brands/brand05.png",
"alt": "Postman"
},
{
"src": "/images/brands/brand06.png",
"alt": "RapidAPI"
},
{
"src": "/images/brands/brand07.png",
"alt": "Zapier"
},
{
"src": "/images/brands/brand08.svg",
"alt": "Deloitte"
},
{
"src": "/images/brands/brand01.png",
"alt": ""
},
{
"src": "/images/brands/brand02.png",
"alt": ""
},
{
"src": "/images/brands/brand03.png",
"alt": ""
},
{
"src": "/images/brands/brand04.png",
"alt": ""
},
{
"src": "/images/brands/brand05.png",
"alt": ""
},
{
"src": "/images/brands/brand06.png",
"alt": ""
},
{
"src": "/images/brands/brand07.png",
"alt": ""
},
{
"src": "/images/brands/brand08.svg",
"alt": ""
},
{
"src": "/images/brands/brand01.png",
"alt": ""
},
{
"src": "/images/brands/brand02.png",
"alt": ""
},
{
"src": "/images/brands/brand03.png",
"alt": ""
},
{
"src": "/images/brands/brand04.png",
"alt": ""
},
{
"src": "/images/brands/brand05.png",
"alt": ""
},
{
"src": "/images/brands/brand06.png",
"alt": ""
},
{
"src": "/images/brands/brand07.png",
"alt": ""
},
{
"src": "/images/brands/brand08.svg",
"alt": ""
},
{
"src": "/images/brands/brand01.png",
"alt": ""
},
{
"src": "/images/brands/brand02.png",
"alt": ""
},
{
"src": "/images/brands/brand03.png",
"alt": ""
},
{
"src": "/images/brands/brand04.png",
"alt": ""
},
{
"src": "/images/brands/brand05.png",
"alt": ""
},
{
"src": "/images/brands/brand06.png",
"alt": ""
},
{
"src": "/images/brands/brand07.png",
"alt": ""
},
{
"src": "/images/brands/brand08.svg",
"alt": ""
},
{
"src": "/images/brands/brand01.png",
"alt": ""
},
{
"src": "/images/brands/brand02.png",
"alt": ""
},
{
"src": "/images/brands/brand03.png",
"alt": ""
},
{
"src": "/images/brands/brand04.png",
"alt": ""
},
{
"src": "/images/brands/brand05.png",
"alt": ""
},
{
"src": "/images/brands/brand06.png",
"alt": ""
},
{
"src": "/images/brands/brand07.png",
"alt": ""
},
{
"src": "/images/brands/brand08.svg",
"alt": ""
},
{
"src": "/images/brands/brand01.png",
"alt": ""
},
{
"src": "/images/brands/brand02.png",
"alt": ""
},
{
"src": "/images/brands/brand03.png",
"alt": ""
},
{
"src": "/images/brands/brand04.png",
"alt": ""
},
{
"src": "/images/brands/brand05.png",
"alt": ""
},
{
"src": "/images/brands/brand06.png",
"alt": ""
},
{
"src": "/images/brands/brand07.png",
"alt": ""
},
{
"src": "/images/brands/brand08.svg",
"alt": ""
},
{
"src": "/images/favicon.png",
"alt": "",
"width": "24",
"height": "24"
}
],
"responseBody": "",
"viewport": "width=device-width, initial-scale=1, maximum-scale=1",
"theme-color": "#ffffff",
"application-name": "APIVerve",
"og:image:alt": "APIVerve — One key for 300+ production APIs"
}
}
Response fields
Paths are relative to data. Premium fields are absent rather than zeroed on plans that do not include them, so check for presence instead of comparing to 0.
| Field | Type | Example | Description |
|---|---|---|---|
requestUrl | string | https://apiverve.com | Original URL submitted for metadata extraction |
url | string | https://apiverve.com/ | Final resolved URL after redirects |
canonicalPremium | string | | Canonical URL from page meta tag |
lang | string | en | Page language code from HTML lang attribute |
charset | string | utf-8 | Character encoding specified in meta tags |
title | string | APIVerve — One key for 300+ production APIs | Page title extracted from title tag |
imagePremium | string | | Primary image URL from meta tags |
faviconsPremium | array[3] | Array of favicon objects with URL references | |
favicons.0.relPremium | string | icon | Link relation of the icon (icon, apple-touch-icon, ...) |
favicons.0.hrefPremium | string | /images/favicon.ico | URL of the icon |
favicons.0.sizesPremium | string | any | Declared icon sizes |
author | string | | Page author extracted from meta tags |
description | string | Consistent schemas, predictable credit pricing, and an uptime SLA on every paid plan across 300+ production APIs. One key, one bill, zero glue code. | Page description from meta description tag |
keywords | string | | Keywords extracted from meta keywords tag |
sourcePremium | string | | Page source or publication reference |
pricePremium | string | | Product price if available in schema |
priceCurrencyPremium | string | | Currency code for price field |
availabilityPremium | string | | Product availability status from schema |
robots | string | | Robots meta tag for search engine indexing |
jsonldPremium | array | [] | JSON-LD structured data schemas |
og:urlPremium | string | https://apiverve.com | Open Graph URL for social media sharing |
og:localePremium | string | en_US | Open Graph locale specification |
og:locale:alternatePremium | string | | Alternate locales the page is available in |
og:titlePremium | string | APIVerve — One key for 300+ production APIs | Open Graph title for social sharing |
og:typePremium | string | website | Open Graph content type category |
og:descriptionPremium | string | Consistent schemas, predictable credit pricing, and an uptime SLA on every paid plan across 300+ production APIs. One key, one bill, zero glue code. | Open Graph description for social sharing |
og:determinerPremium | string | | Word that appears before the Open Graph title (a, an, the) |
og:site_namePremium | string | APIVerve | Open Graph site name for branding |
og:imagePremium | string | https://apiverve.com/social-images/page-home.png | Open Graph image for social media preview |
og:image:secure_urlPremium | string | | HTTPS URL of the Open Graph image |
og:image:typePremium | string | | MIME type of the Open Graph image |
og:image:widthPremium | string | 1200 | Width of the Open Graph image in pixels |
og:image:heightPremium | string | 630 | Height of the Open Graph image in pixels |
twitter:titlePremium | string | APIVerve — One key for 300+ production APIs | Twitter card title for X sharing |
twitter:descriptionPremium | string | Consistent schemas, predictable credit pricing, and an uptime SLA on every paid plan across 300+ production APIs. | Twitter card description for sharing |
twitter:imagePremium | string | https://apiverve.com/social-images/page-home.png | Twitter card image for X preview |
twitter:image:altPremium | string | | Alt text for the Twitter card image |
twitter:cardPremium | string | summary_large_image | Twitter card type configuration |
twitter:sitePremium | string | | Twitter handle of the website |
twitter:site:idPremium | string | | Twitter user ID of the website |
twitter:urlPremium | string | | URL the Twitter card points to |
twitter:account_idPremium | string | | Twitter account ID for the site |
twitter:creatorPremium | string | | Twitter handle of the content creator |
twitter:creator:idPremium | string | | Twitter user ID of the content creator |
twitter:playerPremium | string | | URL of the Twitter player card iframe |
twitter:player:widthPremium | string | | Width of the Twitter player in pixels |
twitter:player:heightPremium | string | | Height of the Twitter player in pixels |
twitter:player:streamPremium | string | | URL of the raw media stream for the player card |
twitter:app:name:iphonePremium | string | | iPhone app name for the Twitter app card |
twitter:app:id:iphonePremium | string | | iPhone App Store ID for the Twitter app card |
twitter:app:url:iphonePremium | string | | iPhone deep link for the Twitter app card |
twitter:app:name:ipadPremium | string | | iPad app name for the Twitter app card |
twitter:app:id:ipadPremium | string | | iPad App Store ID for the Twitter app card |
twitter:app:url:ipadPremium | string | | iPad deep link for the Twitter app card |
twitter:app:name:googleplayPremium | string | | Google Play app name for the Twitter app card |
twitter:app:id:googleplayPremium | string | | Google Play app ID for the Twitter app card |
twitter:app:url:googleplayPremium | string | | Android deep link for the Twitter app card |
headingsPremium | array[37] | Array of heading elements with level and text | |
headings.0.levelPremium | string | h1 | |
headings.0.textPremium | string | Every API your product needs, behind one key. | |
imgTagsPremium | array[50] | Array of image tags with src and alt attributes | |
imgTags.0.srcPremium | string | /images/favicon.png | |
imgTags.0.altPremium | string | | |
imgTags.0.widthPremium | string | 26 | |
imgTags.0.heightPremium | string | 26 | |
responseBodyPremium | string | | Raw HTML response body content |
viewport | string | width=device-width, initial-scale=1, maximum-scale=1 | Viewport meta tag for responsive design |
theme-colorPremium | string | #ffffff | Theme color meta tag for browser UI |
application-name | string | APIVerve | |
og:image:alt | string | APIVerve — One key for 300+ production APIs |
Failure modes
Errors come back as tool errors carrying a sentence the model can act on, not a bare status code. Error handling covers the full list.
| Status | What it means |
|---|---|
400 / 422 | The arguments did not validate. The message names the offending one. |
401 | The OAuth session is invalid or expired — reconnect the server. |
403 | Blocked by a key restriction or an IP allow-list. Never a bad identity. |
404 | This skill is not part of VerveKit. Check the catalog. |
429 | Out of credits, or a brief rate limit. The message tells them apart. |
A call costs 2 credits each time the tool actually runs; a model that reasons about the tool without calling it costs nothing.
Use cases
- Social Link Previews
- Chat applications fetch page title and meta description tags from shared links to display inline reading snippets in conversation feeds.
- Bookmark Library Archiving
- When archiving external resources, digital asset management platforms capture the page author, description, and keywords to catalog source references.
- Search Crawl Auditing
- Flag indexing barriers across client domains by evaluating robots tags, character encoding, and viewport settings extracted during scheduled crawls.
- Link Redirect Verification
- To detect outdated redirects, publishing platforms compare the original submitted URL against the resolved destination address and page title.
Other ways to use Webpage Metadata Skill
Set up Webpage Metadata Skill on VerveKit, or reach the same source a different way. Your VerveKit account and credits work on all of them — one key, one balance.
Related
More in Data Processing: