Price tracking APIs: what they return and what they don't
A price tracker API can mean a search snapshot, seller offers or a stored price history. What each returns, a real sample payload and a checklist to choose.
"Price tracker API" is used for three different products. Some return a snapshot of prices from a search across shops. Some return every seller's offer for one product. Some return a stored price history that the provider has been collecting for you. Many APIs do one or two of these, and the marketing often blurs the line.
This guide separates the three, shows a real response from a product search and an offers lookup run on 18 Oct 2026 against US shops, and gives a checklist for choosing an API for a price tracking project.
What are the three kinds of price API?
| Kind | You send | You get back | Who keeps the history |
|---|---|---|---|
| Search snapshot | A product name or query, a country | A list of matching listings across shops, each with a price and shop | You |
| Seller offers | One product identifier | Every seller found for that product: price, shipping, total, stock note, link | You |
| Stored price history | A product identifier, a date range | Prices recorded at past dates | The provider |
The first two answer "what does it cost now, and where?" The third answers "what did it cost last month?" Only the third can answer a question about the past without you having collected anything. If an API returns only the first two, every chart you draw later is built from the calls you made and stored.
Ask any provider directly which of these it offers. If the answer to "how far back does your history go?" is "from the day you start calling us", you are buying snapshots, and you own the history.
datawebot is the first two. Through its MCP server, search_products returns a search snapshot across online shops and get_product_offers returns seller offers with direct shop links. It does not store price history, run scheduled checks or send alerts. Your script or agent stores the results.
What does a search snapshot return?
Here is one real result from a datawebot search_products call for "Nintendo Switch 2 console", country US, retrieved 18 Oct 2026 at 07:20 UTC. The image URL is shortened and the daily counter is removed; nothing else is changed.
{
"data": {
"results": [
{
"product_id": "11987648482369059995",
"title": "Nintendo Switch 2",
"url": null,
"shop": "Walmart",
"price_text": "$591.90",
"price": 591.9,
"currency": "USD",
"original_price_text": null,
"rating": 4.8,
"rating_count": 891,
"image_url": "https://...",
"condition": null,
"tag": null,
"delivery": "Free delivery by Tue",
"snippet": "Performs well (121 user reviews)",
"has_offers": true
}
]
},
"meta": {
"source": "shopping_search",
"best_effort": true,
"as_of": "2026-10-18T07:20:34.835Z",
"query": "Nintendo Switch 2 console",
"country": "US",
"sites": [],
"catalog_version": "2026-10-15.4"
}
}
Things to notice:
as_ofis the retrieval time. Store it with every row. A price without a time is not usable for tracking.priceandprice_textare both present. Use the number for math and keep the text for audits.conditionwas empty here. Other rows in the same response said "refurbished" or "pre-owned". An empty value does not prove the item is new.urlis null on search results. The direct link to the shop comes from the offers call.product_idis the key you pass to the offers call. It identifies the product in datawebot results, not a UPC or a retailer SKU.
The same response held nine other results: the console at GameStop for $499.99, a refurbished console at Target for $479.99, two rental listings at $27.99, a "sealed" collector listing at $99.99, a pre-owned console at $399.99 and three bundles or third-party listings. Any price API that searches by name will return this kind of mix. Filtering is your job, and our product matching guide covers how to do it well.
What do seller offers return?
The offers call for the GameStop result above returned 13 sellers. One of them, unchanged apart from the shop logo field removed:
{
"shop": "BrandsMart USA",
"title": "2 Gaming Console",
"url": "https://www.brandsmartusa.com/products/electronics-gaming-nintendo-switch-2-gaming-console?srsltid=...",
"price_text": "$499.99",
"price": 499.99,
"currency": "USD",
"total_text": "$599.99",
"shipping_text": "+ $100.00",
"original_price_text": null,
"discount": null,
"rating": 4.6,
"rating_count": 242,
"details": ["In stock online", "Delivery between Oct 22 – 27 $100", "30-day returns"],
"payment_methods": "PayPal, Klarna accepted",
"tag": null
}
This row is why offers matter for price tracking. The list price, $499.99, matched GameStop, Best Buy, Target and Nintendo in the same response. The total with delivery, $599.99, did not. A tracker that stores only price would miss a $100.00 difference that a shopper sees at checkout.
Also note the title, "2 Gaming Console". The seller's listing title does not include the brand. If your matching rule requires "switch 2" in the title, this offer is dropped, even though the link shows it is the console. Decide whether you prefer to miss a valid offer or to risk a wrong one, and make that choice explicit in your filter.
The offers response carries its own meta.as_of (07:20:43 UTC for this call), a best_effort flag, and a summary that tells the caller to check that listing titles match. It also returns product details: the rating breakdown, a price range across sellers ("$499-$500" for this product), features and a few reviews.
What happens when you restrict the search to certain shops?
Many teams only care about a few retailers. datawebot's search_products accepts up to five shop domains in sites. When we searched "Sony WH-1000XM5" with sites set to bestbuy.com, walmart.com and target.com (18 Oct 2026, 07:20 UTC), the response said there were no shopping listings from those shops for the query, and returned direct pages on those sites instead, with meta.source set to web_search:
- Best Buy product pages for the headphones in black, blue and smoky pink, plus three Best Buy review pages,
- a Walmart product page and a Target product page,
- a Walmart page titled "Sony Xm5 Price History", the only result with a price ($159.99), which is a Walmart listing page rather than one product.
All ten results had a product_id of null, so you cannot request offers for them, and nine of the ten had no price at all. They are useful as links to the right product pages, not as price data. A good price API should tell you when this happens; check the source field rather than assuming every row has a price.
How do you choose a price tracker API?
Run a short test with your own basket before you commit. Check each of these:
- Timestamp on every row. Is there a retrieval time per response or per row? Is it in a standard format such as RFC 3339?
- Total price. Does the API return shipping and a total, or only the list price?
- Condition. Is new, refurbished and used marked, and how often is the field empty?
- Seller identity. Does it separate the retailer from a third-party seller on that retailer's site?
- Direct links. Can a person click through and see the same offer?
- Seller count. For your basket, how many sellers come back per product? Some products return one seller, some return a dozen.
- Failure shape. What does a failed or rate-limited call return? An error you can log, or an empty list that looks like "no sellers"?
- Limits and cost. What counts against your quota: a call, a result, a page? datawebot search and offers are free to try within a daily allowance, and each response reports how many searches are left today.
- History. Does the provider store history? If not, budget for your own storage from day one.
- Agent access. Can your AI agent call it directly? datawebot is an MCP server, so Claude, ChatGPT and coding agents can call its tools without custom glue code. The MCP tools specification describes how agents discover and call them.
Our overview of how ecommerce price scrapers work explains what sits behind APIs like these, if you want to compare a provider with building your own collection.
What should you store if the API keeps no history?
One row per seller offer per check:
| Column | Example from the 18 Oct 2026 pull |
|---|---|
| checked_at | 2026-10-18T07:22:11+00:00 (your clock) |
| as_of | 2026-10-18T07:22:13.246Z (from the API) |
| item | switch2 (your basket key) |
| product_id | 2209987801889840605 |
| shop | Best Buy |
| title | Switch 2 System |
| price / total / currency | 499.99 / 499.99 / USD |
| url | the shop link without tracking parameters |
Keep failed checks out of the price table and log them separately, so a gap never looks like a price of zero. The price history database recipe covers schema choices in more depth, and our tutorial build a price tracker with an AI agent creates exactly this table with runnable Python and shows real output.
Where does an API fit in a tracking process?
The API is one step. Before it, you choose the basket and the matching rules. After it, you store, compare and review. Competitor price tracking across US retailers walks through the whole process for pricing teams. If you are enriching catalog records rather than tracking prices, product data enrichment covers which fields matter, and ecommerce analytics tools sorts the wider tool market by job.
To try datawebot from a coding agent, tell it: "set up https://mcp.datawebot.com/setup.md". It signs you in by email, with no key to copy. In Claude or ChatGPT, add https://mcp.datawebot.com/mcp as a custom connector.
What are the limits?
- Best-effort snapshots. All figures above were retrieved on 18 Oct 2026 between 07:20 and 07:22 UTC. They are not current prices and were not verified against the shops.
- No history, schedule or alerts. datawebot returns what it finds when you call. Anything over time is built from rows you store.
- No exact-model guarantee. Searches by name return other models, accessories, refurbished items and rentals. Filter on title, condition and price.
- Seller coverage varies. Thirteen sellers for one product does not mean thirteen for the next.
- Online prices only. In-store, ZIP-code and membership prices are not covered.
- Some sources are limited. Amazon results are an invite-only preview on datawebot, and Shopify store extraction is temporarily unavailable. Plan around the search and offers tools.
Frequently asked questions
What is a price tracker API?
A price tracker API is an interface a program calls to get product prices. It can return a search snapshot across shops, the seller offers for one product, or a stored price history. Check which of the three you are getting before you design a tracker around it.
Is there a free price tracking API?
datawebot's product search and seller offers are free to try with an email sign-in, within a daily allowance. They return snapshots and offers, not stored history, so you keep the history yourself.
Does a price tracking API store price history?
Some do; many do not. An API that only returns current search results or seller offers gives you a snapshot each time you call. To see changes over time, schedule your calls and store each result with its retrieval time.
How do I get prices from Walmart, Best Buy and Target with one API?
Search by brand and model with country US, then request the seller offers for the matching product. In our 18 Oct 2026 test, the offers for the Nintendo Switch 2 included Best Buy, Target and a third-party seller on Walmart, each with a direct link and a total price.
Can an AI agent call a price API directly?
Yes, if the API is exposed as an MCP server or the agent can make HTTP calls. datawebot is an MCP server at https://mcp.datawebot.com/mcp, so agents in Claude, ChatGPT and coding tools can call search_products and get_product_offers directly.
Sources
- https://www.datawebot.com/llms.txt
- https://mcp.datawebot.com/setup.md
- https://modelcontextprotocol.io/specification/2025-06-18/server/tools
- https://www.datawebot.com/learn/build-product-price-history-database
- https://www.datawebot.com/learn/how-ecommerce-price-scrapers-work
- https://www.rfc-editor.org/rfc/rfc3339
Put product data in your agent's hands.
Connect a coding agent, or check how page-based credits work before you run anything.