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:
- Open the site in a browser
- View source, grep for
wp-content(WordPress?) or__next(Next.js?) - Open DevTools, check response headers for
X-Powered-By - Install Wappalyzer browser extension... but that only works in the browser
- 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
- 50+ 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%}")
Output:
Next.js (frontend) — confidence: 95%
Vercel (hosting) — confidence: 95%
AWS (Amazon Web Services) (cdn) — confidence: 90%
HSTS (security) — confidence: 90%
HTTP/3 (server) — confidence: 90%
Google Tag Manager (analytics) — confidence: 75%
OneTrust (marketing) — confidence: 75%
Real-world example: detect allbirds.com's full stack (16 technologies)
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://allbirds.com"}'
{
"url": "https://allbirds.com",
"cached": false,
"technologies": [
{"name": "Cloudflare", "category": "cdn", "confidence": 0.99},
{"name": "Shopify", "category": "ecommerce", "confidence": 0.99},
{"name": "HSTS", "category": "security", "confidence": 0.95},
{"name": "HTTP/3", "category": "server", "confidence": 0.90},
{"name": "OneTrust", "category": "privacy", "confidence": 0.90},
{"name": "Amplitude", "category": "analytics", "confidence": 0.90},
{"name": "Segment", "category": "analytics", "confidence": 0.90},
{"name": "Google Tag Manager", "category": "analytics", "confidence": 0.90},
{"name": "Vue.js", "category": "frontend", "confidence": 0.90},
{"name": "Alpine.js", "category": "frontend", "confidence": 0.90},
{"name": "reCAPTCHA", "category": "security", "confidence": 0.90},
{"name": "hCaptcha", "category": "security", "confidence": 0.90},
{"name": "jQuery", "category": "javascript", "confidence": 0.90, "version": "3.6.0"},
{"name": "TrackJs", "category": "analytics", "confidence": 0.75},
{"name": "jsDelivr", "category": "cdn", "confidence": 0.75},
{"name": "Lightbox", "category": "javascript", "confidence": 0.75}
]
}
One call. 16 technologies. CDN, ecommerce platform, analytics stack, frontend framework, privacy tooling, security — the complete picture.
Use case 1: GTM / Sales Prospecting
Enrich your CRM with tech stack data before outreach:
import requests
import csv
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"
# Enrich your leads
leads = ["https://acme.com", "https://globex.com", "https://initech.com"]
for lead in leads:
cms = get_cms(lead)
print(f"{lead}: {cms}")
Use case 2: Competitive intelligence
Find which of your competitors' clients are using their platform:
def uses_technology(url, tech_name):
techs = detect_tech_stack(url)
names = [t["name"].lower() for t in techs]
return tech_name.lower() in names
# Check if a site uses HubSpot
sites = ["https://stripe.com", "https://twilio.com", "https://sendgrid.com"]
for site in sites:
print(f"{site} uses HubSpot: {uses_technology(site, 'HubSpot')}")
Use case 3: Bulk enrichment with the /batch endpoint
The API has a native /batch endpoint — send up to 50 URLs in a single request, all processed in parallel:
import requests
resp = requests.post(
"https://techstackdetect1.p.rapidapi.com/batch",
json={
"urls": [
"https://notion.so",
"https://linear.app",
"https://figma.com",
"https://github.com",
"https://vercel.com",
]
},
headers={
"X-RapidAPI-Key": "YOUR_RAPIDAPI_KEY",
"X-RapidAPI-Host": "techstackdetect1.p.rapidapi.com",
}
)
data = resp.json()
print(f"Processed: {data['stats']['total']} URLs, {data['stats']['successful']} succeeded")
for result in data["results"]:
techs = [t["name"] for t in result["technologies"][:3]]
print(f" {result['url']}: {', '.join(techs)}")
Output:
Processed: 5 URLs, 5 succeeded
https://notion.so: Next.js, Cloudflare, Vercel
https://linear.app: Next.js, Cloudflare, AWS
https://figma.com: Next.js, AWS CloudFront, Netlify
https://github.com: AWS, HSTS, Ruby on Rails
https://vercel.com: Next.js, Vercel, HSTS
The response also includes stats: {total, successful, failed, cached, fresh} — useful for monitoring batch success rates. Results are cached for 24h, so repeat calls are instant.
JavaScript (Node.js) example
async function detectTechStack(url) {
const res = await fetch("https://techstackdetect1.p.rapidapi.com/detect", {
method: "POST",
headers: {
"Content-Type": "application/json",
"X-RapidAPI-Key": process.env.RAPIDAPI_KEY,
"X-RapidAPI-Host": "techstackdetect1.p.rapidapi.com",
},
body: JSON.stringify({ url }),
});
return res.json();
}
const result = await detectTechStack("https://github.com");
result.technologies.forEach(({ name, category, confidence }) => {
console.log(`${name} [${category}] ${(confidence * 100).toFixed(0)}%`);
});
Pricing
Available on RapidAPI with a free tier:
| Plan | Price | Requests |
|---|---|---|
| BASIC | Free | 100/day |
| PRO | $19/mo | 5,000/day |
| ULTRA | $79/mo | 50,000/day |
How it works under the hood
TechStackDetect uses a multi-signal detection engine:
-
HTTP headers —
X-Powered-By,Server,X-Generator, security headers (HSTS, CSP) - HTML patterns — meta tags, script src patterns, data attributes, class names
- DNS — CNAME records for CDN/hosting detection
- TLS certificates — issuer-based infrastructure detection
-
JavaScript globals —
window.React,window.__NEXT_DATA__, etc.
Each signal contributes to a confidence score. Multi-signal detections get a bonus — React detected via both script src and window.React gets 0.99 confidence, not 0.75.
TL;DR
If you need to detect website tech stacks programmatically:
-
One POST request for single URLs (
/detect) -
Batch mode for up to 50 URLs in parallel (
/batch) - 5,000+ technologies, 50+ categories
- Confidence scores (0.75–0.99) + version numbers
- Free tier, no credit card needed
- Live demo — try any URL right now without signing up at api.techstackdetect.com
- Works in Python, JavaScript, curl, or any HTTP client
Tags: api python javascript webdev productivity
Top comments (0)