Shopify Public Products Collector avatar

Shopify Public Products Collector

Under maintenance

Pricing

$2.00 / 1,000 results

Go to Apify Store
Shopify Public Products Collector

Shopify Public Products Collector

Under maintenance

Collect 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

Eichan Jolly

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

17 minutes ago

Last modified

Categories

Security

Limited permissions

Share

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

  1. Validates one public Shopify store root storeUrl.
  2. Requests exactly one /products.json?limit=N&page=1 feed page from that store (where N defaults to 5, maximum 50).
  3. Takes up to N products from the public products array, and emits one normalized dataset row per product with a usable ID and handle.
  4. 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.

FieldTypeRequiredDefaultMeaning
storeUrlstringYes—One HTTP(S) Shopify storefront root (no path/query).
limitintegerNo5Maximum 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 products as 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.json on the same store (allowing www hostname 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-products
printf '{"storeUrl":"https://YOUR_PUBLIC_SHOPIFY_STORE/","limit":5}\n' > input.json
python 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.