Sam's Club Scraper icon

Sam's Club Scraper

Scrape Sam's Club (samsclub.com) products by keyword, catalogue, category or URL. Extract prices, original prices, unit prices, ratings, stock…

Start using this actor on Apify ↗Need a custom scraper?Contact us ↗

Sam's Club Scraper at a glance

Sam's Club Scraper is a ready-to-run Apify actor from abotapi for collecting web data. Its documented output includes product, brand, price, was and discount %, which you can export as JSON, CSV or Excel or read through the Apify API. It costs $2.00 per 1,000 results on the Apify Free plan and from $1.40 on paid plans, with smaller per-run or optional feature charges listed on Apify.

Runs on
Apify cloud: console, API, schedules and integrations
Data type
Other
Pricing
$2.00 per 1,000 results (Free plan), from $1.40 on paid plans
Output
Documented below · JSON, CSV, Excel
Inputs
33 options

Scrape Sam's Club (samsclub.com) products by keyword, catalogue, category or URL. Extract prices, original prices, unit prices, ratings, stock availability, variants, images, specifications and customer reviews. Supports scheduled price change tracking.

What Sam's Club Scraper can do

  • Four ways to find products. Search by keyword, walk the product catalogue (optionally narrowed by words in the product name), pick categories by words in their name, or paste product, category, key-phrase, category-hub and sitemap links and bare product numbers.
  • About 50 products per request, at no extra cost. Category pages already carry price, was-price, unit price, rating, review count, stock, badges and key points, so a plain category run is the cheapest way to watch a whole department.
  • Full detail on demand. Product pages add the description, labelled specifications, attributes, UPC, rating breakdown, review topics, the full image gallery and every colour or size option with its own item number, price and stock.
  • Customer voice included. Review text, stars, title, date, first name, helpful votes and the verified-purchase flag, in the order you choose, optionally with the photos reviewers attached.
  • Built for monitoring. Incremental mode returns only new, changed and, optionally, delisted products on a schedule, a price-only mode keeps description or image edits out of your bill, and a refused run fails loudly instead of returning an empty dataset.
  • Honest about gaps, stock and clubs. A listed product page that no longer exists is skipped and never billed. Each product row names the club it was read for, and stock answers are kept out of change detection unless you ask for them, because the store's own stock answer flips between two reads of the same product.

Choose what to collect

These inputs let you configure Sam's Club Scraper - Products, Prices, Stock & Reviews. Open the actor on Apify to enter your values and review the current options.

Supported input fields
InputWhat it controls
modestring · requiredChoose 'search' to search by keyword, 'catalog' to walk the store's product list, 'category' to pick category pages by name, or 'url' to scrape pasted links. Each mode reads only its own fields below.

Choices: search, catalog, category, url

queriesarrayOnly used when mode = search, ignored in the other modes. One entry per search, for example 'coffee' or 'paper towels'. Products found by several keywords are returned once. A keyword that names a whole category (for example 'ipad') is answered by the store with that category's page, which is read instead. Words the store cannot match still return its closest products. Up to 50 different keywords per run; Max products is shared between them.
slugKeywordsarrayOnly used when mode = catalog, ignored in the other modes. Each entry is a word or phrase, for example 'paper towels' or 'tire'. A product matches when its name holds every word of at least one entry. Leave empty to take the products in the order the store lists them. Some listed product pages no longer exist; those are skipped and never charged.
categoryKeywordsarrayOnly used when mode = category, ignored in the other modes. Each entry is a word or phrase, for example 'tires', 'coffee' or 'paper towels'. A category matches when its name holds every word of at least one entry. Category pages list the products with price, was-price, rating and stock; tick 'Read each product's page' for full detail.
maxCategoriesintegerOnly used when mode = category. How many matching categories are walked, broadest names first (a shorter name is a broader category), then in the order the store lists them. Max products is shared between them.
urlsarrayOnly used when mode = url, ignored in the other modes. Accepted: product links (/ip/...) and bare product numbers, category pages (/browse/..., a filter written into the link such as ?facet=Brand%3AQuaker is kept), key-phrase pages (/c/kp/...), category hubs (/cp/...) and the store's sitemaps. A search page (/search?q=...) is read as that keyword. Account, cart and checkout pages are skipped with a warning. A link carrying page=N starts at that page. Tracking parameters are ignored.
sortBystringOrder of search and category result pages. A sort order written into a pasted link wins over this setting. Catalogue mode and product links have no order to set.

Choices: relevance, priceAsc, priceDesc

Show 26 more inputs
More input fields
InputWhat it controls
minPricenumberOnly return products priced at or above this value, in US dollars. Applied to the returned rows.
maxPricenumberOnly return products priced at or below this value, in US dollars. Applied to the returned rows.
onSaleOnlybooleanOnly return products that currently show a was-price above the current price.
minRatingnumberOnly return products whose average customer rating is at least this value (0 to 5).
skipSponsoredbooleanCategory pages mix paid placements in with the organic products. Turn on to leave the sponsored ones out; each category row carries an isSponsored flag either way.
fetchDetailsbooleanSearch, category and key-phrase pages only: read every product's own page for the full description, specifications, options, rating breakdown and image gallery. Off by default because it costs one extra page per product. Catalogue mode and pasted product links always read the product page (there is no result card behind them), so those rows are always billed one 'Product page detail' event whatever this toggle says.
fetchReviewsbooleanAlso collect customer reviews for each product: rating, title, text, date, first name, helpful votes, verified-purchase flag. Also reads the product page, so it carries the same per-product surcharge as the toggle above, plus one 'Customer review' event per review returned. The average rating, review count and rating breakdown do not need this.
maxReviewsPerProductintegerCap on how many individual reviews are collected for each product when 'Fetch customer reviews' is on. The first ten come with the product page; further ones are read ten at a time. Each review returned is billed, so keep this tight.
reviewSortstringWhich reviews come first when a product has more than the cap.

Choices: relevance, newest, oldest, highest, lowest, helpful

includeReviewImagesbooleanAdd the links of the photos reviewers attached to each review.
fixedClubbooleanThe store ties stock, pickup and delivery answers, and which products exist at all, to a club that it assigns by the connection's location, so two rows of one run can come from different clubs (each product row names its club). Turn this on to read every page as the store's own default club instead: the answers are then consistent, but products that club does not sell (for example some tyres) are reported as not available. Prices were identical across clubs in every check. Off by default.
maxItemsintegerMaximum number of products to return across the whole run, EXPIRED rows from Incremental mode included. This is the run's cap. Use 0 for the maximum of 100000 products per run.
maxPagesintegerMaximum number of result pages to take per keyword, category or link. Each page carries about 50 products. 0 = no page limit set; the run then stops at Max products, when there are no more results, or at a safety limit of 4000 pages per keyword or category (far above what Max products can reach). When a limit you set here stops a keyword or category that still had results, the log says so. Catalogue mode and product links have no result pages.
resumeFromRunIdstringPaste a previous run ID or dataset ID to continue a large pull without returning or charging for products already collected there. Use this after an interrupted run. For recurring monitoring of the same scope, use Incremental mode below instead.
incrementalModebooleanTurn this on for daily or recurring monitoring. The first run returns every matching product as NEW. Later runs normally return only NEW, UPDATED and REAPPEARED products, which makes it a cheap way to watch price drops. What is compared: price, was-price, discount, on-sale flag, unit price, name, brand, description, specifications, options with their prices and the category path. What is excluded by default (still returned in the row, never a change): scrape timestamps, the product's rank and page, the sponsored flag, delivery and pickup texts, popularity badges, the club the page was read for, image and video links, the store's generated summary, and ratings and reviews (average rating, review count, rating breakdown, topics, summary and the review sample). Stock and availability are also excluded unless you turn on 'Count stock changes' because the store's stock answer differs between two reads of an unchanged product. Option lists are compared regardless of the order the store returns them. 'Changes to watch' narrows this to price (and stock when counted) only. Turn on 'Emit unchanged' or 'Emit expired' only when you also want those rows returned (and billed). State is kept separately for each scope and filter setup; use State key to name or deliberately share a monitoring campaign. Which products a category lists, and in what order, can follow the club the connection resolves to, so for scheduled monitoring of a capped or very large category turn on 'Read every page as one fixed club'. To continue one specific interrupted run instead, use Resume from a previous run above.
stateKeystringOptional. Name this monitoring campaign to keep its state stable, or to deliberately share state across differently configured runs. Leave empty to derive a key automatically from the scope and filter settings, so two different scopes never mix state.
emitUnchangedbooleanOff by default. Turn on to also return products that have not changed since the last run, marked UNCHANGED. This returns, and bills, extra rows you already have, so leave it off unless you want a full snapshot every run.
emitExpiredbooleanOff by default. Turn on to also return products that were present in a previous run but are no longer found, marked EXPIRED. Only produced once a run has fully scanned the tracked scope without a page that could not be read, never when Max products capped it or Resume was used. A product page the store reports as not available also counts as missing, and one club's range can differ from another's, so consider 'Expire after missed scans' above 1. EXPIRED rows count against Max products: a run returns at most the room left under it, and the rest are returned on a later complete run. This returns, and bills, extra rows, so leave it off unless you need expiry tracking.
changeScopestringAll fields (default): any change to the compared product data marks a product UPDATED. Price only (and stock when counted): just price, was-price, discount, on-sale flag and per-option price, so name, description or specification edits never produce a billable UPDATED row. Changing this never starts a new baseline: the existing saved state is kept (under an automatic or a named State key) and each stored product is simply compared under the new setting.

Choices: all, priceAndStock

watchStockbooleanOff by default. The store's stock, pickup and delivery answers differ between two reads of the same unchanged product (the same product, same club, two reads seconds apart, in stock then out of stock), so counting them marks products UPDATED, and bills them, without a real change. Turn on only if you accept that: stock status, availability texts, order limits and per-option stock then count as changes.
compactUpdatesbooleanOff by default. When on, UPDATED and EXPIRED rows are slim: ids, link, title, current price and stock, plus priceChanges (old and new value of each field that moved) and variantChanges (per-option ADDED, REMOVED or CHANGED). NEW rows stay full. A compact row does not carry product-page detail fields or reviews, so no detail or review charge applies to it.
expireAfterMissedScansintegerUsed with 'Emit expired'. A product is marked EXPIRED only after it was missing from this many CONSECUTIVE complete scans (default 1). EXPIRED means the product dropped out of the scanned results or its page is gone; one club's range can differ from another's, so a value of 2 or more avoids false expiries.
ignoreFieldsForChangesarrayField names that must not count as a change, for example name or highlights. Use a dotted path to ignore a key inside every element of a list, for example variants.url. Ignored fields are still returned in the row. Rank, sponsored flag, delivery text, popularity badges, club, media links and ratings and reviews are already ignored by default. Changing this list never starts a new baseline: the saved state is kept and each stored product is re-compared under the new list, so no product comes back as NEW.
mcpConnectorsarrayOptionally send results into the apps you already use, via Model Context Protocol (MCP) connectors. Authorize one under Apify, Settings, API & Integrations, then select it here. Notion gets a page per product; other connectors get a best-effort write or digest. Each connector receives a condensed summary per product, not the full record; the complete record always stays in the dataset. Leave empty to skip; this never changes the dataset output. Supported: Notion (https://mcp.notion.com/mcp), Linear (https://mcp.linear.app/sse), Airtable (https://mcp.airtable.com/mcp), Apify (https://mcp.apify.com).
notionParentPageUrlstringURL or id of the Notion page under which product pages are created. Required to enable the Notion export; ignored by other connectors.
maxNotifyListingsintegerCap on products written to each connector per run. Does not affect the dataset.

Fields in the output

The documented dataset includes the fields below. Availability can depend on the source page and selected mode.

nameProduct
brandBrand
pricePrice
wasPriceWas
discountPercentDiscount %
currencyCurrency
ratingRating
reviewCountReviews
stockStatusStock
badgesBadges (array)
isSponsoredSponsored (boolean)
imageUrlImage (image)
Show 37 more fields
urlURL (link)
usItemIdItem number
changeTypeChange
modelModel
upcUPC
categoryCategory
categoryPathCategory path (array)
descriptionDescription
highlightsHighlights (array)
specificationsSpecifications (object)
attributesAttributes (object)
directionsDirections
warningsWarnings (array)
warrantyWarranty
variantsOptions (array)
ratingHistogramRating breakdown (object)
recommendedPercentRecommended %
reviewTopicsReview topics (array)
imagesImages (array)
videosVideos (array)
unitPriceUnit price
unitPriceTextUnit price (text)
reviewsreviews
reviewIdReview ID
titleTitle
textReview
dateDate
authorAuthor
verifiedPurchaseVerified purchase (boolean)
helpfulVotesHelpful
notHelpfulVotesNot helpful
recommendedRecommended (boolean)
changedFieldsChanged fields (array)
firstSeenAtFirst seen
lastSeenAtLast seen
priceChangesPrice changes (object)
variantChangesOption changes (array)

Example output

An example from this actor’s documentation. Values are illustrative; this is not a fresh live result.

{
  "recordType": "product",
  "usItemId": "10000001",
  "productId": "ABC123DEF456",
  "name": "Sample Paper Towels, 12 Rolls",
  "url": "https://www.samsclub.com/ip/sample-paper-towels-12-rolls/10000001",
  "brand": "Sample Brand",
  "upc": "000000000001",
  "productType": "Paper Towels",
  "category": "Paper Towels & Napkins",
  "categoryPath": [
    "Household Essentials",
    "Disposable Paper Products",
    "Paper Towels & Napkins"
  ],
  "price": 25.68,
  "priceString": "$25.68",
  "priceChannel": "ONLINE",
  "currency": "USD",
  "wasPrice": 29.98,
  "onSale": true,
  "discountPercent": 14.3,
  "savingsAmount": 4.3,
  "savingsText": "SAVE $4.30",
  "promotions": [
    "Instant Savings: $4.30 off, Ends Nov 29"
  ],
  "unitPriceText": "4.2 ¢/sq ft",
  "rating": 4.8,
  "reviewCount": 3098,
  "ratingHistogram": {
    "1": 39,
    "2": 26,
    "3": 70,
    "4": 241,
    "5": 2722
  },
  "recommendedPercent": 91,
  "stockStatus": "IN_STOCK",
  "stockLabel": "In stock",
  "shippingStatus": "IN_STOCK",
  "pickupStatus": "IN_STOCK",
  "highlights": [
    "Sample bullet point"
  ],
  "description": "A sample description of the product.",
  "specifications": {
    "Net Weight": "2.57 lbs."
  },
  "attributes": {
    "Brand": "Sample Brand"
  },
  "variants": [],
  "imageUrl": "https://i5.samsclubimages.com/asr/00000000-0000-0000-0000-000000000000.jpeg",
  "clubId": "6372",
  "clubName": "Sample Club",
  "position": 3,
  "page": 1,
  "sourceLabel": "paper-towels",
  "detailsFetched": true,
  "reviewsRequested": true,
  "reviews": [
    {
      "reviewId": "1",
      "rating": 5,
      "title": "Great value",
      "text": "Sample review text.",
      "date": "2026-09-25",
      "dateText": "9/25/2026",
      "author": "Sam",
      "verifiedPurchase": true,
      "helpfulVotes": 2,
      "notHelpfulVotes": 0,
      "recommended": null,
      "badges": [
        "Verified Purchase"
      ],
      "images": []
    }
  ],
  "reviewsDelivered": 1,
  "changeType": "NEW",
  "changedFields": [],
  "firstSeenAt": "2026-10-31T12:00:00Z",
  "lastSeenAt": "2026-10-31T12:00:00Z",
  "scrapedAt": "2026-10-31T12:00:00Z"
}

Ways to use this data

  • Price and discount monitoring: track price drops, was-prices, instant savings and unit prices across a category, a brand page or a product list on a schedule.
  • Competitive intelligence for retailers and brands: compare assortment, pricing, ratings and option depth against the largest US warehouse club.
  • Bulk-pack and unit-price analysis: price per ounce, per sheet or per count for grocery and household staples, ready to sort.
  • Review mining: pull thousands of written reviews with their stars, dates and helpful votes to find what breaks and what people love.
  • Catalogue and content teams: build a structured feed of descriptions, specifications, UPCs and images for a comparison site or app.

Before you run

Start with a small input and check the resulting records against your expected fields. Source content and actor options can change; the current Apify listing is the reference for availability and pricing.

Questions about this actor

What data does Sam's Club Scraper return?

The documented output for Sam's Club Scraper includes product, brand, price, was, discount %, currency, rating and reviews. Availability of each field depends on the source page and the selected mode.

How much does Sam's Club Scraper cost?

It costs $2.00 per 1,000 results on the Apify Free plan and from $1.40 on paid plans, with smaller per-run or optional feature charges listed on Apify. The Apify listing shows the current rate for every plan.

Can I search by keyword?

Yes. Use search mode and list one or more keywords. Catalogue mode (words from the product name) and category mode (words from the category name) remain for walking whole product lists and departments, and you can paste a category or key-phrase page you found on the store, with any filter you ticked.

Can I get only new or changed products on a schedule?

Yes. Schedule the actor from the Schedules tab and turn on Incremental mode. Each run then returns only new and updated products, and unchanged ones are not billed unless you turn on Emit unchanged.

Why does a row show a different stock answer than the website for me?

Stock, pickup and delivery answers depend on the club the store assigns to the connection, and the store's own answer can flip between two reads seconds apart. Each product-page row names its club (clubId, clubName), and Read every page as one fixed club makes the club the same for the whole run. The online price was identical across clubs in testing.

Why were some products skipped?

The store lists some product pages that no longer exist, and some products are sold only at certain clubs. A page is skipped, not returned and not billed, only after three fresh connections each received the store's own not-available page. The log reports how many were skipped.

Ready to collect with Sam's Club Scraper?

Run it on Apify with your own input and export the results as JSON, CSV or Excel.