# WordPress Stack Detector - Theme, Host, 30 Plugin Fingerprints (`fetchcraft/wordpress-stack-detector`) Actor

Bulk WordPress detection from any URL list. Returns WP version, active theme, hosting provider, and 30+ recognized plugin signatures (Elementor, Yoast, Rank Math, Divi, WPForms, WP Rocket, Jetpack, more). Cheapest WP technographic lookup. $0.02 per site. Free preview.

- **URL**: https://apify.com/fetchcraft/wordpress-stack-detector.md
- **Developed by:** [Emily Ward](https://apify.com/fetchcraft) (community)
- **Categories:** Lead generation, Marketing, Business
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

$20.00 / 1,000 domain 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/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

## WordPress + Plugin + Theme Stack Detector

Given a list of domains, detects which ones run WordPress and profiles the install. Returns rich per-site data using only public, no-auth endpoints.

### What it detects

- **Is it WordPress?** Eight independent signals: meta generator tag, /wp-content/ asset paths, /wp-includes/ paths, /wp-json REST API, x-pingback header, wp-emoji JS, wp-block-* CSS classes, /xmlrpc.php.
- **WordPress version** from generator tag, readme.html, or wp-json discovery.
- **Active theme**: theme slug and stylesheet path from /wp-content/themes/ asset paths.
- **30+ plugin fingerprints**: WooCommerce, Elementor, Yoast SEO, RankMath, Contact Form 7, WPForms, Gravity Forms, WPML, Polylang, ACF, MailPoet, ConvertKit, Mailchimp for WP, OptinMonster, Sumo, Beaver Builder, Divi, WP Rocket, Litespeed Cache, W3 Total Cache, WP Super Cache, Jetpack, BuddyPress, bbPress, LearnPress, LearnDash, MemberPress, Easy Digital Downloads, The Events Calendar, Astra, OceanWP, GeneratePress.
- **Host hint**: WP Engine, Kinsta, Pressable, Pantheon, Bluehost, SiteGround, GoDaddy from response headers + asset CDNs.
- **WooCommerce flag**: dedicated check for cart/checkout endpoints and Woo CSS classes.
- **Locale + character set** from html lang attribute.

### Why use this

Every B2B tool targeting WordPress sites (managed hosts, SEO suites, page builders, security plugins, e-commerce SaaS) needs to filter "is this prospect on WordPress" and "what plugins are they already running" so the outbound message can reference the actual stack. WordPress runs ~43% of all websites, this actor profiles them in bulk.

### Input

```json
{
  "domains": ["techcrunch.com", "etsy.com", "bbcamerica.com"],
  "include_non_wordpress": true,
  "deep_probe": true,
  "preview": false
}
````

### Pricing

- **US$0.02 per domain.** Pay per domain checked.
- Preview mode runs the first domain free.

### Output

```json
{
  "domain": "techcrunch.com",
  "is_wordpress": true,
  "confidence": 1.0,
  "signals": ["generator_tag", "wp_content", "wp_json", "wp_includes"],
  "wp_version": "6.4.3",
  "theme_name": "techcrunch-2024",
  "host_hint": "WP Engine",
  "is_woocommerce": false,
  "plugins_detected": ["Yoast SEO", "Jetpack", "WP Rocket"],
  "plugin_count": 3,
  "locale": "en-US",
  "checked_at": "2026-05-31T09:00:00Z"
}
```

### Pairs well with

- [Shopify Store Detector](https://apify.com/fetchcraft/shopify-store-detector): combine to segment any domain list into Shopify / WordPress / Other.
- [Email Finder & Verifier](https://apify.com/fetchcraft/email-finder-verifier): enrich detected WordPress prospects with admin/founder emails.
- [Contact Details Extractor](https://apify.com/fetchcraft/contact-details-extractor): pull every email, phone, social profile from a detected WP site in one pass.
- [AI Sales Personalizer](https://apify.com/fetchcraft/ai-sales-personalizer): feed plugin stack into outreach copy ("I see you're running Elementor + WPForms but not yet using X").
- [DNS + Email Footprint](https://apify.com/fetchcraft/dns-email-footprint): pair the plugin stack with email-vendor and SaaS-stack data for a complete prospect picture.
- [SaaS Spend Scanner](https://apify.com/fetchcraft/saas-spend-scanner): cross-reference detected WordPress plugins with broader SaaS-stack monthly spend.

Deep-dive landing page: https://ai-sales-personalizer.vercel.app/scrapers/wordpress-stack-detector

### Limitations

- Sites that aggressively strip generator meta and rewrite asset paths can be missed. Confidence < 0.5 means signals are inconsistent.
- Plugin fingerprints depend on the plugin injecting detectable asset tags or CSS classes. Some plugins run server-side only and won't appear.
- WordPress.com hosted sites behave slightly differently; host detection will return "WordPress.com" when applicable.

### Integrations

This actor works out of the box with every Apify-supported integration:

- **API**: call via Apify API or any official SDK (Python, JavaScript, PHP, .NET). Returns a clean dataset URL.
- **Schedule**: set a daily, weekly, or custom cron cadence in Apify Console. Combine with `notification` for fresh feeds.
- **Webhooks**: wire `ACTOR.RUN.SUCCEEDED` to Slack, Discord, Zapier, Make, n8n, Pipedream, or any HTTPS endpoint.
- **MCP**: this actor is discoverable through Apify's hosted MCP server at `mcp.apify.com` for Claude, Cursor, Cline, Windsurf, and other MCP clients.
- **n8n / Make / Zapier**: native HTTP-Request integration. Trigger the actor on schedule, pipe results to Google Sheets, Airtable, your CRM, or any database.

### Try it free

Every Apify user gets **$5/month in free platform credits** (around 250 events at this actor's per-event price). Run preview mode first to confirm output shape before scaling.

New to Apify? [Sign up here](https://apify.com/sign-up?fpr=fetchcraft) to get free credits on signup.

### What's New

- 2026-06-03: Metadata, categories, and SEO refreshed. Latest version live on Apify Store.

### Last Updated

2026-06-03

# Actor input Schema

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

Domains or root URLs to check (e.g. "example.com" or "https://example.com").

## `include_non_wordpress` (type: `boolean`):

If false, only domains detected as WordPress are written to the dataset.

## `deep_probe` (type: `boolean`):

Also fetch /wp-json, /readme.html, /wp-login.php for richer fingerprints (one extra request per domain).

## `preview` (type: `boolean`):

Run only the first domain. Free, no charge.

## Actor input object example

```json
{
  "domains": [
    "techcrunch.com",
    "etsy.com",
    "bbcamerica.com"
  ],
  "include_non_wordpress": true,
  "deep_probe": true,
  "preview": false
}
```

# 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": [
        "techcrunch.com",
        "etsy.com",
        "bbcamerica.com"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("fetchcraft/wordpress-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 = { "domains": [
        "techcrunch.com",
        "etsy.com",
        "bbcamerica.com",
    ] }

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

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).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": [
    "techcrunch.com",
    "etsy.com",
    "bbcamerica.com"
  ]
}' |
apify call fetchcraft/wordpress-stack-detector --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=fetchcraft/wordpress-stack-detector",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "WordPress Stack Detector - Theme, Host, 30 Plugin Fingerprints",
        "description": "Bulk WordPress detection from any URL list. Returns WP version, active theme, hosting provider, and 30+ recognized plugin signatures (Elementor, Yoast, Rank Math, Divi, WPForms, WP Rocket, Jetpack, more). Cheapest WP technographic lookup. $0.02 per site. Free preview.",
        "version": "0.1",
        "x-build-id": "JLaSkOIPf4VkGDph4"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/fetchcraft~wordpress-stack-detector/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-fetchcraft-wordpress-stack-detector",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/fetchcraft~wordpress-stack-detector/runs": {
            "post": {
                "operationId": "runs-sync-fetchcraft-wordpress-stack-detector",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/fetchcraft~wordpress-stack-detector/run-sync": {
            "post": {
                "operationId": "run-sync-fetchcraft-wordpress-stack-detector",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "required": [
                    "domains"
                ],
                "properties": {
                    "domains": {
                        "title": "Domains",
                        "type": "array",
                        "description": "Domains or root URLs to check (e.g. \"example.com\" or \"https://example.com\").",
                        "items": {
                            "type": "string"
                        }
                    },
                    "include_non_wordpress": {
                        "title": "Include non-WordPress results",
                        "type": "boolean",
                        "description": "If false, only domains detected as WordPress are written to the dataset.",
                        "default": true
                    },
                    "deep_probe": {
                        "title": "Deep probe",
                        "type": "boolean",
                        "description": "Also fetch /wp-json, /readme.html, /wp-login.php for richer fingerprints (one extra request per domain).",
                        "default": true
                    },
                    "preview": {
                        "title": "Preview mode (free)",
                        "type": "boolean",
                        "description": "Run only the first domain. Free, no charge.",
                        "default": false
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
