I wanted to know what technologies my top 5 competitors were using. Google it? Useless. Run Wappalyzer on each one manually? Fine for one site. But I had 50 sites and I wanted the results in a spreadsheet, not a browser tab.
Here's the 25-line script I built. It runs in Node.js 18+ with no npm install, takes about 15 minutes to set up, and outputs a markdown table you can paste anywhere.
What SnapAPI's /analyze endpoint returns
The SnapAPI analyze endpoint runs a real Chromium browser against any URL and returns structured JSON in a single call:
{
"technologies": ["React", "Next.js", "Vercel", "Stripe.js"],
"word_count": 1842,
"primary_cta": "Start for free",
"navigation": ["Products", "Solutions", "Pricing", "Docs"],
"load_time_ms": 412
}
One call. No Puppeteer setup. No DOM parsing. The tech detection covers 30+ frameworks and services — React, Vue, Next.js, Nuxt, Vercel, Cloudflare, Stripe, Intercom, Segment, and more.
The full script
// tech-audit.js
// Audits competitor tech stacks and prints a markdown table.
// Requirements: Node.js 18+ — no npm install needed.
// Usage: SNAPAPI_KEY=your_key node tech-audit.js
const API_KEY = process.env.SNAPAPI_KEY;
if (!API_KEY) { console.error('Set SNAPAPI_KEY env var. Free key at https://snapapi.tech'); process.exit(1); }
const COMPETITORS = [
'https://stripe.com/pricing',
'https://notion.so/pricing',
'https://linear.app/pricing',
// Add as many as you want — each costs 1 API call
];
async function analyze(url) {
const res = await fetch(
`https://api.snapapi.tech/v1/analyze?url=${encodeURIComponent(url)}&api_key=${API_KEY}`
);
if (!res.ok) throw new Error(`${res.status}: ${await res.text()}`);
return res.json();
}
async function main() {
const results = [];
for (const url of COMPETITORS) {
process.stdout.write(`Analyzing ${url} ... `);
try {
const data = await analyze(url);
results.push({
url,
technologies: (data.technologies || []).join(', ') || '—',
cta_count: (data.cta || (data.primary_cta ? [data.primary_cta] : [])).length,
word_count: data.word_count ?? '—',
});
console.log('done');
} catch (err) {
console.log(`ERROR: ${err.message}`);
results.push({ url, technologies: 'error', cta_count: '—', word_count: '—' });
}
await new Promise(r => setTimeout(r, 500)); // be polite to the API
}
// Print markdown table
console.log('\n| URL | Technologies | CTA Count | Word Count |');
console.log('|-----|-------------|-----------|------------|');
for (const r of results) {
console.log(`| ${r.url} | ${r.technologies} | ${r.cta_count} | ${r.word_count} |`);
}
}
main().catch(err => { console.error(err.message); process.exit(1); });
Run it:
export SNAPAPI_KEY=your_key_here
node tech-audit.js
Sample output
Analyzing https://stripe.com/pricing ... done
Analyzing https://notion.so/pricing ... done
Analyzing https://linear.app/pricing ... done
| URL | Technologies | CTA Count | Word Count |
|-----|-------------|-----------|------------|
| https://stripe.com/pricing | React, Next.js, Vercel, Stripe.js | 2 | 1842 |
| https://notion.so/pricing | React, Next.js, Segment, Intercom | 3 | 1204 |
| https://linear.app/pricing | React, Next.js, Cloudflare | 2 | 890 |
Paste that table straight into Notion, a GitHub comment, or a Slack message. Takes about 5 seconds per URL.
Taking it further
Save to CSV — add
const fs = require('fs'); fs.writeFileSync('audit.csv', results.map(r => Object.values(r).join(',')).join('\n'));after the table output. One line.Schedule daily with cron —
0 9 * * 1 SNAPAPI_KEY=your_key node /path/to/tech-audit.js >> ~/audit.logruns every Monday morning. You'll see tech stack changes before anyone tells you about them.Compare week-over-week — save a JSON snapshot each run and diff against last week's. The open-source automation-health-monitor already does this — it watches for CTA changes, word count shifts, and tech stack changes, and alerts you the moment something differs.
Get started
SnapAPI gives you 100 free calls/month — enough to run this audit weekly for 15 competitors with no cost. The Starter plan ($9/mo) gives you 1,000 calls if you need more scale.
Sign up at snapapi.tech — API key in about 30 seconds, no credit card.
Top comments (0)