madeitbelgium/wappalyzer
madeitbelgium/wappalyzer is a Laravel/PHP wrapper for Wappalyzer that detects the technologies behind any website, including CMSs, frameworks, analytics, servers, and more. Use its simple API to identify tech stacks for audits, lead research, or competitive analysis.
Architecture fit. madeitbelgium/wappalyzer is a server-side PHP implementation of the Wappalyzer fingerprinting concept: it fetches a target URL, parses the HTTP response, and matches headers, HTML, cookies, and other static signals against a bundled technology-detection ruleset. It is a point-in-time detection engine, not a platform. It fits naturally as an internal component inside a Laravel/PHP backend that already has an outbound HTTP client and a queue worker: lead/account enrichment, competitive intelligence, tech-stack tagging for sales or security scoring, or website audits. It is a poor fit as a customer-facing real-time API (network-bound latency) or as anything requiring JavaScript-rendered detection.
Integration feasibility. Mechanically trivial — Composer install, one call per URL. The blockers are not technical:
Technical risk. High on license, medium on data quality, medium on abandonment.
Key questions.
composer.json?Stack fit. Laravel 9–11 / PHP 8.1+, Composer, existing queue and HTTP stack. The package imposes no schema — you own storage, which is good: persist {url, domain, technologies[], ruleset_version, confidence, detected_at, fetch_status} so results are reproducible and re-scorable when the ruleset changes.
Migration / isolation path. The recommended pattern is a boundary: run the package in a dedicated internal detection service (a small containerized PHP worker or a Laravel sidecar app) and call it over HTTP or a queue from the main application. This:
Alternative paths ranked: (1) isolate the GPL package in a service; (2) replace the bundled ruleset with a self-maintained or commercially licensed fingerprint corpus and keep only the parsing engine; (3) buy — Wappalyzer's commercial API or BuiltWith — if accuracy and coverage matter more than cost. Given the low opportunity signal (0.38) and the GPL constraint, the buy/isolate options are the realistic ones.
Compatibility. Verify composer.json constraints against the target Laravel version, and verify the ruleset's vintage — a 2024-04 release against a fingerprint corpus that upstream restricted in 2023 suggests lag.
Sequencing.
Maintenance. Low and declining upstream activity means you inherit ownership. Expect to fork the parsing core or, at minimum, pin and periodically merge the ruleset. Budget a recurring quarterly ruleset refresh and a health metric to catch accuracy regressions before users do. Single-maintainer dependency is a real abandonment scenario — maintain a fork plan from day one.
Support. No commercial support channel; GitHub issues only. Assign an internal owner. Treat the package as vendored code with a maintenance SLA you define.
Scaling. Cost is network-bound, not CPU-bound: throughput is a function of queue worker concurrency and outbound egress, not compute. A modest worker pool handles thousands of scans per hour with caching. Without caching, the same domain will be re-fetched repeatedly — cache is the primary scaling lever. Add per-target concurrency limits so you don't get rate-limited or blocked by the sites you scan.
Failure modes to design for.
Ramp-up. The happy-path integration is roughly a day. The production-grade deliverable — SSRF hardening, timeout/redirect/size controls, caching, confidence thresholds, persistence with ruleset versioning, and a benchmarked accuracy baseline — is realistically 2–4 weeks of engineering including legal review and a validation pass, plus an ongoing low-single-digit percentage of one engineer's time for ruleset upkeep. The accuracy benchmark is the decisive input: if server-side-only detection does not clear your precision/recall bar against a commercial baseline, the correct outcome is to buy rather than build.
How can I help you explore Laravel packages today?