Primary domain
primaryDomain
Optional
The domain the shop record names as its primary storefront.
Shopify Store Scraper - Store Leads, Emails, Apps & Theme
Pricing
from $3.50 / 1,000 store profiles
Shopify store scraper for ecommerce leads: find Shopify stores by keyword or paste store URLs. One row per shop with email, phone, socials, installed apps, theme, product count and price band. Filter by country, apps and email; skipped stores are free. No login or API key.
Row type
rowType
Optional
What the row is: store, product, notice or error.
Store URL
storeUrl
Optional
The shop address the row belongs to.
Is Shopify
isShopify
Optional
Whether the address answers as a Shopify store.
Shop id
shopId
Optional
Shopify's own numeric id for the shop.
Shop name
shopName
Optional
Shop name as the merchant set it.
myshopify domain
myshopifyDomain
Optional
The store's permanent .myshopify.com address.
Currency
currency
Optional
Currency the storefront prices in.
City
city
Optional
Merchant city from the shop record.
Province or state
province
Optional
Merchant region from the shop record.
Country
country
Optional
Merchant country code.
Optional
First contact email found on the store.
All emails
emails
Optional
Every contact email found, deduplicated.
All phones
phones
Optional
Every phone number the merchant published as a number — a tel: link or the telephone property of the store's structured data. Numbers are never scraped out of loose page text, because digit runs there turn out to be order ids and map coordinates. Measured over 10 stores on 29 Oct 2026 this column filled for 4 of them: large brands route support through a form and publish no number at all.
Optional
Instagram profile linked from the store.
Optional
Facebook page linked from the store.
TikTok
tiktok
Optional
TikTok profile linked from the store.
YouTube
youtube
Optional
YouTube channel linked from the store.
X
x
Optional
X (Twitter) profile linked from the store.
Optional
LinkedIn page linked from the store. Most consumer Shopify stores link Instagram, TikTok and Facebook but not LinkedIn, so this column is empty far more often than the others — it fills mainly for B2B and wholesale brands.
Optional
Pinterest profile linked from the store.
Theme label
theme
Optional
The merchant's own label for the live theme (often a release name).
Apps detected
apps
Optional
Marketing and review apps found in the storefront code.
Products
productCount
Optional
How many products were read from the catalogue (the sample set by 'Products per store'); see totalProducts for the whole catalogue.
Products in the catalogue
totalProducts
Optional
Size of the whole catalogue: the products read when the sample covered it, otherwise the count of products in the shop's product sitemap. Null when neither is available.
Whole catalogue read
catalogueComplete
Optional
True when the product sample covered the whole catalogue, so the catalogue figures describe every product.
Variants
variantCount
Optional
Total variants across those products.
Variants in stock
inStockVariants
Optional
Variants currently available to buy.
Variants out of stock
outOfStockVariants
Optional
Variants currently unavailable.
Lowest price
priceMin
Optional
Cheapest variant price in the sample.
Highest price
priceMax
Optional
Most expensive variant price in the sample.
Median price
priceMedian
Optional
Middle variant price — the store's real price band.
Vendors
vendorCount
Optional
How many distinct vendors the catalogue lists.
Product types
productTypes
Optional
Product categories the store uses.
Newest product
newestProductAt
Optional
When the most recently created product was added.
Oldest product
oldestProductAt
Optional
When the oldest product in the sample went live.
Product id
productId
Optional
Shopify product id (product rows).
Product title
title
Optional
Product name (product rows).
Handle
handle
Optional
URL handle of the product.
Product URL
productUrl
Optional
Link to the product page.
Vendor
vendor
Optional
Vendor as the merchant set it.
Product type
productType
Optional
Product category.
Published at
publishedAt
Optional
When the product went live.
Updated at
updatedAt
Optional
When the product was last changed.
Available
available
Optional
Whether any variant can be bought right now.
Images
imageCount
Optional
How many images the product has.
Image
image
Optional
First product image.
Notice
notice
Optional
A plain-language note when an address returns no data. Never charged and never an error.
Error
error
Optional
What went wrong (error rows, never charged).
Scraped at
scrapedAt
Optional
When the row was collected.
New in 90 days
productsCreatedLast90Days
Optional
Products created in the last 90 days — whether the store is actively worked on. Counted on the creation date, because Shopify bumps the publish date on any re-publish.
Created at
createdAt
Optional
When the product was first created in the store.
Data limited
dataLimited
Optional
True when the store is Shopify but has switched off its public shop record and catalogue, so only the storefront signals could be read. These rows are never charged.
pageCount
Optional
Content pages the store publishes (about, press, FAQ…), from /pages.json
firstPageAt
Optional
Creation date of the store's oldest content page — a rough store age
Primary domain
primaryDomain
Optional
The domain the shop record names as its primary storefront.
Headless storefront
headless
Optional
True when the storefront is not a Shopify Liquid theme (Hydrogen, Next.js, Astro).
Shop description
description
Optional
The shop description the merchant set in Shopify.
Locale
locale
Optional
Storefront language the page was served in.
Languages
languages
Optional
Languages the storefront offers (from its hreflang links).
Ships to
shipsToCountries
Optional
Country codes the shop ships to.
Ships to (count)
shipsToCountryCount
Optional
How many countries the shop ships to.
Collections
collectionCount
Optional
Published collections in the shop.
Card brands
cardBrands
Optional
Card brands accepted through Shop Pay.
Shop Pay Installments
shopPayInstallments
Optional
Whether the shop offers Shop Pay Installments.
Theme
themeName
Optional
The theme the store is built on (Dawn, Prestige…), as opposed to the merchant's own label for it.
Theme version
themeVersion
Optional
Version of that theme.
Apps detected
appCount
Optional
How many apps and pixels were detected live on the storefront.
App categories
appCategories
Optional
Categories covered by the detected apps: Email & SMS, Reviews, Support chat, Subscriptions, Loyalty, Buy now pay later, Upsell, Search, Ad pixels…
Money format
moneyFormat
Optional
How the shop prints prices, straight from its own settings — useful for telling a US store from a UK one when the currency code is the same.
Hreflang locales
hreflangs
Optional
Every hreflang value published on the home page, lower-cased. This is what the store itself claims about the languages and regions it serves.
Hreflang count
hreflangsCount
Optional
How many hreflang values the home page publishes. 0 means a single-market storefront, 80+ means an international setup.
Has country selector
hasCountrySelector
Optional
Whether the home page renders a country or market picker (a country_code field, a country selector, or a /localization form).
Has currency switcher
hasCurrencySwitcher
Optional
Whether the home page renders a currency picker (a currency_code field or a currency selector).
Page title
pageTitle
Optional
The of the home page, with HTML entities decoded.
Meta description
metaDescription
Optional
The meta description of the home page — the line Google shows under the store name.
Open Graph title
ogTitle
Optional
The og:title of the home page: the headline the store uses when it is shared on social media.
Open Graph description
ogDescription
Optional
The og:description of the home page.
Open Graph image
ogImage
Optional
The og:image of the home page — in practice the store logo or hero image.
Open Graph site name
ogSiteName
Optional
The og:site_name of the home page: the brand name as the merchant writes it.
Has structured data
hasStructuredData
Optional
Whether the home page carries a JSON-LD block (application/ld+json) for search engines.
Has blog
hasBlog
Optional
Whether the home page links to a Shopify blog (/blogs/...).
Has e-mail capture
hasEmailCapture
Optional
Whether the home page renders a newsletter or e-mail capture form.
Products in sitemap
sitemapProducts
Optional
Product URLs in the store sitemap. Counted exactly when the sitemap has one or two product files; for a larger catalogue the full files are taken to hold as many URLs as the first one and only the last file is read, which came within 0.03% of the shop's own count on gymshark.com (29 Oct 2026). Null when the store publishes no sitemap.
Collections in sitemap
sitemapCollections
Optional
Collection URLs in the store sitemap, counted the same way as products.
Pages in sitemap
sitemapPages
Optional
Content page URLs in the store sitemap.
Blogs in sitemap
sitemapBlogs
Optional
Blog URLs in the store sitemap — how many blogs the store runs, not how many posts.
Articles in sitemap
sitemapArticles
Optional
Blog post URLs in the store sitemap. Null when the store publishes no article sitemap.
Payment methods
paymentMethods
Optional
Everything the store takes money with: the card brands from the shop record, the wallets whose button or SDK is on the page, and the pay-later providers found among the apps. Nothing here is guessed.
Express checkout
expressCheckout
Optional
The one-tap wallets available: Shop Pay, Apple Pay, Google Pay, PayPal, Amazon Pay.
Buy now, pay later
bnplOffered
Optional
Whether the store offers pay-later checkout — Shop Pay Installments per the shop record, or a detected Klarna / Afterpay / Affirm / Sezzle / Zip app.
E-mails found
emailCount
Optional
How many distinct e-mail addresses the run found for the store.
App categories
appCategoryCount
Optional
How many different categories the detected apps fall into.
Tracking ids
trackingIds
Optional
The advertising and analytics ids printed on the home page, grouped by provider: ga4, gtm, googleAds, metaPixel, tiktokPixel. Only providers actually found appear as keys.
Runs Meta Pixel
runsMetaPixel
Optional
Whether the Meta (Facebook) Pixel is live on the home page.
Runs TikTok Pixel
runsTiktokPixel
Optional
Whether the TikTok Pixel is live on the home page.
Runs Google Ads
runsGoogleAds
Optional
Whether a Google Ads conversion tag is live on the home page.
Variants in stock, %
variantInStockPct
Optional
Share of the sampled variants that are in stock.
Variants per product
avgVariantsPerProduct
Optional
Average number of variants per sampled product.
Average price
priceAvg
Optional
Mean price across the sampled variants, in the shop currency.
Price distribution
priceDistribution
Optional
How the sampled variant prices fall into four bands, in the shop currency: 0-25, 25-50, 50-100 and 100+.
Average discount, %
avgDiscountPct
Optional
Average markdown across the discounted variants, from compare-at price against price. 0 when nothing in the sample is discounted.
Products on sale, %
productsOnSalePct
Optional
Share of the sampled products that have at least one discounted variant.
Images per product
avgImagesPerProduct
Optional
Average number of images per sampled product.
Duplicate descriptions, %
duplicateDescriptionPct
Optional
Share of the sampled products whose description text is identical to at least one other product. High on stores that sell one item in many colours. Products with no description are left out of the calculation.
Top vendors
topVendors
Optional
The ten vendors with the most products in the sample, most first.
Product types
productTypeCount
Optional
How many distinct product types the sample contains.
Top product types
topProductTypes
Optional
The ten product types with the most products in the sample, most first.
Unique tags
uniqueTagsCount
Optional
How many distinct tags the sampled products carry.
Top tags
topTags
Optional
The ten most used tags in the sample, most first.
New products, 7 days
newProducts7Days
Optional
Sampled products created in the last 7 days.
New products, 30 days
newProducts30Days
Optional
Sampled products created in the last 30 days.
Products updated, 30 days
productsUpdatedLast30Days
Optional
Sampled products edited in the last 30 days — how actively the catalogue is maintained.
Catalogue age, days
catalogueAgeDays
Optional
Days since the oldest product in the sample was created.
Days since newest product
daysSinceNewestProduct
Optional
Days since the newest product in the sample was created. A large number on a large catalogue means a storefront nobody has touched.
Store size
storeSizeBucket
Optional
A size band from the product count alone: micro (under 25), small (under 200), medium (under 1 000), large (under 5 000), enterprise (5 000 and up). Computed from totalProducts and nothing else, so it can be checked against that column.
Compare-at price
compareAtPrice
Optional
Product rows only: the highest compare-at ("was") price across the variants.
On sale
onSale
Optional
Product rows only: whether any variant is priced below its compare-at price.
Estimates disclaimer
estimatesNote
Optional
One sentence repeated on every store row, so the caveat travels with the data into whatever sheet or CRM it ends up in: every "estimated*" field and every *Score field is modelled from public store signals, not sales data.
Estimates confidence
estimatesConfidence
Optional
How complete the inputs behind the modelled fields were on this store: high, medium or low. It measures whether the model was fed, not whether it is right. Drops to medium when one input is missing or a known detection gap applies, and to low when two or more are, or when the catalogue could not be read at all.
Why confidence is not high
estimatesConfidenceReasons
Optional
The specific missing inputs that lowered the confidence, in plain English — for example "only 8 products were readable, too few for a stable price median". Empty when confidence is high.
Known detection gaps on this store
estimatesBlindSpots
Optional
Where this particular row's inputs are weaker than they look, named one by one. A store whose ad pixel loads only after a cookie banner scores zero on paid traffic and is not the same as a store that buys no traffic; a headless storefront hides its apps. These lines say which of those applied here, so a low score can be read correctly instead of taken at face value.
Estimated average order value (USD)
estimatedAvgOrderValueUsd
Optional
MODELLED, NOT MEASURED. Median variant price converted to USD and multiplied by 1.45 assumed items per basket — the low end of the Shopify-wide average, chosen low because an overstated basket inflates the revenue estimate too. We cannot see a single real order. The median is used rather than the mean because one $900 bundle or one $0.80 gift-wrap SKU drags a mean badly.
Estimated monthly orders
estimatedMonthlyOrders
Optional
MODELLED, NOT MEASURED. Simply the modelled monthly revenue divided by the modelled order value, carried here because it is the number most outreach templates want. It inherits the error of both, which is large.
Estimated monthly revenue (USD)
estimatedMonthlyRevenueUsd
Optional
MODELLED, NOT MEASURED. A midpoint modelled from how much operation the storefront shows: catalogue and collection size, published content, ad pixels, paid apps, international setup, role e-mail addresses and catalogue age. It is NOT sales data — Shopify publishes none and no scraper can read any. Accuracy, measured against seven brands whose revenue is public: five within 3x, worst case 10x. It reads old content-rich boutiques too high, and reads hero-product brands and large brands that hide their app stack too low. Use estimatedMonthlyRevenueRangeUsd, not this number, and read estimatedRevenueBreakdown before relying on either. Null when no prices could be read.
Estimated monthly revenue range (USD)
estimatedMonthlyRevenueRangeUsd
Optional
MODELLED, NOT MEASURED. Low and high bound as [low, high]. The width is set by the confidence: 3x either way at high confidence, 4.5x at medium, 7x at low. This is the honest form of the revenue answer and the midpoint is the convenience; a single number reads as knowledge, a range reads as what it is.
How the revenue estimate was built
estimatedRevenueBreakdown
Optional
Every input and every adjustment, so the number can be checked instead of believed: scaleScore (0-100) and scaleParts (the eight blocks it is made of and what each scored), the currency and the static FX rate with its date, the assumed items per order, and any multiplier that was applied — dropshipperDamper when the catalogue looks like a supplier feed, hiddenStackMultiplier when a large catalogue shows no detectable apps or pixels, rangeFactor, and a saturation note on stores where every visible signal is already at its ceiling.
Revenue estimate confidence
estimatedRevenueConfidence
Optional
Same value as estimatesConfidence, repeated next to the revenue figure so the caveat survives a column selection that keeps the money and drops everything else.
Lead score (0-100)
leadScore
Optional
MODELLED, NOT MEASURED. How attractive the store is to approach as a B2B customer — agency, app, 3PL, freight. Deliberately not a size score: a huge brand with no published address and a dead catalogue is a worse lead than a mid-size store that answers e-mail and shipped products last week. Built from reachability (24), signs the store is alive (22), evidence it already pays for software and traffic (24), size (18) and cross-border operation (12).
Lead score parts
leadScoreBreakdown
Optional
What each of the five blocks scored, so a buyer can re-weight them for their own offer — someone selling international shipping cares about crossBorder and nothing else.
Lead score bucket
leadScoreBucket
Optional
cold (0-24), warm (25-49), hot (50-74) or priority (75-100).
Opportunity score (0-100)
opportunityScore
Optional
MODELLED, NOT MEASURED. What appears to be missing from the store that somebody could sell it: no e-mail capture, no reviews app, no e-mail/SMS platform, no blog, no structured data, thin product imagery, duplicated product copy, no currency switcher on a store that sells abroad, no pay-later, no express checkout. READ THIS AS A DETECTION GAP, NOT A FACT ABOUT THE MERCHANT: everything here is "not found on the home page". A reviews widget that renders only on product pages, or an e-mail platform that loads after cookie consent, reads as missing. Check the row's appCategories and estimatesBlindSpots before pitching anybody on a gap.
Opportunity score parts
opportunityBreakdown
Optional
Only the gaps that actually fired, each with its points — so the field reads as a to-do list rather than a verdict, and a gap you disagree with can be subtracted.
Opportunity bucket
opportunityBucket
Optional
low (0-24), medium (25-49), high (50-74) or very high (75-100).
Dropshipper risk score (0-100)
dropshipperRiskScore
Optional
MODELLED, NOT MEASURED. How much the store looks like a reseller of somebody else's catalogue rather than a brand: thousands of products under one vendor name that is not the store's own, supplier copy repeated across the catalogue, one or two stock photographs per product, an unmodified free theme, no published contact details, a permanent sitewide discount, or a whole catalogue created in the last few weeks. No single signal is proof and the score is the pile-up, not any one item. NULL — with bucket "unknown" — when the store will not serve its catalogue, because almost every signal here is read from the catalogue and scoring it "0, low risk" would be a guess in the store's favour.
Dropshipper risk bucket
dropshipperRiskBucket
Optional
low (0-19), medium (20-44), high (45-69), very high (70-100), or unknown when the catalogue could not be read. The thresholds sit higher than the other scores on purpose: this field accuses somebody of something.
Dropshipper signals that fired
dropshipperSignals
Optional
Each signal written out with the number that triggered it — "98.8% of products share a description", "all 5223 products were created within the last 21 days" — so every point of the score can be traced to a column on the same row and argued with.
Store health score (0-100)
storeHealthScore
Optional
MODELLED, NOT MEASURED. Whether the store is being run well right now, independent of size: stock depth (22), how recently anything was added (20), catalogue craft — product photographs and original copy (20), trust surface — published contacts, socials, structured data (18), checkout wallets and pay-later (15) and pricing discipline (5). This is the most measured of the scores here: every input is a count or a percentage already on the row.
Store health parts
storeHealthBreakdown
Optional
What each of the six blocks scored.
Store health tier
storeHealthTier
Optional
poor (0-24), fair (25-49), good (50-74) or strong (75-100).
Came from
discoveredVia
Optional
"search" for a store found by the keyword search, "input" for one from your list.
Search term
searchTerm
Optional
The keyword that found the store.
Matching products
matchedProducts
Optional
How many of the store's products matched the search.
Rating of matching products
catalogRating
Optional
Review-weighted average rating of the store's products that matched the search, from Shopify's catalog.
Reviews of matching products
catalogReviewCount
Optional
Number of reviews behind that rating.
Sample product
sampleProductUrl
Optional
One matching product page.
Social profiles found
socialCount
Optional
How many of the seven social networks the store links to.