Shopify Public Products Collector
Under maintenancePricing
$2.00 / 1,000 results
Shopify Public Products Collector
Under maintenanceCollect up to 50 product records from one user-provided Shopify store's public products.json endpoint.
Pricing
$2.00 / 1,000 results
Rating
0.0
(0)
Developer
Eichan Jolly
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
17 minutes ago
Last modified
Categories
Security
Limited permissionsShare
Collect a small, bounded list of products from one user-supplied Shopify storefront's public /products.json endpoint. This is not a general web crawler, product-variant exporter, or Shopify Admin API client.
What it does
- Validates one public Shopify store root
storeUrl. - Requests exactly one
/products.json?limit=N&page=1feed page from that store (whereNdefaults to 5, maximum 50). - Takes up to
Nproducts from the publicproductsarray, and emits one normalized dataset row per product with a usable ID and handle. - Appends the result rows to the Apify default dataset via REST. No login, API key for the store, Apify SDK, third-party Python package, or pagination loop is needed.
Who it is for
Merchants, market researchers, and catalog operators who want a quick sample of products from a known Shopify storefront that voluntarily exposes its public products feed.
Input
{"storeUrl": "https://example-store.myshopify.com/","limit": 5}
The store address is illustrative only; it may not exist or expose products. Replace it with a real, public Shopify storefront you want to query. The Console prefill uses one store URL and a five-product limit.
| Field | Type | Required | Default | Meaning |
|---|---|---|---|---|
storeUrl | string | Yes | — | One HTTP(S) Shopify storefront root (no path/query). |
limit | integer | No | 5 | Maximum result rows requested and emitted; range 1–50. |
Example output
An illustrative dataset item (not a claim about the sample store):
{"product_id": "1234567890123","handle": "canvas-tote-bag","title": "Canvas Tote Bag","vendor": "Sample Goods","product_type": "Accessories","product_url": "https://example-store.myshopify.com/products/canvas-tote-bag"}
Each result contains exactly these six keys. Missing optional text fields become null. product_id is always a string, avoiding large-integer precision loss in downstream tools. Product URLs are constructed from the supplied storefront's root URL and the handle: they are not checked or fetched individually.
Limits and expected behavior
- Public Shopify feed only: Exactly one page at
/products.json; no store-wide crawl, variant rows, price lookup, or additional endpoints. - Low cost: Default maximum 5, hard maximum 50 products; 15-second timeout; 8 MB response cap; no automatic retries.
- Public access may vary: A store may block, disable, redirect, password-protect, or rate-limit
/products.json. This Actor does not circumvent access controls. - Response validation: Requires a JSON object containing
productsas an array. Products missing IDs or safe handles are skipped. Empty or unusable lists create zero dataset rows and a plain-language log message. - URL restrictions: Rejects local/private/non-global destinations at initial DNS validation, credentials, custom ports, Amazon/eBay domains, and redirects outside
/products.jsonon the same store (allowingwwwhostname variants). DNS checks reduce SSRF risk but do not fully eliminate DNS rebinding. - No extra claims: Some products in the JSON feed may be unpublished, removed, or non-purchasable; this Actor reports what the public feed actually provides. It does not infer availability, prices, sales, or total product count.
- Errors: Invalid inputs, blocked endpoints, and malformed data produce readable messages without Python tracebacks. Network or storage failures exit nonzero.
- Public data: Use only stores you are permitted to access and comply with the relevant website's terms and applicable law.
Run on Apify
Upload this Actor's folder independently. .actor/actor.json points to ../input_schema.json and ../Dockerfile. Apify injects APIFY_TOKEN and default storage IDs. The Actor fetches its input INPUT record from the default key-value store and sends a JSON array to the default dataset using Apify's REST API. No Apify SDK is used.
Run locally
Python 3.12+ only; no external packages:
cd shopify-public-productsprintf '{"storeUrl":"https://YOUR_PUBLIC_SHOPIFY_STORE/","limit":5}\n' > input.jsonpython src/main.py --input input.json
Local mode writes one JSONL line per product to stdout; logs are on stderr. It does not contact Apify storage.
Store classification and pricing suggestion
- Apify category / industry: E-commerce
- Suggested use case: Product data collection
- Suggested output type: Products
- Suggested pricing: $2.00 USD per 1,000 successfully emitted dataset items ($0.002 each), on a per-result basis.
These are publishing recommendations, not automatically configured billing or store categories. Set the current Store classification and per-result/event pricing separately when publishing. Do not bill for skipped or empty records.