# Shopify Store B2B Leads Finder (`botflowtech/shopify-store-leads-finder`) Actor

Find Shopify-powered e-commerce stores in any niche with contact emails, social links, phone numbers, and business intelligence. Perfect for SaaS companies, marketing agencies, and B2B outreach.

- **URL**: https://apify.com/botflowtech/shopify-store-leads-finder.md
- **Developed by:** [BotFlowTech](https://apify.com/botflowtech) (community)
- **Categories:** Lead generation, E-commerce
- **Stats:** 12 total users, 8 monthly users, 81.8% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per usage

This Actor is paid per platform usage. The Actor is free to use, and you only pay for the Apify platform usage, which gets cheaper the higher subscription plan you have.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-usage

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use 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 B2B Leads Finder

**Find Shopify stores in any niche with contact emails, social links, and business intelligence — ready for outreach.**

Discover, verify, and enrich Shopify-powered e-commerce stores at scale. This actor uses Google search and direct URL detection to surface Shopify stores matching your target niche, then automatically extracts contact emails, phone numbers, owner names, social media profiles, detected tech stack (Klaviyo, ReCharge, Gorgias, etc.), and estimated store size — giving you a complete B2B lead file ready for outreach campaigns.

---

### Who Is This For?

| Buyer Type | Use Case |
|---|---|
| **SaaS companies** selling to e-commerce | Find stores using competitor apps, or stores in your ICP niche that don't use you yet |
| **Marketing agencies** | Build prospect lists of Shopify store owners by niche and country |
| **App developers** | Identify stores using complementary apps (e.g. Klaviyo customers = email marketing buyers) |
| **Wholesale suppliers** | Find stores with `/wholesale` pages — they're actively seeking suppliers |
| **Outreach automation platforms** | Feed structured leads with verified emails into email sequences |
| **Shopify theme/plugin creators** | Discover stores using competing themes |
| **B2B data brokers** | Resell enriched Shopify lead lists by niche |

---

### Features

- **3 discovery methods**: Google `site:myshopify.com` search, `"powered by shopify"` search, and keyword + location search
- **Shopify verification**: Detects Shopify via `/cdn/shop/`, `window.Shopify`, generator meta tags, and CDN patterns
- **Contact enrichment**: Visits `/pages/contact`, `/contact`, `/about`, and about-us pages to extract emails, phones, and addresses
- **App detection**: Identifies 20+ installed Shopify apps (Klaviyo, ReCharge, Gorgias, Yotpo, Privy, Afterpay, Klarna, etc.)
- **Social media extraction**: Finds Instagram, Facebook, Twitter/X, TikTok, Pinterest, LinkedIn, YouTube links
- **Store size estimation**: Counts products from `sitemap.xml`
- **Niche auto-detection**: Classifies stores into 12 categories (Fashion, Beauty, Home, Sports, etc.)
- **Wholesale detection**: Flags stores with `/wholesale` or `/trade` pages
- **Blog detection**: Flags stores running a Shopify blog
- **Shopify theme detection**: Extracts theme name from page source
- **Deduplication**: Automatically deduplicates by normalized domain

---

### Input Parameters

| Field | Type | Required | Default | Description |
|---|---|---|---|---|
| `keywords` | string[] | Yes* | — | Niche keywords to search (e.g. `["yoga mats", "pet supplies"]`) |
| `inputUrls` | string[] | Yes* | — | Direct store URLs to enrich (bypasses Google search) |
| `country` | enum | No | `US` | Target country for Google searches |
| `maxStores` | integer | No | `100` | Max stores to return (up to 5,000) |
| `includeContactEnrichment` | boolean | No | `true` | Visit contact/about pages for email, phone, address, owner |
| `minProductCount` | integer | No | — | Filter out stores with fewer products than this threshold |

*Either `keywords` or `inputUrls` must be provided.

#### Country Options

`US` · `UK` · `CA` · `AU` · `IN` · `DE` · `FR` · `global`

---

### Example Input

```json
{
    "keywords": ["yoga mats", "candles"],
    "country": "US",
    "maxStores": 200,
    "includeContactEnrichment": true,
    "minProductCount": 5
}
````

#### Advanced: Enrich a known URL list

```json
{
    "inputUrls": [
        "https://allbirds.com",
        "https://tentree.com",
        "https://meundies.com"
    ],
    "includeContactEnrichment": true
}
```

***

### Example Output

Each dataset item contains a fully enriched store lead:

```json
{
    "url": "https://serenitycandles.myshopify.com",
    "domain": "serenitycandles.myshopify.com",
    "storeName": "Serenity Candles Co.",
    "contactEmail": "hello@serenitycandles.com",
    "phoneNumber": "+1 (512) 847-3920",
    "physicalAddress": "4821 Burnet Rd, Austin, TX 78756",
    "ownerFounderName": "Jessica Hartwell",
    "socialLinks": {
        "instagram": "serenitycandles",
        "facebook": "serenitycandlesco",
        "twitter": "serenitycandles",
        "tiktok": "@serenitycandles",
        "pinterest": "serenitycandlesco",
        "linkedin": null,
        "youtube": null
    },
    "shopifyTheme": "Dawn",
    "estimatedProductCount": 48,
    "reviewCount": null,
    "storeNiche": "Home & Garden",
    "metaDescription": "Hand-poured soy candles made in Austin, TX. Free shipping on orders over $50.",
    "hasBlog": true,
    "hasWholesale": true,
    "detectedApps": ["Klaviyo", "Yotpo", "Afterpay"],
    "isShopify": true,
    "discoveryMethod": "google_search",
    "keyword": "candles",
    "scrapedAt": "2026-04-02T14:23:10.812Z"
}
```

***

### Output Fields Reference

| Field | Type | Description |
|---|---|---|
| `url` | string | Full store URL as discovered |
| `domain` | string | Normalized domain (no `www`) |
| `storeName` | string | null | From `og:site_name` or `<title>` |
| `contactEmail` | string | null | Best contact email found |
| `phoneNumber` | string | null | Phone extracted from contact page |
| `physicalAddress` | string | null | Street address from contact page |
| `ownerFounderName` | string | null | Owner/founder name from About page |
| `socialLinks` | object | Instagram, Facebook, Twitter/X, TikTok, Pinterest, LinkedIn, YouTube |
| `shopifyTheme` | string | null | Shopify theme name (e.g. "Dawn", "Debut") |
| `estimatedProductCount` | integer | null | Product count from sitemap.xml |
| `reviewCount` | integer | null | Total review count (when available) |
| `storeNiche` | string | null | Auto-detected niche category |
| `metaDescription` | string | null | Store's SEO meta description |
| `hasBlog` | boolean | Whether store has an active blog |
| `hasWholesale` | boolean | Whether store has a wholesale/trade page |
| `detectedApps` | string\[] | Shopify apps detected in page source |
| `isShopify` | boolean | Confirmed Shopify detection |
| `discoveryMethod` | string | `google_search`, `url_input`, or `keyword_location` |
| `keyword` | string | null | Keyword that triggered this store's discovery |
| `scrapedAt` | string | ISO 8601 timestamp |

***

### Detected Apps

The actor identifies 20+ common Shopify apps from page source signatures:

Klaviyo · ReCharge · Gorgias · Yotpo · Okendo · LoyaltyLion · Privy · SMSBump · Postscript · Attentive · Tidio · Intercom · Hotjar · Omnisend · Judge.me · Stamped.io · Loox · Afterpay · Klarna · ShipStation · Shogun · PageFly · GemPages · Bold Commerce

***

### Pricing

**$4.00 per 1,000 stores found.**

| Stores | Cost |
|---|---|
| 100 | $0.40 |
| 500 | $2.00 |
| 1,000 | $4.00 |
| 5,000 | $20.00 |

With contact enrichment enabled, each store incurs ~4–6 additional page loads (contact page, about page, blog check, wholesale check, sitemap). For large runs, consider disabling `includeContactEnrichment` to find store URLs first, then re-run with a URL list for targeted enrichment.

***

### Performance & Rate Limiting

- Google searches: 3 concurrent, 2–4s delay between pages
- Store enrichment: 5 concurrent, 1–2s delay between pages
- Realistic user-agent rotation across 6 browser fingerprints
- Per-store error isolation — one failed store never crashes the run

***

### Legal & Ethical Use

This actor only collects publicly available information visible to any website visitor. All data collected is from public-facing pages (contact pages, about pages, social media links). Users are responsible for complying with applicable data protection laws (GDPR, CCPA, CAN-SPAM) when using this data for outreach.

***

### Support

For issues, feature requests, or custom data requirements, open a GitHub issue or contact the actor author.

# Actor input Schema

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

List of product/niche keywords to search for Shopify stores. E.g. \["yoga mats", "candles", "pet supplies"]. Required if inputUrls is not provided.

## `inputUrls` (type: `array`):

Optional list of store URLs to directly enrich (detect Shopify and extract all business data). Use this instead of or in addition to keywords.

## `country` (type: `string`):

Country to target for Google searches. Affects the Google domain used (e.g. google.co.uk for UK).

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

Maximum number of Shopify stores to find and return. Increasing this will consume more credits.

## `includeContactEnrichment` (type: `boolean`):

When enabled, the actor visits each store's contact page, about page, and special pages (blog, wholesale) to extract emails, phone numbers, physical addresses, and owner names. Disabling speeds up the run but returns less data.

## `minProductCount` (type: `integer`):

Only include stores that have at least this many products (estimated from sitemap.xml). Leave empty to include all stores regardless of size.

## Actor input object example

```json
{
  "keywords": [
    "yoga mats",
    "candles",
    "skincare"
  ],
  "inputUrls": [
    "https://allbirds.com",
    "https://gymshark.com"
  ],
  "country": "US",
  "maxStores": 100,
  "includeContactEnrichment": true,
  "minProductCount": 10
}
```

# 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": [
        "yoga mats",
        "candles"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("botflowtech/shopify-store-leads-finder").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": [
        "yoga mats",
        "candles",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("botflowtech/shopify-store-leads-finder").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).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": [
    "yoga mats",
    "candles"
  ]
}' |
apify call botflowtech/shopify-store-leads-finder --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=botflowtech/shopify-store-leads-finder",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Shopify Store B2B Leads Finder",
        "description": "Find Shopify-powered e-commerce stores in any niche with contact emails, social links, phone numbers, and business intelligence. Perfect for SaaS companies, marketing agencies, and B2B outreach.",
        "version": "0.1",
        "x-build-id": "6lyWLjSU3KR683rrb"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/botflowtech~shopify-store-leads-finder/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-botflowtech-shopify-store-leads-finder",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/botflowtech~shopify-store-leads-finder/runs": {
            "post": {
                "operationId": "runs-sync-botflowtech-shopify-store-leads-finder",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/botflowtech~shopify-store-leads-finder/run-sync": {
            "post": {
                "operationId": "run-sync-botflowtech-shopify-store-leads-finder",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "keywords": {
                        "title": "Search Keywords",
                        "type": "array",
                        "description": "List of product/niche keywords to search for Shopify stores. E.g. [\"yoga mats\", \"candles\", \"pet supplies\"]. Required if inputUrls is not provided.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "inputUrls": {
                        "title": "Input Store URLs",
                        "type": "array",
                        "description": "Optional list of store URLs to directly enrich (detect Shopify and extract all business data). Use this instead of or in addition to keywords.",
                        "items": {
                            "type": "object",
                            "required": [
                                "url"
                            ],
                            "properties": {
                                "url": {
                                    "type": "string",
                                    "title": "URL of a web page",
                                    "format": "uri"
                                }
                            }
                        }
                    },
                    "country": {
                        "title": "Target Country",
                        "enum": [
                            "US",
                            "UK",
                            "CA",
                            "AU",
                            "IN",
                            "DE",
                            "FR",
                            "global"
                        ],
                        "type": "string",
                        "description": "Country to target for Google searches. Affects the Google domain used (e.g. google.co.uk for UK).",
                        "default": "US"
                    },
                    "maxStores": {
                        "title": "Maximum Number of Stores",
                        "minimum": 1,
                        "maximum": 5000,
                        "type": "integer",
                        "description": "Maximum number of Shopify stores to find and return. Increasing this will consume more credits.",
                        "default": 100
                    },
                    "includeContactEnrichment": {
                        "title": "Include Contact Enrichment",
                        "type": "boolean",
                        "description": "When enabled, the actor visits each store's contact page, about page, and special pages (blog, wholesale) to extract emails, phone numbers, physical addresses, and owner names. Disabling speeds up the run but returns less data.",
                        "default": true
                    },
                    "minProductCount": {
                        "title": "Minimum Product Count (Optional)",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Only include stores that have at least this many products (estimated from sitemap.xml). Leave empty to include all stores regardless of size."
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
