DEV Community

DAPDEV
DAPDEV

Posted on

Reverse Engineer Any SaaS Company's Tech Stack in 10 Seconds

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
Enter fullscreen mode Exit fullscreen mode

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))
Enter fullscreen mode Exit fullscreen mode

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)
Enter fullscreen mode Exit fullscreen mode

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)
Enter fullscreen mode Exit fullscreen mode

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)
Enter fullscreen mode Exit fullscreen mode

Sample output might look like:

=== linear.app ===
  CDN: Cloudflare
  Frontend: React, Next.js
  Analytics: Segment, Google Analytics
  Hosting: Vercel
Enter fullscreen mode Exit fullscreen mode

Practical Use Cases

Once you have this data, you can:

  1. Generate a report — export to CSV or PDF for stakeholders
  2. Track changes over time — run the script weekly and diff the results to spot when a competitor migrates to a new framework
  3. Feed into a CRM — enrich lead records with technology data for better sales targeting
  4. 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)