{
  "openapi": "3.0.1",
  "info": {
    "title": "Chrome, Firefox, VS Code & JetBrains Plugins Tracker",
    "description": "Chrome Web Store, Firefox, VS Code, Open VSX & JetBrains plugins in one run: users, ratings, reviews + complaint insights, permission risk, publishers, niche reports, alerts. $1.50/1k.",
    "version": "1.0",
    "x-build-id": "L6dCWCVv8lpBltoSF"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/signalscope-data~extension-marketplaces-tracker/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-signalscope-data-extension-marketplaces-tracker",
        "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/signalscope-data~extension-marketplaces-tracker/runs": {
      "post": {
        "operationId": "runs-sync-signalscope-data-extension-marketplaces-tracker",
        "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/signalscope-data~extension-marketplaces-tracker/run-sync": {
      "post": {
        "operationId": "run-sync-signalscope-data-extension-marketplaces-tracker",
        "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": {
          "outputLevel": {
            "title": "Output level",
            "enum": [
              "extensions",
              "publishers"
            ],
            "type": "string",
            "description": "\"publishers\" groups the matching extensions by publisher and loads each publisher's portfolio on that marketplace (VS Code, Open VSX, Firefox and JetBrains: the full list by publisher; Chrome: found by searching the developer name, matched by developer id): extension count, total installs, total ratings, weighted average rating, top extension, website domain, GitHub repos, last update, stale extensions and the extensions list. In monitor modes alerts on new publishers, new / removed extensions, installs up/down and rating changes. Charged per publisher row; reviews are not collected in this mode.",
            "default": "extensions"
          },
          "marketplaces": {
            "title": "Marketplaces",
            "type": "array",
            "description": "Which marketplaces to query. Every search term / publisher is run on each selected marketplace. Chrome Web Store supports search terms and extension IDs (no publisher or whole-store browsing). JetBrains Marketplace covers plugins for IntelliJ IDEA, PyCharm, WebStorm, GoLand, Rider, PhpStorm, CLion, Android Studio and other JetBrains IDEs. Default when left empty: the four browser / VS Code marketplaces.",
            "items": {
              "type": "string",
              "enum": [
                "chrome",
                "vscode",
                "openvsx",
                "firefox",
                "jetbrains"
              ],
              "enumTitles": [
                "Chrome Web Store",
                "VS Code Marketplace",
                "Open VSX (VSCodium, Cursor, Gitpod, Theia)",
                "Firefox Add-ons",
                "JetBrains Marketplace (IntelliJ IDEA, PyCharm, WebStorm & other JetBrains IDE plugins)"
              ]
            },
            "default": [
              "chrome",
              "vscode",
              "openvsx",
              "firefox"
            ]
          },
          "searchTerms": {
            "title": "Search terms",
            "type": "array",
            "description": "Keywords to search, e.g. \"ai assistant\", \"tailwind\", \"password manager\". Leave empty to browse the top list (optionally within a category).",
            "items": {
              "type": "string"
            }
          },
          "strictSearch": {
            "title": "Strict keyword match",
            "type": "boolean",
            "description": "Keep only results whose name, ID, description, tags or categories contain every word of the search term. Marketplaces otherwise return loosely related popular extensions when sorting by installs.",
            "default": true
          },
          "publishers": {
            "title": "Publishers / authors",
            "type": "array",
            "description": "List all extensions of these publishers: VS Code publisher ID (e.g. \"ms-python\"), Open VSX namespace (e.g. \"redhat\"), Firefox author username/ID (e.g. \"bitwarden\") or JetBrains Marketplace vendor (e.g. \"JetBrains\", \"Red Hat\"). Not available for Chrome Web Store.",
            "items": {
              "type": "string"
            }
          },
          "extensionIds": {
            "title": "Specific extensions (watchlist)",
            "type": "array",
            "description": "Track exact extensions: \"chrome:<32-letter ID>\", \"vscode:ms-python.python\", \"openvsx:redhat.java\", \"firefox:ublock-origin\", \"jetbrains:17718\" (or the plugin's XML id, e.g. \"jetbrains:com.github.copilot\") or full marketplace URLs (Chrome Web Store and plugins.jetbrains.com URLs too). Without prefix, a 32-letter ID is Chrome, a number is JetBrains, \"publisher.name\" is looked up on VS Code + Open VSX and a plain slug on Firefox.",
            "items": {
              "type": "string"
            }
          },
          "vscodeCategory": {
            "title": "VS Code / Open VSX category",
            "type": "string",
            "description": "Optional category filter, e.g. \"AI\", \"Programming Languages\", \"Themes\", \"Linters\", \"Debuggers\", \"Snippets\", \"Chat\", \"Formatters\", \"Testing\", \"Data Science\"."
          },
          "firefoxCategory": {
            "title": "Firefox category",
            "type": "string",
            "description": "Optional Firefox category slug, e.g. \"privacy-security\", \"tabs\", \"search-tools\", \"download-management\", \"appearance\", \"other\"."
          },
          "jetbrainsTag": {
            "title": "JetBrains tag",
            "type": "string",
            "description": "Optional JetBrains Marketplace tag filter, e.g. \"AI\", \"Code Tools\", \"Theme\", \"Framework\", \"Programming Language\", \"Tools Integration\", \"Productivity\"."
          },
          "jetbrainsProduct": {
            "title": "JetBrains IDE",
            "type": "string",
            "description": "Optional: only plugins compatible with this JetBrains IDE, e.g. \"idea\" (IntelliJ IDEA), \"pycharm\", \"webstorm\", \"goland\", \"rider\", \"phpstorm\", \"clion\", \"rubymine\", \"androidstudio\", \"dataspell\"."
          },
          "sortBy": {
            "title": "Sort by",
            "enum": [
              "installs",
              "updated",
              "newest",
              "rating",
              "relevance"
            ],
            "type": "string",
            "description": "Ranking used for search and browse lists. The rank field and rank-change tracking follow this order. Chrome Web Store search is always ordered by the store's own relevance.",
            "default": "installs"
          },
          "maxResultsPerQuery": {
            "title": "Max results per query",
            "minimum": 1,
            "maximum": 2000,
            "type": "integer",
            "description": "Max extensions per search term / publisher / category list per marketplace.",
            "default": 50
          },
          "maxExtensionsPerPublisher": {
            "title": "Max extensions per publisher",
            "minimum": 1,
            "maximum": 1000,
            "type": "integer",
            "description": "Publishers mode only: load at most this many extensions per publisher (most installed first). portfolioComplete is false when the cap is hit (and always for Chrome, which has no developer listing).",
            "default": 100
          },
          "minInstalls": {
            "title": "Min installs",
            "minimum": 0,
            "type": "integer",
            "description": "Skip extensions below this many installs (VS Code), downloads (Open VSX, JetBrains), users (Chrome) or daily users (Firefox).",
            "default": 0
          },
          "minPermissionRisk": {
            "title": "Minimum permission risk (security audit)",
            "enum": [
              "",
              "low",
              "medium",
              "high",
              "critical"
            ],
            "type": "string",
            "description": "Output only Chrome / Firefox extensions whose permission risk is at least this level (VS Code, Open VSX and JetBrains have no permission model and are excluded when set). Every Chrome and Firefox row gets permissionRiskScore (0–100), permissionRiskLevel, allSitesAccess and riskyPermissions with a plain-English reason (e.g. cookies, webRequest, debugger, access to all websites).",
            "default": ""
          },
          "staleAfterDays": {
            "title": "Stale after (days)",
            "minimum": 1,
            "type": "integer",
            "description": "Extensions not updated for more than this many days get isStale = true (abandoned-extension finder).",
            "default": 365
          },
          "outputMode": {
            "title": "Output mode",
            "enum": [
              "all",
              "new",
              "changed"
            ],
            "type": "string",
            "description": "\"new\" and \"changed\" compare with the previous run of the same monitor name. The first run is the baseline and outputs everything.",
            "default": "all"
          },
          "trackChanges": {
            "title": "Add change fields in 'All' mode",
            "type": "boolean",
            "description": "Save a snapshot and add previousInstalls, installsChange, rankChange, previousVersion and changeTypes even when outputting all results.",
            "default": false
          },
          "minInstallsChangePct": {
            "title": "Installs change threshold (%)",
            "minimum": 0,
            "type": "integer",
            "description": "An installs-up / installs-down change is reported when installs moved at least this many percent since the last run.",
            "default": 10
          },
          "minRankChange": {
            "title": "Rank change threshold",
            "minimum": 1,
            "type": "integer",
            "description": "A rank-up / rank-down change is reported when the position moved at least this many places.",
            "default": 5
          },
          "stateKey": {
            "title": "Monitor name",
            "type": "string",
            "description": "Snapshot name used for change tracking. Use a different name for each separate monitor/schedule.",
            "default": "default"
          },
          "includeMarketReport": {
            "title": "Include niche market report",
            "type": "boolean",
            "description": "Also output one market-report row per marketplace × search term / publisher / category (recordType = \"market-report\"): total extensions in the store, installs (total, median, distribution), market concentration (top 1 / 3 / 10 install share), average and rating-weighted rating, rating distribution, pricing mix, update freshness, new extensions in the last 90 / 365 days, permission-risk mix and all-sites access share (Chrome, Firefox), Chrome extensions still on Manifest V2, top publishers, VS Code weekly trending, weak incumbents (big but rated below 3.8), stale incumbents (big but not updated for a year), rising newcomers and plain-English opportunity signals. With trackChanges or a monitor output mode it adds what changed since the last run. Uses the same filters (minInstalls, minPermissionRisk) and maxResultsPerQuery as the extension rows.",
            "default": false
          },
          "marketReportOnly": {
            "title": "Market report only",
            "type": "boolean",
            "description": "Output only the market-report rows (no extension, publisher or review rows). Use this to size a niche before building an extension. Each report is charged as one market-report event; extensions analysed for it are not charged.",
            "default": false
          },
          "includeReviewInsights": {
            "title": "Include review insights (complaint & praise themes)",
            "type": "boolean",
            "description": "Also output one review-insights row per matched extension (recordType = \"review-insights\") from its newest reviews (up to \"Max reviews per extension\"): rating distribution, negative / positive share, rating trend (last 90 days vs older), top complaint themes in 1-3 star reviews (bugs, broke after update, browser / IDE compatibility incl. Manifest V3, performance & memory, breaks sites, ads & hijacking, privacy, paywall, login, sync & data loss, accuracy, UI, developer support) with example quotes, top praise themes in 4-5 star reviews, feature requests, common complaint phrases, rating by extension version with problem releases (a version rated 0.7+ stars below the others), monthly trend and developer reply rate / speed. With 2+ extensions of 10+ reviews a review-comparison row benchmarks them (themes per 100 reviews, relative weaknesses and strengths). Works on Chrome, Firefox, VS Code and JetBrains; works without \"Include user reviews\" (reviews read for insights are not charged).",
            "default": false
          },
          "includeReviews": {
            "title": "Include user reviews",
            "type": "boolean",
            "description": "Also output user reviews for every matched extension as separate rows (recordType = \"review\"): star rating, review text, date, extension version, helpful votes (Chrome) and the developer's reply. Works on Chrome Web Store, Firefox Add-ons, VS Code Marketplace and JetBrains Marketplace. Reviewer names are not collected. In \"new\"/\"changed\" output modes only reviews posted since the previous run are returned.",
            "default": false
          },
          "maxReviewsPerExtension": {
            "title": "Max reviews per extension",
            "minimum": 1,
            "maximum": 5000,
            "type": "integer",
            "description": "Upper limit of review rows per extension (after the star and date filters).",
            "default": 50
          },
          "reviewSort": {
            "title": "Review order",
            "enum": [
              "recent",
              "helpful",
              "lowest"
            ],
            "type": "string",
            "description": "Order in which reviews are collected. \"helpful\" and \"lowest\" use the Chrome Web Store's own sort; Firefox, VS Code and JetBrains always return newest first.",
            "default": "recent"
          },
          "maxReviewRating": {
            "title": "Only reviews with at most N stars",
            "minimum": 1,
            "maximum": 5,
            "type": "integer",
            "description": "Keep only reviews with this many stars or fewer, e.g. 2 = complaints only (bug reports, churn reasons, feature requests). 5 = all reviews.",
            "default": 5
          },
          "reviewsSince": {
            "title": "Reviews since",
            "type": "string",
            "description": "Only reviews posted on or after this date (\"2026-09-01\") or within a period (\"30 days\", \"2 weeks\", \"3 months\")."
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}