Gitea / Forgejo Forge Extractor
Pricing
from $0.35 / 1,000 repos
Gitea / Forgejo Forge Extractor
Point at any Gitea or Forgejo instance (Codeberg, gitea.com, self-hosted) and get one structured row per repository: stars, forks, language, topics, license, issues/PR counts, timestamps and more.
Pricing
from $0.35 / 1,000 repos
Rating
0.0
(0)
Developer
Datamule
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
13 days ago
Last modified
Categories
Share
Point at any Gitea or Forgejo instance and get one clean, structured row per repository — stars, forks, language, topics, license, issue/PR counts and timestamps — as a flat dataset you can filter, diff, inventory, or feed into an OSINT / dependency-research / supply-chain pipeline.
Gitea (the dominant self-hosted Git forge) and its fork
Forgejo — which powers Codeberg — expose the
identical /api/v1 REST API: the "GitHub API for the self-hosted world".
Thousands of independent instances (corporate, university, hobbyist, plus
Codeberg's 100 000+ repos) speak the same grammar, so this one actor works
against all of them. No per-host scraper, no instance enumeration: give it an
instance URL and it enumerates the repositories.
Modes (auto-selected from your input)
| You set… | Mode | What it does |
|---|---|---|
query / topic / language | search | GET /api/v1/repos/search — one row per matching repo across the whole instance |
org | org | GET /api/v1/orgs/{org}/repos — every repo in an organization |
owner + repo | repo | GET /api/v1/repos/{owner}/{repo} — a single repository's full detail (the only mode that returns the license object) |
| (none of the above) | discovery | GET /api/v1/version + a probe — one row describing the instance: software (Gitea vs Forgejo), version, repo-count estimate |
What you get
One dataset row per repository, with every standard field flattened and safely
nullable (a repo — or a whole forge — that omits a field simply yields null):
| Field | Description |
|---|---|
fullName / name | Repository name (owner/repo and short) |
ownerLogin / ownerType | Owner login and type (User / Organization) |
description | Repository description |
language | Primary language |
stars / forks / watchers | Popularity counters |
openIssues / openPRs / releases | Open issue, open PR, release counts |
sizeKb | Repository size (KB) |
defaultBranch | Default branch |
topics | Topic tags |
license | License name (from the repo-detail license object) |
fork / archived / mirror / empty / private / template / internal | State flags |
hasIssues / hasWiki / hasPullRequests / hasProjects | Enabled features |
htmlUrl / cloneUrl / sshUrl / website | Links |
createdAt / updatedAt / pushedAt | Timestamps |
_raw | The lossless original repo entry |
_source / _mode / _software / _version / _repoCount | Instance URL, run mode, Gitea-vs-Forgejo fingerprint, version, total repo count |
Input
| Field | Required | Description |
|---|---|---|
baseUrl | ✅ | Instance root, e.g. https://codeberg.org or https://gitea.com. /api/v1 is appended for you. |
query | Repository search term (search mode). | |
topic | Restrict to a topic tag (search mode). | |
language | Restrict to a primary language (search mode). | |
sort / order | Sort field / direction (search mode). | |
org | Enumerate an organization's repositories (org mode). | |
owner + repo | Fetch a single repository's detail (repo mode). | |
maxRecords | Global cap on emitted rows (each row = one billable repo). | |
bearer | Access token for a private / rate-limited instance. Never logged. | |
extraHeaders | Extra request headers (JSON object). Never logged. |
Examples
Search Codeberg (Forgejo) for Python repositories:
{ "baseUrl": "https://codeberg.org", "query": "python", "maxRecords": 100 }
Every repository in an organization:
{ "baseUrl": "https://codeberg.org", "org": "forgejo" }
One repository's full detail:
{ "baseUrl": "https://gitea.com", "owner": "gitea", "repo": "tea" }
Fingerprint an unknown instance (discovery):
{ "baseUrl": "https://git.example.org" }
Notes
- Gitea and Forgejo: both answer
/api/v1; the actor fingerprints which (and the version) into_software/_version. Fields are read by key presence, so the small differences in which optional fields each populates never break a run — a missing column is simplynull. - Large instances: a broad search on Codeberg (100k+ repos) can return
thousands of results. Use
maxRecordsand/or a narrowerquery/language/topicto scope a run; pagination stops as soon as the cap is reached. - Per-instance access: some instances require sign-in or registration for
the API. Supply a
bearertoken for those; public instances need nothing. - Honest failure: if
baseUrlisn't a Gitea/Forgejo instance (an HTML error page, a 404, or JSON without the expected shape) the run fails fast rather than emitting empty rows. An empty search (a valid query that matches nothing) returns 0 rows and exits cleanly.
Pricing
Pay-per-event: one repo charge per emitted repository row. You only pay
for the repositories you extract.