Shopify Store Data — Detect Stores, Products, Vendors & Pricing avatar

Shopify Store Data — Detect Stores, Products, Vendors & Pricing

Pricing

$2.00 / 1,000 product records

Go to Apify Store
Shopify Store Data — Detect Stores, Products, Vendors & Pricing

Shopify Store Data — Detect Stores, Products, Vendors & Pricing

Detect whether a domain runs on Shopify and pull its public catalogue. Returns store detection, product count, product titles, vendors, product types, tags, price range, variant and image counts, and publish dates.

Pricing

$2.00 / 1,000 product records

Rating

0.0

(0)

Developer

Berkan Kaplan

Berkan Kaplan

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

18 days ago

Last modified

Categories

Share

Shopify Store Data — Detect Stores, Products, Vendors & Pricing 🛍️

foXLabs digital-footprint series: App Store publishers · Company hiring signals · Company enrichment · GitHub trending

🎉 Point it at any domain: it tells you whether the site runs Shopify, then pulls the full product catalogue — titles, vendors, product types, price range, variants, images and tags. No key, no login. Built for e-commerce sales teams, competitive pricing analysts, and anyone qualifying DTC brands.

🔍 What is this Actor — and when should you use it?

Shopify powers a large slice of direct-to-consumer commerce, and every Shopify storefront exposes its catalogue publicly. This Actor takes a domain, confirms whether it is a Shopify store, and if so returns one clean row per product: title, vendor, type, price range, variant and image counts, tags, handle and publication dates.

Use it when you need: to qualify which prospects on a list run Shopify; a competitor's catalogue and price bands; vendor/brand mix across a set of stores; or a product feed for market research.

Use something else when: the store is on another platform — this Actor tells you honestly that it is not Shopify rather than guessing. For company-level firmographics, use Company Enrichment.

🤖 Use with AI agents

Already on the Apify MCP server? Ask for this Actor by name: foxlabs/shopify-store-data.

Your agent can pay for its own runs. This Actor is pay-per-event with agentic payments, so an agent can discover it, run it and settle the bill over x402 (USDC on Base) or Skyfire — no Apify account or API token of its own. Billing is the same either way: per delivered product row.

Otherwise paste this into Claude, ChatGPT, Cursor or any MCP-enabled assistant:

Run the Apify actor foxlabs/shopify-store-data with
{"queries":["allbirds.com","gymshark.com"],"maxResultsPerQuery":50}
and compare their price ranges by product type.

📋 Overview

SourceShopify storefronts (public catalogue endpoint)
CoverageAny Shopify-powered store, worldwide
Auth neededNone. No API key, no login, no proxy required
RowOne product (or one detection result for a non-Shopify site)
Measured run151 rows in 6.6 s for 4 domains (2026-09-20, build 0.1.8)
Pricing$0.002 per delivered row — $2 per 1,000

✨ Features

  • ✅ Shopify detection first — isShopify tells you before anything else
  • 🏷️ Vendor and product type on every product — the brand mix inside a store
  • 💲 Price range per product (minPrice / maxPrice) across its variants
  • 🎨 Variant and image counts — catalogue depth at a glance
  • 🔖 Tags array — the store's own merchandising taxonomy
  • 📅 Created, published and updated dates per product
  • 🚫 Honest negative — a non-Shopify domain returns a clear row saying so, not silence

🎬 Quick Start

curl -X POST "https://api.apify.com/v2/acts/foxlabs~shopify-store-data/run-sync-get-dataset-items?token=YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{"queries":["allbirds.com","gymshark.com","kith.com"],"maxResultsPerQuery":50}'

🚀 Getting Started (3 steps)

  1. Put domains into queries. The default run includes apple.com on purpose — to show what a non-Shopify result looks like.
  2. Set catalogue depth. maxResultsPerQuery caps products per store (default 50).
  3. Run it. Rows arrive in the dataset; export to CSV/JSON/Excel or read them over the API.

📥 Input

FieldTypeDefaultDescription
queriesarray["allbirds.com","gymshark.com","kith.com","apple.com"]Store domains
maxResultsPerQueryinteger50Cap on products returned per store
maxConcurrencyinteger3Parallel requests
requestDelayMsinteger200Pause between requests — this Actor stays polite by default
includeRawbooleanfalseAttach the untouched product record to each row
proxyConfigurationobjectproxy offStorefronts answer direct requests

Example — qualify a prospect list:

{ "queries": ["brand-a.com", "brand-b.com", "brand-c.com"], "maxResultsPerQuery": 1 }

Example — deep catalogue pull:

{ "queries": ["gymshark.com"], "maxResultsPerQuery": 250 }

📤 Output

One row per product. Fill rates from the measured run (151 rows, 4 domains, 2026-09-20):

FieldTypeFillDescription
companyNamestring100%Store domain
isShopifyboolean100%Whether the domain runs Shopify
productIdstring99%Shopify product id
productTitlestring99%Product title
vendorstring99%Vendor/brand on the product
productTypestring98%Store's product type
minPrice / maxPricenumber99%Price range across variants
variantCountnumber99%Number of variants
imageCountnumber99%Number of images
availableboolean99%Availability flag
tagsarray99%Store's merchandising tags
handlestring99%URL handle
descriptionstring99%Product description
createdAt / publishedAt / updatedAtstring99%Product lifecycle dates
sourceUrlstring100%Product URL
notestring1%Explanation row — present when a domain is not a Shopify store
country / registry / query / status / scrapedAtstring100%Provenance fields

The product fields sit at 99% rather than 100% for one honest reason: apple.com in the default run is not a Shopify store, so its single row carries isShopify: false and a note instead of product data. That is the 1%. Columns a storefront cannot provide (registration or tax number, legal form, incorporation date, postal address, industry code, headcount, capital, contact details) were removed rather than shipped permanently empty.

A real row from the default run:

{
"companyName": "kith.com",
"isShopify": true,
"productTitle": "VANS GS Old Skool 36 Pearlized - Multi",
"vendor": "VANS",
"productType": "Low Top Sneakers",
"sourceUrl": "https://kith.com/products/vn00115wbgk"
}

💼 Use cases

  • Prospect qualification — which domains on your list run Shopify (set maxResultsPerQuery: 1)
  • Competitive pricing — price bands by product type across rival stores
  • Brand/vendor mapping — which brands a multi-brand retailer carries
  • Catalogue monitoring — schedule runs and diff updatedAt to catch new drops
  • Market research — product-type mix and catalogue depth across a segment

🔗 Integration

JavaScript

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_TOKEN' });
const run = await client.actor('foxlabs/shopify-store-data').call({
queries: ['allbirds.com'], maxResultsPerQuery: 50,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();

Python

from apify_client import ApifyClient
client = ApifyClient("YOUR_TOKEN")
run = client.actor("foxlabs/shopify-store-data").call(
run_input={"queries": ["allbirds.com"], "maxResultsPerQuery": 50}
)
items = client.dataset(run["defaultDatasetId"]).list_items().items

No-code: Make, n8n and Zapier reach this Actor through the Apify app — schedule it and push catalogue changes into a sheet or a database.

📊 Pricing

Pay-per-event: product-record — $0.002 per delivered row ($2 per 1,000). Compute and traffic are included; you pay for rows, not run time. A detection-only row for a non-Shopify domain is not charged as a product.

View current pricing.

❓ FAQ

Do I need Shopify API credentials? No. This Actor reads the storefront's own public catalogue — no app, no key, no login.

What happens with a non-Shopify domain? You get one row with isShopify: false and a note explaining it, so a negative result is visible rather than silent.

Can I check many domains cheaply? Yes — set maxResultsPerQuery: 1 and you get the detection plus one sample product per store.

Does it include inventory levels? No. available reflects the storefront's availability flag; exact stock counts are not public.

Are prices in a single currency? Prices come as the storefront publishes them; a store selling in multiple currencies shows its default.

How deep can a catalogue pull go? Raise maxResultsPerQuery; large stores paginate and the Actor keeps a polite delay by default.

🐛 Troubleshooting

A store you know is Shopify returns isShopify: false. Some stores sit behind a custom domain setup or a proxy that hides the catalogue endpoint. Try the store's myshopify domain if you know it.

Fewer products than the site shows. maxResultsPerQuery caps per store — raise it.

Prices look wrong. minPrice/maxPrice span the product's variants; a single-variant product shows the same value twice.

⚠️ Trademark

Shopify is a trademark of Shopify Inc. This Actor is an independent tool, is not affiliated with or endorsed by Shopify, and reads only publicly published storefront catalogues. Brand and product names belong to their owners.

A storefront catalogue is published so shoppers can browse it. The rows this Actor returns are product listings — commercial information, not personal data. Respect each store's terms for how you reuse their catalogue, and note that product text and images remain the store's copyright. You remain responsible for how you use the output.

🤝 Support & contact

Questions, a field you need, or a bug: info@foxlabs.com.tr — or open an issue on the Actor's Apify page.

Changelog

0.1.8

  • Removed permanently-empty columns (registration and tax number, status detail, legal form, incorporation and dissolution dates, postal address, industry, industry code, headcount, capital, website, e-mail, phone, officers) — a storefront is not a company register. Row went from 42 columns to 24, with zero permanently-empty columns left.

0.1

  • Shopify detection plus full catalogue extraction per domain.
  • Pay-per-event billing on delivered rows (product-record).