# Shopify Store Analyzer (Apps, Theme & Catalog) (`datamole/shopify-store-analyzer`) Actor

Analyze any Shopify store from its domain. Get installed apps, theme and version, product count, price range, discounts, newest products, top vendors, currency, country and Shop Pay status, plus public emails and social profiles. Built for competitor research and ecommerce lead lists.

- **URL**: https://apify.com/datamole/shopify-store-analyzer.md
- **Developed by:** [DataMole](https://apify.com/datamole) (community)
- **Categories:** E-commerce, Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $15.00 / 1,000 result-items

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

![DataMole](https://raw.githubusercontent.com/YoiderD/datamole-assets/main/banner.png)

## 🛍️ Shopify Store Analyzer: Apps, Theme & Catalog

> **Paste Shopify store domains and see how each store is built and what it sells.** Installed apps, theme and version, product count, price range, discounts, newest products, top vendors, shipping countries and Shop Pay status, plus public emails and social profiles.

> 🕒 **Last updated:** 2026-10-05 · **45+ fields** per store · **7,600+ technology fingerprints** · **up to 25,000 products analyzed per store**

**Shopify Store Analyzer** reads the public data that every Shopify storefront exposes (store profile, product catalog and homepage code) and turns it into one clean row per store. It detects installed apps like Klaviyo, Yotpo, Judge.me or Attentive, including the ones Shopify loads in the background, reads the theme name and version, and summarizes the catalog: prices, discounts, stock, vendors and the latest launches.

| 🎯 Who uses it | 💡 What for |
|---|---|
| Ecommerce brands, Shopify agencies and app developers, dropshippers, market researchers, B2B sales teams selling to merchants | Competitor research, lead lists of Shopify merchants by app or theme, pricing benchmarks, tracking new product launches, qualifying prospects |

### 📋 What you get per store

- 🏪 **Store profile:** store name, description, myshopify domain, shop ID, country, state, city, currency, locale, published product and collection counts, shipping countries, Shop Pay and Shop Pay Installments status.
- 🎨 **Theme:** theme name, theme schema (for example Dawn), version, Shopify Theme Store ID and whether it is a custom theme.
- 🧩 **Apps and stack:** installed apps plus tools grouped into reviews, email and SMS, loyalty and referrals, upsells and widgets, search, live chat, analytics, advertising, payments, shipping, translation, cookie consent and accessibility, and tracking IDs (GA4, GTM, Google Ads, Meta Pixel...).
- 📦 **Catalog summary:** products analyzed, lowest, highest, median and average price, share of products on sale and in stock, variants per product, products published in the last 30 days, latest and earliest publish dates, top vendors, product types and tags.
- 🆕 **Latest products:** the 5 newest products with title, link, price, compare-at price, image and publish date.
- 📇 **Contacts:** public emails and phones from the homepage and contact pages, and social profiles.

### ⚙️ Input

| Field | What it does |
|---|---|
| `stores` | Store domains or URLs. Custom domains and myshopify.com addresses both work. |
| `maxProductsPerStore` | Products read from the public catalog for the summary (default 1,000, up to 25,000). Set 0 to skip the catalog. The total product count is always returned. |
| `includeApps` | Detect installed apps and the tech stack (default on). |
| `includeContacts` | Public emails, phones and social profiles (default on). |
| `maxItems` | Cap the number of stores. |

**Example: compare three competitors**

```json
{
    "stores": ["allbirds.com", "tentree.com", "colourpop.com"]
}
```

**Example: fast app and theme check for a long lead list, without the catalog**

```json
{
    "stores": ["brooklinen.com", "gymshark.com"],
    "maxProductsPerStore": 0
}
```

### 📊 Output

Real record from a run (shortened lists):

```json
{
    "imageUrl": "https://cdn.shopify.com/s/files/1/2341/3995/files/tentreeWordmarkLogo_RGB.jpg?height=628&pad_color=ffffff&v=1614739015&width=1200",
    "storeName": "Tentree",
    "domain": "tentree.com",
    "url": "https://www.tentree.com",
    "myshopifyDomain": "tentree-development-store.myshopify.com",
    "country": "US",
    "province": "California",
    "city": "Fontana",
    "currency": "USD",
    "publishedProducts": 6512,
    "publishedCollections": 289,
    "shipsToCountriesCount": 143,
    "shopPayEnabled": true,
    "shopPayInstallments": true,
    "themeName": "Production Candidate US - Locally",
    "themeSchemaName": "Shopify Theme Lab",
    "isCustomTheme": true,
    "appCount": 7,
    "apps": ["Attentive", "Automizely", "Klaviyo", "Sections.design Shopify App Optimization", "Shop Pay", "Yotpo Loyalty & Referrals", "Yotpo Reviews"],
    "stack": {
        "reviews": ["Yotpo Reviews"],
        "emailAndSms": ["Automizely", "Klaviyo"],
        "loyaltyAndReferrals": ["Yotpo Loyalty & Referrals"],
        "payments": ["Apple Pay", "Google Pay", "PayPal", "Recharge", "Shop Pay", "Venmo"]
    },
    "trackingIds": { "googleAnalytics4": ["G-E4DZXECTM4"], "googleTagManager": ["GTM-WJ5B25K"], "googleAds": ["AW-1012196914"] },
    "productsAnalyzed": 1000,
    "priceMin": 5,
    "priceMax": 368,
    "priceMedian": 68,
    "priceAverage": 68.73,
    "discountedProductsPercent": 32.6,
    "inStockProductsPercent": 93.3,
    "averageVariantsPerProduct": 4.4,
    "productsPublishedLast30Days": 16,
    "latestProductPublishedAt": "2026-10-01T21:55:31.000Z",
    "topProductTypes": [{ "name": "Womens", "count": 401 }, { "name": "Mens", "count": 398 }, { "name": "Accessories", "count": 197 }],
    "latestProducts": [
        { "title": "Morrell Sweater", "url": "https://www.tentree.com/products/morrell-sweater-warm-oak-nep", "price": 88, "compareAtPrice": null, "publishedAt": "2026-10-01T21:55:31.000Z" }
    ],
    "emails": ["support@tentree.com"],
    "socialProfiles": { "instagram": "https://instagram.com/tentree", "facebook": "https://facebook.com/tentree", "youtube": "https://youtube.com/@tentree" }
}
```

Catalog fields describe the products analyzed (`productsAnalyzed`), which can be fewer than `publishedProducts` on large stores. Raise `maxProductsPerStore` to cover the whole catalog.

### ✨ Why this one

- ✅ **Finds background apps.** Many Shopify apps load through Shopify's own script loader instead of normal script tags. This Actor reads that list too, so it catches apps that page scanners miss.
- ✅ **Real numbers only.** No made-up revenue or traffic estimates. Every figure comes from the store's public data.
- ✅ **Catalog insight,** not just a product dump: price distribution, discount share, stock and launch pace in one row.
- ✅ **One row per store,** with clear errors (not charged) for sites that are not Shopify stores.

### 🚀 How to use

1. Create a free Apify account.
2. Open the Actor and paste your store domains.
3. Click **Start**.
4. Download the results or send them to Google Sheets, Make, Zapier, n8n or the API. Schedule it weekly to track competitors' apps, prices and launches.

### 💼 Use cases

- **Ecommerce brands:** benchmark competitors' prices, discounts, apps and launch pace.
- **Shopify app developers and agencies:** build lead lists of stores that use, or lack, a given app or theme.
- **Dropshippers and product researchers:** spot vendors, product types and new launches.
- **Sales teams:** qualify merchants by catalog size, country, currency and stack before outreach.

### ❓ FAQ

**Do I need access to the store?** No. The Actor only reads data that Shopify makes public on every storefront.

**Why does a store show as "not a Shopify store"?** Either it does not run on Shopify, or it uses a custom headless frontend that hides the standard Shopify data. Those rows are errors and are not charged.

**What if a store blocks the request?** Some stores rate-limit automated visits. The row shows the HTTP status as an error, and it is not charged.

**Can you estimate revenue or traffic?** No. Those would be guesses, and every field here comes from real public data.

**Why are some apps missing?** Apps that only run on checkout or in the admin, or that load after user interaction, cannot be seen from the storefront.

**On the free Apify plan?** Runs return a preview of up to 10 stores. Any paid Apify plan unlocks all results.

### 🔌 Integrations

Works with the Apify API, schedules, webhooks, Google Sheets, HubSpot (via Make, Zapier or n8n), Slack and any tool that reads JSON.

### 🕳️ More from DataMole

| Actor | What it does |
|---|---|
| [Tech Stack Detector](https://apify.com/datamole/tech-stack-detector) | Full technology profile of any website, with versions and a deep browser mode |
| [Company Enrichment](https://apify.com/datamole/company-enrichment) | Firmographics, contacts and tech stack for any company domain |
| [SEO & GEO Audit](https://apify.com/datamole/seo-geo-audit) | SEO and AI search readiness scores with prioritized fixes |

**Need a field we don't cover yet?** Open an issue on this Actor. We read everything.

### ⚖️ Disclaimer

This Actor reads publicly available storefront data. It is not affiliated with or endorsed by Shopify Inc. or any store it analyzes. Technology detection uses fingerprints from the open source webappanalyzer project (GPL-3.0). Use the data responsibly and in line with applicable laws and each site's terms.

# Actor input Schema

## `stores` (type: `array`):

Store domains or URLs. Custom domains and myshopify.com addresses both work. Duplicates are removed.

## `maxItems` (type: `integer`):

Hard cap for the whole run. Leave empty for no cap.

## `maxProductsPerStore` (type: `integer`):

Products read from the public catalog to compute price range, discounts, stock, vendors and newest products. Set 0 to skip the catalog. The total product count is always returned.

## `includeApps` (type: `boolean`):

Detect installed Shopify apps and tools like reviews, email and SMS, loyalty, upsells, search, chat, analytics and ad pixels from 7,600+ fingerprints.

## `includeContacts` (type: `boolean`):

Public emails and phones from the homepage and up to 2 contact pages, plus social profiles.

## `proxyConfiguration` (type: `object`):

Not needed for most stores.

## Actor input object example

```json
{
  "stores": [
    "allbirds.com",
    "gymshark.com",
    "colourpop.com"
  ],
  "maxProductsPerStore": 1000,
  "includeApps": true,
  "includeContacts": 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 = {
    "stores": [
        "allbirds.com",
        "gymshark.com",
        "colourpop.com"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("datamole/shopify-store-analyzer").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 = { "stores": [
        "allbirds.com",
        "gymshark.com",
        "colourpop.com",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("datamole/shopify-store-analyzer").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 '{
  "stores": [
    "allbirds.com",
    "gymshark.com",
    "colourpop.com"
  ]
}' |
apify call datamole/shopify-store-analyzer --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,datamole/shopify-store-analyzer"
        }
    }
}
```

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/xZSJiSzwqXh7VldWn/builds/zjRMZ3FC9oLD9iuZ4/openapi.json
