Shopify Store Scraper โ€” Emails, Apps & Catalogue avatar

Shopify Store Scraper โ€” Emails, Apps & Catalogue

Pricing

from $3.50 / 1,000 store profiles

Go to Apify Store
Shopify Store Scraper โ€” Emails, Apps & Catalogue

Shopify Store Scraper โ€” Emails, Apps & Catalogue

Profile any Shopify store in one row: shop identity, email, phone and socials, theme and installed apps, catalogue size, price band, and how many products were created in the last 90 days. No login, no API key, no proxy.

Pricing

from $3.50 / 1,000 store profiles

Rating

5.0

(1)

Developer

Matvey

Matvey

Maintained by Community

Actor stats

0

Bookmarked

16

Total users

11

Monthly active users

21 hours ago

Last modified

Share

Tested head-to-head โ€” 26 September 2026

Shopify Store Intel tested against the five most-used Shopify store scrapers: lowest bill, most e-mails found, no charge for a non-Shopify or failed site

The same six addresses went to this Actor and to the five most-used Shopify store Actors on the Apify Store, from an ordinary paying account: five Shopify stores and one site that is not on Shopify.

This ActorThe five others
Charged for this run$0.020$0.030โ€“0.092
Non-Shopify or failed site billedNoYes at two of five
E-mails found250โ€“20

E-mails come from every content page the store publishes (about, press, wholesale, team pages โ€” Shopify's own /pages.json), the contact page and the privacy, terms and refund policies, also for headless storefronts through the store's myshopify host. The store's own addresses are listed first. Each row also carries pageCount and firstPageAt (the date of the store's oldest page โ€” a rough store age).

What is Shopify Store Scraper?

Shopify Store Scraper turns a list of shop addresses into one flat row per store: 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 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, currency, city, province, countryAllbirds ยท 11044168 ยท weareallbirds.myshopify.com ยท USD ยท Beverly Hills ยท California ยท US
Contactsemail, emails, phone, phoneshelp@allbirds.com
Socialsinstagram, facebook, tiktok, youtube, x, linkedin, pinteresthttps://www.instagram.com/allbirds
Storefront techtheme, appsHydra 1.15.0 ยท Klaviyo, Judgeme, Gorgias, Recharge, Okendo
CataloguetotalProducts, catalogueComplete, productCount, variantCount, inStockVariants, outOfStockVariants, vendorCount, productTypes294 ยท false ยท 250 ยท 1 908 ยท 1 640 ยท 268 ยท 3
Price bandpriceMin, priceMedian, priceMax18 ยท 98 ยท 285
ActivitynewestProductAt, oldestProductAt, productsCreatedLast90Days2026-09-02 ยท 2019-04-11 ยท 37
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 phone cell here means the merchant published none โ€” not that the Actor guessed badly.

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.

How much does it cost to scrape Shopify stores?

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 Apify plans. The Apify free plan's $5 of monthly usage is about 1,000 store profiles, and profiling a store takes two or three HTTP requests โ€” there is no browser and no residential proxy in the bill.

Bulk export

This Actor is built for bulk jobs โ€” put hundreds of inputs into one run, or call it from the API on a schedule. There is no fee per run, no fee per page and no proxy charge: you pay for the rows you keep, and error rows are free, so a 50,000-row job costs exactly 50,000 ร— the row price with nothing added on top.

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 cheaply.
  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
storeUrlsThe shops to profile. Bare domain, full URL or *.myshopify.com โ€” all accepted.
modestore (one row per shop), products (shop row plus catalogue), detect (is this Shopify at all).
includeContactsRead e-mail, phone 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.
maxStoresSafety cap on how many shops one run profiles, default 100.
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",
"instagram": "https://www.instagram.com/allbirds",
"theme": "[DNAM Theme July 2026]",
"apps": ["Yotpo", "Google Analytics"],
"totalProducts": 294,
"catalogueComplete": false,
"productCount": 250,
"priceMin": 18,
"priceMedian": 98,
"priceMax": 285,
"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.

E-commerce competitor tracking

Follow a competitor's catalogue over time โ€” price band, how fast they launch, what goes out of stock โ€” by running the same list on a schedule and comparing the exports.

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 Apify's MCP server and drop the row into a prompt without any reshaping.

Integrations

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

from apify_client import ApifyClient
client = ApifyClient("<YOUR_API_TOKEN>")
run = client.actor("lergassy/shopify-store-intel").call(run_input={
"storeUrls": ["gymshark.com", "allbirds.com"], "mode": "store",
})
for store in client.dataset(run["defaultDatasetId"]).iterate_items():
print(store["shopName"], store.get("email"), store.get("productCount"))
import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: '<YOUR_API_TOKEN>' });
const run = await client.actor('lergassy/shopify-store-intel').call({
storeUrls: ['gymshark.com', 'allbirds.com'], mode: 'store',
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
for (const store of items) console.log(store.shopName, store.email, store.productCount);

One HTTP call that runs the Actor and returns the rows in the same request โ€” this is the endpoint n8n, Make and AI agents use:

curl -X POST "https://api.apify.com/v2/acts/lergassy~shopify-store-intel/run-sync-get-dataset-items?token=<YOUR_API_TOKEN>" \
-H "Content-Type: application/json" \
-d '{"storeUrls":["gymshark.com"],"mode":"store"}'

๐Ÿค– For AI agents and LLM apps

Available over the Apify MCP server, so an agent can call it directly:

{
"mcpServers": {
"apify": {
"command": "npx",
"args": ["-y", "@apify/actors-mcp-server", "--actors", "lergassy/shopify-store-intel"],
"env": { "APIFY_TOKEN": "<YOUR_API_TOKEN>" }
}
}
}

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 rate-limited this requestRe-run those addresses, or lower concurrency
dataLimited: trueThe shop hides part of its catalogue JSONStore-level figures are still right; product rows may be short
phone emptyThe merchant published no tel: linkUse 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

โ“ FAQ

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?

Two or three HTTP requests per shop, five shops at a time by default โ€” about a minute for a hundred stores. Adding the catalogue makes it slower in proportion to the number of products.

Can I use it with the Apify 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 Apify MCP server, with the config shown above.

Does it find every app a store uses?

It finds the apps that leave a trace in the storefront โ€” the common review, e-mail, subscription, helpdesk and pixel apps. 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.

Your feedback

Something missing or wrong? Open an issue on the Actor page โ€” issues are read and answered, and fixes ship the same week.

You might also like

ActorWhat it does
Website Contacts APIE-mails, phones and socials from any website, Shopify or not
Email Verifier & Phone ValidatorCheck the addresses this Actor found before you mail them
US New Business LeadsNewly registered US companies, with contact details