DEV Community

Cover image for Find any website's tech stack in bulk with Python (a pay-per-use BuiltWith / Wappalyzer alternative)
Albin Johansson
Albin Johansson

Posted on

Find any website's tech stack in bulk with Python (a pay-per-use BuiltWith / Wappalyzer alternative)

Want to know which of 500 prospects run Shopify, which use HubSpot, or what analytics and payment tools your competitors use? That's technographics — and the usual tools are subscriptions: BuiltWith starts at $295/month (API access only on higher plans) and Wappalyzer Pro is $250/month.

If you only need it now and then, or want it inside a script, a pipeline or an AI agent, here's how to do it pay-per-website in a few lines of Python.

1. Setup

pip install "apify-client>=3"
export APIFY_TOKEN=...   # free account at console.apify.com
Enter fullscreen mode Exit fullscreen mode

I'm using the Tech Stack Detector on Apify (disclosure: I built it). It returns up to 20 technologies per site with categories, and invalid, offline or undetectable sites aren't charged.

2. Tech stack of a list of domains → CSV

import csv, os
from apify_client import ApifyClient

client = ApifyClient(os.environ["APIFY_TOKEN"])
run = client.actor("jesting_grass/tech-stack-detector").call(run_input={
    "domains": ["allbirds.com", "gymshark.com", "klarna.com", "hubspot.com", "ikea.com"],
})

cols = ["domain", "cms", "ecommerce", "payments", "analytics", "crm", "hosting", "technologyNames"]
with open("tech_stacks.csv", "w", newline="", encoding="utf-8") as f:
    w = csv.DictWriter(f, fieldnames=cols, extrasaction="ignore")
    w.writeheader()
    for row in client.dataset(run.default_dataset_id).iterate_items():
        if "error" not in row:
            w.writerow(row)
            print(f'{row["domain"]:<14} CMS: {row["cms"] or "-":<22} payments: {row["payments"] or "-"}')
Enter fullscreen mode Exit fullscreen mode

Real output (September 2026):

klarna.com     CMS: Contentful             payments: Klarna Checkout
gymshark.com   CMS: Contentful, Shopify    payments: -
allbirds.com   CMS: Shopify                payments: Stripe
ikea.com       CMS: WordPress              payments: -
hubspot.com    CMS: HubSpot CMS Hub        payments: -
Enter fullscreen mode Exit fullscreen mode

Besides the full technologies list, every row has flat columns — cms, ecommerce, payments, analytics, marketingAutomation, crm, hosting, cdn, jsFrameworks — so the CSV drops straight into Sheets or a CRM.

3. Lead generation: keep only sites using a technology

Selling a Shopify app? Only want prospects on HubSpot? Add one field:

run = client.actor("jesting_grass/tech-stack-detector").call(run_input={
    "domains": ["allbirds.com", "gymshark.com", "klarna.com", "hubspot.com", "ikea.com"],
    "onlyDomainsUsing": ["Shopify"],
})
for row in client.dataset(run.default_dataset_id).iterate_items():
    if "error" not in row:
        print(row["domain"], "uses", row["matchedTechnologies"])
Enter fullscreen mode Exit fullscreen mode
gymshark.com uses ['Shopify']
allbirds.com uses ['Shopify']
Enter fullscreen mode Exit fullscreen mode

Feed it domains from anywhere — a lead list, a CRM export, Google Maps or search results.

4. No Python? One HTTP call

curl -X POST "https://api.apify.com/v2/acts/jesting_grass~tech-stack-detector/run-sync-get-dataset-items?token=$APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"domains":["stripe.com","allbirds.com"]}'
Enter fullscreen mode Exit fullscreen mode

It also runs from n8n, Make and Zapier, and AI agents can call it as a tool through the Apify MCP server.

A note on accuracy

Any tech-stack detector — BuiltWith and Wappalyzer included — can only see what a website exposes publicly: scripts, headers, cookies, markup. Back-office tools that leave no trace on the site can't be detected by anyone. Treat results as strong signals, not a complete inventory.


All examples (Python CSV export, Shopify lead filter, Node.js, cURL): github.com/emiohr/builtwith-wappalyzer-alternative. Questions or feature requests — drop a comment.

This article was written with AI assistance and all code was tested against the live API. Not affiliated with BuiltWith or Wappalyzer.

Top comments (0)