Walgreens Scraper
Pricing
from $3.00 / 1,000 results
Walgreens Scraper
Scrape Walgreens.com's product catalog. Search by keyword, browse any category/department page, or fetch specific products by product ID/URL. Get price, member price, brand, UPC/GTIN, stock & shipping status, images, description and category breadcrumb.
Pricing
from $3.00 / 1,000 results
Rating
0.0
(0)
Developer
Crawler Bros
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
16 hours ago
Last modified
Categories
Share
Scrape Walgreens.com's product catalog — pharmacy, health, beauty, grocery, and household items. Search by keyword, browse any category/department page, or fetch specific products by ID or URL. Get price, member (myWalgreens) price, brand, UPC/GTIN, stock & shipping status, images, description, and category breadcrumb. No login, no cookies required.
What this actor does
- Three modes:
search(keyword),byCategoryUrl(browse any department/category page),byProductIds(exact lookup) - Rich product data: price, member price, unit price, UPC, GTIN, brand, images, description, category breadcrumb, FSA/EBT eligibility, stock & shipping availability
- Filters: price range, in-stock only, exact brand, minimum customer rating, on-sale/clearance only
- Store-aware: pass a
storeIdto get that store's local pricing/availability (defaults to a representative US store) - Empty fields are omitted — no null/placeholder values in the output
Output per product
productId,title,brand,url— canonical Walgreens product pageimageUrl,imageUrls— full photo galleryregularPrice,memberPrice(myWalgreens member price, when it differs from regular),unitPrice,unitPriceSizerebateText— sitewide promo/rebate banner copypromotions— BOGO / mix-and-match style offers, e.g. "Buy 1, Get 1 FREE"rating(0-5, Bazaarvoice-sourced),reviewCountsizeCount,availableOptions— other sizes/variants of this productupc,gtin— barcode identifiersinStock,shipAvailable,pickupAvailable— authoritative availability flagsshipAvailableMessage— a Walgreens API status label; note it is frequently"Out of stock online"even whenshipAvailable/addToCartEnablearetrue— treatinStock/shipAvailableas authoritative, not this message stringageRestricted,isAlcohol,isGiftCard— purchase-restriction flagstier1Category,tier2Category,tier3Category,brandUrlisFsaEligible,isEbtEligible— payment-eligibility flagswebExclusive,isWalgreensBrandonClearance,isNewLowerPrice,isNewItem— merchandising badgesretailUnitQty,couponAvailableproductAttributes— certifications/features like "Gluten Free", "Vegan"productType— fine-grained product type, more granular thantier3CategoryhasIngredients,ingredients— flat list of ingredient names (supplement/OTC-drug products that publish an ingredients panel)nutritionFacts— list of{name, amountPerServing}from the Supplement/Nutrition Facts panel (e.g. Calories, Vitamin C, Sodium), on the same products that publishingredientsservingSize,servingsPerContainerwarningText— product warning/caution copyshippingWeightLbs,shippingRestrictedStates— US state codes this item cannot ship todescriptionrecordType,scrapedAt
Input
| Field | Type | Default | Description |
|---|---|---|---|
mode | string | search | search / byCategoryUrl / byProductIds |
searchQuery | string | vitamin c | Keyword search (mode=search) |
categoryUrl | string | – | Category/department page URL (mode=byCategoryUrl) |
productIds | array | – | Product IDs or product page URLs (mode=byProductIds) |
storeId | integer | 15196 | Walgreens store ID for local pricing (default: a representative US store) |
minPrice / maxPrice | integer | – | Regular-price bounds in USD |
inStockOnly | boolean | false | Only in-stock (online) products |
brand | string | – | Exact brand match, case-insensitive |
minRating | number | – | Only products with an average customer rating at or above this (0-5); unreviewed products are kept |
onSaleOnly | boolean | false | Only products currently on clearance or at a new lower price |
maxItems | integer | 30 | Cap on emitted records (1-200) |
Example: keyword search at a specific store
{"mode": "search","searchQuery": "vitamin c","storeId": 15196,"maxItems": 30}
Example: browse a category page
{"mode": "byCategoryUrl","categoryUrl": "https://www.walgreens.com/store/c/vitamin-c/ID=361635-tier3","maxItems": 50}
Use a leaf category page (one that lists individual products, e.g. .../ID=xxxxx-tier3) rather than a top-level department landing page (.../ID=xxxxx-tier1), which lists subcategories instead of products — click through to the specific product-listing page on walgreens.com and copy that URL.
Example: exact product lookup by ID/URL
{"mode": "byProductIds","productIds": ["300405068", "prod3511"]}
Example: on-sale, highly-rated products in a price range
{"mode": "search","searchQuery": "sunscreen","minPrice": 5,"maxPrice": 25,"minRating": 4,"onSaleOnly": true,"maxItems": 40}
Use cases
- Price monitoring — track regular price, member price, and clearance status for pharmacy/health/beauty SKUs over time
- Assortment & catalog research — browse category pages to see everything Walgreens stocks in a department
- Competitive retail analysis — compare pricing and promotions against other drugstore/grocery chains
- Ingredient & nutrition auditing — pull
ingredients/nutritionFactsfor supplement and OTC products - Local availability checks — pass
storeIdto check in-stock/pickup status for a specific store - Deal & coupon feeds — filter
onSaleOnlyto build a live clearance/markdown feed
FAQ
Do I need a Walgreens account or cookies? No. Prices and product data are read from Walgreens' own public product API anonymously, exactly like a signed-out visitor's browser does.
Why does search sometimes take longer than the other modes?
Walgreens gates its keyword search-results and category-listing pages behind a short client-side verification step. This actor tries a plain HTTP fetch first for search and byCategoryUrl; if that's blocked, it falls back to loading the page in a real headless browser once (a few seconds) to clear the challenge, then reads product data from the same fast JSON API all three modes use. byProductIds never needs the browser step and is fastest.
What's memberPrice?
Walgreens shows a lower "myWalgreens member" price alongside the regular price on many products; it's included when it differs from regularPrice.
Does the output include ratings/reviews?
Yes — rating (0-5) and reviewCount come straight from Walgreens' own product-page review widget when the product has published reviews; new/low-traffic products without reviews simply omit both fields rather than showing 0.
What's the difference between rebateText and promotions?
rebateText is Walgreens' sitewide promo banner (e.g. a percent-off promo code). promotions lists product-specific mix-and-match/BOGO offers (e.g. "Buy 1, Get 1 FREE") that apply to that item specifically.
Can I get products from a specific store's inventory?
Yes — set storeId to your target Walgreens store's numeric ID. Pricing and stock messages reflect that store; the default value is a representative store used when you don't need store-specific data.
What happens if my searchQuery doesn't match any product?
For most unmatched keywords, Walgreens' search returns zero products and the actor reports 0 records with a clear status message. For some nonsense or partial-word keywords, Walgreens' own search engine does fuzzy/substring matching and can surface loosely related products (e.g. a query containing "zzz" matching a brand named "Always ZZZ") instead of returning zero results — this is upstream search behavior, not something the actor filters or fabricates; every record returned is a real, live Walgreens product.
Limitations
searchclicks through Walgreens' own results pagination (beyond the first page) to gather more product IDs whenmaxItemscalls for it, but for broad/popular keywords the site's own deeper result pages increasingly re-surface products already seen on earlier pages — so the actor may return fewer unique records thanmaxItemsonce it has exhausted what Walgreens' search UI actually offers as distinct results, rather than an error. Use a narrowersearchQuery(orbrand/minPrice/maxPrice) to reach a larger unique count.- For very broad single-word keywords with
maxItemsset near the 200 maximum, Walgreens' own ad/lazy-image-heavy results grid can also hit a headless-browser rendering limit a few pages in (typically after 80-90 unique products); the actor detects this cleanly and returns the records already gathered rather than erroring, timing out, or fabricating filler — re-run with a narrowersearchQueryif you need the full requested count. byCategoryUrlreads whatever product tiles Walgreens renders on the category page (including recommendation carousels); very large categories may not be fully covered in a single run — use a narrower subcategory URL, orbyProductIdsfor exact coverage of a known product list.- Coupon content (the
couponsearchendpoint with actual coupon codes/terms) requires a signed-in session and is out of scope;couponAvailable(whether a coupon exists at all) andrebateTextreflect publicly shown savings signals only. - Per-store aisle location and pharmacy-specific (prescription) data are not exposed by the public product API and are out of scope.
- The
urlfield on each product record is the correct, live walgreens.com product page — it opens normally in a browser. Walgreens' Akamai bot protection stalls or blocks direct HEAD/GET requests to product and category pages from non-browser clients (e.g.curl), independent of this actor; the actor itself reaches the same data through Walgreens' public product API rather than by rendering those pages.