# Shopify Store Finder - Find Stores By Country, Industry & Rank (`zaver.api/shopify-store-finder`) Actor

Find Shopify stores by country, ranking, industry or tech stack from millions of shopify stores, then verify each store live and add revenue estimates, catalogue size, apps, ad pixels, emails and social profiles. Lead lists for agencies, SaaS and researchers. CSV, Excel or JSON.

- **URL**: https://apify.com/zaver.api/shopify-store-finder.md
- **Developed by:** [Zaver](https://apify.com/zaver.api) (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 $0.99 / 1,000 dataset item storeds

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 Finder — Lists of Shopify Stores by Country, Traffic, Industry and Revenue

**Find Shopify stores and turn them into leads.** Search from millions of Shopify websites\*\* by country, traffic rank, industry, tech stack, Shopify Plus or launch date. Then verify each store live and add what a lead list needs: revenue estimate, catalogue size, installed apps, ad pixels, emails and social profiles. Export CSV, Excel or JSON.

> ⭐ Millions of Shopify Stores · top stores by traffic · stores by country · new Shopify stores · live verification · revenue estimates · apps and ad pixels · emails and socials · pay per store, add-ons charged only when they deliver

### How to find Shopify stores with this Actor

Every "how to find Shopify stores" method has the same problem: search operators and browser extensions find a few stores at a time, with no data. This Actor answers the questions people actually ask, in one run:

| You want | Set |
|---|---|
| **Top 1,000 Shopify stores** | leave countries empty, sort by traffic rank, max stores 1000 |
| **List of Shopify websites by traffic** | sort by traffic rank, optionally a best-rank cut-off |
| **Shopify stores in India**, the US, the UK or any of 230 countries | countries = `IN` |
| **Top 10 Shopify stores in India** | countries = `IN`, sort by traffic rank, max stores 10 |
| **List of new Shopify stores** | new stores since = a date, sort by newest |
| **Biggest e-commerce brands on Shopify** | only Shopify Plus, sort by revenue estimate |
| **Competitor Shopify websites in fashion or beauty** | industries = `Fashion` or `Beauty`, plus a country |
| **Shopify stores using Klaviyo, Klarna or Gorgias** | tech stack keywords |
| **Shopify stores database** for a whole market | countries = `US`, max stores 100000, page with skip |
| **Is this site on Shopify?** | specific domains |

### What data does it extract?

#### Index fields, on every store

| Field | Description |
|---|---|
| `domain`, `url`, `shopHost` | The website, and the shop address when the store lives on a subdomain such as store.brand.com |
| `company`, `vertical` | Company name and industry |
| `country`, `state`, `city`, `zip` | Location, when known |
| `pageRank`, `trancoRank`, `cruxRankTier` | Global traffic ranks: lower is more visited |
| `revenueEstimateSeed`, `techSpendSeed` | Yearly revenue and technology spend estimates from the index. `revenueSeedCapped` marks the largest companies, whose seed estimate is capped at $2 billion |
| `skuCount`, `employees` | Catalogue and company size from the index |
| `shopifyPlusSeed`, `ecommercePlatform`, `paymentPlatforms`, `marketingAutomation`, `crm`, `hosting`, `agency` | Known tech stack |
| `emailsSeed`, `phonesSeed`, `facebookSeed`, `twitterSeed`, `linkedinSeed` | Contact details already in the index |
| `firstDetected`, `lastFound` | When the store was first and last seen on Shopify |

#### Verify stores live

| Field | Description |
|---|---|
| `storeStatus` | `live`, `unreachable` or `not_shopify_or_closed` |
| `storeName`, `storeCountry`, `currency`, `storeCity`, `myshopifyDomain` | From the store itself |
| `productCount`, `collectionCount`, `brandsSold`, `topProductTypes` | Catalogue, up to 500 products counted |
| `priceMin`, `priceMax`, `priceMedian`, `priceAverage` | Price level in the store's currency |
| `newestProductAt`, `productsUpdatedLast30Days` | How active the store is |

#### Estimate revenue

| Field | Description |
|---|---|
| `revenueEstimateMonthly`, `revenueEstimateAnnual` | In USD, from traffic rank, catalogue size, price level, activity and advertising |
| `revenueTier` | `under $1k/mo` to `over $1M/mo` |
| `revenueConfidence`, `trafficEstimateMonthly` | How much to trust it, and the traffic assumption behind it |

#### Detect apps and ad pixels

| Field | Description |
|---|---|
| `theme`, `themeBase` | Theme in use |
| `apps` | Installed apps by category: email marketing, SMS, reviews, support chat, subscriptions, loyalty, BNPL, popups, upsell, page builder, translation, shipping, affiliates |
| `adPixels`, `isAdvertising`, `analytics` | Meta, TikTok, Google, Pinterest, Snap, Microsoft and Criteo pixels |
| `gaps` | Categories the store has no app for, which is where you can sell |
| `markets`, `shopifyPlusDetected`, `appCount` | Languages served, Plus markers, total apps detected |

#### Find emails and social profiles

`email`, `emails`, `websitePhones`, `facebook`, `instagram`, `linkedin`, `twitter`, `youtube`, `tiktok`, `pinterest`, `whatsapp`, `telegram`, `contactStatus`.

### Why use this Shopify store database

#### One index, six million stores, every country

Most "Shopify stores list" pages show a few hundred examples. This index covers 6.6 million stores across 230 countries, 2.2 million of them with a traffic rank and 3 million with a revenue estimate.

#### Verified live, not just listed

An index is only as good as the day it was built. **Verify stores live** opens each store and confirms it is a real, open Shopify store, including brands whose shop runs on a subdomain. Dead and migrated stores are marked, not sold to you as leads.

#### Data that qualifies a lead

Revenue tier, catalogue size, apps and ad pixels tell you whether a store has budget and what it is missing. "Stores in Germany with over 500 products and no reviews app" is a campaign, not a list.

#### You pay for outcomes

Each add-on is charged only when it delivers: a live store, a revenue estimate, detected tech, or an email address. Dead stores and empty scans are free.

### How to get a list of Shopify stores

1. Open the Actor and enter **Countries**, or leave it empty for worldwide.
2. Choose **Sort by**: traffic rank, revenue, newest or catalogue size.
3. Add filters: industries, tech keywords, Shopify Plus only, best-rank cut-off, minimum revenue, new stores since a date.
4. Set **Max stores**, and **Skip** to page through big lists across runs.
5. Turn on the add-ons you need: verify, revenue, tech, contacts.
6. Press **Start** and export as CSV, Excel, JSON or XML, or read the dataset through the API.

> 💡 Country queries load in seconds. A worldwide query loads the full 225 MB index first, which takes about a minute.

### Input example

```json
{
  "countries": ["IN"],
  "sortBy": "rank",
  "maxStores": 500,
  "verticals": ["Fashion", "Beauty"],
  "verifyStores": true,
  "estimateRevenue": true,
  "detectTech": true,
  "findContacts": true
}
```

| Field | Type | Description |
|---|---|---|
| `countries` | array | Two-letter country codes. Empty means worldwide. |
| `sortBy` | string | `rank`, `revenue`, `newest` or `catalog`. |
| `maxStores`, `skip` | integer | Page size and offset. |
| `verticals`, `techKeywords` | array | Industry and tech stack filters. |
| `onlyShopifyPlus`, `onlyRanked`, `onlyWithSeedEmail` | boolean | Quick filters. |
| `maxRank`, `minRevenueSeed`, `minProducts` | integer | Threshold filters. |
| `detectedAfter` | string | Only stores first detected on or after this date. |
| `domains` | array | Look up specific domains instead of searching. |
| `verifyStores`, `estimateRevenue`, `detectTech`, `findContacts` | boolean | Add-ons, off by default. |

### Output example

```json
{
  "domain": "brickem.com.my",
  "url": "https://brickem.com.my",
  "company": "Brickem LEGO Online Store",
  "vertical": "Shopping",
  "country": "MY",
  "city": "Kuching",
  "pageRank": 31334834,
  "revenueEstimateSeed": 9058,
  "skuCount": 1036,
  "storeStatus": "live",
  "storeName": "Brickem LEGO Online Store",
  "currency": "MYR",
  "productCount": 500,
  "priceAverage": 214.5,
  "newestProductAt": "2026-08-16",
  "revenueEstimateMonthly": 2300,
  "revenueTier": "$1k-10k/mo",
  "revenueConfidence": "medium",
  "theme": "Craft - After Voucher v1",
  "apps": {"reviews": ["Judge.me"]},
  "adPixels": ["TikTok Pixel"],
  "gaps": ["email_marketing", "support_chat", "bnpl", "loyalty", "subscriptions", "popups"],
  "email": "hello@brickem.com.my",
  "facebook": "https://www.facebook.com/brickem",
  "contactStatus": "email_found"
}
```

### Pricing

Pay per store, and per add-on outcome. **No start fee, no monthly rental, no minimum.**

| Event | Charged for | Price |
|---|---|---|
| `store-listed` | each store returned from the index | **$0.99 / 1,000** |
| `store-profiled` | each store verified live, with catalogue and price data | **$2.99 / 1,000** |
| `revenue-estimated` | each revenue estimate produced | **$1.99 / 1,000** |
| `tech-detected` | each store where a theme, apps or pixels were detected | **$1.99 / 1,000** |
| `contacts-found` | each store where an email address was found | **$1.99 / 1,000** |

| You export | You pay |
|---|---|
| 1,000 stores, index data only | **$0.99** |
| 1,000 stores fully verified with revenue and tech, all live | **$7.96** |
| 1,000 stores with everything, emails found for 500 | **$8.96** |

You are charged right after each batch lands in your dataset, so a run you stop early costs only what it delivered. Stores that are dead, unreachable or yield nothing for an add-on are not charged for that add-on.

### Use cases

#### Shopify app and SaaS lead generation

Find stores in your target countries that lack your category of app. `gaps` tells you which stores have no email marketing, no reviews, no chat, no loyalty and no BNPL.

#### Agencies: e-commerce, ads, SEO and CRO

Stores with ad pixels are already spending on ads. Stores with large catalogues and no page builder or upsell app are CRO prospects. Revenue tier tells you who can pay.

#### Market research and competitor analysis

Map an industry in a country: how many stores, who leads by traffic, which apps and payment methods dominate, and how many launched this year.

#### Wholesale, logistics and payments sales

Filter by catalogue size, revenue tier, country and currency to find merchants that fit your minimums.

#### Investors and analysts

Track the biggest brands on Shopify Plus, new store launches by month, and revenue tiers by market.

#### Store owners

See who your competitors are, what theme and apps they run, and how your catalogue and prices compare.

### FAQ

**How many Shopify stores are in the index?**
6.6 million domains detected running Shopify, with 2.2 million traffic-ranked and 1.3 million with a known country. Index date: 24 August 2026. The index is refreshed periodically; live verification tells you what is true today.

**How accurate are the revenue estimates?**
They are estimates from traffic rank, catalogue size, price level, store activity and advertising, converted to USD. Use the tier and confidence for segmentation, not as accounting figures. The index's own yearly estimate is returned separately as `revenueEstimateSeed`.

**Why does a store show as not\_shopify\_or\_closed?**
It moved off Shopify, closed, or blocks automated visitors. Big brands with custom front ends sometimes block the store endpoints; their index data is still returned. You are not charged the verification add-on for these.

**Can I get the top 1000 Shopify stores?**
Yes: leave countries empty, sort by traffic rank, max stores 1000.

**Can I get all Shopify stores in a country?**
Yes. Set max stores high and use skip to page through. The United States has about 486,000 stores in the index, the UK 110,000, Australia 101,000, Germany 75,000, India 57,000.

**Why do so many stores have no country?**
The index only records a country when it can be established from the site. Live verification fills in `storeCountry` and `currency` from the store itself.

**Does it find emails for every store?**
No. Expect an email for roughly half of live stores. Stores with only a contact form return their social profiles and `contactStatus: none`, and are not charged the contacts add-on.

**Is this data legal to use?**
This is general information, not legal advice. Index data is licensed for this use; the live add-ons collect only what each store publishes publicly. Business contact data can still be personal data under laws such as GDPR, and email outreach is regulated in most countries. Follow the rules for cold outreach where your recipients are.

**Is this WooCommerce too?**
Not yet. A WooCommerce index is planned.

### Integrations

- **Apify API** - start runs and fetch datasets from Python, Node.js, cURL or any HTTP client.
- **MCP server** - call this Actor as a tool from Claude, Cursor, ChatGPT agents and any MCP client.
- **No-code** - Make, Zapier, n8n, Google Sheets, Airtable, HubSpot, Slack, webhooks.
- **Schedules** - refresh a segment monthly and append to the same dataset.
- **Exports** - JSON, JSONL, CSV, Excel (XLSX), XML, HTML table.

### Related actors

**Lead generation**

- [Google Maps Scraper](https://apify.com/zaver.api/google-maps-scraper) - local businesses with emails and social profiles
- [Google Places Scraper](https://apify.com/zaver.api/google-places-scraper) - local business leads by query and location
- [Reddit Lead Finder](https://apify.com/zaver.api/reddit-lead-finder) - people asking for what you sell
- [Instagram Email & Contact Extractor](https://apify.com/zaver.api/instagram-email-contact-extractor) - contact details for creator lists

**E-commerce**

- [Amazon Product Scraper](https://apify.com/zaver.api/amazon-product-scraper) - search results, prices and ASIN lookup
- [Amazon Best Sellers Scraper](https://apify.com/zaver.api/amazon-bestsellers-scraper) - top 100 by category
- [Google Shopping Scraper](https://apify.com/zaver.api/google-shopping-scraper) - products, prices and sellers

***

*Not affiliated with, endorsed by or sponsored by Shopify. The live add-ons read only what each store publishes publicly and never log in. You are responsible for using the data in line with applicable laws and each store's terms.*

# Actor input Schema

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

Two-letter country codes, one per line (<code>US</code>, <code>IN</code>, <code>GB</code>, <code>DE</code>). Leave empty to search all 6.6 million stores worldwide, which takes about a minute longer to load.

## `sortBy` (type: `string`):

Order of results. <code>rank</code> = most visited first (global traffic rank), <code>revenue</code> = highest seed revenue estimate first, <code>newest</code> = most recently detected stores first, <code>catalog</code> = most products first.

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

How many stores to return.

## `skip` (type: `integer`):

Skip this many stores first. Use it to page through a large list across runs: 0, then 1000, then 2000.

## `verticals` (type: `array`):

Optional. Keep stores whose industry contains any of these words: <code>Fashion</code>, <code>Beauty</code>, <code>Food</code>, <code>Sports</code>, <code>Health</code>, <code>Home</code>, <code>Technology</code>, <code>Pets</code>.

## `techKeywords` (type: `array`):

Optional. Keep stores whose known stack mentions any of these: <code>Klaviyo</code>, <code>Shopify Plus</code>, <code>Klarna</code>, <code>PayPal</code>, <code>Hubspot</code>, <code>Gorgias</code>.

## `onlyShopifyPlus` (type: `boolean`):

Keep only stores detected on Shopify Plus.

## `onlyRanked` (type: `boolean`):

Keep only stores that have a global traffic rank, which usually means real visitor traffic.

## `maxRank` (type: `integer`):

Optional. Keep only stores ranked better than this global rank, for example 1000000 for the top million websites. 0 means no cut-off.

## `minRevenueSeed` (type: `integer`):

Optional. Keep only stores whose seed revenue estimate is at least this. 0 means no minimum.

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

Optional. Keep only stores with at least this many products in the index. 0 means no minimum.

## `onlyWithSeedEmail` (type: `boolean`):

Keep only stores that already have an email address in the index. Turn on 'Find emails and social profiles' to look up the rest live.

## `detectedAfter` (type: `string`):

Optional. Only stores first detected on or after this date (<code>2026-06-01</code>). Use it for lists of new Shopify stores.

## `domains` (type: `array`):

Optional. Look up these store domains instead of searching: one per line. Rows tell you whether each domain is in the index.

## `verifyStores` (type: `boolean`):

Open each store and confirm it is a live Shopify store. Adds store name, real country and currency, product count, price range, newest product date, brands sold and collection count. Charged per live store.

## `estimateRevenue` (type: `boolean`):

Estimate monthly and annual revenue in USD from traffic rank, catalogue size, price level and activity, with a tier and confidence. Needs the live store data and is charged per estimate produced.

## `detectTech` (type: `boolean`):

Detect the theme, installed apps by category (email marketing, reviews, chat, subscriptions, loyalty, buy-now-pay-later), analytics and ad pixels, markets, and which categories are missing. Charged per store where something was detected.

## `findContacts` (type: `boolean`):

Scan the store's website for email addresses, phone numbers and Facebook, Instagram, LinkedIn, X, YouTube, TikTok and WhatsApp links. Charged only when an email address is found.

## Actor input object example

```json
{
  "countries": [
    "US"
  ],
  "sortBy": "rank",
  "maxStores": 100,
  "skip": 0,
  "onlyShopifyPlus": false,
  "onlyRanked": false,
  "maxRank": 0,
  "minRevenueSeed": 0,
  "minProducts": 0,
  "onlyWithSeedEmail": false,
  "verifyStores": false,
  "estimateRevenue": false,
  "detectTech": false,
  "findContacts": false
}
```

# Actor output Schema

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

All dataset items.

## `resultsCsv` (type: `string`):

CSV download.

## `runSummary` (type: `string`):

Counts for the run.

# 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 = {
    "countries": [
        "US"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("zaver.api/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 = { "countries": ["US"] }

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

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,zaver.api/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/DkbiQT5PwbxZsj57F/builds/ulijrAQ2hF8kUdoiY/openapi.json
