{
  "openapi": "3.0.1",
  "info": {
    "title": "Supplier Price Finder: Wholesale & Landed Cost",
    "description": "Wholesale and dropship cost for a product idea: unit prices, MOQ, price breaks and supplier ratings from Made-in-China, AliExpress and Alibaba search, plus DHgate and Alibaba offer pages you pick, with a landed-cost estimate where a page shows shipping. Only your Apify account needed.",
    "version": "0.3",
    "x-build-id": "sgXdxQsX1wRUbBBSg"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/cleanpull~supplier-price-finder/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-cleanpull-supplier-price-finder",
        "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/cleanpull~supplier-price-finder/runs": {
      "post": {
        "operationId": "runs-sync-cleanpull-supplier-price-finder",
        "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/cleanpull~supplier-price-finder/run-sync": {
      "post": {
        "operationId": "run-sync-cleanpull-supplier-price-finder",
        "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",
        "properties": {
          "products": {
            "title": "Product ideas",
            "type": "array",
            "description": "What you want to source, in a few words, one per line (\"silicone baking mat\", \"dog harness reflective\"). Each idea is searched on every chosen source and gets one summary row plus its offers. Up to 50 per run.",
            "items": {
              "type": "string"
            }
          },
          "sources": {
            "title": "Sources to search",
            "type": "array",
            "description": "Where to search by product idea (Made-in-China by default). Made-in-China is read directly. AliExpress and Alibaba search come through CleanPull's marketplace data service (nothing to set up) and run only when listed here: a search takes about a minute, all of a run's ideas are searched together, and each result delivered as an offer is a provider record on your bill. Their results carry no price breaks or shipping cost. DHgate is not searched (its robots.txt disallows search pages): give its offer pages below.",
            "items": {
              "type": "string",
              "enum": [
                "made-in-china",
                "aliexpress",
                "alibaba"
              ],
              "enumTitles": [
                "Made-in-China.com (factories: price, MOQ, price breaks)",
                "AliExpress (dropship: price per piece)",
                "Alibaba.com (factories: price range)"
              ]
            },
            "default": [
              "made-in-china"
            ]
          },
          "alibabaUrls": {
            "title": "Alibaba product pages",
            "type": "array",
            "description": "Optional. Alibaba.com product pages (alibaba.com/product-detail/…_<id>.html) to compare, one per line: price breaks, MOQ, supplier years and rating (Alibaba search results have none of these). With exactly one product idea, these pages join its summary; otherwise they get their own summary.",
            "items": {
              "type": "string"
            }
          },
          "dhgateUrls": {
            "title": "DHgate offer pages",
            "type": "array",
            "description": "Optional. DHgate offer pages (dhgate.com/product/<name>/<id>.html) to compare, one per line: price range, price breaks, lot size, the shipping quote to the US and delivery days (for a landed cost), store age and feedback. Query strings are dropped. With exactly one product idea, these pages join its summary.",
            "items": {
              "type": "string"
            }
          },
          "maxOffersPerSource": {
            "title": "Offers per source",
            "minimum": 1,
            "maximum": 100,
            "type": "integer",
            "description": "The most offers kept from each searched source for each product idea, in the source's own order (Made-in-China shows 30 per search). For AliExpress and Alibaba, also the most results read; only those delivered as offers are charged as provider records.",
            "default": 10
          },
          "offerPagesPerSource": {
            "title": "Made-in-China offer pages to open",
            "minimum": 0,
            "maximum": 20,
            "type": "integer",
            "description": "How many of the top Made-in-China offers per product idea get their own page read: price breaks, the supplier's years and reviews. 0 reads search results only (fastest).",
            "default": 3
          },
          "quantity": {
            "title": "Order quantity",
            "minimum": 1,
            "maximum": 10000000,
            "type": "integer",
            "description": "Optional. The units you plan to order: each offer's unit price is taken from the price break that holds it (raised to the offer's MOQ when below it). Empty: each offer's own minimum order."
          },
          "shipToCountry": {
            "title": "Ship to country",
            "pattern": "^\\s*[A-Za-z]{2}\\s*$",
            "type": "string",
            "description": "Two-letter country code for shipping quotes. Landed cost is only given where a page shows shipping to this country (DHgate offer pages quote shipping to the US). AliExpress and Alibaba search results are the US sites' prices.",
            "default": "US"
          },
          "matchAllWords": {
            "title": "Every word in the title",
            "type": "boolean",
            "description": "Keep only offers whose title names every word of the product idea (plurals count). Sources fill thin results with unrelated \"recommended\" offers; those are left out and never charged.",
            "default": true
          },
          "singleUnitCheck": {
            "title": "Fast single-unit check (AliExpress)",
            "type": "boolean",
            "description": "Answers fast whether each product idea can be bought one at a time, and the lowest unit price before shipping: AliExpress is asked one idea at a time for its top 3 results (about 1 to 2 minutes per idea, 4 ideas at once) instead of the full search (8 to 14 minutes). Adds AliExpress to Sources (alone when Sources is not set); list Made-in-China too to flag its offers with a minimum order of 1. An idea AliExpress does not answer within 2 minutes gets a free row saying so. Each summary gets a singleUnit answer; billed like AliExpress search (provider search and provider records for what is delivered).",
            "default": false
          },
          "maxRunCostUsd": {
            "title": "Max cost per run (USD)",
            "minimum": 0.01,
            "maximum": 1000,
            "type": "number",
            "description": "Optional. A product idea starts only when its worst case still fits under this amount, counting what the run has already charged. For scheduled and API runs without a spending limit."
          },
          "maxConcurrency": {
            "title": "Product ideas at a time",
            "minimum": 1,
            "maximum": 10,
            "type": "integer",
            "description": "How many product ideas are priced at once. Each source still gets at most 2 requests at a time.",
            "default": 3
          },
          "fields": {
            "title": "Fields",
            "type": "array",
            "description": "Optional. Only these fields in each row (dotted paths for nested ones, e.g. unitPrice.median); recordType and product always stay. Empty: every field.",
            "items": {
              "type": "string"
            }
          },
          "proxyConfiguration": {
            "title": "Proxy",
            "type": "object",
            "description": "Optional. Your own proxy, tried after the direct attempt. By default the actor uses Apify's own address, then datacenter, then residential proxies only for a source that blocks the others (one request per page, billed as an add-on)."
          }
        }
      },
      "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
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "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
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}