Walgreens API & Scraper
Walgreens API returns live Walgreens data as clean JSON for walgreens The primary endpoint, search, returns matching records including product id, sku id, title, display title and brand.
🤖 Using an AI assistant? Copy this link into ChatGPT / Claude / Cursor — it reads every endpoint and parameter instantly and tells you if this API fits your use case.
Developers reach for it when they need to track product listings, prices, availability, variants and reviews without maintaining one-off scraping code or separate API contracts. If you were about to build or fix a Walgreens scraper, this API is the maintained alternative — it returns the same data as clean JSON, with the proxies, rotation and anti-bot handling already solved. This page covers the live example, request shape, response shape and available actions: search, category/products, product/detail, product/batch. Every request uses the same ReefAPI envelope, one API key and one shared credit pool, so it fits alongside the rest of your data stack.
Real request and response JSON
Captured from the indexed primary action, search, on .
{
"method": "POST",
"url": "https://api.reefapi.com/walgreens/v1/search",
"headers": {
"x-api-key": "$REEF_KEY",
"content-type": "application/json"
},
"body": {
"query": "ibuprofen",
"max_results": 24
}
}{
"ok": true,
"meta": {
"api": "walgreens",
"endpoint": "search",
"mode": "live",
"latency_ms": 2175.8,
"record_count": 24,
"bytes": 903533,
"cache_hit": false,
"completeness_pct": 22,
"stop_reason": "limit_reached",
"upstream_requests": 1,
"charged_credits": 3,
"version": "0.1.0",
"request_id": "0df1efc2b6ff447e"
},
"data": {
"results": [
{
"product_id": "300394826",
"sku_id": "400615937",
"title": "Ibuprofen Mini Softgels",
"display_title": "Walgreens Ibuprofen Mini Softgels",
"url": "https://www.walgreens.com/store/c/walgreens-ibuprofen-mini-softgels/ID=300394826-product",
"brand": "Walgreens",
"brand_id": "118",
"size": "20 ea",
"product_type": "Non-Aspirin Pain Relievers",
"upc": "31191720827",
"gtin": "00311917208275",
"store_upc": "311917208275",
"pln": "40000487581",
"image": "https://pics.walgreens.com/prodimg/615937/450.jpg",
"image_thumb": "https://pics.walgreens.com/prodimg/615937/155.jpg",
"rating_half_star": 4.5,
"rating_display": "4.5 out of 5",
"review_count": 134,
"in_stock": true,
"online_status": "instock",
"store_status": "instock",
"clearance": false,
"own_brand": true,
"age_restricted": false,
"fsa_hsa_eligible": true,
"promo_label": "SALE",
"coupon_label": null,
"coupon_terms": null,
"sitewide_offer": "$5 OFF $25+ sitewide with code NOW5 or $10 OFF $40+ sitewide with code NOW10",
"active_ingredients": [
"Solubilized Ibuprofen Equal To 200 mg Ibuprofen (NSAID)*",
"(Present as the free acid and potassium salt)",
"*Nonsteroidal Anti-Inflammatory DrugPain Reliever/Fever Reducer"
],
"inactive_ingredients": [
"FD&C Green #3",
"Gelatin",
"Medium-Chain Triglycerides"
],
"category_ids": {
"tier1": "359438",
"tier2": "360547",
"tier3": "361471"
},
"same_day_purchase_limit": 12,
"currency": "USD",
"price": 4.49,
"price_display": "$4.49",
"price_form": "single",
"regular_price": 4.49,
"regular_price_display": "$4.49",
"sale_price": null,
"sale_price_display": null,
"on_sale": false,
"source_on_sale_flag": false,
"multi_buy": null,
"regular_multi_buy": null,
"single_unit_price": null,
"unit_price": 0.22,
"unit_price_unit": "ea",
"price_rule": "Buy 1, Get 1 50% OFF"
},
{
"product_id": "300429191",
"sku_id": "400650887",
"title": "Ibuprofen 200 mg Tablets",
"display_title": "Walgreens Ibuprofen 200 mg Tablets",
"url": "https://www.walgreens.com/store/c/walgreens-ibuprofen-200-mg-tablets/ID=300429191-product",
"brand": "Walgreens",
"brand_id": "118",
"size": "100 ea",
"product_type": "Non-Aspirin Pain Relievers",
"upc": "31191720478",
"gtin": "00311917204789",
"store_upc": "311917204789",
"pln": "40000720587",
"image": "https://pics.walgreens.com/prodimg/650887/450.jpg",
"image_thumb": "https://pics.walgreens.com/prodimg/650887/155.jpg",
"rating_half_star": 4.5,
"rating_display": "4.5 out of 5",
"review_count": 92,
"in_stock": true,
"online_status": "instock",
"store_status": "instock",
"clearance": false,
"own_brand": true,
"age_restricted": false,
"fsa_hsa_eligible": true,
"promo_label": "SALE",
"coupon_label": null,
"coupon_terms": null,
"sitewide_offer": "$5 OFF $25+ sitewide with code NOW5 or $10 OFF $40+ sitewide with code NOW10",
"active_ingredients": [
"Ibuprofen (NSAID)* - 200 mgPain Reliever/Fever Reducer",
"*nonsteroidal anti-inflammatory drug"
],
"inactive_ingredients": [
"Colloidal Silicon Dioxide",
"Croscarmellose Sodium",
"Iron Oxide Red"
],
"category_ids": {
"tier1": "359438",
"tier2": "360547",
"tier3": "361471"
},
"same_day_purchase_limit": 12,
"currency": "USD",
"price": 9.99,
"price_display": "$9.99",
"price_form": "single",
"regular_price": 9.99,
"regular_price_display": "$9.99",
"sale_price": null,
"sale_price_display": null,
"on_sale": false,
"source_on_sale_flag": false,
"multi_buy": null,
"regular_multi_buy": null,
"single_unit_price": null,
"unit_price": 0.1,
"unit_price_unit": "ea",
"price_rule": "Buy 1, Get 1 50% OFF"
},
{
"product_id": "300396892",
"sku_id": "sku6314529",
"title": "Ibuprofen 200 mg Softgels",
"display_title": "Walgreens Ibuprofen 200 mg Softgels",
"url": "https://www.walgreens.com/store/c/walgreens-ibuprofen-200-mg-softgels/ID=300396892-product?skuId=sku6314529",
"brand": "Walgreens",
"brand_id": "118",
"size": "40 ea",
"product_type": "Non-Aspirin Pain Relievers",
"upc": "31191718331",
"gtin": "00311917183312",
"store_upc": "311917183312",
"pln": "40000934531",
"image": "https://pics.walgreens.com/prodimg/615192/450.jpg",
"image_thumb": "https://pics.walgreens.com/prodimg/615192/155.jpg",
"rating_half_star": 4.5,
"rating_display": "4.5 out of 5",
"review_count": 209,
"in_stock": true,
"online_status": "instock",
"store_status": "instock",
"clearance": false,
"own_brand": true,
"age_restricted": false,
"fsa_hsa_eligible": true,
"promo_label": "SALE",
"coupon_label": null,
"coupon_terms": null,
"sitewide_offer": "$5 OFF $25+ sitewide with code NOW5 or $10 OFF $40+ sitewide with code NOW10",
"active_ingredients": [
"Solubilized Ibuprofen Equal to 200 mg IbuprofenPain Reliever/Fever Reducer",
"(Present as the free acid and potassium salt)Pain Reliever/Fever Reducer",
"(NSAID [Nonsteroidal Anti-Inflammatory Drug])"
],
"inactive_ingredients": [
"Ammonium Hydroxide",
"FD&C Green #3",
"Iron Oxide Black"
],
"category_ids": {
"tier1": "359438",
"tier2": "360547",
"tier3": "361471"
},
"same_day_purchase_limit": 12,
"currency": "USD",
"price": 6.99,
"price_display": "$6.99",
"price_form": "single",
"regular_price": 6.99,
"regular_price_display": "$6.99",
"sale_price": null,
"sale_price_display": null,
"on_sale": false,
"source_on_sale_flag": false,
"multi_buy": null,
"regular_multi_buy": null,
"single_unit_price": null,
"unit_price": 0.17,
"unit_price_unit": "ea",
"price_rule": "Buy 1, Get 1 50% OFF"
}
],
"query": "ibuprofen",
"matched_keyword": "ibuprofen",
"total": 109,
"online_total": 108,
"in_store_total": 109,
"returned": 24,
"page_size_published": 72,
"has_more_on_source": true,
"resolved_via": "search_page",
"category_id": null
}
}What the Walgreens API does
| Action | Description | Concrete use case | Key params |
|---|---|---|---|
| search | Search walgreens.com by keyword and get up to 72 products with price, promotion, unit price, online and in-store availability, UPC and GTIN-14, brand, size, half-star rating and review count, plus the active and inactive ingredient lists for OTC items. MEASURED LIMIT: this surface publishes ONE page — `?p=2` is silently ignored by Walgreens (same 72 rows, same first product), so `search` returns at most 72 products and reports the source's own total beside them. For the full depth of a shelf use `category/products`, which really pages. When a keyword is itself a Walgreens aisle (for example `toothpaste`), the site redirects to that aisle; the engine follows it into the category listing and `resolved_via` tells you which route answered. | Pricing teams call search to search walgreens.com by keyword and get up to 72 products with price, promotion, unit price,…. | query, max_results |
| category/products | List the products of one or more Walgreens categories (tier-3 aisle ids, the same ids every product row reports as `category_ids.tier3`) with REAL pagination: up to 100 products per page and up to 15 pages. Several category ids in one call are merged into a single result set by Walgreens. Each row carries the same price, promotion, UPC/GTIN, availability and ingredient fields as `search`. MEASURED CEILING: Walgreens refuses page 16 and above at every page size, so at most 1,500 products of a category are reachable even when it reports more; `last_page`, `page_cap` and `has_more` say exactly where you are. | Marketplace operators call category/products to list the products of one or more Walgreens categories (tier-3 aisle ids, the same ids every p…. | category_id, page, page_size |
| product/detail | The full Walgreens product record by product id or product URL: shelf price and every promotion kept apart, the EXACT review average (the list surfaces only publish a half-star bucket), unit price, employee price labelled as such, UPC and GTIN-14, PLN, online/pickup/same-day availability, FSA-HSA and EBT eligibility, the marketing description, OTC uses and warnings, the active and inactive ingredient groups, shipping weight, pack dimensions and the US states Walgreens will not ship it to, plus the three-level category path. Walgreens does not publish individual review texts on this surface. | Catalog enrichment teams call product/detail to get the full Walgreens product record by product id or product URL. | product_id |
| product/batch | The same full product record as `product/detail` for up to 50 product ids in ONE upstream call — the cheapest way to refresh a basket, a price file or a GTIN map. Walgreens answers one record per id (asked 15/25/50 ids, got 15/25/50); ids it does not know are reported in `missing_ids` instead of failing the call. | Retail analysts call product/batch to get the same full product record as `product/detail` for up to 50 product ids in ONE upstream call. | product_ids |
Call search from your stack
curl -X POST https://api.reefapi.com/walgreens/v1/search \
-H "x-api-key: $REEF_KEY" \
-H "content-type: application/json" \
-d '{"query":"ibuprofen","max_results":24}'import requests
r = requests.post(
"https://api.reefapi.com/walgreens/v1/search",
headers={"x-api-key": REEF_KEY},
json={
"query": "ibuprofen",
"max_results": 24
},
)
print(r.json()["data"])const res = await fetch("https://api.reefapi.com/walgreens/v1/search", {
method: "POST",
headers: {
"x-api-key": process.env.REEF_KEY,
"content-type": "application/json",
},
body: JSON.stringify({
"query": "ibuprofen",
"max_results": 24
}),
});
const { ok, data, meta, error } = await res.json();Ask your MCP-connected assistant: call reefapi.walgreens.search with {"query":"ibuprofen","max_results":24}.Who uses this API and why
- Pricing teams use Walgreens to search walgreens.com by keyword and get up to 72 products with price, promotion, unit price,….
- Marketplace operators use Walgreens to list the products of one or more Walgreens categories (tier-3 aisle ids, the same ids every p….
- Catalog enrichment teams use Walgreens to get the full Walgreens product record by product id or product URL.
- Retail analysts use Walgreens to get the same full product record as `product/detail` for up to 50 product ids in ONE upstream call.
Questions developers ask before integrating
What is the Walgreens API?
Walgreens API is a ReefAPI endpoint group for walgreens It returns live JSON through POST requests under /walgreens/v1.
Is the Walgreens API free to try?
Yes. ReefAPI starts with 1,000 free credits, no card required. Walgreens calls use the same shared credit balance as every other ReefAPI engine.
Do I need a Walgreens login or account?
No login to Walgreens is needed for the API response. You call ReefAPI with your x-api-key header, and the playground can run live examples before you create a production key.
How fresh is the Walgreens data?
The page example is captured from a live search call, and production requests fetch live data through ReefAPI rather than a static sample.
How many credits does the Walgreens API use?
Walgreens actions currently cost 1-3 credits per successful call. Failed or blocked calls are free. All APIs draw from one credit pool.
Can I call Walgreens from an AI assistant or MCP client?
Yes. Connect ReefAPI once through MCP and your assistant can call walgreens actions with the same key, credit pool and JSON envelope used by normal REST requests.
Is the Walgreens API a Walgreens scraper?
It is the managed alternative to a DIY Walgreens scraper. Instead of building and maintaining your own scraper — proxies, headless browsers, captcha and constant breakage — you call one ReefAPI endpoint and get the same walgreens back as clean JSON.
Why does my Walgreens scraper keep getting blocked?
Most Walgreens scrapers break on anti-bot defenses, rate limits and IP bans that need rotating residential proxies and browser fingerprinting to clear. ReefAPI handles all of that for you — no proxies, no captchas, no maintenance — and returns live JSON. Blocked calls are free.