PristineMarketplace API endpoint
Returns products from Pristine Marketplace's (https://www.pristinemarketplace.com) own full-text search, distinct from `/pristine-marketplace/search/suggest`'s predictive suggestions. The storefront URL is fixed server-side. Per-page size is fixed (16 products per page) and is not adjustable; `limit` is honored only as an upper bound on the returned page.
/pristine-marketplace/searchThis is a brand-pinned endpoint: the storefront URL (https://www.pristinemarketplace.com) is fixed server-side.
Query parameters:
q: required. Search query text.page: optional integer. 1-based page number. Default: 1.limit: optional integer. Maximum products to return. Default: 50; maximum: 250 -- but the returned page never exceeds the storefront's own fixed 16-per-page search results grid, regardless of a higher requested limit.Notable response behavior:
total_count reflects the storefront's own true result count (e.g. "413 results found for jordan"), not just the count on this page.200 with an empty products array. This is distinguished from parser drift using the page's own "No results found for ..." status marker; zero product cards without that marker present is treated as an upstream error instead of a silent empty success.available is currently always true: broad live sampling (~48 cards across multiple search queries) found no sold-out item in this storefront's search results at all, suggesting sold-out items are excluded from search results entirely rather than shown as unavailable.| Field | Filled in, of 16 checked | Values in the sample |
|---|---|---|
| handle | 16 | |
| title | 16 | “Bulls Michael Jordan Signed Nike Air Jordan V Size 13 Shoes…” and 15 other values |
| url | 16 | pristinemarketplace.com |
| price | 16 | 69 to 89,999, median 14,999 |
| available | 16 | true in 16 of 16 |
| images | 16 | median 1 entry |
| featured_image | 16 | pristinemarketplace.com |
| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
| q | string | Yes | Search query text | jordan | |
| page | integer | No | 1 | 1-based page, defaults to 1 | 1 |
| limit | integer | No | 50 and supports up to 250 | Maximum products, defaults to 50 and supports up to 250, but never exceeds the storefront's own fixed 16-per-page grid | 16 |
| x-api-key (header) | string | Yes | API key required |
curl -X GET "https://api.crawlora.net/api/v1/pristine-marketplace/search?q=jordan&page=1&limit=10" \ -H "x-api-key: $CRAWLORA_API_KEY"
{
"code": 200,
"msg": "OK",
"data": {
"store_url": "https://www.pristinemarketplace.com",
"source_url": "https://www.pristinemarketplace.com/search?q=jordan&type=product",
"query": "jordan",
"page": 1,
"limit": 16,
"total_count": 413,
"total_pages": 26,
"products": [
{
"handle": "bulls-michael-jordan-signed-nike-air-jordan-v-size-13-shoes-w-original-box-bas",
"title": "Bulls Michael Jordan Signed Nike Air Jordan V Size 13 Shoes w/ Original Box BAS",
"url": "https://www.pristinemarketplace.com/products/bulls-michael-jordan-signed-nike-air-jordan-v-size-13-shoes-w-original-box-bas",
"price": 26999,
"available": true
}
]
}
}Request schema
No body schema
Response schema
#/definitions/shopifybrands.siteSearchResponseDoc
| Field | Type | Required | Enum | Bounds | Example | Description |
|---|---|---|---|---|---|---|
| code | integer | No | 200 | |||
| data | shopify.SiteSearchResponse | No | ||||
| data.limit | integer | No | 20 | |||
| data.page | integer | No | 1 | |||
| data.products | array | No | ||||
| data.products[].available | boolean | No | Whether at least one variant is available to buy. | |||
| data.products[].canonical_colour | string | No | black | Main colour name the storefront groups the product under, for example `black`. | ||
| data.products[].collection_tags | array | No | Collections the product is listed in, as the storefront labels them. | |||
| data.products[].colour | string | No | black | The fields below are only populated when the product was resolved via the embedded-SSR-JSON fallback transport (see ssr_fallback.go) and the source page exposed this data; they are additive and never populated for classic-store responses. | ||
| data.products[].compare_at_price | number | No | 120 | Original price before discount, in the store's currency. The highest compare-at price across variants. | ||
| data.products[].condition | string | No | Excellent | Condition is only populated for resale-marketplace search results (Fashionphile's AlgoliaSearch, Rebag's StorefrontSearch -- see search.go) whose catalog data exposes a condition grade. Never populated for any other brand or endpoint in this family. | ||
| data.products[].created_at | string | No | Time the record was created, as Shopify returns it. | |||
| data.products[].description | string | No | Product description as plain text. | |||
| data.products[].discount_percentage | number | No | 20 | Discount currently applied to the product, as a percentage. | ||
| data.products[].featured_image | string | No | URL of the product's main image. | |||
| data.products[].handle | string | No | mens-wool-runners | URL slug of the product, for example `mens-wool-runners`. | ||
| data.products[].id | string | No | 6616124981328 | Shopify product id. | ||
| data.products[].images | array | No | Images of the product, in the storefront's order. | |||
| data.products[].images[].alt | string | No | Product image | Alternative text of the image. | ||
| data.products[].images[].created_at | string | No | Time the record was created, as Shopify returns it. | |||
| data.products[].images[].height | integer | No | 1600 | Image height in pixels. | ||
| data.products[].images[].id | string | No | 36411373027408 | Shopify image id. | ||
| data.products[].images[].position | integer | No | 1 | Position of the image in the product's image list, starting at 1. | ||
| data.products[].images[].updated_at | string | No | Time the record was last updated, as Shopify returns it. | |||
| data.products[].images[].url | string | No | https://cdn.shopify.com/s/files/1/example.jpg | URL of the image file. | ||
| data.products[].images[].variant_ids | array | No | Ids of the variants this image is attached to. | |||
| data.products[].images[].width | integer | No | 1600 | Image width in pixels. | ||
| data.products[].labels | array | No | new | Badges the storefront shows on the product, for example `new`. | ||
| data.products[].options | array | No | Options the product varies by, such as size or colour. | |||
| data.products[].options[].name | string | No | Size | Option name, for example `Size`. | ||
| data.products[].options[].position | integer | No | 1 | Position of the option on the product, starting at 1. | ||
| data.products[].options[].values | array | No | Values the option can take, for example `S` or `M`. | |||
| data.products[].price | number | No | 98 | Current price in the store's currency. The lowest variant price when variants are listed. | ||
| data.products[].product_type | string | No | Shoes | Product type set by the merchant, for example `Shoes`. | ||
| data.products[].published_at | string | No | Time the record was published, as Shopify returns it. | |||
| data.products[].rating | number | No | 4.2 | Average customer rating shown by the storefront. | ||
| data.products[].rating_count | integer | No | 1549 | Number of customer ratings behind `rating`. | ||
| data.products[].tags | array | No | Tags the merchant attached to the product. | |||
| data.products[].title | string | No | Men's Wool Runners | Product name as shown on the storefront. | ||
| data.products[].updated_at | string | No | Time the record was last updated, as Shopify returns it. | |||
| data.products[].url | string | No | https://www.allbirds.com/products/mens-wool-runners | Storefront page URL of the product. | ||
| data.products[].variants | array | No | Purchasable variants of the product, such as each size and colour. | |||
| data.products[].variants[].available | boolean | No | Whether this variant is currently available to buy. | |||
| data.products[].variants[].barcode | string | No | Barcode of the variant, such as a UPC or EAN. | |||
| data.products[].variants[].compare_at_price | number | No | 120 | Original price before discount, in the store's currency. | ||
| data.products[].variants[].created_at | string | No | Time the record was created, as Shopify returns it. | |||
| data.products[].variants[].featured_image | string | No | URL of the image shown for this variant. | |||
| data.products[].variants[].grams | integer | No | 400 | Weight of the variant in grams. | ||
| data.products[].variants[].id | string | No | 34761278160941 | Shopify variant id. | ||
| data.products[].variants[].inventory_quantity | integer | No | 24 | InventoryQuantity is only populated via the embedded-SSR-JSON fallback transport (see ssr_fallback.go); classic-store responses never set it. | ||
| data.products[].variants[].option1 | string | No | Value of the product's first option for this variant, for example a size. | |||
| data.products[].variants[].option2 | string | No | Value of the product's second option for this variant. | |||
| data.products[].variants[].option3 | string | No | Value of the product's third option for this variant. | |||
| data.products[].variants[].position | integer | No | 1 | Position of the variant in the product's variant list, starting at 1. | ||
| data.products[].variants[].price | number | No | 98 | Current price of the variant in the store's currency. | ||
| data.products[].variants[].product_id | string | No | 6616124981328 | Shopify id of the product the variant belongs to. | ||
| data.products[].variants[].requires_shipping | boolean | No | Whether the variant is a physical item that needs shipping. | |||
| data.products[].variants[].sku | string | No | A123 | Merchant stock keeping unit code of the variant. | ||
| data.products[].variants[].taxable | boolean | No | Whether tax is charged on the variant. | |||
| data.products[].variants[].title | string | No | Natural Black / 10 | Variant name, for example `Natural Black / 10`. | ||
| data.products[].variants[].updated_at | string | No | Time the record was last updated, as Shopify returns it. | |||
| data.products[].vendor | string | No | Allbirds | Brand or vendor name set by the merchant. | ||
| data.query | string | No | jordan | |||
| data.source_url | string | No | ||||
| data.store_url | string | No | https://www.pristinemarketplace.com | |||
| data.total_count | integer | No | 413 | |||
| data.total_pages | integer | No | 26 | |||
| msg | string | No | OK |
| Status | Description | Schema |
|---|---|---|
| 400 | Bad Request | #/definitions/app.Response |
| 429 | Too Many Requests | #/definitions/app.Response |
| 503 | Service Unavailable | #/definitions/app.Response |
Use environment variables for secrets and keep Crawlora API keys server-side.
curl -X GET "https://api.crawlora.net/api/v1/pristine-marketplace/search?q=jordan&page=1&limit=10" \
-H "x-api-key: $CRAWLORA_API_KEY"