Skip to main content

ghfind (Python)

Official Python SDK and CLI for ghfind.com — score any GitHub account 0–100 for value and trustworthiness, with roasts, head-to-head battles, leaderboards, and developer discovery.

  • Deterministic scoring, no LLM. scan, score, get_score, and the battle winner are pure computation over GitHub data.
  • Bring your own model. The only LLM parts are the roast prose and battle commentary. roast(..., byo_key=...) runs the LLM through your own OpenAI-compatible provider — or just feed the structured scan() output to your own model.
  • Score anywhere. No token → the ghfind server crawls + scores for you. Have a token → ghfind.local runs the same open-source engine entirely on your machine (see below). Same numbers either way.
  • Zero dependencies. Standard library only.
pip install ghfind

CLI

ghfind score torvalds            # deterministic score (no auth, cached)
ghfind roast torvalds --lang en
ghfind vs torvalds octocat
ghfind badge torvalds --markdown # a README badge that links back to ghfind

score hits the public GET /api/score endpoint: no auth, edge-cached and rate-limited on the server, and it scores never-seen accounts live (still deterministic, no LLM). It's the cheapest path for you and for ghfind.

Command What it does Endpoint LLM?
score <user> Deterministic score; prints tier, sub-scores, percentile. GET /api/score/{u} no
scan <user> Full evidence payload (metrics, signals, red flags). Heavy — needs --api-key in prod. POST /api/scan no
roast <user> Human-facing roast report + AI-adjusted score. POST /api/scan + /api/roast yes*
vs <a> <b> Head-to-head verdict (winner deterministic). POST /api/vs-verdict yes*
exists <user> Does this GitHub login exist? Runs on your IP, never touches ghfind. api.github.com no
search <query> Prefix autocomplete over scored accounts. GET /api/search-users no
leaderboard Ranked profiles. --view / --window. GET /api/leaderboard no
developers --type language|org|repo Discover developers by facet. GET /api/developers no
stats Platform totals. GET /api/stats no
badge <user> Badge URL, or --markdown for a README snippet linking to the profile. no
card <user> OG share-card PNG URL. no
commands [show <c>] Self-describing capability catalog (for agents). no
auth status Show host + which credentials are configured. no

* roast/vs prose is the only LLM part. Pass --byo-base-url --byo-api-key --byo-model (or GHFIND_BYO_* env vars) to run roast through your own model instead of ghfind's.

Score locally, offline, on your own token

--local runs the crawl and scoring on your machine with your GITHUB_TOKEN — the ghfind server is never called, so it scales infinitely and never adds load:

export GITHUB_TOKEN=ghp_xxx
ghfind score torvalds --local     # crawl + score entirely on your machine
ghfind scan torvalds  --local

Rule of thumb: have a token → --local (offline, unlimited); no token → plain score (ghfind scores it for you). Output is identical.

Options & environment

--host <url>          default https://ghfind.com (or GHFIND_HOST)
--api-key <key>       Authorization: Bearer — bypasses Turnstile on POST /api/scan
                      (or GHFIND_API_KEY)
--github-token <t>    for --local and exists (or GITHUB_TOKEN)
--byo-base-url/-api-key/-model   your OpenAI-compatible provider for roast
--json | -o json|pretty|markdown
--lang zh|en

Library

from ghfind import GhFind

gh = GhFind()  # defaults to https://ghfind.com

# Cheapest: deterministic score (no LLM). Works for ANY account —
# unseen ones are scored live. s["source"] is "indexed" or "live".
s = gh.get_score("torvalds")
print(s["final_score"], s["tier"], s["percentile"], s["source"])

# Full evidence payload:
scan = gh.scan("torvalds")
print(scan["scoring"]["final_score"], scan["scoring"]["red_flags"])

# Confirm a handle exists first (on your IP, not ghfind's):
if gh.user_exists("torvalds"):
    ...

# Roast with your own model (no ghfind LLM spend):
roast = gh.roast("torvalds", byo_key={
    "baseURL": "https://api.openai.com/v1", "apiKey": "...", "model": "gpt-4o",
})

Every method is one atomic capability; introspect them via from ghfind import CATALOG.

Local scoring (ghfind.local)

import os
from ghfind.local import collect_and_score

scan = collect_and_score("torvalds", token=os.environ["GITHUB_TOKEN"])
print(scan["scoring"]["final_score"], scan["scoring"]["tier"])

# Already have metrics? Score them purely (no I/O):
from ghfind.local import score_metrics
scoring = score_metrics(metrics)

ghfind.local is a faithful port of the website's collect() + score(), verified bit-for-bit against the TS/website output. It runs entirely on your own machine and GitHub token — no ghfind server, no LLM, no rate limits but GitHub's.

Errors

from ghfind import GhFindError
try:
    gh.get_score("someone")
except GhFindError as e:
    if e.status == 404:
        print("no such GitHub user")  # the only 404

Machine-readable API spec: https://ghfind.com/openapi.json · Agent notes: https://ghfind.com/llms.txt

JS/TS SDK/CLI: @hikariming/ghfind on npm. License: AGPL-3.0-or-later.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

ghfind-0.1.0.tar.gz (31.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

ghfind-0.1.0-py3-none-any.whl (35.1 kB view details)

Uploaded Python 3

File details

Details for the file ghfind-0.1.0.tar.gz.

File metadata

  • Download URL: ghfind-0.1.0.tar.gz
  • Upload date:
  • Size: 31.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.5

File hashes

Hashes for ghfind-0.1.0.tar.gz
Algorithm Hash digest
SHA256 7f619dbabe3ccae0a62d62256379d0f81ab04b23eb283087d818bfaf4e74956e
MD5 92841df7bd50df5fbc4d780f6c827dec
BLAKE2b-256 8e120e46676853997b1f0f3453a39a9eeaddf8c62636b6a4671ce2a31a3a0185

See more details on using hashes here.

File details

Details for the file ghfind-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: ghfind-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 35.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.5

File hashes

Hashes for ghfind-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 7671de9f1e5a175c88ee34a37da60eb501edcef31b829c2354fa6b3f9588a23a
MD5 3d4570197aa239111347dc85be430f92
BLAKE2b-256 701ce093169750e14c8ad80baeb670e05648b798d9d9f4d269ac182b8e4c46f8

See more details on using hashes here.

Release history Release notifications | RSS feed

This release

0.1.0 This release

2 files

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page