Rep Titan Fitness Equipment Catalog Scraper
ECOMMERCE
REP + Titan Fitness Equipment Catalog Scraper
Scrapes the complete product catalog from REP Fitness and Titan Fitness — the two dominant direct-to-consumer strength-equipment retailers on Shopify. Returns normalized product records with titles, variants, pricing, availability, and images from both sources in a single dataset.
What It Does
Both REP Fitness (repfitness.com) and Titan Fitness (titan.fitness) run on Shopify and expose a public /products.json API endpoint. This actor pages through both catalogs in full, normalizing each product into a consistent schema with a source_site field so you can filter by brand.
Use cases include:
- Price monitoring — track price changes across both brands over time
- Competitive analysis — compare product types, price points, and availability side-by-side
- Affiliate content — build or update product feeds for gym equipment review sites
- Inventory tracking — monitor in-stock/out-of-stock status for specific products or categories
Input
| Field | Type | Default | Description |
|---|---|---|---|
maxItems |
integer | 10 | Maximum number of records to return across both sources combined. Set to a large number (e.g. 10000) to pull the full catalog. |
Output Schema
Each record in the dataset represents one product:
| Field | Type | Description |
|---|---|---|
source_site |
string | Source brand: repfitness or titan |
product_id |
string | Shopify product ID |
title |
string | Product title |
handle |
string | URL-friendly product handle (slug) |
vendor |
string | Brand vendor name |
product_type |
string | Product category (e.g. Barbell, Rack, Plates, Bench, Conditioning) |
tags |
string | JSON array of product tags |
variants |
string | JSON array of variant objects — each with variant_id, sku, title, price, available, grams |
price_min |
number | Lowest variant price |
price_max |
number | Highest variant price |
available |
boolean | True if any variant is in stock |
images |
string | JSON array of product image URLs |
url |
string | Direct product page URL |
created_at |
string | ISO 8601 timestamp when the product was created |
updated_at |
string | ISO 8601 timestamp of the last update |
Example Output
{
"source_site": "repfitness",
"product_id": "7038894801054",
"title": "Ares Bar",
"handle": "ares-bar",
"vendor": "REP Fitness",
"product_type": "Barbells",
"tags": "[\"Barbell\",\"Featured\",\"Strength\"]",
"variants": "[{\"variant_id\":\"41234567890\",\"sku\":\"AB-20\",\"title\":\"20 KG\",\"price\":279.99,\"available\":true,\"grams\":20000}]",
"price_min": 249.99,
"price_max": 279.99,
"available": true,
"images": "[\"https://cdn.shopify.com/s/files/.../ares-bar-main.jpg\"]",
"url": "https://repfitness.com/products/ares-bar",
"created_at": "2023-06-15T08:00:00-06:00",
"updated_at": "2025-05-01T12:34:56-06:00"
}
Notes
- Paginates 250 products per request at ~0.4 seconds between requests — polite for Shopify rate limits.
- Full dual-catalog refresh (REP ~1,500 + Titan ~3,000 SKUs) runs in a few minutes.
- Rogue Fitness is intentionally excluded — their site has no public
products.jsonendpoint. - The
/products.jsonAPI endpoint is public and requires no authentication.