Walmart Grocery Prices Scraper
Pricing
from $2.67 / 1,000 grocery products
Walmart Grocery Prices Scraper
Scrape Walmart grocery prices by department: shelf price, was price, savings and the unit price per ounce, plus rating, availability, in-store aisle and pickup or delivery windows. Filter by brand, special diet, SNAP EBT, rollback and star rating. No proxy needed.
Pricing
from $2.67 / 1,000 grocery products
Rating
0.0
(0)
Developer
ParseForge
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
15 hours ago
Last modified
Categories
Share

🥑 Walmart Grocery Prices Scraper
🚀 Export a whole Walmart grocery aisle in seconds. Pick a department, get every product back as one flat row: shelf price, the struck-through was price, the savings, and the unit price per ounce or pound that makes different pack sizes comparable.
Walmart publishes the richest grocery price data in US retail and lets you export none of it. This Actor reads the same category data Walmart's own front end renders and returns each product as a row: current price, was price and savings, unit price split into a number and its unit, availability, rating and review count, the category breadcrumb, and, optionally, the in-store aisle, the pickup and delivery windows, the seller, and Walmart's own tile badges. No login, no API key, no cookie to paste, and no proxy needed by default.
Every run returns 32 fields per product, up to 50 with all three optional column blocks on. The 22 grocery departments cover Walmart's whole food index of 1,130,838 products, from 871 in Fresh Produce to 207,433 in Pantry. In verification, 238 products landed in 30 seconds over 8 category pages, direct, with no proxy.
| 🎯 Target Audience | 💡 Primary Use Cases |
|---|---|
| Grocery pricing analysts | Track shelf price, rollback depth and unit price across a department, week over week. |
| CPG brands | Watch your SKUs and your competitors' on the same shelf, with the unit price that buyers actually compare. |
| Food retail researchers | Measure assortment, price ladders and promotion density across 22 departments. |
| Inflation and cost-of-living research | Build a repeatable basket with unitPriceValue and unitPriceUnit normalised per ounce or pound. |
| SNAP and food-access researchers | Pull the SNAP-EBT-eligible assortment of a department using Walmart's own benefit-program filter. |
📋 What the Walmart Grocery Prices Scraper does
It turns any Walmart grocery department or category URL into a clean table. Tick the departments you want, or paste category URLs copied from your browser, add the filters you need, and it returns every product with its price data, its availability data and its shelf data in a single row.
💡 Why unit price matters here. A grocery price is meaningless without the size.
unitPricecomes straight from Walmart (62.0 ¢/oz) and is also split intounitPriceValueandunitPriceUnit, so you can sort, average and compare across pack sizes without parsing strings. It is present on 91% of tiles.
🔍 Filters run on Walmart's side, not ours. Every filter in the input is one of Walmart's own facets, and each was measured against the live site. Dairy & Eggs goes from 5,264 products to 204 with Organic, 732 with Gluten-Free, 2,084 with SNAP EBT, 97 with Rollback and 1,029 with a 4-5 star rating. You pay for the rows you asked for, not for a client-side filter over a full download.
🎬 Full Demo (🚧 Coming soon)
📊 Output
One row per product. The optional blocks add columns to the same row, so runs join cleanly whether or not they were enabled.
Base row, always returned (32 fields)
| Field | What it holds |
|---|---|
🖼 imageUrl | Main product image |
🏷 name | Product title |
🔗 url | Canonical product page URL |
🆔 itemId | Walmart item ID, the number in the product URL |
🧬 productId | Walmart's internal product ID |
💲 price | Current shelf price |
🏷 wasPrice | Struck-through price, when the item is discounted |
📉 savings | wasPrice minus price |
🔻 onSale | Whether a was price is present and higher |
⚖️ unitPrice | Walmart's own unit price string, e.g. 62.0 ¢/oz |
🔢 unitPriceValue | The number from that string |
📏 unitPriceUnit | The unit from that string, e.g. ¢/oz, ¢/lb |
📊 priceRange | Low - high price when the item has several sizes |
🥩 soldByWeight | Whether Walmart prices this item by weight |
ℹ️ priceCondition | Walmart's price caveat, e.g. each (est.) |
💱 currency | Always USD |
📦 salesUnit | EACH, LB and so on |
➕ weightIncrement | Increment Walmart sells the item in |
📍 availability | In stock, Out of stock |
✅ inStock | Boolean form of the above |
⭐ rating | Average customer rating |
💬 reviewCount | Number of reviews |
📣 sponsored | Yes on paid tiles, No otherwise |
🏬 department | The department or URL the row came from |
🧭 categoryPath | Full Walmart breadcrumb |
🆔 categoryId | Walmart's category path id |
🗂 shelf | Walmart's own shelf name for the item |
🔗 categoryUrl | The exact filtered listing URL the row came from |
🎨 variantCount | Number of listed size or flavour variants |
🎨 variants | Those variant names |
🧾 rowType | product, category, priceSummary or error |
🕒 scrapedAt | ISO timestamp of the row |
🚚 Fulfillment & Aisle block, opt-in (10 fields)
storeId, pickupAvailable, pickupEta, deliveryAvailable, deliveryEta, fulfillmentMethods, fulfillmentType, aisle, aisleZone. The in-store aisle (A28) is present on 17% of tiles. It is the one field here that Walmart does not publish anywhere else.
🏷 Badges & Promos block, opt-in (5 fields)
badges (the tile's badge text, joined), rollback, clearance, snapEbtBadge, subscriptionEligible.
🏪 Seller block, opt-in (3 fields)
seller, sellerId, offerId.
🗂 Category tree rows, opt-in
One rowType: "category" row per subcategory Walmart lists under each department, with name, categoryId, parentCategoryId and categoryUrl. Use it to find the exact aisle to run next.
📈 Price summary rows, opt-in
One rowType: "priceSummary" row per category: productsCollected, totalInCategory, minPrice, maxPrice, avgPrice, medianPrice, onSalePct, outOfStockPct, sponsoredPct.
Sample row
{"rowType": "product","name": "Kerrygold Irish Grass-Fed Irish Salted Butter Sticks, 8 oz, 2 Sticks","itemId": "193243827","url": "https://www.walmart.com/ip/Kerrygold-Grass-Fed-Pure-Irish-Salted-Butter-Sticks-8-oz-2-Sticks/193243827","price": 4.96,"wasPrice": "Not Disclosed","savings": "Not Disclosed","onSale": false,"unitPrice": "62.0 ¢/oz","unitPriceValue": 62,"unitPriceUnit": "¢/oz","soldByWeight": false,"currency": "USD","salesUnit": "EACH","availability": "In stock","inStock": true,"rating": 4.8,"reviewCount": 11558,"sponsored": "No","department": "Dairy & Eggs","categoryPath": "Home Page/Food/Dairy & Eggs/Butter & Margarine/Butter Sticks","shelf": "Butter & Margarine","aisle": "A28","pickupEta": "2026-09-08T21:00:00.000Z","badges": "SNAP EBT eligible | Save with Walmart plus | Rollback","seller": "Walmart.com","scrapedAt": "2026-09-08T17:14:44.166Z"}
✨ Why choose this Actor
- ⚖️ Unit price, parsed. Not just Walmart's
62.0 ¢/ozstring but the number and the unit as separate columns, so a basket of different pack sizes is comparable without post-processing. Present on 91% of tiles. - 🥗 Grocery filters, not generic ones. Special diet needs, SNAP EBT eligibility, rollback and clearance, star band, Walmart versus marketplace, every one of them Walmart's own facet, every one measured against the live index before it shipped.
- 📍 The in-store aisle.
A28, with its zone, on the tiles that carry it. No other Walmart Actor returns it. - 🚚 Pickup and delivery windows on the row. The actual ISO timestamps Walmart quotes for the serving store, not a badge string.
- 🏬 22 departments, one click each. Every category id verified live, from Fresh Produce to Alcohol, plus an All Food option over the whole 1.1M-product index.
- 🪜 A way past Walmart's 24-page wall. Any Walmart category stops at ~1,150 products. Expand Into Subcategories walks the department's own child categories to go deeper, and it only runs when the parent actually hit the wall, so you are never charged for pages of duplicates.
- 📉 Discount prices read correctly. On a rollback tile Walmart drops
CURRENT_PRICEentirely and moves the number toDISCOUNTED_PRICE, with the old one underCOMPARISON. Read naively, 47 of 49 rollback rows come back with no price. This Actor reads all of them. - 🧾 No always-empty columns. Nine fields that Walmart's listing tiles never populate were measured across 246 live tiles and dropped rather than shipped as permanently blank headers. Where a value can genuinely be withheld you get a labelled sentinel, never a silent
null. - ⚡ Direct by default, no proxy cost. Walmart's category pages answer direct requests from Apify, so runs go proxy-free unless you switch one on.
- 🧯 Honest failure. A page Walmart refuses produces an error row saying so, rather than a silently short dataset.
📈 How it compares to alternatives
| This Actor | Typical Walmart actors | |
|---|---|---|
| Unit price split into value and unit | ✅ Yes | ❌ Rarely, string at best |
| Grocery department picker | ✅ 22, verified | ❌ Keyword search only |
| Special diet / SNAP EBT filters | ✅ Walmart's own facets | ❌ No |
| Rollback and clearance filter | ✅ Yes | ⚠️ Sometimes |
| In-store aisle | ✅ Yes | ❌ No |
| Pickup and delivery windows | ✅ ISO timestamps | ⚠️ Badge text at best |
| Rollback prices read correctly | ✅ Yes | ⚠️ Often blank on discounted rows |
| Past the 24-page category wall | ✅ Subcategory walk | ❌ No |
| Category tree and price summary output | ✅ Opt-in | ❌ No |
| Proxy required | ✅ No by default | ⚠️ Often yes |
What this Actor does not do, stated plainly.
- Keyword search and product detail pages are not available. Walmart shields
/searchand/ip/behind PerimeterX and returns a challenge to every request, from residential and datacenter exits alike. Category browse is open, and that is the whole surface this Actor uses. If you need keyword search or per-product detail, that is Walmart Scraper's job, not this one's. - One store, and you do not choose it. Prices, aisle and pickup windows are for the store Walmart's edge assigns to the request.
?stores=,?storeId=, and store cookies were all tested and all ignored. Numbers are comparable across a run and across runs, but they are not "my local store". - ~1,150 products per category is Walmart's ceiling, not ours. Turn on Expand Into Subcategories to go deeper.
- Brand does not come back as a column. Walmart's listing tiles leave it empty on 246 of 246 tiles measured, so it is not shipped. The brand filter works fine, because it runs on Walmart's side.
- The per-tile SNAP flag is not trustworthy, so it is not a column. With Walmart's own SNAP filter on, only the sponsored tiles carry
snapEligible: true; Great Value milk comes backfalse. Use the SNAP EBT Eligible Only input, which filters server-side. The badge text is surfaced assnapEbtBadgein the badge block, labelled as a badge. - Sponsored products are kept, not removed, and flagged with
sponsored: Yes.
🚀 How to use
- Create a free Apify account. Sign up here and you start with $5 of free credit, no card required.
- Open the Actor and go to the Input tab.
- Pick your departments, or paste Walmart category URLs into Walmart Category URLs. You can do both in one run.
- Add filters if you want them: diet, SNAP EBT, rollback, brand, price band, star band, seller.
- Set Max Items. The budget is split evenly across the departments and URLs you selected. Start small while you check the shape of the data.
- Tick the optional blocks you need, fulfillment and aisle, badges, seller, and the optional category tree and price summary rows.
- Click Start and watch the log.
- Download the results as CSV, Excel, JSON or XML from the Dataset tab, or pull them from the API.
A minimal input looks like this:
{"departments": ["dairy-eggs"],"maxItems": 100}
A weekly organic price index across three departments:
{"departments": ["dairy-eggs", "fresh-produce", "meat-seafood"],"dietaryNeeds": ["Organic"],"sortBy": "price_low","maxItems": 600,"includePriceSummary": true}
💼 Business use cases
🏷 Shelf price and rollback tracking
Run a department daily and keep the history. price, wasPrice and savings show how deep the cuts go, onSale and the badge block separate rollback from clearance, and unitPrice normalises pack sizes so a 2-for-1 does not look like a price cut.
⚖️ Basket and inflation indexes
unitPriceValue and unitPriceUnit give a comparable per-ounce number across brands and sizes. Add the price summary rows and each run also writes the min, median, average and max of every category it touched.
🥗 Diet and assortment research
Walmart's own dietary facets slice a department to Organic, Gluten-Free, Non-GMO, High Protein, Dairy-Free and more, server-side. Compare the size, price ladder and promotion density of the organic shelf against the whole shelf.
🍽 SNAP and food-access work
The SNAP EBT Eligible Only filter returns the assortment Walmart itself marks as benefit-eligible (2,084 of 5,264 dairy items at the time of research) with prices and unit prices attached.
🏪 Store-operations and planogram context
The fulfillment block adds the in-store aisle and zone, the serving store id, and the pickup and delivery windows Walmart quotes, on the same row as the price.
🔌 Automating Walmart Grocery Prices Scraper
Schedule a run and let the output flow where you work. Make and Zapier can move new rows into a spreadsheet, a database or a Slack channel the moment a run finishes. Airbyte can load the dataset into a warehouse for price history. A webhook can push results into GitHub or your own service, and Google Drive keeps a dated CSV of every run for auditing.
🌟 Beyond business use cases
- 🎓 Research. Study grocery price dispersion, promotion density and assortment across departments with clean, repeatable data.
- 📰 Journalism. Back a cost-of-living story with a per-ounce basket rebuilt on the same day every week.
- 🏠 Personal. Find the cheapest unit price in a category before you shop.
🤖 Ask an AI assistant about this scraper
Paste this README into ChatGPT, Claude or Gemini and ask it how to shape the input for your question. The field list and the filter vocabulary above are all it needs.
❓ Frequently Asked Questions
🔑 Do I need a Walmart account or an API key?
No. Everything comes from public category pages.
🔗 Which URLs can I paste?
Any Walmart grocery category URL: https://www.walmart.com/browse/food/dairy-eggs/976759_9176907 or https://www.walmart.com/cp/dairy-eggs/9176907. Product (/ip/) and search (/search) URLs are rejected with a warning, Walmart shields those two paths.
📦 How many products can I get from one department?
About 1,150, which is Walmart's own 24-page ceiling. Turn on Expand Into Subcategories to walk the department's child categories and go past it.
⚡ How fast is it?
238 products over 8 category pages completed in 30 seconds in verification, direct, with no proxy.
🏬 Why is there no brand column?
Walmart's listing tiles leave brand empty, 246 of 246 tiles measured. Shipping it would be a permanently blank header. The brand filter works, because Walmart applies it server-side.
🍽 How does the SNAP EBT filter work?
It is Walmart's own Benefit Programs facet, applied server-side. The per-tile SNAP flag Walmart puts in the page data is unreliable: with the filter on, only the sponsored tiles carry it. Eligibility is expressed as a filter, not as a column you should trust.
🏪 Which store do the prices come from?
The store Walmart's edge assigns to the request. It cannot be chosen: URL parameters and store cookies were tested and ignored. Prices are consistent within and across runs, but they are not necessarily your local store's.
📉 Does it capture rollback prices?
Yes, and this is where most scrapers break. On a discounted tile Walmart removes CURRENT_PRICE and moves the number to DISCOUNTED_PRICE, with the old price under COMPARISON. This Actor reads all three, so price, wasPrice and savings are all filled on rollback rows.
📍 Why is the aisle empty on some rows?
Walmart only publishes it for part of the assortment: 17% of the tiles measured. Where it is absent you get Not Disclosed, never a guess.
🛡 Do I need a proxy?
No. Walmart's category pages answer direct requests from Apify. Switch on Apify residential proxies from the input if your runs ever start seeing the "Robot or human?" challenge.
🚫 A row has an error. What happened?
A page Walmart refused, or one that came back without its data blob after three attempts. The row carries rowType: "error", the URL and the reason. Error rows are never charged.
💾 What export formats are available?
CSV, Excel, JSON, XML, JSONL and RSS, from the Dataset tab or the API.
🔌 Integrate with any app
Use the Apify API, the JavaScript and Python clients, webhooks, or the Make and Zapier integrations to pull runs into your own stack.
🔗 Recommended Actors
- Walmart Scraper: the general Walmart catalogue, including product detail pages.
- Google Shopping Prices Scraper: the same product across many merchants.
- Home Depot Products Scraper: the same job for home improvement.