Tony Wang6 min readHow to Scrape Sam's Club in 2026 (API & Python)
Scrape Sam's Club product data in 2026 — pricing, availability, images, and ratings as structured JSON. Product-detail only: there's no search endpoint.
The fastest way to scrape Sam's Club in 2026 is to call a structured API that returns normalized JSON for a product's full detail — instead of parsing Sam's Club's pages yourself. That API is deliberately narrow: it's product-detail only. There's no search endpoint, because Sam's Club's own robots.txt disallows crawling its search results — a real, citable technical signal, not a legal claim. So the workflow starts with a product id sourced from a URL, not a keyword query. This guide covers DIY, no-code, and the structured API, what each returns, where DIY breaks, and the legal and access basics.
Why scrape Sam's Club?
Sam's Club's product data powers:
- Pricing intelligence — track how a bulk or club-only item's price moves over time.
- Assortment research — monitor which items a category carries by pulling detail for a known set of product ids.
- Review and rating tracking — watch aggregate rating and review count trends for a product line.
- Availability monitoring — check whether a tracked item is still in stock before it's discontinued or swapped out.
- Catalog enrichment — attach the club's own item number, images, and category breadcrumb to an existing product record from another source.
Is it legal to scrape Sam's Club?
Option 1: DIY in Python (and why it breaks)
A DIY scraper has to fetch and parse a rendered product page, since there's no public JSON endpoint to call directly:
import requests
from bs4 import BeautifulSoup
resp = requests.get(
"https://www.samsclub.com/ip/some-product-name/1234567",
headers={"User-Agent": "Mozilla/5.0 (compatible; research-bot/1.0)"},
)
soup = BeautifulSoup(resp.text, "html.parser")
# Price, rating, and item number are embedded in page data, not
# consistently exposed as selectable markup
It demos and then breaks:
- There's no search page to scrape either — on purpose. Sam's Club's robots.txt disallows crawling search results, so even a DIY search scraper is fighting the site's own stated crawl policy from the start, not just a technical wall.
- You need a product id before you can request anything. The id only shows up in a product's own
/ip/{slug}/{id}URL — there's no keyword-to-id lookup, so you have to source ids from a sitemap, a category page, or an existing catalog. - Anti-bot defenses front the site. A routine, unauthenticated request pattern gets challenged or blocked quickly, and a browser-based scraper needs ongoing upkeep as the defense updates.
- No official third-party API. Sam's Club has no self-serve developer program for outside product data access.
Option 2: No-code tools
Marketplace scraper actors that touch Sam's Club exist and suit a one-off pull of a short, known product list, but they inherit the same anti-bot fragility as DIY, still can't get around the missing search page, and don't give you a stable, versioned schema to build a pipeline on.
Option 3: A structured Sam's Club API
For a repeatable workflow, Crawlora's Sam's Club API returns normalized JSON for product detail — no page parsing or bot-defense upkeep. Unlike most platforms in this series, there's no /samsclub/search endpoint: source a product id from a product-page URL (from a sitemap, a category listing, or your own catalog), then resolve full detail directly:
curl "https://api.crawlora.net/api/v1/samsclub/product/1234567" \
-H "x-api-key: $CRAWLORA_API_KEY"
In Python, pull the numeric id out of a known product URL and call the same endpoint:
import re
import requests
h = {"x-api-key": "YOUR_API_KEY"}
base = "https://api.crawlora.net/api/v1/samsclub"
product_url = "https://www.samsclub.com/ip/some-product-name/1234567"
product_id = re.search(r"/(\d+)$", product_url).group(1)
detail = requests.get(f"{base}/product/{product_id}", headers=h).json()["data"]
A product-detail response is normalized JSON (check the docs for the full field list):
{
"code": 200,
"msg": "OK",
"data": {
"id": "1234567",
"item_number": "980156423",
"title": "Member's Mark 24-Pack Purified Water, 16.9 fl oz",
"brand": "Member's Mark",
"description": "Purified drinking water in individual bottles, packaged for home and event use.",
"category": ["Grocery", "Beverages", "Water"],
"price": 4.98,
"availability": "IN_STOCK",
"images": [
"https://scene7.samsclub.com/is/image/samsclub/0078742213456_A"
],
"rating": 4.7,
"rating_count": 2143
}
}
Store one row per product per pull, keyed by id or the club's own item_number, and re-run on a schedule to track price changes and availability flips.
What you can collect
Public product-detail data, keyed by a product id you already have: brand, description, category breadcrumb, pricing, availability, images, aggregate rating with review count, and the club's own item number. There's no search, browse, or category-listing endpoint to discover new ids from a keyword — you have to bring the id in. Public product-page data only — not member account, order, or payment information, and no individual review text (the endpoint returns the aggregate rating and count, not review-level detail).
Limitations and common challenges
- No search endpoint, by design. Sam's Club's robots.txt disallows crawling search results, so there's no way to go from a keyword to a set of product ids through this API — you need an external source of ids (sitemap, category page, or your own catalog).
- Anti-bot defenses on the front end. Expect challenges on naive or high-volume automated requests to samsclub.com directly.
- No membership flag in the schema. Product detail doesn't expose a membership-required field the way some warehouse-club data does elsewhere — treat the scraped
priceas the listed price, not a confirmed member-only or non-member price. - No nationwide bulk export. There's no official feed of Sam's Club's full catalog; coverage is only as good as the list of product ids you maintain.
- Public data only. This is what a product page already shows publicly — not a way around a membership login or into account-level data.
Where this gets used
- Pricing intelligence — track
priceandavailabilityon a fixed watchlist of bulk and club-brand items over time. - Catalog enrichment — attach
item_number,images, andcategoryto product records sourced from elsewhere. - Rating monitoring — watch
rating/rating_counttrends for a product line release over release.
Sources
Start collecting
Try it first, free: run any public URL through the Free Web Scraper, or check whether a site blocks bots with the Anti-Bot Checker — no signup.
Test the product-detail endpoint in the Playground, check the schema in the API docs, and review pricing. For the same warehouse-club membership pattern with a fuller search-to-detail flow, see how to scrape Costco; for the closest general-merchandise parent company, see how to scrape Walmart; and for another big-box competitor, see how to scrape Target. See also how to choose a web scraping API and is web scraping legal.
Part of our how-to-scrape guide series — every platform we cover, in one index.
Frequently asked questions
Can I search Sam's Club products with this API?
No — this platform is scoped to product detail only. Sam's Club's own robots.txt disallows crawling its search results, so no /samsclub/search endpoint is offered.
How do I identify a Sam's Club product for the API?
Take the numeric id from the product's own /ip/{slug}/{id} URL and pass it to /samsclub/product/{id}.
Can I get customer reviews for a Sam's Club product with an API?
/samsclub/product/{id} returns the aggregate rating and review count — individual review text is not available from this endpoint.