Shopify Store Scraper - Find Stores, Emails & Tech Stack avatar

Shopify Store Scraper - Find Stores, Emails & Tech Stack

Pricing

from $0.001 / actor start

Go to Apify Store
Shopify Store Scraper - Find Stores, Emails & Tech Stack

Shopify Store Scraper - Find Stores, Emails & Tech Stack

Find Shopify stores by keyword, product category, country, rating or launch date. Get verified emails, phone numbers, social profiles, real product counts, price range, store age, Shopify theme and installed apps. Export to CSV, JSON or Excel for lead generation.

Pricing

from $0.001 / actor start

Rating

0.0

(0)

Developer

Mukesh Kumar

Mukesh Kumar

Maintained by Community

Actor stats

0

Bookmarked

8

Total users

4

Monthly active users

5 days ago

Last modified

Share

Find Shopify stores by keyword, product category, country, rating or launch date — then get the data that tells you whether each store is worth contacting: verified emails, phone numbers, social profiles, real product counts, price range, store age, Shopify theme and installed apps.

No store URLs needed. Give it a niche and it finds the stores for you. Export to CSV, JSON, Excel or XML, or pull results straight from the API.

What you get for every Shopify store

Field groupWhat's included
Contact detailsEmail (with confidence rating), phone, Instagram, Facebook, TikTok, X/Twitter, YouTube, Pinterest, LinkedIn
Store identityStore name, domain, .myshopify.com domain, Shopify shop ID, Shop.app profile
LocationVerified city, region and country from the store's own account, plus currency
Catalog dataReal product count, collection count, price min/median/max, in-stock rate, discount rate, top product types and vendors
Store ageEstimated launch date, months since last product published
Tech stackShopify theme name, custom vs off-the-shelf, and ~30 detectable apps (Klaviyo, Recharge, Gorgias, Yotpo, Judge.me, Attentive, Smile.io, PageFly and more)
Quality signalsStore rating, review count, lead score 0-100

That's ~70 fields per store. Most Shopify scrapers return a name, a URL and two sample products.

Who uses this

  • Ecommerce agencies — find Shopify stores in your niche that have budget signals (custom theme, paid apps, big catalog) and a working email address.
  • Shopify app developers — find stores already running a competing app, or stores that run everything except yours.
  • Suppliers and wholesalers — find retailers selling in your category, sized by real catalog and price band.
  • Dropshipping and market research — measure how many stores sell a product, where they're based, and what they charge.
  • Sales teams — build a Shopify prospect list with verified contacts and skip the ones you already have in your CRM.

How to find Shopify stores

By product keyword

{
"providers": ["shopapp"],
"query": "organic coffee",
"maxItems": 500
}

By niche, filtered to real prospects

Find established coffee stores with a working email that already pay for Klaviyo:

{
"providers": ["shopapp"],
"query": "organic coffee",
"minProducts": 25,
"catalogPriceMin": 20,
"requireEmail": true,
"usesApps": ["Klaviyo"],
"minLeadScore": 60
}

Newly launched Shopify stores

New stores are the highest-value segment for agencies and app developers — they are still choosing their tools. sortBy: "most_recent" is how you reach them:

{
"providers": ["shopapp"],
"query": "skincare",
"sortBy": "most_recent",
"maxStoreAgeMonths": 12,
"requireEmail": true
}

Everything in a category

A single keyword runs out of stores fast. The taxonomy provider walks the Shopify product category tree instead, so it keeps finding new merchants long after keyword search is exhausted:

{
"providers": ["taxonomy"],
"query": "coffee",
"maxItems": 5000,
"skipPreviouslyScraped": true
}

Enrich Shopify stores you already have

Already have a domain list? Skip discovery entirely and just enrich it — no proxy needed, and it's the cheapest way to run this:

{
"providers": ["domains"],
"domains": ["allbirds.com", "deathwishcoffee.com", "gymshark.com"]
}

Find stores in a specific country

{
"providers": ["shopapp"],
"query": "candles",
"storeCountry": "GB",
"requireEmail": true
}

Example output

{
"name": "Death Wish Coffee",
"domain": "www.deathwishcoffee.com",
"myshopifyDomain": "deathwishcoffee.myshopify.com",
"primaryEmail": "hey@deathwishcoffee.com",
"primaryEmailConfidence": "medium",
"socials": { "instagram": "...", "facebook": "...", "youtube": "..." },
"productCount": 149,
"priceMin": 5, "priceMedian": 32.75, "priceMax": 119.99,
"inStockRate": 0.88,
"estimatedStoreAgeMonths": 154,
"topProductTypes": [{ "name": "Apparel", "count": 38 }, { "name": "Coffee", "count": 32 }],
"verifiedAddress": { "city": "Round Lake", "region": "New York", "country": "US" },
"currency": "USD",
"theme": { "name": "Dawn", "isCustomTheme": true },
"apps": [
{ "app": "Klaviyo", "category": "email" },
{ "app": "Gorgias", "category": "helpdesk" },
{ "app": "Smile.io", "category": "loyalty" }
],
"rating": 4.7,
"leadScore": 77
}

Where the data comes from

Five discovery sources, switchable via providers:

ProviderFinds stores byTargetingVolume
shopappKeyword and facet search on Shopify's own marketplaceBestMedium
taxonomyWalking the Shopify product category treeBestHighest
domainsYour own list — enrichment onlyYou chooseYour list
iprangeReverse IP on Shopify's hosting rangeNoneVery high
serpSearch enginesGoodMedium

Every store found is then read directly from its own public storefront endpoints — the same data Shopify serves to any visitor. That's where the catalog, pricing, theme and app data comes from, and it's why the output is deeper than tools that only resell one search API.

Filtering: only pay for leads you'd actually contact

Filters run against the enriched data, not just search results, and only stores that pass count toward maxItems:

FilterFinds
minProducts / maxProductsStores sized to your offer
maxStoreAgeMonthsNewly launched Shopify stores
catalogPriceMin / catalogPriceMaxStores at your price point
requireEmail / requirePhoneOnly contactable leads
usesApps / excludeAppsStores running (or missing) specific apps
customThemeOnlyAgency-built stores, i.e. stores with budget
storeCountryStores based in one country
minRating / minLeadScoreOnly well-rated or high-scoring stores

Lead score

Every store gets a 0-100 score so a large export can be sorted by who to contact first. It weighs contactability, catalog size, publishing activity, tech sophistication and review reputation. It's a ranking heuristic, not a promise — tune minLeadScore against leads you know converted.

Not paying for the same lead twice

  • skipPreviouslyScraped remembers delivered stores between runs, stored as a readable domain list you can inspect — not opaque internal state.
  • excludeDomains seeds it from your CRM, so you never pay for a lead you own.
  • resetSeenStores clears the history without losing the run.

Keeping costs down

Most of what this Actor could spend money on, it never fetches.

Filters are applied as soon as they can be answered, not at the end. Each enrichment stage is ordered by what it costs, and the filters are consulted between them. meta.json is about a kilobyte and settles catalogue size, country and address, so a store your filters will reject usually costs one small request instead of a homepage, four catalogue pages and three contact pages. Runs report where rejections were resolved — earlier is cheaper:

rejections resolved at: meta=239, catalog=46, tech=18 (earlier is cheaper)

Storefront traffic takes the cheapest route that works. storefrontProxyMode defaults to auto, which tries the direct connection, then rotating datacenter IPs, and only reaches for residential on storefronts that refuse both — residential being the one tier billed per gigabyte. Each store gets its own proxy session, so one store's rate limit never becomes another's. maxResidentialMbytes caps the per-gigabyte traffic outright, and allowResidentialStorefronts: false removes it entirely at the cost of a few bot-walled stores. The domains provider needs no proxy at all.

Responses are cut off as soon as they stop being worth reading. A wrong /pages/contact guess returns a fully themed Shopify 404 — tens of kilobytes for nothing — so contact pages are taken from the homepage's own links instead of guessed, and any error response is dropped at the status line rather than downloaded.

Filter combinations that match nothing stop themselves. If the Actor has screened maxCandidatesPerLead stores (200 by default) for every one that passed, it stops and says so rather than grinding through thousands more. A run can also end early if what it is spending stops being covered by what it is delivering — the log says so plainly when it happens, and every store already delivered is in the dataset. Both cases mean the same thing in practice: the filters are rejecting nearly everything they see, and relaxing the tightest one will get you far more for the same money.

Notes and limits

  • Store age is a lower bound on large catalogs. It's derived from the oldest product sampled, and /products.json isn't ordered by creation date, so a partial sample can make a store look newer than it is. Each record carries storeAgeConfidence (exact or lower-bound), and when maxStoreAgeMonths is set, unverifiable ages are rejected rather than reported as new. Raise catalogPages to sample deeper, or set allowUnverifiedAge to keep them.
  • productCount is capped by Shopify at 25001; records above that carry productCountCapped: true and should be read as "25,000+".
  • App detection is fingerprint-based, so it finds apps that ship front-end assets. Purely back-office apps leave no trace on the storefront.
  • Some storefronts sit behind bot protection and answer nothing. They're reported as verificationStatus: "blocked" rather than silently dropped, and excluded by default unless you set keepUnverified.

FAQ

Do I need store URLs? No. Give it a keyword or category and it finds the stores. If you do have URLs, the domains provider enriches them directly.

Can it find stores in a specific country? Yes — storeCountry matches against each store's own verified account country, not a guess from the domain.

Can it tell me which apps a Shopify store uses? Yes, around 30 common apps are detected from the storefront, including Klaviyo, Recharge, Gorgias, Yotpo, Judge.me, Loox, Okendo, Attentive, Postscript, Smile.io, LoyaltyLion, PageFly and Shogun.

How many stores can I get? Set maxItems up to 20,000 per run. Use the taxonomy provider with skipPreviouslyScraped to keep pulling fresh stores across runs.

Are the emails verified? Each email carries a confidence rating. high means it came from a real mailto: link on the store's own domain. Use requireEmail to drop stores without one.

Is this allowed? It reads publicly available storefront data — the same pages and endpoints Shopify serves to any visitor. Use the output in line with applicable marketing and privacy law (GDPR, CAN-SPAM) in your market.