DEV Community

Dex
Dex

Posted on

How to Detect Any Website's Tech Stack in One API Call (with Confidence Scores)

Need to know if a prospect is using WordPress or Shopify? React or Angular? Nginx or Cloudflare? One API call tells you — and gives you a confidence score for each detection.


The problem: website tech stack detection is tedious

If you're doing sales prospecting, lead enrichment, or competitive intelligence, you've probably ended up in this loop:

  1. Open the site in a browser
  2. View source, grep for wp-content (WordPress?) or __next (Next.js?)
  3. Open DevTools, check response headers for X-Powered-By
  4. Install Wappalyzer browser extension... but that only works in the browser
  5. Realize you need to do this for 500 leads

There's a better way. One POST request.


TechStackDetect API: what it does

TechStackDetect analyzes any public website URL and returns:

  • 5,000+ technology signatures — frameworks, CMS, CDN, analytics, hosting, security, and more
  • Confidence scores (0.0–1.0) — so you know how certain each detection is
  • Version numbers when detectable
  • 48 categories — frontend, backend, hosting, ecommerce, monitoring, marketing, and more

Quick start: 3 lines of code

import requests

resp = requests.post(
    "https://techstackdetect1.p.rapidapi.com/detect",
    json={"url": "https://notion.so"},
    headers={
        "X-RapidAPI-Key": "YOUR_RAPIDAPI_KEY",
        "X-RapidAPI-Host": "techstackdetect1.p.rapidapi.com",
    }
)

for tech in resp.json()["technologies"]:
    print(f"{tech['name']} ({tech['category']}) — confidence: {tech['confidence']:.0%}")
Enter fullscreen mode Exit fullscreen mode

Output:

Next.js (frontend) — confidence: 95%
Vercel (hosting) — confidence: 95%
AWS (Amazon Web Services) (cdn) — confidence: 90%
HTTP/3 (server) — confidence: 90%
Google Tag Manager (analytics) — confidence: 75%
Enter fullscreen mode Exit fullscreen mode

Real-world example: detect woocommerce.com's full stack

curl -X POST https://techstackdetect1.p.rapidapi.com/detect \
  -H "Content-Type: application/json" \
  -H "X-RapidAPI-Key: YOUR_RAPIDAPI_KEY" \
  -H "X-RapidAPI-Host: techstackdetect1.p.rapidapi.com" \
  -d '{"url": "https://woocommerce.com"}'
Enter fullscreen mode Exit fullscreen mode
{
  "url": "https://woocommerce.com",
  "technologies": [
    {"name": "WordPress", "category": "cms", "confidence": 0.95, "version": "6.7"},
    {"name": "Nginx", "category": "server", "confidence": 0.95},
    {"name": "Google Tag Manager", "category": "analytics", "confidence": 0.90},
    {"name": "Yoast SEO", "category": "seo", "confidence": 0.75}
  ]
}
Enter fullscreen mode Exit fullscreen mode

Use case 1: Sales Prospecting

API_KEY = "YOUR_RAPIDAPI_KEY"
HEADERS = {
    "X-RapidAPI-Key": API_KEY,
    "X-RapidAPI-Host": "techstackdetect1.p.rapidapi.com",
}

def detect_tech_stack(url):
    r = requests.post(
        "https://techstackdetect1.p.rapidapi.com/detect",
        json={"url": url},
        headers=HEADERS,
    )
    return r.json().get("technologies", [])

def get_cms(url):
    techs = detect_tech_stack(url)
    cms = [t["name"] for t in techs if t["category"] == "cms"]
    return cms[0] if cms else "Unknown"

leads = ["https://acme.com", "https://globex.com", "https://initech.com"]
for lead in leads:
    print(f"{lead}: {get_cms(lead)}")
Enter fullscreen mode Exit fullscreen mode

Use case 2: Competitive intelligence

def uses_technology(url, tech_name):
    techs = detect_tech_stack(url)
    return tech_name.lower() in [t["name"].lower() for t in techs]

sites = ["https://stripe.com", "https://twilio.com", "https://sendgrid.com"]
for site in sites:
    print(f"{site} uses HubSpot: {uses_technology(site, 'HubSpot')}")
Enter fullscreen mode Exit fullscreen mode

Use case 3: Async batch enrichment

import asyncio, httpx

async def detect_batch(urls):
    async with httpx.AsyncClient() as client:
        tasks = [client.post("https://techstackdetect1.p.rapidapi.com/detect", json={"url": u}, headers=HEADERS) for u in urls]
        responses = await asyncio.gather(*tasks)
        return [r.json() for r in responses]

urls = ["https://notion.so", "https://linear.app", "https://figma.com"]
results = asyncio.run(detect_batch(urls))
for r in results:
    print(r["url"], "", len(r["technologies"]), "techs")
Enter fullscreen mode Exit fullscreen mode

Pricing

Plan Price Requests
BASIC Free 100/day
PRO $19/mo 5,000/day
ULTRA $79/mo 50,000/day

Try it free on RapidAPI →

Top comments (0)