DEV Community

Cover image for How to Monitor 1688 Supplier Prices and MOQ Without a Paid API
Tim Zinin
Tim Zinin

Posted on Originally published at apify.com

How to Monitor 1688 Supplier Prices and MOQ Without a Paid API

The problem

If you source from 1688, supplier terms move constantly: prices drift, minimum order quantities change, stock disappears, and tiered pricing gets quietly restructured. Catching those changes means comparing two exports — last month's and this month's — line by line, offer by offer, in a spreadsheet. With a real supplier list, that manual diff is slow, error-prone, and impossible to audit later.

The paid alternatives are not much better for this specific job. A SaaS "1688 API" wants recurring fees and often your supplier URLs or platform credentials, and it still hands you raw data rather than a reviewed change list. What a sourcing or procurement team actually needs is a deterministic diff of the offer data it already lawfully possesses, with evidence attached to every detected change.

What the actor does

The 1688 Supplier Price & MOQ Monitor is a comparison engine for buyer-owned, merchant-authorized, or licensed 1688 offer exports. One boundary up front: it does not scrape 1688. It makes zero source network requests — no login, no proxy, no API call, no offer-URL fetching. It processes only the JSON records supplied in the run input, and the README is explicit that it never verifies suppliers, prices, stock, or purchasing suitability.

What it does do, deterministically:

  • Normalizes text, currency, price tiers, string lists, and timestamps in closed previous and current snapshots, then diffs the top-level fields.
  • Detects changes in price range, MOQ, stock, pricing tiers, unit, supplier fields, badges, and promotions.
  • Emits one reviewable comparison row per unique offerId with a changeType of baseline_created, changed, no_change, or a diagnostic status — never an invented change.
  • Attaches a stable 1688-offer:<offerId> identity plus SHA-256 record and request digests for tamper comparison and downstream joins.
  • Computes freshness from your supplied retrieval time, an evidence-completeness confidence score with explicit data gaps, a review priority, and a recommended human action such as REVIEW_OFFER_CHANGE.
  • Always sets safeToAutomate:false and writes an authoritative settlement receipt to the key-value store OUTPUT, reconciling delivered, paid, free, and withheld counts for the exact run.

Legacy URL-based productUrls input still parses, but only produces one free migration diagnostic; those URLs are never fetched.

Example: input and output

Input is a closed JSON contract. Each offer carries a previous snapshot (null on the first comparison, which yields baseline_created), a required current snapshot, and provenance fields:

{
  "schemaVersion": "2.0",
  "authorization": "I confirm I am authorized to process and deliver these 1688 offer records",
  "sourceContext": "buyer_owned_1688_export",
  "watchName": "usb-c-supplier-review",
  "maxChanges": 20,
  "offers": [
    {
      "offerId": "1000406623486",
      "previous": { "offerId": "1000406623486", "title": "USB-C cable wholesale pack", "priceMin": 3.8, "priceMax": 4.6, "currency": "CNY", "moq": 100, "stock": 12000, "unit": "piece" },
      "current": { "offerId": "1000406623486", "title": "USB-C cable wholesale pack", "priceMin": 3.6, "priceMax": 4.4, "currency": "CNY", "moq": 100, "stock": 15000, "unit": "piece" },
      "sourceName": "Buyer-owned 1688 export",
      "sourceLicense": "Buyer confirms authorization to process and deliver this export.",
      "sourceRetrievedAt": "2026-08-13T00:00:00Z"
    }
  ]
}
Enter fullscreen mode Exit fullscreen mode

For that input, the README's checked-in fixture delivers a dataset row whose core decision fields look like this (trimmed):

{
  "recordType": "china_1688_supplier_monitor",
  "entityId": "1688-offer:1000406623486",
  "changeType": "changed",
  "changedFields": ["priceMax", "priceMin", "priceTiers", "promotions", "stock"],
  "recommendedAction": "REVIEW_OFFER_CHANGE",
  "safeToAutomate": false
}
Enter fullscreen mode Exit fullscreen mode

The run-level KVS OUTPUT receipt then reconciles the exact run: one requested, one unique, one delivered, one paid, zero failed, networkRequestsMade: 0, platformLoginUsed: false.

Pricing and the free limit

The actor is pay-per-event: $0.005 per actor start plus $0.006 per delivered comparison row (the item-checked event), with lower per-event prices on paid Apify plans. At those list prices, a 100-offer comparison run costs $0.005 + 100 × $0.006 = $0.605. Apify's free plan includes $5 of usage credits per month, which covers about 8 full 100-offer runs — roughly 830 individual comparison rows — before you pay anything. Free diagnostics (legacy migration, invalid records, duplicates) are not billed as results.

Try it

Run a one-record comparison first, verify the dataset row and the KVS OUTPUT receipt, then scale the batch: 1688 Supplier Price & MOQ Monitor.

For AI agents and MCP

The actor takes JSON in and returns structured JSON via the Apify API, so an agent can call it directly with apify-client or the REST API. The README ships an MCP server setup (https://mcp.apify.com with this actor's tool) and an "MCP or agent workflow" recipe: an agent may submit records already present in its authorized workspace, but it must not invent authorization, browse 1688, or decide a purchase — every row carries safeToAutomate:false, explicit gaps, and a human-review route by design.

Top comments (0)