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
21 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" }
A discovery run returns one row about the instance, not repositories. In the run's Output tab, switch the view from Repositories to Instance (discovery mode) to see the instance link, software, version and public repo estimate.
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.
If you set a maximum cost per run, the Actor delivers only the rows that budget covers: every row in the dataset is billed, nothing unpaid is written, and a budget below one row makes no request to the instance at all. Pages are requested only while the budget still covers at least one more row. If a later page fails after some rows were delivered, the run exits with an error and keeps the rows already billed.