# Website Technology Checker – Tech Stack & CMS Lookup (`rowfeed/website-technology-checker`) Actor

Find the tech stack of any website: CMS, e-commerce platform, analytics, ad pixels, marketing and chat tools, payments, frameworks, hosting and CDN. Bulk domains in, one row per site out, grouped by category. $2 per 1,000 websites; sites that block visits are looked up in a technology database.

- **URL**: https://apify.com/rowfeed/website-technology-checker.md
- **Developed by:** [Rowfeed](https://apify.com/rowfeed) (community)
- **Categories:** Lead generation, SEO tools, Developer tools
- **Security:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.00 / 1,000 website checkeds

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 Technology Checker – Tech Stack & CMS Lookup

A BuiltWith and Wappalyzer alternative.

Find out what any website is built with: CMS, e-commerce platform, analytics, ad pixels, marketing automation, live chat, payments, front-end framework, hosting, CDN and more.
Paste a list of domains; get one row per site with every technology found, grouped into columns by category, ready for a spreadsheet or a CRM.
Built for SaaS sales and lead qualification ("which shops run Shopify and Klaviyo?"), agencies, competitor research, investors and AI agents that need a tech stack lookup as JSON. No BuiltWith subscription, no browser extension.

### What you get

- **One row per website**: `cms`, `ecommerce`, `analytics`, `advertising`, `marketing`, `chat`, `payments`, `frameworks`, `hosting`, `servers`, `cdn`, `consent`, `reviews`, `fonts`, `video`, `security`, `monitoring`, `testing`, `search` – each a comma-separated list, empty when nothing in that category was found.
- **`technologies`**: the same as a list of `{name, category, version}`; the version is filled in when the site states it (e.g. `WordPress 6.4.2`).
- **`technology_count`**, `page_title`, `final_url` (after redirects) and `source`: `page` (read live) or `database`.
- **Over 160 technologies**, among them Shopify, WooCommerce, Magento, BigCommerce, WordPress, Webflow, Wix, Squarespace, HubSpot, Klaviyo, Mailchimp, Google Analytics and Tag Manager, Meta Pixel, TikTok Pixel, LinkedIn Insight Tag, Google Ads, Intercom, Zendesk, Stripe, PayPal, Klarna, Next.js, React, Vue, Cloudflare, Vercel, AWS and OneTrust.

### Example output

```json
{
  "query": "apify.com",
  "domain": "apify.com",
  "final_url": "https://apify.com/",
  "status_code": 200,
  "source": "page",
  "technology_count": 8,
  "cms": null,
  "ecommerce": null,
  "analytics": "Google Tag Manager",
  "marketing": "HubSpot",
  "chat": "Intercom",
  "frameworks": "Next.js, Bootstrap",
  "hosting": "Amazon Web Services",
  "cdn": "Amazon CloudFront",
  "security": "HSTS",
  "technologies": [{ "name": "Google Tag Manager", "category": "analytics", "version": null }, "..."]
}
```

### Input

| Field | What it does |
|---|---|
| `domains` | One website per line: a domain (`shopify.com`) or any link on the site. Up to 5,000 per run. |
| `useDatabase` | Sites that refuse automated visits are looked up in a licensed technology database instead (default on, paid Apify plan). Off: they get a free error row. |

### Pricing

Pay per event, no subscription:

- **$0.002 per website checked** ($2 per 1,000).
- $0.02 per technology database lookup, only for sites that answered but refused the live visit (a block or bot challenge). The database bills every lookup, also when it has no data for the site, so that lookup is charged too (the error row says so). Turn it off with `useDatabase: false`.
- $0.001 per run start.
- Sites that cannot be reached, do not exist, time out or have a broken certificate are free; so are sites that refuse the visit when the database is off.

Example: 1,000 websites where 50 refuse the visit cost $1.90 + $1.00 for the 50 database lookups + $0.001.
Cap the cost of a run with the maximum charge setting; no database lookup is made that the budget cannot pay for.

### Good to know

- Each site's home page is read once, like a visitor would, with an honest bot name, within 30 seconds. Nothing is bypassed: a site that blocks bots or shows a challenge page is not read. `www.x.com` and `x.com` count as one site. Addresses inside private networks are never visited.
- Detection uses what the home page reveals: its scripts, styles, meta tags, response headers and cookie names. Tools that only load on other pages, after a click or after cookie consent can be missed; so can back-office software that leaves no trace on the page.
- The database is an earlier crawl, so it can be a few weeks old and lists fewer tools than a live check; rows from it have `source: database`.

### More tools from Rowfeed

- [Subdomain Finder & Scanner](https://apify.com/rowfeed/subdomain-finder) – every subdomain of a domain from certificate logs and passive DNS, with a live check.
- [Shopify Store List](https://apify.com/rowfeed/shopify-store-list) – the other direction: every website that uses a given technology, as a lead list.
- [Website Traffic Checker](https://apify.com/rowfeed/website-traffic-checker) – estimated traffic of any website.
- [DA PA Checker](https://apify.com/rowfeed/da-pa-checker) – domain authority and spam score in bulk.
- [SEO Audit Tool](https://apify.com/rowfeed/seo-site-audit) – page-by-page SEO checks for any website.

Not affiliated with BuiltWith or Wappalyzer.

# Actor input Schema

## `domains` (type: `array`):

One website per line: a domain (shopify.com) or any link on the site. Up to 5,000 per run.

## `useDatabase` (type: `boolean`):

Some sites refuse automated visits. On: look them up in a licensed technology database instead ($0.02 per lookup, also when it has no data). Off: they get a free error row. Needs a paid Apify plan.

## Actor input object example

```json
{
  "domains": [
    "apify.com",
    "https://www.allbirds.com",
    "wordpress.org"
  ],
  "useDatabase": true
}
```

# Actor output Schema

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

No description

# 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 = {
    "domains": [
        "apify.com",
        "wordpress.org",
        "vercel.com"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("rowfeed/website-technology-checker").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 = { "domains": [
        "apify.com",
        "wordpress.org",
        "vercel.com",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("rowfeed/website-technology-checker").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 '{
  "domains": [
    "apify.com",
    "wordpress.org",
    "vercel.com"
  ]
}' |
apify call rowfeed/website-technology-checker --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,rowfeed/website-technology-checker"
        }
    }
}
```

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/hWSpX2K7eQF5SWK4r/builds/NP4vW3hpz4ne8l9yP/openapi.json
