# 1st Phorm Scraper: Vitamins, Supplements & Apparel (`getascraper/1stphorm-products-scraper`) Actor

Extracts detailed vitamins, supplements, nutritionals, and sports apparel listings, variants, SKUs, pricing (USD), original compare-at prices, weights, stock availability, and Shopify CDN image links from 11stphorm.com.

- **URL**: https://apify.com/getascraper/1stphorm-products-scraper.md
- **Developed by:** [GetAScraper](https://apify.com/getascraper) (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.66 / 1,000 product records

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

## 💊 1st Phorm product scraper: full catalog, variants, and live pricing

Get every supplement, protein powder, apparel piece, and accessory variant from 1stphorm.com with live USD pricing, SKUs, stock availability, and sale status, ready for your spreadsheet in under 60 seconds.

### 🔍 What does the Actor do?

- Fetches the complete 1st Phorm product catalog, including every size, flavor, and color variant as a separate flat row, with no manual pagination.
- Captures current price, compare-at price, discount percentage, and on-sale flag for every variant at the moment of the run.
- Filters results by collection URL, price range, vendor, product type, tag keyword, stock status, or SKU presence so you only pay for the rows you need.
- Returns clean, spreadsheet-ready records with product images, descriptions, weight, handles, and full publishing timestamps.

### 👥 Who is this for?

- **I am a supplement retail analyst** monitoring 1st Phorm protein and pre-workout pricing week over week to feed my competitor price benchmarking model.
- **I am an e-commerce operator** running a sports nutrition store who needs a weekly snapshot of every in-stock 1st Phorm SKU so I can keep my pricing competitive.
- **I am a product researcher** building a market map of the US supplement category and need structured product data including variants, SKUs, and vendor labels to classify products accurately.
- **I am a data engineer** maintaining a pricing database for a hedge fund that tracks consumer-staples brand pricing trends, and I need a reliable feed of 1st Phorm catalog changes.

### 📊 Data table

| Field | Type | Description |
|---|---|---|
| product\_id | integer | Unique Shopify product ID |
| variant\_id | integer | Unique Shopify product variant ID |
| title | string | Combined product and variant name |
| product\_name | string | Canonical product name |
| variant\_name | string | Attribute description of the variant (size, color, flavor) |
| handle | string | Product URL handle slug |
| sku | string | Stock keeping unit code |
| vendor | string | Vendor or brand label |
| product\_type | string | Supplement category or apparel classification |
| price | number | Current selling price in USD |
| original\_price | number | Compare-at retail price in USD |
| discount\_pct | number | Percentage discount off original price (null when no compare-at price is set) |
| on\_sale | boolean | True when the variant has a compare-at price higher than the current price |
| currency | string | Currency code (USD) |
| weight\_grams | number | Shipping weight in grams |
| is\_available | boolean | Stock availability flag |
| is\_taxable | boolean | Whether taxes apply to this variant |
| requires\_shipping | boolean | Whether shipping is required |
| variant\_position | integer | Sort position of this variant in the product group |
| description | string | Clean, tag-stripped product description text |
| image\_url | string | Product variant main image URL |
| product\_url | string | Canonical product page URL |
| all\_images | array | All image URLs associated with this product |
| tags | array | Metadata tag keywords |
| published\_at | string | ISO 8601 timestamp when the product was published |
| created\_at | string | ISO 8601 timestamp when the product was created |
| updated\_at | string | ISO 8601 timestamp of the most recent product update |
| scraped\_at | string | ISO 8601 extraction timestamp |

#### Sample output record

```json
{
  "product_id": 7823916241189,
  "variant_id": 43098274152741,
  "title": "Phormula-1 Protein - Strawberry Milkshake / 2lb",
  "product_name": "Phormula-1 Protein",
  "variant_name": "Strawberry Milkshake / 2lb",
  "handle": "phormula-1-protein",
  "sku": "PH1-STW-2LB",
  "vendor": "1st Phorm",
  "product_type": "Protein",
  "price": 54.99,
  "original_price": 59.99,
  "discount_pct": 8.33,
  "on_sale": true,
  "currency": "USD",
  "weight_grams": 1020,
  "is_available": true,
  "is_taxable": true,
  "requires_shipping": true,
  "variant_position": 1,
  "description": "Phormula-1 is specifically formulated for post-workout recovery with fast-absorbing whey protein isolate.",
  "image_url": "https://cdn.shopify.com/s/files/1/0061/6754/7485/products/phormula1-strawberry-2lb.jpg",
  "product_url": "https://1stphorm.com/products/phormula-1-protein",
  "all_images": [
    "https://cdn.shopify.com/s/files/1/0061/6754/7485/products/phormula1-strawberry-2lb.jpg",
    "https://cdn.shopify.com/s/files/1/0061/6754/7485/products/phormula1-strawberry-2lb-back.jpg"
  ],
  "tags": ["protein", "post-workout", "isolate", "fast-absorbing"],
  "published_at": "2021-03-15T18:00:00-06:00",
  "created_at": "2021-03-12T10:23:00-06:00",
  "updated_at": "2024-11-01T14:12:00-06:00",
  "scraped_at": "2026-06-25T17:30:00.000Z"
}
```

### ⚙️ Input

| Field | Type | Required | Description |
|---|---|---|---|
| collectionUrl | string | No | Scrape a specific 1st Phorm collection instead of the full catalog. Paste any collection page URL (e.g. https://1stphorm.com/collections/protein). Leave blank to scrape the entire product catalog. |
| maxItems | integer | No | Maximum total product records to extract. Defaults to 100. |
| minPrice | number | No | Only include variants priced at or above this value in USD. |
| maxPrice | number | No | Only include variants priced at or below this value in USD. |
| vendorFilter | string | No | Restrict results to a specific vendor or brand label (case-insensitive). |
| productTypeFilter | string | No | Restrict results to a specific product type classification (case-insensitive). |
| tagFilter | string | No | Restrict results to products containing a specific tag keyword (case-insensitive). |
| excludeSoldOut | boolean | No | When enabled, filters out variants that are out of stock. |
| onlyWithSku | boolean | No | When enabled, filters out variants without a defined SKU code. |
| proxyConfiguration | object | Yes | Proxy settings. Standard datacenter proxies are fully sufficient for this target. |

### 💰 Pricing

This Actor uses pay-per-result pricing. You are charged only for records that are successfully saved to your dataset. Empty runs, failed runs, and filtered-out rows cost nothing.

There are no fixed monthly subscriptions or hidden fees. Starter, Scale, and Business plan subscribers receive automatic discounts.

### ⭐ Enjoying 1st Phorm Product Scraper?

<table width="100%">
<tr>
<td style="padding:20px 24px 14px;background:#FBE8E9;border:1px solid #FBE8E9;border-left:5px solid #D62839;border-radius:10px 10px 0 0">
<span style="font-size:20px;letter-spacing:4px">⭐ ⭐ ⭐ ⭐ ⭐</span><br>
<span style="font-size:17px;font-weight:800;color:#1C1917">A full 1st Phorm catalog with live USD pricing and stock status in under a minute, no manual page-by-page checks.</span><br>
<span style="font-size:14px;color:#57534E">A 5-star rating takes 10 seconds and helps other supplement retail analysts and sports nutrition operators find it. Your feedback also tells us what to build next.</span>
</td>
</tr>
<tr>
<td style="padding:0;background:#D62839;border:1px solid #FBE8E9;border-top:none;border-radius:0 0 10px 10px;text-align:center">
<a href="https://apify.com/getascraper/1stphorm-products-scraper/reviews" style="display:block;padding:13px 16px;color:#FFFFFF;text-decoration:none;font-weight:800;font-size:15px;letter-spacing:0.3px">★&nbsp;&nbsp;Rate this Actor on Apify</a>
</td>
</tr>
</table>

### ❓ Frequently asked questions

##### Does it get blocked by 1st Phorm's website?

No. The Actor fetches data from 1st Phorm's Shopify product catalog feed, which is publicly available and does not require browser rendering or login. Standard datacenter proxies are fully sufficient, and the feed is stable under frequent polling.

##### Does it require a 1st Phorm account or login?

No. All product, pricing, and variant data is publicly accessible from the catalog feed without any authentication. No account, cookie, or session token is needed.

##### How current is the pricing data?

Prices reflect the live state of the 1st Phorm catalog at the exact moment the Actor runs. Schedule it in the Apify Console to maintain an up-to-date price feed on any cadence you need.

##### Can I scrape just one product collection instead of the whole catalog?

Yes. Paste any 1st Phorm collection page URL into the Collection URL field (for example, https://1stphorm.com/collections/protein) and the Actor scrapes only that collection instead of the full product catalog.

### 🔗 Other actors

- [REI Scraper](https://apify.com/getascraper/rei-scraper) ↗ - extracts outdoor gear products, sale prices, and specs from REI.
- [DSW Scraper](https://apify.com/getascraper/dsw-scraper) ↗ - collects footwear listings, pricing, and sizes from DSW.com.
- [ThriftBooks Scraper](https://apify.com/getascraper/thriftbooks-scraper) ↗ - extracts book listings, conditions, and pricing from ThriftBooks.
- [Woot Scraper](https://apify.com/getascraper/woot-scraper) ↗ - tracks flash deal listings and prices from Woot by Amazon.
- [Coolblue Scraper](https://apify.com/getascraper/coolblue-scraper) ↗ - collects product prices, ratings, and stock data from Coolblue.

# Actor input Schema

## `collectionUrl` (type: `string`):

Scrape a specific 1st Phorm collection instead of the full catalog. Paste any collection page URL, for example https://1stphorm.com/collections/protein. Leave blank to scrape the entire product catalog.

## `minPrice` (type: `number`):

Filter results to only include products and variants with a price greater than or equal to this value in USD.

## `maxPrice` (type: `number`):

Filter results to only include products and variants with a price less than or equal to this value in USD.

## `vendorFilter` (type: `string`):

Restrict results to only include products matching a specific vendor or brand catalog name (case-insensitive, optional).

## `productTypeFilter` (type: `string`):

Restrict results to only include products matching a specific product type classification (case-insensitive, optional).

## `tagFilter` (type: `string`):

Restrict results to only include products matching a specific tag keyword (case-insensitive, optional).

## `excludeSoldOut` (type: `boolean`):

If enabled, filters out product variants that are out of stock.

## `onlyWithSku` (type: `boolean`):

If enabled, filters out product variants that do not have a defined SKU code.

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

Maximum total product records to extract.

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

Rotating proxies settings to bypass anti-scraping and geo-blocking restrictions.

## Actor input object example

```json
{
  "collectionUrl": "",
  "vendorFilter": "",
  "productTypeFilter": "",
  "tagFilter": "",
  "excludeSoldOut": false,
  "onlyWithSku": false,
  "maxItems": 100,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": []
  }
}
```

# Actor output Schema

## `results` (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 = {
    "collectionUrl": "",
    "vendorFilter": "",
    "productTypeFilter": "",
    "tagFilter": "",
    "excludeSoldOut": false,
    "onlyWithSku": false,
    "maxItems": 100,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": []
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("getascraper/1stphorm-products-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 = {
    "collectionUrl": "",
    "vendorFilter": "",
    "productTypeFilter": "",
    "tagFilter": "",
    "excludeSoldOut": False,
    "onlyWithSku": False,
    "maxItems": 100,
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": [],
    },
}

# Run the Actor and wait for it to finish
run = client.actor("getascraper/1stphorm-products-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 '{
  "collectionUrl": "",
  "vendorFilter": "",
  "productTypeFilter": "",
  "tagFilter": "",
  "excludeSoldOut": false,
  "onlyWithSku": false,
  "maxItems": 100,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": []
  }
}' |
apify call getascraper/1stphorm-products-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/acts/sHYOTkYBWlzy49rCp/builds/nY0SksCKOGbivPKw1/openapi.json
