# E-commerce Theme Detector (`trovevault/ecommerce-theme-detector`) Actor

Detect the active theme of any e-commerce store from its HTML. Works on Shopify, WooCommerce, WordPress, Magento, PrestaShop, Shopware, OpenCart, BigCommerce, Wix, and Squarespace. No API keys. No proxies. Bulk detection in seconds.

- **URL**: https://apify.com/trovevault/ecommerce-theme-detector.md
- **Developed by:** [Trove Vault](https://apify.com/trovevault) (community)
- **Categories:** E-commerce, Developer tools, Integrations
- **Stats:** 14 total users, 0 monthly users, 100.0% runs succeeded, 1 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.28 / 1,000 websites

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — 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

## E-Commerce Theme Detector

Detect the active theme of any e-commerce store from its HTML. Works on Shopify, WooCommerce, WordPress, Magento, PrestaShop, Shopware, OpenCart, BigCommerce, Wix, and Squarespace. No API keys. No proxies. Bulk detection in seconds.

Built for **developers and agencies** benchmarking competitor stores, **theme vendors** tracking market adoption, and **e-commerce consultants** auditing client and competitor tech stacks.

***

### What does E-Commerce Theme Detector return?

For each store URL you provide, the actor returns:

| Detection | Details |
|---|---|
| 🛒 E-commerce platform | Shopify, WooCommerce, Magento, BigCommerce, and 6 more |
| 🎨 Active theme name | Dawn, Flatsome, Astra, Luma, etc. |
| 🔢 Theme version | Exposed version number, if available in the HTML |
| 🆔 Shopify Theme Store ID | Numeric ID linking directly to the theme listing |
| 🔗 Final URL | URL after any redirects |

***

### What can I do with theme detection data?

#### Competitive theme research

Find out which themes your competitors are using. Run a list of stores in your niche and group results by theme to identify industry preferences. Are most beauty brands using Impulse? Is Dawn dominating a certain category?

#### Theme market share analysis

Run a list of stores in a category or region to measure the distribution of themes. Useful for theme developers benchmarking adoption and identifying which themes are gaining or losing market share.

#### Agency audits

Before pitching a redesign, quickly catalogue the current tech stack for a list of prospect stores. Combine with the [E-Commerce Tech Stack Detector](https://apify.com/trovevault/e-commerce-tech-stack-detector) to build a full profile of platform + theme + installed apps.

#### Sales prospecting

Theme vendors can identify stores running competitor or outdated themes and target outreach accordingly. Filter for stores still on deprecated Shopify themes like `Debut` and reach out with a migration pitch.

***

### Why use E-Commerce Theme Detector instead of alternatives?

| Feature | BuiltWith / Wappalyzer | E-Commerce Theme Detector |
|---|---|---|
| Theme name detection | Platform only, no theme name | Full theme name (Dawn, Flatsome, etc.) |
| Shopify Theme Store ID | Not available | ✓ — links directly to theme listing |
| Bulk detection | Paid tier | Any number of stores per run |
| WooCommerce theme slug | Not categorised | ✓ from body class and stylesheet |
| API key required | Yes (paid) | No |
| Export formats | Web UI only | JSON, CSV, Excel |

***

### How to use E-Commerce Theme Detector

1. Add store URLs to the **Store URLs** field — one per line
2. Full URLs (`https://example.com`) or bare domains (`example.com`) both work
3. Enter the **store homepage** — NOT a product or category page. The actor reads homepage HTML and JS to identify the theme.
4. Click **Start**

***

### How much will it cost?

E-Commerce Theme Detector uses a single HTTP request per store — no browser, no proxy required for most stores.

**Typical costs:**

- 10 stores: < $0.01
- 100 stores: < $0.03
- 1,000 stores: < $0.20

Detection runs in 1–3 seconds per store.

**Cost tips:**

- No proxy is needed for most stores — HTTP requests work reliably for theme detection
- For stores that return 403, enable Apify Residential Proxy

See the [Apify pricing page](https://apify.com/pricing) for full pricing details.

***

### How does E-Commerce Theme Detector work?

1. **CheerioCrawler** fetches the raw HTML of the store homepage via a single HTTP request
2. **Platform detection** — checks for platform-specific signals: `cdn.shopify.com`, `wp-content/plugins/woocommerce`, `/pub/static/` (Magento), etc.
3. **Theme extraction** — once the platform is identified, applies platform-specific extraction logic:
   - **Shopify**: reads `window.Shopify.theme` from inline JS — returns theme name + Shopify Theme Store ID
   - **WooCommerce / WordPress**: reads the `<body>` class and stylesheet link for the active theme folder slug
   - **Magento 2**: extracts `{Vendor}/{Theme}` from CSS paths in `/pub/static/frontend/`
   - **Magento 1**: extracts `{package}/{theme}` from `/skin/frontend/` paths
   - **PrestaShop**: reads theme folder name from `/themes/{name}/` in CSS paths
   - **OpenCart**: reads theme folder from `/catalog/view/theme/{name}/`
   - **BigCommerce**: reads `themeName` from inline JS
4. Results are pushed to the Apify dataset

***

### Supported platforms

| Platform | Theme detection | Notes |
|---|---|---|
| **Shopify** | ✅ Name + Theme Store ID | From `window.Shopify.theme` in page source |
| **WooCommerce** | ✅ Theme slug | From `<body>` class and stylesheet link |
| **WordPress** | ✅ Theme slug | From `<body>` class and stylesheet link |
| **Magento 2** | ✅ Vendor/Theme | From `/pub/static/frontend/{Vendor}/{Theme}/` in CSS paths |
| **Magento 1** | ✅ Package/Theme | From `/skin/frontend/{package}/{theme}/` in CSS paths |
| **PrestaShop** | ✅ Theme folder | From `/themes/{name}/` in CSS paths |
| **Shopware** | ✅ Theme bundle name | From asset bundle paths or inline JS |
| **OpenCart** | ✅ Theme folder | From `/catalog/view/theme/{name}/` |
| **BigCommerce** | ✅ Theme name | From inline JS (`themeName`) |
| **Wix** | ⚠️ Platform only | Template name is not exposed in HTML |
| **Squarespace** | ⚠️ Platform only | Template name is not exposed in HTML |

***

### Input examples

**Bare domains:**

```
allbirds.com
gymshark.com
store.example.com
```

**Full URLs:**

```
https://allbirds.com
https://woocommerce.com
https://www.example.com/shop
```

***

### Output fields

| Field | Description |
|---|---|
| `url` | Input URL |
| `platform` | Detected platform (see list above) |
| `theme` | Active theme name |
| `themeVersion` | Theme version, if exposed in the HTML |
| `themeStoreId` | Shopify Theme Store numeric ID (Shopify only) |
| `sourceUrl` | Final URL after any redirects |

***

### Notes on detection

**Theme name format** — For Shopify, the theme name is the human-readable published name (e.g. `Dawn`, `Debut`, `Impulse`). For WooCommerce and WordPress, the theme name is the folder slug (e.g. `storefront`, `astra`, `flatsome`). For Magento, it is the `Vendor/Theme` path.

**Theme null** — If `theme` is null, the platform was detected but the theme name could not be extracted from the HTML. This can happen with heavily customised storefronts, headless setups, or platforms like Wix and Squarespace that do not expose template names in their HTML.

**Platform unknown** — If `platform` is `unknown`, none of the known platform signals were found in the page HTML. The store may be custom-built, use a less common platform, or have blocked the request.

**No JavaScript execution** — This actor analyses the static HTML response and does not execute JavaScript. Theme data that is loaded exclusively via client-side rendering will not be detected.

***

### Frequently asked questions

**Why is `theme` null even though the platform was detected?**
The platform was identified, but the theme name could not be read from the static HTML. This is common on heavily customised storefronts, Wix and Squarespace stores (template names not exposed), and headless setups.

**Can I detect themes on stores I don't own?**
Yes. The actor only fetches publicly accessible homepage HTML — the same content any browser sees. No authentication is required.

**Does this work with headless Shopify stores?**
Headless Shopify stores often do not inject `window.Shopify.theme` into the frontend. Try the `.myshopify.com` subdomain which uses the standard Shopify frontend.

**How do I use the Shopify Theme Store ID?**
The `themeStoreId` is the numeric ID of the theme on the Shopify Theme Store. You can access the theme listing at `themes.shopify.com/themes/{themeStoreId}`.

**How often should I run this for market research?**
Monthly is sufficient for tracking theme adoption trends. Weekly works if you are monitoring a specific competitive set for changes.

**Can I use E-Commerce Theme Detector via the Apify API?**
Yes. Use the [Run Actor](https://docs.apify.com/api/v2#/reference/actors/run-collection/run-actor) endpoint with your actor ID and input JSON. Results are available in the dataset as soon as the run completes.

**Can I use E-Commerce Theme Detector through an MCP Server?**
Yes. Via the [Apify MCP server](https://mcp.apify.com), you can call this actor from any MCP-compatible AI assistant (Claude, ChatGPT, etc.) to detect themes in real time from a conversation.

**Is detecting e-commerce themes legal?**
Yes. The actor reads only the publicly accessible HTML of a store's homepage — the same content any browser receives. No private or login-gated content is accessed.

***

### Related actors

- **[E-Commerce Tech Stack Detector](https://apify.com/trovevault/e-commerce-tech-stack-detector)** — detect the platform and 100+ installed apps (Klaviyo, Gorgias, Klarna, etc.) for any store URL
- **[Shopify Products Scraper](https://apify.com/trovevault/shopify-products-scraper)** — scrape every product from any Shopify store using just the domain
- **[WooCommerce Products Scraper](https://apify.com/trovevault/woocommerce-products-scraper)** — scrape every product from any WooCommerce store via its public REST API

***

### Changelog

#### 2026-03-09 — v0.1.0

- Initial release
- Supports Shopify, WooCommerce, WordPress, Magento 1 & 2, PrestaShop, Shopware, OpenCart, BigCommerce, Wix, Squarespace

***

### Your feedback

Found a bug or have a feature request? [Open an issue](https://github.com/apify/apify-community/issues) or contact us through the Apify platform. Your feedback helps improve this actor for everyone.

# Actor input Schema

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

Homepage URLs or bare domains of stores to detect — use the store homepage, NOT a product or category page. The detector reads the homepage HTML and JS to identify the platform and active theme name. Both https://example.com and example.com are accepted.

## `datasetId` (type: `string`):

ID of an existing Apify dataset to push results into in addition to the default dataset. Useful for combining results from multiple runs or integrating with downstream actors.

## `runId` (type: `string`):

ID of a previous actor run to associate this run with. Used for chaining actors in multi-step pipelines.

## Actor input object example

```json
{
  "urls": [
    "allbirds.com",
    "gymshark.com",
    "woocommerce.com"
  ]
}
```

# Actor output Schema

## `dataset` (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 = {
    "urls": [
        "allbirds.com",
        "gymshark.com",
        "woocommerce.com"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("trovevault/ecommerce-theme-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": [
        "allbirds.com",
        "gymshark.com",
        "woocommerce.com",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("trovevault/ecommerce-theme-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 '{
  "urls": [
    "allbirds.com",
    "gymshark.com",
    "woocommerce.com"
  ]
}' |
apify call trovevault/ecommerce-theme-detector --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

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