Skip to content

Shopify Store Scraper - Store Leads, Emails, Apps & Theme

Try for free

Shopify store scraper and store analyzer for ecommerce leads: paste store URLs, get one row per shop with email, phone and socials, theme and installed apps, product count, price band and products added in the last 90 days. Non-Shopify sites are flagged. No login, API key or browser.

Find Shopify stores by keyword โ€” new 1 November 2026

No list of stores yet? Type what the stores sell. ๐Ÿ”Ž Find stores that sellโ€ฆ searches Shopify's own product catalog across all stores that list in it, collects the stores behind the matching products, and profiles each one into the same full row: e-mails, socials, apps, theme, catalogue, price band.

{
  "searchTerms": ["yoga mat", "dog treats"],
  "storeCountries": ["US"],
  "onlyWithEmail": true,
  "requiredApps": ["Klaviyo"],
  "maxStores": 100
}
  • Filters you only pay for when they match โ€” store country, ships-to country, only stores with a public e-mail, uses any of these apps, doesn't use these apps, minimum and maximum catalogue size. A store that fails a filter is not written and not charged; the search keeps going until it has your number of stores.
  • Each term is searched in several slices (price tiers, shipping origin), so one keyword reaches well past one search page: on 1 November 2026 "coffee" gave 161 stores from a single catalog query and 851 different stores across eight slices.
  • Search columns on every found store: searchTerm, matchedProducts, catalogRating and catalogReviewCount (review-weighted rating of the store's matching products), sampleProductUrl and discoveredVia.
  • Search and your own list combine: stores already in Store addresses are not profiled twice.

On a test run the same day, "yoga mat" + "dog treats" with US stores, e-mail required and Klaviyo required returned 10 of 10 rows matching every filter; 3 candidates that failed a filter (UK, Canada, no Klaviyo) were skipped without charge.

What is Shopify Store Scraper?

Shopify Store Scraper finds Shopify stores by keyword, or takes your list of shop addresses, and turns each store into one flat row: who the merchant is, how to reach them, what the storefront runs on, and what the catalogue actually looks like. It reads the JSON that every Shopify storefront publishes for its own use, so there is no login, no API key, no browser and no residential-proxy bill โ€” and no official Shopify API needed.

Give it gymshark.com and you get back the shop's name and country, the e-mail and phone the merchant published, every social profile, the theme and the apps installed, the size and price band of the catalogue, and how many products were created in the last ninety days.

What data does Shopify Store Scraper extract?

Shopify Store Scraper output table: one row per store with emails, theme, apps and catalogue figures

GroupFieldsExample
IdentityshopName, shopId, myshopifyDomain, primaryDomain, description, currency, city, province, countryAllbirds ยท 11044168 ยท weareallbirds.myshopify.com ยท USD ยท Beverly Hills ยท California ยท US
Reach and localisationshipsToCountries, shipsToCountryCount, locale, languages, hreflangs, hreflangsCount, hasCountrySelector, hasCurrencySwitcher, moneyFormat24 countries ยท en ยท 86 hreflang locales ยท ${{amount}}
PaymentspaymentMethods, expressCheckout, bnplOffered, cardBrands, shopPayInstallmentsVisa, Mastercard, Shop Pay, Apple Pay, PayPal, Klarna ยท true
Contactsemail, emails, emailCount, phoneshelp@allbirds.com ยท 4
Socialsinstagram, facebook, tiktok, youtube, x, linkedin, pinterest, socialCounthttps://www.instagram.com/allbirds ยท 5
Storefront techthemeName, themeVersion, theme (the merchant's own label), headless, apps, appCount, appCategories, appCategoryCountDawn ยท Klaviyo, Yotpo, Gorgias, Meta Pixel ยท Email & SMS, Reviews, Support chat, Ad pixels
Marketing stacktrackingIds, runsMetaPixel, runsTiktokPixel, runsGoogleAds, hasEmailCapture, hasBlogGTM-TH8KRSBJ ยท true ยท false ยท false
SEO blockpageTitle, metaDescription, ogTitle, ogDescription, ogImage, ogSiteName, hasStructuredDataAllbirds: Comfortable, Sustainable Shoes & Apparel
CataloguetotalProducts, storeSizeBucket, catalogueComplete, productCount, variantCount, inStockVariants, outOfStockVariants, variantInStockPct, avgVariantsPerProduct, avgImagesPerProduct, vendorCount, topVendors, productTypes, productTypeCount, topProductTypes, uniqueTagsCount, topTags, duplicateDescriptionPct356 ยท medium ยท false ยท 250 ยท 2 980 ยท 1 667 ยท 55.9% ยท 4.9 images ยท Allbirds, re:do ยท Shoes, Apparel
SitemapsitemapProducts, sitemapCollections, sitemapPages, sitemapBlogs, sitemapArticles, collectionCount, pageCount356 ยท 1 346 ยท 175 ยท 2 ยท 80
Price bandpriceMin, priceMedian, priceAvg, priceMax, priceDistribution, avgDiscountPct, productsOnSalePct18 ยท 98 ยท 111.08 ยท 285 ยท 44.3% off on 6% of products
ActivitynewestProductAt, oldestProductAt, catalogueAgeDays, daysSinceNewestProduct, newProducts7Days, newProducts30Days, productsCreatedLast90Days, productsUpdatedLast30Days, firstPageAt2026-09-02 ยท 2019-04-11 ยท 2 757 days ยท 46 days ยท 0 ยท 4 ยท 37 ยท 128
HousekeepingrowType, isShopify, dataLimited, notice, error, scrapedAtstore ยท true ยท false

totalProducts is the size of the whole catalogue, counted from the shop's product sitemap when it is larger than the sample; productCount and the other catalogue figures describe the products actually read (๐Ÿ’ฏ Products per store, 250 by default), and catalogueComplete says whether that sample was the whole catalogue.

Switch on Add product rows and every product arrives as its own row too, with title, handle, productUrl, vendor, productType, tags, publishedAt, available, imageCount and the price range of its variants.

Why the activity figures matter

A list of Shopify stores is easy to buy and mostly useless: half of it is abandoned shops. Three fields answer the only question that decides whether a store is worth contacting โ€” is anyone still working on it? productsCreatedLast90Days counts products by their creation date, not their publish date, because Shopify bumps the publish date on any re-publish and a dormant store would otherwise look brand new.

What the Actor will not invent

Phone numbers come only from tel: links the merchant published. Scanning page text for runs of digits returns map coordinates, order ids and timestamps dressed up as phone numbers, so an empty phones cell here means the merchant published none โ€” not that the Actor guessed badly. Over ten well-known stores on 29 October 2026 it filled for four: large brands route support through a form. The same rule is why there is no revenue estimate, traffic figure or lead score in the output: those cannot be read off a storefront, only guessed at, and a number you cannot check is worse than none.

A shop that rate-limits or blocks the request comes back as an error row saying so, never as "not a Shopify store", so real stores never quietly drop out of your list.

Headless and bot-protected stores

Big brands often put a headless front end (Hydrogen, Next.js, Astro) or a bot wall (Cloudflare, Vercel) in front of their Shopify store. Their main address then hides the shop record and the catalogue. The Actor goes to the Shopify host behind the front end: the .myshopify.com address named in the page, the shop's checkout host, or the .myshopify.com address that matches the domain. A host it finds this way counts only when the shop record names your domain as its own, so a same-name shop in another country never lands in your row. The run log names which host was read. On 28 October 2026 this turned skims.com, bombas.com, ruggable.com and pura.com from nameless or error rows into full profiles.

How much does it cost to scrape Shopify stores?

Pricing on scrape.ly: the event prices below are what this Actor charges. Platform usage (compute, proxy, browser) is billed on top at your plan rates.

Pay per event, billed on results โ€” not on time:

RowPrice
Store profile$0.005 โ€” $5 per 1,000 stores
Product row$0.0005 โ€” $0.50 per 1,000 products
Error row, notice row, "not a Shopify store"free

Prices fall on higher scrape.ly plans.

How to scrape a Shopify store

  1. Open the Actor and press Try for free โ€” the form arrives filled in with gymshark.com.
  2. Paste your own addresses into Store URLs, one per line. A bare domain works; so does a full https:// address or a *.myshopify.com host.
  3. Pick a Mode: Store profile for one row per shop, Products to add the catalogue, Detect only to sift a large domain list .
  4. Press Start. A hundred stores take about a minute.
  5. Export from the Storage tab as CSV, JSON or Excel, or call the API endpoint shown under API to pull the rows straight into your own tool.

โฌ‡๏ธ Input

Shopify Store Scraper input form: store URLs, mode, contacts and catalogue switches

{
  "storeUrls": ["gymshark.com", "allbirds.com", "bombas.com", "ridge.com"],
  "mode": "store",
  "includeContacts": true,
  "maxProductsPerStore": 250
}
FieldWhat it does
searchTermsKeywords for what the stores sell; the Actor finds the stores and profiles them.
storeUrlsThe shops to profile. Bare domain, full URL or *.myshopify.com โ€” all accepted. Optional when searchTerms is set.
storeCountries, shipsToOnly stores based in these countries; search only products shipping to this country. Two-letter codes.
onlyWithEmail, requiredApps, excludeApps, minProducts, maxProductsFilters. A store that fails one is skipped and not charged.
modestore (one row per shop), products (shop row plus catalogue), detect (is this Shopify at all).
includeContactsRead e-mails, phone numbers and social links from the storefront. On by default.
includeProductsAdd one row per product on top of the store row.
maxProductsPerStoreCap on product rows per shop, default 250.
maxStoresHow many store rows one run delivers at most, default 100. Skipped stores don't count.
concurrencyHow many shops are read at once. Five is gentle and fast enough for a hundred shops.

Sift a large domain list before paying for profiles

{ "storeUrls": ["example.com", "another.com", "third.com"], "mode": "detect" }

Profile a shop and pull its whole catalogue

{ "storeUrls": ["kith.com"], "mode": "products", "maxProductsPerStore": 1000 }

โฌ†๏ธ Output

One flat row per store โ€” no nested objects, so the result drops straight into a spreadsheet, a CRM import or an LLM context window.

{
  "rowType": "store",
  "storeUrl": "https://allbirds.com",
  "isShopify": true,
  "shopName": "Allbirds",
  "myshopifyDomain": "weareallbirds.myshopify.com",
  "currency": "USD",
  "country": "US",
  "email": "help@allbirds.com",
  "emails": ["help@allbirds.com", "press@allbirds.com"],
  "instagram": "https://www.instagram.com/allbirds",
  "pageTitle": "Allbirds: Comfortable, Sustainable Shoes & Apparel",
  "metaDescription": "The worldโ€™s most comfortable shoes, made with natural materials.",
  "hreflangsCount": 86,
  "paymentMethods": ["Visa", "Mastercard", "Shop Pay", "Apple Pay", "PayPal"],
  "bnplOffered": true,
  "trackingIds": { "gtm": ["GTM-TH8KRSBJ"] },
  "theme": "[DNAM Theme July 2026]",
  "apps": ["Yotpo", "Google Analytics"],
  "totalProducts": 356,
  "storeSizeBucket": "medium",
  "sitemapCollections": 1346,
  "catalogueComplete": false,
  "productCount": 250,
  "priceMin": 18,
  "priceMedian": 98,
  "priceAvg": 111.08,
  "priceMax": 285,
  "priceDistribution": { "0-25": 2, "25-50": 7, "50-100": 496, "100+": 2475 },
  "avgDiscountPct": 44.3,
  "productsOnSalePct": 6,
  "variantInStockPct": 55.9,
  "duplicateDescriptionPct": 93.3,
  "productsCreatedLast90Days": 37,
  "scrapedAt": "2026-09-12T12:23:09Z"
}

Product rows

{
  "rowType": "product",
  "storeUrl": "https://allbirds.com",
  "title": "Tree Runner Go",
  "handle": "tree-runner-go",
  "productUrl": "https://allbirds.com/products/tree-runner-go",
  "vendor": "Allbirds",
  "productType": "Shoes",
  "tags": ["mens", "tree", "everyday"],
  "publishedAt": "2026-08-14T00:00:00Z",
  "available": true,
  "priceMin": 98,
  "priceMax": 98,
  "imageCount": 7
}

Use cases for Shopify store data

Agencies and freelancers

Build a prospect list of live Shopify stores in a price band, then filter by the apps they already run: shops with no review app, no e-mail tool or no subscription app are a pitch that writes itself.

Sales and lead enrichment

Take a domain list you already have, run Detect only to find which ones are Shopify, then profile just those. You pay for detection at a fraction of a profile.

App and SaaS vendors

Find the stores that already run a competing app, or none at all, and size the market by catalogue and price band rather than by guesswork.

AI agents and RAG

One store, one flat row, stable field names. Call it from an agent through scrape.ly's MCP server and drop the row into a prompt without any reshaping.

Integrations

Use it as a Shopify store API through the scrape.ly API, the JavaScript or Python client, or connect it without code to Google Sheets, HubSpot, Slack, n8n, Make, Zapier and webhooks.

๐Ÿค– For AI agents and LLM apps

Available over the scrape.ly MCP server, so an agent can call it directly.

What it answers: is this domain a Shopify store, who runs it, how to contact them, what apps and theme it uses, how big and how expensive the catalogue is, and whether anyone is still adding products.

Troubleshooting and error rows

Error and notice rows are free, and one bad address never stops the run.

{
  "rowType": "error",
  "storeUrl": "https://example.com",
  "isShopify": false,
  "error": "HTTP 403 โ€” the storefront refused the request",
  "scrapedAt": "2026-09-12T12:23:09Z"
}
What you seeWhat it meansWhat to do
isShopify: false with no errorThe address answered, and it is not a Shopify storeNothing โ€” that is the answer, and it was free
An error row with HTTP 403 or 429The storefront is behind a bot wall, and no Shopify host behind it answered for this domainSwitch Proxy to the residential group, or check the shop in a browser
A notice saying the domain does not resolveNo website answers at this addressCheck the spelling
dataLimited: trueThe shop hides part of its catalogue JSONStore-level figures are still right; product rows may be short
phones emptyThe merchant published no tel: link and no number in structured dataUse email or the socials โ€” the Actor does not guess numbers from page text
Zero rows and one explanation rowNo store addresses were givenFill Store URLs, one address per line

Data sent outside scrape.ly

This Actor reads public sources directly and sends no input or results to any service outside scrape.ly.

โ“ FAQ

Is it legal to scrape Shopify stores?

The Actor reads only what a storefront publishes publicly for its own front end โ€” the same data your browser downloads when you open the shop. It collects no personal data beyond the business contact details the merchant chose to publish, and it never signs in.

Do I need a Shopify API key or a partner account?

No. There is no login, no API key and no OAuth. That is why it costs what it costs.

How fast is it?

Everything a shop answers independently is requested at once, so a store costs about three round trips rather than a dozen. Two well-known stores with contacts on took 3-5 seconds on 29 October 2026, five shops run in parallel by default, and adding product rows costs time in proportion to the catalogue.

Can I use it with the scrape.ly API?

Yes โ€” run it from the API, the JavaScript or Python client, or with run-sync-get-dataset-items to get the rows back in the same request. See Integrations above.

Can I use it through an MCP server?

Yes, through the scrape.ly MCP server, with the config shown above.

Does it find every app a store uses?

It finds about 85 apps and pixels that leave a trace in the storefront: e-mail and SMS, reviews, support chat, subscriptions, loyalty, buy now pay later, upsell, search, page builders, shipping and returns, affiliates, analytics and ad pixels. appCategories groups them. An app that runs only in the admin leaves nothing public to detect.

What does one row cost?

$0.005 per store profile and $0.0005 per product row; errors and non-Shopify answers are free.

The internet is full of data.
Start owning yours.

Scrape.ly gives you the infrastructure, the tooling, and the team to extract, process, and operationalize web data at any scale. Setup takes minutes.

No credit card. No setup calls.