Source stores
Find Shopify stores by app stack, region, and revenue band
Shopify itself is trivial to detect. The useful question is which apps sit on top, because that is what separates a customer from a wasted send.
Selling into Shopify means selling around it. The store works already, and what you add or replace is one app, one theme decision, or one operational gap. So the list that matters is never stores on Shopify. It is stores running these two apps and not that one.
Each check is a column. BuiltWith reports the tier and the apps that announce themselves, Firecrawl and Apify pull storefront pages when a check needs the page itself, and Open Web Ninja adds merchants who also trade offline. Blitz API opens contacts on the survivors.
Example searches
Ask for it the way you'd say it
Every search below runs on the same hosted Tables, with the cost previewed before anything is spent.
Plus versus standard
shopify plus stores in fashion that also run a loyalty program on the storefront
Tier detection is best effort and lands in its own column, so an unknown tier becomes a research task rather than a silent rejection.
Stores missing your category
shopify stores with a reviews app installed but no helpdesk widget on the page
Two columns and a filter. Absence is the useful half, and it is trustworthy only because every check records when it ran.
Owner contact for small stores
for these stores find the owner name and a work email, keep the contact page as fallback
Where no personal address resolves, the published contact route stays on the row so a matching store is never dropped.
Plays
Three motions you can run this week
Each one is a chain of Oxygen primitives — the same hosted objects your workspace already has, composed.
App-gap segment
A segment defined by the app that is missing, not the platform everyone shares.
- 1Run detection columns, then tag each store with the apps found so the segment is reusable.
- 2Filter to the gap, promote the accounts, keep the tag on the record for reporting.
oxygen tags createOne observation per store
Openers that name something on the store instead of complimenting the brand.
- 1An AI column reads product and policy pages and returns one concrete observation.
- 2Ground the message in your offer page so every claim is one you can defend.
oxygen columns runContact route when nobody is named
Stores that publish no personal address still enter the list with a route a person reads.
- 1Filter to rows where the email column came back empty and keep the store's published support address on the row.
- 2Write to that inbox as one direct message from a warmed mailbox, and read the reply in the same place.
oxygen email send
Who you can reach
Roles you can find at Shopify merchants
Reachability is per channel: a role marked for mobile is one the phone waterfall usually resolves, not a guarantee for every record.
| Role | Seniority | Reachable by |
|---|---|---|
| Store owner | Owner/Founder | Work emailLinkedInMobile |
| Ecommerce director | Director | Work emailLinkedIn |
| Head of Growth | Director | Work emailLinkedIn |
| Marketing manager | Manager | Work emailLinkedIn |
| Customer experience lead | Manager | Work emailLinkedIn |
| Operations manager | Manager | Work email |
Filters you can search on
- Shopify tier where it is detectable
- Apps installed on the storefront
- Theme family and customization signals
- Store currency and target markets
- Product and collection counts
- Headless or standard storefront
- Physical retail alongside the online store
- Category and price band
- Inferred size band from catalog, apps, and markets
Public storefronts resolve well, password-protected and pre-launch stores do not. Tier is detectable only where a store exposes it, and wholesale portals behind a login are invisible. Any size band here is inferred from what the storefront shows, never a filing. Owner names resolve most often on small stores where the founder also fronts the brand.
Data sources
What the data actually comes from
Every value lands with its provider and cost recorded on the cell.

BuiltWith
Tier, installed apps, and the analytics and payment tools sitting around the checkout.

Apify
Crawls of collection and product pages for counts, price bands, and stock language.

Firecrawl
Targeted extraction of the policy, about, and contact pages a storefront buries.
- Op
Open Web Ninja
Local listings for merchants who also run physical retail, where a phone number usually lives.

Blitz API
Head of the contact chain, run only on stores that matched the app filter.
Run these on Oxygen's managed credits, or connect your own provider keys and pay the vendor directly — the same columns, the same runs, the same provenance either way. See every integration.
Limits
Where this stops
- App detection sees what a store exposes to a browser. Apps running server side or wired in through a private theme edit leave no trace, so a negative is unproven.
FAQ
Questions people ask first
Can I find stores by the apps they run?
Is the revenue band reliable?
How do I reach an owner who hides behind a form?
Can I target by country?
Does this need my own scraping setup?
What does a run like this cost?
Build your shopify merchants list
Start with a search, preview the cost before anything is spent, and keep the rows, sources, and runs in a workspace you own.