Read Walmart prices, sellers and reviews with one API
The Walmart API returns Walmart.com product data as clean JSON.
4 active endpoints, on 1 and 2 credit tiers.
- POST/walmart/v1/search
- POST/walmart/v1/product_detail
- POST/walmart/v1/reviews
- POST/walmart/v1/category
What Walmart endpoints does ReefAPI ship?
4 live read endpoints. Read-only data API: no writes, no account actions, no dashboard access on the target site.
Walmart API
3 of 4 endpoints, ready to run
One item in full: name, brand, model, price, seller, availability, rating, review count and both description bodies.
{ "ok": true, "meta": { "api": "walmart", "endpoint": "product_detail", "mode": "live", "latency_ms": 4057.3, "record_count": 1, "cache_hit": false }, "data": { "product": { "item_id": "5144605607", "name": "Ninja Air Fryer Pro XL 5-Qt, 3-in-1, 400°F Air Crisp Technology, Nonstick Crisper Plate, AF140 Black", "brand": "Ninja", "model": "AF140", "manufacturer": null, "type": "Air Fryers", "url": "https://www.walmart.com/ip/5144605607", "price": 79.97, "price_display": "$79.97", "list_price": null, "currency": "USD", "availability": "IN_STOCK", "rating": 4.6, "review_count": 6687, "short_description": "Meet the Ninja Air Fryer Pro XL, a fast and easy way to get the perfect crisp with up to 400F of heat. Air Crisp Technology surrounds your favorite foods with superheated air for hot, crispy results. With 5 QT capacity, cook up to 4 lbs. of fries using little to no oil and enjoy your favorite foods guilt-free. 3 cooking functions lets you satisfy any craving, from crispy snacks to full meals. Then, cleanup is a breeze with a nonstick basket and crisper plate.", "long_description": "<ul> <li>AIR CRISP TECHNOLOGY: 400 superheated air surrounds food for hot, crispy results with little to no oil</li> <li>LARGE CAPACITY: The 5-QT nonstick basket and crisper plate fit up to 4 lbs of French fries or 5 lbs of chicken wings</li> <li>3-in-1 FUNCTIONALITY: Air Fry, Reheat, and Dehydrate</li> <li>GUILT-FREE FRIED FOODS: Up to 75% less fat than traditional air frying methods. Tested against hand-cut, deep-fried French fries</li> <li>FROZEN TO CRISPY: Cook frozen foods in just minutes for an extra-crispy finish</li> <li>SPACE SAVER: Ninjas latest air fryer design allows you to save even more space on your countertop without compromising capacity</li> <li>EASY TO CLEAN: The basket and crisper plate are both nonstick for easy cleaning</li> <li>WHATS INCLUDED: Air Fryer, 5-QT nonstick basket and crisper plate, chef-inspired 17 recipe book and cooking charts</li> <li>Ninja Air Fryer Pro XL 5-QT Basket Air Fryer, 3-in-1 Functionality, Nonstick, 400F Air Crisp Technology, AF140</li> </ul>", "specifications": [ { "name": "Volume capacity", "value": "5 qt" }, { "name": "Cleaning, care & maintenance", "value": "Dishwasher Safe Parts" }, { "name": "Features", "value": "Automatic Shut-Off" } ], "highlights": [ { "name": "Volume capacity", "value": "5 qt" }, { "name": "Cleaning, care & maintenance", "value": "Dishwasher Safe Parts" }, { "name": "Features", "value": "Automatic Shut-Off" } ], "variant_ids": [ "1DKXTARG7ZSK", "21UNJB2EO8WX", "26BR8U7I9S7F" ], "variants": [ { "id": "4SJ36LB8H1TS", "usItemId": "5144605607", "attributes": [ { "name": "Actual Color", "value": "Black" }, { "name": "Volume Capacity", "value": "5 qt" } ], "price": 79.97, "price_display": "$79.97", "availability": "IN_STOCK", "url": "https://www.walmart.com/ip/Ninja-Air-Fryer-Pro-XL-5-5-qt-Black-Air-Fry-Roast-Reheat-Dehydrate-Black-AF140/5144605607", "image": "https://i5.walmartimages.com/seo/Ninja-Pro-XL-5-qt-Air-Fryer-Black-Automatic-Shutoff_17260726-27fd-40a6-b347-67616dc68f04.963b41a992020f3d2d638bae5d43ce7c.jpeg" }, { "id": "4EGP4UISP0KH", "usItemId": "17448712078", "attributes": [ { "name": "Actual Color", "value": "Navy" }, { "name": "Volume Capacity", "value": "5 qt" } ], "price": 109, "price_display": "$109.00", "availability": "IN_STOCK", "url": "https://www.walmart.com/ip/NINJA-5-5QT-AIRFRYNV/17448712078", "image": "https://i5.walmartimages.com/seo/NINJA-5-5QT-AIRFRYNV_cd44e56d-0a21-4a22-9f72-653ee352ee77.9e3dc6d2425c37fa88d14ed4d4502875.jpeg" }, { "id": "5AMK2X5OCYS8", "usItemId": "17437317520", "attributes": [ { "name": "Actual Color", "value": "White" }, { "name": "Volume Capacity", "value": "5 qt" } ], "price": 79.97, "price_display": "$79.97", "availability": "IN_STOCK", "url": "https://www.walmart.com/ip/NINJA-5-5QT-AF-WH/17437317520", "image": "https://i5.walmartimages.com/seo/NINJA-5-5QT-AF-WH_a9800be6-3ac8-4010-be07-2d562c63503a.8005bda65da2582fc033a5717026cd3b.jpeg" } ], "variant_criteria": [ { "id": "actual_color", "categoryTypeAllValues": null, "isFitPredictable": false, "isSizeChartApplicable": false, "name": "Actual Color", "type": "SWATCH", "variantList": [ { "availabilityStatus": "AVAILABLE", "id": "actual_color-black", "images": [ "02D7F7B5842F4A6E874B096B2C264E99", "20EC8D70A45E4279A63ACAE473BAA3D8", "6F5F43F32CC5435FB75DA220F3BCECF6" ], "name": "Black", "products": [ "4S448MZ287YW", "4SJ36LB8H1TS" ], "swatchImageUrl": "https://i5.walmartimages.com/asr/adfddfcf-b4ca-42dd-ba81-8ec20944ef49.7da1cb66c63f894fd082bef2c8d2685d.png", "selected": true }, { "availabilityStatus": "NOT_AVAILABLE", "id": "actual_color-cyberspace", "images": [ "438673749A604F6CAF0EFBA603836912", "3C1EFFE988CF48208B85922A48255217", "7F3AD953FC7B4507A8A84273A0A8CD43" ], "name": "Cyberspace", "products": [ "29WH6BKLX8YY" ], "swatchImageUrl": "https://i5.walmartimages.com/asr/0c952d0a-a58a-4783-a942-a8ec2d693335.d071892db85f98e237243142b941da25.png", "selected": false }, { "availabilityStatus": "AVAILABLE", "id": "actual_color-navy", "images": [ "03C32FFED97545C4A25BCCCA3E1EADBE", "DF03C3D4A22E43EA8C9ACB78CD923EF9", "0B6412D0BF2F47ADB8B26A6F11B58BE4" ], "name": "Navy", "products": [ "4EGP4UISP0KH", "1DKXTARG7ZSK" ], "swatchImageUrl": "https://i5.walmartimages.com/asr/02c1ec37-b7c8-49b4-b4c3-bfe10b082c39.5e7e35c2bccaf804282032f5239dd58f.png", "selected": false } ] }, { "id": "volume_capacity", "categoryTypeAllValues": null, "isFitPredictable": false, "isSizeChartApplicable": false, "name": "Volume Capacity", "type": "DROPDOWN", "variantList": [ { "availabilityStatus": "AVAILABLE", "id": "volume_capacity-5qt", "images": null, "name": "5 qt", "products": [ "4EGP4UISP0KH", "5AMK2X5OCYS8", "4SJ36LB8H1TS" ], "swatchImageUrl": null, "selected": true }, { "availabilityStatus": "AVAILABLE", "id": "volume_capacity-6.5qt", "images": null, "name": "6.5 qt", "products": [ "26BR8U7I9S7F", "4S448MZ287YW", "29WH6BKLX8YY" ], "swatchImageUrl": null, "selected": false } ] } ], "images": [ "https://i5.walmartimages.com/seo/Ninja-Pro-XL-5-qt-Air-Fryer-Black-Automatic-Shutoff_17260726-27fd-40a6-b347-67616dc68f04.963b41a992020f3d2d638bae5d43ce7c.jpeg", "https://i5.walmartimages.com/asr/87a55a75-27d4-4989-aeac-d1e7129bb023.4e30a274f481ae3b4944d8c7ed3e1bb2.jpeg", "https://i5.walmartimages.com/asr/3819d564-26e1-4f8e-bf66-011e740852a8.98aec811c28848e3e9cbbf3fc29e09d8.jpeg" ], "upc": "622356607315", "manufacturer_part_number": "AF140", "seller_id": "F55CDC31AB754BB68FE0B39041159D63", "seller_rating": null, "seller_review_count": null, "condition": "New", "is_preowned": false, "order_limit": 87, "brand_url": "https://www.walmart.com/search?q=Ninja&facet=brand:Ninja", "category_path": [ { "name": "Home", "url": "https://www.walmart.com/cp/home/4044" }, { "name": "Appliances", "url": "https://www.walmart.com/cp/appliances/90548" }, { "name": "Kitchen Appliances", "url": "https://www.walmart.com/cp/kitchen-appliances/90546" } ], "product_type_id": "ib_air_fryers", "return_policy": { "returnable": true, "free_returns": true, "window_days": 90, "text": "Free 90-day returns" }, "fulfillment": { "message": "Free pickup, today at Dallas N Cockrell Hill Rd Supercenter", "shipping_text": "Free pickup", "eta_text": "today", "location": "Dallas N Cockrell Hill Rd Supercenter", "method": "PICKUP", "delivery_date": "2026-08-28T21:59:00.000Z" }, "trust_badges": [ "FREE_SHIPPING", "FREE_RETURN", "FREE_PICKUP" ], "warnings": [ { "name": "WARNING - California Proposition 65", "value": "Cancer and Reproductive Harm - https://www.p65warnings.ca.gov/" }, { "name": "State Chemical Disclosure", "value": "None" } ], "warranty": { "url": "https://support.ninjakitchen.com/hc/en-us/article_attachments/4998281447836" }, "ingredients": null, "variant_options": [ { "id": "actual_color", "name": "Actual Color", "type": "SWATCH", "values": [ { "id": "actual_color-black", "name": "Black", "selected": true, "available": true, "product_ids": [ "4S448MZ287YW", "4SJ36LB8H1TS" ], "swatch_image": "https://i5.walmartimages.com/asr/adfddfcf-b4ca-42dd-ba81-8ec20944ef49.7da1cb66c63f894fd082bef2c8d2685d.png" }, { "id": "actual_color-cyberspace", "name": "Cyberspace", "selected": false, "available": false, "product_ids": [ "29WH6BKLX8YY" ], "swatch_image": "https://i5.walmartimages.com/asr/0c952d0a-a58a-4783-a942-a8ec2d693335.d071892db85f98e237243142b941da25.png" }, { "id": "actual_color-navy", "name": "Navy", "selected": false, "available": true, "product_ids": [ "4EGP4UISP0KH", "1DKXTARG7ZSK" ], "swatch_image": "https://i5.walmartimages.com/asr/02c1ec37-b7c8-49b4-b4c3-bfe10b082c39.5e7e35c2bccaf804282032f5239dd58f.png" } ] }, { "id": "volume_capacity", "name": "Volume Capacity", "type": "DROPDOWN", "values": [ { "id": "volume_capacity-5qt", "name": "5 qt", "selected": true, "available": true, "product_ids": [ "4EGP4UISP0KH", "5AMK2X5OCYS8", "4SJ36LB8H1TS" ], "swatch_image": null }, { "id": "volume_capacity-6.5qt", "name": "6.5 qt", "selected": false, "available": true, "product_ids": [ "26BR8U7I9S7F", "4S448MZ287YW", "29WH6BKLX8YY" ], "swatch_image": null } ] } ], "image_count": 12 } } }
How the Walmart API works
Walmart is a normal ReefAPI surface — the same four rules that hold for every other engine on the key.
No OAuth app, no request signing, no per-site account. One key covers all 184 engines.
Every route is a POST with a JSON body. Parameters are validated against the published schema before anything is charged.
Credits, not seats. Failed and blocked calls are never charged, and cache hits cost nothing.
One envelope everywhere. meta carries latency_ms, record_count and the endpoint that answered.
Watch one shelf without paying for a wide sweep every time
Walmart's search is billed per row, so the cheap pattern is to sweep once, keep the item_ids, and re-read the items you care about through product_detail, which is flat-rated at two credits however often you call it.
{"query": "air fryer", "max_results": 20}Twenty rows with prices, sellers and ratings. Store the item_ids — this is the expensive step and you only want to run it when the shelf itself changes.
{"item_id": "5144605607"}Two credits flat, and the only place the brand actually arrives. Run this per item, as often as you like.
{"item_id": "5144605607", "max_results": 50}One credit per 20 rows with a floor of 2, plus the summary block whatever you ask for.
One paid sweep, then a flat two credits per item per refresh — which is what makes daily price tracking affordable on this engine.
curl -X POST https://api.reefapi.com/walmart/v1/product_detail \
-H "x-api-key: $REEF_KEY" \
-H "content-type: application/json" \
-d '{"item_id":"709326941"}'{
"ok": true,
"data": { … },
"meta": {
"api": "walmart",
"endpoint": "product_detail",
"mode": "live",
"latency_ms": …,
"record_count": …
},
"error": null
}Walmart's five identifiers, and which of them this API accepts
A Walmart product carries an item number, an internal variant id, a UPC and a manufacturer part number, and only one of them is a valid input here. The shapes below were read off a live product_detail for item 20122959141 plus two searches of 50 rows and more.
| Field | Measured shape | Where it appears, and what accepts it |
|---|---|---|
| item_id | 8 to 11 digits, e.g. 20122959141, the number in walmart.com/ip/<id> | search, category and product_detail. The only id that product_detail and reviews accept. |
| variants[].usItemId | The same digit shape, one per sibling build: the Ryzen 7 model is 20122959141, the Core i7 model 20543058641 | product_detail. Feed one back as item_id to switch builds. |
| variants[].id and variant_ids[] | 12 uppercase alphanumerics, e.g. 3QQAAF8ICNX0 | product_detail only. Not accepted as item_id, so map it to a usItemId first. |
| upc | 12 digits, e.g. 198155976292 | product_detail only. Search rows never carry it. |
| manufacturer_part_number | Vendor SKU string, e.g. IDEAPAD1086_CTO_W1 | product_detail only, alongside model ('IdeaPad Slim 3'). |
| seller_id | 32 uppercase hex. F55CDC31AB754BB68FE0B39041159D63 is Walmart itself | search and product_detail. Any other value is a third-party marketplace seller. |
That Walmart seller_id held constant across unrelated searches: all 35 'Walmart.com' rows in a backpack search and all 31 in a coffee-maker search carried F55CDC31AB754BB68FE0B39041159D63. Compare against the id rather than string-matching the seller name.
What is on the row, what is only on the item, and where paging dies
Measured on 2026-08-27 across air fryers, groceries and televisions, paging one query until it ran out. Three of these lines go against us.
Against us, and measured across three unrelated categories: brand was empty on all 60 search rows. It is filled on product_detail — the same items came back as "Ninja" and "Martha Stewart" there. If you are building a brand-share report, the grid alone cannot do it; you have to enrich.
Both were present on all 60 rows across the three categories, and the id is Walmart's own internal seller key, not a display name. That is the field that separates a Walmart-sold item from a third-party marketplace one, and it does not need an enrichment call.
list_price appeared on 6 of 20 air fryers, 7 of 20 televisions and 0 of 20 groceries, and savings_amount tracked it exactly. Null is not a gap in the data — it is Walmart declining to print a before-price because there is no markdown. price is what you would pay today, and where a listing has variants it is the cheapest of them, with the full span in price_range.
meta.pagination.page_ceiling reports 10 before you hit anything. Page 10 returned a full 40 rows; pages 11, 12 and 13 returned zero rows with ok:true, and on those the meta total also drops to 0 — so a loop can detect the end, but only by looking at the row count. A query reporting around 2,000 matches yielded 164 unique rows to the auto-pager.
Against us on the second half. Passing a real facet filtered properly — every row came back Ninja. Passing a made-up one returned a completely unfiltered mixed-brand page with ok:true and no warning at all. Check that a filter did what you asked by looking at the rows, not at the status.
Against us. An item reporting 6,675 reviews returned 99 rows when asked for 200, and reported stop_reason complete — that is roughly 1.5% of the archive. What you do get for free alongside is the whole summary: average, rating distribution, recommended percentage, how many reviews carry text, and Walmart's aspect breakdown. For sentiment share that summary is often the answer; for the full review corpus this is the wrong tool.
search is billed per ROW at two credits each with a floor of two, so 20 rows is 40 credits and 164 rows is 328. That is by far the most expensive read in this batch and the badge does not show it, because the badge shows the unit price. product_detail and category are flat at 2; reviews are 1 credit per 20 rows with a floor of 2. Sweep rarely, enrich often.
Search of 20 rows ran about five seconds and a 164-row sweep about fifteen; product_detail four to ten seconds; 99 reviews about thirteen. This is one of the slower engines in the batch, which is another reason the sweep-once pattern pays.
What people build with Walmart
The jobs this data is most often used for.
endpoints
credits per call
Pricing teams call search to track Walmart prices, rollbacks and savings against competitors.
Catalog-enrichment tools use product_detail to fill product pages with specs, images and availability.
Review-analysis products pull reviews to monitor sentiment and rating trends for an item.
What Walmart data costs
The cheapest call here is 1 credit, so $15/mo (Pro) buys 10,000 of them — $1.50 per 1,000 credits. Credits roll over and never expire, and failed or blocked calls are not charged.
Full pricing →- 1,000 free credits on signup, no card
- One key, all 184 APIs, one credit pool
- Failed and blocked calls are never charged
- Credits roll over and never expire
Call it in two lines
Sign up, get 1,000 credits and one key that works on every engine. Then this is the whole protocol.
curl -X POST https://api.reefapi.com/walmart/v1/product_detail \
-H "x-api-key: $REEF_KEY" \
-H "content-type: application/json" \
-d '{"item_id":"709326941"}'import requests
r = requests.post(
"https://api.reefapi.com/walmart/v1/product_detail",
headers={"x-api-key": REEF_KEY},
json={
"item_id": "709326941"
},
)
print(r.json()["data"])Have a question? We got answers.
The questions people actually ask before wiring up Walmart.
Get a free key →How do I tell a Walmart-sold item from a marketplace seller, and does it change the data?▾
seller is the display name and seller_id is the stable marker: 'Walmart.com' with F55CDC31AB754BB68FE0B39041159D63 is Walmart's own inventory, anything else is a third-party seller with its own id (JanSport came back as 599E0246F55B4955AB65EECCC34AE32C). It changes fulfillment. In a measured 50-row coffee-maker search, PICKUP appeared in fulfillment.methods on 18 of the 31 Walmart-sold rows and on 0 of the 19 marketplace rows, four of which returned an empty methods list entirely. Store pickup is a Walmart-sold signal, not a general one.
What do price, list_price and savings_amount mean, and why is list_price so often null?▾
price is the current price, list_price is the struck-through 'was' price, and both savings_amount and savings_display exist only when list_price does. Null means Walmart is showing no strikethrough at all, which is the common case: all 50 rows of a coffee-maker search had list_price null, while a laptop row carried price 229.00, list_price 299.00, savings_amount 70 and savings_display 'SAVE $70.00'. price_display preserves Walmart's own wording, so you can distinguish 'Now $229.00' from a plain '$199.00'.
Is Rollback an enum I can filter on?▾
No. badge is a display label and Walmart writes whatever it likes there. Measured values across a 60-row backpack search were Rollback (11 rows), Deal (5), Best seller (5), '100+ bought since yesterday' (4), 'Overall pick', 'In 200+ people's carts', and null on 33. Match the exact string 'Rollback' if that is what you want, but expect new phrases to appear without notice.
Why is brand null on some search results?▾
Because Walmart only splits brand out of the title on some product classes. It came back populated on 60 of 60 backpack rows and null on the laptop rows inspected in the same session, so this is category-shaped rather than random. If you need brand on every row, resolve it from product_detail, which returned 'Lenovo' for item 20122959141 along with brand_url.
How many products can I actually get for one query?▾
About 360, and Walmart's own page count overstates it. A measured 'laptop' search with max_results 400 returned 362 rows, all 362 with distinct item_ids, after 9 successful page fetches and has_more false, while the same response reported max_page 13. meta.pagination.page_ceiling shows the real limit of 10. The pages are fetched together, so 400 results cost roughly the latency of one page rather than nine.
Do results repeat across pages?▾
The sponsored tiles are what Walmart repeats, and they are flagged. In that 362-row set, 18 rows had sponsored true and no item_id appeared twice. If you page manually instead of using max_results, filter on sponsored == false to get a set that will not duplicate itself between pages.
Why does the reviews action return fewer texts than the review count?▾
Because most Walmart ratings are stars with no words, and the response separates the two numbers. Item 20122959141 returned total_review_count 30 but reviews_with_text_count 6, so asking for max_results above 6 adds nothing. rating_distribution is always the full catalog total ({5:20, 4:4, 3:1, 2:3, 1:2} there), recommended_percentage came back 100, and each review carries the variant purchased ('16GB RAM | 512GB SSD'), source 'bazaarvoice', verified_purchase, and a date in M/D/YYYY form such as '3/18/2026'. aspects and photos come back null when the product has none.
What is the Walmart API?▾
Walmart API is a ReefAPI endpoint group for walmart It returns live JSON through POST requests under /walmart/v1.
Is the Walmart API free to try?▾
Yes. ReefAPI starts with 1,000 free credits, no card required. Walmart calls use the same shared credit balance as every other ReefAPI engine.
Do I need a Walmart login or account?▾
No login to Walmart 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 Walmart 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 Walmart API use?▾
Walmart actions currently cost 1-2 credits per successful call. Failed or blocked calls are free, and all APIs draw from one credit pool.
Can I call Walmart from an AI assistant or MCP client?▾
Yes. Connect ReefAPI once through MCP and your assistant can call walmart actions with the same key, credit pool and JSON envelope used by normal REST requests.
Is the Walmart API a Walmart scraper?▾
It is the managed alternative to a DIY Walmart 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 walmart back as clean JSON.
35 E-commerce & Marketplaces APIs on the same key
One key, one credit pool, one response envelope. If you are pulling Walmart, you are one call away from the rest of the category — no second contract, no second integration.
Need something this API does not do?
Name the endpoint, the field, or a source we do not carry yet. We ship new APIs every week and you would be first to get the key. Real people read every message and reply the same day.
Try it on your own data before you pay anything
The call above is the real endpoint, not a recording. A free key gives you 1,000 credits, the other 183 APIs, and the same envelope everywhere.
Endpoints, parameters and credit costs on this page are read from the live catalog and cannot drift from what the API accepts. Field notes were captured on 2026-08-27.