Methodology
Methodology
How we collect, verify and publish data — so you can judge exactly how much to trust it.
Last updated: October 25, 2026
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:
- 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.
- 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.
- 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.
- 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.
- 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.
| Source | What we collect | Refresh |
|---|---|---|
| GitHub API | Stars, forks, license, last push, latest release, archived status | Daily |
| Docker Hub & GHCR | Official image identity, pull counts, tags, last push | Daily |
| iTunes Lookup API | iOS App Store listing: version, price, release dates, minimum iOS; delisting detection | Daily probe |
| Snap Store | Listing status, version, publisher | Daily |
| Flathub | Listing status, version, license, end-of-life flag | Daily |
| Homebrew | Formula/cask listing status, version, license | Daily |
| WinGet (winget-pkgs) | Listing status, version list | Daily |
| AUR & Arch repositories | Listing status, version, maintainer | Daily |
| F-Droid & IzzyOnDroid | Android channel listing status, versions | Daily |
| Official docs & release pages | Deployment options, feature and pricing facts — hand-curated with source URLs | Per 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:
- verified_at — when the value was last confirmed.
- method — how: API collector, AI draft confirmed by a human, or human-only.
- source ids — which source records back the value.
- confidence and verified_by — how sure we are and who or what checked it.
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 group | TTL | What happens on expiry |
|---|---|---|
| GitHub stars & repo stats | 14 days | Automatic re-fetch on the next daily run |
| iOS client platforms | 30 days | Daily iTunes probe; cell marked "verification pending" with ⚠️; monthly human re-check |
| Android client platforms | 45 days | Cell marked "verification pending" with ⚠️; re-checked against channel indexes and by a human |
| License | 120 days | Human 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
- App names, logos and other marks belong to their respective owners. We use them only to identify the software being described — a nominative fair use — and never to imply endorsement, affiliation or sponsorship.
- Logos are not used as branding elements of this site. Our platform matrix identifies platforms with plain monochrome letter tiles instead of brand logos.
- Comparisons contain factual, sourced assertions; anything that is a judgment is labeled as our assessment rather than presented as fact.
- Rights holders: if any use on this site is problematic, email[email protected]— we respond within 48 hours and will correct or remove the material in question.
What we don't do
- No paid placements, sponsored rankings or sponsored comparisons.
- No fabricated ratings or review counts in our structured data — we publish no star-rating fields because we have no first-hand panel to base them on.
- No numbers without a source; no "Not documented" replaced by a guess.
- No claims of hands-on testing unless the note is labeled as our own deployment.