Methodology

Methodology

How we collect, verify and publish data — so you can judge exactly how much to trust it.

Last updated: October 25, 2026

AI-assisted draftingHuman review before publishDaily data syncField-level verification dates

Our publishing model

Every page on this site is generated from a structured database — not from a language model's memory. The pipeline is deliberately boring:

  1. Data in. Automated collectors pull facts daily from primary sources (the list below) into a versioned database. Raw API responses are archived for 90 days, and failed fetches are quarantined rather than silently dropped.
  2. Drafting. Page text is drafted with AI assistance, but the model only ever sees a snapshot of that database. Our generation rules are strict: every claim must trace to a source URL in the database, and a field without a reliable source renders asNot documented instead of a guess.
  3. Automated QA. Before anything is published, every number in the draft is checked against a whitelist of database values (a figure must match a stored value or a known formatting variant of it), platform claims are cross-checked against the client matrix, banned marketing phrasing and near-duplicate text are rejected, and titles must be unique.
  4. Human review. A human reviews before publish. New apps get a full human review on first publish, and the highest-traffic comparison pages are hand-written from the same data.
  5. Daily refresh. The pipeline runs every day, so the data you see has a verifiable age, measured per field (see Freshness rules below).

In short: AI-assisted writing, human review, and data updated daily. If a page shows a number without a date and a source behind it, that is a bug — pleasetell us.

Where the data comes from

We collect from primary sources only. Anything a project publishes about itself is authoritative for facts like version numbers and store listings; anything else is labeled as our assessment.

SourceWhat we collectRefresh
GitHub APIStars, forks, license, last push, latest release, archived statusDaily
Docker Hub & GHCROfficial image identity, pull counts, tags, last pushDaily
iTunes Lookup APIiOS App Store listing: version, price, release dates, minimum iOS; delisting detectionDaily probe
Snap StoreListing status, version, publisherDaily
FlathubListing status, version, license, end-of-life flagDaily
HomebrewFormula/cask listing status, version, licenseDaily
WinGet (winget-pkgs)Listing status, version listDaily
AUR & Arch repositoriesListing status, version, maintainerDaily
F-Droid & IzzyOnDroidAndroid channel listing status, versionsDaily
Official docs & release pagesDeployment options, feature and pricing facts — hand-curated with source URLsPer TTL

Coverage is a curated subset of the self-hosted ecosystem, chosen for search demand and stability — not the whole catalog. A store listing can change between probes, which is what the freshness rules below are for.

Field-level verification (verified_at)

Data is not stored as a page of text; it is stored field by field, and each field carries its own provenance:

On the page this shows up as a Data verified badge with the date when all fields are fresh, and as a ⚠️ mark on individual cells that have aged out. Apps with any stale field get a banner at the top of the profile. Automated values never overwrite human-verified values — conflicts go to a review queue instead of being silently resolved.

Freshness rules (TTL)

Every field group has a time-to-live. When a value passes its TTL without a successful re-check, the page says so rather than pretending the data is current:

Field groupTTLWhat happens on expiry
GitHub stars & repo stats14 daysAutomatic re-fetch on the next daily run
iOS client platforms30 daysDaily iTunes probe; cell marked "verification pending" with ⚠️; monthly human re-check
Android client platforms45 daysCell marked "verification pending" with ⚠️; re-checked against channel indexes and by a human
License120 daysHuman review queue; dual-source check before the value is re-confirmed

Cross-validation rules back these up: licenses are confirmed against two independent sources, Docker images are checked for the official publisher, and snapshot-to-snapshot changes beyond tolerance (for example ±5% on stars) are flagged instead of accepted. Daily probes that return a 404 or a price change automatically open a change report for human review.

Collection tiers

Roughly half of each app's fields are fully automatic (API metadata such as stars, license, releases and store listings). About a quarter are AI-drafted and then confirmed by a human (taglines, descriptions, category, channel lists). The rest are human-only: iOS/Android final review, paid status, app relationships, resource notes and the publish decision.

Corrections

Errors are fixed at the source — the database — so every page that displays the field updates together. Community corrections are acknowledged within 48 hours, and verified fixes are applied as soon as they are confirmed. Report one on theContact page.

Trademarks and naming

What we don't do