ParseForge Scrapers

Walmart Grocery Prices Scraper

parseforge/walmart-grocery-prices-scraper

E-commerceAutomationDeveloper tools

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.

Run this scraper See the API call
Total runs
37
Bookmarked
0
Last modified
2 days ago

This scraper was last updated on .

What does the Walmart Grocery Prices Scraper return?

ParseForge Banner

๐Ÿฅ‘ 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. unitPrice comes straight from Walmart (62.0 ยข/oz) and is also split into unitPriceValue and unitPriceUnit, 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 ยข/oz string 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_PRICE entirely and moves the number to DISCOUNTED_PRICE, with the old one under COMPARISON. 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 /search and /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 back false. Use the SNAP EBT Eligible Only input, which filters server-side. The badge text is surfaced as snapEbtBadge in the badge block, labelled as a badge.
  • Sponsored products are kept, not removed, and flagged with sponsored: Yes.

๐Ÿš€ How to use

  1. Create a free Apify account. Sign up here and you start with $5 of free credit, no card required.
  2. Open the Actor and go to the Input tab.
  3. Pick your departments, or paste Walmart category URLs into Walmart Category URLs. You can do both in one run.
  4. Add filters if you want them: diet, SNAP EBT, rollback, brand, price band, star band, seller.
  5. 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.
  6. Tick the optional blocks you need, fulfillment and aisle, badges, seller, and the optional category tree and price summary rows.
  7. Click Start and watch the log.
  8. 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

What input does the Walmart Grocery Prices Scraper accept?

FieldTypeWhat it doesDefault
departments array Walmart grocery departments to collect. Every department is paged until Max Items is reached. Leave empty and use Walmart URLs instead if you want a specific aisle. ["dairy-eggs"]
startUrls array Any Walmart.com grocery category URL copied from your browser, for example https://www.walmart.com/browse/food/dairy-eggs/976759_9176907 or https://www.walmart.com/cp/dairy-eggs/9176907. Each URL is paged like a department. Product (/ip/) and search (/search) URLs are not supported: Walmart shields those two paths. []
maxItems integer Free users: Limited to 10 items (preview). Paid users: Optional, max 1,000,000. The budget is split evenly across the departments and URLs you selected. 10
includeSubcategories boolean Walmart caps any one category at 24 pages (about 1,150 products). Turn this on to walk the department's own subcategory list and page each aisle separately, which is the only way to get past that ceiling. false
sortBy string (6 options) Result order, exactly as Walmart's own sort menu. best_match
minPrice integer Only return products priced at or above this amount. not set
maxPrice integer Only return products priced at or below this amount. not set
brands array Brand names exactly as Walmart spells them on the filter panel, for example Great Value or Kerrygold. Several brands are combined with OR. []
dietaryNeeds array Walmart's own dietary filter. Which values a department offers varies, so a value that department does not carry returns nothing rather than everything. not set
snapEbtOnly boolean Only return products Walmart flags as payable with SNAP EBT. Applied server-side by Walmart's own Benefit Programs filter; the listing tiles themselves do not carry a trustworthy per-item SNAP flag, so this filter is the reliable way to get that set. false
dealsOnly string (3 options) Restrict to products Walmart currently marks as a Rollback or as Clearance. not set
minCustomerRating string (3 options) Walmart's star-band filter. not set
retailerType string (4 options) Restrict to items sold by Walmart itself, or to marketplace sellers. not set
inStockOnly boolean Hide items Walmart reports as unavailable at the serving store. false
facet string Walmart's raw facet string, appended to whatever the boxes above produce. Same value the site puts in the URL when you tick a filter, for example food_form:Sticks or container_type:Bag||flavor:Original. not set
includeFulfillment boolean Adds the pickup and delivery windows, fulfillment methods, the serving store id and the in-store aisle location (for example A28). false
includeBadges boolean Adds Walmart's tile badges as text: Rollback, Clearance, best seller, SNAP EBT eligible, Walmart+ and any promo line. false
includeSeller boolean Adds seller name, seller id, seller type and the offer id. false
includeCategoryTree boolean Adds one row per subcategory Walmart lists under each department, with its category id and URL. Useful to pick the exact aisle for a later run. false
includePriceSummary boolean Adds one summary row per category with the min, max, average and median price of the products collected from it, plus the share on rollback and out of stock. false
proxyConfiguration object Walmart's category pages answer direct requests, so the proxy is off by default. Switch to Apify residential proxies if your runs start seeing the 'Robot or human?' challenge. {"useApifyProxy":false}

How much does the Walmart Grocery Prices Scraper cost?

from $1.78 per 1,000 results

Charged forWhat it isPrice each
Actor Start Charged when the Actor starts running. Number of events charged depends on Actor memory (one event per GB, minimum one event). $0.0178 to $0.02
Category page One Walmart category listing page fetched and parsed, about 40-50 products. This is the fixed paging cost, kept out of the per-row price. $0.00445 to $0.005
Grocery product One grocery product row delivered to the dataset, with price, was price, unit price, availability and rating. Error rows are never charged. $0.00267 to $0.003
Fulfillment & aisle columns The pickup and delivery windows, the serving store and the in-store aisle added to one product row. Only charged when the box is ticked. $0.00178 to $0.002
Badge & promo columns Walmart's tile badges, rollback and clearance flags and subscription eligibility added to one product row. Only charged when the box is ticked. $0.00089 to $0.001
Seller columns Seller name, seller id and offer id added to one product row. Only charged when the box is ticked. $0.00089 to $0.001
Category tree row One subcategory of a grocery department, with its category id and listing URL. Only charged when the box is ticked. $0.00178 to $0.002
Price summary row One per-category summary row: min, max, average and median price plus the share on sale, out of stock and sponsored. Only charged when the box is ticked. $0.0178 to $0.02

Tiered: the lower figure is the price on a higher Apify plan. Billing and the free credit live on Apify.

How do I call the Walmart Grocery Prices Scraper API?

One POST returns the dataset directly. Same shape for every scraper in the library, so swapping the slug is the only change.

POST ยท run and get results
curl -X POST "https://api.apify.com/v2/acts/parseforge~walmart-grocery-prices-scraper/run-sync-get-dataset-items?token=$APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "departments": [
      "dairy-eggs"
    ],
    "startUrls": [],
    "maxItems": 10,
    "includeSubcategories": false,
    "sortBy": "best_match"
  }'

What example inputs can I use?

Use these inputs to see how a run is configured.

input.json
{
  "departments": [
    "dairy-eggs"
  ],
  "startUrls": [],
  "maxItems": 10,
  "includeSubcategories": false,
  "sortBy": "best_match"
}

What do users say about the Walmart Grocery Prices Scraper?

No reviews yet. Be the first.

How do I report an issue with the Walmart Grocery Prices Scraper?

We build and maintain this scraper, so a problem with it comes to us. Report it on the Apify listing and the thread stays attached to the scraper where the next person can find it: open an issue.

Broken and urgent, or you would rather not post in public? Write to parseforge@protonmail.com and it reaches the people who wrote it.

What related scrapers can I use?

Run Walmart Grocery Prices Scraper on Apify All scrapers