~/business/shopify-store-leads

Shopify Store Leads — Catalog Size, Apps & Contacts

Shopify store leads with the numbers that qualify them — product count, price band, theme, installed apps, publishing cadence, and business contacts. Discover new stores by filter, or enrich domains you already have.

lead data TypeScriptCheerio Global
proooxy/shopify-store-leads — spec
categorybusiness / lead data
languageTypeScript
stackTypeScript, Cheerio
marketsGlobal
outputclean, RAG-ready JSON

key features

Catalog size, price band, and product types — not just a domain and an email

Installed apps and theme detected per store

Publishing cadence — products per month and days since the last one

Find stores by what they sell through the Shop app's search, or enrich domains you already have

Never charged for a store a filter rejected

Business email, phone, and social profiles where published

Shop app rating and business address for each store listed there

use cases

  • B2B prospecting for apps, agencies, and 3PLs selling to Shopify merchants
  • Finding stores that have not yet installed a competitor's app
  • Market mapping by country, category, and catalog size
  • Enriching an existing domain list with catalog and tech-stack data
  • Sourcing acquisition targets by trading activity and price band
  • Building DTC brand datasets for commerce AI

input parameters

ParameterTypeRequiredDescription
storeUrlsarrayoptionalDomains to profile — set this and discovery is skipped
querystringoptionalFind stores selling this — searched on the Shop app, which then supplies every store; with useShopApp off, or on your own storeUrls, matched against store name, description, and domain
categorystringoptionalProduct category — with no query, searched on the Shop app; otherwise matched against the store's own product types
countriesarrayoptionalTwo-letter country codes, e.g. US, GB
minProductsnumberoptionalSkip stores with fewer products than this
activeWithinDaysnumberoptionalOnly stores that published a product this recently
hasAppsarrayoptionalOnly stores running these apps, by handle
excludeAppsarrayoptionalDrop stores already running these apps
requireEmailbooleanoptionalOnly stores publishing a business email address
maxItemsnumberoptionalMaximum stores returned — the hard cap on run spend
useShopAppbooleanoptionalOn by default: a keyword or category is searched on the Shop app, and each store gets its Shop app rating and business address

Output Example

 1{
 2  "url": "https://www.gorjana.com/",
 3  "domain": "www.gorjana.com",
 4  "myshopifyDomain": "gorjana.myshopify.com",
 5  "name": "gorjana",
 6  "country": "US",
 7  "province": "California",
 8  "city": "Laguna Beach",
 9  "address": ["3275 Laguna Canyon Rd Ste R1", "Laguna Beach, California 92651", "United States"],
10  "currency": "USD",
11  "catalog": {
12    "productCount": 983,
13    "collectionCount": 575,
14    "priceMin": 3000,
15    "priceMax": 599000,
16    "priceAvg": 17884,
17    "productTypes": ["Anklets", "Bracelets", "Charms", "Earrings", "Gift Cards", "Hand Chains", "Necklaces", "Rings"],
18    "sizeBand": "medium"
19  },
20  "activity": {
21    "daysSinceLastProduct": 1,
22    "isActive": true,
23    "productsPerMonth": 28.9
24  },
25  "theme": { "name": "[RELEASE] 5.2.0", "id": 166571606147 },
26  "apps": [{ "handle": "klaviyo", "name": "Klaviyo" }, { "handle": "okendo", "name": "Okendo" }],
27  "contacts": {
28    "emails": ["customercare@gorjana.com"],
29    "phones": ["8668290030"],
30    "socials": { "instagram": "https://www.instagram.com/gorjana", "tiktok": "https://www.tiktok.com/@gorjana" }
31  },
32  "rating": { "average": 4.81, "ratingCount": 18510, "reviewCount": 4610 },
33  "discoveredVia": "input",
34  "scrapedUTC": 1790214009
35}

Two conventions worth knowing: prices are integers in minor units, so 17884 means $178.84, and timestamps are epoch seconds.

Tips

  • productsPerMonth is the real activity signal. It separates a store publishing 30 products a month from one that published its last 30 over four years — isActive calls both active.
  • maxItems caps your spend. It is the hard ceiling on rows a run can return and therefore charge for; raise it only once the rows look right.
  • Rejected stores are free. Filters are applied before billing, so a tight filter set costs nothing on the stores it discards.
  • Combine excludeApps with minProducts to build a prospect list of established merchants who have not yet bought what you are selling.

faq

Can I use it on stores I already know?
Yes. Paste domains into storeUrls and discovery is skipped entirely — you get the full profile back for exactly those stores. Leave it empty and the Actor discovers stores instead — through the Shop app's search when you give a keyword or category. Your filters apply either way.
How do I find stores without a competitor's app?
Use excludeApps with the competitor's app handle. Combined with minProducts and activeWithinDays, that gives you stores large enough to be worth approaching and still actively trading.
Why is the policies list sometimes empty?
An empty list means the store does not publish policies at Shopify's canonical URLs, not that it has no refund policy. Roughly eight in ten ordinary stores use the canonical form, but most large DTC brands do not.

related in ~/business

Run Shopify Store Leads — Catalog Size, Apps & Contacts, or get a custom build

Start extracting on Apify in minutes, or hire me to build a bespoke scraper and RAG pipeline for your exact source and schema.

run on Apify get custom data