| src/quietcheck | ||
| .gitignore | ||
| LICENSE | ||
| pyproject.toml | ||
| README.md | ||
| targets.example.txt | ||
quietcheck
Multi-signal "is this SaaS dead?" probe. Public data only — no logins, no scraping gated marketplaces.
quietcheck takes a SaaS domain and runs a battery of public probes to estimate
whether the company has gone quiet. It returns a per-signal table plus an overall
quietness score (0–100, higher = quieter).
Signals checked:
| Signal | Probe |
|---|---|
| Homepage reachable | HTTP GET, follow redirects |
| SSL expiry | ssl.getpeercert() on :443 |
| Last blog post | RSS/Atom autodiscovery (<link rel="alternate">) + feed parse |
| Wayback last snapshot | archive.org/wayback/available |
| Status page activity | StatusPage.io / Atlassian patterns + last incident timestamp |
| WHOIS expiry / updated | python-whois (optional — graceful skip) |
| Crawl-meta freshness | <meta property="article:modified_time"> etc. |
Each signal contributes 0–N points to the quietness score, with severity caps. Output is rendered as a Rich table or JSON.
Why this project
On May 4, 2026 Luis worked through a "dead SaaS rebuild without buying the Acquire listing" strategy (session: Dead SaaS Product Discovery Methods). Concrete signal list from that thread:
domain whois/parking, last blog/changelog, X/LinkedIn inactivity, GitHub commits, abandoned status pages, expired SSL, vanished job postings
quietcheck operationalises that exact list as a CLI you can run against any
domain or a targets.txt batch — pairs with oppmine (May 4 cron) which scored
pitches; this one triages targets.
Hardware-funding angle: a fast public-data triage tool is concrete consulting leverage — agency clients constantly need to know whether a competitor / acquisition target / partner is still active. Drop-in deliverable for diligence work.
Install
Requires Python 3.10+.
cd ~/Code/daily-mvps/quietcheck-2026-05-05
pip install -e .
Usage
# Single domain — full table
quietcheck rizzle.com
# JSON for piping
quietcheck rizzle.com --json
# Batch from file (one domain per line, # comments ok)
quietcheck --batch targets.txt --json > results.json
# Tune timeouts / parallelism
quietcheck rizzle.com --timeout 8 --concurrency 4
Sample table output:
quietcheck — rizzle.com [QUIETNESS 72/100]
Signal Status Detail
────────────────────────────────────────────────────────────────
homepage ALIVE 200 in 412 ms
ssl EXPIRING 12 days remaining
blog_rss QUIET last post 287 days ago
wayback FRESH snapshot 6 days ago
statuspage NOT_FOUND no statuspage.io subdomain
whois WARN expires in 41 days
meta_modified QUIET modified 312 days ago
Score interpretation
| Score | Reading |
|---|---|
| 0–25 | Active |
| 26–50 | Slowing |
| 51–75 | Quiet — investigate |
| 76–100 | Effectively dead |
Limitations
- Doesn't probe X/LinkedIn (no public API without auth) — TODO: add a separate
quietcheck-socialcompanion that takes a handle + cookies. - WHOIS is best-effort; many TLDs (
.io,.ai) rate-limit hard. Run with--no-whoisin batch mode if you hit walls. - Status-page detection only covers StatusPage.io patterns
(
status.<domain>,<domain>.statuspage.io).
License
MIT — see LICENSE.