# Caterpillar Equipment Catalog Scraper (`muhammadafzal/caterpillar-catalog-scraper`) Actor

Scrape public Cat equipment models, specifications, standard and optional equipment, images, and technical document links for research and procurement.

- **URL**: https://apify.com/muhammadafzal/caterpillar-catalog-scraper.md
- **Developed by:** [Muhammad Afzal](https://apify.com/muhammadafzal) (community)
- **Categories:** E-commerce, Automation, AI
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $5.00 / 1,000 caterpillar products

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#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

## Caterpillar Equipment Catalog Scraper

Extract public Cat® equipment models, descriptions, specifications, equipment lists, images, and brochure links from Caterpillar product pages. The Actor is designed for equipment research, catalog monitoring, procurement analysis, and structured AI workflows.

This Actor covers the **public new-equipment catalog on Cat.com**. It does not scrape the authenticated Cat Parts Store, serial-number fitment diagrams, dealer-only data, used inventory, rental inventory, private pricing, or account data.

### What it extracts

| Field | Description |
| --- | --- |
| `productId` | Numeric Cat.com product identifier when present in the URL |
| `model`, `title` | Model name and full product-page title |
| `category`, `subcategory` | Equipment taxonomy parsed from the public URL |
| `description` | Public metadata or lead description |
| `keySpecifications` | Prominent specification name/value pairs |
| `specificationGroups` | Detailed specifications grouped by page section |
| `standardEquipment`, `optionalEquipment` | Public equipment lists, when shown |
| `images` | Public product image URLs |
| `downloads` | Public brochure and technical PDF links |
| `sourceUrl`, `scrapedAt` | Source provenance and collection time |

### When to use it

Use the Actor to build equipment comparison tables, monitor product-page changes, populate procurement research, find public technical documents, or give an AI agent structured model specifications. Supply one or more direct product URLs when you need deterministic records; category-page discovery is not enabled because Cat.com's regional catalog application did not expose stable product links during validation.

Do not use it for parts compatibility, PIN/serial-number diagrams, dealer quotes, checkout, logged-in data, or inventory. Those surfaces have different access and data contracts.

### Input

| Field | Default | Notes |
| --- | --- | --- |
| `startUrls` | D7 product page in Console prefill | One or more Cat.com new-equipment product detail URLs |
| `maxResults` | `20` | 1–500 delivered product records |
| `includeSpecifications` | `true` | Extract key and grouped specifications |
| `includeEquipment` | `true` | Extract standard and optional equipment |
| `includeDownloads` | `true` | Return document links without downloading files |
| `useApifyProxy` | `true` | Recommended residential route for Cat.com's Akamai protection |
| `proxyCountry` | `US` | Two-letter country code kept consistent for the browser session |

Minimal deterministic input:

```json
{
  "startUrls": [
    { "url": "https://www.cat.com/en_US/products/new/equipment/dozers/medium-dozers/102647.html" }
  ],
  "maxResults": 1
}
```

API example:

```bash
curl "https://api.apify.com/v2/acts/YOUR_ACTOR_ID/runs?token=YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"startUrls":[{"url":"https://www.cat.com/en_US/products/new/equipment/excavators/large-excavators/127105.html"}],"maxResults":1}'
```

Keep API tokens in request headers or your secret manager in production; do not commit or log them.

### Output example

```json
{
  "productId": "102647",
  "model": "D7",
  "title": "D7 Medium Dozers",
  "category": "dozers",
  "subcategory": "medium dozers",
  "description": "The Cat D7 dozer delivers performance and technology.",
  "keySpecifications": [
    { "name": "Power - Net", "value": "265 hp | 197 kW" },
    { "name": "Operating Weight", "value": "65644 lb | 29776 kg" }
  ],
  "specificationGroups": [],
  "standardEquipment": ["Cat C9.3B diesel engine"],
  "optionalEquipment": ["Multi-shank ripper"],
  "images": ["https://s7d2.scene7.com/is/image/Caterpillar/CM20200819-abc"],
  "downloads": [
    { "title": "D7 technical specifications", "url": "https://www.cat.com/content/dam/catDotCom/example.pdf" }
  ],
  "sourceUrl": "https://www.cat.com/en_US/products/new/equipment/dozers/medium-dozers/102647.html",
  "scrapedAt": "2026-09-06T00:00:00.000Z"
}
```

The default dataset contains only product records. Run-level outcome, warnings, request counts, and block diagnostics are stored in the `OUTPUT` key-value record. This separates truthful failures from business data.

### Pricing

The intended live model is pay per event:

| Event | Price | Charged for |
| --- | ---: | --- |
| Actor start | $0.00005 | One run start |
| Caterpillar product | $0.005 | One schema-valid default-dataset record |

A run delivering 20 products costs about **$0.10005** in events. A blocked or empty run has no product events; only the start event applies. Apify may enforce your account's maximum-charge limit before `maxResults` is reached. Product records use Apify's synthetic dataset-item event, so the code does not manually double-charge them.

### Reliability and limits

Cat.com uses Akamai and rejected measured bare HTTP and direct headless requests. The Actor therefore uses a coherent browser identity, sticky session cookies, bounded retries, low concurrency, and a US residential proxy by default. A challenged session is retired rather than mixed with a new fingerprint.

Cat.com category pages load model discovery through a regional application that did not reliably expose product links in validation, so this version deliberately accepts product detail URLs only. If access is denied, the Actor writes a `blocked` diagnostic to `OUTPUT`, returns no fabricated products, and charges no product events. Successfully extracted partial records are preserved if later pages fail.

The Actor accepts only public `cat.com/.../products/new/equipment/.../<product-id>.html` URLs. It caps products and browser requests at 500. Linked PDFs are not downloaded or parsed.

### Legal and responsible use

Caterpillar and Cat are trademarks of Caterpillar Inc. This independent Actor is not affiliated with or endorsed by Caterpillar. Scrape only public data, respect website terms, robots guidance, applicable law, rate limits, and intellectual-property rights. Do not use the Actor to bypass authentication, CAPTCHAs, access controls, or geographic restrictions. Product specifications and availability can change; verify purchasing decisions with Caterpillar or an authorized dealer.

For support, include the Actor run ID, redacted input, expected outcome, and a short description of the problem. Never post tokens, proxy URLs, cookies, or account information.

# Actor input Schema

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

Use this for public Cat equipment product detail pages. Enter https://www.cat.com/en\_US/products/new/equipment/dozers/medium-dozers/102647.html. Category pages, Parts Store, used, rental, login, and serial-fitment URLs are not supported.

## `maxResults` (type: `integer`):

Use this to cap schema-valid product records and PPE result events. Accepts 1–500. Default: 20. This is not a page-request limit.

## `includeSpecifications` (type: `boolean`):

Use this to extract key specs and grouped product specification tables. Default: true. Disable for smaller records; it does not fetch technical PDFs.

## `includeEquipment` (type: `boolean`):

Use this to extract public standard and optional equipment lists from product pages. Default: true. Regional equipment can differ.

## `includeDownloads` (type: `boolean`):

Use this to return public brochure and technical PDF links shown on product pages. Default: true. Files are linked, not downloaded or parsed.

## `useApifyProxy` (type: `boolean`):

Use this for the recommended sticky Apify residential route because Cat.com uses Akamai. Default: true. Disable only for diagnostics; direct cloud or local IPs may be denied.

## `proxyCountry` (type: `string`):

Use this to keep the browser session in one two-letter proxy country. Example: US. Default: US. It does not change the en\_US catalog locale.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://www.cat.com/en_US/products/new/equipment/dozers/medium-dozers/102647.html"
    }
  ],
  "maxResults": 20,
  "includeSpecifications": true,
  "includeEquipment": true,
  "includeDownloads": true,
  "useApifyProxy": true,
  "proxyCountry": "US"
}
```

# Actor output Schema

## `results` (type: `string`):

Schema-valid Caterpillar equipment product records.

## `summary` (type: `string`):

Outcome, request counts, block classification, and warnings stored in OUTPUT.

# 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 = {
    "startUrls": [
        {
            "url": "https://www.cat.com/en_US/products/new/equipment/dozers/medium-dozers/102647.html"
        }
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("muhammadafzal/caterpillar-catalog-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 = { "startUrls": [{ "url": "https://www.cat.com/en_US/products/new/equipment/dozers/medium-dozers/102647.html" }] }

# Run the Actor and wait for it to finish
run = client.actor("muhammadafzal/caterpillar-catalog-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 '{
  "startUrls": [
    {
      "url": "https://www.cat.com/en_US/products/new/equipment/dozers/medium-dozers/102647.html"
    }
  ]
}' |
apify call muhammadafzal/caterpillar-catalog-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,muhammadafzal/caterpillar-catalog-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/MVasQRxBol8JN0ckB/builds/NLBRcHOCwTeEjycUs/openapi.json
