GitHub search syntax for recruiters and sourcers
A GitHub query is free text plus qualifier:value pairs, ANDed together. The four search domains take different qualifiers: repositories (language, topic, stars, pushed), users (type:user, location, followers), commits (author, author-email) and issues/PRs (is:pr, reviewed-by). Every query is capped at 1,000 returned results.
By Rahul Vishwakarma, creator of GitFinder · Reviewed 31 August 2026
How is a GitHub query structured?
Free-text terms, then qualifier:value pairs separated by spaces. All terms are ANDed — every additional qualifier narrows the result set, never widens it. That single fact explains most disappointing GitHub searches: three languages and a location leaves nothing.
Qualifiers are not shared across search types. topic: exists for repositories and not for users; location: exists for users and not for repositories. Choosing the search type first, and the qualifiers second, avoids most confusion.
Which repository qualifiers matter for sourcing?
These are the ones that earn their place. Repository search is where sourcing should start — it finds the projects where your kind of work is being done, and every project has a contributor list.
| Qualifier | Matches | Example | Note |
|---|---|---|---|
language: | Primary language of the repository | language:rust | Multiple values AND together. Two is usually the practical maximum. |
topic: | A topic the maintainers applied | topic:kubernetes | The highest-signal qualifier for domain fit, and the most under-used. |
stars: | Star count | stars:50..500 | Filters repositories, not people. A high floor shrinks your candidate pool badly. |
forks: | Fork count | forks:>100 | — |
pushed: | Date of the most recent push | pushed:>2026-01-01 | The cheapest way to drop abandoned projects — and stale contributor lists. |
created: | Repository creation date | created:<2020-01-01 | — |
license: | License key | license:apache-2.0 | — |
org: / user: | Owned by an organization or user | org:kubernetes | — |
in: | Restrict the free-text match to a field | in:readme | Accepts name, description, readme, topics. |
archived: | Whether the repo is archived | archived:false | Worth adding by default; archived projects have no active contributors. |
is: | Visibility | is:public | — |
good-first-issues: | Count of issues labelled good first issue | good-first-issues:>5 | A proxy for a project that actively onboards outside contributors. |
Which user qualifiers exist, and what are they worth?
Fewer than people expect, and weaker. User search only knows what someone typed into their profile, which is why it works better as a supplement than as your main discovery path.
| Qualifier | Matches | Example | Note |
|---|---|---|---|
type: | user or org | type:user | Add it always. Without it, company accounts appear in your results. |
language: | Most-used language across their public repos | language:go | A weak proxy for expertise — it is a count, not an assessment. |
location: | The free-text location field | location:"San Francisco" | User-typed and often stale. Expect to miss most of the people who qualify. |
followers: | Follower count | followers:>=50 | A popularity proxy, not a skill one. |
repos: | Number of public repositories | repos:>10 | — |
created: | Account creation date | created:<2018-01-01 | — |
in: | Restrict the match to login, name or email | in:login | in:email matches only a publicly-set profile email. |
fullname: | Match the profile's full-name field | fullname:"Ada Lovelace" | — |
is:sponsorable | Has a GitHub Sponsors profile | is:sponsorable | — |
What can you do with commit search?
Commit search is the most under-used surface for sourcing, because it queries content that people generate by working rather than content they wrote about themselves.
| Qualifier | Matches | Example | Note |
|---|---|---|---|
author: | Commits authored by a GitHub account | author:torvalds | One query covers all of GitHub — but it spends the scarce search budget. |
committer: | Commits committed by an account | committer:web-flow | — |
author-email: | Commits whose author email matches | author-email:ada@example.com | The reverse lookup: an address you already have back to the accounts using it. |
author-name: | Commits whose author name matches | author-name:"Ada L" | — |
author-date: | When the commit was authored | author-date:>2026-01-01 | — |
repo: / org: / user: | Scope to a repository, org or user | repo:golang/go | — |
merge: | Include or exclude merge commits | merge:false | merge:false removes most of the noise from a busy history. |
hash: | A specific commit SHA | hash:8f4b7c2 | — |
One budget warning. Commit search draws on GitHub’s search rate limit — on the order of 30 requests a minute — not the 5,000-per-hour core limit. It is the right tool for a handful of targeted lookups and the wrong tool for a loop over a hundred candidates.
Why search issues and pull requests?
Because merged pull requests to repositories someone does not own are the clearest public evidence that a person can work inside an unfamiliar codebase — read it, follow its review process, and respond to feedback. That is most of the job, and no profile field captures it.
| Qualifier | Matches | Example | Note |
|---|---|---|---|
is:pr / is:issue | Restrict to pull requests or issues | is:pr is:merged | is:pr is:merged -author:OWNER finds outside contributors whose work was accepted. |
author: | Opened by this account | author:ada | — |
reviewed-by: | Reviewed by this account | reviewed-by:ada | One of the best public proxies for seniority — reviewing is a trust signal. |
involves: | Author, assignee, mentioned or commenter | involves:ada | — |
commenter: | Commented on it | commenter:ada | — |
merged: | Merge date | merged:>2026-01-01 | — |
label: | Carries a label | label:"good first issue" | — |
How do range and date filters work?
Numeric qualifiers accept comparisons and ranges:
stars:>100— greater thanstars:>=100— greater than or equalstars:<50/stars:<=50— less thanstars:50..500— a closed rangestars:100..*andstars:*..100— open-ended ranges
Date qualifiers take YYYY-MM-DD and the same comparison forms, and accept an optional time and timezone offset:
pushed:>2026-01-01— active this yearcreated:2024-01-01..2025-12-31— created in that window
pushed: is the highest-value date filter in sourcing. Contributor lists on abandoned repositories are lists of people who have moved on.
Can you use NOT, OR and quotes?
Partly, and the details differ by search type — which is the most common source of silently-wrong queries.
- Exclusion works everywhere. Prefix a qualifier with
-:-language:javascript,-author:some-bot. This is the reliable negation. - Quote multi-word values.
location:"New York". Unquoted, the second word becomes a separate free-text term and quietly changes the result set. - Boolean
AND/OR/NOTare code search features, not general ones. In repository and user search, spaces already mean AND and there is no OR — run two queries and merge the results. - Code search needs a signed-in account and has its own qualifier set (
path:,symbol:,content:).
What limits should you plan around?
- 1,000 results per query, maximum. This is the one that catches people out: a query reporting 40,000 matches will still only ever hand you 1,000 of them. The fix is not deeper paging — it is several narrower queries (split by topic, by star band, by date window) whose results you merge.
- Two separate rate limits. Roughly 5,000 core requests an hour per token, and roughly 30 search requests a minute. Mixing them up is how a pipeline stalls at 10% of expected throughput.
- Contributor lists are truncated on huge repositories. Very large projects do not return every contributor.
- Private and enterprise work is invisible. No qualifier reaches it. Whole industries are absent from these results, which is a reason to treat GitHub as one channel rather than the channel.
GitHub adjusts search behaviour over time — treat this page as a working reference and the official documentation as authoritative if the two disagree.
Which queries are worth keeping?
Five that hold up. Each is a starting point to narrow, not a finished search.
- Active projects in a domain —
language:go topic:kubernetes stars:50..2000 pushed:>2026-01-01 archived:false. The star band is deliberate: it skips the famous projects everyone else is already sourcing from. - Outside contributors whose work was merged —
repo:ORG/REPO is:pr is:merged -author:OWNER. Evidence of working in someone else’s codebase. - People who review, not just commit —
repo:ORG/REPO is:pr reviewed-by:HANDLE. Reviewing is a trust signal a project granted them. - Recent real commits by one person —
author:HANDLE merge:false author-date:>2026-01-01. Drops merge noise and stale history. - Reverse-lookup an address —
author-email:someone@example.com. Confirms which accounts an address you already hold belongs to.
For how to turn any of these into an actual shortlist — contributor mining, screening, and contact resolution — see how to find and source developers on GitHub.
Or describe the role and skip the syntax
GitFinder reads a plain-English job description, derives the query plan itself — languages, topics, a sensible star floor, activity windows — and runs the whole funnel through to contactable candidates.
Card required · 3 days free, then $49/month plus applicable taxes · Cancel any time in two clicks.
Keep reading
- How to find and source developers on GitHub — The full method: repositories first, contributors second, contact last.
- How to find a developer's email address on GitHub — Four public sources, measured hit rates, and the technique that stopped working.
- Pricing — What GitFinder costs and what a single search consumes.