Shopify Store Leads - Emails, Socials & Tech Stack avatar

Shopify Store Leads - Emails, Socials & Tech Stack

Pricing

$4.50 / 1,000 shopify store leads

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

Shopify Store Leads - Emails, Socials & Tech Stack

Check any domain list for Shopify, then pull the store's contact details. Confirmed stores return public emails, phones and social profiles. You also get currency, country, theme, technologies and product samples. Domains that are not Shopify cost you nothing. $4.50 per 1,000 confirmed stores.

Pricing

$4.50 / 1,000 shopify store leads

Rating

0.0

(0)

Developer

Dami's Studio

Dami's Studio

Maintained by Community

Actor stats

0

Bookmarked

3

Total users

3

Monthly active users

2 days ago

Last modified

Share

Shopify Store Leads: check a domain list for Shopify, then pull the contact details

Feed it a list of domains. It works out which ones actually run on Shopify, then reads the store's public pages and returns the emails, phone numbers and social profiles it published, plus currency, country, theme, a short technology list and a sample of the catalog.

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
Ceiling500 domains per run, 250 product samples per store
Account neededNone from you
Price$4.50 per 1,000 confirmed stores, flat on every plan

🛍️ 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 every Shopify store exposes 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 catalog.

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

📥 What you give it

{
"stores": ["allbirds.com", "https://www.gymshark.com"],
"maxPagesPerStore": 4,
"maxProducts": 20
}
FieldDefaultWhat it is
storesbox holds one example storeDomains or full URLs, one per line. A bare domain is tried over HTTPS.
startUrlsemptyThe same job in Apify's request-list format. Can be used alongside stores.
defaultCountryemptyTwo-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 catalog products to keep, 0 to 250. 0 skips the catalog entirely.
maxConcurrency5How many stores to work on at once, 1 to 20.
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.
proxyConfigurationleave it aloneOptional. Only fill this in if you want the run to go out through your own servers.

Run it with everything empty and you get one labelled sample row.

📤 What you get back

A real row from a recent run. 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"
}
FieldWhat it is
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 catalog 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.
contactUrls, aboutUrls, sourcePages, pagesCrawledWhat it found to read, and what it actually read.

🧾 Reading the output

Four kinds of row can land in your dataset.

RowHow to spot it
A confirmed storeok is true and isShopify is true
A domain that is not Shopifyok is false with errorCode: NOT_SHOPIFY
The sample rowWritten only when the input was empty
A diagnosticok is false and it carries an errorCode

Only confirmed stores are charged. Everything else in that table is free of charge.

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.

Anything else that goes wrong on one domain writes its own row with the error on it, and the rest of the list carries on.

▶️ How to run it

  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, or read it from the Apify API.

💰 How much does it cost?

$4.50 per 1,000 confirmed Shopify stores. Flat on every Apify plan, no volume tiers.

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 people use it for

  • Filtering a bought or scraped domain list down to the ones actually running Shopify.
  • Building an outreach list for an app, an agency or a supplier, with emails and socials on the row.
  • Sizing prospects roughly by productCount and the price range in the product sample.
  • Spotting stores already running Klaviyo, Google Analytics or Meta Pixel before pitching them.
  • Re-checking an existing customer list to see who has moved off Shopify.

🚧 What it does not do

  • It finds only what the store published. No login walls, 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 can be filed as not Shopify. If its homepage answers with an error page, the markers are missing and the verdict follows. Re-run that domain on its own.
  • theme is a raw snippet, not a tidy name. The name is inside it, along with ids and version numbers.
  • The product list is a sample. It is the first page of the public catalog, 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.

🧭 Which Shopify scraper do you need?

If you wantUse
To confirm Shopify and get the store's contact detailsThis one
Every product in a store's catalog, with variants and pricesShopify Products Scraper
Emails and phones from any website, Shopify or notContact Details Scraper
Registration, DNS and hosting facts about a domainDomain Inspector

❓ 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 rows missing an email? Because the store never published one. Check contactUrls on the row to see which pages were found and read.

Can it get past a contact form? No. It reads published addresses, it does not fill anything in.

Can I run it on a schedule? Yes. domain is stable, so re-running a list and diffing tells you who changed platform or published new contact details.

Is this legal? These are public pages on public websites. Apify's write-up on scraping and the law is a good place to start, 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.