lissy93/web-check · warning · Error

Unable to find any technologies for site

Error message

Unable to find any technologies for site

What it means

techStackHandler runs Wappalyzer against the URL; if analysis completes but yields no technologies (empty or absent array), this error is thrown. Note the surrounding catch: browser/Chromium problems are converted to { skipped }, but an empty result is treated as a hard failure.

Source

Thrown at api/tech-stack.js:33

    process.env.CHROMIUM_BIN = await chromium.executablePath();
    // Avoid conflict with @sparticuz/chromium's extraction path at /tmp/chromium
    if (!process.env.CHROMIUM_DATA_DIR) {
      process.env.CHROMIUM_DATA_DIR = '/tmp/chromium-data';
    }
  }
};

const techStackHandler = async (url) => {
  await ensureChromiumBin();
  const { default: Wappalyzer } = await import('wappalyzer');
  const wappalyzer = new Wappalyzer({});

  try {
    await wappalyzer.init();
    const site = await wappalyzer.open(url, {}, { local: {}, session: {} });
    const results = await site.analyze();
    if (!results.technologies || results.technologies.length === 0) {
      throw new Error('Unable to find any technologies for site');
    }
    return results;
  } catch (error) {
    if (/ENOENT|Browser was not found|Could not find Chromium/i.test(error.message)) {
      return { skipped: error.message };
    }
    throw new Error(error.message);
  } finally {
    await wappalyzer.destroy();
  }
};

export const handler = middleware(techStackHandler);
export default handler;

View on GitHub (pinned to af1a97759f)

Solutions

  1. Verify manually (view-source, response headers) whether the site truly exposes detectable fingerprints; if not, the error is correct signal
  2. If it is an SPA, increase wait/analysis time before concluding no technologies were found
  3. Treat this as a soft result ({ technologies: [] }) in the caller rather than an exception

Example fix

// before
const results = await techStackHandler(url); // throws on zero technologies

// after
let results;
try { results = await techStackHandler(url); }
catch (e) { if (e.message === 'Unable to find any technologies for site') results = { technologies: [] }; else throw e; }
Defensive patterns

Strategy: try-catch

Validate before calling

null

Type guard

const hasTechnologies = (r) => !!r && Array.isArray(r.technologies) && r.technologies.length > 0;

Try / catch

try { const r = await techStackHandler(url); }
catch (e) {
  if (e.message === 'Unable to find any technologies for site') return { technologies: [], note: 'no fingerprints detected' };
  throw e;
}

Prevention

When it happens

Trigger: Sites built with frameworks Wappalyzer cannot fingerprint (static HTML, heavily custom stacks), SPA shells that finish analysis before chunks load, or intranet pages where few fingerprints match.

Common situations: Simple brochure sites, custom CMSes without known signatures, newly-released frameworks not in the Wappalyzer ruleset, or aggressive bot-blocking causing degraded page loads that still succeed nominally.


AI-assisted analysis of lissy93/web-check@af1a97759f (2026-08-27). Data as JSON: /api/errors/bd01bb334a40abee. Report an issue: GitHub.