Shopify Store Discovery - Apps, Revenue Estimate, Tech Stack
Pricing
from $8.00 / 1,000 store records
Shopify Store Discovery - Apps, Revenue Estimate, Tech Stack
Find Shopify stores by domain list with full intel: 30+ app detection (Klaviyo/Recharge/Yotpo/Gorgias/etc), product count, revenue estimate range, theme, social links. Server-side filter by required/excluded apps + revenue range. For D2C SaaS sales teams.
Pricing
from $8.00 / 1,000 store records
Rating
0.0
(0)
Developer
Seibs.co
Maintained by CommunityActor stats
0
Bookmarked
19
Total users
17
Monthly active users
13 days ago
Last modified
Categories
Share
Shopify Store Discovery
TL;DR for D2C SaaS sales teams, Klaviyo competitors, and Shopify-app sales teams: Discovers Shopify stores by domain list, vertical seed crawl, or category keyword with detected installed apps, estimated monthly revenue band, product count, founder LinkedIn intel, and contact enrichment. Compared to BuiltWith or StoreLeads at $250-$2,500/mo, you get the same Shopify-store discovery plus installed-app detection and founder intel as Apify-priced PPE rather than a fixed monthly contract. Free Apify plan covers small discovery runs on your $5 platform credit. PPE charges per store and per enrichment. Upgrade to Apify Starter ($49/mo) for production volume.
Run it in 30 seconds
# Via the Apify Python SDKfrom apify_client import ApifyClientclient = ApifyClient("<YOUR_APIFY_TOKEN>")run = client.actor("seibs.co/shopify-store-discovery").call(run_input={"mode": "discover_by_domain_list","domains": ["allbirds.com","bombas.com"],"include_contact_enrichment": true,"include_founder_intel": true})for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(item)
Or via curl:
curl -X POST "https://api.apify.com/v2/acts/seibs.co~shopify-store-discovery/run-sync-get-dataset-items?token=<YOUR_APIFY_TOKEN>" \-H "Content-Type: application/json" \-d '{"mode": "discover_by_domain_list", "domains": ["allbirds.com", "bombas.com"], "include_contact_enrichment": true, "include_founder_intel": true}'
Or click "Try for free" on this page if you prefer the no-code UI.
What you get
Each run produces:
- A clean dataset, filterable in the Apify console and downloadable as CSV or JSON
- An OUTPUT.html dashboard preview of your top records
- A sample-output preview at ./.actor/sample-output.json
Per-archetype custom artifacts shipped with this actor:
- top-stores.csv (revenue-band sorted, with installed_apps and founder columns)
- outreach-templates.html (per-app-stack cold email with copy-to-clipboard buttons)
- app-stack-breakdown.csv (Klaviyo, Yotpo, ReCharge, Gorgias, etc per store)
What does Shopify Store Discovery do?
It verifies Shopify via the public /products.json endpoint (with Liquid HTML fallback), detects 30+ installed apps from script-tag footprints, and pulls product catalog stats, theme, social links, contact info, and a heuristic monthly revenue estimate. Server-side filters by required apps (AND), excluded apps (NOT), product count band, revenue band, country, and category keyword - filtered-out stores are not charged.
Features
- Shopify verification -
GET /products.json?limit=1first, Liquid template HTML fallback. - 38+ app detection from script footprints, each tagged with confidence (low / medium / high).
- Server-side filters - required_apps (AND), excluded_apps (NOT), product band, revenue band, country, keyword.
- Heuristic monthly revenue estimate (
deep_analyzemode) with Shopify Plus, subscription, B2B/wholesale, and enterprise-stack refinements; returns arevenue_estimate_confidence(low / medium / high) so buyers know how much to trust it. - Shopify Plus + B2B/wholesale classification surfaced as their own boolean fields.
- Per-store progress logging - one info line per store with size, apps, revenue, and email so long runs are auditable.
- Contact enrichment (opt-in default true) - scrapes
/contact/pages/contact/aboutand surfacesbest_contact_email(founder/sales/owner ranked above generic info/support), allcontact_emailswith role classification, andcontact_phones. Only charged when something is extracted. - Founder + brand-story intel (opt-in) -
founder_names,founding_year, andbrand_story_keywords(vegan, sustainable, made in USA, woman-owned, B-corp, etc) for sales personalization. - Last-product-published timestamp +
days_since_last_publishso you can split fresh brands from abandoned ones. - Visible review count + average rating when a review app (Yotpo / Loox / Judge.me / Okendo / Stamped / Reviews.io) is detected.
- Theme name + version detection.
- Social link parsing (IG, FB, TikTok, X, YouTube, Pinterest, LinkedIn).
- App-list unwind view - one row per (store, app) for downstream slicing.
Use cases
D2C SaaS sales teams selling INTO the Shopify ecosystem - concrete buyers:
- Klaviyo competitors (Omnisend, Sendlane, Drip) - filter
excluded_apps: ["klaviyo"]for non-Klaviyo Shopify stores. - Recharge competitors (Bold, Loop, Awtomic, Stay AI) -
has_subscriptions: trueAND no Recharge. - Yotpo / Stamped / Judge.me competitors (Okendo, Loox, Reviews.io).
- Gorgias competitors (Zendesk, Re:amaze, Help Scout).
- Postscript / Attentive competitors - segment by SMS app presence.
- Triple Whale / Northbeam / Polar Analytics - find stores with 5+ apps and $100K+ revenue.
- Shogun / PageFly / Replo / GemPages teams - find competitors' installed base.
- Headless agencies (Hydrogen / Storefront API) - find Plus-tier Shopify stores still on Liquid.
FAQ
Q: Is this legal?
A: Yes - we hit Shopify's public /products.json endpoint, the public Liquid HTML, and public /contact / /about / /pages/contact pages. All publicly accessible to any browser. Use the data per Shopify's Terms of Service and applicable law.
Q: Why might a run fail?
A: (1) Cloudflare challenge - we use curl_cffi with Chrome 131 impersonation which handles most, but RESIDENTIAL proxies improve consistency. (2) Domain is not Shopify - row comes back is_shopify: false with the detection reason and is not charged. (3) /products.json is rate-limited at the store level - we self-throttle, but very high concurrency on a single brand's domain group can still trigger it.
Q: How fresh is the data?
A: Live at crawl time. Product counts, prices, theme, apps, contact info, social links, and days_since_last_publish are read directly from the store at run time - no internal cache.
Q: Can I schedule this daily or weekly? A: Yes - weekly is typical for D2C-into-Shopify SaaS prospecting (find fresh installs of competitor apps, drop the new ones into outbound). Daily for very narrow watchlists. Use Apify Schedules.
Q: How do I push results into a CRM?
A: The output maps cleanly to standard lead schemas - best_contact_email, contact_phones, social links, store name, and the apps_installed array all forward to HubSpot, Salesforce, Pipedrive, Apollo, or Klaviyo via Zapier/Make/n8n. Webhook the full record on each run-complete for real-time CRM enrichment.
Q: How accurate is the revenue estimate?
A: It is a heuristic from product_count x avg_price x estimated_orders/day multipliers (with Shopify Plus, subscription, B2B/wholesale, and enterprise-stack refinements). Expect approximately +/-50% error on absolute MRR. The wedge is relative ranking - "under $10K/mo vs over $500K/mo" - not precision. Use it as a filter floor (min_estimated_monthly_revenue_usd: 50000 to skip tiny stores), not ground truth for a financial model. revenue_estimate_confidence (low / medium / high) tells you how much to trust each estimate.
Q: How does PPE pricing actually work here? A: Filtered-out and non-Shopify rows are NEVER charged. You only pay for stores that match your input criteria. Contact enrichment only bills when data is actually extracted. See the Pricing section for per-event rates.
Related Actors
- ../b2b-sales-triggers/ - score intent (hiring, funding, exec changes) on top of Shopify-store fit. Run this actor to find non-Klaviyo $50K+ MRR stores, then pipe the domain list into the triggers actor.
- ../google-maps-reviews-pro/ - layer review sentiment / topic analysis on Shopify brands with physical retail or showrooms.
- ../reddit-topic-watcher/ - watch for
alternative_seekandcomplaintposts mentioning Shopify apps your prospects are using (conquest signals).
Integrations
- Zapier - push to HubSpot/Salesforce/Pipedrive/Apollo/Klaviyo
- Make.com - workflow automation
- n8n - self-hosted automation
- Apify webhooks - POST to your endpoint
- API + dataset export (JSON/CSV/Excel/XML)
- MCP / AI agents - call from Claude/GPT/LangChain
App detection list (30+ apps)
Email + SMS: Klaviyo, Postscript, Privy, Justuno, Sumo, Drip. Subscriptions: Recharge, Bold, Loop, Smile.io. Reviews + UGC: Yotpo, Stamped.io, Judge.me, Okendo, Loox, Reviews.io, Trustpilot, Bazaarvoice. Support + Chat: Gorgias, Tidio, Drift. Search + Personalization: Klevu, Searchanise, Algolia, Nosto, Dynamic Yield, LimeSpot, Wiser. Page Builders: Shogun, PageFly, Replo, GemPages, Zipify. Upsell + CRO: ReConvert, Rebuy, Fomo, Octane AI. Headless / Frontend: Hydrogen, Shogun Frontend.
Modes
discover_by_domain_list- run the full intel pass on every input domain.detect_shopify_only- lightweight is-Shopify boolean only (cheapest).deep_analyze-discover_by_domain_listplus full/products.jsonwalk and revenue estimate.
Input
See .actor/INPUT_SCHEMA.json. Sample - find non-Klaviyo Shopify stores doing 50-1000 products, $50K+ MRR:
{"mode": "deep_analyze","domains": ["allbirds.com", "rothys.com", "warbyparker.com"],"excluded_apps": ["klaviyo"],"min_product_count": 50,"max_product_count": 1000,"min_estimated_monthly_revenue_usd": 50000,"concurrency": 4,"use_apify_proxy": true,"apify_proxy_groups": ["RESIDENTIAL"]}
Output
Sample output: ./.actor/sample-output.json â€" copy-paste-ready preview of real-looking records.
First record inline:
{"domain": "luminouswick.co","store_url": "https://luminouswick.co","is_shopify": true,"shopify_plan_hint": {"plan": "shopify","source": "X-ShopId header pattern"},"store_name": "Luminous Wick \u2014 Hand-Poured Soy Candles","homepage_title": "Luminous Wick | Small-Batch Soy Candles & Refills","homepage_description": "Hand-poured in Brooklyn. Coconut-soy wax, cotton wicks, fragrance-loaded. Shop scents, refill kits, and gift sets.","currency": "USD","primary_country": "US","total_product_count": 84,"total_collections_count": 12,"avg_product_price": 38.4,"min_product_price": 14.0,"max_product_price": 168.0,"top_categories": ["Candles","Refill Kits","Gift Sets","Wax Melts","Accessories"],"recent_product_count_30d": 7,"has_subscriptions": true,"has_rewards_program": true,"has_quiz": true,"has_post_purchase_upsell": true,"apps_installed": [{"app_id": "klaviyo","footprint_match": "static.klaviyo.com","confidence": "high"},{"app_id": "recharge","footprint_match": "rechargepayments.com/shopify","confidence": "high"},{"app_id": "smile_io","footprint_match": "cdn.smile.io","confidence": "high"},{"app_id": "octane_ai","footprint_match": "cdn.octaneai.com/quiz-widget","confidence": "high"},{"app_id": "judgeme","footprint_match": "judge.me/widget","confidence": "high"},{"app_id": "yotpo","footprint_match": "staticw2.yotpo.com","confidence": "medium"},{"app_id": "rebuy","footprint_match": "rebuyengine.com","confidence": "high"},{"app_id": "gorgias","footprint_match": "config.gorgias.chat","confidence": "high"},{"app_id": "tapcart","footprint_match": "open.tapcart.com","confidence": "medium"}],"apps_count": 9,"estimated_monthly_revenue_usd": {"low": 180000,"high": 320000,"midpoint": 250000},"revenue_estimate_method": "product_count * avg_price * estimated_orders/day band","social_links": {"instagram": "https://www.instagram.com/luminouswickco","facebook": "https://www.facebook.com/luminouswickco","tiktok": "https://www.tiktok.com/@luminouswick","twitter": null,"youtube": null,"pinterest": "https://www.pinterest.com/luminouswickco","linkedin": null},"contact_email": "hello@luminouswick.co","contact_phone": "(718) 555-0184","theme_name": "Impulse","theme_version": "7.4.2","language": "en","scraped_at": "2026-05-13T16:02:14Z","mode": "domain_scan","available": true,"reason": null}
Sample record:
{"domain": "example.com","store_url": "https://example.com","is_shopify": true,"shopify_plan_hint": {"plan": "shopify", "source": "headers"},"store_name": "Example Co","currency": "USD", "primary_country": "US","total_product_count": 187,"avg_product_price": 64.50,"apps_installed": [{"app_id": "klaviyo", "footprint_match": "static.klaviyo.com", "confidence": "high"},{"app_id": "recharge", "footprint_match": "rechargepayments.com", "confidence": "high"}],"apps_count": 6,"estimated_monthly_revenue_usd": {"low": 60000, "midpoint": 120000, "high": 240000},"theme_name": "Dawn","available": true,"scraped_at": "2026-05-14T12:00:00Z"}
Non-Shopify rows include is_shopify: false and the detection reason; filtered-out rows are not emitted.
Pricing
Pay-per-event:
| Event | When | Price |
|---|---|---|
store_record | Verified Shopify store with metadata | $0.008 |
app_enrichment | 3+ apps detected | $0.005 |
contact_enrichment | At least one email or phone extracted from /contact /about | $0.005 |
deep_analysis | Surcharge in deep_analyze mode | $0.010 |
Worst case (deep_analyze, 5+ apps, contact extracted): $0.028 per store. Cheapest (detect_shopify_only, <3 apps, no contact): $0.008. Contact enrichment is only billed when data is actually returned, so misses cost nothing.
FAQ
Q: Why is shopify_plan_hint often null?
A: Shopify hides plan info. We can sometimes spot shopify-plus references in HTML or Powered-By headers; otherwise plan is null.
Q: How accurate is the revenue estimate? A: A rough heuristic - expect +/- 50% error on absolute MRR. The wedge is relative ranking ("under $10K/mo or over $500K/mo"), not precision. Treat it as a defensible signal, not a financial figure.
Q: Do I need a residential proxy?
A: Recommended. Many Shopify stores are behind Cloudflare; we use curl_cffi with Chrome 131 impersonation, which gets through plain CF challenges, but RESIDENTIAL proxies improve consistency.
Q: How do server-side filters affect billing? A: Filtered-out and non-Shopify rows are NEVER charged. You only pay for stores that match your input criteria.
Save your input as an Apify Task
Apify Tasks let you save a configured input once and re-run it with a single click - no need to re-type search terms, locations, filters, or tier settings every time. Tasks are the foundation for everything that comes next: schedules, monitor mode, and webhook routing all attach to a saved Task, not to the raw actor.
Steps to save your current input as a Task:
- On this actor's Apify Store page, click
Runwith your input fully configured. - Click the
Save as taskbutton at the top of the run page. - Name the task something memorable (e.g.
New skincare Shopify stores - weekly). - Reload the task page and click
Startanytime to re-run with the same inputs.
Tasks unlock the next two features below: scheduling and monitor mode.
Run this weekly with Apify Schedules
Apify Schedules cron-run any saved Task automatically. Pair this with the saved Task above and you get hands-off recurring runs with no manual clicks, no missed weeks, and a steady stream of fresh data into your CRM or warehouse.
Steps to schedule a Task:
- Save your input as a Task (see above).
- Go to https://console.apify.com/schedules and click
Create new schedule. - Pick your Task and set the cron expression. Common patterns:
- Daily at 9am UTC:
0 9 * * * - Weekly on Mondays at 9am:
0 9 * * 1 - Monthly on the 1st:
0 9 1 * *
- Daily at 9am UTC:
- Save. Apify will run your Task on that schedule automatically, push the dataset to whatever integrations you have wired up, and fire run-completion webhooks for downstream automation.
Run weekly to catch newly-launched Shopify stores and stores that just adopted the apps or themes you sell against.
Monitor mode (v2, beta)
Monitor mode is the v2 evolution of this actor and is currently in BETA. It turns a recurring schedule into a true change-feed instead of a firehose of duplicate records.
How it works:
- When this actor runs under an Apify Schedule, monitor mode is enabled automatically.
- Instead of emitting ALL records every run, it emits ONLY records that are NEW or CHANGED since the last scheduled run.
- A digest record summarizes the delta (X new, Y changed, Z removed) at the top of every run.
- Optional: provide a Slack or email webhook URL in the
monitor_webhook_urlinput field and the digest fires there too, so your team gets the delta in their inbox or channel without polling the dataset. - Cost: a single
scheduled_delta_runevent ($0.05) per scheduled run, plus standard PPE on emitted delta records only. Predictable monthly cost, no surprise bills from re-charging for unchanged records.
Monitor mode is rolling out to the top 3 actors first (this one included if it's hotel-motel-lead-finder, google-maps-reviews-pro, or mcp-accounting-firm-leads). Full portfolio coverage by end of June.
Support
Open an issue on the actor's GitHub or contact via Apify Store. Include the run ID and input config.
Changelog
See ./CHANGELOG.md.
Found this useful?
If this actor saved you time or money, please consider leaving a quick review on the Apify Store. Reviews help other buyers find work that solves their problem and let me prioritize the features paying customers actually use. Leave a review: https://apify.com/seibs.co/shopify-store-discovery#reviews