Web Data API
A Single Response Carries Everything a Web Page Reveals.
The Web Data API takes a URL, loads the page in a real browser and returns its full profile: technologies, metadata, source and visible text with their hashes, links, trackers, favicons, robots.txt, headers, cookies and redirects.
Request
GET /
Response · 200 OK
-
technology.stacksCloudflare · CDN
-
html.meta.titleDeepinfo | Continuous Threat Exposure Management Platform
-
linksinternal www.deepinfo.com, docs.deepinfo.com · external linkedin.com
-
favicon…/favicon.svg · hash …
-
robots_txtcontent · hash · disallowed_links
-
httpstatus 200 · server cloudflare · text/html; charset=utf-8
-
Checks
source_code_hash…content_hash…
-
screenshotoptional · signed link, expires after 7 days
The Whole Page Comes Back From One URL.
| Parameter | Type | Description | |
|---|---|---|---|
url | string | Required | The page to analyze, as a full URL with its scheme. |
screenshot | boolean | Optional | Also capture a JPEG of the rendered page, returned as a screenshot object. Default false. |
wait_ | string | Optional | Load events to wait for before the page is parsed, comma-separated, such as load or networkidle2. |
max_ | integer | Optional | Largest page source to return, in bytes. Default 8388608. |
Request
curl "https://api.deepinfo.com/v1/lookup/webdata?url=https://www.deepinfo.com&screenshot=true" \
-H "apikey: YOUR_API_KEY"import requests
r = requests.get(
"https://api.deepinfo.com/v1/lookup/webdata",
params={"url": "https://www.deepinfo.com", "screenshot": "true"},
headers={"apikey": "YOUR_API_KEY"},
)
page = r.json()
print(page["html"]["meta"]["title"])
print([f["hash"] for f in page["favicon"]])const url = encodeURIComponent('https://www.deepinfo.com')
const r = await fetch(
`https://api.deepinfo.com/v1/lookup/webdata?url=${url}&screenshot=true`,
{ headers: { apikey: 'YOUR_API_KEY' } }
)
const { html, http } = await r.json()
console.log(html.meta.title, http.redirection_history)
Response
{
"url": "https://www.deepinfo.com",
"technology": {
"stacks": [
{ "slug": "cloudflare", "name": "Cloudflare", "categories": ["CDN"], "cpe": "cpe:/a:deepvendor:cloudflare", "…": "…" }
]
},
"html": {
"meta": {
"title": "Deepinfo | Continuous Threat Exposure Management Platform",
"language": "en",
"encoding": "utf-8",
"canonical_url": "https://www.deepinfo.com/",
"noindex_status": false,
"og": ["…"],
"json_ld": ["…"],
"…": "name, description, keywords, language_alternatives"
},
"internal_links_fqdns": ["www.deepinfo.com", "docs.deepinfo.com", "…"],
"external_links_domains": ["linkedin.com"],
"script_links": ["…"],
"iframe_links": [],
"trackers": [],
"emails": [],
"source_code_hash": "…",
"content_hash": "…",
"content_keywords": ["data", "platform", "management", "deepinfo", "…"],
"…": "source_code, content, external_links, favicon_links, inspect_disabled"
},
"favicon": [ { "url": "…/favicon.svg", "hash": "…" } ],
"robots_txt": { "content": "…", "hash": "…", "disallowed_links": ["…"] },
"http": {
"redirection_history": [ { "url": "https://www.deepinfo.com", "status_code": 200 } ],
"headers": [
{ "name": "content-type", "value": "text/html; charset=utf-8" },
{ "name": "server", "value": "cloudflare" },
"…"
],
"cookies": [ { "name": "…", "value": "<cookie value>", "secure": false, "http_only": false, "…": "…" } ]
},
"screenshot": {
"screenshot_url": "https://…/<signed link, expires after 7 days>.jpeg",
"connection_status": "success",
"…": "url, redirected_url, check_date"
},
"connection_status": "success",
"version": 1,
"check_date": "2026-09-23T14:45:32.606Z"
}
The Blocks in the Response.
| Block | Contents |
|---|---|
technology.stacks[] | Detected technologies with the same fields as the Technology API, CPE names included. |
html.meta | Title, description, keywords, language, encoding, canonical URL, noindex status, Open Graph tags and JSON-LD blocks. |
html.source_, html.content | The HTML and the visible text, each with a SHA-256 hash, plus the page’s most frequent words. |
html links | Host names on the site’s own domain, external links with their host names and registered domains, and the scripts, iframes and icons the page loads. |
html.trackers[] | Tracking IDs found in the page, such as Google Analytics, AdSense and Tag Manager IDs. |
html.emails | E-mail addresses that appear in the page. |
favicon[] | Each icon’s URL and hash. |
robots_ | The file, its hash and the paths it disallows. |
http | Response headers, cookies with their flags, and every redirect on the way with its status code. |
screenshot | With screenshot=true: a signed link to a JPEG that expires after seven days. |
Hashes and IDs That Link Sites Together.
A favicon hash, an analytics ID and a content hash are fingerprints. Two sites that share them were often built by one team, or one was copied from the other.
Web Data returns all three in one call, so comparing a lookalike page with yours means comparing fields instead of reading the pages side by side.
{
"favicon": [ { "url": "…", "hash": "…" } ],
"html": {
"trackers": [ { "name": "…", "values": ["…"] } ],
"source_code_hash": "…",
"content_hash": "…"
},
"robots_txt": { "hash": "…" }
}
Questions One Page Profile Answers.
Impersonation Review
Compare a lookalike’s title, favicon hash and content hash with your page’s before you escalate it.
Phishing Triage
See what a suspicious domain serves, where its links and scripts point and where its redirects end.
Threat Hunting
Group sites by the analytics IDs, favicon hashes and e-mail addresses they have in common.
Large Pages and Busy Browsers.
| Loaded live | The page is rendered in a real browser at request time, so a call takes longer than a record lookup. 503 means the browser is busy: retry after the seconds in the Retry-After header. |
|---|---|
| Large pages | When a page is larger than max_, source_ holds a placeholder message instead of the HTML. Raise the limit, up to 32 MiB, for very large pages. |
| Targets not allowed | A 400 that carries only details, without parameters, means the target cannot be analyzed. |
| Rate limits | Plan-dependent. The default is one request per second per key and endpoint. See rate limits. |
See This Data at Work in the Deepinfo Platform
External Attack Surface Management runs these lookups continuously over your assets and raises what changes as issues, and Deep Search & Insights opens the whole index to your analysts.
Questions About Web Data API
Can we find other sites that share a page or an analytics ID?
Web Data profiles one page per call, so compare the IDs and hashes across the pages you profile. Across the index, Domain Search matches hosts on webdata.html.source_, which identical pages share.
Which e-mail addresses does the response list?
html.emails holds every address found in the page, and html.emails_ the ones on the site’s own domain.
Can it tell when a page tries to block inspection?
Yes. html.inspect_ reports whether the page tries to block inspection of its content.
Which load events does Web Data wait for?
By default, networkidle2, load and domcontentloaded, and wait_ changes the list. With screenshot=true the list is ignored: the page is always parsed after the load event.
How is the Web Data API priced?
As part of an API services plan, by volume and frequency. Each call is a lookup and counts against your plan’s quota at one unit per request. See Data & API pricing.
Can analysts profile a page without writing code?
Yes. Instant Lookups includes Web Data in the Deepinfo Platform, next to Screenshot and Technology.
Profile a Page You Know Well.
Run Web Data against your own site first, so you know what a clean result looks like before you compare a lookalike with it. We set up access on a short call.