Shopify Store Leads - Emails, Socials & Tech Stack avatar

Shopify Store Leads - Emails, Socials & Tech Stack

Pricing

Pay per usage

Go to Apify Store
Shopify Store Leads - Emails, Socials & Tech Stack

Shopify Store Leads - Emails, Socials & Tech Stack

Check a domain list for Shopify, then pull each confirmed store's published emails, phones and social profiles, plus currency, country, theme, technologies and a product sample. Domains that are not Shopify cost nothing. $4.50 per 1,000 confirmed stores, less on paid plans.

Pricing

Pay per usage

Rating

0.0

(0)

Developer

Dami's Studio

Dami's Studio

Maintained by Community

Actor stats

0

Bookmarked

4

Total users

1

Monthly active users

9 days ago

Last modified

Share

Check a list of domains for Shopify and get each store's contact details: it works out which domains actually run on Shopify, then reads the store's public pages for the emails, phone numbers and social profiles it published, plus currency, country, theme, a short technology list and a sample of the catalogue.

It only finds what the store chose to put on its own site. Plenty of Shopify stores publish no email anywhere, and no scraper changes that. You are charged for confirmed stores, so a domain that turns out not to be Shopify does not cost you a row.

InputDomains or store URLs, one per line
OutputOne row per domain checked; confirmed stores carry emails, phones, socials, currency, country, theme, technologies and a product sample
Ceiling500 domains per run, 250 product samples per store
Account neededNone
Price$4.50 per 1,000 confirmed stores on the free plan, down to $4.35 on Business. The free plan's $5 a month covers about 1,100

🔍 What Shopify Store Leads does

Each domain goes through the same two steps.

Step one: is it Shopify? The homepage is checked for the markers a Shopify storefront leaves behind, and the two public endpoints Shopify stores expose are tried. The row tells you what it found, in shopifySignals, and how sure it is, in shopifyConfidence. A domain that fails this step comes back as a row with isShopify: false and is not charged.

Step two: the lead. On a confirmed store it reads the homepage and then the contact and about pages, up to your page limit, and merges everything it finds: emails, phones normalised to international format, social profiles across seven platforms, the currency and country the shop declares, and a sample of products from the public catalogue.

Enter the same site as example.com and www.example.com and it is checked once, not twice.

📋 What data you get from each Shopify store

What you getField
The address you gave, the store's address, and its title and descriptionrequestedUrl, storeUrl, domain, title, description
The Shopify verdict, how sure it is, and the markers behind itisShopify, shopifyConfidence, shopifySignals
Published emails, phones and social profilesemails, phones, socials
What the shop declares about itselfcurrency, country
A sample of the catalogueproductCount, productCountType, products
A theme snippet and the detected technologiestheme, technologies
The pages found and readcontactUrls, aboutUrls, sourcePages, pagesCrawled, crawledAt

▶️ How to scrape Shopify store leads

  1. Open Shopify Store Leads and click Try for free.
  2. Paste your domains into Store domains or URLs, one per line.
  3. Leave the limits alone for the first run. They are what the run is allowed to fetch.
  4. Click Start.
  5. Download the dataset as JSON, CSV or Excel.

Run it with everything empty and you get one labelled sample row, which is not charged.

💰 How much does it cost to scrape Shopify store leads?

$4.50 per 1,000 confirmed Shopify stores on the free plan. Paid plans pay a little less: $4.45 on Starter, $4.40 on Scale and $4.35 on Business. On the free plan, the $5 Apify gives you each month covers about 1,100 confirmed stores.

You pay for stores it confirms, not for domains it checks. A domain that is not Shopify, an address it refused to fetch, a page that was too big and the sample row are all uncharged, so you can throw a mixed list at it without paying for the misses.

📥 What you give it

{
"stores": ["allbirds.com", "https://www.gymshark.com"],
"maxPagesPerStore": 4,
"maxProducts": 20
}
FieldDefaultWhat it is
storesnoneDomains or full URLs, one per line. A bare domain is tried over HTTPS. The form opens with one example store.
startUrlsnoneThe same job in Apify's request-list format. Can be used alongside stores.
defaultCountrynoneTwo-letter country code, used to make sense of local-format phone numbers.
maxPagesPerStore4How many pages to read per store, 1 to 10. Contact and about pages go first.
maxProducts20How many catalogue products to keep, 0 to 250. 0 skips the catalogue entirely.
maxConcurrency5How many stores to work on at once, 1 to 20. A 1 GB run works on at most 10 at a time, a 512 MB run at most 5.
requestTimeoutSecs12How long to wait on one request, 3 to 45 seconds.
maxResponseSizeKb2048The biggest page body to read, in KB. Anything larger is skipped with a row saying so.
proxyConfigurationoffOptional. Only fill this in if you want the run to go out through servers of your own.

📤 What you get back

A real row from a run on 17 September 2026. The products list and socials are trimmed here.

{
"ok": true,
"requestedUrl": "https://www.allbirds.com",
"storeUrl": "https://www.allbirds.com/",
"domain": "allbirds.com",
"title": "Allbirds: Comfortable, Sustainable Shoes & Apparel",
"description": "Allbirds: The world's most comfortable shoes, flats, and clothing made with natural materials ...",
"isShopify": true,
"shopifyConfidence": "high",
"shopifySignals": ["shopify_html_marker", "shopify_asset_marker", "products_json"],
"emails": ["help@allbirds.com"],
"phones": [{"phone": "+1 424 363 8064", "e164": "+14243638064", "country": "US"}],
"socials": [{"platform": "instagram", "url": "https://www.instagram.com/allbirds"}, {"platform": "tiktok", "url": "https://www.tiktok.com/@weareallbirds"}],
"currency": null,
"country": null,
"productCount": 250,
"productCountType": "products_endpoint_sample",
"products": [{"id": 7218356060240, "title": "Men's Strider Explore - Natural Black (Dark Grey Sole)", "handle": "mens-strider-explore", "vendor": "Allbirds", "productType": "Shoes", "available": false, "price": "130.00", "url": "/products/mens-strider-explore"}],
"theme": {"raw": "{\"name\":\"[DNAM Theme July 2026]\",\"id\":130450260048,\"schema_name\":\"allbirds-theme\",\"schema_version\":\"1.231.12\", ...}"},
"technologies": ["Shopify"],
"contactUrls": ["mailto:help@allbirds.com", "https://www.allbirds.com/pages/help"],
"aboutUrls": ["https://optout.aboutads.info/"],
"sourcePages": ["https://www.allbirds.com/", "https://www.allbirds.com/pages/help"],
"pagesCrawled": 2,
"crawledAt": "2026-09-17T06:43:34.355Z"
}
FieldHow to read it
isShopify, shopifyConfidence, shopifySignalsThe verdict, how sure it is, and exactly which markers produced it.
emails, phones, socialsUp to 50 emails, 30 phones and 50 social profiles. Phones carry the international string, the E.164 form and the country.
currency, countryWhat the shop declares about itself. Both are null on plenty of stores.
productCount, productCountTypeHow many products were seen, and where the number came from. It is a sample, not a catalogue total.
productsTitle, handle, vendor, type, availability, first-variant price and path for each sampled product.
themeA raw snippet of the store's theme object, up to 500 characters. The theme name is in there, alongside ids and version numbers.
technologiesFour things are detected: Shopify, Klaviyo, Google Analytics and Meta Pixel. Nothing else.

🧾 Reading the output

RowHow to spot itBilled
A confirmed storeok: true, isShopify: true and no _sample keyyes
A domain that is not Shopifyok: false, isShopify: false and errorCode: "NOT_SHOPIFY"no
The sample row_sample: true, written only when the input was emptyno
A diagnosticok: false and an errorCodeno
CodeWhat it means
NOT_SHOPIFYThe homepage carried none of the Shopify markers and neither public endpoint answered.
UNSAFE_URLThat address points at a private or local network, so nothing was requested.
RESPONSE_TOO_LARGEThe page was bigger than maxResponseSizeKb. Raise it and re-run that domain.
HTTP_ERRORThe store answered with an error page. Re-run that domain later.
RATE_LIMITEDThe store asked for fewer requests. Re-run that domain later.
TIME_LIMITThe run reached its time limit with domains left. One row says how many were checked; the status says the same.

Anything else that goes wrong on one domain writes its own row with the error on it, such as ENOTFOUND for a domain that does not resolve, and the rest of the list carries on.

💡 What people use it for

  • Filtering a bought or scraped domain list down to the ones actually running Shopify.
  • Sizing up a set of stores: currency, country, theme and technologies sit on every confirmed row.
  • Spotting which stores run Klaviyo, Google Analytics or Meta Pixel.
  • Re-checking an existing customer list on a schedule to see who has moved off Shopify, diffing on domain.

From a domain list to a sheet of store profiles, in three runs:

  1. Run this on your list and keep the rows where isShopify is true.
  2. For stores whose emails came back empty, put their domain into Contact Details Scraper, which also reads contact forms.
  3. Run the confirmed stores' storeUrl through Shopify Products Scraper to see their whole range.

🚧 What it does not do

  • It finds only what the store published. Nothing behind a login, no contact forms, no guessing at addresses. A store with no email on its site returns none.
  • currency can be wrong. When the shop does not declare one, the value falls back to a three-letter code taken off the page, which is occasionally a language rather than a currency. Check it against country before you rely on it.
  • A store having a bad moment gets an error row, not a verdict. If its homepage answers with an error, the row says HTTP_ERROR or RATE_LIMITED and costs nothing. Re-run that domain later.
  • A run close to its time limit stops early. It stops starting new domains, keeps what it delivered, and its status and a TIME_LIMIT row say how many were checked. The rest cost nothing; start a new run for them. A run stopped before any store came back ends as failed.
  • The product list is a sample. It is the first page of the public catalogue, 250 products at most, and productCount counts that page rather than the whole store.
  • Four technologies, not a full stack report. Shopify, Klaviyo, Google Analytics, Meta Pixel.
  • 500 domains per run. Anything past that in the list is dropped without a row. Split a bigger list across runs.
  • Contact details are capped per store: 50 emails, 30 phones, 50 social profiles.
  • It is not an official Shopify tool. Dami's Studio is independent and is not affiliated with or endorsed by Shopify, or by any other company named on this page.

🧭 Which Shopify scraper do you need?

If you wantUse
Which domains run Shopify, with each store's contact detailsThis one
Every product in a Shopify store's catalogueShopify Products Scraper
Emails, phones, addresses and socials from a list of websites, Shopify or notContact Details Scraper
DNS, registration, certificates and what a site runsDomain Inspector
Restock and price-drop alerts on product pages you nameProduct Price & Stock Monitor

❓ Questions people ask

Do I pay for domains that turn out not to be Shopify?

No. The charge only fires on a confirmed store, which is the whole point of putting a mixed list in.

How accurate is the Shopify verdict?

Read shopifySignals. Several independent markers plus a public endpoint answering is as strong as it gets, and shopifyConfidence sums that up as high, medium or low.

Why are some Shopify stores missing an email?

Because the store never published one. Check contactUrls on the row to see which pages were found and read.

Does it fill in contact forms?

No. It reads published addresses and fills nothing in.

Can I call it from code or connect it to an AI assistant?

Yes. The API tab has ready-made code for Python, JavaScript and the command line. For Claude, ChatGPT or another MCP client, connect https://mcp.apify.com/?tools=fetch-actor-details,dami_studio/shopify-store-leads. Either way the run happens on your Apify account at the same price.

These are the stores' own public pages, read the way a signed-out visitor sees them: no account, nothing private. A business email or phone can still be personal data under GDPR, Canada's PIPEDA and similar laws, so keep only what you have a reason to keep. Anti-spam laws, such as CASL in Canada, the EU's e-privacy rules and CAN-SPAM in the US, decide how you may contact the stores on your list, and some of them ask for consent before a marketing email. Each store's own terms still apply to what you do with it. Apify's write-up on the legality of web scraping is a good starting point, and we are not lawyers.

🆘 If something breaks

Open the Issues tab on the actor page. Send the domain and the run ID; the errorCode on the row usually names the problem on its own.