Shopify Endpoints Extractor
Pricing
Pay per event
Shopify Endpoints Extractor
Extract structured JSON data from Shopify public endpoints. Crawl products, collections, and store metadata to integrate into your apps.
Pricing
Pay per event
Rating
0.0
(0)
Developer
太郎 山田
Actor stats
0
Bookmarked
1
Total users
0
Monthly active users
4 hours ago
Last modified
Categories
Share
Shopify Store Intelligence API | Catalog, Collections & Merch Signals
Analyze public Shopify storefront endpoints such as products.json, collections.json, and meta.json — no admin access or app install required. Get store summaries, catalog samples, content metadata, and merchandising rollups in one normalized output.
Store Quickstart
- Start with 1–2 public
storeUrlsand keep product / collection samples around 10–25. - Leave
includeContentMetadataoff for the fastest first run, then turn it on when you need blog or page intelligence. - Use
dryRun: truebefore scaling to multi-store or webhook workflows.
Key Features
- 🛍️ Multi-store support — analyze up to 50 Shopify storefronts per run
- 📦 Catalog sampling — fast product and collection samples via public JSON endpoints
- 🧠 Merch rollups — vendor, tag, and product-type counts from sampled products
- 🏪 Store summary — normalized name, domain, currency, description, theme hint, canonical URL
- ⚠️ Restriction-aware — surfaces 401/403/404/non-JSON cases clearly instead of failing silently
- 🧾 Optional pages / blogs metadata — enabled only when you need it
Use Cases
| Who | Why |
|---|---|
| Developers | Automate recurring data fetches without building custom scrapers |
| Data teams | Pipe structured output into analytics warehouses |
| Ops teams | Monitor changes via webhook alerts |
| Product managers | Track competitor/market signals without engineering time |
Input
| Field | Type | Default | Description |
|---|---|---|---|
| storeUrls | array | prefilled | One or more Shopify storefront URLs. Custom domains and *.myshopify.com domains both work. Maximum 50 stores per run. |
| productSampleLimit | integer | 25 | Maximum number of public products to fetch per store from /products.json. |
| collectionSampleLimit | integer | 25 | Maximum number of public collections to fetch per store from /collections.json. |
| includeContentMetadata | boolean | false | Attempt lightweight metadata fetches from /pages.json and /blogs.json when public storefront endpoints expose them. |
| contentSampleLimit | integer | 10 | Maximum public pages or blogs to sample per store when includeContentMetadata is enabled. |
| timeoutMs | integer | 15000 | Per-request timeout in milliseconds. |
| delivery | string | "dataset" | Where to send results. Dataset is best for inspection; webhook posts the same payload to your endpoint. |
| webhookUrl | string | — | Required when delivery is webhook. |
Input Example
{"storeUrls": ["https://colourpop.com","https://allbirds.com"],"productSampleLimit": 10,"collectionSampleLimit": 6,"includeContentMetadata": true,"contentSampleLimit": 5,"delivery": "dataset"}
Output
| Field | Type | Description |
|---|---|---|
meta | object | |
results | array | |
results[].inputUrl | string (url) | |
results[].normalizedUrl | string (url) | |
results[].hostname | string | |
results[].status | string | |
results[].store | object | |
results[].summary | object | |
results[].collections | array | |
results[].productSamples | array | |
results[].rollups | object | |
results[].content | object | |
results[].warnings | array | |
results[].error | null |
Output Example
{"meta": {"generatedAt": "2026-04-10T17:06:39.370Z","totals": {"stores": 1,"ok": 1,"restricted": 0,"errors": 0,"warningCount": 3},"limits": {"productSampleLimit": 8,"collectionSampleLimit": 5,"contentSampleLimit": 5,"includeContentMetadata": true},"duplicateInputsSkipped": 0,"notes": ["Vendor, tag, and product-type rollups are derived from sampled public products only.","Warnings highlight public endpoint restrictions or partial storefront exposure."]},"results": [{"inputUrl": "https://colourpop.com","normalizedUrl": "https://colourpop.com","hostname": "colourpop.com","status": "ok","store": {"name": "ColourPop","description": "Shop ColourPop® top-rated makeup for eyes, lips & face. From Super Shock Shadow to glossy balms & liners, plus iconic collabs. Find your match - shop now!","url": "https://colourpop.com","canonicalUrl": "https://colourpop.com/","domain": "colourpop.com","myshopifyDomain": "colourpop-prd.myshopify.com","currency": "USD","country": "US","province": "California","city": "Oxnard","locale": "en",
API Usage
Run this actor programmatically using the Apify API. Replace YOUR_API_TOKEN with your token from Apify Console → Settings → Integrations.
cURL
curl -X POST "https://api.apify.com/v2/acts/taroyamada~shopify-store-intelligence/run-sync-get-dataset-items?token=YOUR_API_TOKEN" \-H "Content-Type: application/json" \-d '{ "storeUrls": [ "https://colourpop.com", "https://allbirds.com" ], "productSampleLimit": 10, "collectionSampleLimit": 6, "includeContentMetadata": true, "contentSampleLimit": 5, "delivery": "dataset" }'
Python
from apify_client import ApifyClientclient = ApifyClient("YOUR_API_TOKEN")run = client.actor("taroyamada/shopify-store-intelligence").call(run_input={"storeUrls": ["https://colourpop.com","https://allbirds.com"],"productSampleLimit": 10,"collectionSampleLimit": 6,"includeContentMetadata": true,"contentSampleLimit": 5,"delivery": "dataset"})for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(item)
JavaScript / Node.js
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: 'YOUR_API_TOKEN' });const run = await client.actor('taroyamada/shopify-store-intelligence').call({"storeUrls": ["https://colourpop.com","https://allbirds.com"],"productSampleLimit": 10,"collectionSampleLimit": 6,"includeContentMetadata": true,"contentSampleLimit": 5,"delivery": "dataset"});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items);
Tips & Limitations
- Run weekly for trend tracking; daily for competitive launch monitoring.
- Use webhook delivery to push insights into your BI tools or marketing Slack.
- Archive results in Apify Dataset for your own historical trend analysis.
- Combine with
ai-visibility-monitor-actorfor AI-era brand surface coverage. - Start with a small watchlist, iterate on keyword precision before scaling.
FAQ
What platforms are covered?
Varies by actor — see each actor's input schema for the full source list. Most cover 3–8 major platforms per vertical.
How is data deduplicated across sources?
The actor normalizes entity identifiers (brand name, SKU) before aggregation — cross-source duplicates are merged.
Can I whitelabel the output?
Dataset rows are raw data — build your own presentation layer to whitelabel.
Is the sentiment scoring accurate?
Sentiment uses rule-based + keyword scoring tuned for English. For non-English content, treat scores as directional rather than absolute.
Can I share the dashboard output?
Export from Dataset API into your BI tool (Looker, Metabase, Tableau) for stakeholder-facing dashboards.
Related Actors
Pair this actor with other flagship intelligence APIs in the same portfolio:
- Trustpilot Review Intelligence API — add brand-level review, rating, and reply signals for the same merchants.
- Google Maps Review Intelligence API — compare local-store reputation with storefront and catalog signals.
- YouTube Channel Analytics API — connect merchandising changes with creator and content cadence.
- Google Play Intelligence API — add mobile-app feedback when the same brand also has an Android presence.
Pricing & Cost Control
Apify Store pricing is usage-based, so total cost mainly follows how many storeUrls you process plus how deep you sample products, collections, and content. Check the Store pricing card for the current per-event rates.
- Start with 1–2
storeUrlswhile validating the schema. - Keep
productSampleLimit,collectionSampleLimit, andcontentSampleLimitlow for first passes. - Leave
includeContentMetadataoff unless you need blogs or pages. - Use
dryRun: truebefore daily or multi-store runs.