{
  "openapi": "3.0.1",
  "info": {
    "title": "AliExpress Product Research",
    "description": "Find what to sell on AliExpress using published numbers only: exact units sold, units sold per day since launch, rating, review volume, discount and local stock. Ranked shortlist, deduplicated, with every figure and weight shown. No estimated revenue, no invented scores.",
    "version": "0.0",
    "x-build-id": "iUxi4M3Wt0rKqmCiT"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/apt_marble~aliexpress-product-research/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-apt_marble-aliexpress-product-research",
        "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/apt_marble~aliexpress-product-research/runs": {
      "post": {
        "operationId": "runs-sync-apt_marble-aliexpress-product-research",
        "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/apt_marble~aliexpress-product-research/run-sync": {
      "post": {
        "operationId": "run-sync-apt_marble-aliexpress-product-research",
        "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": {
          "keywords": {
            "title": "Product ideas to research",
            "type": "array",
            "description": "One or more product searches, exactly as you would type them on the site. Every matching product becomes a candidate for the ranked shortlist. Up to 20 per run.",
            "default": [
              "phone holder"
            ],
            "items": {
              "type": "string"
            }
          },
          "dealFeeds": {
            "title": "Also include what the site is promoting right now",
            "uniqueItems": true,
            "type": "array",
            "description": "Add the products currently featured on the site's own deal lists as extra candidates. They are ranked alongside your search results and never counted twice.",
            "items": {
              "type": "string",
              "enum": [
                "desktop",
                "mobile"
              ],
              "enumTitles": [
                "Desktop deal lists",
                "Mobile deal lists"
              ]
            },
            "default": [
              "desktop"
            ]
          },
          "country": {
            "title": "Country you are selling into",
            "enum": [
              "us",
              "gb",
              "de",
              "fr",
              "es",
              "it",
              "nl",
              "pl",
              "ca",
              "au",
              "br",
              "mx",
              "ru",
              "sa",
              "ae",
              "il",
              "kr",
              "jp",
              "in",
              "sg",
              "cl",
              "za"
            ],
            "type": "string",
            "description": "Which country's version of the site to read. This decides the currency prices come back in, which products are shown, and which products count as shipping locally to your buyers.",
            "default": "us"
          },
          "preset": {
            "title": "What kind of product are you looking for",
            "enum": [
              "proven_sellers",
              "rising_fast",
              "low_competition",
              "high_margin",
              "local_stock",
              "custom"
            ],
            "type": "string",
            "description": "Each option is simply a different weighting of the same published figures. Every figure and every weight is written onto each result, so you can always re-rank the list yourself afterwards.",
            "default": "proven_sellers"
          },
          "customWeights": {
            "title": "Custom weights",
            "type": "object",
            "description": "Only used when the option above is set to Custom. Give any of: unitsSold, salesVelocityPerDay, rating, reviewCount, price, discountPercent, daysSinceLaunch, isChoice, shipsFromSelectedCountry — each with a weight from 1 to 100."
          },
          "maxResults": {
            "title": "How many products in the shortlist",
            "minimum": 1,
            "maximum": 5000,
            "type": "integer",
            "description": "The size of the ranked shortlist. Everything collected is deduplicated and ranked first, and only the best this many are returned.",
            "default": 100
          },
          "minUnitsSold": {
            "title": "Minimum units sold",
            "minimum": 0,
            "maximum": 10000000,
            "type": "integer",
            "description": "Only keep products the site says have sold at least this many units in total. Products the site does not publish a unit count for are left out when this is above zero.",
            "default": 0
          },
          "minRating": {
            "title": "Minimum buyer rating",
            "minimum": 0,
            "maximum": 5,
            "type": "number",
            "description": "Only keep products rated at or above this, out of 5. Leave at zero to keep everything, including products with no rating yet.",
            "default": 0
          },
          "minPrice": {
            "title": "Lowest selling price",
            "minimum": 0,
            "maximum": 1000000,
            "type": "number",
            "description": "Only keep products at or above this selling price, in the currency of the country you chose. Leave empty for no floor."
          },
          "maxPrice": {
            "title": "Highest selling price",
            "minimum": 0,
            "maximum": 1000000,
            "type": "number",
            "description": "Only keep products at or below this selling price, in the currency of the country you chose. Leave empty for no ceiling."
          },
          "shipFromCountries": {
            "title": "Only products shipped from these countries",
            "uniqueItems": true,
            "type": "array",
            "description": "Restrict the shortlist to products dispatched from the countries you pick — the single biggest lever on delivery time for a dropshipper. Leave empty to accept any origin. Products that do not say where they ship from are reported separately rather than quietly included.",
            "items": {
              "type": "string",
              "enum": [
                "CN",
                "US",
                "ES",
                "DE",
                "FR",
                "IT",
                "PL",
                "CZ",
                "NL",
                "BE",
                "GB",
                "TR",
                "RU",
                "BR",
                "MX",
                "CA",
                "AU",
                "JP",
                "KR",
                "IN",
                "ID",
                "TH",
                "VN",
                "MY",
                "AE",
                "SA"
              ],
              "enumTitles": [
                "China",
                "United States",
                "Spain",
                "Germany",
                "France",
                "Italy",
                "Poland",
                "Czechia",
                "Netherlands",
                "Belgium",
                "United Kingdom",
                "Turkey",
                "Russia",
                "Brazil",
                "Mexico",
                "Canada",
                "Australia",
                "Japan",
                "South Korea",
                "India",
                "Indonesia",
                "Thailand",
                "Vietnam",
                "Malaysia",
                "United Arab Emirates",
                "Saudi Arabia"
              ]
            }
          },
          "excludePromoted": {
            "title": "Leave out promoted placements",
            "type": "boolean",
            "description": "Search results contain promoted placements mixed in with the rest — around a quarter of them. Every product is flagged either way; turn this on to keep them out of the shortlist entirely. Deal lists do not say whether a product is promoted, so nothing from them is removed by this.",
            "default": false
          },
          "sorts": {
            "title": "Orderings to read for each search term",
            "uniqueItems": true,
            "type": "array",
            "description": "The site shows a different slice of its catalogue under each ordering, so reading more than one widens the pool of candidates. Reading all four takes about four times as long.",
            "items": {
              "type": "string",
              "enum": [
                "orders",
                "best_match",
                "price_asc",
                "price_desc"
              ],
              "enumTitles": [
                "Best selling",
                "Best match",
                "Cheapest first",
                "Most expensive first"
              ]
            },
            "default": [
              "orders"
            ]
          },
          "pagesPerKeyword": {
            "title": "Depth per search term",
            "minimum": 1,
            "maximum": 60,
            "type": "integer",
            "description": "How deep to go into each search term's results. Each step is another 20 candidates. The site publishes a limited number of public results for any one search, so very broad terms stop before this is reached.",
            "default": 3
          },
          "includeReviewCounts": {
            "title": "Look up review volume",
            "type": "boolean",
            "description": "Search results carry a rating but not the number of reviews behind it. Leave this on to attach the published review count to the strongest candidates, so review volume can count towards the ranking.",
            "default": true
          },
          "maxReviewLookups": {
            "title": "Maximum review-volume lookups",
            "minimum": 0,
            "maximum": 2000,
            "type": "integer",
            "description": "An upper bound on how many products get their review volume attached. The best-ranked candidates are done first.",
            "default": 300
          },
          "parallelKeywords": {
            "title": "Search terms at a time",
            "minimum": 1,
            "maximum": 4,
            "type": "integer",
            "description": "How many search terms to work through at once. Higher is faster; lower is gentler on the source site and returns slightly more distinct products.",
            "default": 2
          }
        }
      },
      "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
                  }
                }
              },
              "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}