Shopify Store Finder: Store Leads with Email, Apps, Theme avatar

Shopify Store Finder: Store Leads with Email, Apps, Theme

Pricing

from $3.00 / 1,000 stores

Go to Apify Store
Shopify Store Finder: Store Leads with Email, Apps, Theme

Shopify Store Finder: Store Leads with Email, Apps, Theme

Find Shopify stores by niche keyword or check a domain list. One verified row per store: country, currency, product count, price range, product types, theme, apps, Instagram, Facebook, TikTok, email and phone. Every store is checked live as Shopify. No login.

Pricing

from $3.00 / 1,000 stores

Rating

0.0

(0)

Developer

The Mine Works

The Mine Works

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Share

20 Shopify stores for one niche keyword in 22 seconds, each verified live, with email, socials, theme and apps

From The Mine Works, makers of Shopify Store Scraper and B2B Leads Finder, with over 140,000 runs across 170+ public actors.

Updated 21 Oct 2026: first release. Niche keyword search, a domain checker, country, language and product count filters, and one flat row per verified Shopify store with contact details, social links, theme, apps and catalogue numbers. Bookmark this Actor on its Store page so it is one click away next time.

Why choose this actor?

  • Stores that really sell what you typed. Keywords are searched in the Shop catalog, the shopping app Shopify runs for its own merchants, so every hit is a Shopify store with a live product that matches. In our test, "kombucha scoby" returned 80 stores and "dog treats" 60, with the matching product named in each row.
  • Every store checked live, then read like a lead. Each domain is verified on the spot from its public Shopify shop record, and the row brings the registered country and city, currency, exact published product count, price range, top product types and vendors, the theme and its version, the apps in the page source, Instagram, Facebook, TikTok, X, YouTube, Pinterest and LinkedIn links, and the email, phone, trade name and business address the merchant published. In the 60 store "dog treats" test, 57 rows had an email and 52 an Instagram link.
  • Pay only for verified Shopify stores. Sites that are not Shopify, closed shops, stores your filters leave out, duplicates and the summary rows are never charged. No Shopify account, cookies or API key.

Run it on Apify

Part of The Mine Works E-commerce and marketplaces family: Ozon.ru Scraper, ⭐ Amazon Reviews Scraper, Amazon Product Scraper, Etsy Listings Scraper, AliExpress Scraper, Kleinanzeigen.de Scraper.

Try it in one minute

Paste this into the input (JSON view) and press Start. It returns 20 Shopify stores that sell organic skincare. It took 22 seconds in our test run:

{
"keywords": ["organic skincare"],
"maxStores": 20
}

Put several niches on separate lines to build one list from all of them, or paste domains into domains to check stores you already know. A store found by two keywords is delivered once.

Apify's free plan includes $5 of credit every month, which covers about 900 stores at this actor's price.

Copy to your AI assistant

themineworks/shopify-store-finder on Apify. Finds Shopify stores by niche keyword (Shop catalog search, Google top up) or checks a list of domains, verifies each one runs Shopify, and returns one flat row per store with no login. Call ApifyClient("TOKEN").actor("themineworks/shopify-store-finder").call(run_input={"keywords": ["organic skincare"], "maxStores": 50}), then client.dataset(run["defaultDatasetId"]).list_items().items. Give keywords (list of niche words, up to 50) or domains (list of domains or store links, up to 5000) or both. Optional: maxStores (default 50, 1 to 1000, per keyword), country (two letter code; keeps stores whose Shopify profile is in that country), language (two letter code; storefront language), minProducts (default 0), productPagesPerStore (default 1, 250 products a page, 1 to 10), contactPage (default true), useGoogle (default true). Store rows have no _type field and carry domain, url, store_name, title, description, myshopify_domain, shop_id, country, province, city, currency, language, ships_to_countries_count, ships_worldwide, product_count, product_count_source, products_read, collection_count, price_min, price_max, price_median, products_on_sale, top_product_types (name, count), top_vendors (name, count), top_tags, first_product_date, first_product_date_exact, latest_product_date, sample_products (title, price, product_type, url), email, emails, phone, phones, trade_name, business_address, tax_id, registration_number, instagram, facebook, tiktok, x_twitter, youtube, pinterest, linkedin, theme_name, theme_custom_name, theme_version, theme_store_id, apps, app_categories, app_extension_handles, app_count, shop_pay_installments, card_brands, og_image, logo_url, shop_app_rating, shop_app_rating_count, shop_app_review_count, matched_product, matched_product_url, password_protected, shopify_signals, is_shopify, discovered_via (shop_catalog, google or input), keyword, input_domain, position, scraped_at. Each run also writes one row with _type "summary", one with _type "info" when stores were delivered, and a row with _type "error" for each domain that is not a live Shopify store; none of these is charged. Full spec: GET https://api.apify.com/v2/acts/themineworks~shopify-store-finder/builds/default (Bearer TOKEN), which returns inputSchema and readme. Token: https://console.apify.com/account/integrations?fpr=ymnoit&utm_source=apify-readme&utm_medium=referral

Key features

  • Niche search that goes deep. Each keyword is read page after page in the Shop catalog, 30 matching products a page, and each new store on a page is verified and read. Popular niches keep going for hundreds of stores; "dog treats" gave 60 stores from 10 pages in our test.
  • Google top up. When the catalog has no more new stores for a keyword, Google results for that keyword plus "powered by shopify" are checked too, and only verified Shopify stores are kept. In our test one Google page added 7 stores.
  • Domain checker. Paste up to 5,000 domains, store links or .myshopify.com addresses. Each gets a full row when it is a live Shopify store, or a free error row that says why not (not Shopify, closed shop, no answer).
  • The merchant's own contact record. Besides the homepage, the actor reads the store's Shopify "Contact information" page, a short record many merchants fill in with trade name, email, phone, business address and VAT or company number, then the privacy policy and the contact page when no email has turned up yet.
  • Theme and app stack. The live theme (for example Dawn, Prestige, Broadcast), its version and Theme Store id, more than 70 known apps and pixels by their scripts (Klaviyo, Judge.me, Yotpo, ReCharge, Rebuy, Gorgias, Meta Pixel, TikTok Pixel and more), and the handles of every Shopify app extension the theme loads.
  • Catalogue numbers. Exact published product and collection counts from the store's profile, plus price range, median price, products on sale, top product types, vendors and tags, and the oldest and newest product dates from the product feed.
  • Filters that cost nothing extra. country, language and minProducts are applied as soon as the data for them is in, so a store that is left out costs one small request and no charge.

How to use it

Basic: one niche

{
"keywords": ["dog treats"],
"maxStores": 200
}

Sort by product_count to find established catalogues, or filter on email to keep stores you can write to.

Local market list

{
"keywords": ["handmade leather wallets"],
"country": "GB",
"maxStores": 50
}

Only stores whose Shopify profile is in the United Kingdom are kept, and the search favours stores that ship there. Keywords in the local language work best for non English markets, for example naturkosmetik with "country": "DE".

App developers: stores without a given app

Run a few niches, then filter the rows on apps (for example no Klaviyo and no Omnisend) and product_count above 50. theme_name and app_extension_handles show what the store already runs.

Check a list you already have

{
"domains": ["allbirds.com", "https://www.greenpeople.co.uk", "colourpop.com"]
}

Every domain is checked; Shopify stores get the full row, other sites an error row with the reason. Filters do not apply to this list.

Bigger catalogues, more product fields

{
"keywords": ["soy candles"],
"maxStores": 100,
"minProducts": 20,
"productPagesPerStore": 4
}

Up to 1,000 products per store are read for price range, product types, vendors and the first product date. The product count itself always comes from the store's profile.

Input parameters

ParameterTypeDefaultWhat it does
keywordsarray of stringsemptyNiches, one search each, for example organic skincare. Up to 50.
domainsarray of stringsemptyDomains or store links to check. Up to 5,000.
maxStoresinteger50Most stores per keyword, 1 to 1,000.
countrystringemptyTwo letter code. Keeps stores registered in that country (keyword searches).
languagestringemptyTwo letter code. Keeps stores whose storefront is in that language (keyword searches).
minProductsinteger0Leaves out stores with fewer published products (keyword searches).
productPagesPerStoreinteger1Product feed pages read per store, 250 products each, 1 to 10.
contactPagebooleantrueReads /pages/contact when no email was found elsewhere.
useGooglebooleantrueTops a keyword up from Google when the catalog runs out.

Give keywords, domains or both.

What data do you get?

One row per verified Shopify store. Store rows have no _type field; the summary, info and error rows do, so a filter on _type separates them.

FieldWhat it is
domain, urlStore domain without www, and the storefront link
store_name, title, descriptionStore name, homepage title and meta description
myshopify_domain, shop_idThe store's .myshopify.com address and Shopify shop id
country, province, cityLocation on the store's Shopify profile
currency, languageStore currency and storefront language, e.g. GBP, en-GB
ships_to_countries_count, ships_worldwideHow many countries it ships to
product_count, product_count_source, collection_countPublished products and collections
products_readProducts read from the feed for the fields below
price_min, price_max, price_median, products_on_salePrice range in the store currency
top_product_types, top_vendors, top_tagsWhat the store sells most, with counts
first_product_date, first_product_date_exact, latest_product_dateOldest and newest product dates; exact when the whole catalogue was read
sample_productsFirst three products with title, price, type and link
email, emails, phone, phonesContact details the store publishes (store domain emails first)
trade_name, business_address, tax_id, registration_numberFrom the store's Contact information page, when filled in
instagram, facebook, tiktok, x_twitter, youtube, pinterest, linkedinSocial profile links
theme_name, theme_custom_name, theme_version, theme_store_idLive theme
apps, app_categories, app_count, app_extension_handlesApps and pixels seen in the page source
shop_pay_installments, card_brandsPayment options from the store profile
og_image, logo_urlSharing image and logo
shop_app_rating, shop_app_rating_count, shop_app_review_countProduct rating in the Shop app (catalog finds)
matched_product, matched_product_urlThe product that matched your keyword
password_protected, shopify_signals, is_shopifyStorefront state and what proved it is Shopify
discovered_via, keyword, input_domain, positionHow the store was found
scraped_atWhen the row was written

Summary row (_type: "summary", never charged): stores_checked, stores_delivered, charged_for, not_shopify, unreachable, filtered_country, filtered_language, filtered_min_products, duplicates_skipped, stores_with_email, stores_with_phone, stores_with_instagram, catalog_pages, google_pages, http_requests, ended_on_deadline, stopped_by_max_cost, shortfall_reason when fewer stores came back than asked, and per_keyword, one entry per keyword with pages read, stores delivered and why it stopped. The same summary is saved as the OUTPUT record of the run.

Error rows (_type: "error", never charged): one per domain in domains that is not a live Shopify store, with error_type (invalid_domain, not_shopify, shop_unavailable, unreachable), identifier, reason and http_status.

Stable fields for automations

These were present in every store row of our test runs (511 stores from 8 runs), and their names will not change:

FieldWhat it is
domainThe key to store and join on
urlStorefront link
store_nameStore name
myshopify_domainShopify address
countryRegistered country
currencyStore currency
product_countPublished products
appsApps found (may be empty)
is_shopifyAlways true
discovered_viaSource
scraped_atRow time

Optional, present only when the store publishes a value. Fill rates from a 300 store test ("soy candles" and "pet supplements"): email 271, instagram 242, facebook 222, apps with at least one app 278, theme_name 291, phone 124, tiktok 90, price_min (stores with a public product feed) 289, trade_name 60, business_address (stores that filled in the Contact information page), tax_id, theme_store_id (themes from the Theme Store only) and the shop_app_ fields (catalog finds only).

Output examples

One store from the "handmade leather wallets" search with "country": "GB" (test run, 21 Oct 2026, trimmed):

{
"domain": "harberlondon.com",
"url": "https://www.harberlondon.com",
"store_name": "Harber London",
"myshopify_domain": "struendo.myshopify.com",
"country": "GB",
"city": "London",
"currency": "GBP",
"product_count": 125,
"collection_count": 81,
"price_min": 7.5,
"price_max": 999,
"price_median": 99,
"top_product_types": [
{ "name": "Bags", "count": 38 },
{ "name": "Sleeves", "count": 37 },
{ "name": "Wallets", "count": 18 }
],
"first_product_date": "2015-03-25",
"first_product_date_exact": true,
"email": "support@harberlondon.com",
"trade_name": "Harber London",
"business_address": "Harber London Ltd, Unit 104 The Light Box, 111 Power Road, London W4 5PY, United Kingdom",
"tax_id": "GB260921613",
"instagram": "https://www.instagram.com/harberlondon",
"tiktok": "https://www.tiktok.com/@harber_london",
"linkedin": "https://www.linkedin.com/company/10073151",
"theme_name": "Harber Atelier",
"apps": ["Klaviyo", "Judge.me", "Klarna"],
"shop_pay_installments": true,
"shop_app_rating": 4.36,
"shop_app_review_count": 3258,
"discovered_via": "shop_catalog",
"keyword": "handmade leather wallets",
"position": 1
}

A US store from the "dog treats" search (same day, trimmed):

{
"domain": "kingloupets.com",
"store_name": "King Lou Pets",
"country": "US",
"province": "Indiana",
"city": "Zionsville",
"product_count": 97,
"price_min": 6,
"price_max": 899,
"top_product_types": [{ "name": "Dog Treats", "count": 47 }, { "name": "Merch", "count": 30 }],
"email": "hello@kingloupets.com",
"phone": "(844) 546-4568",
"instagram": "https://www.instagram.com/kingloupets",
"facebook": "https://www.facebook.com/kingloupets",
"theme_name": "Venue",
"theme_version": "7.0.2",
"theme_store_id": 836,
"apps": ["Klaviyo", "Judge.me", "Rebuy", "Gorgias", "Microsoft Clarity", "Elevar", "Instafeed"],
"matched_product": "whole chicken feet",
"discovered_via": "shop_catalog",
"keyword": "dog treats"
}

An error row for a domain that is not Shopify (nothing charged):

{ "_type": "error", "error_type": "not_shopify", "identifier": "example.com", "reason": "No Shopify signal: /meta.json answered 404, the homepage 200 without Shopify scripts or headers.", "http_status": 200 }

Pricing

Pay per event: you pay for the verified Shopify stores you receive, plus a flat $0.003 per run, whatever memory you choose. Reading more product pages, the contact page or Google costs nothing extra.

EventWhen it is chargedFree planBronze (Starter)Silver (Scale)Gold (Business)
store-foundOnce per verified Shopify store row stored in your dataset$5.00 per 1,000$4.25 per 1,000$3.50 per 1,000$3.00 per 1,000
run-startOnce per run, when the first verified store is delivered$0.003$0.003$0.003$0.003

The price of one store is the price per 1,000 divided by 1,000.

Never charged:

  • domains that are not Shopify, closed shops and sites that do not answer (each listed domain gets an error row);
  • stores your country, language or minProducts filters leave out;
  • a store that a second keyword of the same run finds again;
  • stores past your maxStores;
  • the summary, info and error rows;
  • a run that delivers no store: the start fee is charged only when the first store is delivered;
  • anything past your "Max cost per run". The actor checks the budget before each batch of rows and stops while the total is still below your limit, so the run ends SUCCEEDED with a partial result and a status message saying so.

Run it on a schedule

  1. Open the actor in Apify Console, set your input and click Save as a new task.
  2. In the task, open Schedules, click Add schedule and pick how often (every Monday at 08:00, the first of the month and so on).
  3. Compare runs on domain to see stores that are new in your niche, and on apps or theme_name to see who switched tools.
  4. Optional: add an integration (Google Sheets, HubSpot through Make or Zapier, a webhook) so each run lands where your sales team works.

FAQ

How does it find stores?

Each keyword is searched in the Shop catalog, the public product search of Shop, the shopping app Shopify runs for its merchants. Its results come only from Shopify stores, so the store behind each matching product is a real Shopify lead in that niche. When the catalog runs out of new stores, Google is asked for the keyword plus "powered by shopify". Every candidate is then checked on its own domain before it becomes a row.

How is a store verified as Shopify?

By the store's public Shopify shop record at /meta.json (it carries the shop id and the .myshopify.com address), or by the Shopify.shop script or Shopify's powered-by header on a live homepage. shopify_signals lists what was found. A .myshopify.com name with no live shop behind it is reported as shop_unavailable and not charged.

Why do some rows have no email or phone?

The actor only returns contact details the store itself publishes: on the homepage, in the Contact information page, in the privacy policy or on the contact page. Some stores show a contact form only. Emails are found, not tested for delivery.

Is the product count exact?

Yes when product_count_source is meta.json: that is the published product count on the store's own Shopify record, which nearly every store has. Price range, product types, vendors and product dates come from the first productPagesPerStore pages of the product feed (250 products a page); first_product_date_exact is true when the whole catalogue was read.

How many stores can I get?

Up to 1,000 per keyword and 50 keywords per run, plus up to 5,000 domains to check. Popular niches go deep; narrow ones end when the catalog and Google have no new stores, and the summary row says why. A store found by two keywords counts once.

How long does a run take?

In our tests: 22 seconds for the "Try it" input (20 stores), 89 seconds for 60 stores, 109 seconds for 80 stores, and 514 seconds for 300 stores from 2 keywords, so about 1.4 to 1.7 seconds per store. The default time limit is 3,600 seconds; the actor stops before it and keeps every row.

What does the country filter do?

It keeps stores whose Shopify profile lists that country, and asks the catalog for stores that ship there. Many stores ship worldwide, so with a filter on, the actor reads more pages to fill your list; stores it leaves out are not charged. Use keywords in the local language for the best yield.

Can it miss apps?

Yes. Apps are read from the homepage source. Some load only on product or cart pages, or after a click, so a missing app is not proof the store does not use it. app_extension_handles lists every Shopify app extension the theme loads, including apps not in the named list.

Do I need an account, cookies or a proxy?

No. The actor reads public pages and public JSON feeds, using Apify Proxy where a site asks for it, which is included. Nothing to set up.

Which actor should I use for a store's full product list?

Shopify Store Scraper returns every product of a store with variants, prices and SKUs. For leads outside Shopify, B2B Leads Finder and Google Maps Email Scraper.

Which formats can I download?

JSON, CSV, Excel, XML, RSS and HTML from the run's Storage tab or through the API. The dataset has three ready views: Stores, Contacts, and Theme and apps. In CSV and Excel, list fields are flattened into columns such as apps/0 and top_product_types/0/name.

Can I use it from Claude, ChatGPT or Cursor (MCP)?

Yes, through Apify's MCP server. Connector URL: https://mcp.apify.com/?tools=themineworks/shopify-store-finder

  • Claude: Settings > Connectors > Add custom connector, paste the URL, sign in with Apify.
  • ChatGPT: turn on developer mode, add an MCP connector with the URL, sign in with Apify.
  • Cursor or VS Code: add it as an HTTP MCP server with that URL.
  • Claude Code: claude mcp add -t http shopify-store-finder "https://mcp.apify.com/?tools=themineworks/shopify-store-finder"

The actor reads only public pages and records that any visitor can open without logging in, mostly business information that stores publish to be found. You are responsible for how you use it, including the stores' terms, anti spam rules for outreach and data protection law such as GDPR and CCPA. This actor is not made or endorsed by Shopify. This is general information, not legal advice.

Integrations

  • Google Sheets: send each run's stores to a sheet with Apify's Google Sheets integration; one row per store fits a sheet as is.
  • Make, Zapier and n8n: start a run and read its dataset with the Apify apps and nodes, for example "new stores in our niche every Monday to HubSpot".
  • Webhooks: have Apify call your URL when a run succeeds, then fetch the dataset.
  • API and SDKs: run it from Python or JavaScript with the Apify client, or with a plain HTTP call (see "Copy to your AI assistant" above).
  • MCP clients: Claude, ChatGPT, Cursor and VS Code can run it as a tool through the connector URL in the FAQ.

More from The Mine Works

E-commerce and marketplaces

Social media and video

Leads and business directories

Marketing, SEO and reviews

LinkedIn

Real estate

Science, health and government data

Jobs and hiring

Company and business data

Food and local services

Developer and AI tools

More tools

Support

Found a niche that returns fewer stores than it should, or a field that comes back empty for a store that shows it? Open an issue in the Issues tab with the input and the run ID, and we will look at it. For a field you need, email dmineworks@gmail.com.

Find Shopify stores by niche keyword, or check your own list, and get one verified row per store with country, product count, price range, theme, apps, social links, email and phone, no login.