{
  "data": {
    "id": "amhOs5VaUzW1sK9t5",
    "actId": "dd0ij1xXQE2gGm55r",
    "userId": "IYgBDiXtHOijAaUel",
    "startedAt": "2026-11-11T18:40:12.913Z",
    "finishedAt": "2026-11-11T18:40:27.780Z",
    "status": "SUCCEEDED",
    "meta": {
      "origin": "CLI"
    },
    "stats": {
      "durationMillis": 14774,
      "runTimeSecs": 14.774,
      "computeUnits": 0.016415555555555555,
      "imageSizeBytes": 358332928
    },
    "options": {
      "useCache": true,
      "betaPackages": false,
      "memoryMbytes": 4096,
      "diskMbytes": 8192
    },
    "createdByOrganizationMemberUserId": "QYo53EZkJk0prePWY",
    "exitCode": 0,
    "inputSchema": "{\n  \"title\": \"GitHub Repository Metadata & README Extractor input\",\n  \"description\": \"Choose a discovery mode, optionally narrow the search with filters, and pick which repository details to enrich.\",\n  \"type\": \"object\",\n  \"schemaVersion\": 1,\n  \"properties\": {\n    \"mode\": {\n      \"title\": \"Mode\",\n      \"type\": \"string\",\n      \"description\": \"How to find repositories. 'search' runs a GitHub search query, 'direct' fetches an explicit list, 'owner' lists a user or organisation's repositories, and 'topic' lists repositories tagged with a topic.\",\n      \"editor\": \"select\",\n      \"enum\": [\n        \"search\",\n        \"direct\",\n        \"owner\",\n        \"topic\"\n      ],\n      \"enumTitles\": [\n        \"Search repositories\",\n        \"Direct URLs or owner/repo\",\n        \"All repositories of an owner\",\n        \"Repositories by topic\"\n      ],\n      \"default\": \"search\",\n      \"prefill\": \"search\",\n      \"sectionCaption\": \"What to fetch\",\n      \"sectionDescription\": \"Pick a discovery path and the repositories it should cover.\"\n    },\n    \"searchQuery\": {\n      \"title\": \"Search query\",\n      \"type\": \"string\",\n      \"description\": \"GitHub search expression (mode=search). Supports qualifiers such as 'stars:>10000', 'language:python', 'topic:llm', 'user:apify', 'pushed:>2025-01-01', and 'in:name,description'. In owner/topic mode it is an optional keyword filter added to the owner or topic.\",\n      \"editor\": \"textfield\",\n      \"default\": \"\",\n      \"prefill\": \"stars:>10000 language:python\",\n      \"example\": \"language:rust stars:>5000 pushed:>2025-01-01\"\n    },\n    \"repositoryUrls\": {\n      \"title\": \"Repository URLs or slugs\",\n      \"type\": \"array\",\n      \"description\": \"Repositories to fetch (mode=direct). Accepts https://github.com/owner/repo, a trailing slash, .git, the git@github.com:owner/repo.git SSH form, or a plain owner/repo slug. Duplicates are removed.\",\n      \"editor\": \"stringList\",\n      \"default\": [],\n      \"prefill\": [\n        \"https://github.com/apify/crawlee\"\n      ]\n    },\n    \"owner\": {\n      \"title\": \"Owner\",\n      \"type\": \"string\",\n      \"description\": \"GitHub user or organisation whose repositories should be listed (mode=owner). Accepts 'apify' or 'https://github.com/apify'.\",\n      \"editor\": \"textfield\",\n      \"default\": \"\"\n    },\n    \"topic\": {\n      \"title\": \"Topic\",\n      \"type\": \"string\",\n      \"description\": \"Topic tag to browse (mode=topic), e.g. 'llm', 'machine-learning', or 'web-scraping'. A leading 'topic:' is accepted and stripped.\",\n      \"editor\": \"textfield\",\n      \"default\": \"\"\n    },\n    \"sortBy\": {\n      \"title\": \"Sort by\",\n      \"type\": \"string\",\n      \"description\": \"Sort key for search, owner, and topic results.\",\n      \"editor\": \"select\",\n      \"enum\": [\n        \"stars\",\n        \"forks\",\n        \"updated\",\n        \"help-wanted-issues\"\n      ],\n      \"enumTitles\": [\n        \"Stars\",\n        \"Forks\",\n        \"Recently updated\",\n        \"Help-wanted issues\"\n      ],\n      \"default\": \"stars\",\n      \"sectionCaption\": \"Discovery filters\",\n      \"sectionDescription\": \"Optional narrowing applied to search, owner, and topic modes.\"\n    },\n    \"sortOrder\": {\n      \"title\": \"Sort direction\",\n      \"type\": \"string\",\n      \"description\": \"Ascending or descending order for the selected sort key.\",\n      \"editor\": \"select\",\n      \"enum\": [\n        \"desc\",\n        \"asc\"\n      ],\n      \"enumTitles\": [\n        \"Descending (highest / newest first)\",\n        \"Ascending (lowest / oldest first)\"\n      ],\n      \"default\": \"desc\"\n    },\n    \"language\": {\n      \"title\": \"Language\",\n      \"type\": \"string\",\n      \"description\": \"Only repositories whose primary language matches. Pick a common language here, or type any other language in 'Custom language'.\",\n      \"editor\": \"select\",\n      \"enum\": [\n        \"\",\n        \"python\",\n        \"javascript\",\n        \"typescript\",\n        \"java\",\n        \"go\",\n        \"rust\",\n        \"c\",\n        \"c++\",\n        \"c#\",\n        \"ruby\",\n        \"php\",\n        \"swift\",\n        \"kotlin\",\n        \"scala\",\n        \"r\",\n        \"julia\",\n        \"haskell\",\n        \"elixir\",\n        \"erlang\",\n        \"clojure\",\n        \"dart\",\n        \"lua\",\n        \"perl\",\n        \"shell\",\n        \"powershell\",\n        \"html\",\n        \"css\",\n        \"scss\",\n        \"vue\",\n        \"svelte\",\n        \"jupyter notebook\",\n        \"objective-c\",\n        \"matlab\",\n        \"assembly\",\n        \"solidity\",\n        \"zig\",\n        \"nim\",\n        \"crystal\",\n        \"ocaml\",\n        \"f#\",\n        \"elm\",\n        \"groovy\",\n        \"visual basic .net\",\n        \"fortran\",\n        \"cobol\",\n        \"delphi\",\n        \"vhdl\",\n        \"verilog\",\n        \"coffeescript\",\n        \"hcl\",\n        \"nix\"\n      ],\n      \"enumTitles\": [\n        \"(any language)\",\n        \"Python\",\n        \"JavaScript\",\n        \"TypeScript\",\n        \"Java\",\n        \"Go\",\n        \"Rust\",\n        \"C\",\n        \"C++\",\n        \"C#\",\n        \"Ruby\",\n        \"PHP\",\n        \"Swift\",\n        \"Kotlin\",\n        \"Scala\",\n        \"R\",\n        \"Julia\",\n        \"Haskell\",\n        \"Elixir\",\n        \"Erlang\",\n        \"Clojure\",\n        \"Dart\",\n        \"Lua\",\n        \"Perl\",\n        \"Shell\",\n        \"PowerShell\",\n        \"HTML\",\n        \"CSS\",\n        \"SCSS\",\n        \"Vue\",\n        \"Svelte\",\n        \"Jupyter Notebook\",\n        \"Objective-C\",\n        \"MATLAB\",\n        \"Assembly\",\n        \"Solidity\",\n        \"Zig\",\n        \"Nim\",\n        \"Crystal\",\n        \"OCaml\",\n        \"F#\",\n        \"Elm\",\n        \"Groovy\",\n        \"Visual Basic .NET\",\n        \"Fortran\",\n        \"COBOL\",\n        \"Delphi\",\n        \"VHDL\",\n        \"Verilog\",\n        \"CoffeeScript\",\n        \"HCL\",\n        \"Nix\"\n      ],\n      \"default\": \"\"\n    },\n    \"languageCustom\": {\n      \"title\": \"Custom language\",\n      \"type\": \"string\",\n      \"description\": \"Any GitHub language name not listed above (e.g. 'Hare', 'Gleam'). Overrides the Language dropdown when non-empty.\",\n      \"editor\": \"textfield\",\n      \"default\": \"\"\n    },\n    \"license\": {\n      \"title\": \"License\",\n      \"type\": \"string\",\n      \"description\": \"Only repositories released under this license.\",\n      \"editor\": \"select\",\n      \"enum\": [\n        \"\",\n        \"mit\",\n        \"apache-2.0\",\n        \"gpl-3.0\",\n        \"gpl-2.0\",\n        \"lgpl-3.0\",\n        \"lgpl-2.1\",\n        \"agpl-3.0\",\n        \"mpl-2.0\",\n        \"bsd-2-clause\",\n        \"bsd-3-clause\",\n        \"unlicense\",\n        \"cc0-1.0\",\n        \"cc-by-4.0\",\n        \"cc-by-sa-4.0\",\n        \"epl-2.0\",\n        \"isc\",\n        \"artistic-2.0\",\n        \"wtfpl\",\n        \"zlib\",\n        \"bsl-1.0\",\n        \"postgresql\",\n        \"ofl-1.1\",\n        \"other\"\n      ],\n      \"enumTitles\": [\n        \"(any license)\",\n        \"MIT\",\n        \"Apache 2.0\",\n        \"GPL 3.0\",\n        \"GPL 2.0\",\n        \"LGPL 3.0\",\n        \"LGPL 2.1\",\n        \"AGPL 3.0\",\n        \"MPL 2.0\",\n        \"BSD 2-Clause\",\n        \"BSD 3-Clause\",\n        \"Unlicense\",\n        \"CC0 1.0\",\n        \"CC BY 4.0\",\n        \"CC BY-SA 4.0\",\n        \"EPL 2.0\",\n        \"ISC\",\n        \"Artistic 2.0\",\n        \"WTFPL\",\n        \"zlib\",\n        \"BSL 1.0\",\n        \"PostgreSQL\",\n        \"OFL 1.1\",\n        \"Other\"\n      ],\n      \"default\": \"\"\n    },\n    \"searchIn\": {\n      \"title\": \"Search text in\",\n      \"type\": \"string\",\n      \"description\": \"Where the free-text part of searchQuery must match (mode=search). Applies only when searchQuery contains free text.\",\n      \"editor\": \"select\",\n      \"enum\": [\n        \"\",\n        \"name,description\",\n        \"name\",\n        \"description\",\n        \"readme\",\n        \"topics\"\n      ],\n      \"enumTitles\": [\n        \"(name and description)\",\n        \"Name and description\",\n        \"Name only\",\n        \"Description only\",\n        \"README text\",\n        \"Topic names\"\n      ],\n      \"default\": \"\"\n    },\n    \"minStars\": {\n      \"title\": \"Minimum stars\",\n      \"type\": \"integer\",\n      \"description\": \"Only repositories with at least this many stars. 0 means no star filter.\",\n      \"minimum\": 0,\n      \"maximum\": 1000000000,\n      \"default\": 0\n    },\n    \"minForks\": {\n      \"title\": \"Minimum forks\",\n      \"type\": \"integer\",\n      \"description\": \"Only repositories with at least this many forks. 0 means no fork filter.\",\n      \"minimum\": 0,\n      \"maximum\": 100000000,\n      \"default\": 0\n    },\n    \"createdAfter\": {\n      \"title\": \"Created after\",\n      \"type\": \"string\",\n      \"description\": \"Only repositories created on or after this date (YYYY-MM-DD).\",\n      \"editor\": \"textfield\",\n      \"default\": \"\",\n      \"example\": \"2024-01-01\"\n    },\n    \"pushedAfter\": {\n      \"title\": \"Pushed after\",\n      \"type\": \"string\",\n      \"description\": \"Only repositories with a push on or after this date (YYYY-MM-DD). Useful for finding maintained projects.\",\n      \"editor\": \"textfield\",\n      \"default\": \"\",\n      \"example\": \"2025-01-01\"\n    },\n    \"includeForks\": {\n      \"title\": \"Include forks\",\n      \"type\": \"boolean\",\n      \"description\": \"Include fork repositories in search, owner, and topic results. Direct mode always returns the repositories you list.\",\n      \"default\": false,\n      \"prefill\": false\n    },\n    \"includeArchived\": {\n      \"title\": \"Include archived repositories\",\n      \"type\": \"boolean\",\n      \"description\": \"Keep archived repositories in the results. Turn this off to find actively maintained projects only.\",\n      \"default\": true,\n      \"prefill\": true\n    },\n    \"maxResults\": {\n      \"title\": \"Maximum repositories\",\n      \"type\": \"integer\",\n      \"description\": \"Hard cap on repositories returned. GitHub's search API itself is capped at 1,000 results.\",\n      \"minimum\": 1,\n      \"maximum\": 1000,\n      \"default\": 30,\n      \"prefill\": 30,\n      \"sectionCaption\": \"Output controls\",\n      \"sectionDescription\": \"Choose how much data to enrich and how many repositories to return.\"\n    },\n    \"includeReadme\": {\n      \"title\": \"Include README\",\n      \"type\": \"boolean\",\n      \"description\": \"Fetch and include the decoded README text (capped at 500 KB).\",\n      \"default\": true,\n      \"prefill\": true\n    },\n    \"includeTopics\": {\n      \"title\": \"Include topics\",\n      \"type\": \"boolean\",\n      \"description\": \"Include the repository's topic tags.\",\n      \"default\": true,\n      \"prefill\": true\n    },\n    \"includeLanguages\": {\n      \"title\": \"Include language breakdown\",\n      \"type\": \"boolean\",\n      \"description\": \"Include the byte count per programming language (one API request per repository).\",\n      \"default\": true,\n      \"prefill\": true\n    },\n    \"includeRepoDetails\": {\n      \"title\": \"Include full repository details\",\n      \"type\": \"boolean\",\n      \"description\": \"Fetch the repository detail endpoint in search, owner, and topic modes to add the real watcher count, network count, and organisation/parent fields (one extra API request per repository). Direct mode always fetches these.\",\n      \"default\": false,\n      \"prefill\": false\n    },\n    \"includeReleases\": {\n      \"title\": \"Include releases\",\n      \"type\": \"boolean\",\n      \"description\": \"Fetch the newest releases, including tag, dates, prerelease flag, and asset count (one request per repository).\",\n      \"default\": false,\n      \"prefill\": false\n    },\n    \"releasesLimit\": {\n      \"title\": \"Releases per repository\",\n      \"type\": \"integer\",\n      \"description\": \"How many releases to keep when 'Include releases' is on.\",\n      \"minimum\": 1,\n      \"maximum\": 100,\n      \"default\": 10\n    },\n    \"includeContributors\": {\n      \"title\": \"Include contributors\",\n      \"type\": \"boolean\",\n      \"description\": \"Fetch the ranked contributor list with contribution counts (one request per repository; GitHub caps this endpoint at 500 contributors).\",\n      \"default\": false,\n      \"prefill\": false\n    },\n    \"contributorsLimit\": {\n      \"title\": \"Contributors per repository\",\n      \"type\": \"integer\",\n      \"description\": \"How many contributors to keep when 'Include contributors' is on.\",\n      \"minimum\": 1,\n      \"maximum\": 500,\n      \"default\": 30\n    },\n    \"includeActivity\": {\n      \"title\": \"Include commit activity\",\n      \"type\": \"boolean\",\n      \"description\": \"Fetch 52 weeks of commit activity and the latest commit (up to two requests per repository; GitHub may need a moment to compute the statistics).\",\n      \"default\": false,\n      \"prefill\": false\n    },\n    \"githubToken\": {\n      \"title\": \"GitHub personal access token (optional)\",\n      \"type\": \"string\",\n      \"description\": \"Optional personal access token. It only raises the request limit from 60 to 5,000 requests per hour and is never required. A classic token with no scopes is enough for public data.\",\n      \"editor\": \"textfield\",\n      \"isSecret\": true,\n      \"sectionCaption\": \"Advanced\",\n      \"sectionDescription\": \"Optional settings for higher limits and private repositories.\"\n    }\n  },\n  \"required\": []\n}",
    "readme": "# GitHub Repository Metadata & README Extractor\n\nPull one clean, flat row per public GitHub repository: identity and owner, stars, forks, the real watcher count, topics, license, language byte counts, README text, and optional releases, contributors, and 52 weeks of commit activity. Find repositories with a GitHub search expression, your own URL list, a user/organisation listing, or a topic. No token, cookie, or proxy setup is required.\n\n## What this actor does\n\n- **Four discovery modes** — search by query, fetch an explicit list of URLs or `owner/repo` slugs, list every repository of a user or organisation, or browse a topic.\n- **Search qualifiers become form fields** — language, license, minimum stars/forks, created/pushed dates, `in:` scope, fork/archive toggles, sort key, and sort direction. You can also paste any native GitHub qualifier into the query itself.\n- **Complete repository metadata** — every reliable field from GitHub's repository payload, including visibility, clone/git/ssh URLs, feature flags, topics count, license identifiers, and the real subscriber (watcher) count.\n- **README text** — fetched from GitHub's raw content host first, then the API when the file uses another name, decoded as UTF-8, and capped at 500 KB.\n- **Optional enrichment** — releases, ranked contributors, 52-week commit activity, and the latest commit, each independently switchable.\n- **Rate-limit aware** — reads GitHub's headers, reports the remaining budget in the run status, and keeps the base records if the anonymous core budget runs out mid-run.\n- **HTML fallback** — in direct mode, if the core API budget is exhausted, repository counters are recovered from the public repository page so the run still returns real rows.\n\n## Output per repository\n\n- `sourceUrl`, `htmlUrl`, `recordType`, `scrapedAt` — canonical page URL and provenance\n- `id`, `nodeId`, `name`, `fullName` — identity\n- `owner` — `login`, `id`, `avatarUrl`, `htmlUrl`, `type`\n- `description`, `homepage`, `primaryLanguage`, `visibility`, `defaultBranch`\n- `stars`, `forks`, `watchersCount`, `watchers` (real watcher count, when known), `subscribersCount`, `networkCount`, `openIssues`, `size`\n- `topics[]`, `topicsCount`\n- `license` — `spdxId`, `name`, `url`, `key`\n- `createdAt`, `updatedAt`, `pushedAt`\n- `isFork`, `isArchived`, `isDisabled`, `isTemplate`, `isPrivate`\n- `hasIssues`, `hasProjects`, `hasDownloads`, `hasWiki`, `hasPages`, `hasDiscussions`, `allowForking`, `webCommitSignoffRequired`\n- `cloneUrl`, `sshUrl`, `gitUrl`, `svnUrl`, `mirrorUrl`\n- `readme` — `name`, `path`, `content`, `size`, `htmlUrl`, `downloadUrl`\n- `languages{}` — byte count per language, plus `languageCount`\n- `latestRelease`, `releases[]` — tag, name, draft/prerelease flags, dates, asset count\n- `contributors[]` — login, id, type, contributions, profile URL; plus `contributorCount` and `hasMoreContributors`\n- `commitActivity[]`, `commitActivityTotal`, `activeWeeks`, `latestCommit` — 52-week history and the newest default-branch commit\n- `searchScore` — GitHub's relevance score, search mode only\n\nEmpty fields are omitted at every depth; a field a repository genuinely lacks is never returned as `null`. A repository that cannot be fetched produces an error row with `type: \"github_repo_intelligence_error\"`, a `reason` (`not_found`, `invalid_url`, `fetch_failed`, `rate_limit`), a `message`, and the identifier that failed, so one bad URL does not stop the batch.\n\n## Input\n\n| Field | Type | Default | Description |\n|---|---|---|---|\n| `mode` | string | `\"search\"` | `search`, `direct`, `owner`, or `topic` |\n| `searchQuery` | string | `\"\"` | GitHub search expression (mode=search); optional keyword filter in owner/topic mode |\n| `repositoryUrls` | array | `[]` | Repository URLs or `owner/repo` slugs (mode=direct) |\n| `owner` | string | `\"\"` | User or organisation to list (mode=owner) |\n| `topic` | string | `\"\"` | Topic tag to browse (mode=topic) |\n| `sortBy` | string | `\"stars\"` | `stars`, `forks`, `updated`, or `help-wanted-issues` |\n| `sortOrder` | string | `\"desc\"` | `desc` or `asc` |\n| `language` | string | `\"\"` | Common language dropdown; empty means any |\n| `languageCustom` | string | `\"\"` | Any other GitHub language name; overrides the dropdown |\n| `license` | string | `\"\"` | License dropdown; empty means any |\n| `searchIn` | string | `\"\"` | Where the free text matches: name/description/readme/topics |\n| `minStars` | integer | `0` | Minimum star count; 0 means no filter |\n| `minForks` | integer | `0` | Minimum fork count; 0 means no filter |\n| `createdAfter` | string | `\"\"` | Only repositories created on/after `YYYY-MM-DD` |\n| `pushedAfter` | string | `\"\"` | Only repositories pushed on/after `YYYY-MM-DD` |\n| `includeForks` | boolean | `false` | Include forks in search/owner/topic results |\n| `includeArchived` | boolean | `true` | Keep archived repositories in the results |\n| `maxResults` | integer | `30` | Hard cap on repositories returned (1–1,000) |\n| `includeReadme` | boolean | `true` | Include the decoded README |\n| `includeTopics` | boolean | `true` | Include topic tags |\n| `includeLanguages` | boolean | `true` | Include language byte counts |\n| `includeRepoDetails` | boolean | `false` | Add real watcher/network counts in search, owner, and topic modes |\n| `includeReleases` | boolean | `false` | Include the newest releases |\n| `releasesLimit` | integer | `10` | Releases kept per repository (1–100) |\n| `includeContributors` | boolean | `false` | Include the ranked contributor list |\n| `contributorsLimit` | integer | `30` | Contributors kept per repository (1–500) |\n| `includeActivity` | boolean | `false` | Include 52-week commit activity and the latest commit |\n| `githubToken` | string | `\"\"` | Optional personal access token; only raises limits |\n\nThe daily test prefill is `mode=search`, `searchQuery=\"stars:>10000 language:python\"`, `repositoryUrls=[\"https://github.com/apify/crawlee\"]`, `maxResults=30`; it uses no token and returns 30 rows.\n\n### Example: search for maintained Rust projects\n\n```json\n{\n  \"mode\": \"search\",\n  \"searchQuery\": \"language:rust stars:>5000\",\n  \"pushedAfter\": \"2025-01-01\",\n  \"sortBy\": \"stars\",\n  \"maxResults\": 100\n}\n```\n\n### Example: fetch a known list\n\n```json\n{\n  \"mode\": \"direct\",\n  \"repositoryUrls\": [\n    \"https://github.com/apify/crawlee\",\n    \"pallets/flask\",\n    \"git@github.com:psf/requests.git\"\n  ],\n  \"includeReleases\": true,\n  \"includeContributors\": true,\n  \"includeActivity\": true\n}\n```\n\n### Example: every repository of an organisation\n\n```json\n{\n  \"mode\": \"owner\",\n  \"owner\": \"apify\",\n  \"language\": \"python\",\n  \"minStars\": 100,\n  \"sortBy\": \"updated\"\n}\n```\n\n### Example: browse a topic\n\n```json\n{\n  \"mode\": \"topic\",\n  \"topic\": \"llm\",\n  \"includeForks\": false,\n  \"maxResults\": 200\n}\n```\n\n## Use cases\n\n- **Dependency due diligence** — check license, archived status, last push, latest release, contributor depth, and commit activity before adopting a library.\n- **Ecosystem mapping** — enumerate `topic:llm`, `language:rust`, or an organisation's repository portfolio.\n- **Leaderboards and dashboards** — rank a repository set by stars, forks, or recent activity with stable numeric fields.\n- **LLM and RAG pipelines** — pair structured metadata with the full README text for retrieval or code analysis.\n- **Release and community tracking** — follow release cadence and contributor counts over time.\n\n## Rate limits and behaviour\n\nGitHub allows about **60 core requests per hour** and **10 search requests per minute** without a token. This actor:\n\n- tracks `X-RateLimit-Remaining`, `X-RateLimit-Limit`, and the reset time on every response and reports them in the run status;\n- fetches READMEs from GitHub's raw content host, which does not consume the core budget;\n- keeps emitting base records and skips only optional enrichment when the core budget is exhausted;\n- retries `429` and `5xx` responses with backoff, handles secondary rate limits, and retries a `202` statistics response once;\n- treats a rejected optional token as a soft failure and continues anonymously.\n\nA personal access token raises the limits to 5,000 core requests per hour and 30 search requests per minute. It is optional and never used by the daily test.\n\n## Limitations\n\n- **Search is capped at 1,000 results per query** by GitHub. Split a large universe into `stars:` ranges (for example `stars:10000..50000`, then `stars:5000..9999`) and run once per range.\n- **The contributor endpoint is capped at 500 entries** by GitHub. `hasMoreContributors` is set when GitHub's `Link` header shows more pages.\n- **Commit activity can take a moment to compute.** If GitHub still returns `202` after one retry, the field is omitted for that repository instead of invented.\n- **Private repositories** require a token with access to them. The actor never asks for cookies or a login.\n- **Sorting by \"Recently updated\" follows GitHub's own ordering, which is approximate.** Re-sort on the `updatedAt` field if you need a strict order. Rows are pushed as enrichment finishes, so use `index` (the search rank) to restore the source order.\n- **`license.url` points at GitHub's license API** (`api.github.com/licenses/<id>`). Like any API URL it returns 403 while the anonymous hourly quota is exhausted; the dataset itself is unaffected.\n- **No issues, pull requests, discussions, or trending data.** This actor focuses on repository metadata and README content.\n\n## FAQ\n\n**Do I need a GitHub token?** No. Small runs work anonymously. Supply a token only for larger batches or private repositories.\n\n**Why is `watchers` missing on some rows?** GitHub aliases `watchers_count` to stars in search payloads, so that value is published as `watchersCount` (not as a misleading watcher count). `watchers` and `subscribersCount` are the real watcher count, filled in direct mode and when `includeRepoDetails` is on.\n\n**Do I need a proxy?** No. GitHub limits requests by IP and token, not by blocking this actor.\n\n**Can I use my own search qualifiers?** Yes. The query field accepts the full GitHub repository-search grammar; the form filters are appended to it.\n\n**What happens if a repository is missing?** The actor emits an error row for that repository and continues with the rest.\n\n**Is this affiliated with GitHub?** No. It reads GitHub's public REST API and public repository pages.\n\n## Data source\n\nGitHub's public REST API (`api.github.com`), its raw content host (`raw.githubusercontent.com`), and public repository pages on `github.com`. No authentication is required for public data.\n",
    "actorDefinition": {
      "actorSpecification": 1,
      "name": "github-repository-metadata-and-readme-extractor",
      "title": "GitHub Repository Metadata & README Extractor",
      "description": "Fetch stars, forks, topics, license, language breakdown and README text for GitHub repositories, by search query or a direct list of repository URLs. An optional personal token raises the request limit.",
      "version": "1.1",
      "buildTag": "latest",
      "meta": {
        "templateId": "python-start"
      },
      "input": {
        "title": "GitHub Repository Metadata & README Extractor input",
        "description": "Choose a discovery mode, optionally narrow the search with filters, and pick which repository details to enrich.",
        "type": "object",
        "schemaVersion": 1,
        "properties": {
          "mode": {
            "title": "Mode",
            "type": "string",
            "description": "How to find repositories. 'search' runs a GitHub search query, 'direct' fetches an explicit list, 'owner' lists a user or organisation's repositories, and 'topic' lists repositories tagged with a topic.",
            "editor": "select",
            "enum": [
              "search",
              "direct",
              "owner",
              "topic"
            ],
            "enumTitles": [
              "Search repositories",
              "Direct URLs or owner/repo",
              "All repositories of an owner",
              "Repositories by topic"
            ],
            "default": "search",
            "prefill": "search",
            "sectionCaption": "What to fetch",
            "sectionDescription": "Pick a discovery path and the repositories it should cover."
          },
          "searchQuery": {
            "title": "Search query",
            "type": "string",
            "description": "GitHub search expression (mode=search). Supports qualifiers such as 'stars:>10000', 'language:python', 'topic:llm', 'user:apify', 'pushed:>2025-01-01', and 'in:name,description'. In owner/topic mode it is an optional keyword filter added to the owner or topic.",
            "editor": "textfield",
            "default": "",
            "prefill": "stars:>10000 language:python",
            "example": "language:rust stars:>5000 pushed:>2025-01-01"
          },
          "repositoryUrls": {
            "title": "Repository URLs or slugs",
            "type": "array",
            "description": "Repositories to fetch (mode=direct). Accepts https://github.com/owner/repo, a trailing slash, .git, the git@github.com:owner/repo.git SSH form, or a plain owner/repo slug. Duplicates are removed.",
            "editor": "stringList",
            "default": [],
            "prefill": [
              "https://github.com/apify/crawlee"
            ]
          },
          "owner": {
            "title": "Owner",
            "type": "string",
            "description": "GitHub user or organisation whose repositories should be listed (mode=owner). Accepts 'apify' or 'https://github.com/apify'.",
            "editor": "textfield",
            "default": ""
          },
          "topic": {
            "title": "Topic",
            "type": "string",
            "description": "Topic tag to browse (mode=topic), e.g. 'llm', 'machine-learning', or 'web-scraping'. A leading 'topic:' is accepted and stripped.",
            "editor": "textfield",
            "default": ""
          },
          "sortBy": {
            "title": "Sort by",
            "type": "string",
            "description": "Sort key for search, owner, and topic results.",
            "editor": "select",
            "enum": [
              "stars",
              "forks",
              "updated",
              "help-wanted-issues"
            ],
            "enumTitles": [
              "Stars",
              "Forks",
              "Recently updated",
              "Help-wanted issues"
            ],
            "default": "stars",
            "sectionCaption": "Discovery filters",
            "sectionDescription": "Optional narrowing applied to search, owner, and topic modes."
          },
          "sortOrder": {
            "title": "Sort direction",
            "type": "string",
            "description": "Ascending or descending order for the selected sort key.",
            "editor": "select",
            "enum": [
              "desc",
              "asc"
            ],
            "enumTitles": [
              "Descending (highest / newest first)",
              "Ascending (lowest / oldest first)"
            ],
            "default": "desc"
          },
          "language": {
            "title": "Language",
            "type": "string",
            "description": "Only repositories whose primary language matches. Pick a common language here, or type any other language in 'Custom language'.",
            "editor": "select",
            "enum": [
              "",
              "python",
              "javascript",
              "typescript",
              "java",
              "go",
              "rust",
              "c",
              "c++",
              "c#",
              "ruby",
              "php",
              "swift",
              "kotlin",
              "scala",
              "r",
              "julia",
              "haskell",
              "elixir",
              "erlang",
              "clojure",
              "dart",
              "lua",
              "perl",
              "shell",
              "powershell",
              "html",
              "css",
              "scss",
              "vue",
              "svelte",
              "jupyter notebook",
              "objective-c",
              "matlab",
              "assembly",
              "solidity",
              "zig",
              "nim",
              "crystal",
              "ocaml",
              "f#",
              "elm",
              "groovy",
              "visual basic .net",
              "fortran",
              "cobol",
              "delphi",
              "vhdl",
              "verilog",
              "coffeescript",
              "hcl",
              "nix"
            ],
            "enumTitles": [
              "(any language)",
              "Python",
              "JavaScript",
              "TypeScript",
              "Java",
              "Go",
              "Rust",
              "C",
              "C++",
              "C#",
              "Ruby",
              "PHP",
              "Swift",
              "Kotlin",
              "Scala",
              "R",
              "Julia",
              "Haskell",
              "Elixir",
              "Erlang",
              "Clojure",
              "Dart",
              "Lua",
              "Perl",
              "Shell",
              "PowerShell",
              "HTML",
              "CSS",
              "SCSS",
              "Vue",
              "Svelte",
              "Jupyter Notebook",
              "Objective-C",
              "MATLAB",
              "Assembly",
              "Solidity",
              "Zig",
              "Nim",
              "Crystal",
              "OCaml",
              "F#",
              "Elm",
              "Groovy",
              "Visual Basic .NET",
              "Fortran",
              "COBOL",
              "Delphi",
              "VHDL",
              "Verilog",
              "CoffeeScript",
              "HCL",
              "Nix"
            ],
            "default": ""
          },
          "languageCustom": {
            "title": "Custom language",
            "type": "string",
            "description": "Any GitHub language name not listed above (e.g. 'Hare', 'Gleam'). Overrides the Language dropdown when non-empty.",
            "editor": "textfield",
            "default": ""
          },
          "license": {
            "title": "License",
            "type": "string",
            "description": "Only repositories released under this license.",
            "editor": "select",
            "enum": [
              "",
              "mit",
              "apache-2.0",
              "gpl-3.0",
              "gpl-2.0",
              "lgpl-3.0",
              "lgpl-2.1",
              "agpl-3.0",
              "mpl-2.0",
              "bsd-2-clause",
              "bsd-3-clause",
              "unlicense",
              "cc0-1.0",
              "cc-by-4.0",
              "cc-by-sa-4.0",
              "epl-2.0",
              "isc",
              "artistic-2.0",
              "wtfpl",
              "zlib",
              "bsl-1.0",
              "postgresql",
              "ofl-1.1",
              "other"
            ],
            "enumTitles": [
              "(any license)",
              "MIT",
              "Apache 2.0",
              "GPL 3.0",
              "GPL 2.0",
              "LGPL 3.0",
              "LGPL 2.1",
              "AGPL 3.0",
              "MPL 2.0",
              "BSD 2-Clause",
              "BSD 3-Clause",
              "Unlicense",
              "CC0 1.0",
              "CC BY 4.0",
              "CC BY-SA 4.0",
              "EPL 2.0",
              "ISC",
              "Artistic 2.0",
              "WTFPL",
              "zlib",
              "BSL 1.0",
              "PostgreSQL",
              "OFL 1.1",
              "Other"
            ],
            "default": ""
          },
          "searchIn": {
            "title": "Search text in",
            "type": "string",
            "description": "Where the free-text part of searchQuery must match (mode=search). Applies only when searchQuery contains free text.",
            "editor": "select",
            "enum": [
              "",
              "name,description",
              "name",
              "description",
              "readme",
              "topics"
            ],
            "enumTitles": [
              "(name and description)",
              "Name and description",
              "Name only",
              "Description only",
              "README text",
              "Topic names"
            ],
            "default": ""
          },
          "minStars": {
            "title": "Minimum stars",
            "type": "integer",
            "description": "Only repositories with at least this many stars. 0 means no star filter.",
            "minimum": 0,
            "maximum": 1000000000,
            "default": 0
          },
          "minForks": {
            "title": "Minimum forks",
            "type": "integer",
            "description": "Only repositories with at least this many forks. 0 means no fork filter.",
            "minimum": 0,
            "maximum": 100000000,
            "default": 0
          },
          "createdAfter": {
            "title": "Created after",
            "type": "string",
            "description": "Only repositories created on or after this date (YYYY-MM-DD).",
            "editor": "textfield",
            "default": "",
            "example": "2024-01-01"
          },
          "pushedAfter": {
            "title": "Pushed after",
            "type": "string",
            "description": "Only repositories with a push on or after this date (YYYY-MM-DD). Useful for finding maintained projects.",
            "editor": "textfield",
            "default": "",
            "example": "2025-01-01"
          },
          "includeForks": {
            "title": "Include forks",
            "type": "boolean",
            "description": "Include fork repositories in search, owner, and topic results. Direct mode always returns the repositories you list.",
            "default": false,
            "prefill": false
          },
          "includeArchived": {
            "title": "Include archived repositories",
            "type": "boolean",
            "description": "Keep archived repositories in the results. Turn this off to find actively maintained projects only.",
            "default": true,
            "prefill": true
          },
          "maxResults": {
            "title": "Maximum repositories",
            "type": "integer",
            "description": "Hard cap on repositories returned. GitHub's search API itself is capped at 1,000 results.",
            "minimum": 1,
            "maximum": 1000,
            "default": 30,
            "prefill": 30,
            "sectionCaption": "Output controls",
            "sectionDescription": "Choose how much data to enrich and how many repositories to return."
          },
          "includeReadme": {
            "title": "Include README",
            "type": "boolean",
            "description": "Fetch and include the decoded README text (capped at 500 KB).",
            "default": true,
            "prefill": true
          },
          "includeTopics": {
            "title": "Include topics",
            "type": "boolean",
            "description": "Include the repository's topic tags.",
            "default": true,
            "prefill": true
          },
          "includeLanguages": {
            "title": "Include language breakdown",
            "type": "boolean",
            "description": "Include the byte count per programming language (one API request per repository).",
            "default": true,
            "prefill": true
          },
          "includeRepoDetails": {
            "title": "Include full repository details",
            "type": "boolean",
            "description": "Fetch the repository detail endpoint in search, owner, and topic modes to add the real watcher count, network count, and organisation/parent fields (one extra API request per repository). Direct mode always fetches these.",
            "default": false,
            "prefill": false
          },
          "includeReleases": {
            "title": "Include releases",
            "type": "boolean",
            "description": "Fetch the newest releases, including tag, dates, prerelease flag, and asset count (one request per repository).",
            "default": false,
            "prefill": false
          },
          "releasesLimit": {
            "title": "Releases per repository",
            "type": "integer",
            "description": "How many releases to keep when 'Include releases' is on.",
            "minimum": 1,
            "maximum": 100,
            "default": 10
          },
          "includeContributors": {
            "title": "Include contributors",
            "type": "boolean",
            "description": "Fetch the ranked contributor list with contribution counts (one request per repository; GitHub caps this endpoint at 500 contributors).",
            "default": false,
            "prefill": false
          },
          "contributorsLimit": {
            "title": "Contributors per repository",
            "type": "integer",
            "description": "How many contributors to keep when 'Include contributors' is on.",
            "minimum": 1,
            "maximum": 500,
            "default": 30
          },
          "includeActivity": {
            "title": "Include commit activity",
            "type": "boolean",
            "description": "Fetch 52 weeks of commit activity and the latest commit (up to two requests per repository; GitHub may need a moment to compute the statistics).",
            "default": false,
            "prefill": false
          },
          "githubToken": {
            "title": "GitHub personal access token (optional)",
            "type": "string",
            "description": "Optional personal access token. It only raises the request limit from 60 to 5,000 requests per hour and is never required. A classic token with no scopes is enough for public data.",
            "editor": "textfield",
            "isSecret": true,
            "sectionCaption": "Advanced",
            "sectionDescription": "Optional settings for higher limits and private repositories."
          }
        },
        "required": []
      },
      "output": {
        "actorOutputSchemaVersion": 1,
        "title": "GitHub Repository Metadata & README Extractor Output",
        "description": "One record per GitHub repository with metadata, real watcher counts, topics, license, language bytes, README text, and optional releases, contributors, and 52-week commit activity.",
        "properties": {
          "repositories": {
            "type": "string",
            "title": "GitHub repositories",
            "description": "Dataset containing all scraped GitHub repository records (plus per-repository error rows for invalid or missing repositories).",
            "template": "{{links.apiDefaultDatasetUrl}}/items"
          }
        }
      },
      "storages": {
        "dataset": {
          "actorSpecification": 1,
          "fields": {},
          "views": {
            "overview": {
              "title": "Overview",
              "transformation": {
                "fields": [
                  "fullName",
                  "htmlUrl",
                  "description",
                  "primaryLanguage",
                  "stars",
                  "forks",
                  "watchers",
                  "subscribersCount",
                  "openIssues",
                  "visibility",
                  "topics",
                  "license",
                  "createdAt",
                  "updatedAt",
                  "pushedAt",
                  "latestRelease",
                  "contributorCount",
                  "commitActivityTotal",
                  "scrapedAt"
                ]
              },
              "display": {
                "component": "table",
                "properties": {
                  "fullName": {
                    "label": "Repository"
                  },
                  "htmlUrl": {
                    "label": "URL",
                    "format": "link"
                  },
                  "description": {
                    "label": "Description"
                  },
                  "primaryLanguage": {
                    "label": "Language"
                  },
                  "stars": {
                    "label": "Stars",
                    "format": "number"
                  },
                  "forks": {
                    "label": "Forks",
                    "format": "number"
                  },
                  "watchers": {
                    "label": "Watchers",
                    "format": "number"
                  },
                  "subscribersCount": {
                    "label": "Real watchers",
                    "format": "number"
                  },
                  "openIssues": {
                    "label": "Open issues",
                    "format": "number"
                  },
                  "visibility": {
                    "label": "Visibility"
                  },
                  "topics": {
                    "label": "Topics",
                    "format": "array"
                  },
                  "license": {
                    "label": "License",
                    "format": "object"
                  },
                  "createdAt": {
                    "label": "Created",
                    "format": "date"
                  },
                  "updatedAt": {
                    "label": "Updated",
                    "format": "date"
                  },
                  "pushedAt": {
                    "label": "Last push",
                    "format": "date"
                  },
                  "latestRelease": {
                    "label": "Latest release",
                    "format": "object"
                  },
                  "contributorCount": {
                    "label": "Contributors",
                    "format": "number"
                  },
                  "commitActivityTotal": {
                    "label": "Commits (52w)",
                    "format": "number"
                  },
                  "scrapedAt": {
                    "label": "Scraped at",
                    "format": "date"
                  }
                }
              }
            }
          }
        }
      },
      "dockerfile": "../Dockerfile",
      "readme": "# GitHub Repository Metadata & README Extractor\n\nPull one clean, flat row per public GitHub repository: identity and owner, stars, forks, the real watcher count, topics, license, language byte counts, README text, and optional releases, contributors, and 52 weeks of commit activity. Find repositories with a GitHub search expression, your own URL list, a user/organisation listing, or a topic. No token, cookie, or proxy setup is required.\n\n## What this actor does\n\n- **Four discovery modes** — search by query, fetch an explicit list of URLs or `owner/repo` slugs, list every repository of a user or organisation, or browse a topic.\n- **Search qualifiers become form fields** — language, license, minimum stars/forks, created/pushed dates, `in:` scope, fork/archive toggles, sort key, and sort direction. You can also paste any native GitHub qualifier into the query itself.\n- **Complete repository metadata** — every reliable field from GitHub's repository payload, including visibility, clone/git/ssh URLs, feature flags, topics count, license identifiers, and the real subscriber (watcher) count.\n- **README text** — fetched from GitHub's raw content host first, then the API when the file uses another name, decoded as UTF-8, and capped at 500 KB.\n- **Optional enrichment** — releases, ranked contributors, 52-week commit activity, and the latest commit, each independently switchable.\n- **Rate-limit aware** — reads GitHub's headers, reports the remaining budget in the run status, and keeps the base records if the anonymous core budget runs out mid-run.\n- **HTML fallback** — in direct mode, if the core API budget is exhausted, repository counters are recovered from the public repository page so the run still returns real rows.\n\n## Output per repository\n\n- `sourceUrl`, `htmlUrl`, `recordType`, `scrapedAt` — canonical page URL and provenance\n- `id`, `nodeId`, `name`, `fullName` — identity\n- `owner` — `login`, `id`, `avatarUrl`, `htmlUrl`, `type`\n- `description`, `homepage`, `primaryLanguage`, `visibility`, `defaultBranch`\n- `stars`, `forks`, `watchersCount`, `watchers` (real watcher count, when known), `subscribersCount`, `networkCount`, `openIssues`, `size`\n- `topics[]`, `topicsCount`\n- `license` — `spdxId`, `name`, `url`, `key`\n- `createdAt`, `updatedAt`, `pushedAt`\n- `isFork`, `isArchived`, `isDisabled`, `isTemplate`, `isPrivate`\n- `hasIssues`, `hasProjects`, `hasDownloads`, `hasWiki`, `hasPages`, `hasDiscussions`, `allowForking`, `webCommitSignoffRequired`\n- `cloneUrl`, `sshUrl`, `gitUrl`, `svnUrl`, `mirrorUrl`\n- `readme` — `name`, `path`, `content`, `size`, `htmlUrl`, `downloadUrl`\n- `languages{}` — byte count per language, plus `languageCount`\n- `latestRelease`, `releases[]` — tag, name, draft/prerelease flags, dates, asset count\n- `contributors[]` — login, id, type, contributions, profile URL; plus `contributorCount` and `hasMoreContributors`\n- `commitActivity[]`, `commitActivityTotal`, `activeWeeks`, `latestCommit` — 52-week history and the newest default-branch commit\n- `searchScore` — GitHub's relevance score, search mode only\n\nEmpty fields are omitted at every depth; a field a repository genuinely lacks is never returned as `null`. A repository that cannot be fetched produces an error row with `type: \"github_repo_intelligence_error\"`, a `reason` (`not_found`, `invalid_url`, `fetch_failed`, `rate_limit`), a `message`, and the identifier that failed, so one bad URL does not stop the batch.\n\n## Input\n\n| Field | Type | Default | Description |\n|---|---|---|---|\n| `mode` | string | `\"search\"` | `search`, `direct`, `owner`, or `topic` |\n| `searchQuery` | string | `\"\"` | GitHub search expression (mode=search); optional keyword filter in owner/topic mode |\n| `repositoryUrls` | array | `[]` | Repository URLs or `owner/repo` slugs (mode=direct) |\n| `owner` | string | `\"\"` | User or organisation to list (mode=owner) |\n| `topic` | string | `\"\"` | Topic tag to browse (mode=topic) |\n| `sortBy` | string | `\"stars\"` | `stars`, `forks`, `updated`, or `help-wanted-issues` |\n| `sortOrder` | string | `\"desc\"` | `desc` or `asc` |\n| `language` | string | `\"\"` | Common language dropdown; empty means any |\n| `languageCustom` | string | `\"\"` | Any other GitHub language name; overrides the dropdown |\n| `license` | string | `\"\"` | License dropdown; empty means any |\n| `searchIn` | string | `\"\"` | Where the free text matches: name/description/readme/topics |\n| `minStars` | integer | `0` | Minimum star count; 0 means no filter |\n| `minForks` | integer | `0` | Minimum fork count; 0 means no filter |\n| `createdAfter` | string | `\"\"` | Only repositories created on/after `YYYY-MM-DD` |\n| `pushedAfter` | string | `\"\"` | Only repositories pushed on/after `YYYY-MM-DD` |\n| `includeForks` | boolean | `false` | Include forks in search/owner/topic results |\n| `includeArchived` | boolean | `true` | Keep archived repositories in the results |\n| `maxResults` | integer | `30` | Hard cap on repositories returned (1–1,000) |\n| `includeReadme` | boolean | `true` | Include the decoded README |\n| `includeTopics` | boolean | `true` | Include topic tags |\n| `includeLanguages` | boolean | `true` | Include language byte counts |\n| `includeRepoDetails` | boolean | `false` | Add real watcher/network counts in search, owner, and topic modes |\n| `includeReleases` | boolean | `false` | Include the newest releases |\n| `releasesLimit` | integer | `10` | Releases kept per repository (1–100) |\n| `includeContributors` | boolean | `false` | Include the ranked contributor list |\n| `contributorsLimit` | integer | `30` | Contributors kept per repository (1–500) |\n| `includeActivity` | boolean | `false` | Include 52-week commit activity and the latest commit |\n| `githubToken` | string | `\"\"` | Optional personal access token; only raises limits |\n\nThe daily test prefill is `mode=search`, `searchQuery=\"stars:>10000 language:python\"`, `repositoryUrls=[\"https://github.com/apify/crawlee\"]`, `maxResults=30`; it uses no token and returns 30 rows.\n\n### Example: search for maintained Rust projects\n\n```json\n{\n  \"mode\": \"search\",\n  \"searchQuery\": \"language:rust stars:>5000\",\n  \"pushedAfter\": \"2025-01-01\",\n  \"sortBy\": \"stars\",\n  \"maxResults\": 100\n}\n```\n\n### Example: fetch a known list\n\n```json\n{\n  \"mode\": \"direct\",\n  \"repositoryUrls\": [\n    \"https://github.com/apify/crawlee\",\n    \"pallets/flask\",\n    \"git@github.com:psf/requests.git\"\n  ],\n  \"includeReleases\": true,\n  \"includeContributors\": true,\n  \"includeActivity\": true\n}\n```\n\n### Example: every repository of an organisation\n\n```json\n{\n  \"mode\": \"owner\",\n  \"owner\": \"apify\",\n  \"language\": \"python\",\n  \"minStars\": 100,\n  \"sortBy\": \"updated\"\n}\n```\n\n### Example: browse a topic\n\n```json\n{\n  \"mode\": \"topic\",\n  \"topic\": \"llm\",\n  \"includeForks\": false,\n  \"maxResults\": 200\n}\n```\n\n## Use cases\n\n- **Dependency due diligence** — check license, archived status, last push, latest release, contributor depth, and commit activity before adopting a library.\n- **Ecosystem mapping** — enumerate `topic:llm`, `language:rust`, or an organisation's repository portfolio.\n- **Leaderboards and dashboards** — rank a repository set by stars, forks, or recent activity with stable numeric fields.\n- **LLM and RAG pipelines** — pair structured metadata with the full README text for retrieval or code analysis.\n- **Release and community tracking** — follow release cadence and contributor counts over time.\n\n## Rate limits and behaviour\n\nGitHub allows about **60 core requests per hour** and **10 search requests per minute** without a token. This actor:\n\n- tracks `X-RateLimit-Remaining`, `X-RateLimit-Limit`, and the reset time on every response and reports them in the run status;\n- fetches READMEs from GitHub's raw content host, which does not consume the core budget;\n- keeps emitting base records and skips only optional enrichment when the core budget is exhausted;\n- retries `429` and `5xx` responses with backoff, handles secondary rate limits, and retries a `202` statistics response once;\n- treats a rejected optional token as a soft failure and continues anonymously.\n\nA personal access token raises the limits to 5,000 core requests per hour and 30 search requests per minute. It is optional and never used by the daily test.\n\n## Limitations\n\n- **Search is capped at 1,000 results per query** by GitHub. Split a large universe into `stars:` ranges (for example `stars:10000..50000`, then `stars:5000..9999`) and run once per range.\n- **The contributor endpoint is capped at 500 entries** by GitHub. `hasMoreContributors` is set when GitHub's `Link` header shows more pages.\n- **Commit activity can take a moment to compute.** If GitHub still returns `202` after one retry, the field is omitted for that repository instead of invented.\n- **Private repositories** require a token with access to them. The actor never asks for cookies or a login.\n- **Sorting by \"Recently updated\" follows GitHub's own ordering, which is approximate.** Re-sort on the `updatedAt` field if you need a strict order. Rows are pushed as enrichment finishes, so use `index` (the search rank) to restore the source order.\n- **`license.url` points at GitHub's license API** (`api.github.com/licenses/<id>`). Like any API URL it returns 403 while the anonymous hourly quota is exhausted; the dataset itself is unaffected.\n- **No issues, pull requests, discussions, or trending data.** This actor focuses on repository metadata and README content.\n\n## FAQ\n\n**Do I need a GitHub token?** No. Small runs work anonymously. Supply a token only for larger batches or private repositories.\n\n**Why is `watchers` missing on some rows?** GitHub aliases `watchers_count` to stars in search payloads, so that value is published as `watchersCount` (not as a misleading watcher count). `watchers` and `subscribersCount` are the real watcher count, filled in direct mode and when `includeRepoDetails` is on.\n\n**Do I need a proxy?** No. GitHub limits requests by IP and token, not by blocking this actor.\n\n**Can I use my own search qualifiers?** Yes. The query field accepts the full GitHub repository-search grammar; the form filters are appended to it.\n\n**What happens if a repository is missing?** The actor emits an error row for that repository and continues with the rest.\n\n**Is this affiliated with GitHub?** No. It reads GitHub's public REST API and public repository pages.\n\n## Data source\n\nGitHub's public REST API (`api.github.com`), its raw content host (`raw.githubusercontent.com`), and public repository pages on `github.com`. No authentication is required for public data.\n",
      "categories": [
        "DEVELOPER_TOOLS"
      ]
    },
    "buildNumber": "1.1.1",
    "imageDigest": "d9299b36de13eb89b883f45bf57fa88341808ea67a15464b2b9574679e9bbd4b",
    "actVersion": {
      "sourceType": "SOURCE_FILES",
      "buildTag": "latest",
      "versionNumber": "1.1"
    },
    "usage": {
      "ACTOR_COMPUTE_UNITS": 0.016415555555555555
    }
  }
}