# Shopify Store Analyzer – Theme, Apps & Tech Stack (`anatolia-data/shopify-store-analyzer`) Actor

See which theme and apps any Shopify store uses — Klaviyo, Judge.me, Recharge, Gorgias and 90+ more — plus payment methods, languages and store details. Filter lists by the apps stores use or don't use.

- **URL**: https://apify.com/anatolia-data/shopify-store-analyzer.md
- **Developed by:** [Oğulcan Katmer](https://apify.com/anatolia-data) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $5.00 / 1,000 analyzed stores

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

## Shopify Store Analyzer – Theme, Apps & Tech Stack

Paste a list of Shopify stores and see what each one is built with: **the theme, the apps it runs — Klaviyo, Judge.me, Recharge, Gorgias and 90+ more — its payment methods and the languages it sells in.** One clean row per store.

Then filter: **"stores that use Klaviyo"**, or **"stores with no reviews app"**. Stores that don't match are dropped and cost nothing.

No login, no API key. Everything is read from each store's own public homepage.

### Who uses it

- **Shopify app makers** — find stores using a competitor's app, or stores missing your category entirely
- **Agencies and freelancers** — qualify leads before outreach: theme, stack, markets
- **Theme developers** — see which themes and versions stores run
- **Investors and researchers** — map app adoption across a list of stores

### What you get — one row per store

| Field | Description |
|---|---|
| `themeName`, `themeVersion` | The real theme (Dawn, Impulse, Prestige…), even when the merchant renamed their copy |
| `themeCustomName` | What the merchant called it |
| `isThemeStoreTheme`, `themeStoreId` | Whether it came from the official Theme Store, or is custom |
| `apps`, `appCount` | Every detected app and tool |
| `reviews`, `email`, `sms`, `popups`, `subscriptions`, `loyalty`, `support`, `bnpl`, `upsell`, `search`, `pageBuilder`, `shipping`, `translation`, `crossBorder`, `consent`, `accessibility`, `analytics`, `adPixels` | The same apps, grouped by what they do |
| `paymentMethods` | Payment icons shown on the homepage: Visa, PayPal, Apple Pay, Shop Pay… (empty when the theme hides them) |
| `primaryLanguage`, `languages`, `languageCount` | Languages the store is published in |
| `markets`, `marketCount` | Countries with their own localised storefront (Shopify Markets) — the clearest signal that a store sells internationally |
| `storeName`, `country`, `city`, `currency`, `myshopifyDomain` | From Shopify's public store profile |
| `publishedProductCount` | Catalogue size |
| `status`, `error` | `ok`, `not-shopify` or `unreachable`, with the reason |

### Apps it recognises

| Category | Apps |
|---|---|
| Reviews | Judge.me, Yotpo Reviews, Okendo, Loox, Stamped.io, REVIEWS.io, Trustpilot, Fera, Junip, Bazaarvoice, Air Reviews |
| Email marketing | Klaviyo, Omnisend, Mailchimp, Drip, Sendlane |
| SMS marketing | Attentive, Postscript, SMSBump / Yotpo SMS |
| Pop-ups and forms | Privy, Justuno, Wisepops, OptiMonk, Amped |
| Subscriptions | Recharge, Skio, Loop Subscriptions, Seal Subscriptions, Appstle Subscriptions, Bold Subscriptions |
| Loyalty and referrals | Smile.io, LoyaltyLion, Yotpo Loyalty, Growave, Rivo, ReferralCandy |
| Customer support and chat | Gorgias, Tidio, Zendesk, Intercom, Re:amaze, Richpanel, Kustomer, Freshchat, HubSpot |
| Buy now, pay later | Klarna, Afterpay, Affirm, Sezzle, Zip, Clearpay |
| Upsell and personalisation | Rebuy, Nosto, Dynamic Yield, LimeSpot, Frequently Bought Together |
| Search and filters | Searchanise, Boost Commerce, Algolia, Klevu, Searchspring |
| Page builder | PageFly, GemPages, Shogun, Replo, Zipify Pages |
| Shipping, tracking and returns | Route, AfterShip, Loop Returns, Narvar, ShipStation |
| Translation and currency | Weglot, Langify, Transcy |
| Cross-border commerce | Global-e, Zonos |
| Cookie consent | OneTrust, Cookiebot, Pandectes, Termly |
| Accessibility | accessiBe, UserWay, AudioEye |
| Analytics | Google Tag Manager, Google Analytics, Hotjar, Microsoft Clarity, Triple Whale, Elevar, Lucky Orange, Heap, Segment |
| Ad pixels | Meta Pixel, TikTok Pixel, Pinterest Tag, Snapchat Pixel, Google Ads, Microsoft Ads, Reddit Pixel |

Missing an app you care about? Open an issue with its name and we'll add it.

### How to use it

1. Paste your stores into **Stores**, one per line.
2. Optional: add app names under **Only stores that use any of these apps** or **…use none of these apps**.
3. Click **Start** and download the results as CSV, Excel or JSON.

### How detection works

Apps are recognised by the servers their scripts and widgets load from, not by brand names in the page text — so a store that writes "pay later with Klarna" in a banner is not counted as a Klarna merchant unless Klarna's code is actually on the page. The theme comes from the settings every Shopify theme publishes on the page. It reads only the homepage and the public store profile, and follows each store's robots.txt.

Apps that only load on product or checkout pages, or that run entirely in the Shopify admin, will not show up.

### Pricing

Pay per result: you are charged once for each **Shopify store analyzed**. Non-Shopify sites, unreachable sites and stores removed by your app filters are free.

### Pairs well with

- **[Shopify Store Contact Finder](https://apify.com/anatolia-data/shopify-store-contacts)** — get the email, phone and social profiles of the stores you shortlisted.
- **[Shopify Store Scraper with Catalogue Analytics](https://apify.com/anatolia-data/shopify-store-scraper)** — pull a store's full catalogue with prices, stock and launch-cadence numbers.

# Actor input Schema

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

One store per line. A bare domain is enough — allbirds.com.

## `startUrls` (type: `array`):

Same as above, for long lists loaded from a file or passed from another Actor.

## `mustUseApps` (type: `array`):

Keep only stores where at least one of these apps is detected, for example Klaviyo or Recharge. Spelling is forgiving: judgeme and Judge.me both work. Stores that don't match are not returned and not charged.

## `mustNotUseApps` (type: `array`):

Leave out stores where any of these apps is detected — for example, find stores without a reviews app. Stores that don't match are not returned and not charged.

## `includeNonShopify` (type: `boolean`):

Adds a free row with the reason for every site that is not a Shopify store or could not be loaded. Turn off for a clean export.

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

Apify Proxy is recommended when analyzing many stores at once.

## `maxConcurrency` (type: `integer`):

How many pages are loaded at once.

## Actor input object example

```json
{
  "storeUrls": [
    "allbirds.com",
    "deathwishcoffee.com"
  ],
  "startUrls": [],
  "includeNonShopify": true,
  "proxyConfiguration": {
    "useApifyProxy": true
  },
  "maxConcurrency": 10
}
```

# Actor output Schema

## `stores` (type: `string`):

One row per store: theme, detected apps by category, payment methods, languages and store details.

## `overview` (type: `string`):

Open the dataset in a table view.

# 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": [
        "allbirds.com",
        "deathwishcoffee.com"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("anatolia-data/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 = { "storeUrls": [
        "allbirds.com",
        "deathwishcoffee.com",
    ] }

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

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,anatolia-data/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/2Nu4naCIVuzxL9Nid/builds/OW4qfLCF1wYShUbhw/openapi.json
