Shopify Store Scraper · Qualified Leads from Any Domain List
Pricing
from $8.00 / 1,000 scraped stores
Shopify Store Scraper · Qualified Leads from Any Domain List
Paste store domains, get one qualified row per Shopify store: exact product count, price band, newest product date, theme, location, currency, public e-mails, phones, socials and lead signals. Non-Shopify, password and duplicate domains are never charged.
Pricing
from $8.00 / 1,000 scraped stores
Rating
0.0
(0)
Developer
TheQuietStack
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
a day ago
Last modified
Categories
Share
Paste a list of store domains, from a lead export, a Google Maps list, a competitor list or a CSV. You get one qualified row per Shopify store: whether it really is a public Shopify storefront, how many products it sells (counted, not estimated), price band, when it last published a product, theme, location and currency, the contact details the store itself shows publicly, and lead signals such as no new product in 90 days or outdated copyright year.
Domains that turn out not to be Shopify, password-protected, headless, behind a bot wall or duplicates of a store you already listed are reported in the run summary and never charged.
No login. No API key. Nothing is guessed or enriched from third-party databases.
Who it is for
- Agencies and freelancers who sell Shopify design, SEO, apps, photography or support: find stores that have gone quiet, show no phone number, or still carry a 2021 footer.
- Sales teams qualifying a list before outreach: drop dead stores and stores outside your size range before you pay.
- Market research: price bands, catalog size and publishing pace of a set of competitors, side by side.
Why this scraper
- Counted, not estimated. Shopify's own store metadata reports a product count, but we measured on 24 Sep 2026 that it changes with the visitor's market: for one store it said 212 products with a US English browser and 608 without, while the store's product feed listed 608 both ways. This Actor counts the products itself.
productCountis filled only when the whole catalog was read; otherwise you getproductCountAtLeastand Shopify's figure inproductCountShopifyMeta, never a number dressed up as exact. - Freshness from the right date. Shopify bumps
updated_aton every product whenever inventory syncs (all 250 products on a page showed the same day in our tests), so "last updated" says nothing about the merchant. We use the publish date. Shopify lists newest products first, sodaysSinceNewestProductis exact even for stores with 25,000 products. - You pay for stores, not for domains. Not Shopify, password page, headless front end, bot wall, dead domain, or the same store under a second domain (
www.,.myshopify.comalias, same shop ID): all listed in theSUMMARY, none charged. No silent zero-result runs: every input domain is accounted for. - Lead signals you can filter on. Filtered-out stores are not charged.
Input example
{"domains": ["allbirds.com", "chalk-line.com", "horizonmotorsport.com", "not-a-shop.com"],"countries": ["US"],"maxProductCount": 200,"requiredLeadSignals": ["no-new-product-90d", "no-phone-shown"],"maxStores": 500}
Set "includeProducts": true to also get one row per product (title, URL, type, vendor, tags, price range, compare-at price, availability, image, publish date), newest first.
Output example (store row, measured 24 Sep 2026)
{"name": "Horizon Motorsport","url": "https://horizonmotorsport.com","domain": "horizonmotorsport.com","myshopifyDomain": "horizon-motorsport.myshopify.com","city": "Irvine","province": "California","country": "US","currency": "USD","productCount": 565,"productCountAtLeast": null,"productCountShopifyMeta": 565,"catalogFullyScanned": true,"priceMin": 4,"priceMedian": 380,"priceMax": 6599,"priceStatsBasis": "all 565 products","newestProductPublishedAt": "2026-09-15T21:50:35.000Z","daysSinceNewestProduct": 8,"productsPublishedLast30Days": 4,"productsPublishedLast90Days": 54,"topProductTypes": [{ "name": "Front Lip", "count": 51 }, { "name": "Exterior Accessories", "count": 45 }],"themeSchemaName": "Streamline","copyrightYear": 2026,"emails": ["sales@horizonmotorsport.com"],"emailSources": { "sales@horizonmotorsport.com": "contact page" },"phones": [],"legalName": "Horizon Motorsport","publishedAddress": "Horizon Motorsport Inc, 20 Pebblewood, Irvine CA 92604, United States","instagram": "https://www.instagram.com/horizon.motorsport","hasContactPage": true,"leadSignals": ["no-phone-shown"],"leadSignalCount": 1}
| Field | Meaning |
|---|---|
productCount | Products we counted in the public product feed. Only set when the whole catalog was read (catalogFullyScanned). |
productCountAtLeast | Lower bound when the catalog is bigger than the pages you allowed (productPagesPerStore × 250). |
productCountShopifyMeta | Shopify's own figure. Depends on the visitor's market and can differ from the feed. |
priceMin / priceMedian / priceMax | Lowest variant price per product, across the products read. priceStatsBasis says which products. |
daysSinceNewestProduct | Days since the most recently published product. Always exact. |
productsPublishedLast30Days / …90Days | Exact, or null with …AtLeast when the window reaches past the pages read. |
onSaleShare / soldOutShare | Share of products with a compare-at price / with no available variant. |
themeName / themeSchemaName / themeSchemaVersion / themeStoreId | From the storefront's public theme object. |
emails / phones | Only what the store shows: homepage, its contact page and Shopify's contact-information page. emailSources says where each e-mail was found. |
legalName / publishedAddress | From Shopify's contact-information page, if the merchant filled it in. |
leadSignals | See below. |
homepageRedirectedTo | Set when the homepage sends visitors to another host (headless front end). Homepage-based signals are then left out instead of guessed. |
Lead signals
no-new-product-90d · no-new-product-365d · small-catalog-under-20 · no-products · mostly-sold-out (half or more of the products have no available variant) · no-email-shown · no-phone-shown · no-contact-page-found (no contact link on the homepage and no /pages/contact) · no-social-links · outdated-copyright-year (footer year older than last year) · no-custom-domain.
Run summary
SUMMARY in the key-value store lists, per input domain, why it produced no row: notShopify, passwordProtected, headless, blockedByBotProtection, unreachable, duplicateStores, failed, invalid inputs, how many stores each filter dropped, and HTTP status counts.
Honest limits
- Public storefront data only. No login, no password pages, no checkout. Password-protected stores are skipped, not opened.
- No bot-wall bypass. Some large brands run their storefront behind bot protection or a headless front end; they are listed as
blockedByBotProtectionorheadlessin the summary. In our 24-domain test on 24 Sep 2026: 16 store rows, 1 bot wall (HTTP 429 on every request), 1 password page, 4 not Shopify, 1 dead domain, 1 duplicate alias. - No e-mail guessing. If a store only offers a contact form,
emailsis empty and the row carriesno-email-shown. That is often exactly the lead you want. - Discovery is up to you. This Actor qualifies domains you already have; it does not search for stores.
- The product catalog shown can depend on the visitor's market.
storefrontLocalerecords which locale the store served.
Pricing (pay per event)
- Actor start: small flat fee per run
- Per scraped store: only Shopify stores that pass your filters and are written to the dataset
- Per scraped product: only when product rows are switched on