# Shopify Store Scraper — Emails, Apps & Catalogue (`lergassy/shopify-store-intel`) Actor

Profile any Shopify store in one row: shop identity, email, phone and socials, theme and installed apps, catalogue size, price band, and how many products were created in the last 90 days. No login, no API key, no proxy.

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

## Pricing

from $3.50 / 1,000 store profiles

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 Store Scraper — emails, apps and catalogue in one row

Give this Actor a list of shop addresses and it hands back one row per store: who the merchant is,
how to reach them, what the storefront runs on, and what the catalogue actually looks like.

It reads the JSON that every Shopify storefront publishes for its own use, so there is no login,
no API key, no browser and no proxy bill.

### What you get for each store

| Group | Fields |
|---|---|
| Identity | `shopName`, `shopId`, `myshopifyDomain`, `currency`, `city`, `province`, `country` |
| Contacts | `email`, `emails`, `phone`, `phones` |
| Socials | `instagram`, `facebook`, `tiktok`, `youtube`, `x`, `linkedin`, `pinterest` |
| Tech | `theme`, `apps` — Klaviyo, Judge.me, Yotpo, Loox, Gorgias, Recharge, Okendo, pixels |
| Catalogue | `productCount`, `variantCount`, `inStockVariants`, `outOfStockVariants`, `priceMin`, `priceMedian`, `priceMax`, `vendorCount`, `productTypes` |
| Activity | `newestProductAt`, `oldestProductAt`, `productsCreatedLast90Days` |

Turn on **Add product rows** and every product comes through as its own row too, with its price
range, stock, tags and images.

### Why the activity figures matter

A list of Shopify stores is easy to buy and mostly useless: half of it is abandoned shops. The
three activity fields answer the only question that decides whether a store is worth contacting —
is anyone still working on it? `productsCreatedLast90Days` counts products by their creation date,
not their publish date, because Shopify bumps the publish date on any re-publish and a dormant
store would otherwise look brand new.

### Three ways to run it

- **Store profile** — one row per shop. This is the mode for building or enriching a prospect list.
- **Products** — the store row plus the full catalogue.
- **Detect only** — just answers whether an address is a Shopify store, at the lowest price. Use it
  to sift a large domain list before paying for full profiles.

### What it will not invent

Phone numbers come only from `tel:` links the merchant published. Scanning page text for digit runs
returns map coordinates, order ids and timestamps, so an empty phone cell here means the merchant
did not publish a number — not that the Actor guessed badly.

A shop that rate-limits or blocks the request comes back as an error row saying so, never as
"not a Shopify store", so real stores never quietly drop out of your list. Error and notice rows
are never charged.

### Pricing

Pay per event: **$5 per 1,000 store profiles** and **$0.50 per 1,000 product rows**, cheaper on
higher Apify plans. Stores that refuse the request, and addresses that turn out not to be Shopify,
cost nothing.

### Use cases

- Build an agency prospect list of live Shopify stores in a price band, filtered by the apps they
  already run.
- Find stores that have no review app or no email tool installed — the pitch writes itself.
- Track a competitor's catalogue: price band, how fast they launch, what goes out of stock.
- Enrich a domain list you already have: which ones are Shopify, and who to email.

### Input example

```json
{
  "storeUrls": ["gymshark.com", "allbirds.com", "kith.com"],
  "mode": "store",
  "includeContacts": true,
  "maxProductsPerStore": 250
}
```

### For AI agents

The Actor is available over Apify's MCP server, so an agent can call it directly. One store address
in, one flat row out — no nested objects, so the result drops straight into a spreadsheet, a CRM
import or an LLM context window.

### Your feedback

Something missing or wrong? Open an issue on the Actor page and it gets fixed.

# Actor input Schema

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

Shops to profile, one per line. A bare domain is enough — <code>gymshark.com</code>, <code>allbirds.com</code> or a <code>.myshopify.com</code> address all work.

## `mode` (type: `string`):

<b>Store profile</b> — one row per shop with contacts, tech and catalogue figures. <b>Products</b> — the store row plus every product as its own row. <b>Detect only</b> — just answer whether the address is a Shopify store, at the lowest price.

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

Read the home page and, when nothing is there, the contact page, for email addresses, phone numbers and social profiles.

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

Also write one row per product in the store profile mode.

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

How many products to read from each shop. The catalogue figures in the store row are calculated from this sample, so leave it high for an accurate price band.

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

Safety cap on how many addresses a single run will touch.

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

How many shops to read at the same time.

## Actor input object example

```json
{
  "storeUrls": [
    "gymshark.com",
    "allbirds.com"
  ],
  "mode": "store",
  "includeContacts": true,
  "includeProducts": false,
  "maxProductsPerStore": 250,
  "maxStores": 100,
  "concurrency": 5
}
```

# Actor output Schema

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

One row per shop: identity, contacts, socials, theme and apps, catalogue size, price band and launch activity.

## `products` (type: `string`):

One row per product, with price range, stock, tags and images.

# 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": [
        "gymshark.com"
    ],
    "mode": "store"
};

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

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

```

## MCP server setup

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

```

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/begIggQ7cnK9Pxfvm/builds/5ApPoqtKaqD77xHnC/openapi.json
