# Sourcengine Scraper - MPN, Multi-Supplier Offers, Stock & Specs (`crawloop/sourcengine-scraper`) Actor

Sourcengine parts scraper for MPN lookup and marketplace offer enrichment. Extract multi-supplier price tiers, stock, lead time, date codes, RoHS/REACH/ECCN, datasheets and FFF alternates - Sourcengine API alternative, fast HTTP.

- **URL**: https://apify.com/crawloop/sourcengine-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 $0.79 / 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

## Sourcengine Scraper — MPN, Multi-Supplier Offers, Stock & Specs

> **Electronics marketplace data** — Sourcengine multi-supplier offers next to DigiKey and RS Online catalog enrichment.

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

> **Disclaimer:** Unofficial Actor for publicly accessible Sourcengine product and search pages. **Sourcengine**, **Sourceability**, and related names are trademarks of their respective owners. Not affiliated with, sponsored by, or endorsed by Sourceability. Provided for informational and research purposes only. You are responsible for complying with applicable laws and site terms of use.

**Sourcengine scraper** / **Sourcengine API alternative** for Apify — extract electronic component **MPNs**, **multi-supplier offers**, **stock**, **lead times**, **date codes**, **RoHS / REACH / ECCN / HTS**, **parametric specs**, **datasheets**, and **FFF alternates** into clean JSON. Search by **part URL**, **manufacturer part number**, or **keyword**. Run from the Console, **Python**, **Node.js**, or **MCP**. Fast HTTP via `curl_cffi` (Chrome TLS) — no headless browser.

Built for **BOM marketplace checks**, **shortage monitoring**, **broker vs authorized comparison**, and **procurement enrichment** on Sourcengine’s 3,500+ supplier marketplace.

***

### Key Features

- **MPN / keyword search** — exact part → PDP enrich; broader queries → paginated listings (~25/page)
- **Live multi-supplier offers** — USD quantity-break tiers, stock, MOQ/MPQ, packaging, delivery days
- **Marketplace leads** — bid inventory with supplier type, region, date code, lead time
- **Compliance block** — EU RoHS, China RoHS, REACH, ECCN, HTS, SB codes
- **Technical data** — full parametric attributes from the part page
- **FFF alternates** — alternate SKU lists for form-fit-function screening
- **Fast HTTP** — `curl_cffi` Chrome impersonation; sticky residential proxy recommended

***

### Use Cases

| Use case | What you get | Why it helps |
| :--- | :--- | :--- |
| **BOM marketplace check** | MPN → multi-vendor stock + best USD tier | Compare brokers / independents vs authorized |
| **Shortage / allocation** | Offer qty + lead days + date codes | Spot available inventory across suppliers |
| **Compliance screening** | RoHS / REACH / ECCN / HTS | Export-control and green status |
| **Alternate discovery** | FFF alternate SKUs | Mitigate EOL / NRFND risk |
| **Price intelligence** | Price ladders by MOQ | Benchmark landed unit cost |

***

### When to use this Actor

- You need **Sourcengine marketplace offers** (multi-supplier), not a single-distributor catalog
- **MPN batch lookup** for procurement / ERP / PLM enrichment
- **Stock + lead time + date code** monitoring across qualified third parties
- A **Sourcengine API alternative** without enterprise Bearer access

### When not to use this Actor

- **Official Sourcengine API** workflows that already have a Bearer token / ERP integration
- **Cart / RFQ / checkout** automation
- **Authorized-only DigiKey or RS** catalogs — use the sibling Actors instead

***

### Input Parameters

| Parameter | Type | Default | Description |
| :--- | :--- | :--- | :--- |
| `partUrls` | Array | — | Sourcengine `/part-info/{MPN}-{id}` URLs |
| `mpns` | Array | — | MPNs or search keywords |
| `searchUrls` | Array | — | `/search?q=...` URLs (q treated as keyword) |
| `maxItems` | Integer | `50` | Cap on dataset items |
| `maxPages` | Integer | `1` | Max search pages per keyword (~25/page) |
| `enrichListings` | Boolean | `false` | PDP + live offers for each listing row |
| `includeOffers` | Boolean | `true` | Fetch offer-stream price tiers |
| `includeLeads` | Boolean | `true` | Fetch marketplace leads |
| `includeAlternates` | Boolean | `true` | Include alternate SKUs |
| `includeTechnicalData` | Boolean | `true` | Include parametric specs |
| `includeSuggestions` | Boolean | `true` | Emit suggestion when keyword has no hits |
| `requestDelaySecs` | Number | `0.75` | Delay between requests |
| `proxyConfiguration` | Object | Residential US | Apify Proxy sticky session |

#### Input Example — MPN + PDP

```json
{
  "partUrls": [
    "https://www.sourcengine.com/part-info/SN74LVC1G17MDCKREP-2084958395"
  ],
  "mpns": ["MAX232IN", "BAV99"],
  "maxItems": 25,
  "maxPages": 1,
  "includeOffers": true,
  "includeLeads": true,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": ["RESIDENTIAL"],
    "apifyProxyCountry": "US"
  }
}
```

#### Input Example — keyword listings

```json
{
  "mpns": ["BAV99"],
  "maxItems": 175,
  "maxPages": 8,
  "enrichListings": false,
  "includeOffers": false,
  "includeLeads": false,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": ["RESIDENTIAL"],
    "apifyProxyCountry": "US"
  }
}
```

***

### Output Format

| `recordType` | Meaning |
| :--- | :--- |
| `product` | Full part detail + live offers / leads |
| `listing` | Search result row (optional enrich → product) |
| `suggestion` | Keyword with no matches (+ autocomplete) |
| `error` | Fetch or parse failure |

#### Key product fields

| Field | Description |
| :--- | :--- |
| `sku` | Sourcengine SKU (`MPN-numericId`) |
| `mpn` / `manufacturerProductNumber` | Manufacturer part number |
| `manufacturer` | Brand name |
| `lifecycleStatus` | Active, Discontinued, EOL, … |
| `offers[]` | Price tiers, stock, MOQ, packaging, delivery, vendor meta |
| `leads[]` | Bid inventory without dollar prices |
| `compliance` | RoHS / REACH / ECCN / HTS / SB |
| `technicalData` | Parametric attributes |
| `alternates` | Alternate SKUs |
| `unitPriceValue` | Lowest USD unit price across offers |
| `qtyAvailableValue` | Aggregated offer stock when present |
| `datasheetUrl` / `url` | Datasheet and canonical part URL |

#### Output Example (abbreviated)

```json
{
  "source": "sourcengine",
  "recordType": "product",
  "sku": "MAX232IN-1413128051",
  "mpn": "MAX232IN",
  "manufacturer": "Texas Instruments Incorporated",
  "lifecycleStatus": "Discontinued",
  "unitPriceValue": 1.92676,
  "currency": "USD",
  "qtyAvailableValue": 283,
  "offersCount": 1,
  "offers": [
    {
      "quantity": 283,
      "moq": 25,
      "deliveryDays": 11,
      "unitPrice": 1.92676,
      "priceTiers": [
        { "price": 3.40112, "moq": 25, "currency": "USD" },
        { "price": 1.92676, "moq": 250, "currency": "USD" }
      ],
      "partnerStatus": "sourceability_fulfillment"
    }
  ],
  "compliance": {
    "euRohsCompliant": true,
    "reachCompliant": true,
    "eccn": "EAR99",
    "htsCode": "8542.39.00.01"
  },
  "url": "https://www.sourcengine.com/part-info/MAX232IN-1413128051"
}
```

***

### 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/sourcengine-scraper').call({
  mpns: ['MAX232IN'],
  maxItems: 5,
  includeOffers: true,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);
```

#### Python

```python
from apify_client import ApifyClient

client = ApifyClient()
run = client.actor("crawloop/sourcengine-scraper").call(
    run_input={"mpns": ["MAX232IN"], "maxItems": 5, "includeOffers": True}
)
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item["mpn"], item.get("unitPriceValue"), item.get("offersCount"))
```

#### cURL

```bash
curl "https://api.apify.com/v2/acts/crawloop~sourcengine-scraper/runs?token=$APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"mpns":["MAX232IN"],"maxItems":5,"includeOffers":true}'
```

***

### 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 Sourcengine Scraper for MPN MAX232IN and return offers with price tiers as JSON"
- "Scrape Sourcengine stock and lead times for these MPNs and summarize the cheapest offer per part"
- "Chain DigiKey Product Scraper then Sourcengine Scraper for the same BOM and compare authorized vs marketplace availability"

***

### Suite next step

After marketplace availability on Sourcengine, enrich **authorized catalog pricing** 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

**Is this a Sourcengine API alternative?**\
Yes for public part, offer, lead, and alternate data via Apify. It does not replace official Order API / ERP integrations that need a Sourcengine Bearer token.

**Does every part show dollar prices?**\
Live offers usually include USD tiers when inventory is purchasable. Some SKUs only expose **leads** (stock/lead time without a public ladder) until you bid/RFQ on the site.

**Exact MPN vs keyword?**\
An exact MPN often redirects straight to the part page (one `product` row). Broader keywords return `listing` rows; enable `enrichListings` for full PDP + offers.

**How do I scrape with Python or Node.js?**\
Use the Apify client examples above, or call the Actor from **MCP** with an MPN list and `includeOffers: true`.

**Proxy?**\
Sticky **RESIDENTIAL** US sessions are recommended for cloud runs.

### Related Actors

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

# Actor input Schema

## `partUrls` (type: `array`):

Sourcengine /part-info/{MPN}-{id} URLs (or Sourceability part-info links). Each URL is enriched to a full product record.

## `mpns` (type: `array`):

Manufacturer part numbers or search keywords. Exact MPN often resolves to a PDP; broader queries return search listing rows (paginate with Max search pages).

## `searchUrls` (type: `array`):

Sourcengine /search?q=... URLs. The q parameter is treated like an MPN/keyword input.

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

Stop after this many dataset items (products and/or listings).

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

Maximum /search result pages per MPN/keyword (about 25 parts per page).

## `enrichListings` (type: `boolean`):

When a keyword returns search listings, also fetch full PDP + live offers for each row.

## `includeOffers` (type: `boolean`):

Fetch /offer-stream price tiers, stock, MOQ, packaging and delivery for each product SKU.

## `includeLeads` (type: `boolean`):

Fetch bid/lead inventory rows (stock, lead time, supplier type, date code) without dollar prices.

## `includeAlternates` (type: `boolean`):

Include FFF / alternate SKU lists from the part page.

## `includeTechnicalData` (type: `boolean`):

Include parametric technical\_data attributes.

## `includeSuggestions` (type: `boolean`):

When a keyword has no results, push a suggestion record with autocomplete completions.

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

Pause between HTTP requests on the same sticky session.

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

Apify Proxy settings. Sticky RESIDENTIAL US sessions recommended.

## Actor input object example

```json
{
  "partUrls": [
    "https://www.sourcengine.com/part-info/SN74LVC1G17MDCKREP-2084958395"
  ],
  "mpns": [
    "MAX232IN",
    "BAV99"
  ],
  "maxItems": 50,
  "maxPages": 1,
  "enrichListings": false,
  "includeOffers": true,
  "includeLeads": true,
  "includeAlternates": true,
  "includeTechnicalData": true,
  "includeSuggestions": true,
  "requestDelaySecs": 0.75,
  "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 = {
    "partUrls": [
        "https://www.sourcengine.com/part-info/SN74LVC1G17MDCKREP-2084958395"
    ],
    "mpns": [
        "MAX232IN",
        "BAV99"
    ],
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ],
        "apifyProxyCountry": "US"
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("crawloop/sourcengine-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 = {
    "partUrls": ["https://www.sourcengine.com/part-info/SN74LVC1G17MDCKREP-2084958395"],
    "mpns": [
        "MAX232IN",
        "BAV99",
    ],
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
        "apifyProxyCountry": "US",
    },
}

# Run the Actor and wait for it to finish
run = client.actor("crawloop/sourcengine-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 '{
  "partUrls": [
    "https://www.sourcengine.com/part-info/SN74LVC1G17MDCKREP-2084958395"
  ],
  "mpns": [
    "MAX232IN",
    "BAV99"
  ],
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "US"
  }
}' |
apify call crawloop/sourcengine-scraper --silent --output-dataset

```

## MCP server setup

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