# Shopify Store Scraper: Theme Detector, Apps, Products (`hirethomas/shopify-store-analyzer`) Actor

Shopify store scraper and theme detector: for any list of websites, check if it runs Shopify, which theme, currency, country, product and collection counts, price range, top vendors, installed apps (Klaviyo, Judge.me...), socials and contact emails.

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

## Pricing

from $3.00 / 1,000 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 Scraper: Theme Detector, Apps, Products

Give it a list of websites. For each one you get a single clean row telling you whether it runs on Shopify and, if it does, what is behind it.

### What you get per store

- **Shopify detection** with the signals found (x-shopid header, cdn.shopify.com assets, Shopify.theme object)
- **Store info:** store name, description, myshopify domain, country, city/province, currency, locale, ships-to countries
- **Theme:** theme name, theme id, Theme Store id
- **Catalog:** published product count, published collection count
- **Products (optional):** products scanned, variants, min / max / average price, top vendors, top product types, newest and oldest publish dates, and a sample of products with URL, price, compare-at price, availability and image
- **Installed apps and tags** spotted on the homepage: Klaviyo, Judge.me, Yotpo, Okendo, Loox, Stamped, Gorgias, Recharge, Privy, Attentive, Postscript, Omnisend, Rebuy, Smile.io, Afterpay, Klarna, Meta Pixel, TikTok Pixel, Google Analytics, GTM, Hotjar, Clarity and more
- **Social links:** Instagram, Facebook, TikTok, X/Twitter, YouTube, Pinterest, LinkedIn
- **Contacts:** emails and phone numbers published on the homepage

### Use cases

- Qualify Shopify leads for an agency, app or service before outreach
- Competitor research: theme, apps, pricing and catalog size of other stores
- Market mapping: which apps and themes a niche uses
- Clean a lead list: drop non-Shopify sites

### Input

Paste domains or URLs (one per line). Turn product scanning off for faster checks. Example:

```json
{ "storeUrls": ["allbirds.com", "gymshark.com"], "includeProducts": true, "maxProductPages": 4 }
```

### Output sample (shortened)

Real row from a test run on kyliecosmetics.com (lists cut for length):

```json
{
  "inputUrl": "kyliecosmetics.com",
  "isShopify": true,
  "shopifySignals": ["cdn.shopify.com assets", "Shopify.theme object", "myshopify domain"],
  "storeName": "Kylie Cosmetics",
  "myshopifyDomain": "kylie-jenner-us.myshopify.com",
  "themeName": "SYNC | OCT REFRESH | DO NOT DELETE",
  "themeRole": "main",
  "currency": "USD",
  "country": "US",
  "city": "New York",
  "publishedProductsCount": 244,
  "publishedCollectionsCount": 227,
  "shipsToCountries": ["AU", "CA", "MX", "NZ", "US", "..."],
  "productsScanned": 244,
  "variantsScanned": 693,
  "priceMin": 0,
  "priceMax": 300,
  "priceAvg": 41.52,
  "topVendors": [{ "name": "kylie-cosmetics", "count": 160 }, { "name": "kylie-fragrance", "count": 48 }],
  "topProductTypes": [{ "name": "Bundle", "count": 109 }, { "name": "Set", "count": 27 }]
}
```

A site that is not on Shopify still gets a row, with `"isShopify": false`, its title and any social links, emails and phones found.

### Pricing

Pay per result: you pay only for stores checked, see the pricing tab. No proxies or logins needed.

### Notes

Uses only public pages and the public Shopify storefront feeds (/meta.json, /products.json). Some stores disable /products.json; the row then says productsJsonAvailable false and still returns the store info.

#### FAQ

##### How do I check if a website uses Shopify?

Paste the URLs. Every row says whether the site runs Shopify, and for Shopify stores adds the theme, currency, country and catalog data.

##### Can I detect which Shopify theme a store uses?

Yes. The theme name and ID come straight from the store's public pages, with no app install or login.

##### Can I see which Shopify apps a store has installed?

The Actor detects common apps (reviews, email, upsell, chat and others) from the scripts the store loads. Apps that leave no public trace cannot be seen.

##### Can I use it to build a list of Shopify stores?

Yes. Run it over a list of candidate sites to keep the Shopify ones and their public contact emails and socials.

# Actor input Schema

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

Websites to check, e.g. allbirds.com or https://www.gymshark.com. Non-Shopify sites return isShopify false with basic info.

## `storeUrlsText` (type: `string`):

Optional: paste many domains or URLs separated by new lines, spaces or commas.

## `includeProducts` (type: `boolean`):

Read the public product feed for price range, vendors, product types and a product sample. Turn off for faster store-only checks.

## `maxProductPages` (type: `integer`):

Each page holds up to 250 products. 4 pages = up to 1,000 products scanned per store.

## `maxProductsInRow` (type: `integer`):

How many products (title, URL, price, availability, image) to include in each store row. 0 keeps only the summary.

## `maxStores` (type: `integer`):

Upper limit on stores processed in this run.

## `concurrency` (type: `integer`):

How many stores are checked in parallel.

## Actor input object example

```json
{
  "storeUrls": [
    "allbirds.com",
    "gymshark.com",
    "kyliecosmetics.com"
  ],
  "includeProducts": true,
  "maxProductPages": 4,
  "maxProductsInRow": 20,
  "maxStores": 10000,
  "concurrency": 5
}
```

# Actor output Schema

## `results` (type: `string`):

One row per store: Shopify detection, theme, currency, counts, prices, apps, socials and contacts.

# 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",
        "gymshark.com",
        "kyliecosmetics.com"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("hirethomas/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",
        "gymshark.com",
        "kyliecosmetics.com",
    ] }

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

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,hirethomas/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/8n662uck4Y5avqzvK/builds/pvSWBUWd1uxDY5mbG/openapi.json
