# Shopify Store Scraper - Products, Apps & Tech Stack (`viralanalyzer/shopify-store-intelligence`) Actor

Analyze Shopify stores: extract products, prices, collections, themes, and apps. Competitive e-commerce intelligence.

- **URL**: https://apify.com/viralanalyzer/shopify-store-intelligence.md
- **Developed by:** [viralanalyzer](https://apify.com/viralanalyzer) (community)
- **Categories:** E-commerce, Lead generation
- **Features:** Limited permissions
- **Stats:** 5 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: 4.91 out of 5 stars

## Pricing

from $26.25 / 1,000 product scrapeds

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?

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 Intelligence — Products, Prices, Inventory & Competitive Analysis

> 🔗 [View on Apify Store](https://apify.com/viralanalyzer/shopify-store-intelligence) | 🇺🇸 English | [🇧🇷 Português](#português)

Extract **product catalogs, pricing, variants, inventory status, and collections** from any Shopify store. Uses Shopify's public JSON API — ultra-fast, pure HTTP, no browser needed.

### ✨ Features

- **Multi-store analysis** — Analyze up to 50 Shopify stores in a single run
- **Full product catalog** — Title, vendor, type, tags, images, description
- **Pricing intelligence** — Price ranges, compare-at prices, discount detection
- **Variant details** — SKU, sizes, colors, individual pricing, and per-variant availability (`inventoryQuantity` is `null` on the public storefront — see notes)
- **Store summary** — Price analytics, vendor distribution, stock status, product types
- **Collection extraction** — Store categories and collections with metadata
- **Validated output** — Anti-placeholder guardrails ensure only real data
- **Pay per result** — $0.05/product

### 📥 Input

| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| `storeUrls` | string\[] | Yes | — | Shopify store URLs (e.g., `"https://allbirds.com"`). Max 50. |
| `maxProductsPerStore` | integer | No | 250 | Max products to extract per store (1-5000) |
| `includeCollections` | boolean | No | true | Also fetch store collections/categories |
| `includeVariants` | boolean | No | true | Include product variants (sizes, colors, SKUs) |
| `proxyConfiguration` | object | No | — | Proxy settings (usually not needed) |

#### Input Example

```json
{
  "storeUrls": [
    "https://allbirds.com",
    "https://gymshark.com",
    "https://colourpop.com"
  ],
  "maxProductsPerStore": 250,
  "includeCollections": true,
  "includeVariants": true
}
```

### 📤 Output

Each run produces three types of results: **store_summary**, **product**, and **collection**.

#### Product Fields

| Field | Type | Description |
|---|---|---|
| `type` | string | Always `"product"` |
| `productId` | number | Shopify product ID |
| `title` | string | Product name |
| `handle` | string | URL slug |
| `url` | string | Full product URL |
| `vendor` | string | Product vendor/brand |
| `productType` | string | Product category |
| `tags` | string\[] | Product tags |
| `price` | number | Minimum price |
| `priceMax` | number | Maximum price |
| `currency` | string | Currency (store-dependent) |
| `compareAtPrice` | number | Original price (before discount) |
| `hasDiscount` | boolean | Whether product is on sale |
| `discountPercent` | number | Discount percentage |
| `variantCount` | number | Total variant count |
| `availableVariants` | number | In-stock variants |
| `inStock` | boolean | Whether product is available |
| `totalInventory` | number | null | Sum of variant stock. **`null`** on the public storefront, which does not expose inventory (admin-API only) — use `inStock` / `availableVariants` for availability |
| `variants` | object\[] | Variant details: {variantId, title, price, compareAtPrice, sku, available, inventoryQuantity, option1, option2, option3} |
| `imageCount` | number | Number of images |
| `mainImage` | string | Primary image URL |
| `description` | string | Product description (plain text, max 500 chars) |
| `createdAt` | string | Product creation date |
| `updatedAt` | string | Last update date |
| `publishedAt` | string | Publication date |
| `storeDomain` | string | Store domain |
| `storeUrl` | string | Store base URL |
| `platform` | string | Always `"shopify"` |
| `scrapedAt` | string | ISO 8601 timestamp |

#### Store Summary Fields

| Field | Type | Description |
|---|---|---|
| `type` | string | Always `"store_summary"` |
| `storeDomain` | string | Store domain name |
| `productCount` | number | Total products found |
| `collectionCount` | number | Total collections found |
| `priceMin` | number | Lowest product price |
| `priceMax` | number | Highest product price |
| `priceAvg` | number | Average product price |
| `priceMedian` | number | Median product price |
| `productsInStock` | number | Products currently available |
| `productsOutOfStock` | number | Products out of stock |
| `productsOnSale` | number | Products with active discounts |
| `uniqueVendors` | number | Number of distinct vendors |
| `topVendors` | object\[] | Top 10 vendors by product count |
| `topProductTypes` | object\[] | Top 10 product types |

#### Output Example

```json
{
  "type": "product",
  "productId": 6654018298022,
  "title": "Men's Tree Runners",
  "handle": "mens-tree-runners",
  "url": "https://allbirds.com/products/mens-tree-runners",
  "vendor": "Allbirds",
  "productType": "Shoes",
  "tags": ["men", "runners", "tree"],
  "price": 98.00,
  "priceMax": 98.00,
  "currency": "USD",
  "compareAtPrice": 0,
  "hasDiscount": false,
  "discountPercent": 0,
  "variantCount": 12,
  "availableVariants": 10,
  "inStock": true,
  "totalInventory": null,
  "variants": [
    {
      "variantId": 39847261839542,
      "title": "8 / Basin Blue (Medium Blue)",
      "price": 98.00,
      "compareAtPrice": 0,
      "sku": "TR-M-BB-8",
      "available": true,
      "inventoryQuantity": null,
      "option1": "8",
      "option2": "Basin Blue (Medium Blue)",
      "option3": ""
    }
  ],
  "imageCount": 6,
  "mainImage": "https://cdn.shopify.com/s/files/1/0197/9501/products/tree-runner-mens.jpg",
  "description": "Light on your feet, and easy on the planet. Made with breathable tree fiber...",
  "createdAt": "2023-01-15T10:30:00-05:00",
  "updatedAt": "2026-03-01T14:22:00-05:00",
  "publishedAt": "2023-01-15T10:30:00-05:00",
  "storeDomain": "allbirds.com",
  "storeUrl": "https://allbirds.com",
  "platform": "shopify",
  "scrapedAt": "2026-03-06T12:00:00.000Z"
}
```

### 📋 Use Cases

- **Competitive Intelligence** — Monitor competitor product catalogs, pricing strategies, and inventory levels
- **Price Monitoring** — Track price changes, discounts, and compare-at pricing across stores
- **Market Research** — Analyze product categories, vendor distribution, and pricing ranges
- **Availability Tracking** — Monitor in-stock / out-of-stock status per product and variant (`inStock`, `available`); exact stock counts are not exposed by the public storefront
- **E-commerce Analytics** — Compare store sizes, product assortments, and pricing tiers
- **Dropshipping Research** — Discover trending products, vendors, and pricing patterns

### ✅ Capabilities & Limits

Stated up front, so you do not pay a run to find out.

**Built here:** every `storeUrls` entry is truncated to its bare origin before anything is fetched, so a deep link like `https://store.com/collections/shoes` becomes `https://store.com` and the entire catalog is pulled. There is no dedupe after normalization either: five different URLs from the same store become five full-catalog scrapes, each billed separately.

| Input / feature | Supported | Notes |
|---|---|---|
| Shopify store URL | ✅ | `storeUrls` — required; `gymshark.com` or the full URL both work |
| Non-Shopify stores | ❌ | this reads Shopify's public JSON endpoints — a WooCommerce or Magento store returns nothing |
| Product volume | ⚠️ | `maxProductsPerStore`; Shopify paginates at 250 products per page |
| Variants with individual pricing | ✅ | `includeVariants` — sizes, colors, per-variant price |
| Collections / categories | ✅ | `includeCollections` |
| Hidden or unpublished products | ❌ | only what the store publishes publicly |
| Sales figures / revenue | ❌ | Shopify does not expose them; product and pricing data only |
| Proxy | ⚠️ | usually unnecessary — the JSON API is public |

### ❓ FAQ

**Q: How do I know if a store is built on Shopify?**
A: Most Shopify stores expose a `/products.json` endpoint. You can test by adding `/products.json` to any store URL. If it returns JSON data, the store is Shopify-powered. The actor will skip non-Shopify URLs gracefully.

**Q: Does this work with password-protected stores?**
A: No. The actor uses Shopify's public JSON API, which only works for stores that have public access. Password-protected or private stores will return null and be skipped.

**Q: Why is `currency` showing as "USD" for all stores?**
A: Shopify's public `/products.json` endpoint does not include currency information. The actor defaults to "USD" but the actual currency depends on the store's settings. Check the store's website for the correct currency.

**Q: Can I extract more than 250 products from a store?**
A: Yes. Set `maxProductsPerStore` up to 5000. The actor automatically paginates through Shopify's API (250 products per page) until the limit is reached.

**Q: What is included in the store_summary result?**
A: The store summary includes aggregated analytics: total product count, price range (min/max/avg/median), in-stock vs out-of-stock counts, discount analysis, top vendors by product count, and top product types.

### 💰 Pricing

This actor uses **Pay Per Event (PPE)** pricing:

| Metric | Cost |
|--------|------|
| product-scraped | $0.05 per product |

For example, extracting 250 products from one store costs $12.50. Note: store summaries and collections are also counted as items.

### 🔗 Related Actors

- [TradingView Screener](https://apify.com/viralanalyzer/tradingview-screener) — Stock technical analysis
- [Yahoo Finance Intelligence](https://apify.com/viralanalyzer/yahoo-finance-intelligence) — Stock fundamentals
- [Google Maps BR Scraper](https://apify.com/viralanalyzer/google-maps-br-scraper) — Business data extraction
- [Instagram Reels Scraper](https://apify.com/viralanalyzer/instagram-reels-scraper) — Instagram metrics

### 📝 Changelog

#### v1.1 (2026-09-24)

- `totalInventory` and per-variant `inventoryQuantity` are now `null` instead of `0`: the public Shopify storefront (`/products.json`) does not expose inventory quantity, so a `0` there was a false stock reading. Availability still comes from `inStock` / `available`, which the public API does provide

#### v1.0

- Multi-store product extraction via /products.json API
- Full variant details with pricing, SKU, and inventory
- Collection/category extraction
- Store summary with price analytics and vendor breakdown
- Discount detection and percentage calculation
- Anti-placeholder guardrails for data integrity
- Rate limit handling with automatic retries
- PPE billing integration

***

<a name="português"></a>

## 🛍️ Shopify Store Intelligence — Produtos, Preços, Estoque & Análise Competitiva

> 🔗 [Ver na Apify Store](https://apify.com/viralanalyzer/shopify-store-intelligence) | [🇺🇸 English](#-shopify-store-intelligence--products-prices-inventory--competitive-analysis) | 🇧🇷 Português

Extraia **catálogos de produtos, preços, variantes, status de estoque e coleções** de qualquer loja Shopify. Usa a API JSON pública do Shopify — ultra-rápido, HTTP puro, sem navegador.

### ✨ Funcionalidades

- **Análise multi-loja** — Analise até 50 lojas Shopify em uma única execução
- **Catálogo completo** — Título, fabricante, tipo, tags, imagens, descrição
- **Inteligência de preços** — Faixas de preço, preços comparativos, detecção de descontos
- **Detalhes de variantes** — SKU, tamanhos, cores, preços individuais, quantidade em estoque
- **Resumo da loja** — Análise de preços, distribuição de fabricantes, status de estoque
- **Extração de coleções** — Categorias e coleções da loja com metadados
- **Saída validada** — Guardrails anti-placeholder garantem apenas dados reais
- **Pague por resultado** — $0.05/produto

### 📥 Entrada

| Parâmetro | Tipo | Obrigatório | Padrão | Descrição |
|---|---|---|---|---|
| `storeUrls` | string\[] | Sim | — | URLs das lojas Shopify (ex: `"https://allbirds.com"`). Máximo 50. |
| `maxProductsPerStore` | inteiro | Não | 250 | Máximo de produtos por loja (1-5000) |
| `includeCollections` | boolean | Não | true | Também buscar coleções/categorias da loja |
| `includeVariants` | boolean | Não | true | Incluir variantes de produto (tamanhos, cores, SKUs) |
| `proxyConfiguration` | objeto | Não | — | Configuração de proxy (geralmente desnecessário) |

#### Exemplo de Entrada

```json
{
  "storeUrls": [
    "https://allbirds.com",
    "https://gymshark.com",
    "https://colourpop.com"
  ],
  "maxProductsPerStore": 250,
  "includeCollections": true,
  "includeVariants": true
}
```

### 📤 Saída

Cada execução produz três tipos de resultado: **store_summary**, **product** e **collection**.

#### Campos do Produto

| Campo | Tipo | Descrição |
|---|---|---|
| `type` | string | Sempre `"product"` |
| `productId` | número | ID do produto no Shopify |
| `title` | string | Nome do produto |
| `handle` | string | Slug da URL |
| `url` | string | URL completa do produto |
| `vendor` | string | Fabricante/marca |
| `productType` | string | Categoria do produto |
| `tags` | string\[] | Tags do produto |
| `price` | número | Preço mínimo |
| `priceMax` | número | Preço máximo |
| `currency` | string | Moeda (depende da loja) |
| `compareAtPrice` | número | Preço original (antes do desconto) |
| `hasDiscount` | boolean | Se o produto está em promoção |
| `discountPercent` | número | Percentual de desconto |
| `variantCount` | número | Total de variantes |
| `availableVariants` | número | Variantes em estoque |
| `inStock` | boolean | Se o produto está disponível |
| `totalInventory` | número | null | Soma do estoque das variantes. **`null`** na vitrine pública, que não expõe estoque (só a API admin) — use `inStock` / `availableVariants` para disponibilidade |
| `variants` | objeto\[] | Detalhes das variantes: {variantId, title, price, compareAtPrice, sku, available, inventoryQuantity, option1, option2, option3} |
| `imageCount` | número | Número de imagens |
| `mainImage` | string | URL da imagem principal |
| `description` | string | Descrição (texto puro, máximo 500 caracteres) |
| `createdAt` | string | Data de criação |
| `updatedAt` | string | Data da última atualização |
| `publishedAt` | string | Data de publicação |
| `storeDomain` | string | Domínio da loja |
| `storeUrl` | string | URL base da loja |
| `platform` | string | Sempre `"shopify"` |
| `scrapedAt` | string | Timestamp ISO 8601 |

#### Campos do Resumo da Loja

| Campo | Tipo | Descrição |
|---|---|---|
| `type` | string | Sempre `"store_summary"` |
| `storeDomain` | string | Domínio da loja |
| `productCount` | número | Total de produtos encontrados |
| `collectionCount` | número | Total de coleções |
| `priceMin` | número | Menor preço |
| `priceMax` | número | Maior preço |
| `priceAvg` | número | Preço médio |
| `priceMedian` | número | Preço mediano |
| `productsInStock` | número | Produtos disponíveis |
| `productsOutOfStock` | número | Produtos esgotados |
| `productsOnSale` | número | Produtos em promoção |
| `uniqueVendors` | número | Fabricantes distintos |
| `topVendors` | objeto\[] | Top 10 fabricantes por quantidade |
| `topProductTypes` | objeto\[] | Top 10 tipos de produto |

#### Exemplo de Saída

```json
{
  "type": "product",
  "productId": 6654018298022,
  "title": "Men's Tree Runners",
  "handle": "mens-tree-runners",
  "url": "https://allbirds.com/products/mens-tree-runners",
  "vendor": "Allbirds",
  "productType": "Shoes",
  "tags": ["men", "runners", "tree"],
  "price": 98.00,
  "priceMax": 98.00,
  "currency": "USD",
  "compareAtPrice": 0,
  "hasDiscount": false,
  "discountPercent": 0,
  "variantCount": 12,
  "availableVariants": 10,
  "inStock": true,
  "totalInventory": null,
  "variants": [
    {
      "variantId": 39847261839542,
      "title": "8 / Basin Blue (Medium Blue)",
      "price": 98.00,
      "compareAtPrice": 0,
      "sku": "TR-M-BB-8",
      "available": true,
      "inventoryQuantity": null,
      "option1": "8",
      "option2": "Basin Blue (Medium Blue)",
      "option3": ""
    }
  ],
  "imageCount": 6,
  "mainImage": "https://cdn.shopify.com/s/files/1/0197/9501/products/tree-runner-mens.jpg",
  "description": "Light on your feet, and easy on the planet. Made with breathable tree fiber...",
  "createdAt": "2023-01-15T10:30:00-05:00",
  "updatedAt": "2026-03-01T14:22:00-05:00",
  "publishedAt": "2023-01-15T10:30:00-05:00",
  "storeDomain": "allbirds.com",
  "storeUrl": "https://allbirds.com",
  "platform": "shopify",
  "scrapedAt": "2026-03-06T12:00:00.000Z"
}
```

### 📋 Casos de Uso

- **Inteligência Competitiva** — Monitore catálogos, estratégias de preço e estoque de concorrentes
- **Monitoramento de Preços** — Acompanhe mudanças de preço, descontos e preços comparativos
- **Pesquisa de Mercado** — Analise categorias, distribuição de fabricantes e faixas de preço
- **Rastreamento de Estoque** — Monitore disponibilidade e estoque por variante
- **Analytics E-commerce** — Compare tamanho de lojas, sortimento e faixas de preço
- **Pesquisa Dropshipping** — Descubra produtos em alta, fabricantes e padrões de preço

### ❓ Perguntas Frequentes

**P: Como sei se uma loja é construída no Shopify?**
R: A maioria das lojas Shopify expõe um endpoint `/products.json`. Você pode testar adicionando `/products.json` a qualquer URL de loja. Se retornar dados JSON, a loja usa Shopify. O actor pula URLs não-Shopify de forma elegante.

**P: Funciona com lojas protegidas por senha?**
R: Não. O actor usa a API JSON pública do Shopify, que só funciona para lojas com acesso público. Lojas protegidas por senha ou privadas retornarão null e serão ignoradas.

**P: Por que `currency` mostra "USD" para todas as lojas?**
R: O endpoint público `/products.json` do Shopify não inclui informações de moeda. O actor usa "USD" como padrão, mas a moeda real depende das configurações da loja. Verifique o site da loja para a moeda correta.

**P: Posso extrair mais de 250 produtos de uma loja?**
R: Sim. Configure `maxProductsPerStore` até 5000. O actor pagina automaticamente através da API do Shopify (250 produtos por página) até atingir o limite.

**P: O que está incluído no resultado store_summary?**
R: O resumo da loja inclui análises agregadas: total de produtos, faixa de preço (mínimo/máximo/média/mediana), contagem em estoque vs esgotado, análise de descontos, top fabricantes por quantidade de produtos, e top tipos de produto.

### 💰 Preços

Este actor usa precificação **Pay Per Event (PPE)**:

| Métrica | Custo |
|---------|-------|
| product-scraped | $0.05 por produto |

Por exemplo, extrair 250 produtos de uma loja custa $12.50. Nota: resumos de loja e coleções também são contados como itens.

### 🔗 Actors Relacionados

- [TradingView Screener](https://apify.com/viralanalyzer/tradingview-screener) — Análise técnica de ações
- [Yahoo Finance Intelligence](https://apify.com/viralanalyzer/yahoo-finance-intelligence) — Fundamentos de ações
- [Google Maps BR Scraper](https://apify.com/viralanalyzer/google-maps-br-scraper) — Dados de empresas
- [Instagram Reels Scraper](https://apify.com/viralanalyzer/instagram-reels-scraper) — Métricas do Instagram

### 📝 Changelog

#### v1.1 (2026-09-24)

- `totalInventory` e o `inventoryQuantity` por variante agora vêm `null` em vez de `0`: a vitrine pública do Shopify (`/products.json`) não expõe estoque, então um `0` ali era leitura falsa. A disponibilidade continua vindo de `inStock` / `available`, que a API pública fornece

#### v1.0

- Extração multi-loja via API /products.json
- Detalhes completos de variantes com preço, SKU e estoque
- Extração de coleções/categorias
- Resumo da loja com analytics de preço e fabricantes
- Detecção de descontos e cálculo de percentual
- Guardrails anti-placeholder para integridade de dados
- Tratamento de rate limit com retentativas automáticas
- Integração com cobrança PPE

# Actor input Schema

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

List of Shopify store URLs to analyze (e.g., 'https://allbirds.com', 'gymshark.com'). Supports with or without https://.

## `includeCollections` (type: `boolean`):

Also fetch store collections/categories.

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

Maximum number of products to extract per store. Shopify returns 250 per page.

## `includeVariants` (type: `boolean`):

Include all product variants (sizes, colors, etc.) with individual pricing.

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

Proxy settings. Usually not needed — Shopify's JSON API is public.

## Actor input object example

```json
{
  "storeUrls": [
    "https://allbirds.com"
  ],
  "includeCollections": true,
  "maxProductsPerStore": 250,
  "includeVariants": true
}
```

# Actor output Schema

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

Dataset containing all scraped results. Each item follows the dataset schema.

# 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"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("viralanalyzer/shopify-store-intelligence").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"] }

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

```

## MCP server setup

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

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/j2gLB302J21wOsBFj/builds/gHVPG4VbZXdAxDj4o/openapi.json
