Ever wonder what tech stack your competitors are running? Whether it's their frontend framework, CDN provider, analytics platform, or CMS — you can detect all of it programmatically in seconds.
In this tutorial, I'll show you how to build a Python script that reverse-engineers the technology stack of any SaaS company's website. We'll detect 141+ technologies including frameworks, CMS platforms, hosting providers, CDNs, and analytics tools.
Why Reverse-Engineer Tech Stacks?
There are solid reasons to detect what technologies a website is running:
- Competitive analysis — understand what tools your competitors rely on
- Sales prospecting — qualify leads based on the technologies they use (e.g., find companies running Shopify or WordPress)
- Market research — track technology adoption trends across an industry
- Due diligence — evaluate a company's technical maturity before investing or partnering
Doing this manually with browser extensions is slow and doesn't scale. Let's automate it.
Setup
We'll use the Technology Detection API on RapidAPI. It takes a URL and returns every detectable technology on that site.
First, subscribe to the API on RapidAPI to get your API key.
Install requests if you haven't already:
pip install requests
Basic Detection: One Website
Let's start with a simple script that detects the tech stack of a single website:
import requests
import json
RAPIDAPI_KEY = "YOUR_RAPIDAPI_KEY"
def detect_tech_stack(url):
response = requests.get(
"https://technology-detection-api.p.rapidapi.com/detect",
params={"url": url},
headers={
"x-rapidapi-host": "technology-detection-api.p.rapidapi.com",
"x-rapidapi-key": RAPIDAPI_KEY,
},
)
response.raise_for_status()
return response.json()
result = detect_tech_stack("https://shopify.com")
print(json.dumps(result, indent=2))
The API returns structured data with each detected technology, its category (e.g., "JavaScript framework", "CDN", "Analytics"), and confidence level.
Scanning Multiple Competitors
Now let's scale this up. Say you're researching the project management SaaS space and want to compare tech stacks across competitors:
import requests
import time
from collections import defaultdict
RAPIDAPI_KEY = "YOUR_RAPIDAPI_KEY"
API_URL = "https://technology-detection-api.p.rapidapi.com/detect"
HEADERS = {
"x-rapidapi-host": "technology-detection-api.p.rapidapi.com",
"x-rapidapi-key": RAPIDAPI_KEY,
}
competitors = [
"https://asana.com",
"https://monday.com",
"https://notion.so",
"https://clickup.com",
"https://linear.app",
]
def detect_tech_stack(url):
resp = requests.get(API_URL, params={"url": url}, headers=HEADERS)
resp.raise_for_status()
return resp.json()
def scan_competitors(urls):
results = {}
for url in urls:
print(f"Scanning {url}...")
try:
data = detect_tech_stack(url)
technologies = data.get("technologies", [])
results[url] = technologies
except Exception as e:
print(f" Error: {e}")
results[url] = []
time.sleep(1) # be polite with rate limits
return results
all_results = scan_competitors(competitors)
Building a Comparison Matrix
The raw data is useful, but a comparison table is more actionable. Let's build one:
def build_comparison(results):
# Collect all unique technologies
all_techs = set()
for techs in results.values():
for t in techs:
name = t.get("name") or t.get("technology", "Unknown")
all_techs.add(name)
# Build the matrix
print(f"
{'Technology':<30}", end="")
short_names = {}
for url in results:
short = url.replace("https://", "").rstrip("/")
short_names[url] = short
print(f"{short:<18}", end="")
print()
print("-" * (30 + 18 * len(results)))
for tech in sorted(all_techs):
print(f"{tech:<30}", end="")
for url in results:
found = any(
(t.get("name") or t.get("technology", "")) == tech
for t in results[url]
)
print(f"{'YES':<18}" if found else f"{'--':<18}", end="")
print()
build_comparison(all_results)
This prints a clean table showing which technologies each competitor uses — immediately revealing patterns like "4 out of 5 use Cloudflare" or "only one uses Next.js."
Categorized Summary
For a higher-level view, group technologies by category:
def categorized_summary(url, technologies):
categories = defaultdict(list)
for tech in technologies:
cat = tech.get("category", "Other")
name = tech.get("name") or tech.get("technology", "Unknown")
categories[cat].append(name)
domain = url.replace("https://", "").rstrip("/")
print(f"
=== {domain} ===")
for category, techs in sorted(categories.items()):
print(f" {category}: {', '.join(techs)}")
for url, techs in all_results.items():
categorized_summary(url, techs)
Sample output might look like:
=== linear.app ===
CDN: Cloudflare
Frontend: React, Next.js
Analytics: Segment, Google Analytics
Hosting: Vercel
Practical Use Cases
Once you have this data, you can:
- Generate a report — export to CSV or PDF for stakeholders
- Track changes over time — run the script weekly and diff the results to spot when a competitor migrates to a new framework
- Feed into a CRM — enrich lead records with technology data for better sales targeting
- Benchmark yourself — compare your own stack against industry norms
Wrapping Up
With a few lines of Python and the Technology Detection API, you can reverse-engineer any company's tech stack at scale. No browser extensions, no manual guessing — just structured data you can plug into your workflows.
The API detects 141+ technologies across categories like CMS, frameworks, CDNs, analytics, hosting, and more. Subscribe on RapidAPI to start building.
What would you build with this? Drop a comment below — I'm curious to see what use cases you come up with.
Top comments (0)