OXYGENOXYGEN

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.

try

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.

    1. 1Run detection columns, then tag each store with the apps found so the segment is reusable.
    2. 2Filter to the gap, promote the accounts, keep the tag on the record for reporting.
    oxygen tags create
  • One observation per store

    Openers that name something on the store instead of complimenting the brand.

    1. 1An AI column reads product and policy pages and returns one concrete observation.
    2. 2Ground the message in your offer page so every claim is one you can defend.
    oxygen columns run
  • Contact route when nobody is named

    Stores that publish no personal address still enter the list with a route a person reads.

    1. 1Filter to rows where the email column came back empty and keep the store's published support address on the row.
    2. 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.

RoleSeniorityReachable by
Store ownerOwner/FounderWork emailLinkedInMobile
Ecommerce directorDirectorWork emailLinkedIn
Head of GrowthDirectorWork emailLinkedIn
Marketing managerManagerWork emailLinkedIn
Customer experience leadManagerWork emailLinkedIn
Operations managerManagerWork 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?
Yes, for apps that leave a script, a class name, or a widget on the rendered page. Each becomes a dated column, so installed, missing, and recently removed are three different plays.
Is the revenue band reliable?
It is inference, never a filing. Product count, app footprint, market coverage, and team size give a workable band, and the column should state how that band was derived.
How do I reach an owner who hides behind a form?
Run the contact chain first, and where it returns nothing keep the published route on the row. A form is a worse lane than an inbox, but better than dropping the store.
Can I target by country?
Yes. Currency, language, shipping destinations, and the footer entity all become filters. That beats a country field on a profile, which records registration rather than trade.
Does this need my own scraping setup?
No. The crawl runs as a hosted column with run history, retries, and a cost line. A page that fails shows as a failed cell you can retry on its own.
What does a run like this cost?
Detection and crawling are metered in credits, at 1,000 credits per dollar. The preview on your exact filters is the honest number, and it runs before anything is charged.

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.