Old Navy API endpoint
Searches product listings across Old Navy, Gap, Banana Republic, and Athleta -- select the storefront with the brand parameter (`on` for Old Navy, `gap` for Gap, `br` for Banana Republic, `at` for Athleta; defaults to `on`). Returns product summaries with pricing, review scores, and every purchasable color variant. This search is best-effort relevance, not a guaranteed keyword match: for an obscure or nonsense keyword the upstream search index falls back to its own recommended results instead of returning an empty list, and there is currently no reliable signal in the response to distinguish a true keyword match from that fallback behavior.
/oldnavy/searchSearches product listings across Old Navy, Gap, Banana Republic, and Athleta. keyword is required. brand selects the storefront and accepts on (Old Navy), gap (Gap), br (Banana Republic), or at (Athleta); defaults to on. page is one-based from 1 to 500 and defaults to 1.
Notable response behavior:
keyword, the upstream search index falls back to its own recommended results instead of returning an empty list, and there is currently no reliable field in the response (no relevance score, no fallback flag, no zero total) to distinguish a true keyword match from that fallback behavior. Treat every response as "what the storefront's own search would show", not as a filtered exact-match result set.total_products and total_pages reflect the upstream's own pagination metadata for the current keyword/brand combination.colors[].id is the value to pass as pid to oldnavy-product for full product-detail data on that color.page beyond the upstream's own last page returns 404.facets lists the available filters (price range, department, review score, color, fit, wash, and others) with live per-option result counts. A range facet (e.g. price) sets is_range true and carries range_min/range_max instead of options.| Field | Filled in, of 60 checked | Values in the sample |
|---|---|---|
| id | 60 | |
| name | 60 | “Mid-Rise Wow Baggy Wide-Leg Jeans” and 55 other values |
| web_product_type | 60 | womens jeans (40), mens jeans (12), girls jeans (4) and 1 more |
| review_score | 59 | 3.2 to 4.82, median 4.61 |
| review_count | 59 | 15 to 42,383, median 5,207 |
| price_min | 60 | 19.99 to 59.99, median 44.99 |
| price_max | 60 | 19.99 to 62.99, median 49.99 |
| sale_price_min | 60 | 11.97 to 54.99, median 19.99 |
| sale_price_max | 60 | 12 to 54.99, median 22.49 |
| thumbnail_url | 60 | content.gapinc.com |
| url | 60 | oldnavy.gap.com |
| colors | 60 | median 5 entries |
| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
| keyword | string | Yes | Search keyword | jeans | |
| brand | string | No | Storefront to search Allowed values: on, gap, br, at. | ||
| page | integer | No | One-based page Minimum: 1. Maximum: 500. | ||
| x-api-key (header) | string | Yes | API key required |
curl -X GET "https://api.crawlora.net/api/v1/oldnavy/search?keyword=jeans&brand=on&page=1" \ -H "x-api-key: $CRAWLORA_API_KEY"
{
"code": 200,
"msg": "OK",
"data": {
"keyword": "jeans",
"brand": "on",
"page": 1,
"page_size": 60,
"total_pages": 12,
"total_products": 699,
"count": 1,
"products": [
{
"id": "788099",
"name": "Mid-Rise Wow Baggy Wide-Leg Jeans",
"review_score": 4.62,
"review_count": 4348,
"price_min": 39.99,
"price_max": 39.99,
"sale_price_min": 26,
"sale_price_max": 26,
"thumbnail_url": "https://content.gapinc.com/b/0060/143/994/cn60143994.png?width=258",
"url": "https://oldnavy.gap.com/browse/product.do?pid=788099002",
"colors": [
{
"id": "788099002",
"name": "Black",
"short_description": "Licorice",
"price": 26,
"regular_price": 39.99,
"percentage_off": 35,
"image_url": "https://content.gapinc.com/b/0060/143/994/cn60143994.png?width=520"
}
]
}
],
"facets": [
{
"name": "price",
"type": "range",
"range_min": 4.99,
"range_max": 64.99,
"is_range": true
},
{
"name": "department",
"label": "department",
"type": "single-select",
"options": [
{
"label": "Women",
"value": "Women",
"count": 282
}
]
}
]
}
}Request schema
No body schema
Response schema
#/definitions/oldnavy.searchResponseDoc
| Field | Type | Required | Enum | Bounds | Example | Description |
|---|---|---|---|---|---|---|
| code | integer | No | 200 | |||
| data | oldnavy.SearchResponse | No | ||||
| data.brand | string | No | ||||
| data.count | integer | No | ||||
| data.facets | array | No | ||||
| data.facets[].is_range | boolean | No | ||||
| data.facets[].label | string | No | ||||
| data.facets[].name | string | No | ||||
| data.facets[].options | array | No | ||||
| data.facets[].options[].count | integer | No | ||||
| data.facets[].options[].label | string | No | ||||
| data.facets[].options[].value | string | No | ||||
| data.facets[].range_max | number | No | ||||
| data.facets[].range_min | number | No | ||||
| data.facets[].type | string | No | ||||
| data.fetched_at | string | No | ||||
| data.keyword | string | No | ||||
| data.page | integer | No | ||||
| data.page_size | integer | No | ||||
| data.products | array | No | ||||
| data.products[].colors | array | No | ||||
| data.products[].colors[].id | string | No | ||||
| data.products[].colors[].image_url | string | No | ||||
| data.products[].colors[].name | string | No | ||||
| data.products[].colors[].percentage_off | integer | No | ||||
| data.products[].colors[].price | number | No | ||||
| data.products[].colors[].regular_price | number | No | ||||
| data.products[].colors[].short_description | string | No | ||||
| data.products[].id | string | No | ||||
| data.products[].name | string | No | ||||
| data.products[].price_max | number | No | ||||
| data.products[].price_min | number | No | ||||
| data.products[].review_count | integer | No | ||||
| data.products[].review_score | number | No | ||||
| data.products[].sale_price_max | number | No | ||||
| data.products[].sale_price_min | number | No | ||||
| data.products[].thumbnail_url | string | No | ||||
| data.products[].url | string | No | ||||
| data.products[].web_product_type | string | No | ||||
| data.source_url | string | No | ||||
| data.total_pages | integer | No | ||||
| data.total_products | integer | No | ||||
| msg | string | No | OK |
| Status | Description | Schema |
|---|---|---|
| 400 | Bad Request | #/definitions/app.Response |
| 404 | Not Found | #/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/oldnavy/search?keyword=jeans&brand=on&page=1" \
-H "x-api-key: $CRAWLORA_API_KEY"