DEV Community

Hapol Data
Hapol Data

Posted on

Build a list of niche Shopify stores as a CSV

Disclosure: I build these actors as Hapol Data.

If you sell to Shopify merchants (an app, an agency service, wholesale), you usually need a list of stores in one niche, with enough detail to qualify them. This post shows how to build that list with the Shopify Store Leads actor and export it as CSV. Everything below comes from real runs on Oct 12, 2026.

Two ways in

  1. Keywords: the actor searches for candidate stores (default: Bing, free discovery), then verifies each one.
  2. Your own domains: paste a list, and it tells you which ones are really Shopify and pulls the data.

Every candidate is checked live with up to four signals: Shopify response headers, Shopify code in the homepage, the store's public /meta.json, and its public /products.json.

Option 1: niche keyword

Input:

{ "keywords": ["soy candles"], "discoveryMethod": "bing", "maxStores": 10 }
Enter fullscreen mode Exit fullscreen mode

Log from our run:

Bing "soy candles site:myshopify.com" p1: 5 candidate domains
Bing "soy candles site:myshopify.com" p2: 5 candidate domains
Bing "soy candles site:myshopify.com" p3: 5 candidate domains
Done: 2 Shopify stores saved; 2/5 checked domains were Shopify.
Enter fullscreen mode Exit fullscreen mode

Be honest with yourself about what Bing discovery gives you: here, 5 unique candidates and 2 verified stores (Milkhouse Candle Company and Finding Home Farms). It's good for a quick, small list. For more, run several narrow keywords ("soy candles", "beeswax candles", "candle making supplies") or bring your own domains.

Option 2: check your own domain list

Input:

{
  "domains": ["milkhousecandles.com", "ugmonk.com", "https://www.taylorstitch.com", "bootandbeam.com", "example.com"],
  "includeNonShopify": true
}
Enter fullscreen mode Exit fullscreen mode

Log:

Done: 3 Shopify stores saved; 3/5 checked domains were Shopify.
Enter fullscreen mode Exit fullscreen mode

ugmonk.com, taylorstitch.com and milkhousecandles.com were confirmed; bootandbeam.com and example.com came back shopifyConfirmed: false (shown only because includeNonShopify is on, handy for cleaning a CRM list).

What one row looks like

A real row (trimmed only by leaving out pagesChecked):

{
  "domain": "milkhousecandles.com",
  "url": "https://milkhousecandles.com",
  "shopifyConfirmed": true,
  "shopifySignals": { "header": true, "html": true, "productsJson": true, "meta": true, "myshopifyRef": true },
  "socials": {
    "facebook": "https://facebook.com/MilkhouseCandles",
    "instagram": "https://instagram.com/milkhousecandleco",
    "pinterest": "https://pinterest.com/milkhousecandleco",
    "tiktok": "https://tiktok.com/@milkhousecandles",
    "youtube": "https://youtube.com/channel/UCPk7WgC6JwB64s8BALneWXg"
  },
  "emails": [],
  "phones": [],
  "primaryDomain": "milkhousecandles.com",
  "storeName": "Milkhouse Candle Company",
  "myshopifyDomain": "15cf4c.myshopify.com",
  "currency": "USD",
  "theme": "Stiletto",
  "themeStoreId": 1621,
  "productCount": 396,
  "productCountSource": "meta.json",
  "priceMin": 2.5,
  "priceMax": 950,
  "priceAvg": 47.85,
  "priceSampleSize": 250,
  "storefront": "online-store"
}
Enter fullscreen mode Exit fullscreen mode

Note emails: []: the actor only returns contact details the store publishes on its own site, and many stores publish none. Ugmonk (info@ugmonk.com) and Taylor Stitch (hello@taylorstitch.com) did.

Export to CSV

On Apify, open the run's Storage → Dataset → Export and pick CSV (choose the columns you want), or use the dataset API with format=csv.

Here are the four verified stores from both runs, reduced to the columns most people qualify on:

domain,storeName,productCount,currency,priceMin,priceMax,theme,emails,instagram
milkhousecandles.com,Milkhouse Candle Company,396,USD,2.5,950,Stiletto,,https://instagram.com/milkhousecandleco
ugmonk.com,Ugmonk,191,USD,5,500,Tinker,info@ugmonk.com,https://instagram.com/ugmonk
taylorstitch.com,Taylor Stitch,3848,USD,35,278.6,Taylor Stitch Retail Web,hello@taylorstitch.com,https://instagram.com/taylorstitch
findinghomefarms.com,Finding Home Farms,105,USD,4,200,Symmetry,,https://instagram.com/findinghomefarms
Enter fullscreen mode Exit fullscreen mode

Qualifying the list

With this you can already filter: small catalogs vs. thousands of SKUs (191 vs. 3,848 products here), price point, currency as a rough country hint, and theme (useful if you sell theme work or an app that only fits some themes).

Use it responsibly

The data is public storefront information, but if you contact stores, follow anti-spam and privacy law where you and they are (CAN-SPAM, GDPR and similar), and send relevant, low-volume messages.

The actor: apify.com/hapol/shopify-store-leads. Questions or a niche that doesn't work well? Leave a comment.


Hapol Data: Web Data. Automated.

Top comments (2)

Collapse
 
double_chen_70da460344c73 profile image
Double CHEN •

Keeping priceSampleSize beside priceAvg avoids treating the 250-product sample as the full catalog. A BrowserAct Cloud Bot for repeat store research should preserve those fields in CSV too, so a later run can distinguish a changed price from changed coverage.

Collapse
 
hapoldata profile image
Hapol Data •

Good catch. Keeping priceSampleSize next to the averages is exactly so a later run can tell a real price move from a smaller sample. I'll make sure the CSV export docs keep calling that out.