# iScrap App Metal Prices Scraper (`crawlerbros/iscrapapp-metal-prices-scraper`) Actor

Scrape daily scrap metal prices from iScrap App - today's top prices for copper, aluminum, brass, steel, and 200+ other metals, the full metal directory by category, and per-metal detail pages with recent price reports from scrap yards across the US and Canada.

- **URL**: https://apify.com/crawlerbros/iscrapapp-metal-prices-scraper.md
- **Developed by:** [Crawler Bros](https://apify.com/crawlerbros) (community)
- **Categories:** Automation, Developer tools, Integrations
- **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 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/docs.md):

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

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python/docs.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/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

## iScrap App Metal Prices Scraper

Scrape daily scrap metal prices from [iScrap App](https://iscrapapp.com/prices/) — today's top prices for copper, aluminum, brass, steel, insulated wire, batteries, and more, the full 200+ metal directory by category, and per-metal detail pages with recent price reports submitted by individual scrap yards across the US and Canada. No login, no cookies, no proxy required.

### What this actor does

- **Three modes:** `topPrices` (today's most-searched metals with live pricing), `browse` (the full metal directory by category), `metalDetail` (per-metal price + recent yard reports)
- **US & Canada markets** — `country` filter, prices differ by region
- **Category browsing** — Non-Ferrous Materials, Ferrous Materials, Electronics
- **Recent price reports** — actual prices reported by named scrap yards with city/state and date, straight from each metal's detail page
- **Related metals, description, educational video, and photos** on detail pages
- **Filters** — keyword (metal name), price unit (`lb`/`ton`/`each`), min/max price
- Empty fields are always omitted from output

### Output per record

Fields vary slightly by mode (unused fields are omitted, never emitted as null/empty):

- `metalName`, `metalSlug`, `metalUrl`, `imageUrl`
- `price` (display string, e.g. `"$4.59/lb"`), `priceValue` (float), `priceUnit` (`lb`/`ton`/`each`)
- `changePercent` / `change45DayPercent`, `changeDirection` (`up`/`down`) — `topPrices` mode reports the change shown on the homepage; `metalDetail` mode reports the page's own labeled "45-Day Change"
- `lastUpdated` — freshness label the metal's own detail page displays (e.g. `"Today"`, `"3 days ago"`, `"1 year ago"`) (mode=metalDetail)
- `materialId` — internal iScrap App material ID (mode=topPrices)
- `category` — only present when a specific category filter was requested (mode=browse)
- `description` — metal description / usage guide text
- `recentPriceReports[]` — `{price, priceValue, priceUnit, location, reportedDate, yardUrl}` (mode=metalDetail)
- `relatedMetals[]` — `{metalName, metalUrl, metalSlug, price, priceValue, priceUnit}` (mode=metalDetail)
- `videoUrl`, `photos[]` (mode=metalDetail, when available)
- `country` — `US` or `CA`
- `recordType` — `topMetalPrice` / `metalListing` / `metalDetail`
- `scrapedAt` — UTC ISO timestamp

### Input

| Field | Type | Default | Description |
|---|---|---|---|
| `mode` | string | `topPrices` | `topPrices` / `browse` / `metalDetail` |
| `metalSlugs` | array | – | Metal slugs or full URLs (mode=metalDetail) |
| `category` | string | `all` | `all` / `non-ferrous-materials` / `ferrous-materials` / `electronics` (mode=browse) |
| `country` | string | `US` | `US` or `CA` (mode=topPrices, metalDetail) |
| `keyword` | string | – | Case-insensitive substring match on metal name (mode=topPrices, browse) |
| `unitFilter` | string | `any` | `any` / `lb` / `ton` / `each` (mode=topPrices) |
| `minPrice` | number | – | Minimum price in the metal's own display unit (mode=topPrices) |
| `maxPrice` | number | – | Maximum price in the metal's own display unit (mode=topPrices) |
| `maxItems` | int | `50` | Hard cap on records returned (1–1000) |

#### Example: today's top prices in Canada, copper only

```json
{
  "mode": "topPrices",
  "country": "CA",
  "keyword": "copper"
}
````

#### Example: browse the full Electronics directory

```json
{
  "mode": "browse",
  "category": "electronics",
  "maxItems": 200
}
```

#### Example: detail + recent yard reports for specific metals

```json
{
  "mode": "metalDetail",
  "metalSlugs": ["1-bare-bright-copper-wire", "shreddable-steel", "yellow-brass"],
  "country": "US"
}
```

### Use cases

- **Scrap yard owners / recyclers** — track daily market rates for the metals you buy
- **Individual scrappers** — decide which materials are worth collecting today
- **Price-comparison tools** — feed live per-lb/per-ton rates into a pricing dashboard
- **Market research** — monitor 200+ metal categories and their descriptions/grades
- **Regional analysis** — compare US vs Canada pricing on the same metal

### Limitations

- `mode=topPrices` mirrors the iScrap App homepage's curated "most popular" list — currently 15 metals. For the full 200+ metal catalog, use `mode=browse` (names/descriptions) combined with `mode=metalDetail` (price) for the specific metals you need.
- `mode=browse` listing pages do not include price — iScrapApp's directory pages are metadata-only; fetch `mode=metalDetail` for pricing on any given metal.
- Sparkline/trend-chart pixel data shown on the site is not exposed as a field: without accompanying timestamps the underlying values aren't independently meaningful, so we only surface the labeled `changePercent` / `change45DayPercent` figures the site itself publishes.
- `recentPriceReports` reflects whichever individual yard reports the site currently has surfaced for that metal (crowd-submitted); it is not a statistically representative sample of every yard.
- iScrapApp.com's Cloudflare protection returns a challenge page to requests without a normal browser `User-Agent` header (a bare `curl` with no UA gets a 403). All `metalUrl` / page links resolve with a normal browser UA (exactly what this actor sends); direct image asset URLs (`imageUrl`) work with any client, no UA needed.

### FAQ

**Is this actor free to run?** Yes — no proxy, no cookies, no API key. Plain HTTP requests to public pages.

**Why do topPrices and metalDetail sometimes show different change percentages for the same metal?** The homepage's percent badge and the detail page's "45-Day Change" are computed over different windows/rounding by the source site; both are reported faithfully as-is (`changePercent` vs `change45DayPercent`).

**What does `priceUnit: "each"` mean?** Some materials (e.g. catalytic converters) are priced per item rather than per pound or per ton — iScrap App displays these as `$X/each`.

**Can I get prices for a metal that isn't in the top-15 list?** Yes — use `mode=browse` to find its slug (or copy it from the metal's URL), then run `mode=metalDetail` with that slug.

**How fresh is the data?** iScrap App updates its prices daily based on market demand and yard-submitted reports. On `mode=metalDetail`, the `lastUpdated` field mirrors the page's own freshness label (e.g. `"Today"`) so you can tell at a glance whether a given metal's price was just refreshed or hasn't moved in a while.

# Actor input Schema

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

What to fetch.

## `metalSlugs` (type: `array`):

(mode=metalDetail) Metal slugs (e.g. `1-bare-bright-copper-wire`) or full iScrapApp.com metal URLs to fetch detail pages for.

## `category` (type: `string`):

(mode=browse) Filter the metal directory by category.

## `country` (type: `string`):

(mode=topPrices, metalDetail) Regional price market to scrape.

## `keyword` (type: `string`):

(mode=topPrices, browse) Case-insensitive substring match against the metal name, e.g. `copper`.

## `unitFilter` (type: `string`):

(mode=topPrices) Only return metals priced in this unit.

## `minPrice` (type: `number`):

(mode=topPrices) Only return metals with a price at or above this value (in the metal's own display unit).

## `maxPrice` (type: `number`):

(mode=topPrices) Only return metals with a price at or below this value (in the metal's own display unit).

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

Maximum number of records to return.

## Actor input object example

```json
{
  "mode": "topPrices",
  "metalSlugs": [
    "1-bare-bright-copper-wire",
    "shreddable-steel",
    "yellow-brass"
  ],
  "category": "all",
  "country": "US",
  "unitFilter": "any",
  "maxItems": 15
}
```

# Actor output Schema

## `metalPrices` (type: `string`):

Dataset containing all scraped iScrap App metal price records.

# 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": "topPrices",
    "metalSlugs": [
        "1-bare-bright-copper-wire",
        "shreddable-steel",
        "yellow-brass"
    ],
    "category": "all",
    "country": "US",
    "keyword": "",
    "unitFilter": "any",
    "maxItems": 15
};

// Run the Actor and wait for it to finish
const run = await client.actor("crawlerbros/iscrapapp-metal-prices-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": "topPrices",
    "metalSlugs": [
        "1-bare-bright-copper-wire",
        "shreddable-steel",
        "yellow-brass",
    ],
    "category": "all",
    "country": "US",
    "keyword": "",
    "unitFilter": "any",
    "maxItems": 15,
}

# Run the Actor and wait for it to finish
run = client.actor("crawlerbros/iscrapapp-metal-prices-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": "topPrices",
  "metalSlugs": [
    "1-bare-bright-copper-wire",
    "shreddable-steel",
    "yellow-brass"
  ],
  "category": "all",
  "country": "US",
  "keyword": "",
  "unitFilter": "any",
  "maxItems": 15
}' |
apify call crawlerbros/iscrapapp-metal-prices-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "iScrap App Metal Prices Scraper",
        "description": "Scrape daily scrap metal prices from iScrap App - today's top prices for copper, aluminum, brass, steel, and 200+ other metals, the full metal directory by category, and per-metal detail pages with recent price reports from scrap yards across the US and Canada.",
        "version": "1.0",
        "x-build-id": "I73hVQQtb37aknwme"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/crawlerbros~iscrapapp-metal-prices-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-crawlerbros-iscrapapp-metal-prices-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/crawlerbros~iscrapapp-metal-prices-scraper/runs": {
            "post": {
                "operationId": "runs-sync-crawlerbros-iscrapapp-metal-prices-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/crawlerbros~iscrapapp-metal-prices-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-crawlerbros-iscrapapp-metal-prices-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": [
                    "mode"
                ],
                "properties": {
                    "mode": {
                        "title": "Mode",
                        "enum": [
                            "topPrices",
                            "browse",
                            "metalDetail"
                        ],
                        "type": "string",
                        "description": "What to fetch.",
                        "default": "topPrices"
                    },
                    "metalSlugs": {
                        "title": "Metal slugs or URLs",
                        "type": "array",
                        "description": "(mode=metalDetail) Metal slugs (e.g. `1-bare-bright-copper-wire`) or full iScrapApp.com metal URLs to fetch detail pages for.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "category": {
                        "title": "Category",
                        "enum": [
                            "all",
                            "non-ferrous-materials",
                            "ferrous-materials",
                            "electronics"
                        ],
                        "type": "string",
                        "description": "(mode=browse) Filter the metal directory by category.",
                        "default": "all"
                    },
                    "country": {
                        "title": "Country",
                        "enum": [
                            "US",
                            "CA"
                        ],
                        "type": "string",
                        "description": "(mode=topPrices, metalDetail) Regional price market to scrape.",
                        "default": "US"
                    },
                    "keyword": {
                        "title": "Keyword filter",
                        "type": "string",
                        "description": "(mode=topPrices, browse) Case-insensitive substring match against the metal name, e.g. `copper`."
                    },
                    "unitFilter": {
                        "title": "Price unit filter",
                        "enum": [
                            "any",
                            "lb",
                            "ton",
                            "each"
                        ],
                        "type": "string",
                        "description": "(mode=topPrices) Only return metals priced in this unit.",
                        "default": "any"
                    },
                    "minPrice": {
                        "title": "Minimum price",
                        "minimum": 0,
                        "maximum": 1000000,
                        "type": "number",
                        "description": "(mode=topPrices) Only return metals with a price at or above this value (in the metal's own display unit)."
                    },
                    "maxPrice": {
                        "title": "Maximum price",
                        "minimum": 0,
                        "maximum": 1000000,
                        "type": "number",
                        "description": "(mode=topPrices) Only return metals with a price at or below this value (in the metal's own display unit)."
                    },
                    "maxItems": {
                        "title": "Max items",
                        "minimum": 1,
                        "maximum": 1000,
                        "type": "integer",
                        "description": "Maximum number of records to return.",
                        "default": 50
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
