What it does
The Bulk Product API returns competitive pricing data for up to 1,000 SKUs at once.
It’s designed for large-scale automated processing where teams need daily or hourly competitive snapshots.
Best for
Pricing teams adjusting hundreds of SKUs at a time
BI dashboards that need fresh competitive data
Daily price-gap pipelines feeding internal tools
Automated MAP monitoring
Typical use cases
Daily ingestion into a data warehouse
Competitive feeds for rule-based pricing engines
Batch comparisons of key SKUs vs top competitors
API Request Format
GET request.
Base URL: https://pi-api.wiser.com
Path: /api/v1/products?key=<your_api_key>&page=<page_num>&crawl_recency_hours=<hours>
key=<your_api_key>
Is a required parameter.
It corresponds to the unique account API authentication key.
Ex: key=rWotPeHKnKgdNdUv6VC7YM9yrTkwzWTx
page=<page_num>
Is an optional parameter. It only accepts positive integer numbers.
It corresponds to the number of the page being requested.
Ex: page=1.
crawl_recency_hours=<hours>
Is an optional parameter. It only accepts positive integer numbers.
If used it will only return competitor products extracted in the last ‘selected number’ hours.
Ex: crawl_recency_hours=24
API Response Format
This API returns the latest extracted pricing data in pages - batches of up to 1,000 customer SKU products, including all associated competitor listings.
Successful response (status: 200)
Structure: {"data": [], "pagination_details": {}}
{"data": [
{
“sku”: { // information about customer product
"master_id": <str> non-nullable, // unique id of this master product in Wiser systems
“environment”: <str> non-nullable, // your PI environment where the data is being fetched from
“assortment”: <boolean> non-nullable, // false indicates this is a customer provided SKU; true is a generic clustering of similar products
"sku": <str> nullable, // your product's SKU alphanumeric code
"title": <str> nullable, // your product's title
“category_level_1”: <str> nullable, // your level 1 category name
“category_level_2”: <str> nullable // your level 2 category name
},
“matched_products”: [ // information about each competitor match
{
"id": <str> non-nullable, // unique id of this product in Wiser systems
"store_name": <str> non-nullable, // e-commerce store name
“marketplace_seller”: <str> nullable, // name of the lowest price seller if the store is a marketplace
"url": <str> non-nullable, // product's listing URL
“match type”: <str> non-nullable, // if the match type is 'exact' or 'equivalent'
"crawl_date": <date YYYY-MM-DD HH:MM:SS> non-nullable, // last crawl timestamp in UTC
"previous_price": <float> nullable, // second last price collected
"price": <float> non-nullable, // product listing's price
"regular_price": <float> nullable, // listing's regular price, aka “strike-through price”
“savings”: <float> nullable, // difference between price and regular price in monetary value
"savings_message”: <str> nullable, // promotional messages (ex: save $50 buying two or more).
“special_offer”: <string> nullable, // used to capture other promotional messages such as membership discounts
"shipping_price": <float> nullable, // product listing's shipping price
“shipping_message”: <str> nullable, // shipping message on the page (ex: "buy now receive tomorrow").
"in_cart": <boolean> nullable, // if price was extracted after adding item to cart
"availability": <boolean> nullable // product listing's stock information
}
{ …. } // subsequent set of attributes for each one of the products matched to this particular SKU
]
},
{
“sku”: {….},
“matched_products”: [ {…} ]
}
],
“pagination_details": { // information about the quantity of data available
“page_size”: <int> non-nullable, // number of products (your SKU) in the current page
“total_pages”: <int> non-nullable // total number of available pages
“page”: <int> non-nullable, // corresponds to the number of the current page and is only present when using the page parameter in the request
“next_page”: <str> nullable // contains the API request URL for the next page and is only present when there is no page parameter in the request
}
}
