Gitea / Forgejo Forge Extractor avatar

Gitea / Forgejo Forge Extractor

Pricing

from $0.35 / 1,000 repos

Go to Apify Store
Gitea / Forgejo Forge Extractor

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

Datamule

Maintained by Community

Actor 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…ModeWhat it does
query / topic / languagesearchGET /api/v1/repos/search β€” one row per matching repo across the whole instance
orgorgGET /api/v1/orgs/{org}/repos β€” every repo in an organization
owner + reporepoGET /api/v1/repos/{owner}/{repo} β€” a single repository's full detail (the only mode that returns the license object)
(none of the above)discoveryGET /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):

FieldDescription
fullName / nameRepository name (owner/repo and short)
ownerLogin / ownerTypeOwner login and type (User / Organization)
descriptionRepository description
languagePrimary language
stars / forks / watchersPopularity counters
openIssues / openPRs / releasesOpen issue, open PR, release counts
sizeKbRepository size (KB)
defaultBranchDefault branch
topicsTopic tags
licenseLicense name (from the repo-detail license object)
fork / archived / mirror / empty / private / template / internalState flags
hasIssues / hasWiki / hasPullRequests / hasProjectsEnabled features
htmlUrl / cloneUrl / sshUrl / websiteLinks
createdAt / updatedAt / pushedAtTimestamps
_rawThe lossless original repo entry
_source / _mode / _software / _version / _repoCountInstance URL, run mode, Gitea-vs-Forgejo fingerprint, version, total repo count

Input

FieldRequiredDescription
baseUrlβœ…Instance root, e.g. https://codeberg.org or https://gitea.com. /api/v1 is appended for you.
queryRepository search term (search mode).
topicRestrict to a topic tag (search mode).
languageRestrict to a primary language (search mode).
sort / orderSort field / direction (search mode).
orgEnumerate an organization's repositories (org mode).
owner + repoFetch a single repository's detail (repo mode).
maxRecordsGlobal cap on emitted rows (each row = one billable repo).
bearerAccess token for a private / rate-limited instance. Never logged.
extraHeadersExtra 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 simply null.
  • Large instances: a broad search on Codeberg (100k+ repos) can return thousands of results. Use maxRecords and/or a narrower query / language / topic to 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 bearer token for those; public instances need nothing.
  • Honest failure: if baseUrl isn'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.