# PricePlow Supplement Price Scraper (`lulzasaur/priceplow-scraper`) Actor

Scrape supplement prices from PricePlow. Compare prices across retailers. Get product details, ingredients, brand info, and best deals.

- **URL**: https://apify.com/lulzasaur/priceplow-scraper.md
- **Developed by:** [lulz bot](https://apify.com/lulzasaur) (community)
- **Categories:** Other
- **Stats:** 1 total users, 0 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $10.00 / 1,000 results

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/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## PricePlow Supplement Price Scraper

Compare supplement prices across dozens of retailers — protein powders, creatine, pre-workouts, BCAAs, fat burners, and more. Powered by [PricePlow](https://www.priceplow.com), the leading supplement price comparison engine.

### What It Does

- **Search** by keyword (e.g. "whey protein", "creatine monohydrate", "ghost legend")
- **Browse by category** (e.g. protein, creatine, pre-workout, bcaa, fat-burner)
- **Browse by brand** (e.g. optimum-nutrition, ghost, cellucor, musclepharm)
- Extracts **price comparisons from 20+ retailers** per product
- Gets **serving size**, **servings per container**, and **price per serving**
- Captures **key ingredients** from the nutrition facts panel
- Returns the **best price** and which retailer offers it

### Use Cases

- Build a supplement price tracker or deal alert bot
- Research competitive pricing for supplement brands
- Find the cheapest whey protein or creatine per gram
- Monitor price drops across retailers (Amazon, iHerb, Bodybuilding.com, etc.)
- Aggregate supplement data for comparison apps or nutrition tools

### Input Parameters

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `mode` | `search` / `category` / `brand` | `search` | How to discover products |
| `query` | string | `creatine` | Search keyword (mode=search) |
| `category` | string | — | Category slug, e.g. `protein`, `creatine`, `pre-workout` (mode=category) |
| `brand` | string | — | Brand slug, e.g. `optimum-nutrition`, `ghost`, `cellucor` (mode=brand) |
| `limit` | integer | 5 | Max products to scrape (1–1000) |
| `proxyConfiguration` | object | residential | Optional proxy config |

#### Category Slugs (mode=category)

Common categories: `protein`, `creatine`, `pre-workout`, `bcaa`, `fat-burner`, `amino-acids`, `weight-gainers`, `glutamine`, `vitamins`, `fish-oil`

#### Brand Slugs (mode=brand)

Examples: `optimum-nutrition`, `ghost`, `cellucor`, `musclepharm`, `bsn`, `dymatize`, `gaspari-nutrition`, `universal`, `core-nutritionals`, `redcon1`

### Output Fields

Each item in the dataset contains:

| Field | Type | Description |
|-------|------|-------------|
| `productName` | string | Full product name |
| `brand` | string | Brand name |
| `category` | string | Primary category tag |
| `description` | string | Short product description |
| `image` | string | Product image URL |
| `productUrl` | string | PricePlow product page URL |
| `bestPrice` | number | Lowest current price (USD) |
| `bestPriceRetailer` | string | Retailer offering the best price |
| `bestPriceFlavor` | string | Flavor available at best price |
| `bestPricePerServing` | number | Price per serving at best price |
| `servingSize` | string | Serving size (e.g. "1 Scoop") |
| `servings` | number | Servings per container |
| `pricePerServing` | number | Best price divided by servings |
| `retailers` | array | All retailers with prices (sorted cheapest first) |
| `retailerCount` | number | Number of retailers carrying the product |
| `ingredients` | array | Key ingredients with name and amount |
| `rating` | number | Product rating if available |
| `reviewCount` | number | Number of reviews if available |
| `tags` | array | Category/tag labels |
| `breadcrumbs` | array | Page breadcrumb path |
| `scrapedAt` | string | ISO timestamp |

#### Retailer Object Fields

Each item in `retailers` array:

| Field | Description |
|-------|-------------|
| `retailer` | Store name (e.g. "Best Price Nutrition", "iHerb.com") |
| `price` | Current price in USD |
| `unitPrice` | Price per serving/unit |
| `flavor` | Flavor variant |
| `size` | Size variant (e.g. "5 lbs") |
| `hasCoupon` | Whether a coupon code is available |
| `outUrl` | Tracked affiliate link to store |

### Example Output

```json
{
  "productName": "Optimum Nutrition 100% Whey Protein Gold Standard",
  "brand": "Optimum Nutrition",
  "category": "Protein",
  "description": "Gold Standard Whey uses only premium whey protein isolates as the primary ingredient...",
  "image": "https://www.priceplow.com/static/images/products/optimum-nutrition-100-whey-protein-gold-standard.png",
  "productUrl": "https://www.priceplow.com/optimum-nutrition/100-whey-protein-gold-standard",
  "bestPrice": 54.99,
  "bestPriceRetailer": "iHerb.com",
  "bestPriceFlavor": "Double Rich Chocolate",
  "bestPricePerServing": 1.10,
  "servingSize": "1 Scoop (30.4g)",
  "servings": 74,
  "pricePerServing": 1.10,
  "retailers": [
    { "retailer": "iHerb.com", "price": 54.99, "unitPrice": 1.10, "flavor": "Double Rich Chocolate", "size": "5 lbs", "hasCoupon": false },
    { "retailer": "Amazon", "price": 57.19, "unitPrice": 1.14, "flavor": "Double Rich Chocolate", "size": "5 lbs", "hasCoupon": false },
    { "retailer": "Bodybuilding.com", "price": 59.99, "unitPrice": 1.20, "flavor": "Double Rich Chocolate", "size": "5 lbs", "hasCoupon": true }
  ],
  "retailerCount": 12,
  "ingredients": [
    { "name": "Whey Protein Isolates", "amount": "24g" },
    { "name": "Whey Protein Concentrate", "amount": "included" }
  ],
  "tags": ["Protein", "Whey Protein"],
  "scrapedAt": "2026-04-22T10:00:00.000Z"
}
```

### Notes

- PricePlow is a pure server-rendered site with no anti-bot protection
- Prices are updated daily by PricePlow's tracking system
- Some products may have limited retailer data if they are out of stock everywhere
- Residential proxies are recommended for scraping more than 100 products at a time
- The scraper respects rate limits with ~600ms delays between requests

# Actor input Schema

## `mode` (type: `string`):

How to discover products: search by keyword, browse a category, or browse by brand.

## `query` (type: `string`):

Search term when mode=search (e.g. 'whey protein', 'creatine', 'pre-workout').

## `category` (type: `string`):

Category URL slug when mode=category (e.g. 'protein', 'creatine', 'pre-workout', 'bcaa', 'fat-burner'). Find slugs at priceplow.com.

## `brand` (type: `string`):

Brand URL slug when mode=brand (e.g. 'optimum-nutrition', 'ghost', 'cellucor', 'musclepharm'). Find slugs at priceplow.com/brands.

## `limit` (type: `integer`):

Maximum number of products to scrape.

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

Optional proxy settings. Residential proxies recommended for high-volume scraping.

## Actor input object example

```json
{
  "mode": "search",
  "query": "creatine",
  "category": "",
  "brand": "",
  "limit": 5,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# 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 = {
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("lulzasaur/priceplow-scraper").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 = { "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    } }

# Run the Actor and wait for it to finish
run = client.actor("lulzasaur/priceplow-scraper").call(run_input=run_input)

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

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

```

## CLI example

```bash
echo '{
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}' |
apify call lulzasaur/priceplow-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=lulzasaur/priceplow-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/48P23CEbUyebn7kFw/builds/D35OLYj6eYgRRQNag/openapi.json
