CVS API
CVS front-store data as structured JSON: search with regular and sale prices, promotions, ExtraBucks Rewards and manufacturer coupons and one store's stock, full product detail by URL or id, and in-store, pickup and online stock for up to 20 SKUs at the store you choose.
50 free credits on signup. No card, no CVS account.
{ "data": { "query": "toothpaste", "store_id": "7019", "page": 1, "limit": 20, "total_results": 226, "total_pages": 12, "count": 20, "products": [ { "position": 4, "product_id": "275748", "sku_id": "275748", "name": "Colgate Max Fresh Toothpaste with Mini Breath Strips, Clean Mint", "brand": "Colgate", "price": 4.79, "sale_price": 4.79, "on_sale": false, "rating": 4.7051, "review_count": 1743, "coupon_count": 3, "coupons": [ { "type": "manufacturer", "description": "SAVE $4.00", "coupon_number": "1072114", "expires": "2026-11-29T23:59:59-05:00" } ], "stock": { "in_store": 4, "pickup": 4, "same_day_delivery": 5, "ship": 8017, "ship_available": true } }, { "position": 6, "product_id": "789787", "sku_id": "789787", "name": "Crest 3D White Fluoride Anticavity Whitening Toothpaste, Radiant Mint, 2.4 OZ", "brand": "Crest", "price": 4.69, "sale_price": 3.99, "on_sale": true, "rating": 4.5627, "review_count": 3044, "coupon_count": 2, "coupons": [ { "type": "extrabucks", "description": "$4 ExtraBucks Rewards for purchasing 2 Crest3D 2.4z/StainEraser3.8z/ProHealth3.5-4.3z/Plus 5.4z/3in1 4.6zTP/Oral-BCharcoal/WhiteTB/Scope-Crest 500 mL", "coupon_number": null, "expires": null } ], "stock": { "in_store": 50, "pickup": 46, "same_day_delivery": 4, "ship": 0, "ship_available": false } } ] }, "response_time": 5241}Live call against the real endpoint at store 7019 (New York, NY). 3 free runs, then it's your own key.
What is the Scavio CVS API?
The Scavio CVS API is a REST API that returns CVS front-store data as structured JSON. CVS has no public product API. Its 3 POST endpoints cover search with prices, coupons and store stock, product detail, and stock for 20 SKUs at one store, at 1 credit per call.
- 3
- endpoints, all live in production
- 1
- credit per call, every endpoint
- 20
- SKUs' store stock in one call
The CVS data buyers actually need
What it costs, which coupon applies, and whether it is on the shelf at that store.
Stock for 20 SKUs in one call
POST /api/v1/cvs/stockPass up to 20 SKU ids and a store number: each comes back with units on the shelf, units for pickup and online ship stock. Our capture at store 7019 found 19 units of one Colgate SKU in store and 0 of another.
Search with store stock
POST /api/v1/cvs/searchEvery result carries the regular and sale price, unit price, promotion, rating and that store's in-store, pickup and same-day units. Prices are the same at every store; stock is not.
ExtraBucks and coupons
POST /api/v1/cvs/searchSearch results list the ExtraBucks Rewards offers and manufacturer coupons on each item, with coupon numbers and expiry dates. A Crest toothpaste in our capture carried two.
Product detail
POST /api/v1/cvs/productOne product by URL or id: UPC, size, description, highlights, ingredients, directions, warnings, attributes, category breadcrumbs, images and every variant's SKU id and UPC.
All 3 CVS API endpoints
Every route is a POST, returns JSON, and takes the same API key. 1 credit per successful call. Front-store products only, nothing from the pharmacy.
| Endpoint | Returns | Credits |
|---|---|---|
Search/api/v1/cvs/search | Front-store products, up to 48 per page: regular and sale price, unit price, promotion, rating, review count, ExtraBucks Rewards and manufacturer coupons, and units in store, for pickup and same-day at one store, plus brand, price and rating facets | 1 |
Product detail/api/v1/cvs/product | One product by cvs.com URL or id: price and sale price, promotion end date, UPC, size, description, highlights, ingredients, directions, warnings, attributes, breadcrumbs, images and every variant | 1 |
Store stock/api/v1/cvs/stock | Units for up to 20 SKUs at one store in one call: in store, for pickup, same-day delivery, and online ship stock | 1 |
50 free credits on signup covers 50 CVS calls. There is no store-locator endpoint: store numbers are printed on every cvs.com store page. See plans
Search a store, then check stock for 20 SKUs
Search returns prices, coupons and one store's stock; the stock call checks up to 20 SKUs at any store. The response on the right is a real capture.
from scavio import ScavioClient
client = ScavioClient(api_key="sk_live_your_key")
# Search with stock at store 7019 (New York) - 1 credit
res = client.cvs.search(query="toothpaste", store_id="7019")
p = res["data"]["products"][0]
print(p["name"], p["sale_price"], "was", p["price"], "in store", p["stock"]["in_store"])
# Stock for up to 20 SKUs at one store in one call - 1 credit
skus = [x["sku_id"] for x in res["data"]["products"][:20]]
stock = client.cvs.stock(sku_ids=skus, store_id="7019")["data"]["items"]
print([(i["sku_id"], i["in_store"]) for i in stock if i["in_store"] > 0])
# Full detail for one product (typically 7-37 seconds) - 1 credit
detail = client.cvs.product(product_id=p["product_id"])["data"]
print(detail["upc"], detail["category"]){
"data": {
"query": "toothpaste",
"store_id": "7019",
"page": 1,
"limit": 20,
"total_results": 226,
"total_pages": 12,
"count": 20,
"products": [
{
"position": 4,
"product_id": "275748",
"sku_id": "275748",
"name": "Colgate Max Fresh Toothpaste with Mini Breath Strips, Clean Mint",
"brand": "Colgate",
"price": 4.79,
"sale_price": 4.79,
"on_sale": false,
"rating": 4.7051,
"review_count": 1743,
"coupon_count": 3,
"coupons": [
{
"type": "manufacturer",
"description": "SAVE $4.00",
"coupon_number": "1072114",
"expires": "2026-11-29T23:59:59-05:00"
}
],
"stock": {
"in_store": 4,
"pickup": 4,
"same_day_delivery": 5,
"ship": 8017,
"ship_available": true
}
},
{
"position": 6,
"product_id": "789787",
"sku_id": "789787",
"name": "Crest 3D White Fluoride Anticavity Whitening Toothpaste, Radiant Mint, 2.4 OZ",
"brand": "Crest",
"price": 4.69,
"sale_price": 3.99,
"on_sale": true,
"rating": 4.5627,
"review_count": 3044,
"coupon_count": 2,
"coupons": [
{
"type": "extrabucks",
"description": "$4 ExtraBucks Rewards for purchasing 2 Crest3D 2.4z/StainEraser3.8z/ProHealth3.5-4.3z/Plus 5.4z/3in1 4.6zTP/Oral-BCharcoal/WhiteTB/Scope-Crest 500 mL",
"coupon_number": null,
"expires": null
}
],
"stock": {
"in_store": 50,
"pickup": 46,
"same_day_delivery": 4,
"ship": 0,
"ship_available": false
}
}
]
},
"response_time": 5241
}Why not the official CVS API?
CVS has no public, self-serve API for front-store product, price, coupon or stock data.
CVS, without a product API
- No public API or self-serve developer key for cvs.com products, prices or coupons
- Store stock is shown one product and one store at a time
- ExtraBucks Rewards and manufacturer coupons sit on each listing with no export
- Pickup and same-day availability have to be checked item by item
Scavio CVS API
- One API key, issued at signup, with no CVS account
- Prices, promotions, ExtraBucks and coupons on every search result
- In-store, pickup and online stock for 20 SKUs at one store in a single call
- You pass the store number from the cvs.com store page; there is no store locator
- Same JSON envelope as every other Scavio platform
Scavio returns publicly available front-store data only, never signs in as a CVS customer and returns nothing from the pharmacy.
What developers build with it
Local stock checker
Given a shopping list and a CVS store number, show which items are on the shelf or ready for pickup there, 20 SKUs per call.
search + stockCouponing and deal apps
Combine sale prices, promotions, ExtraBucks Rewards and manufacturer coupons to show what a CVS item really costs this week.
searchDrugstore price tracking
Track CVS regular and sale prices and unit prices for a list of health, beauty and household products over time.
search + productCPG brand monitoring
Watch a brand's CVS shelf presence: search rank, price, promotions, coupon coverage, ratings and in-store stock at the stores you care about.
search + stockProduct catalog enrichment
Fill a catalog with UPCs, sizes, ingredients, directions, warnings, attributes and images from CVS product pages.
productRetail competitive intelligence
Compare CVS prices with Walmart, Target and Dollar General for the same item, on one API key.
search + Walmart + TargetHow to get CVS data as JSON
- 1
Get an API key
Sign up for a Scavio account and copy your key from the dashboard. You get 50 credits free on signup, with no card required and no CVS account.
- 2
Pick a store
Open the CVS store on cvs.com and copy its number: the page shows "Store ID: #7019" and the URL ends in storeid=7019. There is no store-locator endpoint, and search without a store number uses store 7019 in New York.
- 3
Search, then check stock
Send {"query": "toothpaste", "store_id": "7019"} to https://api.scavio.dev/api/v1/cvs/search with an Authorization: Bearer header. Pass the sku_id values you want to /api/v1/cvs/stock to check up to 20 of them at any store in one call.
CVS API FAQ
Does CVS have a public API?
+
No. CVS does not offer a public, self-serve API for cvs.com product, price, coupon or store stock data. The Scavio CVS API fills that gap with 3 POST endpoints that return CVS front-store data as structured JSON: search, product detail and store stock for up to 20 SKUs.
What is the Scavio CVS API?
+
It is a REST API that returns public CVS data as JSON: search with prices, promotions, coupons and one store's stock, full product detail by URL or id, and units in store, for pickup and online for up to 20 SKUs at one store. Every call costs 1 credit.
Does it cover the CVS pharmacy or prescriptions?
+
No. The CVS API covers front-store retail only: health, beauty, personal care and household items sold on cvs.com. There is nothing from the pharmacy, no prescriptions and no patient data.
How do I find a CVS store number?
+
Read it off the store's page on cvs.com: the store number is shown on every cvs.com store page ("Store ID: #7019") and in its URL (.../storeid=7019). The API has no store-locator endpoint, so it cannot turn a ZIP code into store numbers for you.
What happens if I search without a store_id?
+
Search uses the default store, 7019 at 150 East 42nd St, New York, NY 10017, and the response's store_id field says which store was used. Prices do not change, because they are the same at every store; only the stock fields are that store's.
How do I check stock for many products at once?
+
Call /api/v1/cvs/stock with up to 20 sku_ids and a store_id. One call, 1 credit, returns in_store, pickup and ship units for each SKU (same-day units come from search). In our capture at store 7019, two of five Colgate SKUs had 4 and 19 units in store.
What do in_store, pickup, same_day_delivery and ship mean?
+
in_store is units on the shelf at that store, pickup is units you can order online and pick up there, same_day_delivery is units available for same-day delivery from that store (reported by search; null on the stock endpoint), and ship is online stock for shipping, chain-wide. ship_available is true when ship is above 0.
Do CVS prices differ by store?
+
Not in our measurements: prices came back identical at every store we tested, so the API returns one chain-wide price. Stock does differ by store, which is why search and stock take a store_id.
Does the API return ExtraBucks Rewards and coupons?
+
Yes, on search. Each result has coupons[] with type extrabucks (the ExtraBucks Rewards offer text) or manufacturer (coupon number and expiry date), plus coupon_count and the item's promotion text. Product detail returns the promotion and its end date.
Why are product lookups slow?
+
CVS product detail typically takes 7 to 37 seconds (measured 2026-11-01), so set a client timeout of at least 90 seconds. A failed attempt is never charged. When you only need price, coupons and stock, search is faster and returns 20 items per call.
What is the difference between product_id and sku_id?
+
product_id identifies the product page and sku_id the specific variant. They are often equal but not always: one toothpaste in our capture had product_id 1910069 and sku_id 237548. Product detail accepts either; stock takes sku_id values.
What if a store number or SKU is wrong?
+
It is not an error. An unknown store number or SKU reads as 0 units everywhere, so a response where every item shows 0 in store and 0 for pickup is a reason to double-check the store number.
Does the API return CVS reviews?
+
It returns each product's star rating and review count on search and product detail. Review text is not available for CVS.
How much does a CVS request cost?
+
Every CVS endpoint costs 1 credit, including a stock call for 20 SKUs. New accounts get 50 free credits on signup, one time, with no card required. Paid plans start at $30 per month for 7,000 credits.
How fresh is the data?
+
Every request fetches live from CVS at the moment you call it, and nothing is cached. Each response carries fetched_at, the time the data was retrieved.
Which languages and tools are supported?
+
Every endpoint is a plain HTTPS POST with a JSON body, so any language works. Scavio also ships Python and JavaScript SDKs, a remote MCP server at mcp.scavio.dev for AI agents, and an n8n community node, all on the same API key.
Is using CVS data legal?
+
Scavio returns publicly available CVS front-store data and does not access accounts, ExtraCare profiles, order history or anything from the pharmacy. You remain responsible for how you use the data, including compliance with CVS's terms. Talk to your own counsel for your specific use case.
Explore more of Scavio
Walmart API
Search, product, reviews and store-level pricing.
Target API
Search, categories, detail and reviews.
Dollar General API
Store prices, units on hand, deals and digital coupons.
Kroger API
Grocery prices and promos across Kroger banners.
Costco API
Warehouse prices and stock, the coupon book and clearance.
CVS API docs
All 3 endpoints with params and real responses.
Try the CVS API free
50 free credits on signup, no card. Your first request is a POST with a product name in it.