# Shopify Competitor Analysis - Size, Stack & Prices (`vonsensey/shopify-competitor-analysis-scraper`) Actor

Profile competitor Shopify stores in one run: catalogue and collection counts, price band, vendors and product types, theme and installed apps, country and currency, and whether they are still shipping new products. A store-level competitor snapshot from a list of domains.

- **URL**: https://apify.com/vonsensey/shopify-competitor-analysis-scraper.md
- **Developed by:** [Blackcube Agency AB](https://apify.com/vonsensey) (community)
- **Categories:** E-commerce, Lead generation, Business
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $4.75 / 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.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#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

## Shopify Competitor Analysis - Size, Stack & Prices

<table style="border-collapse:collapse;width:100%;margin:0 0 4px">
<tr><td colspan="3" style="padding:9px 12px;background:#0B6E75;border:1px solid #0B6E75"><span style="color:#FFFFFF;font-weight:700;font-size:13px;letter-spacing:.3px">Shopify Store Intelligence Suite</span><span style="color:#CFF0F2;font-size:12px"> &nbsp;&bull;&nbsp; 4 Actors, one codebase, one store billed once</span></td></tr>
<tr><td style="padding:9px 12px;border:1px solid #E5E7EB;background:#FFFFFF;vertical-align:top;width:33%"><a href="https://apify.com/vonsensey/shopify-store-leads-scraper" style="color:#111827;font-weight:700;font-size:13px;text-decoration:none">Shopify Store Leads Scraper</a><br><span style="color:#6B7280;font-size:11px">Emails, Apps &amp; Store Size</span></td><td style="padding:9px 12px;border:1px solid #E5E7EB;background:#FFFFFF;vertical-align:top;width:33%"><a href="https://apify.com/vonsensey/myshopify-store-domain-list-scraper" style="color:#111827;font-weight:700;font-size:13px;text-decoration:none">myshopify Domain List Scraper</a><br><span style="color:#6B7280;font-size:11px">Store Handles &amp; URLs</span></td><td style="padding:9px 12px;border:1px solid #E5E7EB;background:#FFFFFF;vertical-align:top;width:33%"><a href="https://apify.com/vonsensey/shopify-theme-detector-scraper" style="color:#111827;font-weight:700;font-size:13px;text-decoration:none">Shopify Theme Detector</a><br><span style="color:#6B7280;font-size:11px">Find Stores by Theme in Bulk</span></td></tr>
<tr><td style="padding:9px 12px;border:1px solid #E5E7EB;background:#ECFDF5;vertical-align:top;width:33%"><span style="color:#0B6E75;font-weight:700;font-size:13px">Shopify Competitor Analysis</span><br><span style="color:#0B6E75;font-size:11px;font-weight:600">&#10148; You are here</span></td></tr>
</table>

**More from this account:** [YouTube Transcript Suite](https://apify.com/vonsensey/youtube-transcript-scraper) · [Website Contact & Email Suite](https://apify.com/vonsensey/website-contact-email-extractor) · [Career Site & ATS Jobs Suite](https://apify.com/vonsensey/career-page-job-postings-scraper-api) · [Google News Suite](https://apify.com/vonsensey/google-news-scraper-api) · [Keyword Research Suite](https://apify.com/vonsensey/google-keyword-ideas-scraper) · [eBay Data Suite](https://apify.com/vonsensey/ebay-scraper-api) · [Amazon Reviews Suite](https://apify.com/vonsensey/amazon-reviews-scraper-api) · [Reddit](https://apify.com/vonsensey/reddit-scraper-posts-comments-api) · [Meta Ad Library](https://apify.com/vonsensey/facebook-ads-library-scraper-meta-ad-api) · [Vinted](https://apify.com/vonsensey/vinted-scraper-api) · [Trustpilot Review Intelligence Suite](https://apify.com/vonsensey/trustpilot-reviews-scraper) · [App Store & Google Play Reviews Suite](https://apify.com/vonsensey/app-store-google-play-reviews-scraper)

Profile competitor Shopify stores in one run: catalogue and collection counts, price band, vendors and product types, theme and installed apps, country and currency, and whether they are still shipping new products. A store-level competitor snapshot from a list of domains.

**You pay once per store delivered.** Stores that fail your filters are free. Non-Shopify domains,
dead domains, frozen stores and bot-walled sites are free. There is no run-start fee, and a run
that finds nothing costs nothing.

***

### Why this one

Paste your rivals' domains and get the shape of each business back: how deep the catalogue is, what it costs, what it is built on, and - the question a static database can never answer - whether they are still actively shipping products or coasting on an old catalogue.

***

### How to analyse a competitor's Shopify store

Put your rivals' domains in **Store URLs**. Each comes back with catalogue depth, price band,
product mix, theme, installed apps, and the date it last published a product — so you can tell a
competitor that is actively investing from one that is coasting.

***

### What comes back

Every run returns one row per store:

| Field | What it tells you |
|---|---|
| `storeId`, `myshopifyDomain`, `domain`, `storeUrl` | The store's permanent ID and both of its addresses |
| `name`, `description` | What the store calls itself |
| `productCount`, `collectionCount`, `sizeBand` | How big the catalogue is, before you contact anyone |
| `country`, `province`, `city`, `currency`, `shipsToCountries` | The market the store declares for itself |
| `isActive`, `daysSinceLastProduct`, `newestProductAt` | Whether the store is still trading, or died three years ago |
| `priceMin`, `priceMax`, `priceAverage`, `vendors[]`, `productTypes[]` | Price band and catalogue mix |
| `email`, `emails[]`, `phone`, `socials` | Published contact routes, plus seven social networks |
| `themeName`, `themeStoreId`, `apps[]` | The theme it runs and the apps it has installed |
| `oldestPublishedProductAt` | A launch-era estimate, or `null` where it cannot be established |

Nothing is invented to fill a column. A field the store does not publish returns `null`, because a
guessed value is worse than no value.

#### Measured coverage

Real numbers from a 25-store run, not estimates:

| Field | Present on |
|---|---|
| Theme | **100%** |
| Contact email | **72%** |
| Active in the last year | **60%** |
| Social profiles | **56%** |
| Installed apps detected | **44%** |

***

### Default settings

Clicking **Start** with the defaults runs exactly this:

```json
{
  "discoverStores": false,
  "storeUrls": [
    "https://www.allbirds.com",
    "https://www.deathwishcoffee.com",
    "https://kith.com"
  ],
  "maxStores": 25,
  "includeCatalog": true,
  "includeContacts": true,
  "includeTechStack": true,
  "includeLaunchDate": true
}
```

Change any of it. The full filter set — `countries`, `minProducts`, `maxProducts`,
`activeWithinDays`, `launchedWithinDays`, `keywords`, `excludeKeywords` — is available on every
run, and anything a filter rejects is free.

***

### What you are charged for

One charge per **store record delivered**. Nothing else.

Always free: stores that fail your filters, domains that are not Shopify stores, dead and parked
domains, frozen and deleted stores, sites behind a bot wall, every `error` and `diagnostics` row,
the second sighting of a store already charged in the run, and a run that returns nothing. There is
no run-start fee.

`maxStores` caps what you pay for, `maxCostUsd` stops the run before a hard ceiling, and
`maxStoresScanned` bounds how far a narrow filter searches.

***

### Setup

**Apify Proxy is required** — it is selected by default. Datacenter proxy is enough; residential is
not needed. Runs without a proxy return almost nothing.

***

### Related tools

Same engine, pointed at a different job:

- [myshopify Domain List Scraper - Store Handles & URLs](https://apify.com/vonsensey/myshopify-store-domain-list-scraper)
- [Shopify Theme Detector - Find Stores by Theme in Bulk](https://apify.com/vonsensey/shopify-theme-detector-scraper)
- [Shopify Store Finder - Discover Ecommerce Stores](https://apify.com/vonsensey/shopify-ecommerce-store-finder)
- [New Shopify Stores Scraper - Recently Launched Brands](https://apify.com/vonsensey/new-shopify-stores-scraper-recently-launched)
- [Ecommerce Leads by Country - Shopify Stores Scraper](https://apify.com/vonsensey/ecommerce-leads-scraper-shopify-stores-by-country)
- [Shopify Store Leads Scraper](https://apify.com/vonsensey/shopify-store-leads-scraper) — the full version, every mode in one

***

### Unofficial

This is an **unofficial** tool. It is **not affiliated with, endorsed by, or sponsored by Shopify
Inc.** "Shopify" is a trademark of Shopify Inc. and is used here only to describe what the tool
works with. It reads only what a store publishes publicly on its own storefront — nothing private,
nothing behind a login.

> **Run it without configuring anything** — [Compare Shopify competitors side by side](https://apify.com/vonsensey/shopify-competitor-analysis-scraper/examples/compare-three-shopify-competitors), a ready-made example you can start as-is or copy.

### Use cases

- **Build a qualified lead list.** Every store arrives with its contact email, country, catalogue size and price band, so the list is already filtered before you write a line.
- **Sell to a tech stack.** Find the stores running a given theme or app category — or the ones missing it entirely, which is the better pitch.
- **Size a niche before entering it.** Catalogue depth, price band, vendors and whether a store still ships new products tell you if a market is alive.
- **Catch new stores early.** Recently launched brands are still choosing the tools they will pay for.

### Run it on a schedule

A one-off pull answers a question; a schedule answers it every day without you. Open **Schedules** in the Apify Console, point a cron at this Actor, and the dataset keeps filling on its own — no server, no cron box, no babysitting. Everything here is built to be re-run: you are billed per store delivered, so a scheduled run that finds nothing new costs nothing.

### FAQ

#### Where do the stores come from?

Live storefronts, read at the moment you run it — either the URLs you supply or discovery across the public web. Nothing here is a resold static list.

#### Is the email the store owner's?

It is the contact address the store publishes. Where a store exposes several, the most owner-facing one is preferred and the rest are kept.

#### Do I pay for stores that fail my filters?

No. A store that does not match your country, size or keyword filter is a free row, so you can filter aggressively without paying for it.

#### Can I check which apps and theme a store runs?

Yes — theme family, Theme Store ID where it has one, and the installed app categories, on the same row as the contact details.

***

Something wrong, or a field you need that is missing? Open an issue on the **Issues** tab — it is read and it gets fixed. If this saved you time, a rating on the Store page helps the next person find it.

# Actor input Schema

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

Shopify stores to qualify, one per line. Accepts a bare domain (example.com), a full URL, or a myshopify handle (brand.myshopify.com). Leave empty to let discovery find stores instead.

## `discoverStores` (type: `boolean`):

Also find Shopify stores automatically, instead of only qualifying the ones you supply. Discovery is broad rather than keyword-targeted, so narrow it with the filters below. Stores that fail your filters are never charged.

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

How many qualified store records to return. This is what you pay for — one charge per delivered store.

## `maxStoresScanned` (type: `integer`):

Ceiling on how many candidates are checked while looking for matches. Raise it when a narrow filter (a small country, a rare keyword) rejects most candidates. Checking is free; only delivered stores are charged.

## `discoverySeed` (type: `integer`):

Pin this to get the same discovered stores every run — useful for reproducible tests. Leave empty and each run samples a different slice, so repeat runs bring back new stores instead of the ones you already paid for.

## `ccIndex` (type: `string`):

Pin discovery to one specific web-crawl index, e.g. CC-MAIN-2026-30. Leave empty to draw from the most recent indexes automatically, which is what you want unless you are reproducing an old run.

## `countries` (type: `array`):

Only deliver stores based in these countries. Two-letter ISO codes, e.g. US, GB, AU, CA, DE.

## `minProducts` (type: `integer`):

Only deliver stores with at least this many published products. Filters out empty and abandoned stores.

## `maxProducts` (type: `integer`):

Only deliver stores with at most this many published products. Useful for targeting small independent brands rather than large retailers.

## `activeWithinDays` (type: `integer`):

Only deliver stores that published a product in the last N days. The strongest signal that a store is still trading. Needs the catalogue, so it requires 'Include catalogue' to stay on.

## `launchedWithinDays` (type: `integer`):

Only deliver stores that look recently launched, judged by the oldest product they ever published. Turns on the launch-era lookup automatically (one extra request per store). Stores whose catalogue is too large to page to the end are excluded rather than guessed at.

## `keywords` (type: `array`):

Only deliver stores whose name, description, domain, vendors or product types contain at least one of these words.

## `excludeKeywords` (type: `array`):

Never deliver stores matching any of these words.

## `includeCatalog` (type: `boolean`):

Adds the last-product date (is this store still active?), price range, vendors and product types. Costs one extra request per store.

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

Adds the store's public contact email, phone and social profiles, taken from the storefront and its published policy pages.

## `includeTechStack` (type: `boolean`):

Adds the Shopify theme and the apps detected on the storefront — useful for targeting stores that already run (or lack) a given tool.

## `includeLaunchDate` (type: `boolean`):

Adds the oldest published product date as a rough store-age signal. Off by default because it costs one extra request per store.

## `maxCostUsd` (type: `number`):

Hard ceiling on what this run may cost, in USD. The run stops cleanly once delivering another store would exceed it. Accepts fractions, e.g. 0.25. Leave empty for no ceiling.

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

Parallel stores in flight. Higher is faster; the default is tuned to stay well inside Shopify's rate limits.

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

Required. Shopify rate-limits by IP, so a run without rotating proxies returns almost nothing. Datacenter proxies are enough — residential is not needed.

## Actor input object example

```json
{
  "storeUrls": [
    "https://www.allbirds.com",
    "https://www.deathwishcoffee.com",
    "https://kith.com"
  ],
  "discoverStores": false,
  "maxStores": 25,
  "countries": [],
  "keywords": [],
  "excludeKeywords": [],
  "includeCatalog": true,
  "includeContacts": true,
  "includeTechStack": true,
  "includeLaunchDate": true,
  "maxConcurrency": 10,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `stores` (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 = {
    "storeUrls": [
        "https://www.allbirds.com",
        "https://www.deathwishcoffee.com",
        "https://kith.com"
    ],
    "countries": [],
    "keywords": [],
    "excludeKeywords": [],
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("vonsensey/shopify-competitor-analysis-scraper").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://www.allbirds.com",
        "https://www.deathwishcoffee.com",
        "https://kith.com",
    ],
    "countries": [],
    "keywords": [],
    "excludeKeywords": [],
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("vonsensey/shopify-competitor-analysis-scraper").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": [
    "https://www.allbirds.com",
    "https://www.deathwishcoffee.com",
    "https://kith.com"
  ],
  "countries": [],
  "keywords": [],
  "excludeKeywords": [],
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call vonsensey/shopify-competitor-analysis-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,vonsensey/shopify-competitor-analysis-scraper"
        }
    }
}

```

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/Vu7tqcgWRRvYka0zp/builds/yz7o53SSZNAOLNRif/openapi.json
