Shopify Store Leads Scraper — $4/1K · Emails, Phones & Ratings
Pricing
from $4.00 / 1,000 store leads
Shopify Store Leads Scraper — $4/1K · Emails, Phones & Ratings
Discover Shopify sellers by keyword/category, origin and product filters. Public contacts with evidence, qualified emails, apps/theme, business addresses and optional catalog. Reuse lead lists to skip delivered domains; labeled rating/coverage scopes.
Pricing
from $4.00 / 1,000 store leads
Rating
0.0
(0)
Developer
Apivault Labs
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 days ago
Last modified
Categories
Share
Shopify Store Leads Scraper — Emails, Phones & Ratings
Find Shopify sellers by product keywords, then collect public business contacts with evidence URLs. This is a separate lead-focused Actor from Shopify Store Analyzer.
Quick start
{"searchTerms":["organic coffee"],"maxStores":3,"enrichWebsite":true,"maxContactPages":2}
For known stores, use {"storeUrls":["https://boody.com.au"],"maxStores":1} without keywords. API and hosted MCP require your Apify account; public sources need no separate provider key or store login.
What each lead contains
- Actual seller website/domain and available name; deduplicated by domain within a run.
- Public
emails,phones,socialsandcontact_evidencelinking each value to its page. These are published contacts, not verified deliverability or consent. ratingswith explicit scope and source. Catalog ratings describe individual products, not the store.store_ratingonly when matching Store/Organization JSON-LD publishes an aggregate rating. Its scope isstore_self_published; this is a storefront claim, not an independent merchant score. Otherwise null.- Up to three matching
sample_products, discovery page, keyword, merchant-origin filter and website status.
country filters keyword discovery through Catalog's merchant-origin country filter; it does not verify a headquarters address. minProductRating filters matching product/variant ratings, never seller reputation. These search filters cannot be used with known URLs. Require email and/or phone to exclude candidates lacking those contacts; maxStoresScanned applies before filtering; maxStores limits delivered leads.
Coverage and diagnostics
Search uses Shopify's documented public Catalog MCP. It follows opaque product cursors, up to maxPagesPerTerm (1–20), at 50 products per page. The source caps a search at 1,000 products. This gives a bounded sample of product sellers, not all Shopify stores. Repeated runs can overlap unless you enable the delivery history or import a previous Dataset; see the section below.
Website enrichment visits the homepage plus up to four discovered same-domain contact/about/privacy pages. HTTP is the default. Optional Chromium rendering can execute public page JavaScript; it does not log in, solve challenges or reveal private admin data. Known URLs need a reachable page with Shopify evidence; unreachable/unconfirmed URLs go to diagnostics, not charged rows. Catalog sellers remain useful discovery rows if their website is protected; website_status and ERRORS explain missing enrichment. Contact filters can yield an empty Dataset.
Discovery and enrichment have finite processing budgets. Large requests can stop with partial results before the requested candidate limit; SUMMARY.discovery.truncated and errors explain the stop. Use smaller runs for slow websites.
Read run SUMMARY and ERRORS, even when the run succeeds. Source failures are DATA_SOURCE_UNAVAILABLE or PARTIAL_RESULTS, not successful empty search. Missing contacts, counts and ratings are unknown, not zero. Use the Dataset JSON/CSV/Excel export; nested evidence and scoped ratings are best preserved in JSON.
Cost and integrations
$4 per 1,000 delivered store rows, plus $0.00005 per start (one event per GB, minimum one). Apify platform usage is paid separately by the user. Contact filters exclude candidates before Dataset billing; a returned discovery row may have no contact. Start and platform costs can apply to empty runs. No downstream paid Actor is started. Apify Proxy is optional and off by default; enabling it adds user-paid proxy usage. Check the current pricing and start with a small batch and cost cap.
Hosted MCP: https://mcp.apify.com?tools=apivault_labs/shopify-store-leads-scraper. Tool: apivault_labs--shopify-store-leads-scraper. Send a small maxStores and inspect Dataset, SUMMARY and ERRORS before expanding.
The Actor has its own runtime and does not start or charge the Analyzer. No dedicated n8n or Python package is published for this new Actor; Analyzer clients target a different Actor and must not be used as substitutes. Use the Apify API, hosted MCP or a generic HTTP node with this Actor ID.
Example inputs
| Goal | Input |
|---|---|
| Niche discovery | {"searchTerms":["organic coffee"],"maxStores":3} |
| Leads with emails | {"searchTerms":["organic coffee"],"maxStores":6,"requireEmail":true} |
| Enrich known stores | {"storeUrls":["https://exhalecoffee.com"],"maxContactPages":2} |
| US-origin sellers | {"searchTerms":["organic coffee"],"country":"US","maxStores":3} |
| Rated matching products | {"searchTerms":["organic coffee"],"minProductRating":4.5,"maxStores":3} |
| Public phone numbers | {"storeUrls":["https://www.freshroastedcoffee.com"],"requirePhone":true} |
Change the sample URLs, keywords and limits to your own research. These are bounded examples, not guaranteed contacts for every store.
Qualify leads and reuse lists
{"searchTerms":["organic coffee"],"maxStores":5,"maxStoresScanned":20,"requireBestEmail":true,"hasApps":["Klaviyo"],"includeCatalog":true,"maxProductsPerStore":50,"maxConcurrency":2}
best_emailselects a published own-domain contact first. Known vendor, noreply and privacy mailboxes are not chosen. Personal mailboxes published on the site and brand-domain heuristics remain explicitly labeled. All extracted addresses remain visible with candidate classification; selection is not ownership or deliverability verification.validateEmails:trueoptionally checks MX routing through Google public DNS. A null MX or nonexistent domain cannot qualify; unavailable DNS is unknown. No SMTP or message sending occurs.appsandapp_evidenceexpose public signature matches, not a private installed-app list.hasAppssupports any/all;excludeAppsrequires reachable website coverage.tech_gapsmeans no signature seen in observed pages, not proven absence.- Theme, declared currency/country, policy links, legal name and structured addresses carry source URLs. Declared market is separate from headquarters and merchant-origin search filters.
- Optional
includeCatalogpaginates public products.json up to your cap. Exactproduct_countappears only on observed source exhaustion; otherwise useproduct_count_lower_bound. Products include variants, images, tags, vendor/type and observed availability/sales. Price statistics name the currency and sample; unknown currency is not USD.maxProductsrequires complete coverage,minProductscan use a proven lower bound. activeWithinDaysuses latest observed publication.launchedWithinDayschecks the oldest publication in a complete catalog; this is a product-catalog proxy, not a verified store launch. No verified Shopify billing plan or sales volume is inferred.
Category, location and product filters
Use categories with current Shopify taxonomy IDs, countries for multiple merchant-origin countries, and shipsTo for product destination. For category-only discovery use searchTerms:[]. priceMinMinor/priceMaxMinor are currency minor units in currency;1000 means10USD but1000JPY. Source warnings are preserved. Minimum reviews/rating target the matching variant; both product and variant rating scopes are retained separately.
onSale, catalog size/average price, recent publication, vendor and type filters read a bounded storefront catalog. Product filters only prove a match in the observed sample. requireSocials uses full social domains. Missing source coverage cannot silently satisfy a maximum, negative-app or date filter. Large jobs can stop partially within the processing budget even if the accepted limit is10000; this is not a10000-store coverage guarantee.
Skip leads already delivered
{"searchTerms":["organic coffee"],"maxStores":5,"maxStoresScanned":30,"skipPreviouslyScraped":true,"leadListName":"coffee-prospects"}
Enable history from your first run. Domains are stored in an account-owned named KV store per list (shopify-store-leads-history- plus a stable list hash); only successfully delivered rows are marked. Retain that list store to retain history. Each delivered domain is a separate small record; the full list is not rewritten for every row. Run one job at a time for the same list: there is no transactional concurrency lock. Different leadListName values are isolated. A storage error after delivery can leave uncertain history and fails the run; no automatic retry of delivery is made. SUMMARY.skipped_previously_delivered reports skipped domains. A list accepts up to100000domains. To import an existing accessible Dataset, pass previousDatasetId; failed access or a dataset over100000rows stops the import instead of silently including duplicates.
Public API examples
GitHub API guide and standard Python client example. These target this exact Actor. No dedicated new npm/PyPI package is claimed; existing Analyzer packages target the other product. Price remains$4/1000delivered rows plus start and user-paid platform usage.
Public browser and alternate discovery
renderJs:"auto" can retry failed public HTML reads in Chromium;"on" renders the page directly. Set run memory to at least512MiB. Rendering is serialized even when HTTP enrichment is parallel. There is no logged-in session, CAPTCHA solver or challenge bypass. useApifyProxy:true opts into Apify Proxy using your platform entitlement; it can add proxy charges. proxyFallback:true tries direct requests first; optional proxy country/groups affect the exit route, not the store's origin. Failed proxy access remains a diagnostic, not proof of empty data. respectRobots:true optionally checks public robots.txt and skips disallowed paths.
discoverySource:"common_crawl" reads a bounded historical myshopify URL-index sample from the public Common Crawl CDX service, then qualifies the CURRENT storefront. Clear keyword/category/location filters: CC is not a keyword search or current merchant directory. Archive timestamps are not launch dates. ccIndex pins an archive; ccStartPage and ccMaxPages bound source paging. Canonical myshopify-to-storefront redirects require observed Shopify evidence and are deduplicated before billing. Common Crawl can rate-limit or deny requests; this is reported explicitly.
Category-only Catalog input uses a literal wildcard query plus the requested taxonomy filter because the source rejects empty global browsing without a specific shop. category_query_basis exposes this; it remains a bounded search, not all stores in a category. Source filter warnings are retained. Predefined region expands to the explicit origin-country targeting list in origin_country_filter, combined by OR with country and countries.
includeCollections:true reads up to250public collections. collectionHandles scopes product reading to named collections and never turns subset counts into full-store counts. includePolicies:true reads bounded public policy excerpts with source URLs; no legal conclusions are generated. flatOutput:true retains nested evidence as JSON strings for CSV columns.
lead_score measures observed data completeness on an explicit100-point rubric: qualified email35, phone15, structured address10, social10, sampled catalog10, observed app10, reachable website10. minLeadScore can filter on it. This is not calibrated sales potential or expected conversion. History-skipped Catalog domains are skipped before collecting new candidates; search continues within the page/time limits to find unseen sellers.
Supported public signature names for app filters: Affirm, AfterShip, Afterpay, Algolia, Apple Pay, Attentive, AutoDS, Bold Commerce, CJ Dropshipping, Crazy Egg, Drift, Dsers, Facebook Pixel, GemPages, Google Ads, Google Analytics, Google Pay, Gorgias, Growave, Hotjar, Intercom, Judge.me, Junip, Klarna, Klaviyo, Loox, LoyaltyLion, Lucky Orange, Mailchimp, Microsoft Clarity, Mouseflow, Northbeam, Oberlo, Okendo, Omnisend, PageFly, PayPal, Pinterest Tag, Postscript, Printful, Privy, PushOwl, Re:amaze, ReCharge, Rebuy, Refersion, Reviews.io, SMSBump, Searchanise, Sendlane, Sezzle, ShipBob, ShipStation, Shogun, Shop Pay, Smile.io, Snapchat Pixel, Spocket, Stamped.io, Tidio, TikTok Pixel, Triple Whale, Yotpo, Zendesk. These are signature detectors, not a guarantee of detection on every storefront.
includeContacts:false omits contact fields while retaining requested store/catalog signals. minPrice/maxPrice filter observed storefront variant prices in major units of the selected currency, including known-URL enrichment. They are separate from source-search priceMinMinor/priceMaxMinor. Public /meta.json is read opportunistically for declared currency and shipping-country fields when exposed; unavailable declarations remain unknown. HTML <address> blocks are retained with raw text and explicitly heuristic postal components; they do not establish headquarters.
Public Storefront settings and larger catalogs
When public business details are enabled, the Actor also tries the documented tokenless Storefront API (/api/2026-10/graphql.json) for shop identity, declared shipping countries, currency/payment settings and published contact/legal policies. No public/private merchant token is collected or supplied; there are no customer/order/admin queries or mutations. The returned primary domain must match the store. storefront_api.status identifies coverage. published_shipping_countries is a store declaration, not a checkout or delivery guarantee; shipsToCountries can require listed destinations and excludes unknown coverage. This is separate from the matching-product shipsTo Catalog filter.
websiteEnrichmentMode:"missing_email" skips extra contact pages when the homepage already publishes an email;default"all" keeps bounded enrichment. Storefront contact policies can supply additional published contacts with source evidence.
Large observed product details are retained in run-owned KV chunks if a store row would exceed the Dataset record safety cap. The row then exposes product_details_in_kv:true and authenticated product_exports links; every observed product stays downloadable and only the single store row is billed. A chunk/storage failure precedes Dataset delivery. These are separate from source pagination/completeness limits.
Runs that render JavaScript or sample more than500products per store need at least512MiB. Heavy browser/large-catalog enrichment is serialized;256MiB HTTP runs use at most two store workers. SUMMARY.effective_concurrency reports the applied limit.
Current source limitations
As checked on 20 October 2026, Common Crawl returned HTTP 504 in two release checks; use Catalog discovery or known URLs while its public index is unavailable. The public Shop merchant-profile page was also inaccessible by HTTP/browser/proxy, so independent merchant reputation is not supplied. Product ratings and self-published storefront ratings retain their separate scopes. Default run memory is512MiB for optional browser support; lightweight HTTP jobs can select256MiB.