Target API endpoint
Searches Target products and returns products plus every filter group and option available for the current result set. Pass option ids back through filter_ids as a comma-separated list. A zero total with an empty products list is a valid no-results response. The sort enum accepts `relevance`, `featured`, `price-low`, `price-high`, `rating`, `bestselling`, and `newest`.
/target/searchSearches Target products. q is required and must contain 2-200 characters. page is one-based from 1 to 50 and defaults to 1. store_id selects the pricing store and defaults to 2885; look up real store IDs near a location with /target/stores. filter_ids optionally accepts up to 40 comma-separated option IDs returned in filter_groups or by /target/filter-options.
sort accepts relevance, featured, price-low, price-high, rating, bestselling, or newest and defaults to relevance. Every response includes the current dynamic filter groups and options. A zero total with an empty products list is a valid no-results response.
| Field | Filled in, of 24 checked | Values in the sample |
|---|---|---|
| tcin | 24 | 12,954,151 to 1,010,020,055, median 16,849,682 |
| parent_tcin | 8 | 89,133,679 to 95,242,666, median 89,169,599 |
| title | 24 | “Cafe Bustelo Espresso Dark Roast Ground Coffee - 36oz” and 23 other values |
| url | 24 | target.com |
| primary_image_url | 24 | target.scene7.com |
| brand | 24 | “Cafe Bustelo” and 13 other values |
| category_id | 24 | |
| parent_category_id | 24 | |
| price | 24 | |
| rating | 24 |
| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
| q | string | Yes | Product search query | coffee | |
| page | integer | No | One-based page (1-50) Minimum: 1. Maximum: 50. | ||
| sort | string | No | Result order Allowed values: relevance, featured, price-low, price-high, rating, bestselling, newest. | ||
| store_id | integer | No | Target store id used for pricing Minimum: 1. | ||
| filter_ids | string | No | Comma-separated Target filter option ids | 5tdv1,fwtfr | |
| x-api-key (header) | string | Yes | API key required |
curl -X GET "https://api.crawlora.net/api/v1/target/search?q=coffee&page=1&sort=relevance" \ -H "x-api-key: $CRAWLORA_API_KEY"
{
"code": 200,
"msg": "OK",
"data": {
"query": "coffee",
"page": 1,
"page_size": 24,
"sort": "relevance",
"store_id": 2885,
"total": 20939,
"count": 1,
"applied_filter_ids": [],
"filter_groups": [
{
"id": "d_deals",
"display_name": "Deals",
"type": "checkbox",
"options": [
{
"id": "5tdv1",
"display_name": "Clearance",
"value": "clearance"
}
]
}
],
"products": [
{
"tcin": "12954151",
"title": "Starbucks Pike Place Roast Medium Ground Coffee - 12oz",
"brand": "Starbucks",
"price": {
"current": 12.79,
"formatted": "$12.79",
"store_id": 2885
}
}
]
}
}Request schema
No body schema
Response schema
#/definitions/target.searchResponseDoc
| Field | Type | Required | Enum | Bounds | Example | Description |
|---|---|---|---|---|---|---|
| code | integer | No | 200 | |||
| data | target.SearchResponse | No | ||||
| data.applied_filter_ids | array | No | ||||
| data.count | integer | No | 24 | |||
| data.fetched_at | string | No | ||||
| data.filter_groups | array | No | FilterGroup record, 10 fields: display_name, expanded, id, options, type. Described under List Target filter options API. | |||
| data.page | integer | No | 1 | |||
| data.page_size | integer | No | 24 | |||
| data.products | array | No | ||||
| data.products[].brand | string | No | Starbucks | |||
| data.products[].category_id | string | No | x2hqv | |||
| data.products[].parent_category_id | string | No | 4yi5p | |||
| data.products[].parent_tcin | string | No | 89169599 | |||
| data.products[].price | target.Price | No | ||||
| data.products[].price.current | number | No | 12.79 | |||
| data.products[].price.formatted | string | No | $12.79 | |||
| data.products[].price.regular | number | No | 12.79 | |||
| data.products[].price.store_id | integer | No | 2885 | |||
| data.products[].price.unit_formatted | string | No | $1.07/ounce | |||
| data.products[].primary_image_url | string | No | ||||
| data.products[].rating | target.Rating | No | ||||
| data.products[].rating.average | number | No | 4.51 | |||
| data.products[].rating.rating_count | integer | No | 1586 | |||
| data.products[].rating.review_count | integer | No | 1076 | |||
| data.products[].tcin | string | No | 12954151 | |||
| data.products[].title | string | No | Starbucks Pike Place Roast Medium Ground Coffee - 12oz | |||
| data.products[].url | string | No | ||||
| data.query | string | No | coffee | |||
| data.sort | string | No | relevance | |||
| data.source_url | string | No | ||||
| data.store_id | integer | No | 2885 | |||
| data.total | integer | No | 20939 | |||
| data.total_pages | integer | No | 50 | |||
| 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/target/search?q=coffee&page=1&sort=relevance" \
-H "x-api-key: $CRAWLORA_API_KEY"