Domain-Layer Against Origin-Layer Outage Triage Receipt avatar

Domain-Layer Against Origin-Layer Outage Triage Receipt

Pricing

$20.00 / 1,000 hostname_triages

Go to Apify Store
Domain-Layer Against Origin-Layer Outage Triage Receipt

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

kingii98

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a month ago

Last modified

Categories

Security

Limited permissions

Share

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.

ClassMeaning
registration_holdRDAP shows client hold, server hold, pending delete, or redemption period.
parking_delegationA nameserver or the SOA name matches a parking or suspension pattern.
sinkhole_dnsA resolver answer is loopback, unspecified, private, or reserved.
dns_no_answerBoth resolvers give no A or AAAA answer.
tlsThe HTTPS probe through DNS fails in the TLS handshake.
dns_path_mismatchHTTPS through DNS fails, but the origin answers when the hostname is forced.
originHTTPS through DNS fails, and no direct probe passes.
noneHTTPS through DNS returns the expected status.
invalid_hostnameThe input hostname is not a valid public name. No charge.
triage_errorAn unexpected error occurred for this hostname. No charge.

Input

FieldDefaultLimit
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_status200100 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_at
  • rdap: status, last_changed, error
  • nameservers, soa_owner, soa_mname, parking_match
  • resolvers: for 1.1.1.1 and 8.8.8.8, the rcode, a, and aaaa answers
  • sinkhole: true if any answer is loopback or non-public
  • https_via_dns: probe result for the first public DNS answer
  • https_direct: one probe result for each known origin IP, with the hostname forced
  • rejected_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_error rows 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.py needs 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 pytest
uv run ruff check .