# Shopify Store Leads Finder - Emails, Phones & Tech Stack (`cancap/shopify-store-leads`) Actor

Find Shopify stores by product keyword. Get email, phone, Instagram/Facebook/TikTok, address, ratings, product count, prices, last product added and installed apps (Klaviyo, Judge.me, Meta Pixel...) with tech gaps for outreach. Filter by country, email and reviews. Pay only per lead.

- **URL**: https://apify.com/cancap/shopify-store-leads.md
- **Developed by:** [CANCAP](https://apify.com/cancap) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $6.00 / 1,000 store leads

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 Leads Finder: Emails, Phones, Apps & Tech Stack

Find **Shopify stores by what they sell** and get a ready-to-use lead list: **store email, phone, website, Instagram/Facebook/TikTok, address, country, ratings and reviews**, plus a store analysis that most lead tools don't have:

- **Installed apps & tech stack**: Klaviyo, Omnisend, Judge.me, Yotpo, Okendo, Loox, Recharge, Gorgias, Tidio, Rebuy, PageFly, Afterpay, Klarna, Meta Pixel, Google Ads, TikTok Pixel and more
- **Tech gaps**: "No email marketing app", "No reviews app", "No live chat", "No ad pixel". These are the stores that need *your* service.
- **Catalog stats**: number of products, price range, median price, % on sale, last product added, products added in the last 90 days, top vendors and product types
- **Store details**: Shopify theme, currency, number of countries they ship to, myshopify domain

Stores are discovered through **Shop**, Shopify's official shopping app, so every result is a real, active Shopify store.

### Who uses this

- **Agencies & freelancers** (email marketing, CRO, ads, web design) looking for Shopify brands that are missing what they sell. Example: stores with *no email marketing app* or *no reviews app*.
- **Shopify app developers** finding stores that use (or don't use) a competitor's app.
- **Wholesalers, suppliers & 3PLs** looking for brands selling in their niche.
- **Influencer & affiliate managers** finding brands with active Instagram/TikTok.
- **Market researchers** comparing prices and catalog sizes in a niche.

### How to use

1. Enter one or more **product keywords**, e.g. `soy candles`, `dog collar`, `yoga mat`, `organic skincare`.
2. Optional: add filters such as **country**, **only stores with an email**, **minimum reviews**, or **product count**.
3. Click **Start**, then export to **CSV, Excel, JSON** or Google Sheets, or connect via API, Zapier or Make.

```json
{
    "keywords": ["soy candles", "wax melts"],
    "maxStores": 100,
    "countries": ["United States"],
    "requireEmail": true,
    "minReviews": 20
}
```

**Already have a list of stores?** Paste their URLs into **Shopify store URLs to analyze** to get the contacts, apps and catalog stats for each one.

### Output example

```json
{
    "storeName": "Acme Candle Co",
    "website": "https://acmecandles.example",
    "email": "hello@acmecandles.example",
    "emailSource": "shop.app",
    "allEmails": ["hello@acmecandles.example", "wholesale@acmecandles.example"],
    "phone": "+15125550100",
    "socials": {
        "instagram": "https://www.instagram.com/acmecandles",
        "facebook": "https://www.facebook.com/acmecandles",
        "tiktok": "https://www.tiktok.com/@acmecandles"
    },
    "address": "100 Main St, Austin, TX 78701, United States",
    "country": "United States",
    "countryCode": "US",
    "rating": 4.82,
    "reviewCount": 1240,
    "productCount": 86,
    "currency": "USD",
    "minPrice": 8,
    "maxPrice": 64,
    "medianPrice": 28,
    "onSalePct": 12,
    "lastProductAddedAt": "2026-09-18T15:02:11.000Z",
    "productsAddedLast90Days": 9,
    "topProductTypes": ["Candle", "Wax Melt"],
    "theme": "Dawn",
    "apps": ["Klaviyo", "Judge.me", "Meta Pixel", "Google Analytics"],
    "techGaps": ["No live chat / helpdesk"],
    "shipsToCountries": 38,
    "analysisStatus": "ok",
    "matchedKeywords": ["soy candles"],
    "sampleProducts": [{ "title": "Amber & Moss Soy Candle", "price": 28, "currency": "USD", "url": "https://shop.app/products/123" }],
    "shopAppUrl": "https://shop.app/m/abc123",
    "source": "shop.app",
    "scrapedAt": "2026-10-01T10:00:00.000Z"
}
```

### Pricing: you only pay for leads you get

You pay a small fee **per store returned**. Stores removed by your filters, unreachable stores and non-Shopify sites are **free**. Set a **maximum cost per run** in the run options and the Actor stops cleanly at your limit.

### Tips

- **Get more stores**: add several related keywords (e.g. `candles`, `soy candles`, `wax melts`, `reed diffuser`). Results are de-duplicated across keywords, and `matchedKeywords` shows which ones each store matched.
- **Only fresh leads every week**: turn on **Only new stores** and schedule the Actor. Each run returns only stores you haven't received before.
- **Faster, contact-only runs**: turn off **Analyze each store**.
- **Find stores missing a tool**: filter the `techGaps` column in Excel or Google Sheets.

### FAQ

**Where do the emails come from?** From the store's public contact details on Shop and from the store's own website (homepage links and text). Nothing is guessed.

**Why is a field empty?** Not every store publishes an email, phone or address. Use the filters to keep only complete leads. The `analysisStatus` column shows whether the store analysis succeeded (`ok`, `partial`, `password protected`, `blocked`).

**Do I need a Shopify account or API key?** No. Everything comes from public pages.

**Prices are in a different currency than I expected?** `sampleProducts` prices come from Shop and may be converted to the viewer's currency. `minPrice`, `maxPrice` and `medianPrice` come from the store itself, in the store's own `currency`.

### Responsible use

This Actor only collects **public business information** that stores publish themselves. It uses no logins and bypasses no CAPTCHAs. Business contact details can still count as personal data under GDPR and similar laws, so follow the privacy and anti-spam rules (GDPR, CAN-SPAM, CASL) that apply to your outreach.

# Actor input Schema

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

What the stores sell, e.g. "soy candles", "dog collar", "yoga mat". Each keyword is searched on Shop (Shopify's official shopping app) and every store selling matching products becomes a lead.

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

Already have stores? Paste their websites (one per line) to get contacts, product count, prices and installed apps for each one. Non-Shopify sites are skipped and not charged.

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

How many store leads to return (after filters). You only pay for stores that are returned.

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

Only return stores based in these countries. Use names or codes, e.g. "United States", "US", "UK", "Canada". Leave empty for all countries.

## `requireEmail` (type: `boolean`):

Skip stores that publish no email address (skipped stores are free).

## `requirePhone` (type: `boolean`):

Skip stores that publish no phone number (skipped stores are free).

## `minRating` (type: `integer`):

Only stores whose average product rating on Shop is at least this. 0 = no filter.

## `minReviews` (type: `integer`):

A quick way to find established brands (e.g. 50+ reviews). 0 = no filter.

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

Needs "Analyze each store". Leave empty for no limit.

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

Needs "Analyze each store". Useful to target small stores. Leave empty for no limit.

## `skipPreviouslyScraped` (type: `boolean`):

Remembers stores returned in your earlier runs and skips them, so scheduled runs deliver only fresh leads.

## `analyzeStores` (type: `boolean`):

Visits each store's own website to add: installed apps (Klaviyo, Judge.me, Recharge, Gorgias, Meta Pixel...), missing tools ("tech gaps"), theme, product count, price range, last product added, currency, and extra emails/socials from the site. Turn off for faster, contact-only results.

## `maxSearchPagesPerKeyword` (type: `integer`):

Each page has 30 products. More pages = more stores per keyword.

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

Apify Proxy is used by default. Switch to RESIDENTIAL only if you see blocking errors.

## Actor input object example

```json
{
  "keywords": [
    "soy candles"
  ],
  "maxStores": 50,
  "requireEmail": false,
  "requirePhone": false,
  "minRating": 0,
  "minReviews": 0,
  "skipPreviouslyScraped": false,
  "analyzeStores": true,
  "maxSearchPagesPerKeyword": 20,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `storeLeads` (type: `string`):

One row per Shopify store: contacts, socials, ratings, catalog stats, apps and tech gaps.

## `allFields` (type: `string`):

No description

## `summary` (type: `string`):

Counts of stores found, delivered, filtered out and failed.

# 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 = {
    "keywords": [
        "soy candles"
    ],
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("cancap/shopify-store-leads").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 = {
    "keywords": ["soy candles"],
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("cancap/shopify-store-leads").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 '{
  "keywords": [
    "soy candles"
  ],
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call cancap/shopify-store-leads --silent --output-dataset

```

## MCP server setup

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

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/3mlYzS3BUn7mWITVc/builds/FadJfk66WFKh8QAPK/openapi.json
