webmetadata-extractor
Python client for the Web Metadata, OpenGraph & Contact Extractor API — turn any URL into structured web intelligence in a single fast call: SEO/OpenGraph metadata, public contact details, social profiles, tech-stack fingerprinting, Schema.org product data, a 14-point SEO audit, a graded security-headers audit, and AI/LLM-ready Markdown.
pip install webmetadata-extractor
# for the async client:
pip install "webmetadata-extractor[async]"
Quick start
Get a free API key on RapidAPI (1,000 requests/month, no credit card required).
from webmetadata_extractor import WebMetadataClient
client = WebMetadataClient(api_key="YOUR_RAPIDAPI_KEY")
data = client.extract("https://github.com")
print(data["title"], data["og_image"])
contacts = client.contacts("https://example.com")
print(contacts["emails"], contacts["social_links"])
audit = client.seo_audit("https://example.com")
print(audit["seo_score_percentage"], audit["warnings"])
Async
import asyncio
from webmetadata_extractor import AsyncWebMetadataClient
async def main():
async with AsyncWebMetadataClient(api_key="YOUR_RAPIDAPI_KEY") as client:
data = await client.extract("https://github.com")
print(data["title"])
asyncio.run(main())
Self-hosting
The backend is open source (MIT) and can be self-hosted. Point the client at your own deployment and skip the RapidAPI key:
client = WebMetadataClient(api_key=None, base_url="http://localhost:8000")
Methods
| Method | Endpoint | Returns |
|---|---|---|
extract(url, fields=None) |
GET /api/v1/extract |
Full payload — everything below in one call, or a subset via fields= |
link_preview(url) |
GET /api/v1/link-preview |
Title, description, OG image, favicon, site name |
contacts(url) |
GET /api/v1/contacts |
Public emails, phone numbers, social profile links |
tech_stack(url) |
GET /api/v1/tech-stack |
Framework/CMS detection, 40+ signatures, confidence scores |
schema(url) |
GET /api/v1/schema |
Schema.org JSON-LD: products, articles, events, organizations |
security(url, include_tls_details=False) |
GET /api/v1/security |
Graded security-headers audit + optional live TLS inspection |
markdown(url) |
GET /api/v1/markdown |
Clean, AI/LLM-ready Markdown of the page content |
seo_audit(url) |
GET /api/v1/seo-audit |
14-point SEO score, warnings, readability metrics |
links(url) |
GET /api/v1/links |
Internal vs. external hyperlinks (up to 100) |
batch(urls) |
POST /api/v1/batch |
Link-preview extraction over up to 10 URLs at once |
domain(url) |
GET /api/v1/domain |
DNS + WHOIS intelligence, no page fetch |
Every method raises WebMetadataAPIError (with .status_code and .body) on a non-2xx response.
Links
- Live interactive demo — paste a URL, no signup
- Full API documentation
- RapidAPI listing
License
MIT
Metadata
Release files for webmetadata-extractor 0.2.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| webmetadata_extractor-0.2.0.tar.gz | 7.9 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| webmetadata_extractor-0.2.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 18.0 kB
Release files / webmetadata_extractor-0.2.0.tar.gz
| Download URL | webmetadata_extractor-0.2.0.tar.gz |
|---|---|
| Size | 7.9 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
90f0aaeb080d2e57ef87eec46fdcf2e58fbf31312289a4b04aa4d0e2a1a55520
|
|
BLAKE2b-256 checksum How to use checksums |
fbe0b3d14f799435f13112c0ed9089e10368cd5291180377bd5a88fbe9e9722a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.14.7
|
Release files / webmetadata_extractor-0.2.0-py3-none-any.whl
| Download URL | webmetadata_extractor-0.2.0-py3-none-any.whl |
|---|---|
| Size | 10.1 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
a6d6de665affe5c372785ebb275295bf8818c1e5e01df9890fa54546a1455303
|
|
BLAKE2b-256 checksum How to use checksums |
2e09452edb24f5bc8952dd3d882d91e14038f01a8a7d96658f85e7cf77e0c866
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.14.7
|