# 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 a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use 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.

### 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.

# 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

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "1st Phorm Scraper: Vitamins, Supplements & Apparel",
        "description": "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.",
        "version": "0.1",
        "x-build-id": "5ImgPKASLZPQS2wvH"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/getascraper~1stphorm-products-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-getascraper-1stphorm-products-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/getascraper~1stphorm-products-scraper/runs": {
            "post": {
                "operationId": "runs-sync-getascraper-1stphorm-products-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/getascraper~1stphorm-products-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-getascraper-1stphorm-products-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "required": [
                    "proxyConfiguration"
                ],
                "properties": {
                    "collectionUrl": {
                        "title": "Collection URL",
                        "type": "string",
                        "description": "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.",
                        "default": ""
                    },
                    "minPrice": {
                        "title": "Minimum price",
                        "minimum": 0,
                        "type": "number",
                        "description": "Filter results to only include products and variants with a price greater than or equal to this value in USD."
                    },
                    "maxPrice": {
                        "title": "Maximum price",
                        "minimum": 0,
                        "type": "number",
                        "description": "Filter results to only include products and variants with a price less than or equal to this value in USD."
                    },
                    "vendorFilter": {
                        "title": "Vendor filter",
                        "type": "string",
                        "description": "Restrict results to only include products matching a specific vendor or brand catalog name (case-insensitive, optional).",
                        "default": ""
                    },
                    "productTypeFilter": {
                        "title": "Product type filter",
                        "type": "string",
                        "description": "Restrict results to only include products matching a specific product type classification (case-insensitive, optional).",
                        "default": ""
                    },
                    "tagFilter": {
                        "title": "Tag filter",
                        "type": "string",
                        "description": "Restrict results to only include products matching a specific tag keyword (case-insensitive, optional).",
                        "default": ""
                    },
                    "excludeSoldOut": {
                        "title": "Exclude out of stock products",
                        "type": "boolean",
                        "description": "If enabled, filters out product variants that are out of stock.",
                        "default": false
                    },
                    "onlyWithSku": {
                        "title": "Only with SKU",
                        "type": "boolean",
                        "description": "If enabled, filters out product variants that do not have a defined SKU code.",
                        "default": false
                    },
                    "maxItems": {
                        "title": "Maximum products limit",
                        "minimum": 1,
                        "type": "integer",
                        "description": "Maximum total product records to extract.",
                        "default": 100
                    },
                    "proxyConfiguration": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "Rotating proxies settings to bypass anti-scraping and geo-blocking restrictions.",
                        "default": {
                            "useApifyProxy": true,
                            "apifyProxyGroups": []
                        }
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
