# Supplier Quote / RFQ Comparator (`davidlee2026/supplier-quote-rfq-comparator`) Actor

Buyer-side RFQ quote comparison with transparent landed-cost normalization, missing-data warnings, and CSV/JSON reports.

- **URL**: https://apify.com/davidlee2026/supplier-quote-rfq-comparator.md
- **Developed by:** [david lee](https://apify.com/davidlee2026) (community)
- **Security:** Limited permissions
- **Stats:** 1 total users, 1 monthly users, 92.3% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.00 / small comparison report

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

## Supplier Quote / RFQ Comparator

Turn **2–3 labelled Chinese supplier quotes** into an English procurement report without pretending that EXW, FOB, CIF, or DDP prices are interchangeable.

### What you get

- English Markdown comparison report;
- spreadsheet-safe CSV and complete JSON;
- original block/line references and missing-data questions;
- exact quantity-tier and box-to-piece conversion;
- explicit separation of incompatible Incoterms;
- no inferred freight, duty, tax, insurance, fees, or exchange rates.

### Start with the free demo

Run with `demo: true`. It uses fixed synthetic quotes and never triggers the paid report event.

### Paste labelled Chinese quote text

Choose `cn_text`, set the target quantity/currency, confirm processing rights, and paste 2–3 blocks separated by `---`:

```text
供应商：广州星河杯业
产品：MUG-01
币种：CNY
贸易术语：FOB
最小起订量：500
报价阶梯：500件=12.80元/件；1000件=11.90元/件
样品费：未知
模具费：0元
包装费：200元
交期天数：25
付款条款：30%订金，70%出货前付清
报价有效期：2026-11-30
```

Use `未知`, `未提供`, or `待确认` for missing values. The Actor preserves the original block/line location, asks an English follow-up question, and never treats an unknown cost as zero. `包装规格：100件/箱` enables exact conversion for `10箱=1250元/箱`.

Structured JSON and CSV modes remain available.

### Outputs

- `OUTPUT`: full JSON comparison
- `REPORT`: human-readable English Markdown
- `COMPARISON-CSV`: spreadsheet-safe table
- default dataset: compact run summary
- `ERROR`: uncharged validation detail

### Pricing

- fixed synthetic demo: free;
- one validated comparison, up to 3 quotes and 100 total tiers: **$2**.

The paid event occurs only after validation. If the charge is not confirmed, no paid deliverable is created.

### Important limits

This version does not parse PDFs, scans, screenshots, or images. It does not contact suppliers, negotiate, verify suppliers, estimate freight/duty/tax, calculate landed cost, or make purchasing recommendations.

Only submit data you are authorized to process. Apify storage retention and access settings apply.

# Actor input Schema

## `demo` (type: `boolean`):

Uses bundled synthetic quotes and ignores custom data.

## `inputMode` (type: `string`):

Structured JSON, CSV, or paste-friendly labelled Chinese quote text.

## `rightsConfirmed` (type: `boolean`):

Required for non-demo supplier data.

## `quoteDocument` (type: `object`):

Object containing target_quantity, target_currency, optional dated exchange_rates, and 2–10 quotes.

## `csvText` (type: `string`):

UTF-8 CSV, one row per quote tier. Maximum 500 rows / 2 MB.

## `cnQuoteText` (type: `string`):

Paste 2–3 labelled quote blocks separated by ---. Unknown values must be written as 未知; the parser never guesses them.

## `targetQuantity` (type: `integer`):

Positive whole-number purchasing quantity.

## `targetCurrency` (type: `string`):

Three-letter currency code. CSV and Chinese-text modes do not perform FX conversion.

## Actor input object example

```json
{
  "demo": true,
  "inputMode": "cn_text",
  "rightsConfirmed": false,
  "quoteDocument": {},
  "csvText": "",
  "cnQuoteText": "",
  "targetQuantity": 1000,
  "targetCurrency": "CNY"
}
```

# Actor output Schema

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

Compact run summary stored in the default dataset.

## `output` (type: `string`):

Full normalized comparison result stored in the OUTPUT record.

## `report` (type: `string`):

Human-readable comparison report stored in the REPORT record.

## `csv` (type: `string`):

Downloadable comparison table stored in the COMPARISON-CSV record.

# 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 = {};

// Run the Actor and wait for it to finish
const run = await client.actor("davidlee2026/supplier-quote-rfq-comparator").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 = {}

# Run the Actor and wait for it to finish
run = client.actor("davidlee2026/supplier-quote-rfq-comparator").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 '{}' |
apify call davidlee2026/supplier-quote-rfq-comparator --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,davidlee2026/supplier-quote-rfq-comparator"
        }
    }
}
```

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/dqELr2eMl6ECQmCCK/builds/ME53tZ0YBwbv0y4ZU/openapi.json
