# Shopify Store Leads Database — 950K Stores, Emails & Apps (`insanedev/shopify-store-list`) Actor

Shopify store scraper and finder: get a list of Shopify stores by country, niche, installed app or theme from 950,000+ real stores. Each lead has public e-mails, phones, socials, apps, theme and top brands. First 25 leads free, no store billed twice. A Store Leads and BuiltWith alternative.

- **URL**: https://apify.com/insanedev/shopify-store-list.md
- **Developed by:** [Insane Developer](https://apify.com/insanedev) (community)
- **Categories:** E-commerce, Lead generation
- **Features:** Limited permissions
- **Stats:** 111 total users, 48 monthly users, 99.3% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $4.50 / 1,000 leads

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 Leads** is a **Shopify store list and lead finder**. Pick countries, a niche keyword, the apps or theme a store uses, or the brands it sells, and get real Shopify stores with their public e-mails, phone numbers, social profiles, installed apps and catalogue stats, read live from each storefront.

**200 leads in about a minute.** On the same input (US coffee stores, 200 leads, 28 October 2026) this Actor finished in 56 seconds; the other live-reading Shopify leads Actor we tested took 829 seconds. On the 1,000 most-visited US Shopify stores it finds a public e-mail for 92% of them and an Instagram profile for 84%.

![Shopify Store Leads: 200 leads in 56 seconds vs 829 s](https://api.apify.com/v2/key-value-stores/RWAoVG2O9MHUgawJ0/records/shopify-store-leads-speed-comparison.png)

**Price:** the first 25 leads are free for every Apify account, then $5.50 per 1,000 leads ($4.50 on Gold). 200 leads cost about $1.10, and Apify's free $5 monthly credit covers about 900 leads. It is a pay-per-lead **Store Leads / BuiltWith alternative for Shopify**: no subscription, and the results go to API, CSV, Excel, Google Sheets, HubSpot, Clay, Make, n8n or Zapier.

The October 2026 index has about 950,000 Shopify stores: 330,000 in the US, 70,000 in the UK, 60,000 in Australia, 50,000 each in Canada and India, and 40,000 each in Germany and France. On the homepages of the 2,000 most-visited stores (September 2026), 48.4% run Klaviyo, 31.1% Judge.me, 16.5% Yotpo and 13.3% Gorgias.

### Shopify Store Leads vs. other Shopify store scrapers

#### Speed and contact coverage: 200 leads, same input

US coffee stores, 200 leads, every store read live, run on the Apify platform on 28–29 October 2026:

|                              | Shopify Store Leads (this Actor) | clearpath Shopify Store Leads Scraper |
| ---------------------------- | -------------------------------- | ------------------------------------- |
| Time to deliver 200 leads    | **56 s**                         | 829 s                                 |
| Leads with a public e-mail   | **195**                          | 142                                   |
| Leads with a phone number    | **156**                          | 106                                   |
| Leads with Instagram         | **179**                          | 124                                   |
| Leads with a street address  | **168**                          | 104                                   |

The 1,000 most-visited US Shopify stores took 238 seconds (about 4 minutes), with a public e-mail for 924 of them, a phone for 700, Instagram for 840 and an address for 699. Large runs split the work across several Apify runs with their own IP addresses, so the time per lead stays about the same as the list grows. You are billed once, in the run you started.

![Share of leads with e-mail, Instagram, phone and address](https://api.apify.com/v2/key-value-stores/RWAoVG2O9MHUgawJ0/records/shopify-store-leads-contact-coverage.png)

#### Features: 20 stores per tool

The same query in each tool on the same day (keyword "coffee", 20 stores, 26 October 2026, on the Apify platform). Each tool picks its own 20 stores, so the counts show coverage of different shops:

|                                     | Shopify Store Leads (this Actor)                          | clearpath Shopify Store Leads Scraper | pnda Shopify & WooCommerce Store Leads     |
| ----------------------------------- | --------------------------------------------------------- | ------------------------------------- | ------------------------------------------ |
| Stores with a public e-mail         | **20 of 20**                                              | 18 of 20                              | **20 of 20**                               |
| Stores with Instagram               | 19 of 20                                                  | 15 of 20                              | 20 of 20                                   |
| Stores with a phone number          | **18 of 20**                                              | 17 of 20                              | 14 of 20                                   |
| Street address                      | **18 of 20**                                              | 17 of 20                              | city only                                  |
| Installed apps and theme            | **20 of 20**                                              | not provided                          | not provided                               |
| Store rating                        | the store's review app (Yotpo, Judge.me)                  | Shop app rating                       | Trustpilot                                 |
| Data read live from each storefront | yes                                                       | yes                                   | no (snapshot)                              |
| Price per 1,000 leads               | $5.50 / $5.00 on Scale / $4.50 on Business, first 25 free | $5.99 / $5.29 / $4.99                 | $3.50 / $3.33 / $3.15, plus $0.005 per run |

Our one store without Instagram publishes none. A store whose site we can't read is delivered free.

Our leads are also sorted by real visits (Chrome UX Report), and **Only new leads** never bills a store your account already received.

### What does Shopify Store Leads do?

- **Shopify store list by country** — a list of websites hosted on Shopify in the US, UK, Germany, Australia… with city, currency and shipping countries.
- **Find Shopify stores using an app** — e.g. every store with Klaviyo, Recharge, Okendo, Gorgias or Attentive (about 70 apps detected on the storefront).
- **Find stockists and resellers of a brand** — stores whose catalogue includes the brands you name.
- **Shopify store database with popularity** — every store is placed among the **top N websites of its country by Chrome visits** (Chrome UX Report) or globally (Tranco rank), so you can start with the stores people actually visit.
- **Lead details** — theme, apps, web pixels, accepted payment methods (Shop Pay, PayPal, Apple Pay, Klarna…), postal address, the store's own review-app rating (Yotpo store rating, Judge.me and schema.org product reviews), Instagram / Facebook / TikTok / YouTube / Pinterest / X / LinkedIn, e-mails the store publishes on its homepage or contact page, top brands, product types, median price, share on sale and new products in the last 30 days, counted from up to 250 products per store.
- **Only new leads on every run** — the Actor remembers which stores your Apify account already received and skips them on the next run, so you don't pay for a store twice. Keep separate lists per client with **History name**. Each name is its own list, and a store you paid for in the last 30 days is free if another list delivers it again.
- **New Shopify stores every few days** — the index refresh starts every day and publishes a new index when it finishes, usually every few days. **Added within (days)** returns only stores that joined it recently (e.g. `30`), and every lead has a `firstSeenAt` date.
- **Leads with an e-mail only** — turn on **Only stores with a public e-mail**; stores without one on their homepage, contact page or contact-information page are skipped.
- **Check your own list of domains** — paste store domains into **Look up these domains only** to get the same lead row (apps, theme, socials, e-mails) for stores you already have, if they are in the index.
- **Stores that don't use your app** — **Doesn't use these apps** finds stores where an app (yours or a competitor's) isn't detected.

### What a Shopify store lead looks like (output example)

```json
{
    "name": "Seattle Coffee Gear",
    "url": "https://seattlecoffeegear.com",
    "country": "US",
    "city": "Lynnwood",
    "currency": "USD",
    "productsCount": 1410,
    "popularityTop": 50000,
    "popularityScope": "US",
    "firstSeenAt": "2026-09-30",
    "popularityRank": 188511,
    "theme": "Paper",
    "apps": ["Klaviyo", "Attentive", "Judge.me", "BOGOS", "Affirm", "Microsoft Clarity", "Elevar"],
    "paymentMethods": ["Shop Pay", "PayPal", "Apple Pay", "Google Pay", "Affirm"],
    "emails": ["commercial.sales@seattlecoffeegear.com"],
    "phones": ["8663724734", "4252421697", "+14256732706"],
    "address": "6825 216th St SW, Suite A, Lynnwood, WA, 98036, US",
    "reviewsRating": null,
    "reviewsCount": null,
    "instagram": "https://www.instagram.com/seattlecoffeegear",
    "facebook": "https://www.facebook.com/SeattleCoffeeGear",
    "topBrands": [
        {
            "name": "Rocket Espresso",
            "products": 31
        },
        {
            "name": "Fellow",
            "products": 17
        },
        {
            "name": "Eureka",
            "products": 14
        }
    ],
    "topProductTypes": [
        {
            "name": "Coffee",
            "products": 92
        },
        {
            "name": "Semi-Automatic",
            "products": 41
        },
        {
            "name": "Accessory",
            "products": 33
        }
    ],
    "priceMin": 6.97,
    "priceMedian": 111.99,
    "priceMax": 13000,
    "newProducts30d": 49,
    "lastProductPublishedAt": "2026-09-28T16:56:25.000Z"
}
```

You can download the dataset as JSON, CSV, Excel, XML or HTML. A `SUMMARY` record shows how many stores matched, were checked and returned.

### Who buys Shopify store leads

- **Shopify app and agency sales teams** — find stores that use a competitor's app, or a theme you support.
- **Brands and distributors** — find retailers that stock your brand or your competitors'.
- **Investors and analysts** — map a niche: how many stores, where, how big, what they charge.
- **Marketers** — build lists of stores by niche keyword and country for partnerships or outreach.

### For Shopify app developers: find stores running a competitor's app

Stores that already pay for an app like yours are the easiest to switch. Set **Uses any of these apps** to your competitors, **Doesn't use these apps** to your own app if we detect it, and turn on **Only stores with a public e-mail**. Schedule the same input weekly: **Only new leads** keeps each run to stores you haven't received yet.

```json
{
    "countries": ["US"],
    "apps": ["Smile.io", "LoyaltyLion"],
    "onlyWithEmail": true,
    "maxLeads": 200
}
```

200 leads cost about $1.10, and Apify's free plan credit ($5 a month) covers about 900 leads. The data comes from each store's public storefront pages, not from the Shopify API or any app's install base.

### How to use it

1. Click **Try for free**.
2. Set filters: **Store countries**, **Keywords** (e.g. `coffee`, `skincare`, `pet`), and optionally **Uses any of these apps**, **Sells any of these brands**, **Theme**, **Min/Max products**.
3. Set **Max leads** and click **Start**.
4. Download the leads (CSV, Excel, JSON) or connect Google Sheets, a CRM, Clay, Make, n8n or Zapier.

### Shopify leads API and MCP server for AI agents

Most lead buyers run Store Leads from a script, a CRM sync or an AI agent rather than the form. Your API token is in Apify Console → **Settings → API & Integrations**; never commit it.

#### Small batches: one request, leads in the answer

`run-sync-get-dataset-items` starts a run, waits for it and returns the leads as JSON (or `&format=csv`). It waits up to 5 minutes, enough for a few hundred leads:

```bash
curl -X POST "https://api.apify.com/v2/acts/insanedev~shopify-store-list/run-sync-get-dataset-items?token=$APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"countries": ["US"], "keywords": ["skincare"], "onlyWithEmail": true, "maxLeads": 200}'
```

#### Large exports: start a run, then read the dataset

For thousands of leads, start the run and read its dataset when it finishes. With the official clients:

```python
## pip install apify-client
from apify_client import ApifyClient

client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("insanedev/shopify-store-list").call(run_input={
    "countries": ["GB"],
    "apps": ["Klaviyo"],
    "onlyWithEmail": True,
    "onlyNewLeads": True,
    "maxLeads": 5000,
})
for lead in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(lead["domain"], lead.get("emails"))
```

```javascript
// npm install apify-client
import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('insanedev/shopify-store-list').call({
    countries: ['AU'],
    keywords: ['coffee'],
    onlyNewLeads: true,
    maxLeads: 5000,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items.length, 'leads');
```

**One run of 5,000 leads beats 50 runs of 100.** Each run loads the store index once, so a big run is faster per lead and has fewer starts that can hit a timeout. Keep **Only new leads** on and the next run continues where this one stopped, never billing a store twice. Set a max cost per run if you want a hard ceiling; the run then stops cleanly with the leads it already delivered.

#### Daily new leads on a schedule

Save your filters as a **task** (Console → *Saved tasks*), turn on **Only new leads**, add a **schedule** (e.g. every morning) and, if you like, a webhook or a Google Sheets / HubSpot / Make / Zapier / n8n integration. Each day you get only stores you haven't received, including stores newly added to the index.

#### MCP: let Claude, Cursor or ChatGPT find leads

Add the Apify MCP server with this Actor as a tool:

```
https://mcp.apify.com?tools=insanedev/shopify-store-list
```

In Claude (Settings → Connectors → Add custom connector), Cursor, VS Code, Manus or any MCP client, paste that URL and sign in with Apify. Then ask, for example:

> Find 100 US Shopify skincare stores that use Klaviyo and publish an e-mail, and give me a table with domain, e-mail, Instagram and city.

The agent fills the input (countries, keywords, apps, `onlyWithEmail`, `maxLeads`) and gets the same lead rows as the API. Leads are billed the same way as any other run.

### Ready-made Shopify leads: by app, country, e-mail

Open one, click **Try**, and change the filters to your market:

- **By app**: [Shopify stores using Klaviyo](https://apify.com/insanedev/shopify-store-list/examples/shopify-stores-using-klaviyo) · [using Recharge](https://apify.com/insanedev/shopify-store-list/examples/shopify-stores-using-recharge) · [using Yotpo](https://apify.com/insanedev/shopify-store-list/examples/shopify-stores-using-yotpo) · [using Gorgias](https://apify.com/insanedev/shopify-store-list/examples/shopify-stores-using-gorgias)
- **By country**: [Shopify store database by country (UK)](https://apify.com/insanedev/shopify-store-list/examples/shopify-store-database-by-country) · [Australia](https://apify.com/insanedev/shopify-store-list/examples/shopify-store-list-australia)
- **With contacts**: [Shopify store leads with e-mail addresses](https://apify.com/insanedev/shopify-store-list/examples/shopify-leads-with-email) · [Shopify store scraper with e-mails and apps](https://apify.com/insanedev/shopify-store-list/examples/shopify-store-scraper-emails-apps)
- **By niche**: [US beauty stores with e-mails (find Shopify stores by niche)](https://apify.com/insanedev/shopify-store-list/examples/find-shopify-stores-by-niche)
- **New stores**: [newest Shopify stores](https://apify.com/insanedev/shopify-store-list/examples/newest-shopify-stores)

### Input example

```json
{
    "countries": ["US", "CA"],
    "keywords": ["coffee", "espresso"],
    "apps": ["Klaviyo"],
    "minProducts": 20,
    "maxLeads": 200
}
```

### How much do Shopify store leads cost?

| Event                                                              | Free plan     | Gold plan     |
| ------------------------------------------------------------------ | ------------- | ------------- |
| Lead (one store row)                                               | $5.50 / 1,000 | $4.50 / 1,000 |
| Store checked for app/theme/brand/e-mail filters that didn't match | $0.40 / 1,000 | $0.20 / 1,000 |

Your first 25 leads are free, once per Apify account. After that, Apify's free plan includes $5 of platform credit every month, which covers about 900 leads. Stores that can't be read are never charged, and stores skipped because you already received or checked them (**Only new leads**) are never read again. A store you paid for is free for 30 days if a run delivers it again (another **History name**, or **Only new leads** off). If we read a store in the last 45 days and it didn't match your app, theme, brand or e-mail filters, your run skips it without reading or charging it, and stores that matched last time are read first, so store checks are charged mostly for stores we haven't read yet. Every lead is still read live before you get it and pay for it. If Apify moves or restarts a run, it continues where it stopped and never returns or charges a store twice. Example: 100 US coffee stores with all details ≈ $0.55 on the Free plan. No subscription — Store Leads-style tools cost $75–950 a month.

At the end of each run, the Actor sends its developer an anonymous summary: the event counts and prices, the run cost, your Apify plan level (free or paid), your pricing tier, how the run was started (Console, API or schedule) which filters were set, as counts and on/off flags such as "2 countries, 1 keyword, e-mail filter on", the country codes you picked and the niche words from our own list your keywords contain (e.g. "US-GB", "coffee"; never the keywords themselves), whether your account had leads from earlier runs (counts only), and how the run ended (leads delivered, how many with an e-mail, free leads, whether a cost or time limit stopped it, run length). It also carries a random customer tag, made on your first run of any of our Actors and kept in your own `insanedev-customer` key-value store (not derived from your account; deleting that store starts a new one), the days since your previous run, and how the run was set up: whether it came from one of our example tasks or a task you saved, the band of the maximum cost you set, and the API client by name (such as Python, n8n or Make; never the IP address), and whether you ran the Store's example input unchanged. The summary contains no keywords, app or brand names, domains, history names, output or account identifiers.

### Where the data comes from

- **Store discovery**: the most visited websites of 42 countries and worldwide from Google's **Chrome UX Report** (CC BY 4.0), the **Tranco top-1M list** and the ~118 million domains of **Common Crawl's** web graph, checked for Shopify by DNS, then each store's own public `meta.json` (name, description, address city/country, currency, product and collection counts, shipping countries). The store index is **refreshed on Apify every few days**, last on 29 October 2026. Each refresh checks newly registered domains and new Tranco entries for Shopify, and once a week it drops stores that left Shopify. Once a month the latest Chrome UX Report adds stores that started getting real visitors. Each run logs the build it used; `firstSeenAt` is the date our index first had the store (the first build is dated 2026-09-29 to 2026-10-01).
- **Details**: read from each store's public storefront (homepage, product list, contact and policy pages). **Store details are read live on every run**, so contacts and apps are as of your run, with the date in `checkedAt`. Stores that don't answer are skipped and never charged; you are never charged for an empty or failed read.
- **Coverage**: **about 950,000 live Shopify stores** (330,000 in the US, 70,000 in the UK, 60,000 in Australia, 50,000 each in Canada and India, 40,000 each in Germany and France, about 20,000 each in Italy, Japan, the Netherlands, Spain, Hong Kong and Mexico, 10,000 in New Zealand), each one answering as a Shopify store when we last checked, and growing. Closed and password-protected stores are left out. Stores behind custom (headless) storefronts are not included.

### Tips

- Start broad (country + keyword), then add app or brand filters; app/brand filters check stores one by one in popularity order until **Max leads** match (capped by **Max stores checked**).
- Turn **Store details** off for a fast, cheap list from the index only.
- Apps are detected on each store's homepage **and one product page**, where subscription (Recharge, Skio), upsell and review widgets often load. Turn **Check a product page for apps** off for runs about a quarter faster.
- **Weekly or repeat lists**: keep **Only new leads** on (default) and schedule the same input — each run returns only stores you haven't received yet (stores that were checked and didn't match the same app/e-mail filters are skipped too), and the run status tells you how many matching stores are left. To skip domains you got elsewhere (your CRM), paste them into **Skip these domains**.
- **Keywords match the start of words**: `pet` finds "pets" and "pet-friendly", not "carpet".
- **Sort by** "Newest stores first" to find recently launched stores (Shopify store ids grow over time).
- Track prices, launches and stock of the stores you find with our [Shopify Price Tracker & Scraper](https://apify.com/insanedev/shopify-price-tracker).

### More Shopify tools from insanedev

- [Shopify & WooCommerce Price Tracker](https://apify.com/insanedev/shopify-price-tracker): the full catalogue of any store with prices, discounts, stock and new products, plus the apps and theme of stores you already know. Paste domains from your Store Leads dataset to watch them.
- [Shopify Store Leads](https://apify.com/insanedev/shopify-store-list) (this Actor): find the stores first, by country, niche, apps, theme or brand.

### FAQ

**Are the e-mails personal data?** The Actor only returns addresses a store publishes on its own homepage or contact pages (e.g. support@ or wholesale@ addresses) and never looks people up. You are responsible for using contacts in line with GDPR, CAN-SPAM and similar laws.

**Are the e-mails verified?** They are the addresses each store publishes on its own homepage or contact pages at the time of the run, so they are current and belong to the store. The Actor doesn't send test e-mails or SMTP-check them.

**Why isn't store X in the list?** It may get too few visits to appear in the Chrome UX Report or Tranco lists, run on a headless storefront, or be newer than the latest index refresh. Use **Look up these domains only** to check specific domains.

**I need the same stores again — e.g. I lost the file.** Turn **Only new leads** off for that run, or open the dataset of the earlier run in Apify Console (Storage → Datasets). Your history is the key-value store `shopify-store-leads-history` in your account: `history-<name>` holds the stores you received, and `checked-<name>-…` records hold stores that were checked without a match for one set of filters (they are checked again after 30 days). Delete those records to start a list from scratch, or use another **History name**.

**Will I pay again for stores if I change the History name?** Not within 30 days. You pay for a store once per 30 days per Apify account: if a run delivers a store you paid for in the last 30 days, under any **History name** or with **Only new leads** off, that lead is free, and the run's status says how many leads were free. After 30 days the store is billed again, since its data may have changed. Each **History name** is still a separate list, so a new name delivers those stores again. To continue where you stopped, keep the same **History name** and leave **Only new leads** on, or turn on **Skip stores from all my histories** to skip stores from every list in your account. The run warns you when the stores it is about to deliver were already delivered under another name. The record of paid stores is `paid-leads` in the same key-value store. If you only need the earlier stores again, open the dataset of the earlier run in Apify Console (Storage → Datasets): that costs nothing.

**A large run stopped before it got all the leads. What now?** A run stops taking new stores a few minutes before its timeout (1 hour by default) and saves its results and your history, so the leads you got are kept and never billed again. With **Only new leads** on, run it again for the next batch, or set a longer timeout in the run options. A run also stops at its maximum cost: when you don't set one, Apify uses what is left of your account's monthly usage limit, and the run status says so. Raise the limit in Apify Console (Billing → Limits) and run again for the rest.

**Can two runs share a history?** Yes. Runs that overlap in time merge their histories when they save, but each one only skips stores that were in the history when it started, so two simultaneous runs with the same filters can return some of the same stores. Run them one after another, or give each its own **History name**.

**How fast is it?** 200 leads take about a minute and 1,000 leads about 4 minutes when every store is read live (measured 28–29 October 2026 on US stores).

**Is it legal to scrape Shopify stores?** The Actor reads only public storefront pages, the same pages any visitor sees, and returns business contacts the store publishes itself. It doesn't log in or read anything behind a password. How you use the contacts (outreach, GDPR, CAN-SPAM) is up to you.

**How is it different from Store Leads (storeleads.app) and BuiltWith?** Those are subscriptions ($75–950 a month) with a database you export from. This Actor is pay per lead with no subscription, reads each store live at run time, and remembers which stores you already received so a repeat run returns only new ones.

**Why are some stores missing from my run?** A small share of stores block automated visitors or don't answer at all. They are skipped and never charged, and the run status says how many. On the 1,000 most-visited US stores, 973 were read in full.

**Can AI agents use it?** Yes — through the Apify API and the Apify MCP server.

Questions or ideas? Open an issue in the **Issues** tab. If the leads helped, a short rating on this page helps other teams find the Actor, and we read every review.

# Changelog

This Actor's version history is a separate document: https://apify.com/insanedev/shopify-store-list/changelog.md

# Actor input Schema

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

Two-letter country codes of the store's business address (e.g. US, GB, DE, AU). English country names such as "United States" work too. Empty = all countries.

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

Stores whose name, description or domain has a word starting with any of these, e.g. <code>coffee</code>, <code>skincare</code>, <code>pet</code> (finds "pets", not "carpet"). Empty = every niche. Japanese, Chinese and Thai keywords match anywhere in the text.

## `maxLeads` (type: `integer`):

Stop after this many leads. Leads that don't match a filter are never charged. For big lists one run of a few thousand leads is faster and cheaper than many runs of 100, and with Only new leads on the next run continues where this one stopped.

## `onlyWithEmail` (type: `boolean`):

Return only stores that publish a contact e-mail on their homepage, contact page or contact-information page. A store checked without one costs a small check fee, not a lead.

## `apps` (type: `array`):

Only stores that use at least one of these apps (checked on the storefront), e.g. <code>Klaviyo</code>, <code>Recharge</code>, <code>Okendo</code>, <code>Gorgias</code>, <code>Yotpo</code>, <code>Attentive</code>. Stores checked but not matching cost a small check fee.

## `appsMatch` (type: `string`):

With several apps above: <b>any</b> = stores using at least one of them, <b>all</b> = stores using every one of them.

## `excludeApps` (type: `array`):

Skip stores where any of these apps is detected on the homepage or a product page — e.g. stores that don’t use your app yet. Apps that load only at checkout can’t be seen. Stores checked and skipped cost a small check fee.

## `themes` (type: `array`):

Only stores on these themes, e.g. <code>Dawn</code>, <code>Impulse</code>, <code>Prestige</code>.

## `brands` (type: `array`):

Only stores whose catalogue sample (first 250 products) includes these brands (vendor names). Finds stockists and resellers.

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

Minimum number of published products.

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

Maximum number of published products.

## `currencies` (type: `array`):

Three-letter currency codes (e.g. USD, EUR, GBP). The symbols $, € and £ work too.

## `shipsTo` (type: `array`):

Two-letter country codes (or English country names) the store ships to.

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

Keep stores among the top N websites, globally (Tranco rank) or in their own country by Chrome visits (Chrome UX Report buckets: 1,000 / 5,000 / 10,000 / 50,000 / 100,000 / 500,000 / 1,000,000). E.g. 50000 = top 50k sites.

## `addedWithinDays` (type: `integer`):

Only stores that joined our index within this many days, e.g. 30 for new stores of the last month. A new index comes out every few days; stores from the first build are dated 2026-09-29 to 2026-10-01.

## `excludeKeywords` (type: `array`):

Skip stores whose name, description or domain has a word starting with any of these.

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

Order of the leads: most visited stores first (popularity bucket, then Tranco rank), largest catalogues first, or newest Shopify stores first.

## `onlyNewLeads` (type: `boolean`):

Skip stores this Apify account already received under the history name below, so you never pay twice for the same store. Stores you already got, or that were checked and didn’t match the same app/theme/brand/e-mail filters, are never read or charged again. The history is kept in your own key-value store <code>shopify-store-leads-history</code>.

## `historyName` (type: `string`):

Keep separate histories, e.g. one per client or campaign. A new name starts an empty list, so keep the same name to continue a list. Stores you paid for in the last 30 days under another name are delivered free if they come again; older ones are charged again. The name is stored with letters, digits and dashes: "My leads" becomes my-leads (upper case counts as lower case).

## `skipAllHistories` (type: `boolean`):

With <b>Only new leads</b> on, also skip stores this account received under any other history name, so a new history name never delivers a store you already have (stores you paid for in the last 30 days would come free, older ones are charged). Leave it off to keep separate lists, e.g. one per client, where the same store can go to two clients.

## `excludeDomains` (type: `array`):

Stores you already have, e.g. from your CRM or another tool. Domains or URLs. They are skipped: never read and never charged.

## `enrich` (type: `boolean`):

Visit each lead's storefront for its theme, apps, social profiles, public contact e-mails, top brands, product types and price range. Off = only the index fields (faster).

## `liveOnly` (type: `boolean`):

Every store is read live in each run today, so this changes nothing yet. It is kept so saved inputs keep working.

## `productPageApps` (type: `boolean`):

Also read one product page per store: subscription (Recharge, Skio), upsell and review widgets often load only there. More complete apps, about a quarter slower. App filters always check it when needed.

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

Get the lead row for specific store domains (if they are in the index).

## `maxStoresChecked` (type: `integer`):

With app, theme, brand or e-mail filters: stop after checking this many stores even if fewer leads matched.

## Actor input object example

```json
{
  "countries": [
    "US"
  ],
  "keywords": [
    "coffee"
  ],
  "maxLeads": 20,
  "onlyWithEmail": false,
  "appsMatch": "any",
  "sortBy": "popularity",
  "onlyNewLeads": true,
  "historyName": "default",
  "skipAllHistories": false,
  "enrich": true,
  "liveOnly": false,
  "productPageApps": true,
  "maxStoresChecked": 2000
}
```

# Actor output Schema

## `leads` (type: `string`):

No description

## `summary` (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 = {
    "countries": [
        "US"
    ],
    "keywords": [
        "coffee"
    ],
    "maxLeads": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("insanedev/shopify-store-list").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"],
    "keywords": ["coffee"],
    "maxLeads": 20,
}

# Run the Actor and wait for it to finish
run = client.actor("insanedev/shopify-store-list").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"
  ],
  "keywords": [
    "coffee"
  ],
  "maxLeads": 20
}' |
apify call insanedev/shopify-store-list --silent --output-dataset

```

## MCP server setup

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

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/ZbIcKHr2aPryhfi4w/builds/lL5mJ8Z8VdnUDHeyT/openapi.json
