A browser extension exports Walmart products from the page you are looking at; an API exports them from a server, on a schedule, at any scale. If you need Walmart product data more than once, use the API. The pattern is two calls: search by keyword to get product_ids, then fetch each product_id for full details (title, price, seller, stock). This tutorial shows the exact Scavio calls in Python and JavaScript, including the field gotcha that trips people up: Walmart search takes query, but the product endpoint takes product_id, not the search term. For context on cost, the comparable third-party Walmart APIs in 2026 are DataForSEO's Merchant API at $0.001 per task, Apify's Walmart actors at roughly $0.75 to $1.30 per 1,000 products, and BlueCart starting at $18/mo for 500 requests. Scavio is a flat 1 credit ($0.005) per call on the same key that pulls Amazon, Google, YouTube, Reddit, and TikTok, so a cross-marketplace price tracker runs on one vendor.
Prerequisites
- Python 3.9+ with requests, or Node 18+
- A Scavio API key (50 free credits)
- A keyword or a known Walmart product_id
Walkthrough
Step 1: Set your key
All Scavio REST endpoints use Authorization: Bearer with this key.
export SCAVIO_API_KEY=sk_your_key_hereStep 2: Search Walmart to get product_ids
The search endpoint takes the keyword in query and returns a list of products, each with a product_id you use in the next step.
import os, requests
H = {"Authorization": f"Bearer {os.environ['SCAVIO_API_KEY']}", "Content-Type": "application/json"}
hits = requests.post("https://api.scavio.dev/api/v1/walmart/search",
headers=H, json={"query": "stanley tumbler 40oz"}).json()["data"]
for h in hits[:5]:
print(h["product_id"], h["title"], h.get("price"))Step 3: Fetch full details per product_id
The product endpoint takes product_id (not the keyword). This is the field that breaks most first attempts. One credit per call.
pid = hits[0]["product_id"]
prod = requests.post("https://api.scavio.dev/api/v1/walmart/product",
headers=H, json={"product_id": pid}).json()["data"]
print(prod["title"], prod["price"], prod.get("seller"), prod.get("in_stock"))Step 4: Loop it for an export, on a server
This is the part an extension cannot do: run unattended, on a schedule, writing a clean file. Put it behind cron and you have a daily Walmart price export.
import csv
rows = []
for h in hits:
p = requests.post("https://api.scavio.dev/api/v1/walmart/product",
headers=H, json={"product_id": h["product_id"]}).json()["data"]
rows.append([p["product_id"], p["title"], p["price"], p.get("in_stock")])
with open("walmart.csv", "w", newline="") as f:
csv.writer(f).writerows([["id","title","price","in_stock"], *rows])Python Example
import os, requests
H = {"Authorization": f"Bearer {os.environ['SCAVIO_API_KEY']}",
"Content-Type": "application/json"}
# Search first, then pull a single product by product_id
hits = requests.post("https://api.scavio.dev/api/v1/walmart/search",
headers=H, json={"query": "stanley tumbler 40oz"}).json()["data"]
pid = hits[0]["product_id"]
prod = requests.post("https://api.scavio.dev/api/v1/walmart/product",
headers=H, json={"product_id": pid}).json()["data"]
print(prod["title"], prod["price"], prod.get("seller"), prod.get("in_stock"))JavaScript Example
const H = { Authorization: `Bearer ${process.env.SCAVIO_API_KEY}`,
"Content-Type": "application/json" };
const search = await fetch("https://api.scavio.dev/api/v1/walmart/search", {
method: "POST", headers: H, body: JSON.stringify({ query: "stanley tumbler 40oz" })
}).then(r => r.json());
const pid = search.data[0].product_id;
const prod = await fetch("https://api.scavio.dev/api/v1/walmart/product", {
method: "POST", headers: H, body: JSON.stringify({ product_id: pid })
}).then(r => r.json());
console.log(prod.data.title, prod.data.price, prod.data.in_stock);Expected Output
{
"product_id": "5689919121",
"title": "Stanley Quencher H2.0 FlowState Tumbler 40oz",
"price": 35.00,
"seller": "Walmart.com",
"in_stock": true
}