{
  "openapi": "3.0.1",
  "info": {
    "title": "GitHub Scraper - Repos, Developers & Contact Leads",
    "description": "Scrape GitHub via the official API: search repositories & developers, get full repo metadata, README, languages, topics, stars & activity, plus developer/org profiles and contributor & stargazer leads with emails. Developer lead-gen + monitoring. No browser.",
    "version": "0.1",
    "x-build-id": "i69p6UOdRUnUDd8ib"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/scrapesage~github-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-scrapesage-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/scrapesage~github-scraper/runs": {
      "post": {
        "operationId": "runs-sync-scrapesage-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/scrapesage~github-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-scrapesage-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": "Mode",
            "enum": [
              "searchRepositories",
              "searchUsers",
              "repositoryDetails",
              "userProfiles",
              "organizationProfiles",
              "repositoryContributors"
            ],
            "type": "string",
            "description": "What to scrape. searchRepositories = find repos by keyword/filters. searchUsers = find developers by location/language/followers. repositoryDetails = full records for specific repos. userProfiles = developer leads by username. organizationProfiles = org leads. repositoryContributors = contributor/stargazer leads from a repo. Start URLs override the mode.",
            "default": "searchRepositories"
          },
          "searchQueries": {
            "title": "Search queries",
            "type": "array",
            "description": "Keywords / phrases for searchRepositories or searchUsers mode. Each query runs separately and combines with the filters below. Examples: \"llm agent framework\", \"vector database\", \"react native\".",
            "items": {
              "type": "string"
            }
          },
          "repositories": {
            "title": "Repositories",
            "type": "array",
            "description": "Repository names (\"owner/repo\") or URLs. Primary input for repositoryDetails and repositoryContributors modes. Examples: \"facebook/react\", \"https://github.com/vercel/next.js\".",
            "items": {
              "type": "string"
            }
          },
          "usernames": {
            "title": "Usernames (developers)",
            "type": "array",
            "description": "GitHub usernames for userProfiles mode. Examples: \"torvalds\", \"gaearon\", \"sindresorhus\".",
            "items": {
              "type": "string"
            }
          },
          "organizations": {
            "title": "Organizations",
            "type": "array",
            "description": "GitHub organization logins for organizationProfiles mode. Examples: \"vercel\", \"openai\", \"microsoft\".",
            "items": {
              "type": "string"
            }
          },
          "startUrls": {
            "title": "Start URLs",
            "type": "array",
            "description": "GitHub URLs to scrape directly (auto-routed). Repo URLs (github.com/owner/repo), user URLs (github.com/torvalds) and org URLs (github.com/orgs/vercel) are all supported.",
            "items": {
              "type": "string"
            }
          },
          "language": {
            "title": "Programming language",
            "type": "string",
            "description": "Repository language filter (searchRepositories). Examples: \"JavaScript\", \"Python\", \"Rust\", \"Go\"."
          },
          "minStars": {
            "title": "Minimum stars",
            "minimum": 0,
            "type": "integer",
            "description": "Only repositories with at least this many stars."
          },
          "maxStars": {
            "title": "Maximum stars",
            "minimum": 0,
            "type": "integer",
            "description": "Only repositories with at most this many stars (combine with minStars to window large topics past the 1,000-result cap)."
          },
          "topics": {
            "title": "Topics",
            "type": "array",
            "description": "Require these GitHub topics, e.g. \"machine-learning\", \"hacktoberfest\", \"cli\".",
            "items": {
              "type": "string"
            }
          },
          "repoLicense": {
            "title": "License",
            "type": "string",
            "description": "Require a license (SPDX-ish key), e.g. \"mit\", \"apache-2.0\", \"gpl-3.0\"."
          },
          "repoCreatedAfter": {
            "title": "Created after (YYYY-MM-DD)",
            "type": "string",
            "description": "Only repositories created on/after this date."
          },
          "repoPushedAfter": {
            "title": "Pushed after (YYYY-MM-DD)",
            "type": "string",
            "description": "Only repositories with a commit pushed on/after this date — great for finding actively maintained projects."
          },
          "includeForks": {
            "title": "Include forks",
            "type": "boolean",
            "description": "Include forked repositories in repository search results.",
            "default": false
          },
          "onlyActive": {
            "title": "Only active (not archived)",
            "type": "boolean",
            "description": "Exclude archived repositories.",
            "default": false
          },
          "userLocation": {
            "title": "Developer location",
            "type": "string",
            "description": "Location filter for searchUsers, e.g. \"San Francisco\", \"Berlin\", \"London\". Matches the free-text GitHub location field."
          },
          "userLanguage": {
            "title": "Developer language",
            "type": "string",
            "description": "Primary language filter for searchUsers (their most-used repo language), e.g. \"Python\", \"TypeScript\"."
          },
          "minFollowers": {
            "title": "Minimum followers",
            "minimum": 0,
            "type": "integer",
            "description": "Only developers/orgs with at least this many followers."
          },
          "minRepos": {
            "title": "Minimum public repos",
            "minimum": 0,
            "type": "integer",
            "description": "Only developers/orgs with at least this many public repositories."
          },
          "userType": {
            "title": "Account type",
            "enum": [
              "user",
              "org",
              "any"
            ],
            "type": "string",
            "description": "Restrict searchUsers to individual developers or organizations.",
            "default": "user"
          },
          "extraQualifiers": {
            "title": "Extra search qualifiers",
            "type": "string",
            "description": "Advanced: raw GitHub search qualifiers appended to the query verbatim, e.g. \"sponsorable:true\" or \"created:>2023-01-01\". See GitHub search syntax docs."
          },
          "sortBy": {
            "title": "Sort by",
            "enum": [
              "best-match",
              "stars",
              "forks",
              "updated",
              "help-wanted-issues",
              "followers",
              "repositories",
              "joined"
            ],
            "type": "string",
            "description": "Result ordering. Repos: stars / forks / updated / help-wanted-issues. Users: followers / repositories / joined. \"best-match\" is GitHub's relevance ranking.",
            "default": "best-match"
          },
          "sortOrder": {
            "title": "Sort order",
            "enum": [
              "desc",
              "asc"
            ],
            "type": "string",
            "description": "Direction for the sort field above (ignored for best-match).",
            "default": "desc"
          },
          "maxResults": {
            "title": "Max records (total)",
            "minimum": 1,
            "maximum": 100000,
            "type": "integer",
            "description": "Total cap on records emitted across all queries/inputs in this run.",
            "default": 50
          },
          "maxResultsPerQuery": {
            "title": "Max records per query",
            "minimum": 0,
            "maximum": 1000,
            "type": "integer",
            "description": "Optional cap per individual query (0 = no per-query cap). GitHub search serves up to 1,000 results per query — window with minStars/maxStars or dates to go deeper.",
            "default": 0
          },
          "peopleSource": {
            "title": "People to extract (contributors mode)",
            "enum": [
              "contributors",
              "stargazers",
              "both"
            ],
            "type": "string",
            "description": "For repositoryContributors mode: pull a repo's contributors, its stargazers, or both — each as a developer-lead record.",
            "default": "contributors"
          },
          "extractCommitEmails": {
            "title": "Extract developer emails from commits",
            "type": "boolean",
            "description": "For developer/contributor records, read the user's public commit activity (and a repo's recent commits) to recover their public commit email — the core lead wedge. GitHub no-reply addresses are filtered out. One extra request per developer.",
            "default": true
          },
          "enrichContactEmails": {
            "title": "Enrich from personal website",
            "type": "boolean",
            "description": "Crawl each developer's/org's website (their GitHub 'blog' field) home + /contact + /about for extra emails, phone and social links. Opt-in (charged as contact enrichment).",
            "default": false
          },
          "includeUserRepos": {
            "title": "Include developer's top repos",
            "type": "boolean",
            "description": "For developer/org records, attach their top repositories (by stars) and derived top languages. One extra request per developer.",
            "default": false
          },
          "maxReposPerUser": {
            "title": "Max repos per developer",
            "minimum": 0,
            "maximum": 100,
            "type": "integer",
            "description": "Cap on a developer's top repos attached when 'Include developer's top repos' is on.",
            "default": 10
          },
          "includeReadme": {
            "title": "Include README",
            "type": "boolean",
            "description": "For repository records, fetch and attach the README text (truncated to ~8,000 chars) + word count. One extra request per repo.",
            "default": false
          },
          "includeLanguages": {
            "title": "Include language breakdown",
            "type": "boolean",
            "description": "For repository records, attach the full language breakdown with byte counts and percentages. One extra request per repo.",
            "default": false
          },
          "includeLatestRelease": {
            "title": "Include latest release",
            "type": "boolean",
            "description": "For repository records, attach the latest release (tag, name, date). One extra request per repo.",
            "default": false
          },
          "includeContributorsCount": {
            "title": "Include contributors count",
            "type": "boolean",
            "description": "For repository records, compute the total contributor count. One extra request per repo.",
            "default": false
          },
          "includeOwnerProfile": {
            "title": "Include repo owner profile",
            "type": "boolean",
            "description": "For repository records, attach the owner's profile lead fields (name, company, blog, location, email, followers). One extra request per repo.",
            "default": false
          },
          "withEmailOnly": {
            "title": "Only records with an email",
            "type": "boolean",
            "description": "Emit only developer/org records for which at least one email was found.",
            "default": false
          },
          "hireableOnly": {
            "title": "Only hireable developers",
            "type": "boolean",
            "description": "Emit only developers whose profile is flagged 'available for hire'. Great for technical recruiting.",
            "default": false
          },
          "monitorMode": {
            "title": "Monitor mode (only new records)",
            "type": "boolean",
            "description": "Remember repos/developers/orgs seen in previous runs (in a named key-value store) and emit only NEW ones. Pair with Apify Schedules to watch a topic, company, or repo for new projects, contributors or stargazers. Does not conflict with scheduling.",
            "default": false
          },
          "monitorStoreName": {
            "title": "Monitor store name",
            "type": "string",
            "description": "Named key-value store that holds the 'already seen' keys for monitor mode. Use a distinct name per saved task so their histories stay separate.",
            "default": "github-monitor"
          },
          "githubToken": {
            "title": "GitHub token (optional, strongly recommended)",
            "type": "string",
            "description": "A GitHub personal access token (classic or fine-grained, read-only is enough). Without it GitHub allows only ~60 requests/hour per IP; with it you get 5,000/hour and 30 searches/minute — much faster, larger runs. Create one at github.com/settings/tokens."
          },
          "maxConcurrency": {
            "title": "Max concurrency",
            "minimum": 1,
            "maximum": 16,
            "type": "integer",
            "description": "Maximum API requests in parallel.",
            "default": 6
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Proxy settings. The GitHub API has no anti-bot; a proxy is used to spread the per-IP rate limit across IPs when running without a token. The default Apify proxy is fine.",
            "default": {
              "useApifyProxy": true
            }
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}