{
  "openapi": "3.0.1",
  "info": {
    "title": "GitHub Marketplace Apps & Actions Tracker",
    "description": "Scrape & monitor GitHub Marketplace apps and Actions (installs, plans, permissions, stars, trust check) and audit any public repo's workflows for outdated, unpinned or node20 Actions. $1 / 1,000 rows.",
    "version": "1.0",
    "x-build-id": "WPbOjeS6g29bqtY2X"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/signalscope-data~github-marketplace-tracker/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-signalscope-data-github-marketplace-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~github-marketplace-tracker/runs": {
      "post": {
        "operationId": "runs-sync-signalscope-data-github-marketplace-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~github-marketplace-tracker/run-sync": {
      "post": {
        "operationId": "run-sync-signalscope-data-github-marketplace-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": {
          "listingTypes": {
            "title": "Listing types",
            "type": "array",
            "description": "Which kind of Marketplace listings to scrape. Each search term / category is run once per type.",
            "items": {
              "type": "string",
              "enum": [
                "apps",
                "actions"
              ],
              "enumTitles": [
                "Apps (GitHub Apps and OAuth apps)",
                "Actions (GitHub Actions for workflows)"
              ]
            },
            "default": [
              "apps",
              "actions"
            ]
          },
          "searchTerms": {
            "title": "Search terms",
            "type": "array",
            "description": "Keywords to search on GitHub Marketplace, e.g. \"terraform\", \"code review\", \"deploy\", \"ai\". Each term is a separate ranked list.",
            "items": {
              "type": "string"
            }
          },
          "categories": {
            "title": "Categories",
            "type": "array",
            "description": "Marketplace categories to scrape in marketplace order. Leave search terms, categories and listing URLs empty to get the most popular (or newest) listings.",
            "items": {
              "type": "string",
              "enum": [
                "agent-apps",
                "ai-assisted",
                "api-management",
                "backup-utilities",
                "chat",
                "code-quality",
                "code-review",
                "code-scanning-ready",
                "code-search",
                "container-ci",
                "continuous-integration",
                "dependency-management",
                "deployment",
                "deployment-protection-rules",
                "desktop-tools",
                "game-ci",
                "github-sponsors",
                "ides",
                "learning",
                "localization",
                "mobile",
                "mobile-ci",
                "monitoring",
                "open-source-management",
                "project-management",
                "publishing",
                "recently-added",
                "reporting",
                "security",
                "support",
                "sustainability",
                "testing",
                "time-tracking",
                "utilities"
              ],
              "enumTitles": [
                "Agent apps",
                "AI Assisted",
                "API management",
                "Backup utilities",
                "Chat",
                "Code quality",
                "Code review",
                "Code scanning ready",
                "Code search",
                "Container CI",
                "Continuous integration",
                "Dependency management",
                "Deployment",
                "Deployment protection rules",
                "Desktop tools",
                "Game CI",
                "Github sponsors",
                "IDEs",
                "Learning",
                "Localization",
                "Mobile",
                "Mobile CI",
                "Monitoring",
                "Open source management",
                "Project management",
                "Publishing",
                "Recently added",
                "Reporting",
                "Security",
                "Support",
                "Sustainability",
                "Testing",
                "Time tracking",
                "Utilities"
              ]
            }
          },
          "listingUrls": {
            "title": "Listing URLs (watchlist)",
            "type": "array",
            "description": "Specific listings to track, e.g. \"https://github.com/marketplace/codecov\" (app) or \"https://github.com/marketplace/actions/trufflehog-oss\" (action). Watchlist listings always include details (installs / stars) and are charged as listing + details.",
            "items": {
              "type": "string"
            }
          },
          "repositories": {
            "title": "Audit repositories' workflows (Actions upgrade & pinning check)",
            "type": "array",
            "description": "Public GitHub repositories, e.g. \"vercel/next.js\" or \"https://github.com/psf/requests\". Reads every workflow in .github/workflows and checks each Action / reusable workflow it uses: version used vs latest release (majors behind), Node.js runtime of the exact version used (node12/16 deprecated, node20 end-of-life), SHA pinning, branch refs, archived or missing action repos — with a ready-to-paste recommendedUses line. Adds one workflow-audit row per repo (score 0-100, grade, top fixes, workflows without permissions:, pull_request_target, possible script injection). No GitHub token needed. Can be used alone (leave search terms and categories empty).",
            "items": {
              "type": "string"
            }
          },
          "maxWorkflowsPerRepo": {
            "title": "Max workflow files per repository",
            "minimum": 1,
            "maximum": 200,
            "type": "integer",
            "description": "Workflow files read per audited repository (in folder order).",
            "default": 50
          },
          "onlyActionsWithIssues": {
            "title": "Audit: only Actions with issues",
            "type": "boolean",
            "description": "Skip workflow-action rows that have no issues (the repo's workflow-audit row still counts everything).",
            "default": false
          },
          "sortBy": {
            "title": "Sort",
            "enum": [
              "popularity",
              "newest"
            ],
            "type": "string",
            "description": "Order of the ranked lists. \"newest\" + outputMode \"new\" gives a feed of newly published apps and Actions.",
            "default": "popularity"
          },
          "maxResultsPerQuery": {
            "title": "Max results per search / category",
            "minimum": 1,
            "maximum": 10000,
            "type": "integer",
            "description": "Max listings per search term or category and type (GitHub serves up to 10,000 per list).",
            "default": 100
          },
          "verifiedOnly": {
            "title": "Verified creators only",
            "type": "boolean",
            "description": "Keep only listings from GitHub-verified creators (the blue verified badge).",
            "default": false
          },
          "includeDetails": {
            "title": "Include details (installs, plans, permissions, stars, releases)",
            "type": "boolean",
            "description": "Open each listing page. Apps get exact installs, pricing plans, permissions, owner, categories, verified domain and links. Actions get repository stars, owner, repo, latest release, contributors and open issues. One extra request per listing, charged as an extra listing-details event.",
            "default": false
          },
          "includeTrustCheck": {
            "title": "Action trust & maintenance check",
            "type": "boolean",
            "description": "For every GitHub Action whose listing page is opened (includeDetails, watchlist or publishers level): read its action.yml, release feed and git tags to add runtime (node24 / node20 end-of-life / node12-16 deprecated / docker / composite), latest release date, a pin-ready `uses:` reference with the release's commit SHA, nested actions not pinned to a SHA (composite), docker image pinning, and a 0-100 trustScore with plain-English trustIssues. No extra charge.",
            "default": true
          },
          "minTrustScore": {
            "title": "Minimum Action trust score",
            "minimum": 0,
            "maximum": 100,
            "type": "integer",
            "description": "Keep only Actions with at least this trustScore (0-100; 80+ = high, 60+ = medium). Apps are not affected. Needs includeDetails.",
            "default": 0
          },
          "outputLevel": {
            "title": "Output level",
            "enum": [
              "listings",
              "publishers"
            ],
            "type": "string",
            "description": "\"publishers\" groups every matched listing by its GitHub owner: listing, app and Action counts, total installs and stars, top listing, categories, website domains, verified domain, cheapest paid plan and the full listing list. Opens every listing page (charged as listing-details); each publisher row is one listing event. In \"new\" / \"changed\" modes the alerts are per publisher: new publisher, new-listing, installs-up/down, stars-up/down, pricing-change, new-release.",
            "default": "listings"
          },
          "owners": {
            "title": "Owners (filter)",
            "type": "array",
            "description": "Keep only listings published by these GitHub accounts or organizations, e.g. \"aws-actions\", \"hashicorp\". Needs includeDetails.",
            "items": {
              "type": "string"
            }
          },
          "minInstalls": {
            "title": "Min installs (apps)",
            "minimum": 0,
            "type": "integer",
            "description": "Skip apps with fewer installs than this. Needs includeDetails.",
            "default": 0
          },
          "minStars": {
            "title": "Min stars (actions)",
            "minimum": 0,
            "type": "integer",
            "description": "Skip Actions whose repository has fewer stars than this. Needs includeDetails.",
            "default": 0
          },
          "outputMode": {
            "title": "Output mode",
            "enum": [
              "all",
              "new",
              "changed"
            ],
            "type": "string",
            "description": "\"new\" and \"changed\" compare with the previous run that used the same stateKey. The first run is the baseline and returns everything.",
            "default": "all"
          },
          "trackChanges": {
            "title": "Add change fields in \"all\" mode",
            "type": "boolean",
            "description": "Also compute installsChange, starsChange, rankChange, changeTypes etc. when outputMode is \"all\" (saves a snapshot for the next run).",
            "default": false
          },
          "minGrowthPct": {
            "title": "Min installs / stars change (%)",
            "minimum": 0,
            "type": "number",
            "description": "An installs-up/down or stars-up/down change is reported only when the number moved at least this many percent since the last run.",
            "default": 1
          },
          "minRankChange": {
            "title": "Min rank change",
            "minimum": 1,
            "type": "integer",
            "description": "A rank-up / rank-down change is reported only when the listing moved at least this many positions in a search or category list.",
            "default": 5
          },
          "stateKey": {
            "title": "Monitor name (stateKey)",
            "type": "string",
            "description": "Name of the saved snapshot used by \"new\" / \"changed\" modes. Use a different name for each schedule or watchlist.",
            "default": "default"
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}