Shopify Merchant Scraper: Verified Contacts & Lead Rating
Pricing
from $4.99 / 1,000 results
Shopify Merchant Scraper: Verified Contacts & Lead Rating
Shopify Merchant Scraper finds Shopify store owners and merchants, extracting verified business contacts, emails, store details, social profiles, and lead ratings. Build targeted ecommerce lead lists for sales, outreach, prospecting, and market research.
Pricing
from $4.99 / 1,000 results
Rating
0.0
(0)
Developer
API Empire
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
4 days ago
Last modified
Categories
Share
Shopify Merchant Scraper — Contacts, Identity & Lead Scores
Shopify merchant scraper that turns a list of storefront URLs into a qualified B2B lead sheet: a verified merchant-identity block, the published email/phone and 7-platform social links each store makes public, an honest storefront-reachability status, and a non-AI lead-quality score. Every field is read live from the storefront itself — nothing is looked up in a stale contact database. Output is typed, normalized JSON with stable field names, so it drops straight into a CRM, a spreadsheet, or an LLM context window with no HTML and no parsing step. Paste in your prospect list and this actor tells you who's real, how to reach them, and which ones to call first.
What is Shopify Merchant Scraper: Verified Contacts & Lead Rating?
It's an Apify actor that qualifies Shopify storefronts as B2B leads. You give it a list of store URLs; for each one it returns a verified merchant-identity block (real merchant name, myshopify.com domain, city/region, verified published product and collection counts), the contact details and social profiles the store publishes on its own pages, and — optionally — a deterministic 0–100 lead-quality score. No Shopify account, Admin API access, or login is required: every field comes from a storefront's public, unauthenticated pages.
- Verify merchant identity (name,
myshopifydomain, city/region, catalogue size) - Extract published email and phone contact details
- Detect 7 social platforms per store (Instagram, Facebook, X/Twitter, TikTok, YouTube, Pinterest, LinkedIn)
- Score and rank leads with a transparent, non-AI 0–100 quality score
- Export as JSON, CSV, Excel or the other formats Apify datasets support
What data does Shopify Merchant Scraper: Verified Contacts & Lead Rating collect?
Every run returns one row per storefront, built from four distinct data blocks:
| Data Type | Key Fields | JSON Field Names |
|---|---|---|
| Merchant identity | Verified name, myshopify domain, city/region, catalogue size, payment options | merchantName, myshopifyDomain, merchantCity, merchantProvince, publishedProductsCount, publishedCollectionsCount, acceptedCardBrands, offersShopPayInstallments |
| Contact & social data | Published email/phone, 7 social platform links, contactability flags | email, phone, facebook, instagram, twitter, tiktok, youtube, pinterest, linkedin, hasEmail, hasPhone, socialPlatformCount |
| Lead quality score | Deterministic score, quality tier | leadQualityScore, leadQualityLabel, leadQuality |
| Storefront status & tech stack | Reachability, theme, detected apps | storefrontStatus, themeName, themeVersion, installedApps, installedAppsCount |
Need more Shopify data?
If you need the products themselves rather than the merchants who sell them, pair this actor with Shopify Products Scraper By Collection & Keyword for per-listing catalogue data, Shopify Store Scraper: Product Catalogue Data for full catalogue exports, or Shopify Scraper: Stock, Images & Product Updates for stock and image-level monitoring — all published under the API-Empire account.
How does Shopify Merchant Scraper: Verified Contacts & Lead Rating differ from the official Shopify API?
Shopify's Storefront API and Admin API are both scoped to a single store: a call authenticates against one shop using an access token that shop itself issues. There is no Shopify endpoint that lets you query data about a store you don't own or administer, and no bulk mechanism for pulling the same fields across many unrelated merchants at once (confirmed against Shopify's own Storefront API documentation, checked 2026-08-15). This actor is built for the opposite use case: qualifying other people's storefronts as leads, using only what each store already publishes on its public pages.
| Feature | Shopify Storefront/Admin API | This actor |
|---|---|---|
| Cross-merchant querying | Not supported — one token per store, issued by that store | Any number of unrelated stores in one run |
| Authorization needed | Store-issued access token required | None — public pages only |
| Lead-quality scoring | Not provided | Built in, deterministic, optional |
| Social-profile detection | Not provided | 7 platforms per store |
| Output shape | Raw GraphQL/REST responses per store | One normalized JSON row per store |
| Setup | Per-store token issuance | Paste URLs and run |
If you already operate the store in question and need its own Admin/Storefront data (inventory, orders, checkout), the official API is the right tool. If you need to qualify a list of someone else's storefronts as sales or partnership leads, that's what this actor is for.
Why do developers and teams scrape Shopify merchants?
For sales and agency outbound teams
Feed in a scraped or purchased list of Shopify domains and get back a ranked, contactable shortlist. Filter with minLeadQuality: "hot" to work the best-fit accounts first, or requireContactInfo: true so every row in the dataset has a usable email or phone before a rep ever opens it.
For AI engineers and agent builders
Because output is typed JSON with stable field names (leadQualityScore, hasEmail, socialPlatformCount), a lead-qualification agent can call this actor as a tool, read the score straight into its decision logic, and route only hot leads to a CRM-write step — no HTML parsing between the scrape and the model.
For market and partnership researchers
publishedProductsCount, shipsToCountries, acceptedCardBrands and installedApps give a verified snapshot of a merchant's real scale and tech stack — useful for vetting a wholesale partner or benchmarking a competitor set before an introduction, without guessing from marketing copy.
For developers building data products
The actor's PPE-per-row pricing and stable output schema make it a clean building block for a lead-enrichment pipeline or a CRM-sync job: schedule it, pipe the dataset to a webhook, and let downstream code key off leadQualityLabel without re-parsing anything.
How to scrape Shopify merchant leads (step by step)
- Open Shopify Merchant Scraper: Verified Contacts & Lead Rating on its Apify Store listing and click Try for free (an Apify account is required to run any actor).
- Paste your storefront URLs into
prospectUrls— bulk paste, file upload, or piped from another actor. No parameter is strictly required; leaving it empty and providingstartUrlsinstead also works. - Set
minLeadQualityandrequireContactInfoif you only want warm/hot or contactable rows kept in the dataset, and toggleincludeVerifiedIdentity/includeLeadRatingif you want to skip either block. - Click Start and watch rows arrive in the Output tab in real time — each store's row is pushed the moment it's scraped.
- Download results as JSON, CSV, Excel, or any format the Apify dataset export supports, or pull them via the API.
What to do when Shopify changes its structure
The actor reads from Shopify's own storefront HTML and /meta.json endpoint, which are maintained as part of the platform's public front end. The output schema — field names and types — stays stable on your end even when the underlying page markup changes, so downstream integrations keep working without code changes.
⬇️ Input
| Parameter | Required | Type | Description | Example Value |
|---|---|---|---|---|
prospectUrls | No | array | One or more Shopify storefront URLs (e.g. https://kyliecosmetics.com/). Bulk paste, upload a list, or pipe from another actor. | ["https://kyliecosmetics.com/"] |
startUrls | No | array | Kept so input files built for the base Shopify Merchant Scraper keep working unchanged. Used only when prospectUrls above is empty. | [] |
maxLeads | No | integer (min 1, max 10000) | Hard cap on how many of the provided store URLs will be processed. Use this to keep small test runs cheap. | 100 |
maxItems | No | integer (default 100, min 1, max 10000) | Legacy alias of maxLeads, kept for input files built for the base actor. Used only when maxLeads above is not set. | 100 |
concurrency | No | integer (default 10, min 1, max 50) | How many storefronts are scraped at the same time. Higher = faster, but more likely to trigger a store's own rate limiting. | 10 |
requestDelay | No | number (default 0.5, min 0, max 10) | A small polite pause between requests to the same storefront, in seconds. | 0.5 |
includeVerifiedIdentity | No | boolean (default true) | Adds myshopifyDomain, merchantName, merchantDescription, merchantCity/Province, publishedProductsCount/publishedCollectionsCount, shipsToCountries, acceptedCardBrands, theme identity and a basic installed-app inventory — all read from the same request the actor already makes for currency, at zero extra cost. | true |
includeLeadRating | No | boolean (default true) | Adds a non-AI, non-fabricated 0-100 leadQualityScore and a cold/warm/hot leadQualityLabel, derived only from confirmed-real signals already on the row: published email, published phone, number of social platforms linked, and whether the storefront is open. | true |
minLeadQuality | No | string, enum: any | warm | hot (default any) | Drop rows below this quality tier from the dataset. Only takes effect when the score above is on. | "warm" |
requireContactInfo | No | boolean (default false) | When on, a row is only kept in the dataset if the store published a usable email or phone number. | false |
proxyConfiguration | No | object (default {"useApifyProxy": false}) | Use Apify Proxy, custom proxy URLs, or no proxy. | {"useApifyProxy": false} |
No parameter is marked required in the input schema — the actor also accepts startUrls/maxItems, the base actor's original field names, so an input file built for the base Shopify Merchant Scraper runs unchanged.
Example JSON input:
{"prospectUrls": ["https://kyliecosmetics.com/", "https://gymshark.com/"],"maxLeads": 500,"concurrency": 10,"requestDelay": 0.5,"includeVerifiedIdentity": true,"includeLeadRating": true,"minLeadQuality": "warm","requireContactInfo": true,"proxyConfiguration": { "useApifyProxy": false }}
Common pitfall: setting requireContactInfo: true or minLeadQuality above any filters rows out of the dataset entirely rather than just hiding them — those stores are still fetched (and still charged, see Output below) but their row never appears in your results, so a run against 500 URLs can legitimately return far fewer than 500 dataset rows.
⬆️ Output
Every result is typed, normalized JSON — no HTML, no selectors. Export as JSON, CSV, Excel, XML, or the other formats Apify dataset exports support.
Scraped merchant lead
{"storeName": "Kylie Cosmetics by Kylie Jenner | Kylie Jenner Fragrances | Kylie Skin","domain": "kyliecosmetics.com","email": "customerservice@kyliecosmetics.com","phone": "833-545-9543","facebook": "https://www.facebook.com/KylieCosmetics","instagram": "https://www.instagram.com/kyliecosmetics","twitter": "https://twitter.com/kyliecosmetics","productCount": 238,"currency": "USD","url": "https://kyliecosmetics.com/","scrapedAt": "2026-08-13T07:14:59.082Z","tiktok": "https://www.tiktok.com/@kyliecosmetics","youtube": null,"pinterest": null,"linkedin": null,"storefrontStatus": "open","myshopifyDomain": "kylie-jenner-us.myshopify.com","merchantName": "Kylie Cosmetics","merchantDescription": "Shop Kylie Cosmetics by Kylie Jenner...","merchantCity": "New York","merchantProvince": "New York","publishedProductsCount": 238,"publishedCollectionsCount": 226,"moneyFormat": "${{amount}}","shipsToCountries": ["US", "CA", "AU", "MX"],"acceptedCardBrands": ["visa", "master", "american_express", "discover", "diners_club"],"offersShopPayInstallments": true,"themeName": "KYLIE","themeVersion": "1473863","installedApps": ["attentive", "klaviyo-email-marketing-sms", "yotpo-loyalty-rewards"],"installedAppsCount": 3,"themeAppExtensions": ["klaviyo-email-marketing-sms"],"appProxyHandles": ["attentive", "yotpo-loyalty-rewards"],"appCount": 3,"hasEmail": true,"hasPhone": true,"socialPlatformCount": 4,"leadQualityScore": 100,"leadQualityLabel": "hot","leadQuality": "high"}
Every key the actor writes to a row: storeName, domain, email, phone, facebook, instagram, twitter, productCount, currency, url, scrapedAt, tiktok, youtube, pinterest, linkedin, storefrontStatus, myshopifyDomain, merchantName, merchantDescription, merchantCity, merchantProvince, publishedProductsCount, publishedCollectionsCount, moneyFormat, shipsToCountries, acceptedCardBrands, offersShopPayInstallments, themeName, themeVersion, installedApps, installedAppsCount, themeAppExtensions, appProxyHandles, appCount, hasEmail, hasPhone, socialPlatformCount, leadQualityScore, leadQualityLabel, leadQuality — 39 fields, all present on the dataset's default "Verified Leads" view. storefrontStatus is one of open, password_protected, no_public_catalogue or unreachable. leadQualityLabel (cold/warm/hot, 0–100 scale) and leadQuality (none/low/medium/high, 0–4 signal count) are two independently computed scores kept side by side for base-actor compatibility — use whichever tier system fits your pipeline. Fields the actor cannot confirm are returned as null (or []/0 for list/count fields), never guessed or fabricated.
How does Shopify Merchant Scraper: Verified Contacts & Lead Rating compare to other Shopify scrapers?
| Feature | This actor | Generic alternative |
|---|---|---|
| Output format | Typed, normalized JSON row per store | ✅/❌ varies — many DIY scripts return raw HTML or a partial dict |
| Lead-quality scoring | Deterministic, non-AI 0–100 score built in | ❌ typically absent, or an opaque AI score |
| Entity coverage per row | Identity + contacts + 7 socials + tech stack + score in one row | ❌ usually one signal type per tool, requiring multiple scrapers stitched together |
| Base-actor input compatibility | startUrls/maxItems from the base Shopify Merchant Scraper still work unchanged | ❌ not applicable to unrelated tools |
| Proxy/anti-bot handling | Automatic direct → datacenter → residential escalation on block | ⚠️ varies — many scripts fail outright on a 403/429 |
If you're building an AI agent or RAG pipeline, the output format row is the decision-maker — parsing HTML inside an agent loop is a reliability failure mode, not a feature.
How many leads can you scrape with Shopify Merchant Scraper: Verified Contacts & Lead Rating?
maxLeads (and its legacy alias maxItems) caps a single run at up to 10,000 storefronts; there is no pagination inside the actor beyond the URL list you provide — one row is produced per URL, up to that cap. Rows filtered out by requireContactInfo or minLeadQuality are excluded from the dataset (not just hidden), so the number of rows you see can be lower than the number of URLs you submitted even though every URL was fetched. No benchmark run time or throughput figure is published for this actor — actual duration depends on concurrency, requestDelay, and how quickly each target storefront responds.
Integrate Shopify Merchant Scraper: Verified Contacts & Lead Rating and automate your workflow
Shopify Merchant Scraper: Verified Contacts & Lead Rating works with any language or tool that can send an HTTP request, since it runs on the Apify platform's standard actor-run API.
REST API integration
from apify_client import ApifyClientclient = ApifyClient("<YOUR_APIFY_API_TOKEN>")run = client.actor("<actor-id>").call(run_input={"prospectUrls": ["https://kyliecosmetics.com/"],"includeLeadRating": True,"minLeadQuality": "warm",})for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(item["merchantName"], item["leadQualityLabel"], item["email"])
Works in Python, Node.js, Go, Ruby, cURL.
Automation platforms (n8n, Make, LangChain)
In n8n, the Apify node's "Run Actor and get dataset" operation runs this actor by ID and returns the dataset for downstream nodes. In Make, the Apify app's "Run an Actor" module does the same for a scenario. In LangChain, the ApifyWrapper calls the actor and loads its dataset directly into a document loader for agent or RAG use.
Is it legal to scrape Shopify merchant storefronts?
Yes — scraping publicly accessible storefront pages is generally lawful. Shopify Merchant Scraper: Verified Contacts & Lead Rating returns only data a store has already made public on its own homepage, contact pages, or /meta.json catalogue metadata; nothing behind a login or password gate is accessed (a password-protected store is flagged as password_protected, not bypassed). The primary output — merchant identity, catalogue size, tech stack — is business and product data, governed by Shopify's and each merchant's own terms of service and database rights, not personal-data regimes. Some rows also include a store's published business contact email or phone; if you use that data for outreach, apply the same care you would to any published business contact — consult legal counsel for commercial use cases involving bulk personal data.
Frequently asked questions
Does Shopify Merchant Scraper: Verified Contacts & Lead Rating work without a Shopify account?
Yes. No Shopify account, Admin API access, or login is required — every field is read from a storefront's public, unauthenticated pages (homepage, contact/policy pages, and /meta.json).
How often is the scraped data updated?
Every field is fetched live on each run — there is no cache. scrapedAt records the exact timestamp of that fetch, so re-running the actor against the same URL always reads the storefront's current state.
What happens if a store is unreachable or has no public catalogue?
The row is still returned, with storefrontStatus set to unreachable or no_public_catalogue and the fields the actor couldn't confirm left as null — never a fabricated guess. A store that gates its homepage behind a password shows storefrontStatus: "password_protected" instead of a silent empty row.
Can I scrape private or password-protected Shopify storefronts?
No. Only publicly accessible storefront pages are read. A password-gated store is detected via its own unlock-form marker and flagged as password_protected — the actor does not attempt to bypass it.
Do I need an Apify account to run this actor?
Yes. The actor runs on the Apify platform, so a free Apify account is required to start a run from the Console or via the API.
Does Shopify Merchant Scraper: Verified Contacts & Lead Rating work for AI agent workflows and LLM pipelines?
Yes. It's callable as an HTTP endpoint by any agent framework via apify_client, and every response is typed JSON with stable field names — no HTML parsing step before passing a row to an LLM or vector store.
How does the actor handle Shopify's anti-bot defenses?
It uses an escalating proxy ladder: requests start direct (no proxy), and automatically move to a datacenter tier and then a residential tier only after a store returns a blocked-style response (403/406/407/429/451/503) or a connection failure, with exponential backoff between retries. Once escalated to residential for a store, the actor stays there for the rest of that store's requests.
How does Shopify Merchant Scraper: Verified Contacts & Lead Rating compare to other Shopify scrapers?
See the comparison table above — this actor returns merchant identity, contacts, 7-platform social links, tech stack and a lead-quality score in one row, rather than requiring several single-purpose tools stitched together.
Does this actor return data in a format LLMs can use directly?
Yes. Typed, normalized JSON with stable field names — no HTML, no selectors, no parsing. Pass a row directly into an LLM context window, index it into a vector store, or route it through an agent tool.
Can I use this actor without managing proxies?
Yes. By default the actor makes requests directly (no proxy) and only escalates to Apify Proxy tiers automatically when a store starts blocking it — you don't need to configure or rotate anything yourself, though proxyConfiguration lets you opt into Apify Proxy from the start if you prefer.
What happens when Shopify changes its structure or blocks the scraper?
The actor is maintained, and the output schema stays stable on your end — field names and types don't change even if the underlying storefront markup does. No specific update turnaround is published.
Your feedback
Found a bug, or is a field missing that you need for your lead pipeline? We want to know — reach out through the Apify Console's actor issue/support channel with your run ID and we'll take a look. Reports like these are how this actor's field coverage keeps improving.