Well-Known Extractor avatar

Well-Known Extractor

Pricing

from $10.00 / 1,000 domain scans

Go to Apify Store
Well-Known Extractor

Well-Known Extractor

Probes the domain's .well-known endpoints and returns the body and parsed structure for each.

Pricing

from $10.00 / 1,000 domain scans

Rating

0.0

(0)

Developer

Vojtěch Mašláň

Vojtěch Mašláň

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

0

Monthly active users

5 days ago

Last modified

Share

Probes a domain's /.well-known/ endpoints and returns each file's raw body plus a parsed representation. Runs as a batch over many domains, or as a Standby HTTP API for one domain per request.

Input

FieldTypeDefaultDescription
domainsarray— (required)Domains to probe, e.g. google.com. Each is normalized to its https origin.
profilesarray["core"]Endpoint groups to probe. Use ["all"] for all 35.
endpointsarrayIndividual endpoint ids, added on top of profiles.
includeNotFoundbooleanfalseAlso write dataset rows for endpoints that were absent.

profiles and endpoints are combined and deduplicated by path. If both are empty, core is used. At most 50 endpoints are probed per domain; extras are skipped with a warning.

Endpoint profiles

ProfileEndpoints
core (11)security.txt, gpc.json, openid-configuration, oauth-authorization-server, oauth-protected-resource, assetlinks.json, apple-app-site-association, nodeinfo, host-meta, agent-card.json, llms.txt
security (4)security.txt, gpc.json, dnt-policy.txt, openpgpkey-policy
identity (7)openid-configuration, oauth-authorization-server, oauth-protected-resource, openid-federation, jwks.json, did.json, microsoft-identity-association.json
mobile (4)assetlinks.json, apple-app-site-association, apple-developer-merchantid-domain-association, microsoft-identity-association.json
email (2)mta-sts.txt, openpgpkey-policy
social (9)did.json, nodeinfo, host-meta, host-meta.json, matrix-server, matrix-client, matrix-support, atproto-did, discord
ai (6)oauth-protected-resource, agent-card.json, agent.json, mcp.json, ai.txt, llms.txt
adtech (3)ads.txt, app-ads.txt, sellers.json
web (5)traffic-advice, related-website-set.json, privacy-sandbox-attestations.json, web-app-origin-association, discord
all (35)All of the above.

Profiles overlap; an endpoint in two selected profiles is probed once. 34 of the 35 endpoints have a parser; openpgpkey-policy returns raw only. llms.txt, ads.txt, app-ads.txt, and sellers.json live at the site root, not under /.well-known/.

Output

A batch run writes one dataset row per endpoint found:

{
"domain": "www.google.com",
"origin": "https://www.google.com",
"scannedAt": "2026-08-04T12:00:00.000Z",
"id": "security.txt",
"path": "/.well-known/security.txt",
"title": "Security contact policy",
"spec": "https://www.rfc-editor.org/rfc/rfc9116",
"url": "https://www.google.com/.well-known/security.txt",
"finalUrl": "https://www.google.com/.well-known/security.txt",
"found": true,
"httpStatus": 200,
"contentType": "text/plain",
"raw": "Contact: https://g.co/vulnz\nExpires: 2027-01-01T00:00:00Z\n",
"parsed": { "contact": ["https://g.co/vulnz"], "expires": "2027-01-01T00:00:00Z" },
"error": null
}
FieldDescription
domain / originScanned host and its normalized origin.
id / path / title / specWhich endpoint this row is, and the spec that defines it.
url / finalUrlRequested URL and the URL after redirects.
foundWhether the response counted as a real hit.
httpStatus / contentTypeResponse status and content type. null status means a transport error.
rawResponse body, capped at 256 KB. null when not found.
parsedStructured form of raw, or null if no parser applies or parsing failed.
errorTransport error message, otherwise null.

found is false for a 4xx, and also for a 200 that returns HTML or an unexpected body shape, since sites commonly answer unknown paths with a catch-all page.

You can download the dataset as JSON, CSV, Excel, or HTML.

Standby API

GET /?domain=google.com
GET /?domain=google.com&profiles=ai,security
GET /?domain=google.com&endpoints=security.txt,openid-configuration
POST / { "domain": "google.com", "profiles": ["core"] }

One domain per request. The response wraps the same probes in wellKnown[] and adds a summary:

{
"domain": "www.google.com",
"url": "https://www.google.com",
"scannedAt": "2026-08-04T12:00:00.000Z",
"wellKnown": [{ "id": "security.txt", "found": true, "httpStatus": 200, "parsed": {} }],
"summary": {
"probed": 11,
"found": ["security.txt"],
"notFound": ["assetlinks.json"],
"errored": [],
"security": { "contacts": ["https://g.co/vulnz"], "expires": "2027-01-01T00:00:00Z" },
"openidIssuer": "https://accounts.google.com"
}
}

Pricing

One domain-scanned event per domain, charged whether or not anything is found. Cost is the number of domains times the per-domain price.