Shopify storefront data extraction: products and variants
A platform field guide to Shopify merchant storefronts, product and variant records, source paths, currency context and API access boundaries.
A Shopify merchant uses its own storefront
Illustrative URL patternsA Shopify merchant can use a custom domain or a myshopify.com address. Shopify's own shopify.com domain is its platform website, while merchant storefronts use their own domains. A product handle is the readable path segment after /products/; a collection handle identifies a merchant-organized group under /collections/. Shopify documents custom and myshopify.com domains, plus handle fields in its product and collection models.
Scroll to compare →
| URL pattern | What it represents | Why it matters |
|---|---|---|
https://shopify.com/ | Shopify's platform website | Not a merchant product catalog |
https://merchant.example/ | Reserved placeholder for a merchant storefront | Merchant host and market provide context |
https://merchant.example/products/item-handle | Illustrative product path with a readable handle | A product path can group multiple variants |
https://merchant.example/collections/group-handle | Illustrative merchant-curated collection path | Collection membership is merchandising context |
https://shop-name.myshopify.com/ | Example of a Shopify-assigned merchant domain | Distinct from Shopify's platform website |
The .example URLs are reserved documentation placeholders, not tested endpoints. Merchants may use different themes and storefront experiences, so path and field behavior varies by storefront.
Map Shopify product, variant and observation fields
Shopify documents products and their variants as related catalog records. The datawebot result schema includes a defined subset of that model; Shopify's wider GraphQL fields should not be read as fields in this result.
Scroll to compare →
| Record layer | Fields in the datawebot result | How to interpret |
|---|---|---|
| Product | Product ID, title, product URL, vendor, product type, HTML description and image URLs. | The source handle is used to form the product URL; it is not returned as a separate field. Vendor, type and description can be null. |
| Variant | Variant ID and title, SKU, named option values, price and currency, compare-at price and availability. | SKU and compare-at price can be null. Availability is true, false or unknown; it is not an inventory count. |
| Observation provenance | Storefront ID, source URL, retrieval timestamp and schema version. | Keep source and time with downstream comparisons; the same product can have different source and market observations. |
| Warnings | Warnings can report a 250-variant limit, missing availability or a shortened description. | A warning marks a coverage or mapping limit; do not fill missing values from another product or merchant. |
A Shopify product, variant and collection answer different questions
A product handle identifies a product path, a variant represents an option combination, and a collection is a merchant-organized group. Keep the source URL, selected option and collection context separate when interpreting a storefront result.
Scroll to compare →
| Shopify record or path | Useful source meaning | Comparison boundary |
|---|---|---|
| Product: /products/{handle} | A merchant product page can describe one product and its reported variants. | A readable handle is a path label, not proof of a permanent ID or a one-variant record. |
| Variant option combination | Named options such as size or color describe a specific version of a product. | Keep variant ID, SKU and each option value together; similar titles do not establish identical variants. |
| Collection: /collections/{handle} | A merchant-created grouping can organize products by category, season or promotion. | Membership is merchandising context; it does not establish the merchant's full catalog or private inventory. |
| Selected variant in a URL | A storefront link may include a selected option in its query string. | The datawebot product result includes the product's reported variant set; the selected query parameter does not narrow that result to one option. |
Keep currency and completeness with each Shopify observation
Shopify’s Ajax Product API uses locale-aware URLs and returns monetary fields in the customer’s presentment currency. The current datawebot Shopify product flow is configured for reviewed US/USD storefronts, verifies currency, and permits up to 25 source-page visits per run. These flow limits are separate from Shopify’s API response ceiling.
Scroll to compare →
| Signal or limit | What Shopify or the product result reports | Do not infer |
|---|---|---|
| Price and currency | Variant price and optional compare-at price carry a currency; Shopify documents Ajax money in presentment currency. | That amounts from different currencies, locales, stores or dates are directly comparable. |
| Variant availability | A source-reported boolean can be true, false or unknown in the normalized result. | The number of units in stock, availability in another market or a future restock. |
| Variants per product response | Shopify's Ajax product JSON can contain at most 250 variants; the result can warn when that limit is reached. | That a 250-entry response contains every variant the merchant configured. |
| Run completeness | A Shopify data run allows at most 25 page visits, including currency verification. | That a bounded run reached every collection, product or private inventory record. |
Choose a Shopify data path by storefront and owner
Shopify documents different routes for public theme data, buyer-facing storefront experiences and merchant-authorized operations. Platform documentation describes how those routes work; each merchant's own terms and robots directives remain tied to its storefront domain.
Scroll to compare →
| Data path | What Shopify documents | Boundary to preserve |
|---|---|---|
| Theme Ajax API | Unauthenticated JSON for Shopify-hosted themes, including a locale-aware product endpoint. | Shopify says the Ajax API is not for custom storefronts and remains subject to abuse-prevention measures. |
| Storefront API | A buyer-facing API with tokenless access for basic data and token-based access for additional features and scopes. | Documented API availability does not establish that a specific merchant has granted a particular app access. |
| Admin API | An app authenticates on behalf of a merchant and receives the data allowed by granted scopes. | Merchant-owned catalog, customer or inventory operations are not public storefront fields. |
| Merchant site rules | Terms and robots directives belong to the specific storefront domain and its operator. | Shopify's API documentation is not a blanket permission to collect or reuse every merchant's content. |
Content reviewed 2026-10-07.