# 🔍 Shopify Store Detector — Theme, Apps & Tech Stack Spy (`nexgendata/shopify-store-detector`) Actor

Reverse-engineer any Shopify store: detect theme, 55+ installed apps (Klaviyo, Judge.me, Yotpo, ReCharge), full tech stack & Shopify plan. BuiltWith alternative at 1/100th the cost. Essential for e-commerce agencies, app developers & competitive research.

- **URL**: https://apify.com/nexgendata/shopify-store-detector.md
- **Developed by:** [Stephan Corbeil](https://apify.com/nexgendata) (community)
- **Categories:** E-commerce, AI
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per usage

This Actor is paid per platform usage. The Actor is free to use, and you only pay for the Apify platform usage, which gets cheaper the higher subscription plan you have.

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

## 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

## Shopify Store Detector -- Theme, Apps & Tech Stack Analysis

Instantly analyze any Shopify store to uncover its **theme**, **installed apps**, and **full technology stack**. Whether you are a competitive intelligence analyst, an e-commerce agency building client proposals, or a SaaS company prospecting Shopify merchants, this actor gives you a complete technical fingerprint of any Shopify storefront. **Detect 55+ app categories, identify the active theme, and score tech maturity -- all from a single URL.**

### Key Features

- **Theme Detection** -- Identifies the active Shopify theme name and version by analyzing the `Shopify.theme` JavaScript object and storefront markup.
- **App Detection Across 55+ Categories** -- Detects installed apps across 12 major categories: reviews, email marketing, loyalty programs, upsell/cross-sell, analytics, live chat, SEO, shipping, subscriptions, marketing automation, page builders, and personalization.
- **Shopify Plan Identification** -- Determines whether the store is on Basic, Shopify, Advanced, or Plus based on checkout and feature signals.
- **Tech Stack Fingerprinting** -- Identifies third-party scripts, payment gateways, analytics tools, CDN providers, and custom integrations beyond the Shopify app ecosystem.
- **Tech Maturity Scoring** -- Generates a composite score based on the number and sophistication of installed tools, helping you segment stores by technical readiness.
- **Bulk Analysis** -- Pass a list of store URLs and analyze hundreds of competitors in a single run. Results are returned per-store with consistent schema.
- **Tracker Mode** -- Schedule recurring runs to monitor when competitors add, remove, or change apps. Get alerted to tech stack shifts that signal strategic moves.
- **Competitive Benchmarking** -- Compare app adoption patterns across multiple stores to identify industry-standard tools and emerging trends.

### Output Example

Each result contains a full technical profile of the analyzed store:

```json
{
  "url": "https://gymshark.com",
  "shopifyPlan": "Plus",
  "theme": {
    "name": "Custom / Bespoke",
    "themeStoreId": null
  },
  "detectedApps": {
    "reviews": ["Yotpo"],
    "email": ["Klaviyo"],
    "loyalty": ["LoyaltyLion"],
    "upsell": ["ReConvert"],
    "analytics": ["Google Analytics 4", "Hotjar"],
    "chat": ["Gorgias"],
    "seo": ["JSON-LD for SEO"],
    "shipping": ["ShipBob"]
  },
  "totalAppsDetected": 14,
  "techMaturityScore": 87,
  "paymentGateways": ["Shopify Payments", "PayPal", "Klarna"],
  "cdnProvider": "Cloudflare"
}
````

### How to Use

1. **Provide store URLs** -- Enter one or more Shopify store URLs (e.g., `https://gymshark.com`). The actor automatically validates that each URL is a Shopify store.
2. **Configure detection depth** -- Choose whether to run a quick scan (theme and top apps only) or a deep analysis (full tech stack, maturity scoring, and plan detection).
3. **Run the actor** -- Click "Start" in the Apify Console or trigger via API. Each store typically completes in 5-15 seconds.
4. **Review and export** -- Browse results in the Apify Console, download as JSON/CSV, or push to Google Sheets, CRMs, or webhooks for immediate action.

### Integration Examples

**Python SDK**

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_API_TOKEN")
run = client.actor("nexgendata/shopify-store-detector").call(
    run_input={
        "urls": [
            "https://gymshark.com",
            "https://allbirds.com",
            "https://bombas.com"
        ]
    }
)
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item["url"], item["totalAppsDetected"], item["techMaturityScore"])
```

**cURL**

```bash
curl "https://api.apify.com/v2/acts/nexgendata~shopify-store-detector/runs?token=YOUR_API_TOKEN" \
  -X POST \
  -H "Content-Type: application/json" \
  -d '{"urls": ["https://gymshark.com", "https://allbirds.com"]}'
```

### Use Cases

- **E-commerce Agencies** -- Audit a potential client's Shopify tech stack before the sales call. Show up with a detailed analysis of their current tools and specific upgrade recommendations.
- **SaaS Sales Teams** -- Prospect Shopify merchants based on technology gaps. If a store has no loyalty app installed, that is a qualified lead for your loyalty platform.
- **Competitive Intelligence Analysts** -- Monitor how top DTC brands evolve their tech stacks over time. Identify trends like the shift from Mailchimp to Klaviyo before they become obvious.
- **App Developers** -- Understand adoption patterns for your app category. See which competitor apps are most commonly installed alongside yours and identify partnership opportunities.
- **Investors & VCs** -- Evaluate the technical sophistication of portfolio companies or acquisition targets by scoring their technology maturity against industry benchmarks.
- **Shopify Merchants** -- Reverse-engineer the tech stacks of brands you admire. See exactly which apps power their reviews, email, loyalty, and upsell experiences.

### FAQ

**What are the rate limits?**
The actor handles rate limiting automatically and spaces requests to avoid detection. You can safely analyze 500+ stores per run without any configuration.

**How fresh is the data?**
Every run performs live analysis against the target store. There is no caching or stale data -- you always get the current tech stack as of the moment the actor runs.

**What output formats are supported?**
JSON, CSV, Excel, and XML. You can also push results directly to Google Sheets, Slack, HubSpot, or any webhook endpoint via Apify integrations.

**How much does it cost?**
This actor uses pay-per-event pricing at $0.015 per store analyzed plus $0.01 per actor start. Analyzing 100 stores costs approximately $1.51. See the pricing table below.

**How does this compare to BuiltWith or Wappalyzer?**
BuiltWith charges $295/mo and Wappalyzer charges $250/mo for Shopify-specific tech detection. This actor provides deeper Shopify-specific analysis (theme detection, plan identification, 55+ app categories) at a fraction of the cost with no monthly commitment.

**Can I access this via API?**
Yes. Full REST API access plus official Python, JavaScript, and Node.js SDKs. Trigger runs, poll for results, and manage schedules programmatically.

### Pricing

| Metric | Cost |
|---|---|
| Cost per store analyzed | $0.015 |
| Cost per actor start | $0.01 |
| 100 stores | $1.51 |
| 1,000 stores | $15.01 |
| 10,000 stores | $150.01 |
| **BuiltWith (competitor)** | **$295/mo** |
| **Wappalyzer (competitor)** | **$250/mo** |
| **Manual research (2 hrs @ $50/hr)** | **$100 per store** |

Analyzing 1,000 Shopify stores costs just $15 -- less than a single month of BuiltWith or Wappalyzer, and you keep the data forever.

### Why Choose This Actor

- **Shopify-specific depth** -- Unlike generic tech detection tools, this actor understands the Shopify ecosystem deeply. It detects apps that BuiltWith and Wappalyzer miss entirely.
- **55+ app categories** -- The most comprehensive Shopify app detection on the market, covering reviews, email, loyalty, upsell, analytics, chat, SEO, shipping, subscriptions, marketing, page builders, and personalization.
- **Tech maturity scoring** -- Go beyond raw app lists with a composite score that lets you segment and prioritize stores by technical sophistication.
- **No monthly subscription** -- Pay only for what you use. No contracts, no minimums, no wasted spend on months you do not run analysis.

### Get Started

New to Apify? [Sign up here](https://apify.com/?fpr=2ayu9b) to get started with $5 in free credits -- enough to analyze hundreds of Shopify stores for free.

### Related Shopify Actors

NexGenData offers a complete Shopify intelligence suite. Each actor targets a different use case:

| Actor | What It Does | Best For |
|-------|-------------|----------|
| [Shopify Revenue Estimator](https://apify.com/nexgendata/shopify-analyzer) | Revenue estimates, theme & app detection, traffic analysis | Competitive due diligence, investor research |
| [Shopify Product Extractor](https://apify.com/nexgendata/shopify-store-analyzer) | Full product catalogs with prices, variants, inventory | Dropshipping, price monitoring |
| [Shopify Product Scraper](https://apify.com/nexgendata/shopify-product-scraper) | Lightweight product data via /products.json | Quick product lookups, data pipelines |
| [Shopify Store Detector](https://apify.com/nexgendata/shopify-store-detector) | Theme, 55+ app fingerprints, tech stack, Shopify plan | Tech stack analysis, market research |
| [Shopify App Store Scraper](https://apify.com/nexgendata/shopify-app-store-scraper) | App listings, reviews, pricing, ratings from apps.shopify.com | App market intelligence, competitor tracking |

[Sign up for Apify](https://apify.com?fpr=2ayu9b) to get started with $5 in free credits every month.

# Actor input Schema

## `storeUrls` (type: `array`):

List of Shopify store URLs to analyze. Provide full URLs like https://allbirds.com or https://gymshark.com. The actor will detect themes, apps, and tech stack for each store.

## `maxResults` (type: `integer`):

Maximum number of store URLs to process from the input list. Use this to limit processing when providing large URL lists.

## `outputMode` (type: `string`):

Select 'raw' for basic detection data (theme, apps, tech stack). Select 'tracker' for advanced competitive intelligence including maturity scores, insights, and app combination analysis.

## Actor input object example

```json
{
  "storeUrls": [
    "https://allbirds.com",
    "https://gymshark.com"
  ],
  "maxResults": 20,
  "outputMode": "tracker"
}
```

# 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 = {
    "storeUrls": [
        "https://allbirds.com",
        "https://gymshark.com"
    ],
    "maxResults": 20,
    "outputMode": "tracker"
};

// Run the Actor and wait for it to finish
const run = await client.actor("nexgendata/shopify-store-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 = {
    "storeUrls": [
        "https://allbirds.com",
        "https://gymshark.com",
    ],
    "maxResults": 20,
    "outputMode": "tracker",
}

# Run the Actor and wait for it to finish
run = client.actor("nexgendata/shopify-store-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 '{
  "storeUrls": [
    "https://allbirds.com",
    "https://gymshark.com"
  ],
  "maxResults": 20,
  "outputMode": "tracker"
}' |
apify call nexgendata/shopify-store-detector --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "🔍 Shopify Store Detector — Theme, Apps & Tech Stack Spy",
        "description": "Reverse-engineer any Shopify store: detect theme, 55+ installed apps (Klaviyo, Judge.me, Yotpo, ReCharge), full tech stack & Shopify plan. BuiltWith alternative at 1/100th the cost. Essential for e-commerce agencies, app developers & competitive research.",
        "version": "0.0",
        "x-build-id": "wuRyMu4ZyYaEYdaOW"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/nexgendata~shopify-store-detector/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-nexgendata-shopify-store-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/nexgendata~shopify-store-detector/runs": {
            "post": {
                "operationId": "runs-sync-nexgendata-shopify-store-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/nexgendata~shopify-store-detector/run-sync": {
            "post": {
                "operationId": "run-sync-nexgendata-shopify-store-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": [
                    "storeUrls"
                ],
                "properties": {
                    "storeUrls": {
                        "title": "Store URLs",
                        "type": "array",
                        "description": "List of Shopify store URLs to analyze. Provide full URLs like https://allbirds.com or https://gymshark.com. The actor will detect themes, apps, and tech stack for each store.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "maxResults": {
                        "title": "Max Results",
                        "minimum": 1,
                        "maximum": 100,
                        "type": "integer",
                        "description": "Maximum number of store URLs to process from the input list. Use this to limit processing when providing large URL lists.",
                        "default": 20
                    },
                    "outputMode": {
                        "title": "Output Mode",
                        "enum": [
                            "raw",
                            "tracker"
                        ],
                        "type": "string",
                        "description": "Select 'raw' for basic detection data (theme, apps, tech stack). Select 'tracker' for advanced competitive intelligence including maturity scores, insights, and app combination analysis.",
                        "default": "raw"
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
