# Mouser Product Scraper — MPN, Pricing Tiers, Stock & Specs (`crawloop/mouser-product-scraper`) Actor

Mouser Electronics scraper for MPN / BOM lookup, keyword search, PDP enrichment and category listings. Extract quantity-break pricing, live stock, lead time, RoHS/lifecycle, datasheets and attributes — Mouser API alternative.

- **URL**: https://apify.com/crawloop/mouser-product-scraper.md
- **Developed by:** [Andrej Kiva](https://apify.com/crawloop) (community)
- **Categories:** E-commerce, AI, Other
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.69 / 1,000 product results

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/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

## Mouser Product Scraper — MPN, Pricing Tiers, Stock & Specs

> **Electronics distributor data** — Mouser Electronics catalog enrichment next to DigiKey and RS Online for BOM, pricing, and procurement workflows.

| DigiKey | Mouser | RS Online |
| :--- | :--- | :--- |
| [DigiKey Product Scraper](https://apify.com/crawloop/digikey-product-scraper) | **Mouser Product Scraper** ◄── you are here | [RS Online Scraper](https://apify.com/crawloop/rs-online-scraper) |

> **Disclaimer:** Unofficial Actor for publicly accessible Mouser product and catalog pages / optional official Search API. **Mouser** and related names are trademarks of Mouser Electronics, Inc. Not affiliated with, sponsored by, or endorsed by Mouser Electronics. Provided for informational and research purposes only. You are responsible for complying with applicable laws and Mouser terms of use.

Scrape **Mouser Electronics** components with a **Mouser scraper / API alternative** for **BOM enrichment**, **price monitoring**, and procurement pipelines. Look up parts by **product URL**, **manufacturer part number (MPN)**, **Mouser part number**, **keyword**, or **category listing**, then export **quantity-break pricing**, **live stock**, **lead time**, **RoHS / lifecycle**, **datasheets**, and **attributes** as clean JSON for **Python**, **Node.js**, and **MCP** / AI assistants.

***

### Key Features

- **BOM part-number lookup** — batch MPN / Mouser PN resolution with price breaks and stock
- **Keyword & category crawl** — paginated search / category listings (25 products per page)
- **PDP enrichment** — ProductDetail pages with pricing table + parametric attributes
- **Optional official Search API key** — low-latency BOM / keyword path without HTML
- **Camoufox + residential** — HTML path hardened for Akamai on public catalog pages
- **Region-aware base URL** — pin storefront for localized price and stock

***

### Use Cases

| Use case | What you get | Why it helps |
| :--- | :--- | :--- |
| **BOM enrichment** | MPN → Mouser PN, price breaks, stock | Fill ERP / PLM component libraries |
| **Price monitoring** | Quantity-break tables over time | Track unit cost vs volume |
| **Stock & lead time** | Available qty + factory lead time | Sourcing and shortage checks |
| **Compliance screening** | RoHS / lifecycle labels | Green status and lifecycle risk |
| **Category harvest** | Listing rows at scale | Build MCU / connector / passive shortlists |

***

### When to use this Actor

- Mouser **product detail** enrichment from known URLs or part numbers
- **BOM batch pricing / stock** checks across many MPNs
- **Keyword or category** crawls for listing-level assortment
- Cross-check DigiKey / RS availability in a multi-distributor pipeline

### When not to use this Actor

- Official **cart / order / checkout** automation
- Partner-only Mouser API contracts that require your own production credentials and SLAs
- Other distributors — use sibling Actors for DigiKey / RS Online

***

### Input Parameters

| Parameter | Type | Default | Description |
| :--- | :--- | :--- | :--- |
| `productUrls` | Array | — | Mouser ProductDetail URLs |
| `partNumbers` | Array | — | MPN or Mouser PN list (BOM) |
| `keywords` | Array | — | Catalog keyword queries |
| `categoryUrls` | Array | — | Category or search listing URLs (or bare paths) |
| `maxItems` | Integer | `50` | Maximum billable dataset items |
| `maxPages` | Integer | `1` | Max listing pages per query/URL (1–40) |
| `enrichListingProducts` | Boolean | `false` | Fetch full PDP for each listing row |
| `inStockOnly` | Boolean | `false` | API keyword filter: in-stock only |
| `apiKey` | String | — | Optional Mouser Search API key |
| `baseUrl` | String | `https://www.mouser.com` | Regional storefront |
| `requestDelaySecs` | Number | `1.0` | Delay between HTML navigations |
| `browserEngine` | String | `auto` | `auto` / `camoufox` / `firefox` |
| `proxyConfiguration` | Object | Residential US | Sticky RESIDENTIAL recommended for HTML |

#### Input Example — BOM + PDP

```json
{
  "productUrls": [
    "https://www.mouser.com/ProductDetail/595-NE555P"
  ],
  "partNumbers": ["NE555P", "STM32F407VGT6"],
  "maxItems": 25,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": ["RESIDENTIAL"],
    "apifyProxyCountry": "US"
  }
}
```

#### Input Example — API-only BOM (optional key)

```json
{
  "partNumbers": ["NE555P", "GRM155R71C104KA88D"],
  "apiKey": "YOUR_MOUSER_SEARCH_API_KEY",
  "maxItems": 50
}
```

#### Input Example — category / keyword listings

```json
{
  "keywords": ["10k resistor"],
  "categoryUrls": ["passive-components/resistors"],
  "maxItems": 100,
  "maxPages": 4,
  "enrichListingProducts": false
}
```

***

### Output Format

| `recordType` | Meaning |
| :--- | :--- |
| `product` | Full / API product enrichment |
| `listing` | Search or category table row |
| `error` | Fetch or parse failure |

#### Key product fields

| Field | Description |
| :--- | :--- |
| `productId` / `mouserPartNumber` | Mouser distributor part number |
| `manufacturerProductNumber` | Manufacturer part number (MPN) |
| `manufacturer` | Brand / manufacturer name |
| `qtyAvailable` / `qtyAvailableValue` | Stock text and parsed integer |
| `standardLeadTime` | Lead time when shown |
| `unitPrice` / `unitPriceValue` / `currency` | Primary unit price |
| `priceBreaks` | Quantity-break pricing tiers |
| `minOrderQuantity` / `multipleOrderQuantity` | MOQ / order multiple |
| `rohsStatus` / `lifecycleStatus` | Compliance / lifecycle |
| `attributes` | Technical specifications |
| `datasheetUrl` | Primary datasheet link |
| `url` | Canonical product URL |
| `scrapedAt` | ISO-8601 timestamp |

#### Output Example (abbreviated)

```json
{
  "source": "mouser",
  "recordType": "product",
  "productId": "595-NE555P",
  "mouserPartNumber": "595-NE555P",
  "manufacturerProductNumber": "NE555P",
  "manufacturer": "Texas Instruments",
  "qtyAvailableValue": 24871,
  "unitPrice": "$0.46",
  "unitPriceValue": 0.46,
  "currency": "USD",
  "standardLeadTime": "6 Weeks",
  "priceBreaks": [
    { "quantity": 1, "price": "$0.46", "priceValue": 0.46, "currency": "USD" },
    { "quantity": 10, "price": "$0.39", "priceValue": 0.39, "currency": "USD" }
  ],
  "rohsStatus": "RoHS Compliant",
  "datasheetUrl": "https://www.mouser.com/datasheet/2/405/ne555-1388474.pdf"
}
```

***

### Integration examples

#### Node.js

```javascript
import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('crawloop/mouser-product-scraper').call({
  partNumbers: ['NE555P'],
  maxItems: 10,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);
```

#### Python

```python
from apify_client import ApifyClient

client = ApifyClient(token="APIFY_TOKEN")
run = client.actor("crawloop/mouser-product-scraper").call(
    run_input={"partNumbers": ["NE555P"], "maxItems": 10}
)
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)
```

#### cURL

```bash
curl -s "https://api.apify.com/v2/acts/crawloop~mouser-product-scraper/run-sync-get-dataset-items?token=APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"partNumbers":["NE555P"],"maxItems":10}'
```

***

### MCP and AI assistants

Use this Actor from AI tools via [Apify MCP](https://docs.apify.com/platform/integrations/mcp).
Connect your Apify account, then call this Actor by its Store ID / name.

Example prompts:

- "Run Mouser Product Scraper for partNumbers NE555P and STM32F407VGT6 and return price breaks + stock as JSON"
- "Scrape Mouser keyword 10k resistor with maxItems 50 and summarize cheapest in-stock parts"
- "Chain DigiKey Product Scraper then Mouser Product Scraper for the same BOM and compare unit prices"

***

### Suite next step

After Mouser enrichment, pull authorized DigiKey tiers with [DigiKey Product Scraper](https://apify.com/crawloop/digikey-product-scraper) or EU stock via [RS Online Scraper](https://apify.com/crawloop/rs-online-scraper).

***

### FAQ

**Do I need a Mouser API key?** No. Leave `apiKey` empty to scrape public pages with Camoufox + residential proxy. A Search API key is optional for faster BOM/keyword lookups.

**Why residential proxies?** Mouser HTML routes use Akamai Bot Manager. Datacenter IPs are frequently denied.

**Are prices region-specific?** Yes. Set `baseUrl` (and matching proxy country) for the storefront you care about.

**Can I use this as a Mouser API alternative in Python or Node?** Yes — run via Apify Client, REST, or MCP and export the dataset as JSON.

***

### Related Actors

- [DigiKey Product Scraper](https://apify.com/crawloop/digikey-product-scraper) — DigiKey MPN, pricing tiers, stock & specs
- [RS Online Scraper](https://apify.com/crawloop/rs-online-scraper) — RS Online stock & localised prices

# Actor input Schema

## `productUrls` (type: `array`):

Mouser ProductDetail page URLs (e.g. https://www.mouser.com/ProductDetail/595-NE555P).

## `partNumbers` (type: `array`):

Manufacturer or Mouser distributor part numbers for batch BOM lookup. Preferred path when an API key is set (up to 10 per official API call).

## `keywords` (type: `array`):

Catalog keyword searches (one query per entry).

## `categoryUrls` (type: `array`):

Mouser /c/… category or search result URLs to paginate.

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

Stop after this many billable dataset items (product / listing).

## `maxPages` (type: `integer`):

Maximum listing pages per keyword or category URL (25 products per page).

## `enrichListingProducts` (type: `boolean`):

When scraping search/category listings, also fetch full PDP data for each row.

## `inStockOnly` (type: `boolean`):

When using the official Search API keyword mode, request in-stock parts only.

## `apiKey` (type: `string`):

Optional official Mouser Search API key for low-COGS BOM / keyword lookups. Leave empty to scrape public catalog pages via Camoufox + residential proxy.

## `baseUrl` (type: `string`):

Mouser host for HTML scraping and absolute URL building (pricing/stock are region-sensitive).

## `requestDelaySecs` (type: `number`):

Pause between HTML navigations on the same browser session.

## `browserEngine` (type: `string`):

Camoufox is preferred against Akamai; Firefox is the fallback when Camoufox is unavailable.

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

Apify Proxy settings. Sticky RESIDENTIAL US (or target region) is strongly recommended for HTML scraping.

## Actor input object example

```json
{
  "productUrls": [
    "https://www.mouser.com/ProductDetail/595-NE555P"
  ],
  "partNumbers": [
    "NE555P",
    "STM32F407VGT6"
  ],
  "maxItems": 50,
  "maxPages": 1,
  "enrichListingProducts": false,
  "inStockOnly": false,
  "baseUrl": "https://www.mouser.com",
  "requestDelaySecs": 1,
  "browserEngine": "auto",
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "US"
  }
}
```

# Actor output Schema

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

Default dataset 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 = {
    "productUrls": [
        "https://www.mouser.com/ProductDetail/595-NE555P"
    ],
    "partNumbers": [
        "NE555P",
        "STM32F407VGT6"
    ],
    "baseUrl": "https://www.mouser.com",
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ],
        "apifyProxyCountry": "US"
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("crawloop/mouser-product-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 = {
    "productUrls": ["https://www.mouser.com/ProductDetail/595-NE555P"],
    "partNumbers": [
        "NE555P",
        "STM32F407VGT6",
    ],
    "baseUrl": "https://www.mouser.com",
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
        "apifyProxyCountry": "US",
    },
}

# Run the Actor and wait for it to finish
run = client.actor("crawloop/mouser-product-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 '{
  "productUrls": [
    "https://www.mouser.com/ProductDetail/595-NE555P"
  ],
  "partNumbers": [
    "NE555P",
    "STM32F407VGT6"
  ],
  "baseUrl": "https://www.mouser.com",
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "US"
  }
}' |
apify call crawloop/mouser-product-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,crawloop/mouser-product-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/PA69eu9d2uDx1daiw/builds/LzHmnHJEZz3kEKPfe/openapi.json
