{
  "openapi": "3.0.1",
  "info": {
    "title": "Crypto Exchange Spread Scanner",
    "description": "Compare crypto prices across 12 exchanges and find the best spreads. Uses real bid and ask prices, so each result shows where to buy and sell, the gross and fee-adjusted spread, order size at the top of the book and 24 hour volume. Filter by coin, exchange, volume and size. Export to CSV or Excel.",
    "version": "1.0",
    "x-build-id": "uREhetGdRK1e1oUcy"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/parselab~crypto-exchange-spread-scanner/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-parselab-crypto-exchange-spread-scanner",
        "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/parselab~crypto-exchange-spread-scanner/runs": {
      "post": {
        "operationId": "runs-sync-parselab-crypto-exchange-spread-scanner",
        "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/parselab~crypto-exchange-spread-scanner/run-sync": {
      "post": {
        "operationId": "run-sync-parselab-crypto-exchange-spread-scanner",
        "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": {
          "maxItems": {
            "title": "Max Items",
            "minimum": 1,
            "maximum": 1000000,
            "type": "integer",
            "description": "Free users: Limited to 10 items (preview). Paid users: Optional, max 1,000,000."
          },
          "mode": {
            "title": "What to collect",
            "enum": [
              "arbitrage",
              "prices",
              "tickers"
            ],
            "type": "string",
            "description": "Spreads returns one row per coin with the best place to buy and the best place to sell. Price comparison returns one row per coin with the price on every exchange. All tickers returns one row per exchange and trading pair.",
            "default": "arbitrage"
          },
          "exchanges": {
            "title": "Exchanges",
            "type": "array",
            "description": "Exchanges to compare. Leave empty for the 12 defaults: binance, coinbase, kraken, bitstamp, okx, kucoin, gate, mexc, bitget, htx, bitfinex, cryptocom. Bybit can be added by name but often refuses cloud connections.",
            "items": {
              "type": "string"
            }
          },
          "coins": {
            "title": "Coins",
            "type": "array",
            "description": "Coin symbols to compare, for example BTC, ETH, SOL. Leave empty to scan every coin listed on at least two exchanges.",
            "items": {
              "type": "string"
            }
          },
          "quotes": {
            "title": "Quote currencies",
            "type": "array",
            "description": "Currencies the coins are priced in, for example USDT, USDC, USD, EUR. Pairs are compared only within the same group.",
            "items": {
              "type": "string"
            }
          },
          "treatStablecoinsAsUsd": {
            "title": "Treat stablecoins as US dollars",
            "type": "boolean",
            "description": "Compare USDT, USDC, USD, FDUSD and BUSD pairs as one group. Turn it off to compare only identical quote currencies.",
            "default": true
          },
          "minNetSpreadPct": {
            "title": "Minimum net spread (%)",
            "type": "number",
            "description": "Only show spreads that stay above this level after taker fees on both exchanges.",
            "default": 0
          },
          "maxSpreadPct": {
            "title": "Maximum gross spread (%)",
            "minimum": 0,
            "type": "number",
            "description": "Hide spreads above this level. Very large spreads are usually stale quotes, delisted coins or different assets.",
            "default": 30
          },
          "minVolumeUsd": {
            "title": "Minimum 24 hour volume (USD)",
            "minimum": 0,
            "type": "number",
            "description": "Skip exchanges where the pair traded less than this in the last 24 hours. Low volume pairs often have quotes you cannot really trade.",
            "default": 100000
          },
          "minTradeSizeUsd": {
            "title": "Minimum size at top of book (USD)",
            "minimum": 0,
            "type": "number",
            "description": "Skip spreads where the order size shown at the best bid or ask is smaller than this. Exchanges that do not publish sizes are not filtered.",
            "default": 100
          },
          "sortBy": {
            "title": "Sort spreads by",
            "enum": [
              "netSpread",
              "profit"
            ],
            "type": "string",
            "description": "Net spread sorts by percentage after fees. Estimated profit sorts by the profit at the size available at the top of the book.",
            "default": "netSpread"
          },
          "feeOverridesPct": {
            "title": "Taker fee overrides (%)",
            "type": "object",
            "description": "Your own taker fee in percent for an exchange, for example {\"binance\": 0.075, \"kraken\": 0.26}. Exchanges not listed use the standard account fee."
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}