# Summit Racing and JEGS Racing Parts Scraper (`jungle_synthesizer/summit-jegs-racing-parts-scraper`) Actor

Summit Racing and JEGS scraper for racing and performance auto parts. Get SKU, title, brand, regular and sale price, stock, category, photos and ratings from any category, brand or search page, with optional full specifications per part.

- **URL**: https://apify.com/jungle_synthesizer/summit-jegs-racing-parts-scraper.md
- **Developed by:** [BowTiedRaccoon](https://apify.com/jungle_synthesizer) (community)
- **Categories:** E-commerce
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.80 / 1,000 record scrapeds

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

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

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

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Summit Racing and JEGS Racing Parts Scraper

Pull product, price and stock data for racing and high-performance auto parts from Summit Racing and JEGS, the two largest US online retailers in the category. Give it a category, brand or search page from either site, or single product pages, and get one clean record per part in the same format from both retailers.

***

### What it does

Paste one or more Summit Racing or JEGS URLs. The scraper walks every result page and returns one record per part: SKU, title, brand, regular and sale price, stock status, category, photos and customer rating.

Turn on **Include product details** and it opens each product page for the full record: manufacturer part number, the complete specification grid, description, bullet features, reviews and related parts.

Mix both retailers in a single run. Every record carries a `retailer` field (`summit` or `jegs`) and the same field names, so prices line up side by side.

***

### Why use it

- **Both market makers, one format** — Summit Racing and JEGS records share one schema, so a nightly price comparison needs no per-site mapping.
- **Regular and sale price** — `price_usd` is the regular price and `sale_price_usd` is filled whenever the part is discounted, so a markdown is visible without a second run.
- **Stock signals** — `in_stock` on every record, plus a unit count where the retailer shows one.
- **Whole categories in one go** — pagination is handled for you. Point it at a part type, brand or department and set `maxItems` to the size of the pull you want.
- **Resumable** — a large pull that stops early can be continued without paying twice for what was already delivered.

***

### Input

| Field            | Type    | Default       | Description |
|------------------|---------|---------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `startUrls`      | array   | Summit + JEGS | Summit Racing search, part-type, brand or department pages (`summitracing.com/search/...`), JEGS category, brand or collection pages (`jegs.com/c/...`, `/v/...`, `/collection/...`), or single product pages from either site |
| `maxItems`       | integer | 20            | Maximum number of records to return across all start URLs |
| `includeDetails` | boolean | false         | Open every product page for the full record (specifications, description, bullet features, reviews, related parts). Slower than the default catalog records |

#### Example input

```json
{
  "startUrls": [
    { "url": "https://www.summitracing.com/search/part-type/spark-plugs" },
    { "url": "https://www.jegs.com/v/holley" }
  ],
  "maxItems": 100,
  "includeDetails": false
}
```

#### Resuming a large crawl

Every run emits a `resumeCursor` in its Output. If a large crawl stops before it finishes, because it hit `maxItems`, your spend cap (`maxTotalChargeUsd`), or was aborted, start a new run with **the same input** plus that `resumeCursor` to continue from where it left off. The crawl resumes from the queued work the previous run didn't reach.

- You are **not re-charged** for records the earlier run already delivered.
- Resume within your account's run-retention window. On the free tier that is roughly your 10 most recent runs. Once the source run is pruned, its `resumeCursor` is no longer valid.
- `resumeCursor` is opaque. Supply it unmodified.

***

### Output

One record per part.

| Field                      | Type    | Description |
|----------------------------|---------|-----------------------------------------------------------------------------------------------------------------|
| `retailer`                 | string  | `summit` or `jegs` |
| `sku`                      | string  | The retailer's own part number |
| `product_url`              | string  | Link to the product page |
| `title`                    | string  | Product title |
| `brand`                    | string  | Brand or manufacturer. On Summit Racing catalog records it is filled when **Include product details** is on |
| `manufacturer_part_number` | string  | Manufacturer part number. Summit Racing: with **Include product details** |
| `category_path`            | array   | Department, section and part type, outermost first |
| `price_usd`                | number  | Regular price in USD |
| `sale_price_usd`           | number  | Discounted price in USD, only when the part is on sale |
| `in_stock`                 | boolean | Whether the retailer lists the part as in stock |
| `stock_qty`                | integer | Units available where the retailer shows a count |
| `shipping_weight_lbs`      | number  | Weight in pounds where the retailer publishes one (JEGS, with **Include product details**) |
| `description`              | string  | Product description |
| `bullet_features`          | array   | Feature bullets (JEGS, with **Include product details**) |
| `specifications`           | object  | Specification grid as label and value pairs: bore, thread size, finish, material and so on |
| `photos`                   | array   | Image URLs |
| `rating_avg`               | number  | Average customer rating out of 5 |
| `rating_count`             | integer | Number of customer ratings |
| `reviews`                  | array   | Customer reviews shown on the product page: author, stars and text |
| `related_skus`             | array   | SKUs of related or recommended parts |

#### Example output record

```json
{
  "retailer": "jegs",
  "sku": "555-80639",
  "product_url": "https://www.jegs.com/i/jegs-555-80639-ball-joint-service-kit-20-piece-set",
  "title": "Ball Joint Service Kit [20-Piece Set]",
  "brand": "JEGS",
  "manufacturer_part_number": "555-80639",
  "category_path": ["Tools & Garage", "Automotive Specialty Tools", "Alignment & Suspension Tools"],
  "price_usd": 149.99,
  "sale_price_usd": 137.99,
  "in_stock": true,
  "stock_qty": 181,
  "shipping_weight_lbs": 27.2,
  "specifications": { "Part Category": "Accessories", "Handle Material": "Steel" },
  "rating_avg": 4.9,
  "rating_count": 13
}
```

***

### FAQ

#### Which pages can I use as start URLs?

Summit Racing: any `summitracing.com/search/...` page (a part type, brand, department or keyword search) or a single `summitracing.com/parts/<sku>` page. JEGS: any `jegs.com/c/...` category, `jegs.com/v/...` brand or `jegs.com/collection/...` page, or a single `jegs.com/i/...` product page. Other pages are rejected with a clear message.

#### What is the difference between the default records and Include product details?

The default records come straight from the result pages: SKU, title, price, stock, rating and photo, and brand and category on JEGS. That is the fast way to pull a whole category. Include product details opens every product page, so each record also has the specification grid, description, manufacturer part number, reviews and related parts. It takes longer per record, so use it when you need the extra fields.

#### Are all fields filled on every result page?

The first page of a JEGS listing also carries category and unit count. From the second page on, those two fields (and `description` and `specifications` on both sites) are filled only with **Include product details**.

#### Do you cover vehicle fitment (year, make, model)?

Not in this version. Records carry the specification grid and category, not the year/make/model application lists.

#### How much does it cost to run?

Pricing is pay-per-result. Check the Actor's pricing tab for the current rate.

# Actor input Schema

## `sp_intended_usage` (type: `string`):

What will this data feed? E.g. lead lists, KYB checks, price tracking.

## `sp_improvement_suggestions` (type: `string`):

Provide any feedback or suggestions for improvements.

## `sp_contact` (type: `string`):

We'll personally help with your use case. No spam.

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

Maximum number of records to scrape

## `startUrls` (type: `array`):

Summit Racing search, category or brand pages (summitracing.com/search/...), JEGS category, brand or collection pages (jegs.com/c/..., /v/..., /collection/...), or single product pages from either site (summitracing.com/parts/<sku>, jegs.com/i/<slug>). Mix freely.

## `includeDetails` (type: `boolean`):

Open every product page for the full record: brand, manufacturer part number, specifications, description, bullet features, photos, reviews and related parts. Slower and uses more resources than the default catalog-listing records.

## Actor input object example

```json
{
  "sp_contact": "Share your email here...",
  "maxItems": 20,
  "startUrls": [
    {
      "url": "https://www.summitracing.com/search/part-type/spark-plugs"
    },
    {
      "url": "https://www.jegs.com/v/holley"
    }
  ],
  "includeDetails": false
}
```

# 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 = {
    "sp_contact": "Share your email here...",
    "maxItems": 20,
    "startUrls": [
        {
            "url": "https://www.summitracing.com/search/part-type/spark-plugs"
        },
        {
            "url": "https://www.jegs.com/v/holley"
        }
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("jungle_synthesizer/summit-jegs-racing-parts-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 = {
    "sp_contact": "Share your email here...",
    "maxItems": 20,
    "startUrls": [
        { "url": "https://www.summitracing.com/search/part-type/spark-plugs" },
        { "url": "https://www.jegs.com/v/holley" },
    ],
}

# Run the Actor and wait for it to finish
run = client.actor("jungle_synthesizer/summit-jegs-racing-parts-scraper").call(run_input=run_input)

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

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

```

## CLI example

```bash
echo '{
  "sp_contact": "Share your email here...",
  "maxItems": 20,
  "startUrls": [
    {
      "url": "https://www.summitracing.com/search/part-type/spark-plugs"
    },
    {
      "url": "https://www.jegs.com/v/holley"
    }
  ]
}' |
apify call jungle_synthesizer/summit-jegs-racing-parts-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,jungle_synthesizer/summit-jegs-racing-parts-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

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