myshopify Domain List Scraper - Store Handles & URLs avatar

myshopify Domain List Scraper - Store Handles & URLs

Pricing

from $4.75 / 1,000 stores

Go to Apify Store
myshopify Domain List Scraper - Store Handles & URLs

myshopify Domain List Scraper - Store Handles & URLs

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.

Pricing

from $4.75 / 1,000 stores

Rating

0.0

(0)

Developer

Blackcube

Blackcube

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Share

Shopify Store Intelligence Suite  •  4 Actors, one codebase, one store billed once
Shopify Store Leads Scraper
Emails, Apps & Store Size
myshopify Domain List Scraper
➤ You are here
Shopify Theme Detector
Find Stores by Theme in Bulk
Shopify Competitor Analysis
Size, Stack & Prices

More from this account: YouTube Transcript Suite · Website Contact & Email Suite · Career Site & ATS Jobs Suite · Google News Suite · Keyword Research Suite · eBay Data Suite · Amazon Reviews Suite · Reddit · Meta Ad Library · Vinted · Trustpilot Review Intelligence Suite · App Store & Google Play Reviews Suite · Etsy Research Suite · YouTube Comments Intelligence Suite · Telegram Channel Intelligence Suite · Business Reviews Suite · Google Trends Suite · Amazon Product Data Suite · Nordic Marketplaces Suite · Google Sheets Suite · TikTok Suite · Snapchat Suite · LinkedIn Public Data Suite · Instagram Suite · Contact Validation Suite · Google Maps Suite · X / Twitter

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:

FieldWhat it tells you
storeId, myshopifyDomain, domain, storeUrlThe store's permanent ID and both of its addresses
name, descriptionWhat the store calls itself
productCount, collectionCount, sizeBandHow big the catalogue is, before you contact anyone
country, province, city, currency, shipsToCountriesThe 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:

{
"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.


Same engine, pointed at a different job:


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.

Use it from n8n, MCP, the API or a schedule

Built to be called by a workflow, not only from the Store form. The Actor is vonsensey/myshopify-store-domain-list-scraper; every snippet below sends {}, which runs the defaults shown on the form — replace it with your own input.

n8n

Install the Apify community node (@apify/n8n-nodes-apify under Settings → Community Nodes, or search "Apify" on n8n Cloud). Add Apify → Run Actor with Actor vonsensey/myshopify-store-domain-list-scraper and your input JSON, then Apify → Get Dataset Items on the run's defaultDatasetId and pipe the rows anywhere. For scheduled runs, the On new Apify Event trigger fires when a run of this Actor finishes.

MCP (Claude, Cursor, VS Code, any MCP client)

{
"mcpServers": {
"apify": {
"url": "https://mcp.apify.com?tools=vonsensey/myshopify-store-domain-list-scraper",
"headers": {
"Authorization": "Bearer <YOUR_APIFY_TOKEN>"
}
}
}
}

Your agent then calls vonsensey/myshopify-store-domain-list-scraper as a tool with the same input the form takes and reads the dataset back.

REST API (one call, rows in the response)

curl -X POST "https://api.apify.com/v2/acts/vonsensey~myshopify-store-domain-list-scraper/run-sync-get-dataset-items?token=$APIFY_TOKEN" \
-H "Content-Type: application/json" -d '{}'

Python

from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("vonsensey/myshopify-store-domain-list-scraper").call(run_input={})
for row in client.dataset(run["defaultDatasetId"]).iterate_items():
print(row)

JavaScript

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('vonsensey/myshopify-store-domain-list-scraper').call({});
const { items } = await client.dataset(run.defaultDatasetId).listItems();

Make, Zapier, LangChain, CrewAI

The Apify app in Make and Zapier has a Run an Actor module: pick vonsensey/myshopify-store-domain-list-scraper. In LangChain and CrewAI the Apify tool wrappers take the same Actor id. A daily schedule needs nothing but the Console: Schedules → Create → this Actor → cron, and the dataset fills on its own.

Run it without configuring anythingBuild a list of myshopify.com domains, 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, and the FAQ below says exactly what a scheduled run that finds nothing new costs.

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.

Does this work on stores with a custom domain?

Yes, and it recognises them as the same store as their .myshopify.com address, so you are never billed twice for one shop.

Can I target a specific niche?

Use keywords, which matches the store name, description, domain, vendors and product types. Discovery itself is broad, so a narrow keyword needs a higher maxStoresScanned — and everything rejected along the way is free.

Why is oldestPublishedProductAt sometimes null?

Very large catalogues cannot be paged to the end, so the launch date genuinely cannot be established. It returns null rather than a wrong date.

Why is email null on some stores?

Because that store publishes no contact address. Inventing info@ would give you a bounce and a damaged sending reputation. Addresses are also only accepted from the store's own domain — a support address belonging to some third-party tool the store happens to use is not your lead.

Will I get the same stores if I run it again?

No. Each discovery run samples a different slice, so a weekly top-up brings new leads rather than re-charging you for ones you already have. Pin discoverySeed if you want a run to repeat exactly.

Is the data personal information?

The contact details are business contact routes a merchant publishes on its own storefront and policy pages for exactly this purpose. Handle them under your own lawful basis and honour any opt-out you receive.

How long does a run take, and why does nothing appear for the first minute?

Discovery starts with the Common Crawl URL index, which takes roughly a minute before the first store appears (measured 81 s). After that a store takes about 2.3 s at the default concurrency of 10, so 200 scans is 8–10 minutes and the default 60-minute timeout covers about 1,500 scans. The log says what is happening from the first second. If a run approaches its timeout it stops early on its own: you keep every store found, the diagnostics row shows stopReason: outOfTime and candidatesNotScanned, a free notice row explains it, and nothing unscanned is charged — raise the run timeout or lower maxStoresScanned to get the rest.


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.