{
  "openapi": "3.0.1",
  "info": {
    "title": "GitHub Scraper — Repos, Users, Issues & Releases",
    "description": "Scrape GitHub repositories, users, contributors, issues and releases from the official REST API. Gets past the 1,000-result search wall by slicing queries, and waits out rate limits instead of failing on them.",
    "version": "1.0",
    "x-build-id": "udJ8p3I4Cv05fN6uh"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/pixflor~github-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-pixflor-github-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/pixflor~github-scraper/runs": {
      "post": {
        "operationId": "runs-sync-pixflor-github-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/pixflor~github-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-pixflor-github-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": {
          "mode": {
            "title": "What to scrape",
            "enum": [
              "searchRepos",
              "searchUsers",
              "userRepos",
              "contributors",
              "issues",
              "releases"
            ],
            "type": "string",
            "description": "Pick one. 'searchRepos' searches all of GitHub. 'searchUsers' finds people or organisations and fetches their full profiles. 'userRepos' lists everything one account owns. The last three read one or more specific repositories.",
            "default": "searchRepos"
          },
          "searchQuery": {
            "title": "Search text",
            "type": "string",
            "description": "GitHub search syntax works here, e.g. 'machine learning', 'location:israel followers:>500', 'org:apify'. Required for the two search modes."
          },
          "username": {
            "title": "Username or organisation",
            "type": "string",
            "description": "Only used by 'Repositories of a user/org'. The account whose repositories you want, e.g. apify."
          },
          "repositories": {
            "title": "Repositories",
            "type": "array",
            "description": "Only used by the contributors, issues and releases modes. Accepts 'owner/repo', a GitHub URL, or a git@ remote.",
            "default": [
              "apify/crawlee"
            ],
            "items": {
              "type": "string"
            }
          },
          "githubToken": {
            "title": "GitHub token (optional)",
            "type": "string",
            "description": "A free personal access token. Without one you get 60 requests/hour and 10 searches/minute, which is fine for small runs; with one you get 5,000/hour and 30 searches/minute. Needs no scopes at all for public data. Create one at github.com/settings/tokens."
          },
          "language": {
            "title": "Language",
            "type": "string",
            "description": "Only repositories in this language, e.g. Python, Rust, TypeScript. Sent to GitHub as a search qualifier so it does not waste your result budget."
          },
          "topic": {
            "title": "Topic",
            "type": "string",
            "description": "Only repositories tagged with this GitHub topic, e.g. machine-learning, cli, kubernetes."
          },
          "license": {
            "title": "License",
            "type": "string",
            "description": "SPDX licence key, e.g. mit, apache-2.0, gpl-3.0."
          },
          "minStars": {
            "title": "Minimum stars",
            "minimum": 0,
            "type": "integer",
            "description": "Only repositories with at least this many stars.",
            "default": 0
          },
          "minForks": {
            "title": "Minimum forks",
            "minimum": 0,
            "type": "integer",
            "description": "Only repositories with at least this many forks.",
            "default": 0
          },
          "excludeForks": {
            "title": "Exclude forks",
            "type": "boolean",
            "description": "Drop repositories that are forks of something else.",
            "default": false
          },
          "excludeArchived": {
            "title": "Exclude archived",
            "type": "boolean",
            "description": "Drop repositories the owner has archived.",
            "default": false
          },
          "activeOnly": {
            "title": "Only actively maintained",
            "type": "boolean",
            "description": "Keep only repositories pushed to in the last 90 days. Useful for separating live projects from abandoned ones.",
            "default": false
          },
          "issueState": {
            "title": "Issue state",
            "enum": [
              "open",
              "closed",
              "all"
            ],
            "type": "string",
            "description": "Only used by the issues mode. Note GitHub returns pull requests from this endpoint too - they are labelled as such in the output.",
            "default": "open"
          },
          "partition": {
            "title": "Split large queries",
            "type": "boolean",
            "description": "GitHub only serves the first 1,000 results of any search, however many million match. With this on, an oversized query is automatically split into star-count ranges that each fall under that ceiling, so you can retrieve far more. Leave it on unless you specifically want only the top 1,000.",
            "default": true
          },
          "sortBy": {
            "title": "Sort by",
            "enum": [
              "default",
              "stars",
              "forks",
              "updated",
              "newest",
              "followers"
            ],
            "type": "string",
            "description": "How to order results. Stars, forks and recently-updated are passed to GitHub's own sort where possible.",
            "default": "default"
          },
          "maxItems": {
            "title": "Maximum rows",
            "minimum": 1,
            "maximum": 20000,
            "type": "integer",
            "description": "How many rows to return, and what you pay for. Large values are reachable in search modes because oversized queries are split automatically.",
            "default": 100
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}