{
  "openapi": "3.0.1",
  "info": {
    "title": "TradingView Screener Scraper",
    "description": "Run the TradingView screener across every market it publishes: 60+ countries plus crypto, forex, futures, bonds and CFDs. Up to 77 fields per row covering price, fundamentals and technicals, with column names validated so a typo is reported instead of returning silent nulls.",
    "version": "0.1",
    "x-build-id": "ks8f9eGaOVF9HNXE6"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/cirkit~tradingview-screener-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-cirkit-tradingview-screener-scraper",
        "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/cirkit~tradingview-screener-scraper/runs": {
      "post": {
        "operationId": "runs-sync-cirkit-tradingview-screener-scraper",
        "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/cirkit~tradingview-screener-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-cirkit-tradingview-screener-scraper",
        "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": {
          "markets": {
            "title": "Markets",
            "type": "array",
            "description": "Which TradingView markets to screen. Every market is a separate universe, so listing several widens the result set. Equity markets include america, canada, uk, germany, france, italy, spain, netherlands, switzerland, sweden, japan, india, australia, brazil, hongkong, singapore, korea, mexico and about fifty more. Non-equity markets are crypto, coin, forex, futures, bond, cfd and economics2. An unknown market is reported by name instead of quietly returning nothing.",
            "default": [
              "america"
            ],
            "items": {
              "type": "string"
            }
          },
          "preset": {
            "title": "Screen",
            "enum": [
              "all",
              "top-gainers",
              "top-losers",
              "most-active",
              "large-cap",
              "small-cap",
              "oversold",
              "overbought",
              "high-dividend"
            ],
            "type": "string",
            "description": "A ready-made screen. Each one sets its own filter and sort, so you get a useful result without writing any filter JSON. Choose \"Everything\" and use the filters below to build your own.",
            "default": "all"
          },
          "columnSet": {
            "title": "Data to return",
            "enum": [
              "core",
              "technicals",
              "fundamentals",
              "everything"
            ],
            "type": "string",
            "description": "How much detail each row carries. Every set returns the same 28 core fields (price, change, volume, market cap, P/E, EPS, dividend yield, sector, industry, RSI, technical rating, 50 and 200 day moving averages, five performance windows and the 52 week range). The larger sets add more on top. Extra fields do not change the price: you are charged per row, not per column.",
            "default": "core"
          },
          "maxItems": {
            "title": "Max rows",
            "minimum": 0,
            "maximum": 250000,
            "type": "integer",
            "description": "Hard cap on how many rows this run returns, and therefore on what it costs. Filters and de-duplication are applied before the cap, so a cap of 500 returns 500 rows that match, not 500 candidates. Set to 0 to run nothing and be charged nothing.",
            "default": 100
          },
          "tickers": {
            "title": "Specific symbols",
            "type": "array",
            "description": "Screen only these instruments instead of a whole market. Write them as EXCHANGE:TICKER (NASDAQ:AAPL, NYSE:KO, CRYPTO:BTCUSD) for an exact match. A bare ticker such as AAPL also works and is matched by symbol name. TradingView drops symbols it does not recognise without complaining, so any that come back missing are listed in the run log.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "primaryListingsOnly": {
            "title": "Primary listings only",
            "type": "boolean",
            "description": "Drop OTC mirrors and secondary listings of the same company. On the US market this takes 19,837 rows down to 13,698 and removes most of the duplicate-looking noise. Turn it off if you specifically want OTC and cross-listed tickers.",
            "default": true
          },
          "instrumentTypes": {
            "title": "Instrument types",
            "type": "array",
            "description": "Restrict to particular instrument types on equity markets: stock, fund (ETFs and funds), dr (depositary receipts), structured. Leave empty for all of them. This filter is skipped automatically on crypto, forex, futures, bond and cfd, where it would match nothing.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "sectors": {
            "title": "Sectors",
            "type": "array",
            "description": "Keep only these sectors, written exactly as TradingView spells them: Technology Services, Electronic Technology, Finance, Health Technology, Retail Trade, Energy Minerals, Consumer Durables, Producer Manufacturing, Utilities, Commercial Services, Non-Energy Minerals, Process Industries, Transportation, Communications, Distribution Services, Consumer Non-Durables, Consumer Services, Industrial Services, Health Services, Miscellaneous.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "minMarketCap": {
            "title": "Minimum market cap",
            "minimum": 0,
            "type": "integer",
            "description": "Keep only instruments with at least this market capitalisation, in the market's own currency. 1000000000 is one billion."
          },
          "maxMarketCap": {
            "title": "Maximum market cap",
            "minimum": 0,
            "type": "integer",
            "description": "Keep only instruments at or below this market capitalisation."
          },
          "minPrice": {
            "title": "Minimum price",
            "minimum": 0,
            "type": "integer",
            "description": "Keep only instruments trading at or above this last price."
          },
          "maxPrice": {
            "title": "Maximum price",
            "minimum": 0,
            "type": "integer",
            "description": "Keep only instruments trading at or below this last price."
          },
          "minVolume": {
            "title": "Minimum volume",
            "minimum": 0,
            "type": "integer",
            "description": "Keep only instruments that traded at least this many units today. Useful for cutting illiquid tickers out of a screen."
          },
          "minChangePercent": {
            "title": "Minimum change today (%)",
            "type": "integer",
            "description": "Keep only instruments up at least this much today. Use a negative value to keep everything above a given loss."
          },
          "sortBy": {
            "title": "Sort by",
            "type": "string",
            "description": "TradingView field name to sort on, for example market_cap_basic, change, volume, RSI, dividends_yield or Perf.Y. Leave empty to use the sort that belongs to the chosen screen. Sorting is always applied: without it TradingView returns an arbitrary slice and two identical runs disagree."
          },
          "sortOrder": {
            "title": "Sort order",
            "enum": [
              "desc",
              "asc"
            ],
            "type": "string",
            "description": "Descending puts the largest, fastest-rising or most active first. Leave at descending unless you are looking for the bottom of a list.",
            "default": "desc"
          },
          "extraColumns": {
            "title": "Extra fields",
            "type": "array",
            "description": "Any additional TradingView field names to append to every row, delivered under \"extra\". TradingView publishes 3,771 of them per market and answers an unrecognised name with a silent null rather than an error, so every name here is checked against the market's own field catalogue first and anything unknown is named in the run log instead of becoming a column of nulls.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "advancedFilters": {
            "title": "Advanced filters",
            "type": "array",
            "description": "Raw TradingView filter clauses for anything the fields above do not cover, as objects of the form {\"left\": \"price_earnings_ttm\", \"operation\": \"less\", \"right\": 15}. Operations are greater, egreater, less, eless, equal, nequal, in_range, not_in_range, match, empty and nempty. Clauses are combined with AND. A clause naming a field the market does not publish is dropped and reported, because TradingView answers those with zero rows instead of an error.",
            "default": []
          },
          "maxRunSeconds": {
            "title": "Time budget (seconds)",
            "minimum": 60,
            "maximum": 86400,
            "type": "integer",
            "description": "Stop starting new work after this many seconds and push whatever has been collected. Guards against a run being killed by the platform timeout and billing for the full window.",
            "default": 3300
          },
          "proxyConfiguration": {
            "title": "Proxy",
            "type": "object",
            "description": "Optional. TradingView's scanner endpoint is public and unauthenticated, and it answers Apify's datacenter egress exactly as it answers a home connection, so this Actor needs no proxy and is cheaper without one. Configure it only if your own network policy requires it.",
            "default": {
              "useApifyProxy": false
            }
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}