# Website Tech Stack Detector (`myagizm/website-tech-stack-detector`) Actor

Inspect public website HTML and response headers for evidence-backed CMS, ecommerce, framework, CDN, payments, and analytics technologies. Returns matching signals and their evidence; focused fingerprint set, not a full commercial catalog.

- **URL**: https://apify.com/myagizm/website-tech-stack-detector.md
- **Developed by:** [MYM](https://apify.com/myagizm) (community)
- **Categories:** Developer tools, SEO tools, Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$1.00 / 1,000 technology scan results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Website Tech Stack Detector — evidence-backed technology fingerprints

Inspect a public website and identify technology signals in its HTML resources, markup, generator metadata and response headers. Results include the matching evidence, category and confidence so detections can be reviewed instead of treated as a black box.

This Actor uses a focused, transparent fingerprint set. It is not a complete Wappalyzer or BuiltWith catalog, and a technology is reported only when a supported signature is present in the fetched page.

No API key or login is required. Direct access is tried first; an ordinary network denial may use a small, bounded set of configured fallback routes. It does not bypass sign-in or explicit bot-verification challenges and stops on those responses.

### What you get

| Field | Description |
|---|---|
| `domain` | Hostname of the inspected page. |
| `pageTitle` | Page title when present. |
| `technologyNames` | Flat list of detected technology names. |
| `technologyCount` | Number of detections for the page. |
| `technologies` | Detection name, category, confidence and signature evidence. |
| `inputUrl` / `finalUrl` | Supplied URL and final URL after public redirects. |
| `httpStatus` | HTTP status of the inspected page. |
| `contentType` | Response content type. |
| `source` | Indicates detections came from public HTML and response headers. |

A successful page is stored even if no supported fingerprint matches; in that case `technologyNames` and `technologies` are empty arrays and `technologyCount` is zero. Invalid input fails with zero dataset rows and zero result events.

### Supported fingerprint families

The current set includes Shopify, WooCommerce, WordPress, Next.js, React, Vue.js, Angular, Drupal, Gatsby, Cloudflare, Google Tag Manager, Google Analytics, Stripe and Meta Pixel. Coverage is intentionally narrower than a full commercial technology database.

### Input

```json
{
  "urls": [
    "https://www.shopify.com/",
    "https://wordpress.org/",
    "https://nextjs.org/"
  ],
  "maxUrls": 50,
  "timeoutSeconds": 300
}
```

- `urls`: 1–100 public HTTP/HTTPS URLs.
- `maxUrls`: maximum pages inspected, 1–100; also the maximum number of result events.
- `timeoutSeconds`: global deadline, 20–540 seconds.

Private/reserved IP addresses, local hostnames, credential-bearing URLs and unsafe redirects are rejected. Sign-in and explicit bot-verification walls are not bypassed.

### Pricing

Pay per successfully inspected webpage. The rate is below the closest publicly priced technology-detector comparison; see the live Actor page for the current price. No paid detection API is used.

### Free plan limits

Free Apify accounts can request up to 40 pages per day for this Actor; paid plans are unlimited. The daily allowance counts pages requested. When it runs out, the Actor reports the limit in its status and does not turn a quota block into a failed run.

### Example output

```json
{
  "inputUrl": "https://store.example/",
  "finalUrl": "https://store.example/",
  "domain": "store.example",
  "pageTitle": "Store",
  "httpStatus": 200,
  "contentType": "text/html; charset=utf-8",
  "technologyNames": ["Shopify", "Cloudflare"],
  "technologyCount": 2,
  "technologies": [
    {"name": "Shopify", "category": "ecommerce", "confidence": "high", "evidence": ["cdn.shopify.com"]},
    {"name": "Cloudflare", "category": "cdn", "confidence": "high", "evidence": ["Server: cloudflare"]}
  ],
  "source": "public HTML and response headers"
}
```

The example values show the output shape only. Each run reports only signatures observed on its input pages.

### Common questions

**Is this a full Wappalyzer replacement?** No. It is a small, evidence-bearing detector, not a full commercial technology catalog. Use the evidence fields to review every match.

**Does it inspect source code or private APIs?** No. It reads only the supplied public webpage, its public redirects and response headers.

**Does it work on every website?** No. Client-rendered pages, hidden infrastructure and unsupported fingerprints may produce no technology matches. A successful inspection still returns the page record.

**Does it bypass login or bot verification?** No. It stops on sign-in or explicit verification challenges. A bounded network fallback is only for ordinary access failures; it does not rotate accounts or identities.

### 中文说明 — 网站技术栈检测

检查公开网页的 HTML 资源、标记、生成器元数据和响应头，识别可验证的技术指纹。每项检测都包含证据、类别与置信度，便于复核，而不是把结果当作黑箱结论。

当前版本是一个范围有限、透明可审计的指纹集合，并非完整的 Wappalyzer 或 BuiltWith 商业目录。只有页面中出现已支持的特征时才会报告该技术。

无需 API Key 或登录。优先直接访问；普通网络拒绝时可以使用有限的备用路线。不会绕过登录或明确的机器人验证页面，遇到这类响应会停止。

#### 输出字段

- `domain`：被检查页面的主机名。
- `pageTitle`：页面标题（若有）。
- `technologyNames`：检测到的技术名称列表。
- `technologyCount`：检测项数量。
- `technologies`：技术名称、类别、置信度与匹配证据。
- `inputUrl` / `finalUrl`：输入地址与公开重定向后的最终地址。
- `httpStatus` / `contentType`：响应状态与内容类型。
- `source`：表示结果来自公开 HTML 和响应头。

页面成功读取后即会保存结果，即使没有匹配的指纹；此时技术列表为空、数量为 0。无效输入会使运行失败，数据集为空且不产生结果事件。

#### 支持的指纹

当前版本包括 Shopify、WooCommerce、WordPress、Next.js、React、Vue.js、Angular、Drupal、Gatsby、Cloudflare、Google Tag Manager、Google Analytics、Stripe 与 Meta Pixel。覆盖范围小于完整商业技术库。

#### 输入示例

```json
{
  "urls": ["https://www.shopify.com/", "https://wordpress.org/", "https://nextjs.org/"],
  "maxUrls": 50,
  "timeoutSeconds": 300
}
```

`urls` 支持 1–100 个公开 HTTP/HTTPS 地址；`maxUrls` 为页面数量与结果事件上限；全局运行时限为 20–540 秒。私有/保留 IP、本地主机名、带账号密码的地址及不安全重定向会被拒绝。不会绕过登录或明确的机器人验证页面。

#### 免费套餐限制

Apify 免费套餐每个用户每天最多请求本 Actor 检查 40 个页面；付费套餐不受此限制。按请求页面数计入每日额度；额度用尽时会在状态中说明，不会将限额误报为运行失败。

#### 常见问题

**这是完整的 Wappalyzer 替代品吗？** 不是。它是小型、证据可见的指纹检测器，不包含完整商业技术目录。请检查每项证据。

**它会调用私有 API 或访问源代码仓库吗？** 不会，只读取输入页面公开返回的 HTML、公开重定向与响应头。

**每个网站都能检测到技术吗？** 不一定。客户端渲染、隐藏基础设施或不支持的指纹可能导致技术列表为空，但成功读取的页面仍会返回记录。

**会绕过登录或机器人验证吗？** 不会。遇到登录或明确的验证页面会停止；普通网络拒绝可尝试有限的备用路线，但不会轮换账号或身份。

### Disclaimer

Technology matches are best-effort signals, not proof of ownership, deployment or security posture. Verify evidence before making business or security decisions.

### Errors & billing

Input errors finish with status SUCCEEDED, no results and no charge; see the OUTPUT record for the reason.

#### 错误与计费

输入错误会以 SUCCEEDED 状态结束，无结果且不收费；原因请查看 OUTPUT 记录。

# Actor input Schema

## `urls` (type: `array`):

Public HTTP or HTTPS URLs to inspect. Each successfully inspected webpage creates one dataset result, including pages where no known fingerprint matches.

## `maxUrls` (type: `integer`):

Maximum public webpages inspected in one run. This also caps the number of billable results.

## `timeoutSeconds` (type: `integer`):

Global deadline for all URLs in the run.

## Actor input object example

```json
{
  "urls": [
    "https://www.shopify.com/",
    "https://wordpress.org/",
    "https://nextjs.org/"
  ],
  "maxUrls": 50,
  "timeoutSeconds": 300
}
```

# Actor output Schema

## `results` (type: `string`):

Detected technologies and evidence shown in the overview table.

## `fullJson` (type: `string`):

Full detections, categories, confidence and evidence for every inspected page.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "urls": [
        "https://www.shopify.com/",
        "https://wordpress.org/",
        "https://nextjs.org/"
    ],
    "maxUrls": 50,
    "timeoutSeconds": 300
};

// Run the Actor and wait for it to finish
const run = await client.actor("myagizm/website-tech-stack-detector").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "urls": [
        "https://www.shopify.com/",
        "https://wordpress.org/",
        "https://nextjs.org/",
    ],
    "maxUrls": 50,
    "timeoutSeconds": 300,
}

# Run the Actor and wait for it to finish
run = client.actor("myagizm/website-tech-stack-detector").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "urls": [
    "https://www.shopify.com/",
    "https://wordpress.org/",
    "https://nextjs.org/"
  ],
  "maxUrls": 50,
  "timeoutSeconds": 300
}' |
apify call myagizm/website-tech-stack-detector --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,myagizm/website-tech-stack-detector"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/QzZwywfdIfahLvXZh/builds/gGPBgwofyaEbX44pl/openapi.json
