# Shopify Store Finder: Leads by Keyword with Emails & Ratings (`andracore/shopify-store-finder`) Actor

Find Shopify stores by keyword: business emails, phones and address, Shop app rating, sample products, installed apps, ad pixel IDs and social profiles. Filter by rating, price, store country or contacts. Skip stores from earlier runs. No login.

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

## Pricing

from $4.00 / 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?

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 Finder: Leads by Keyword with Emails & Ratings

Type what you are looking for ("yoga mat", "organic coffee", "dog harness") and get a list of the Shopify stores that sell it, with **business emails and phones, Shop app rating, sample products, installed apps, ad pixel IDs and social profiles** in one row per store.

No login, no browser, no API key. Stores are discovered through the public search of the Shop app (Shopify's shopping app) and each store's own public pages.

![How the Shopify Store Finder works: type a product keyword, the Actor finds the Shopify stores that sell it, and you get leads with rating, email, phone, apps and ad pixels as CSV, Excel, JSON or through the API](https://api.apify.com/v2/key-value-stores/zZwndLrYGfCvgDJLT/records/shopify-store-finder-how-it-works.png?signature=16AGB6eSfuvjhpaYyr4g3)

### Why this finder

- **Complete lead in one row.** Contacts, rating, catalog size, country, apps and pixels come together, so you can qualify and reach out without running a second tool.
- **More stores per keyword.** The search is repeated across price bands and sale items to reach stores a single search would miss: about 70 stores for "yoga mat" in our tests.
- **Pay only for leads you can contact.** Turn on *Only stores with an email or phone* and stores without contacts are skipped and not charged.
- **Fresh leads every week.** *Only new stores* remembers what earlier runs returned and never charges you twice for the same store.
- **Filters that matter.** Minimum rating, number of ratings, product price range and the country where the store is based.
- **Ad intelligence included.** Meta, TikTok, Google Ads, GA4 and Tag Manager IDs show which stores are spending on ads.
- **Pairs with Shopify Store Analyzer.** Find stores here, then analyze best sellers, prices, discounts and launches with [Shopify Store Analyzer](https://apify.com/andracore/shopify-store-intelligence).

### What you get for each store

| Field | What it is |
|---|---|
| `storeName`, `storeUrl`, `shopAppUrl`, `logoUrl` | Who the store is and where to find it |
| `rating`, `ratingsCount`, `reviewsCount` | Product rating on the Shop app |
| `sampleProducts` | Up to 3 products that matched your keyword, with price and image |
| `contactEmails`, `contactPhones`, `tradeName`, `businessAddress` | Business contacts the store publishes on its website and on its Shop app page |
| `country`, `city`, `currency`, `publishedProductsCount` | Where the store is and how big its catalog is |
| `theme`, `apps` | Theme and 60+ apps detected (Klaviyo, Judge.me, Yotpo, Recharge, Gorgias, Rebuy...) |
| `pixels` | Meta, TikTok, Google Ads, GA4, Google Tag, Tag Manager, Pinterest, Snap, Reddit, Microsoft IDs |
| `socialLinks` | Instagram, Facebook, TikTok, YouTube, Pinterest and X |

### Use cases

- **B2B lead generation.** Agencies, app makers and service providers get a qualified list of stores in a niche with an email to contact.
- **Supplier and wholesale outreach.** Find the brands that sell a product category and pitch them.
- **Market mapping.** See who sells a product, at what price, with what rating and from which country.
- **Ad research.** Spot which stores in a niche run Meta, TikTok or Google ads.

### How to use

1. Add one or more **Keywords**, one per line.
2. Choose the country the stores must ship to (prices come in that currency).
3. Set **Max stores per keyword** and, if you want, the filters: minimum rating, price range, store country, only stores with contacts.
4. Building a list over time? Turn on **Only new stores** and give the list a name.
5. Click **Start** and download the leads as CSV, Excel or JSON, or read them through the Apify API.

#### Input example

```json
{
  "keywords": ["yoga mat", "organic coffee"],
  "shipsTo": "US",
  "maxStoresPerKeyword": 100,
  "minRating": 4,
  "onlyWithContacts": true,
  "storeCountries": ["US", "CA"],
  "onlyNewStores": true,
  "monitorName": "wellness-leads"
}
```

#### Output example

```json
{
  "keyword": "yoga mat",
  "storeName": "stakt",
  "storeUrl": "https://shopstakt.com",
  "shopAppUrl": "https://shop.app/m/shopstakt",
  "shopifyId": "52249919670",
  "logoUrl": "https://cdn.shopify.com/shop-assets/shopify_brokers/meetgoodsport.myshopify.com/1785786980/Logo_Black.png.png?format=webp",
  "rating": 4.76,
  "ratingsCount": 2419,
  "reviewsCount": 611,
  "sampleProducts": [
    {
      "title": "The Stakt Mat",
      "price": 94,
      "currency": "USD",
      "url": "https://shopstakt.com/products/the-mat",
      "imageUrl": "https://cdn.shopify.com/s/files/1/0522/4991/9670/products/BlockC-Grey.jpg?v=1763479683"
    },
    {
      "title": "The Stakt Mat Pro",
      "price": 128,
      "currency": "USD",
      "url": "https://shopstakt.com/products/the-stakt-mat-pro",
      "imageUrl": "https://cdn.shopify.com/s/files/1/0522/4991/9670/files/mat_black_block_C_42abc1c3-938e-47ba-9237-80c8c7e6b7c1.png?v=1761671139&format=webp"
    }
  ],
  "contactEmails": [
    "support@shopstakt.com"
  ],
  "contactPhones": [
    "3476192779"
  ],
  "tradeName": null,
  "businessAddress": "135 Madison Avenue, New York, New York 10016, United States",
  "country": "US",
  "city": "New York",
  "currency": "USD",
  "publishedProductsCount": 43,
  "myshopifyDomain": "meetgoodsport.myshopify.com",
  "theme": "Stylux B2B Launch Reintegration",
  "apps": [
    "Klaviyo",
    "Yotpo",
    "Klarna",
    "Redo"
  ],
  "pixels": {
    "tiktokPixelIds": [
      "CEQ6I13C77U7L5HN8SPG"
    ],
    "googleAnalyticsIds": [
      "G-LWN28FCZL2"
    ],
    "googleAdsIds": [
      "AW-11199992252"
    ],
    "googleTagIds": [
      "GT-K4CGBVHX"
    ],
    "pinterestTagIds": [
      "2614476929476"
    ]
  },
  "socialLinks": {
    "instagram": "https://www.instagram.com/shopstakt",
    "facebook": "https://www.facebook.com/stakt.mat",
    "tiktok": "https://www.tiktok.com/@shopstakt"
  }
}
```

### Pricing

**$5 per 1,000 stores**, contacts, apps and pixels included. Paid Apify plans pay less: **$4.75** on Bronze, **$4.50** on Silver and **$4** on Gold and above.

Platform usage is on us. Set a maximum cost per run in the run options and the Actor stops exactly there.

### Good to know

- **Coverage.** Stores appear only if they sell on the Shop app, which includes most active Shopify brands. In our latest test of 30 stores, 19 came with a business email, 18 with a phone and 14 with a business address, and most had detectable apps.
- **Contacts** are the business details each store publishes on its own site. The Actor does not guess or buy emails.
- **Ratings** come from product reviews on the Shop app. Stores without reviews there have an empty rating.
- **Speed.** 30 stores with full enrichment take well under a minute. Turn off *Add contacts, apps and pixels* for a faster list.
- **Results vary a little between runs** because the Shop app search is personalized and changes over time. *Only new stores* takes care of duplicates across runs.

### FAQ

**Is this legal?**
The Actor reads public search results and the business information stores publish on their own pages. It collects no personal data. Follow the privacy and anti-spam rules that apply to you when you contact anyone.

**Do I need a proxy?**
No. If a site blocks the run, the Actor moves to Apify Proxy on its own.

**Can I run several niches at once?**
Yes. Add as many keywords as you want; each store is returned once even if it matches several keywords.

Found a bug or need a field that is missing? Open an issue in the Issues tab and it will be looked at quickly.

# Actor input Schema

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

What the stores sell, one keyword per line. Example: yoga mat, organic coffee, dog harness.

## `shipsTo` (type: `string`):

Only stores that deliver to this country. Prices come in that country's currency.

## `maxStoresPerKeyword` (type: `integer`):

How many stores to return for each keyword.

## `minRating` (type: `number`):

Only stores whose products average at least this rating on the Shop app (0 to 5).

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

Only stores with at least this many product ratings on the Shop app.

## `enrichStores` (type: `boolean`):

Visits each store to add its business email and phone, country, currency, product count, theme, installed apps, ad pixel IDs and social profiles. Included in the price.

## `onlyWithContacts` (type: `boolean`):

Skip stores that publish no business email or phone. You only pay for the stores returned.

## `minPrice` (type: `integer`):

Only stores selling matching products at or above this price, in the shipping country's currency.

## `maxPrice` (type: `integer`):

Only stores selling matching products at or below this price.

## `storeCountries` (type: `array`):

Only stores based in these countries. Leave empty for any country.

## `onlyNewStores` (type: `boolean`):

Remembers the stores returned in earlier runs and never returns them again. Use it to build a lead list week after week without paying twice for the same store.

## `monitorName` (type: `string`):

Use a different name for each lead list or client so their histories stay separate.

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

Usually not needed. If a site blocks the run, the Actor switches to Apify Proxy on its own.

## Actor input object example

```json
{
  "keywords": [
    "yoga mat"
  ],
  "shipsTo": "US",
  "maxStoresPerKeyword": 50,
  "minRating": 0,
  "minReviews": 0,
  "enrichStores": true,
  "onlyWithContacts": false,
  "onlyNewStores": false,
  "monitorName": "default",
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `results` (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 = {
    "keywords": [
        "yoga mat"
    ]
};

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

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

```

## MCP server setup

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

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/QOxTUlF6kAPTlhn8q/builds/LWHPLz2HBtqeWFDkx/openapi.json
