Fitness apparel catalog and pricing monitoring
Use Gymshark endpoints to turn fitness apparel catalog and pricing monitoring into repeatable API requests with documented inputs and JSON responses.
Turn Gymshark's public Shopify storefront into structured retail data for gym and fitness apparel — full product catalog and detail with every size and color variant, collection browsing, storefront pages, recommendations, and sitemap discovery, all pinned to Gymshark's own storefront URL so no url parameter is needed. Credential-free.
Get Gymshark products, collections, pages, and recommendations as structured JSON through a pinned endpoint family — no url parameter needed.
Endpoint families
6
Documented params
26
Examples
10
Live catalog snapshot
Active endpoints
10
Methods
GET
Required params
14
Schema refs
10
{
"platform": "Gymshark",
"endpoint": "gymshark-store",
"method": "GET",
"path": "/gymshark/store",
"auth": "apiKey"
}Use cases
Get Gymshark products, collections, pages, and recommendations as structured JSON through a pinned endpoint family — no url parameter needed.
Use Gymshark endpoints to turn fitness apparel catalog and pricing monitoring into repeatable API requests with documented inputs and JSON responses.
Use Gymshark endpoints to turn collection and merchandising research into repeatable API requests with documented inputs and JSON responses.
Use Gymshark endpoints to turn storefront page and sitemap discovery into repeatable API requests with documented inputs and JSON responses.
Managed execution
Every figure below is read from the live Gymshark endpoint catalog — 10 endpoints, 26 documented request parameters, and 10 published response schemas — the same catalog Docs and Playground run against.
10 documented Gymshark endpoints, grouped into 6 request families — Products, Collections and Pages, plus 3 more.
26 request parameters are documented across those Gymshark endpoints, 14 of them required — the full input contract is public before you write any integration code.
10 of the 10 Gymshark endpoints ship a recorded example response, and 10 carry a documented response schema — you can code against the real JSON before the first request.
Gymshark endpoints document their error responses (400, 404, 429 and 503) alongside the success schema, so a block, a rate limit, or a missing record comes back as a typed error rather than silently empty data.
10 hosted MCP tools back the Gymshark endpoints, so an agent can call the same routes with the same parameters and the same JSON contract, with no custom glue.
Coverage map
/gymshark/products
/gymshark/collections
/gymshark/pages
/gymshark/sitemap/urls
/gymshark/sitemaps
/gymshark/store
Endpoint catalog
/gymshark/storeReturns storefront metadata for Gymshark (https://row.gymshark.com). The storefront URL is fixed server-side, so no `url` parameter is accepted.
Response notes
- Returns the resolved source URL used for JSON requests. - Includes `myshopify_domain`, store name, currency, country, and published product/collection counts when `/meta.json` exposes them. - Blocked pages, malformed JSON, missing Shopify roots, and unavailable fallback domains return upstream errors. - `transport_mode` is `ssr_embedded` for some stores; it is omitted entirely otherwise. `transport_mode` allowed values: `ssr_embedded` (only ever present, never any other value; omitted for the classic transport).
MCP tool gymshark_store
/gymshark/productsReturns products from Gymshark's (https://row.gymshark.com) public product catalog. The storefront URL is fixed server-side. Valid empty result pages return `200` with an empty products array.
Response notes
- Valid empty result pages return `200` with an empty `products` array. - Product prices are normalized to decimal currency units. - Blocked pages, malformed JSON, and missing `products` roots return upstream errors. - When the response includes `transport_mode: "ssr_embedded"`, it also includes `total_items` and `total_pages`, plus additive per-product fields (`colour`, `canonical_colour`, `discount_percentage`, `rating`, `rating_count`, `collection_tags`, `labels`, per-variant `inventory_quantity`). `limit` is honored as an upper bound; the page size is fixed by the storefront and cannot be requested larger in that mode. All of the above are omitted entirely otherwise. - When the `ssr_embedded` fallback was used, the response may also include `facets` and `facets_stats`, mirroring the storefront's own filter sidebar for that listing. - This brand-pinned endpoint does not accept `sortBy` or facet-filter query parameters (out of scope -- use the generic `/shopify/products` endpoint with `url` set to this brand's storefront for sort/filter support). The response reuses the same shared DTO as the generic family, which carries `sort`/`filters` fields for that feature; they are always omitted here since this endpoint never populates them. `sort` allowed values (never actually returned by this endpoint, listed for schema completeness): `sortLTH`, `sortHTL`, `newest`. This brand-pinned endpoint also does not accept the generic family's `sort_by`/`min_price`/`max_price`/`product_type`/`in_stock_only`/`option_*` Storefront Filtering params (same out-of-scope reasoning -- use the generic `/shopify/products` endpoint with `url` set to this brand's storefront). The response DTO carries the matching `sort_by`/`min_price`/`max_price`/`product_type`/`in_stock_only`/`variant_options` fields for that feature; they are always omitted here since this endpoint never populates them. `sort_by` allowed values (never actually returned by this endpoint, listed for schema completeness): `manual`, `best-selling`, `title-ascending`, `title-descending`, `price-ascending`, `price-descending`, `created-ascending`, `created-descending`. `transport_mode` allowed values: `ssr_embedded`, `storefront_filtered` (only ever these two values; omitted for the classic transport).
MCP tool gymshark_products
/gymshark/products/{handle}Returns product detail for one Gymshark (https://row.gymshark.com) product handle. The storefront URL is fixed server-side; `handle` is the product's URL slug.
Response notes
- Product prices are returned in decimal currency units. - Missing product handles return `404` when Shopify returns not found. - Blocked pages, malformed JSON, and missing product fields return upstream errors. - When the response includes `transport_mode: "ssr_embedded"`, it also carries additive fields (`colour`, `canonical_colour`, `discount_percentage`, `rating`, `rating_count`, `collection_tags`, `labels`, per-variant `inventory_quantity`). `transport_mode` is omitted entirely otherwise. `transport_mode` allowed values: `ssr_embedded` (only ever present, never any other value; omitted for the classic transport).
MCP tool gymshark_product
/gymshark/products/{handle}/recommendationsReturns recommended products for one Gymshark (https://row.gymshark.com) product handle. The storefront URL is fixed server-side.
Response notes
- Missing product handles return `404` when Shopify returns not found while resolving the seed product. - Valid empty recommendation arrays return `200` with an empty `products` array. - Blocked pages, malformed JSON, and missing Shopify roots return upstream errors. - When the response includes `transport_mode: "ssr_embedded"`, it carries the same additive product fields documented for the products endpoint. `transport_mode` allowed values: `ssr_embedded` (only ever present, never any other value; omitted for the classic transport).
MCP tool gymshark_product_recommendations
/gymshark/collectionsReturns collections from Gymshark (https://row.gymshark.com). The storefront URL is fixed server-side. Valid empty result pages return `200` with an empty collections array.
Response notes
- Valid empty result pages return `200` with an empty `collections` array. - Blocked pages, malformed JSON, and missing `collections` roots return upstream errors. - When the response includes `transport_mode: "ssr_embedded"`, `title` is a best-effort derivation from the handle -- **not** the storefront's real display name. `products_count` and other classic-only fields are omitted, never fabricated. - In fallback mode, `handle` is derived from the last path segment of the collection URL and is not guaranteed unique across nested sub-collections; use the item's own `url` to identify a specific one. `transport_mode` allowed values: `ssr_embedded` (only ever present, never any other value; omitted for the classic transport).
MCP tool gymshark_collections
/gymshark/collections/{handle}/productsReturns products from one Gymshark (https://row.gymshark.com) collection. The storefront URL is fixed server-side; `handle` is the collection's URL slug.
Response notes
- Valid empty result pages return `200` with an empty `products` array. - Missing collections return `404` when Shopify returns not found. - Blocked pages, malformed JSON, and missing `products` roots return upstream errors. - When the response includes `transport_mode: "ssr_embedded"`, it also includes `total_items`, `total_pages`, plus additive per-product fields (`colour`, `canonical_colour`, `discount_percentage`, `rating`, `rating_count`, `collection_tags`, `labels`, per-variant `inventory_quantity`) and may include `facets`/`facets_stats`. `limit` is honored as an upper bound only; the page size is fixed by the storefront in that mode. - This brand-pinned endpoint does not accept `sortBy` or facet-filter query parameters (out of scope -- use the generic `/shopify/collections/{handle}/products` endpoint with `url` set to this brand's storefront for sort/filter support). The response reuses the same shared DTO as the generic family, which carries `sort`/`filters` fields for that feature; they are always omitted here since this endpoint never populates them. `sort` allowed values (never actually returned by this endpoint, listed for schema completeness): `sortLTH`, `sortHTL`, `newest`. This brand-pinned endpoint also does not accept the generic family's `sort_by`/`min_price`/`max_price`/`product_type`/`in_stock_only`/`option_*` Storefront Filtering params (same out-of-scope reasoning -- use the generic `/shopify/collections/{handle}/products` endpoint with `url` set to this brand's storefront). The response DTO carries the matching `sort_by`/`min_price`/`max_price`/`product_type`/`in_stock_only`/`variant_options` fields for that feature; they are always omitted here since this endpoint never populates them. `sort_by` allowed values (never actually returned by this endpoint, listed for schema completeness): `manual`, `best-selling`, `title-ascending`, `title-descending`, `price-ascending`, `price-descending`, `created-ascending`, `created-descending`. `transport_mode` allowed values: `ssr_embedded`, `storefront_filtered` (only ever these two values; omitted for the classic transport).
MCP tool gymshark_collection_products
/gymshark/pagesLists Gymshark static pages, 50 per page by default (`limit` up to 250) with a 1-based `page`. Each has its handle, title, URL, plain-text content and timestamps. When `transport_mode` is `ssr_embedded`, items carry only `handle`, `url` and `updated_at`.
Response notes
- Page content is cleaned text from Shopify `body_html`; raw HTML is not returned. - Valid empty page arrays return `200` with an empty `pages` array. - Blocked pages, malformed JSON, and missing Shopify roots return upstream errors. - When the response includes `transport_mode: "ssr_embedded"`, each item only carries `handle`, `url`, and `updated_at` -- no `title`, `id`, or `content`. Call the single-page endpoint per handle for full content. `transport_mode` allowed values: `ssr_embedded` (only ever present, never any other value; omitted for the classic transport).
MCP tool gymshark_pages
/gymshark/pages/{handle}Returns one Gymshark static page by its `handle`, such as `sports-bras`: title, handle, URL, plain-text content, and created, published and updated times. Page HTML is not returned. An unknown handle returns a 404. `id` is absent when `transport_mode` is `ssr_embedded`.
Response notes
- Page content is cleaned text from Shopify `body_html`; raw HTML is not returned. - Missing page handles return `404` when Shopify returns not found. - Blocked pages, malformed JSON, and missing Shopify roots return upstream errors. - When the response includes `transport_mode: "ssr_embedded"`, `content` is plain text rendered from the page's rich-text blocks, and `id` is omitted. `transport_mode` allowed values: `ssr_embedded` (only ever present, never any other value; omitted for the classic transport).
MCP tool gymshark_page
/gymshark/sitemapsLists the child sitemaps in Gymshark's sitemap index. Each entry has its `loc` and a type of `products`, `collections`, `pages`, `blogs`, `agentic_discovery` or `other`. The type is worked out from the sitemap URL.
Response notes
- Sitemap `type` is inferred from the child sitemap URL. - Inferred sitemap types are `products`, `collections`, `pages`, `blogs`, `agentic_discovery`, and `other`. - Blocked pages, malformed XML, and missing sitemap entries return upstream errors.
MCP tool gymshark_sitemaps
/gymshark/sitemap/urlsLists URL entries from Gymshark's sitemaps, filtered by `type` (`all` by default, `products`, `collections`, `pages`, `blogs`, `agentic_discovery` or `other`) and capped by `limit` (default 50, max 250). Each has its `loc`, type, handle, last modified date, change frequency and any images.
Response notes
- The service fetches matching child sitemaps from `/sitemap.xml` until `limit` URL entries is reached. - URL entries include `loc`, inferred `type`, `handle`, `lastmod`, `changefreq`, and optional `images`. - Blocked pages, malformed XML, and missing sitemap entries return upstream errors.
MCP tool gymshark_sitemap_urls
Related APIs
Marketplaces & Retail
Research new, used, and vintage instruments across Reverb listings, seller shops, and the Price Guide. Keep current asking prices separate from historical sales, and preserve model, finish, year, condition, and currency when comparing gear.
Marketplaces & Retail
Collect marketplace product signals from Amazon without building brittle storefront scrapers.
Marketplaces & Retail
Build resale, pricing, and marketplace workflows from structured eBay data.
How to scrape Gymshark
Crawlora's Gymshark endpoints return activewear catalog data as normalized JSON, pinned to row.gymshark.com, Gymshark's rest-of-world storefront. Gymshark does not expose Shopify's classic catalog JSON, so these endpoints read the storefront's own embedded data and flag every response with transport_mode: ssr_embedded. That route gives Gymshark more fields than any other store in this family: ratings, canonical colours, labels, per-size inventory, and filter facets. It also brings a few gaps.
/gymshark/products returns total_items and total_pages: 2,243 items across 17 pages on 2026-09-18. The page size is fixed by the storefront at 60 products. A larger limit is ignored, so keep increasing page instead.
Each product carries colour and canonical_colour, rating and rating_count, labels such as new, discount_percentage (60 on a pair of joggers marked from $50 to $20), and collection_tags like tracksuits and outlet. Each size variant reports its own inventory_quantity. The response also carries facets: gender, fit, activities, garmentRise, and sizeInStock.
Gymshark encodes category as a path, as in Womens>Apparel>Leggings>full_length or Mens>Apparel>Shorts>training. Split on > to get gender, department, category, and sub-style. Products have no vendor field.
/gymshark/store returns no store name, currency, or counts in this mode. /gymshark/pages returns 93 pages that carry only handle, url, and updated_at, with no title or content, so fetch /gymshark/pages/{handle} per page. Gymshark has no search-suggest endpoint. Use collections such as Seamless and New Releases through /gymshark/collections/{handle}/products for discovery.
FAQ
Yes. Because Gymshark is read through its embedded storefront data, each size variant on /gymshark/products carries inventory_quantity, for example 22 units of a size xs.
In ssr_embedded mode the page size is set by Gymshark's storefront, and limit only works as an upper bound. Use total_pages from the response to plan the crawl.
Yes, rating and rating_count are returned on each product. That is unusual in this Shopify storefront family, where the classic catalog JSON carries no review data.
/gymshark/* pins Gymshark's own storefront URL (https://row.gymshark.com) server-side, so every call needs only your Crawlora API key — no url parameter. The same storefront is also reachable through /shopify/* by passing url=https://row.gymshark.com, which is the only way to reach this storefront's sort and filter options on /shopify/products and /shopify/collections/{handle}/products — those two parameters are not exposed on the brand-pinned routes.