# SidelineSwap Scraper (`crawlerbros/sidelineswap-scraper`) Actor

Scrape SidelineSwap - the marketplace for new and used sports gear. Search by keyword, browse 32 sports categories, or fetch trending gear; get price, condition, seller info, and photos per item.

- **URL**: https://apify.com/crawlerbros/sidelineswap-scraper.md
- **Developed by:** [Crawler Bros](https://apify.com/crawlerbros) (community)
- **Categories:** Automation, E-commerce, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.00 / 1,000 results

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.
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

## SidelineSwap Scraper

Scrape **SidelineSwap** — the largest marketplace for buying and selling new and used sports gear. Search by keyword, browse 32 sport categories, grab trending gear, or fetch specific listings by URL or ID — with price, condition, seller reputation, and photos per item. No login, no API key.

### What this actor does

- **Five modes:** `search` (default), `byCategory`, `byIds`, `trending`, `byUrl`
- **32 sport dropdowns** — football, baseball, basketball, hockey, golf, soccer, lacrosse, fishing, skiing and more
- **6 sort orders** — Recommended, Newest, Last Updated, Trending, Price High→Low, Price Low→High
- **Filters:** price range, condition (new / used)
- **Rich item data:** price + list/retail price, condition, category, seller username & reputation, favorites/visits, photos
- **Detail enrichment:** `mode=byUrl` adds brand, model, size, seller location, shipping estimate and seller description
- **Empty fields are omitted**

### Output per item

Browse records (`search`, `byCategory`, `byIds`, `trending`) include:

- `id` — SidelineSwap item ID
- `name` — item title
- `price` — asking price in USD
- `listPrice`, `retailPrice` — comparative prices when the site shows them
- `condition` — `New` / `Used` / seller-specific condition
- `category`, `categoryDetail` — sport and sub-category (e.g. `football` / `football-helmets`)
- `state` — listing state (`available`, …)
- `sellerUsername`, `sellerId`, `sellerEmblems[]` — seller identity and badges (fast shipper, pro seller…)
- `favoritersCount`, `visitCount`, `updatedAt`
- `saleLabel` — active sale badge text (e.g. `15% OFF`)
- `imageUrl` — primary photo
- `itemUrl`, `sourceUrl` — canonical listing URL
- `recordType: "item"`, `scrapedAt`

Detail records (`mode = byUrl`) additionally include:

- `brand`, `model`, `size`, `ageGroup`, `quantity`, `categoryPath`
- `sellerFeedback` — e.g. `97.7% Positive Feedback (46)`
- `sellerLocation` — state the item ships from (e.g. `ND`)
- `description` — the seller's own item description
- `images[]` — full photo gallery

### Input

| Field | Type | Default | Description |
|---|---|---|---|
| `mode` | string | `search` | `search` / `byCategory` / `byIds` / `trending` / `byUrl` |
| `searchQuery` | string | `nike vapor cleats` | Free-text keyword (mode=search) |
| `sport` | string | `football` | Sport category (mode=byCategory) |
| `itemIds` | array | – | Numeric item IDs (mode=byIds) |
| `urls` | array | – | Gear URLs (mode=byUrl) |
| `sortBy` | string | `relevancy_desc` | Site sort order |
| `condition` | string | – | `new` / `used` filter |
| `priceMin` | int | – | Minimum price in USD |
| `priceMax` | int | – | Maximum price in USD |
| `maxItems` | int | `50` | Hard cap (1–500) |
| `proxyConfiguration` | object | Apify AUTO | Optional; engaged only if direct access is blocked |

#### Example: keyword search with filters

```json
{
  "mode": "search",
  "searchQuery": "nike vapor cleats",
  "condition": "used",
  "priceMax": 150,
  "sortBy": "price_asc",
  "maxItems": 30
}
```

#### Example: browse a sport

```json
{
  "mode": "byCategory",
  "sport": "hockey",
  "sortBy": "popular_desc",
  "maxItems": 40
}
```

#### Example: fetch specific items

```json
{
  "mode": "byIds",
  "itemIds": ["10479743", "11222865"]
}
```

#### Example: trending gear

```json
{
  "mode": "trending",
  "maxItems": 25
}
```

### Use cases

- **Resale market intelligence** — track used-gear pricing and inventory per sport and brand
- **Price comparison** — monitor list vs. retail prices to find deals
- **Sports retailers** — competitive analysis of the resale market for trade-in programs
- **Athlete parents / players** — find specific cleats, bats, sticks and gear below retail
- **Marketplace research** — study seller behaviour, feedback, and fast-shipper cohorts

### FAQ

**Is a proxy required?**
No. The actor first tries a direct connection. If SidelineSwap blocks the datacenter IP (403), it automatically retries through the free Apify AUTO datacenter proxy. If you see 0 results, enabling the proxyConfiguration is the usual fix.

**What currency are prices in?**
USD.

**Why are some fields missing on browse records?**
Browse pages (search / category / trending) only surface card-level data — price, condition, seller, photo. Fields like `brand`, `description`, and `sellerLocation` only appear on the item's own page; use `mode=byUrl` (or any `itemUrl`) to get the full profile. Fetching every detail page while browsing would make runs slow and expensive.

**Does the actor use SidelineSwap's official API?**
No. It reads the same data the public website renders, including the JSON payload the site itself embeds in browse pages.

**Can I look up items by ID?**
Yes — `mode=byIds` accepts numeric item IDs and resolves each one through the site's own search.

**Why is `imageUrl` a rehosted URL?**
`images.sidelineswap.com` hotlink-blocks requests that don't send the site's `Referer` header (HTTP 403), which would make the URLs dead in your own apps. The actor rehosts each primary photo into the run's Apify Key-Value Store and emits that permanent, anonymous URL as `imageUrl`, with the upstream address retained as `imageUrlOriginal` for traceability. The full gallery (`images[]`) keeps upstream URLs; fetch those with a `Referer: https://www.sidelineswap.com/` header if needed.

**Is this actor affiliated with SidelineSwap?**
No. This is a third-party actor using publicly visible pages.

# Actor input Schema

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

How to find items.

## `searchQuery` (type: `string`):

Free-text keyword (mode=search), e.g. `nike vapor cleats`.

## `sport` (type: `string`):

Sport category to browse (mode=byCategory).

## `itemIds` (type: `array`):

Numeric SidelineSwap item IDs to look up.

## `urls` (type: `array`):

Full sidelineswap.com gear URLs, e.g. `https://www.sidelineswap.com/gear/football/balls/10479743-franklin-junior-football`.

## `sortBy` (type: `string`):

How results are sorted on the site.

## `condition` (type: `string`):

Only keep items in this condition.

## `priceMin` (type: `integer`):

Only keep items priced at or above this amount.

## `priceMax` (type: `integer`):

Only keep items priced at or below this amount.

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

Hard cap on emitted records.

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

Optional Apify proxy. The actor tries direct access first and only engages the (free) AUTO datacenter proxy when SidelineSwap blocks the direct IP.

## Actor input object example

```json
{
  "mode": "search",
  "searchQuery": "nike vapor cleats",
  "sport": "football",
  "itemIds": [],
  "urls": [],
  "sortBy": "relevancy_desc",
  "condition": "",
  "maxItems": 50,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

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

Dataset containing all scraped SidelineSwap items.

# 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 = {
    "mode": "search",
    "searchQuery": "nike vapor cleats",
    "sport": "football",
    "itemIds": [],
    "urls": [],
    "sortBy": "relevancy_desc",
    "condition": "",
    "maxItems": 50,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("crawlerbros/sidelineswap-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 = {
    "mode": "search",
    "searchQuery": "nike vapor cleats",
    "sport": "football",
    "itemIds": [],
    "urls": [],
    "sortBy": "relevancy_desc",
    "condition": "",
    "maxItems": 50,
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("crawlerbros/sidelineswap-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 '{
  "mode": "search",
  "searchQuery": "nike vapor cleats",
  "sport": "football",
  "itemIds": [],
  "urls": [],
  "sortBy": "relevancy_desc",
  "condition": "",
  "maxItems": 50,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call crawlerbros/sidelineswap-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/uzikeNWFHDOtePamG/builds/oUvDf6wnnRds5EIPr/openapi.json
