Domain-Layer Against Origin-Layer Outage Triage Receipt
Pricing
$20.00 / 1,000 hostname_triages
Domain-Layer Against Origin-Layer Outage Triage Receipt
Find which layer failed in an outage: registration hold, parking delegation, sinkhole DNS, TLS, or origin.
Pricing
$20.00 / 1,000 hostname_triages
Rating
0.0
(0)
Developer
kingii98
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
a month ago
Last modified
Categories
Security
Limited permissionsShare
This Actor finds which layer failed when a site is down. It gives one dataset row for each hostname.
Failed-layer classes
The Actor checks the layers in this order. It reports the first layer that fails.
| Class | Meaning |
|---|---|
registration_hold | RDAP shows client hold, server hold, pending delete, or redemption period. |
parking_delegation | A nameserver or the SOA name matches a parking or suspension pattern. |
sinkhole_dns | A resolver answer is loopback, unspecified, private, or reserved. |
dns_no_answer | Both resolvers give no A or AAAA answer. |
tls | The HTTPS probe through DNS fails in the TLS handshake. |
dns_path_mismatch | HTTPS through DNS fails, but the origin answers when the hostname is forced. |
origin | HTTPS through DNS fails, and no direct probe passes. |
none | HTTPS through DNS returns the expected status. |
invalid_hostname | The input hostname is not a valid public name. No charge. |
triage_error | An unexpected error occurred for this hostname. No charge. |
Input
| Field | Default | Limit |
|---|---|---|
hostnames | ["example.com"] | Maximum 50. IP addresses and private names are rejected. |
known_origin_ips | {} | Map of hostname to public IPs. Maximum 4 for each hostname. |
health_path | / | Must start with /. |
expected_status | 200 | 100 to 599. |
An empty input {} runs the default input and succeeds.
Output
Each row has these fields:
hostname,failed_layer,evidence(list of text lines),checked_atrdap:status,last_changed,errornameservers,soa_owner,soa_mname,parking_matchresolvers: for1.1.1.1and8.8.8.8, thercode,a, andaaaaanswerssinkhole: true if any answer is loopback or non-publichttps_via_dns: probe result for the first public DNS answerhttps_direct: one probe result for each known origin IP, with the hostname forcedrejected_origin_ips: input origin IPs that were not public
A failed gate, an unreachable target, or a zero-finding result is a dataset row. The run still succeeds.
Billing event
The Actor calls Actor.charge once for each hostname triaged, with the event hostname_triage (count 1).
- Invalid hostnames and
triage_errorrows are not charged. - If the charge limit is reached, the Actor stops and reports this in the status message.
- The Actor does not set a price. The price is set by the operator in the Apify Console.
Safety limits
- HTTP only. No browser, proxy, LLM, paid API, database, or secret.
- Input: 50 hostnames, 4 origin IPs for each hostname, 5 hostnames in parallel.
- Each hostname: 1 RDAP request, up to 6 DNS queries, up to 5 HTTPS probes.
- HTTPS probe: 10 s timeout, no redirects, 64 KB read limit.
- RDAP: HTTPS only, 3 redirects at most, 256 KB limit. Each redirect target must be public.
- Probes connect only to public IPs. Loopback, private, and reserved addresses are never contacted.
Limits and risks
- The parking pattern list in
src/classify.pyneeds regular updates. - The RDAP name is the SOA owner name, or the last two labels if no SOA exists. This can be wrong for some multi-label public suffixes.
- Redirect hosts for RDAP are checked by name, not by resolved address.
- Competition in the Store is unknown.
Local use
uv run pytestuv run ruff check .