# New Shopify Stores Finder - Daily Leads with Emails (`perskekits/new-shopify-stores-finder`) Actor

Find brand-new Shopify stores every day from freshly registered domains. Get store name, emails, phones, social links, country, currency, product count, price range and theme. Perfect for agencies, app developers and suppliers.

- **URL**: https://apify.com/perskekits/new-shopify-stores-finder.md
- **Developed by:** [PerskeKits](https://apify.com/perskekits) (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 $8.00 / 1,000 results

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

## New Shopify Stores Finder - Daily Leads with Emails

Discover Shopify stores that just went live and get their contact emails, phones, social profiles, country, currency, product counts and price ranges - ready for outreach.

**Popular searches this Actor covers:** new Shopify stores list, Shopify store leads, newly launched Shopify stores, Shopify stores with emails, Shopify store finder.

### What can you use it for?

- Shopify agencies and freelancers selling setup, design or SEO
- Shopify app developers looking for first customers
- Email marketing, review and payment providers
- Market research on new DTC brands and niches

### Quick start (one click)

Press **Start** - the default input returns results in about a minute for a few cents. Example input:

```json
{
  "maxDomainsToCheck": 5000,
  "maxStores": 50,
  "onlyWithEmail": false,
  "skipPasswordProtected": false,
  "dnsConcurrency": 100
}
```

### Example output

| domain | storeName | country | currency | productCount | firstProductPublishedAt |
|---|---|---|---|---|---|
| emone.store | EMONE | GB | USD | 354 | 2026-10-28T09:31:16-04:00 |
| fkstorea.shop | FK store | PK | PKR | 23 | 2026-10-22T23:37:33+05:00 |
| shopamulusa.com | Amul USA | US | USD | 99 | 2026-10-16T17:58:27-04:00 |

Full records contain more fields (see the Output / Dataset tab). Download as **CSV, Excel, JSON** or use the Apify API, schedules and integrations (Zapier, Make, Google Sheets, webhooks).

### Pricing

Pay only for what you get (pay per event):

- **$0.008 per store** returned
- **$0.005 per run start**

Examples: 100 stores = $0.805; 1,000 stores = $8.01. Apify free plan credits cover small runs.

### FAQ

**How many new stores per day?**
Typically 150-350 new live stores per daily feed.

**Are password-protected stores included?**
They are flagged with passwordProtected so you can filter them.

**Is this legal?**
It collects publicly available data only. You are responsible for using it in line with applicable laws (e.g. CAN-SPAM, GDPR, TCPA) and the source's terms.

**Can I schedule it?**
Yes - use Apify Schedules to run it daily and get new records automatically, then send them to Google Sheets, Slack or your CRM via integrations.

**Need a custom field, source or done-for-you list?**
Open an issue on the Issues tab - feature requests are welcome.

### Technical details

Find **brand-new Shopify stores every day**, before your competitors do. The actor takes the daily list of newly registered domains, checks which ones point to Shopify, and enriches every store with contact and catalog data. Perfect for Shopify agencies, app developers, theme sellers, suppliers, dropshipping tools and freelancers looking for fresh merchants.

### How it works

1. Downloads the latest daily **newly registered domains** feed from WhoisDS (about 70,000 domains a day).
2. Checks each domain's DNS: a store is detected when the domain (or `www.`) resolves into Shopify's `23.227.38.0/24` range or CNAMEs to `shops.myshopify.com`. About 1-2% of new domains are Shopify stores.
3. Enriches every detected store from its public homepage, `/meta.json`, `/products.json`, the contact page and policy pages.

You only pay for stores saved to the dataset. Domain checks are free.

### Output fields

`domain`, `url`, `storeName`, `myshopifyDomain`, `passwordProtected` (store not launched yet), `description`, `emails` (store-domain emails first), `phones`, `socials` (instagram, facebook, tiktok, youtube, pinterest, x), `city`, `province`, `country`, `currency`, `productCount`, `collectionCount`, `minPrice`, `maxPrice`, `sampleProducts`, `vendors`, `firstProductPublishedAt`, `theme`, `shopPayInstallments`, `feedDate` (date of the WhoisDS file the domain came from), `checkedAt`.

```json
{"domain": "banubalance.store", "storeName": "BANU BALANCE", "myshopifyDomain": "....myshopify.com", "passwordProtected": false,
 "emails": ["banudelights@gmail.com"], "socials": {"instagram": "https://www.instagram.com/banubalance_com", "pinterest": "https://www.pinterest.com/banubalance"},
 "country": "US", "currency": "USD", "productCount": 24, "minPrice": 27.1, "theme": "Rise", "feedDate": "2026-10-29"}
```

Fields are `null` or empty when the store doesn't publish them. New stores rarely list phone numbers, so `phones` is often empty.

### Input

| Field | Default | Notes |
|---|---|---|
| `maxDomainsToCheck` | 5000 | New domains to test (free). 5,000 usually yields 50+ stores |
| `maxStores` | 50 | Stop after this many stores (you pay per store) |
| `date` | latest | Feed date `YYYY-MM-DD`; only the last few days are available |
| `tlds` | all | e.g. `com`, `shop`, `store` |
| `keyword` | - | Only domains containing this text, e.g. `pet`, `beauty` |
| `countries` | all | Store country codes from store settings, e.g. `US`, `GB` |
| `onlyWithEmail` | false | Only stores where an email was found |
| `skipPasswordProtected` | false | Skip stores that are not launched yet |
| `dnsConcurrency` | 100 | Parallel DNS lookups |

Filters (`countries`, `onlyWithEmail`, `skipPasswordProtected`) are applied after detection, so use a higher `maxDomainsToCheck` when you filter.

### Pricing

Pay per result: one `result` event per store saved.

### Notes

Data comes only from public pages. Use the contact data responsibly and follow anti-spam laws (CAN-SPAM, GDPR) in your outreach.

# Actor input Schema

## `maxDomainsToCheck` (type: `integer`):

How many newly registered domains from the daily feed to test for Shopify (about 1-2% are Shopify stores). Not charged.

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

Stop after this many stores are saved. You pay per saved store.

## `date` (type: `string`):

WhoisDS feed date. Leave empty for the latest available day. Only the last few days are available.

## `tlds` (type: `array`):

e.g. com, shop, store, co.uk last label only (uk). Empty = all.

## `keyword` (type: `string`):

Only check domains containing this text, e.g. beauty, pet, apparel.

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

Two-letter country codes from the store settings, e.g. US, GB. Empty = all.

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

Only return records that include an email address.

## `skipPasswordProtected` (type: `boolean`):

Skip stores still behind the Shopify password page (not launched yet).

## `dnsConcurrency` (type: `integer`):

Number of parallel DNS lookups.

## Actor input object example

```json
{
  "maxDomainsToCheck": 5000,
  "maxStores": 50,
  "onlyWithEmail": false,
  "skipPasswordProtected": false,
  "dnsConcurrency": 100
}
```

# 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 = {};

// Run the Actor and wait for it to finish
const run = await client.actor("perskekits/new-shopify-stores-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 = {}

# Run the Actor and wait for it to finish
run = client.actor("perskekits/new-shopify-stores-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 '{}' |
apify call perskekits/new-shopify-stores-finder --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,perskekits/new-shopify-stores-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/Tdsgcwke9qh2g5Shj/builds/o0KI06f5NQAaHzN7P/openapi.json
