# Samsung US Product Price & Stock Scraper (`superslowsloth/samsung-us-products`) Actor

Samsung US scraper: category pages to one row per product with USD price, in-stock status, rating, review count, model sku, link and image. For Samsung US price-drop and stock watching on phones, TVs, monitors, appliances. Reads the JSON-LD list of up to 22 products per page.

- **URL**: https://apify.com/superslowsloth/samsung-us-products.md
- **Developed by:** [Superslow Sloth](https://apify.com/superslowsloth) (community)
- **Categories:** E-commerce, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.56 / 1,000 product scrapeds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Samsung US scraper: price and stock watch by product category (USD)

This Samsung US scraper reads [samsung.com/us](https://www.samsung.com/us/)
category pages (smartphones, tablets, watches, TVs, monitors, refrigerators and
the rest) and returns one flat row per product: the current price in **USD**,
in-stock or out-of-stock, rating and review count, the model sku, the product
link and the photo. Run it on a schedule and diff the dataset to get a
**Samsung US price-drop and stock watch**: which Galaxy phones changed price
since last week, which TVs went out of stock, what a new model launched at.

No account, no API key, no login, no browser. One request per category.

### Read this first: a page lists at most 22 products

Samsung's category pages carry their product list as JSON-LD, and that list is
**capped at 22 products**. The page's own "view more" grid is loaded by
JavaScript from a separate service, and no address on the page reaches the rest:
`?page=2`, `?offset=`, `?pageSize=` and the like return the same 22 (byte-identical
list), and `/page-2/` is a 404. This actor reads the list as the page serves it.
Measured 2026-10-23, list rows against the products Samsung's own grid reports for the
same category:

| Category page | Rows in the list | Products in the category |
|---|---|---|
| `/us/smartphones/all-smartphones/` | 22 | 42 |
| `/us/televisions-home-theater/tvs/all-tvs/` | 22 | 43 |
| `/us/computing/monitors/all-monitors/` | 22 | 60 |
| `/us/mobile-accessories/all-mobile-accessories/` | 22 | 318 |
| `/us/home-appliances/refrigerators/all-refrigerators/` | 14 | 40 |
| `/us/tablets/all-tablets/` | 14 | 14 |
| `/us/watches/all-watches/` | 14 | 14 |
| `/us/smartphones/galaxy-z/` | 11 | 11 |

So: **the rows are the products Samsung lists on the page, not necessarily the
whole category.** A list shorter than 22 does not prove the category is complete
(refrigerators list 14 of 40). The list is Samsung's own order and changes, so a
product can move into or out of the 22 between runs; for a watch on specific
product lines read the narrow page (`/us/smartphones/galaxy-z/`, `galaxy-s`,
`galaxy-a`) rather than the all-page. The run log names each category whose list
was full-length.

### Input

| Field | Notes |
|---|---|
| `categories` | Category pages, one per line: the address (`https://www.samsung.com/us/smartphones/all-smartphones/`) or the path (`/us/televisions-home-theater/tvs/all-tvs/`). Only `samsung.com/us` is accepted: `/uk/` and other countries are refused. Empty reads the default set: smartphones, tablets, watches, TVs, monitors, refrigerators. A path that is not a product list is retried from fresh addresses and then reported as a failure. |
| `maxItems` | Products per category (default 100, up to 100). A page lists at most 22, so this only matters below 22. |
| `proxyConfiguration` | Apify datacenter proxy by default. |

A product that two categories both list is returned once, under the first, and
charged once.

Example input:

```json
{
  "categories": [
    "https://www.samsung.com/us/smartphones/all-smartphones/",
    "/us/smartphones/galaxy-z/",
    "/us/televisions-home-theater/tvs/all-tvs/"
  ],
  "maxItems": 22
}
```

### Output

| Field | Notes |
|---|---|
| `category` | The category page path the product was listed on. |
| `position` | Place in the page's list (1 is first), Samsung's own order. |
| `sku` | The model code at the end of the product link, upper-case (`SM-S948UZVEXAA`). Unique within a category page (22 of 22 on every page measured); the key rows are de-duplicated on. |
| `name`, `url`, `image_url` | As the list shows them. `image_url` is null if none. |
| `price`, `currency` | The price in the list's `offers` as a number (Samsung sends a string), and its currency, `USD`. Null if the product carries no price. |
| `availability`, `in_stock` | Stock as sent (`InStock`, `OutOfStock`) and a flag: true for in stock, false for out of stock, null for anything else. |
| `rating`, `review_count` | Average stars (0 to 5) and the number of reviews. **Both are null when the product carries no rating** (39 of 190 products measured): no rating shown is not a rating of 0. |

Example row (real values, 2026-10-23):

```json
{
  "category": "/us/smartphones/all-smartphones/",
  "position": 1,
  "sku": "SM-F976UDGAXAA",
  "name": "Galaxy Z Fold8 Ultra 256GB (Unlocked)",
  "url": "https://www.samsung.com/us/smartphones/galaxy-z-fold8-ultra/buy/galaxy-z-fold8-ultra-256gb-unlocked-sku-sm-f976udgaxaa",
  "image_url": "https://images.samsung.com/is/image/samsung/p6pim/us/f2607/gallery/us-galaxy-z-fold8-ultra-f976-600251-sm-f976udgaxaa-553838537?$PD_GALLERY_PNG$",
  "currency": "USD",
  "price": 2099.99,
  "availability": "InStock",
  "in_stock": true,
  "rating": 4.8808,
  "review_count": 2568
}
```

#### Honest nulls and what is not here

- **No list price, discount or promo.** The list carries one price per product
  and no struck-through price; there is no `on_sale` or percent off. Diff two
  runs on `sku` to see a price drop.
- **No description, specs or variants.** The list's description is empty on every
  product. One row is one product link (a model code, e.g. one storage size and
  colour of a phone).
- **No history.** Each run is a snapshot.

### Pricing

Pay per event:

- **$0.002** per run (`actor-start`), charged only after your input is
  validated, so a run that fails on bad input costs nothing.
- **$0.00056** per product row written (`product-scraped`), i.e. $0.56 per
  1,000 products. Repeats of a product another category already returned are
  free.

### How it fetches

It requests each category page and parses the JSON-LD `ItemList` of `Product`
elements in the HTML. Measured 2026-10-23: HTTP 200 with the list from a plain
home connection and from Apify datacenter and residential addresses (10 of 10
each). A refusal (403, 429, 5xx), a 200 without the product list (a bot-check
page looks the same as a page that is not a list), or a dropped connection is
treated as the address being blocked, and the actor rotates to a fresh one and
retries. An unknown path is a 404 and is reported, not retried.

If Samsung changes the page, the run fails with a message instead of returning
empty rows.

# Actor input Schema

## `categories` (type: `array`):

Samsung US category pages to read, one per line: the page address (for example https://www.samsung.com/us/smartphones/all-smartphones/) or its path (/us/televisions-home-theater/tvs/all-tvs/). Only samsung.com/us pages are accepted. Each page lists at most 22 products in its product data, so a narrower page (for example /us/smartphones/galaxy-z/) reaches products a broad page's 22 do not. Leave empty to read the default set: smartphones, tablets, watches, TVs, monitors and refrigerators.

## `maxItems` (type: `integer`):

Return at most this many products from each category page, in the order Samsung lists them. A page lists at most 22, so values above 22 return the whole list. A product that two categories both list is returned once, under the first.

## `proxyConfiguration` (type: `object`):

Use Apify's automatic datacenter proxy (the default). samsung.com/us answered Apify datacenter and residential addresses alike with the product list when this actor was built (10 of 10 each); the datacenter group is cheaper and was enough. A refused request is retried from a fresh address.

## Actor input object example

```json
{
  "categories": [
    "https://www.samsung.com/us/smartphones/all-smartphones/",
    "https://www.samsung.com/us/televisions-home-theater/tvs/all-tvs/"
  ],
  "maxItems": 100,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `items` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "categories": [
        "https://www.samsung.com/us/smartphones/all-smartphones/",
        "https://www.samsung.com/us/televisions-home-theater/tvs/all-tvs/"
    ],
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("superslowsloth/samsung-us-products").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "categories": [
        "https://www.samsung.com/us/smartphones/all-smartphones/",
        "https://www.samsung.com/us/televisions-home-theater/tvs/all-tvs/",
    ],
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("superslowsloth/samsung-us-products").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "categories": [
    "https://www.samsung.com/us/smartphones/all-smartphones/",
    "https://www.samsung.com/us/televisions-home-theater/tvs/all-tvs/"
  ],
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call superslowsloth/samsung-us-products --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,superslowsloth/samsung-us-products"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/39zmim2IExk6baNr8/builds/qTvtPo3UdRwev1Rxd/openapi.json
