All systems operationalโ€ขIP pool status
Coronium Mobile Proxies
Web data collection guide

Walmart Price Scraping: Catalog APIs and Seller Pricing Data in Python

For Walmart price collection, first decide whether you need catalog information, pricing insights for your seller items or an observed consumer offer in a specific shopping context. Walmartโ€™s Marketplace APIs support documented seller workflows. They do not establish a universal, anonymous feed of every storeโ€™s checkout prices. This guide shows a bounded Python catalog request and explains the limits of its output.

Coronium Technical TeamSources checked 7 min read

Before writing the collector

  • Marketplace access requires the appropriate onboarding and authorization.
  • The catalog search is a limited lookup, not a complete price crawl.
  • Keep missing prices missing and preserve the returned price structure and collection time.

Choose the data source that answers the pricing question

Match the source to the intended price measurement.
QuestionDocumented starting pointLimit to retain
Does this catalog item exist?Item SearchA bounded catalog lookup
How are my seller items priced?Pricing InsightsAuthorized seller-item scope
What would a shopper pay in a location?A permitted source with that shopping contextCatalog metadata alone may not supply the total
How did a price change?Comparable timestamped observationsMatch the same item, seller and context

Walmartโ€™s Marketplace introduction describes role-specific onboarding and API access. If you already operate an authorized seller integration, start with the supported endpoint for the job. A consumer account or proxy subscription does not grant Marketplace API access.

The Item Search reference describes searches of the Walmart catalog. The Pricing Insights guide covers information for your Marketplace items, including fields used to assess offer competitiveness. That is different from a promise that an arbitrary competitor catalog can be exported in full.

For a consumer-offer observation, define the required location, seller, variant, fulfillment option and time. Obtain a permitted source that supplies those fields. Do not label a catalog value as the final checkout total when its response does not establish that context.

Understand the catalog search limits

The catalog search guide documents GET /v3/items/walmart/search, with DEFAULT and SPEC response modes. This example uses keyword search in DEFAULT mode. The guide describes up to 40 keyword matches, while identifier and spec workflows have different rules.

The reference says unpublished items are excluded. An empty result therefore does not prove that an item has never existed, nor does it provide a complete inventory or availability history. Keep the query and collection timestamp with the observation.

Returned entries may include a price, but response fields vary. Preserve the price value as returned instead of guessing its structure, currency or missing-value meaning. An absent field should remain null or explicitly unavailable in your downstream dataset.

Prepare an authorized token without putting secrets in the article

The Token API documents OAuth grant types and access-token lifetimes. The reviewed reference lists a 900-second access-token lifetime. Use the appropriate approved flow for your seller or solution-provider role; this article does not create an account, obtain credentials or demonstrate a live authorized call.

The example reads an existing token from WM_ACCESS_TOKEN. Store production credentials in your applicationโ€™s supported secret mechanism. Do not put tokens in query strings, source control, prompts or a shared notebook output.

The request includes a unique correlation identifier and the documented service-name header. Keep the correlation identifier in operational logs when it is useful for support, while excluding authorization values. A provider-specific channel identifier may apply to your integration; follow the onboarding instructions for that account.

Run one catalog query in Python

Install a supported Requests version in an isolated environment and supply the token through your runtimeโ€™s secret injection. Save this example as walmart_catalog.py and run it with Python. The output contains only selected catalog fields, the unmodified price value and collection metadata.

import json
import os
from datetime import datetime, timezone
from uuid import uuid4

import requests

URL = 'https://marketplace.walmartapis.com/v3/items/walmart/search'


def fetch_catalog(query, token):
    if not query.strip() or not token.strip():
        raise ValueError('Provide a search query and Marketplace access token')
    headers = {
        'WM_SEC.ACCESS_TOKEN': token,
        'WM_QOS.CORRELATION_ID': str(uuid4()),
        'WM_SVC.NAME': 'Walmart Marketplace',
        'Accept': 'application/json',
    }
    with requests.Session() as client:
        client.trust_env = False
        response = client.get(
            URL, params={'query': query, 'responseFormat': 'DEFAULT'},
            headers=headers, timeout=(5, 20), allow_redirects=False,
        )
    if response.status_code != 200:
        raise RuntimeError(f'Catalog request stopped: HTTP {response.status_code}')
    data = response.json()
    if not isinstance(data, dict) or not isinstance(data.get('items'), list):
        raise ValueError('Unexpected catalog response; inspect the API schema')
    observed = datetime.now(timezone.utc).isoformat()
    rows = []
    for item in data['items']:
        if not isinstance(item, dict):
            raise ValueError('Unexpected catalog item')
        rows.append({
            'item_id': item.get('itemId'),
            'title': item.get('title'),
            'price_as_returned': item.get('price'),
            'observed_at': observed,
            'source_endpoint': URL,
        })
    return rows


if __name__ == '__main__':
    rows = fetch_catalog('wireless mouse', os.environ['WM_ACCESS_TOKEN'])
    print(json.dumps(rows, ensure_ascii=False, indent=2))

The client disables inherited proxy settings and redirects so its route is explicit and the custom access-token header is not forwarded to an unexpected redirect destination. If your authorized environment requires a proxy, configure that client deliberately using the Requests proxy guide.

Local fixtures passed with Python 3.12.14 and Requests 2.34.2: prepared request parameters and headers, missing prices, empty results, malformed data, rejected responses, redirect refusal and sanitized errors. The fixtures did not contact Walmart or verify a live seller token. This is a tested request/response example, not a production data-access benchmark.

Use Pricing Insights for the seller-item question

The Pricing Insights guide documents POST /v3/price/getPricingInsights with filters, sorting and pagination. Its response distinguishes fields such as current price, Buy Box base price and Buy Box total price. Choose the field that matches the business question rather than flattening every price into one unlabeled column.

Keep the seller SKU or appropriate item identifier as the join key. A matching title alone is weak evidence that two records represent the same variant or offer. If you combine catalog and seller data, preserve each source and the time it was retrieved.

Review the response schema used by your account before implementing a paginated export. The bounded catalog example above does not execute the Pricing Insights endpoint or imply that its permissions and output are interchangeable.

Stop on access failures and respect the accountโ€™s request budget

Walmartโ€™s rate-limiting documentation describes throttling and HTTP 429 responses. Check the limit for the specific endpoint and account instead of applying one invented requests-per-second number across the platform.

The example stops on any non-200 response. In a production integration, distinguish token expiry, missing permission, throttling and server failure before choosing a retry policy. Cap attempts and total runtime, and avoid automatically retrying an authorization failure with new network exits.

The price collector should also reject unexpected schemas. An HTML error page or an unrelated JSON response must not become a successful price observation. Preserve a sanitized failure record, then investigate before resuming the job.

Give AI analysis verified observations and their context

An AI assistant can compare approved records, identify missing fields or draft an explanation of a price change. Supply the actual item identity, observation time and field definitions. Require it to retain nulls and distinguish a seller price from a contextual consumer total.

Do not let generated guesses fill unavailable prices or currencies. Separate the fetching process from the analysis process so returned content cannot alter credentials, target URLs or API permissions. If n8n coordinates the job, confirm which node holds the authorization and which node receives only the resulting data.

Before sharing a report, inspect a sample of source observations and the calculation that produced each comparison. This provides a traceable price result without presenting a limited catalog response as a complete Walmart market dataset.

Sources and review scope

Sources reviewed October 11, 2026. Primary documentation checked October 11, 2026. Examples passed local fixtures; the Indeed CSV example also ran against its public dataset. No private API credentials or live host calendar were used. Each guide states its access and coverage limits.

Frequently asked questions

Collect from another source

Choose an available data product and preserve its coverage, permissions and field meanings.

Related workflows

Requests proxy authentication

Configure the HTTP process deliberately.

n8n worker and proxy setup

Separate API authorization from workflow routing.

Web scraping and proxy guide

Plan the surrounding collection architecture.