# myshopify Domain List Scraper - Store Handles & URLs (`vonsensey/myshopify-store-domain-list-scraper`) Actor

Build a clean list of myshopify.com store handles mapped to the real primary domain each one resolves to, with the store's own permanent Shopify ID as a join key. One store reached two ways is one row, so lists from different sources merge without duplicates.

- **URL**: https://apify.com/vonsensey/myshopify-store-domain-list-scraper.md
- **Developed by:** [Blackcube Agency AB](https://apify.com/vonsensey) (community)
- **Categories:** Lead generation, E-commerce, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

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

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — 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

## myshopify Domain List Scraper - Store Handles & URLs

<table style="border-collapse:collapse;width:100%;margin:0 0 4px">
<tr><td colspan="3" style="padding:9px 12px;background:#0B6E75;border:1px solid #0B6E75"><span style="color:#FFFFFF;font-weight:700;font-size:13px;letter-spacing:.3px">Shopify Store Intelligence Suite</span><span style="color:#CFF0F2;font-size:12px"> &nbsp;&bull;&nbsp; 4 Actors, one codebase, one store billed once</span></td></tr>
<tr><td style="padding:9px 12px;border:1px solid #E5E7EB;background:#FFFFFF;vertical-align:top;width:33%"><a href="https://apify.com/vonsensey/shopify-store-leads-scraper" style="color:#111827;font-weight:700;font-size:13px;text-decoration:none">Shopify Store Leads Scraper</a><br><span style="color:#6B7280;font-size:11px">Emails, Apps &amp; Store Size</span></td><td style="padding:9px 12px;border:1px solid #E5E7EB;background:#ECFDF5;vertical-align:top;width:33%"><span style="color:#0B6E75;font-weight:700;font-size:13px">myshopify Domain List Scraper</span><br><span style="color:#0B6E75;font-size:11px;font-weight:600">&#10148; You are here</span></td><td style="padding:9px 12px;border:1px solid #E5E7EB;background:#FFFFFF;vertical-align:top;width:33%"><a href="https://apify.com/vonsensey/shopify-theme-detector-scraper" style="color:#111827;font-weight:700;font-size:13px;text-decoration:none">Shopify Theme Detector</a><br><span style="color:#6B7280;font-size:11px">Find Stores by Theme in Bulk</span></td></tr>
<tr><td style="padding:9px 12px;border:1px solid #E5E7EB;background:#FFFFFF;vertical-align:top;width:33%"><a href="https://apify.com/vonsensey/shopify-competitor-analysis-scraper" style="color:#111827;font-weight:700;font-size:13px;text-decoration:none">Shopify Competitor Analysis</a><br><span style="color:#6B7280;font-size:11px">Size, Stack &amp; Prices</span></td></tr>
</table>

**More from this account:** [YouTube Transcript Suite](https://apify.com/vonsensey/youtube-transcript-scraper) · [Website Contact & Email Suite](https://apify.com/vonsensey/website-contact-email-extractor) · [Career Site & ATS Jobs Suite](https://apify.com/vonsensey/career-page-job-postings-scraper-api) · [Google News Suite](https://apify.com/vonsensey/google-news-scraper-api) · [Keyword Research Suite](https://apify.com/vonsensey/google-keyword-ideas-scraper) · [eBay Data Suite](https://apify.com/vonsensey/ebay-scraper-api) · [Amazon Reviews Suite](https://apify.com/vonsensey/amazon-reviews-scraper-api) · [Reddit](https://apify.com/vonsensey/reddit-scraper-posts-comments-api) · [Meta Ad Library](https://apify.com/vonsensey/facebook-ads-library-scraper-meta-ad-api) · [Vinted](https://apify.com/vonsensey/vinted-scraper-api) · [Trustpilot Review Intelligence Suite](https://apify.com/vonsensey/trustpilot-reviews-scraper) · [App Store & Google Play Reviews Suite](https://apify.com/vonsensey/app-store-google-play-reviews-scraper)

Build a clean list of myshopify.com store handles mapped to the real primary domain each one resolves to, with the store's own permanent Shopify ID as a join key. One store reached two ways is one row, so lists from different sources merge without duplicates.

**You pay once per store delivered.** Stores that fail your filters are free. Non-Shopify domains,
dead domains, frozen stores and bot-walled sites are free. There is no run-start fee, and a run
that finds nothing costs nothing.

***

### Why this one

A store can be reached at `brand.com` and at `brand.myshopify.com`, and most lead lists sell you both as two rows. Every record here carries the store's own permanent Shopify ID, so the two addresses collapse into **one row and one charge** - and that ID is what lets you merge a Shopify list into a CRM or a warehouse without deduplicating by hand.

***

### How to map myshopify handles to real store domains

Run it and every row gives you the `.myshopify.com` handle, the custom domain the store actually
trades on, and the permanent `storeId` that ties them together. Merge two lists on `storeId` and
duplicates disappear, even when one list used custom domains and the other used handles.

***

### What comes back

Every run returns one row per store:

| Field | What it tells you |
|---|---|
| `storeId`, `myshopifyDomain`, `domain`, `storeUrl` | The store's permanent ID and both of its addresses |
| `name`, `description` | What the store calls itself |
| `productCount`, `collectionCount`, `sizeBand` | How big the catalogue is, before you contact anyone |
| `country`, `province`, `city`, `currency`, `shipsToCountries` | The market the store declares for itself |

This listing runs lean by default. Switch on **Include catalogue**, **Include contact details**, **Include theme and apps** and **Include launch-era estimate** to add the rest — same engine, same per-store price.

Nothing is invented to fill a column. A field the store does not publish returns `null`, because a
guessed value is worse than no value.

***

### Default settings

Clicking **Start** with the defaults runs exactly this:

```json
{
  "discoverStores": true,
  "maxStores": 100,
  "maxStoresScanned": 300,
  "includeCatalog": false,
  "includeContacts": false,
  "includeTechStack": false
}
```

Change any of it. The full filter set — `countries`, `minProducts`, `maxProducts`,
`activeWithinDays`, `launchedWithinDays`, `keywords`, `excludeKeywords` — is available on every
run, and anything a filter rejects is free.

***

### What you are charged for

One charge per **store record delivered**. Nothing else.

Always free: stores that fail your filters, domains that are not Shopify stores, dead and parked
domains, frozen and deleted stores, sites behind a bot wall, every `error` and `diagnostics` row,
the second sighting of a store already charged in the run, and a run that returns nothing. There is
no run-start fee.

`maxStores` caps what you pay for, `maxCostUsd` stops the run before a hard ceiling, and
`maxStoresScanned` bounds how far a narrow filter searches.

***

### Setup

**Apify Proxy is required** — it is selected by default. Datacenter proxy is enough; residential is
not needed. Runs without a proxy return almost nothing.

***

### Related tools

Same engine, pointed at a different job:

- [Shopify Theme Detector - Find Stores by Theme in Bulk](https://apify.com/vonsensey/shopify-theme-detector-scraper)
- [Shopify Competitor Analysis - Size, Stack & Prices](https://apify.com/vonsensey/shopify-competitor-analysis-scraper)
- [Shopify Store Finder - Discover Ecommerce Stores](https://apify.com/vonsensey/shopify-ecommerce-store-finder)
- [New Shopify Stores Scraper - Recently Launched Brands](https://apify.com/vonsensey/new-shopify-stores-scraper-recently-launched)
- [Ecommerce Leads by Country - Shopify Stores Scraper](https://apify.com/vonsensey/ecommerce-leads-scraper-shopify-stores-by-country)
- [Shopify Store Leads Scraper](https://apify.com/vonsensey/shopify-store-leads-scraper) — the full version, every mode in one

***

### Unofficial

This is an **unofficial** tool. It is **not affiliated with, endorsed by, or sponsored by Shopify
Inc.** "Shopify" is a trademark of Shopify Inc. and is used here only to describe what the tool
works with. It reads only what a store publishes publicly on its own storefront — nothing private,
nothing behind a login.

> **Run it without configuring anything** — [Build a list of myshopify.com domains](https://apify.com/vonsensey/myshopify-store-domain-list-scraper/examples/build-a-myshopify-domain-list), a ready-made example you can start as-is or copy.

### Use cases

- **Build a qualified lead list.** Every store arrives with its contact email, country, catalogue size and price band, so the list is already filtered before you write a line.
- **Sell to a tech stack.** Find the stores running a given theme or app category — or the ones missing it entirely, which is the better pitch.
- **Size a niche before entering it.** Catalogue depth, price band, vendors and whether a store still ships new products tell you if a market is alive.
- **Catch new stores early.** Recently launched brands are still choosing the tools they will pay for.

### Run it on a schedule

A one-off pull answers a question; a schedule answers it every day without you. Open **Schedules** in the Apify Console, point a cron at this Actor, and the dataset keeps filling on its own — no server, no cron box, no babysitting. Everything here is built to be re-run: you are billed per store delivered, so a scheduled run that finds nothing new costs nothing.

### FAQ

#### Where do the stores come from?

Live storefronts, read at the moment you run it — either the URLs you supply or discovery across the public web. Nothing here is a resold static list.

#### Is the email the store owner's?

It is the contact address the store publishes. Where a store exposes several, the most owner-facing one is preferred and the rest are kept.

#### Do I pay for stores that fail my filters?

No. A store that does not match your country, size or keyword filter is a free row, so you can filter aggressively without paying for it.

#### Can I check which apps and theme a store runs?

Yes — theme family, Theme Store ID where it has one, and the installed app categories, on the same row as the contact details.

***

Something wrong, or a field you need that is missing? Open an issue on the **Issues** tab — it is read and it gets fixed. If this saved you time, a rating on the Store page helps the next person find it.

# Actor input Schema

## `storeUrls` (type: `array`):

Shopify stores to qualify, one per line. Accepts a bare domain (example.com), a full URL, or a myshopify handle (brand.myshopify.com). Leave empty to let discovery find stores instead.

## `discoverStores` (type: `boolean`):

Also find Shopify stores automatically, instead of only qualifying the ones you supply. Discovery is broad rather than keyword-targeted, so narrow it with the filters below. Stores that fail your filters are never charged.

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

How many qualified store records to return. This is what you pay for — one charge per delivered store.

## `maxStoresScanned` (type: `integer`):

Ceiling on how many candidates are checked while looking for matches. Raise it when a narrow filter (a small country, a rare keyword) rejects most candidates. Checking is free; only delivered stores are charged.

## `discoverySeed` (type: `integer`):

Pin this to get the same discovered stores every run — useful for reproducible tests. Leave empty and each run samples a different slice, so repeat runs bring back new stores instead of the ones you already paid for.

## `ccIndex` (type: `string`):

Pin discovery to one specific web-crawl index, e.g. CC-MAIN-2026-30. Leave empty to draw from the most recent indexes automatically, which is what you want unless you are reproducing an old run.

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

Only deliver stores based in these countries. Two-letter ISO codes, e.g. US, GB, AU, CA, DE.

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

Only deliver stores with at least this many published products. Filters out empty and abandoned stores.

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

Only deliver stores with at most this many published products. Useful for targeting small independent brands rather than large retailers.

## `activeWithinDays` (type: `integer`):

Only deliver stores that published a product in the last N days. The strongest signal that a store is still trading. Needs the catalogue, so it requires 'Include catalogue' to stay on.

## `launchedWithinDays` (type: `integer`):

Only deliver stores that look recently launched, judged by the oldest product they ever published. Turns on the launch-era lookup automatically (one extra request per store). Stores whose catalogue is too large to page to the end are excluded rather than guessed at.

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

Only deliver stores whose name, description, domain, vendors or product types contain at least one of these words.

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

Never deliver stores matching any of these words.

## `includeCatalog` (type: `boolean`):

Adds the last-product date (is this store still active?), price range, vendors and product types. Costs one extra request per store.

## `includeContacts` (type: `boolean`):

Adds the store's public contact email, phone and social profiles, taken from the storefront and its published policy pages.

## `includeTechStack` (type: `boolean`):

Adds the Shopify theme and the apps detected on the storefront — useful for targeting stores that already run (or lack) a given tool.

## `includeLaunchDate` (type: `boolean`):

Adds the oldest published product date as a rough store-age signal. Off by default because it costs one extra request per store.

## `maxCostUsd` (type: `number`):

Hard ceiling on what this run may cost, in USD. The run stops cleanly once delivering another store would exceed it. Accepts fractions, e.g. 0.25. Leave empty for no ceiling.

## `maxConcurrency` (type: `integer`):

Parallel stores in flight. Higher is faster; the default is tuned to stay well inside Shopify's rate limits.

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

Required. Shopify rate-limits by IP, so a run without rotating proxies returns almost nothing. Datacenter proxies are enough — residential is not needed.

## Actor input object example

```json
{
  "storeUrls": [],
  "discoverStores": true,
  "maxStores": 100,
  "maxStoresScanned": 300,
  "countries": [],
  "keywords": [],
  "excludeKeywords": [],
  "includeCatalog": false,
  "includeContacts": false,
  "includeTechStack": false,
  "includeLaunchDate": false,
  "maxConcurrency": 10,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `stores` (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 = {
    "storeUrls": [],
    "countries": [],
    "keywords": [],
    "excludeKeywords": [],
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("vonsensey/myshopify-store-domain-list-scraper").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 = {
    "storeUrls": [],
    "countries": [],
    "keywords": [],
    "excludeKeywords": [],
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("vonsensey/myshopify-store-domain-list-scraper").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 '{
  "storeUrls": [],
  "countries": [],
  "keywords": [],
  "excludeKeywords": [],
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call vonsensey/myshopify-store-domain-list-scraper --silent --output-dataset

```

## MCP server setup

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

```

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/eWKucHCJhkdq0xbFD/builds/ojmHK0PIfYfcSJXRJ/openapi.json
