Request a tool
All toolsAutomationsGuidesMCP serverRequest a toolPlatformsCategories
Shopify Store Leads icon

Shopify Store Leads

Check domains for Shopify, then get public emails, phones, socials, currency, theme and tech. $4.50 per 1,000 confirmed stores.

187 runs on Apify $0.0045 per Shopify store lead ($4.5 / 1,000)
Run this in the cloudRun on Apify →

B2B Leads & Contact Data

How it works

  1. 1
    Open it on Apify

    Hit Run on Apify — it opens the tool in the cloud, no install.

  2. 2
    Set the inputs

    Adjust stores, defaultCountry, startUrls (sensible defaults are pre-filled).

  3. 3
    Click Run

    The tool runs on Apify’s cloud and collects the data for you.

  4. 4
    Export the results

    Download as JSON, CSV or Excel, or pipe straight into your app, Google Sheets, or an AI agent.

Pricing

$0.0045 per Shopify store lead = $4.5 per 1,000

You are charged forWhenPrice
Shopify store leadOne confirmed Shopify store enriched with public lead and catalog data.$0.0045

Pay-per-event pricing: you are billed per result, not per subscription. Billing is handled by Apify on your own account. These are the live Apify store prices, in effect since 2026-07-25, and they are what you are actually charged.

Inputs

FieldWhat it doesType
storesShopify store domains or full URLs, one per line. Values without a scheme use HTTPS.array
defaultCountryOptional ISO 3166-1 alpha-2 country code used to normalize local phone numbers.string
startUrlsAlternative Apify request-list input. Can be combined with Store domains or URLs.array
maxPagesPerStoreMaximum HTML page attempts per store. Contact and about pages are prioritized.integer
maxProductsMaximum products to retain from the public Shopify catalog endpoint. Set to 0 to skip catalog lookup.integer
maxConcurrencyNumber of stores worked on at once. A 1 GB run works on at most 10 at a time and a 512 MB run at most 5, whatever this says.integer
requestTimeoutSecsMaximum duration of each HTTP request.integer
maxResponseSizeKbMaximum HTML or JSON response body size per request.integer

What you get

A structured dataset — each result includes fields like:

domaintitlecountrycurrencyproductCountemailsphonessocialstechnologiesshopifyConfidencestoreUrlok_samplerequestedUrldescriptionisShopifyshopifySignalsproductCountTypeproductsthemecontactUrlsaboutUrlssourcePagespagesCrawlederrorCodeerror

Export every run as JSON, CSV or Excel, or send it to your app, a database, Google Sheets, or an AI agent.

1 ready-to-run use cases

Shopify Store Product Catalogue Export

Export a Shopify store's products: title, price, variants, images and handle. Paste the store URL and run.

Related tools in B2B Leads & Contact Data

Other ready-to-run tools in the same category — all pay-per-use on the Apify cloud.

Thomasnet Suppliers Scraper iconB2B Leads & Contact Data

Thomasnet Suppliers Scraper

Scrape Thomasnet suppliers by product and US location. Get name, phone, website, address, year founded, employees, sales, ISO certs. $0.85 per 1,000.

Ready to run — no setup

LinkedIn Profiles Scraper iconB2B Leads & Contact Data

LinkedIn Profiles Scraper

Get public LinkedIn profile data from URLs you supply. You get name, headline, description, image link and public identifier. $0.90 per 1,000 profiles.

Ready to run — no setup

LinkedIn Companies Scraper iconB2B Leads & Contact Data

LinkedIn Companies Scraper

Get public LinkedIn company data from company URLs. You get name, description, followers, employee count, HQ, website and logo. $0.90 per 1,000, flat rate.

Ready to run — no setup

YouTube Channel Email Scraper iconYouTube & Creator Tools

YouTube Channel Email Scraper

Find the business emails creators publish in their YouTube channel description, plus their linked site's contact pages. $1.50 per 1,000 channels.

Ready to run — no setup

Domain Inspector iconDeveloper & Research Tools

Domain Inspector

Check many domains at once. Get DNS, WHOIS registrar and expiry, TLS dates, redirects, security headers, robots and tech. $1.50 per 1,000.

Ready to run — no setup

Google Maps Scraper iconMaps & Local Lead Generation

Google Maps Scraper

Scrape Google Maps places and reviews. Business name, category, address, rating, GPS coordinates and place ID. $0.27 per 1,000 rows.

28 use cases

See all B2B Leads & Contact Data →

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. 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.
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": ["[email protected]"],
  "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:[email protected]", "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.
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.

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 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 says how many were checked. The rest cost nothing; start a new run for them.

  • 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.