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

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…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
baseUrlInstance 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" }

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.