Apify Bounty Radar
Find public open-source bounty opportunities, collect the evidence needed to decide whether to attempt them, and separate credible paid work from stale, crowded, assigned, or unsafe opportunities.
Prerequisites
- Apify account (sign up)
- Authentication via one of:
Workflow
- Clarify the target lane: bounty platform, minimum reward, preferred stack, allowed regions, and whether credits or token payouts count.
- Discover candidates with search Actors. Start narrow: recent GitHub issues, Algora wording, Polar funding text, or project-specific labels.
- Crawl only the candidate pages that pass the first filter. Extract issue body, labels, comments, linked PRs, reward amount, assignment rules, and claim instructions.
- Score each candidate before recommending work:
- Reward credibility: platform, maintainer wording, currency, payout region, and deadline.
- Claimability: open state, assignee, first-claim rule, required registration, and whether a claim comment is allowed.
- Competition: number of attempts, merged or rewarded PRs, recent maintainer preference, and open high-quality PRs.
- Delivery fit: stack, setup burden, tests, required demo video, and whether private data or paid services are needed.
- Return a compact queue: claim now, inspect deeper, monitor, or skip. Include the exact evidence URL for each decision.
Actor Routing
| User need |
Actor ID |
Tier |
Best for |
| Search broad web and GitHub pages for bounty wording |
apify/google-search-scraper |
apify |
Fresh discovery by query, platform, amount, or repo |
| Extract readable issue text, comments, and linked pages |
apify/website-content-crawler |
apify |
Evidence capture from GitHub issue, PR, Algora, Polar, and docs pages |
| Run custom page extraction when the generic crawler misses structured data |
apify/web-scraper |
apify |
GitHub pages, bounty tables, label pages, and custom selectors |
Prefer Apify-maintained Actors first. Use third-party Actors only when the user accepts the extra trust and cost tradeoff.
Discovery Queries
Use several narrow searches instead of one broad scrape:
site:github.com "bounty" "$" "Steps to solve" "/attempt"
site:github.com "bounty" "$100" "is:issue" "open"
site:github.com "Polar" "Funding" "issue is completed"
site:github.com "Algora" "Low quality" "PRs will not receive review"
site:github.com "label:\"$50\"" "label:bounty"
For a specific ecosystem, add stack terms:
FastAPI bounty "$100" site:github.com
Rust bounty Algora site:github.com
Kubernetes "bounty" "$250" site:github.com
Calling Actors
Search Candidates
apify actors call apify/google-search-scraper \
--input '{"queries":"site:github.com \"bounty\" \"$\" \"Steps to solve\" \"/attempt\"","resultsPerPage":10,"maxPagesPerQuery":2,"countryCode":"US","languageCode":"en"}' \
--json \
--user-agent apify-awesome-skills/apify-bounty-radar \
2>/dev/null
Crawl Candidate Evidence
apify actors call apify/website-content-crawler \
--input '{"startUrls":[{"url":"https://github.com/OWNER/REPO/issues/NUMBER"}],"maxCrawlPages":1,"crawlerType":"cheerio","removeElementsCssSelector":"nav,footer,script,style","saveMarkdown":true}' \
--json \
--user-agent apify-awesome-skills/apify-bounty-radar \
2>/dev/null
Fetch Results
apify datasets get-items DATASET_ID --format json \
--user-agent apify-awesome-skills/apify-bounty-radar \
2>/dev/null
Decision Rules
Classify every candidate:
claim now: clear payout, open issue, claim method available, no assignee or exclusive owner, low competition, and realistic scope.
inspect deeper: possible payout but unclear rules, unclear status, or needs repo setup review.
monitor: good project but already assigned, waiting on maintainer confirmation, or crowded with several strong PRs.
skip: closed, archived, deadline passed, duplicate already rewarded, creator-only, private-registration-only, pay-to-bid, unsafe data handling, or requires publishing private config or identity metadata.
If a candidate says "first comment wins", "assigned only", "creator only", or "only one PR", treat that wording as a hard gate.
Evidence Table
Return concise rows:
| Field |
What to capture |
| URL |
Issue or bounty page |
| Reward |
Amount, currency, and whether cash, credits, or tokens |
| Platform |
Algora, Polar, maintainer-direct, OpenCollective, or unknown |
| Claim rule |
/attempt, /claim, assignment, registration, or none |
| Competition |
Attempts, open PRs, rewarded PRs, comments, assignees |
| Risk |
Deadline, demo video, private signup, public metadata, payment region |
| Decision |
claim now, inspect deeper, monitor, or skip |
| Next action |
Exact next safe step |
Cost Guardrails
- Start with search results only. Do not crawl more than 10 candidate pages without user approval.
- For GitHub issue pages, crawl one page at a time; use GitHub APIs when available for comments and PR state.
- Stop crawling if a page is archived, closed, paid already, or clearly unavailable.
- Never crawl private repositories, account dashboards, payment settings, or pages requiring login unless the user explicitly authorizes that account workflow.
Troubleshooting
- Too many stale hits: add
created:, updated:, current year, platform name, and minimum amount to the search phrase.
- Search misses label-only bounties: search GitHub labels directly with the GitHub API or crawl repository label pages.
- GitHub HTML is noisy: use
website-content-crawler for page text, then verify state and comments through GitHub APIs before any public action.
- Reward is not cash: label it clearly as credits, tokens, or unknown; do not mix it with confirmed cash payout.
- Existing PRs look weak: competing is only worth it when the new implementation can prove a stronger root cause, broader coverage, or lower review burden.
1---2name: apify-bounty-radar3description: Find, screen, and prioritize public GitHub bounty opportunities with Apify Actors. Use when a user asks to find paid GitHub issues, Algora or Polar bounties, bounty races, claimable open-source tasks, or recently posted contribution opportunities, and needs evidence on payout terms, competition, assignment rules, and claimability before starting work.4---56# Apify Bounty Radar78Find public open-source bounty opportunities, collect the evidence needed to decide whether to attempt them, and separate credible paid work from stale, crowded, assigned, or unsafe opportunities.910## Prerequisites1112- Apify account ([sign up](https://apify.com))13- Authentication via one of:14 - `apify login` if using the Apify CLI15 - `APIFY_TOKEN` environment variable16 - Token from [Apify Console > Settings > Integrations](https://console.apify.com/settings/integrations)1718## Workflow19201. Clarify the target lane: bounty platform, minimum reward, preferred stack, allowed regions, and whether credits or token payouts count.212. Discover candidates with search Actors. Start narrow: recent GitHub issues, Algora wording, Polar funding text, or project-specific labels.223. Crawl only the candidate pages that pass the first filter. Extract issue body, labels, comments, linked PRs, reward amount, assignment rules, and claim instructions.234. Score each candidate before recommending work:24 - Reward credibility: platform, maintainer wording, currency, payout region, and deadline.25 - Claimability: open state, assignee, first-claim rule, required registration, and whether a claim comment is allowed.26 - Competition: number of attempts, merged or rewarded PRs, recent maintainer preference, and open high-quality PRs.27 - Delivery fit: stack, setup burden, tests, required demo video, and whether private data or paid services are needed.285. Return a compact queue: claim now, inspect deeper, monitor, or skip. Include the exact evidence URL for each decision.2930## Actor Routing3132| User need | Actor ID | Tier | Best for |33|-----------|----------|------|----------|34| Search broad web and GitHub pages for bounty wording | `apify/google-search-scraper` | apify | Fresh discovery by query, platform, amount, or repo |35| Extract readable issue text, comments, and linked pages | `apify/website-content-crawler` | apify | Evidence capture from GitHub issue, PR, Algora, Polar, and docs pages |36| Run custom page extraction when the generic crawler misses structured data | `apify/web-scraper` | apify | GitHub pages, bounty tables, label pages, and custom selectors |3738Prefer Apify-maintained Actors first. Use third-party Actors only when the user accepts the extra trust and cost tradeoff.3940## Discovery Queries4142Use several narrow searches instead of one broad scrape:4344```text45site:github.com "bounty" "$" "Steps to solve" "/attempt"46site:github.com "bounty" "$100" "is:issue" "open"47site:github.com "Polar" "Funding" "issue is completed"48site:github.com "Algora" "Low quality" "PRs will not receive review"49site:github.com "label:\"$50\"" "label:bounty"50```5152For a specific ecosystem, add stack terms:5354```text55FastAPI bounty "$100" site:github.com56Rust bounty Algora site:github.com57Kubernetes "bounty" "$250" site:github.com58```5960## Calling Actors6162### Search Candidates6364```bash65apify actors call apify/google-search-scraper \66 --input '{"queries":"site:github.com \"bounty\" \"$\" \"Steps to solve\" \"/attempt\"","resultsPerPage":10,"maxPagesPerQuery":2,"countryCode":"US","languageCode":"en"}' \67 --json \68 --user-agent apify-awesome-skills/apify-bounty-radar \69 2>/dev/null70```7172### Crawl Candidate Evidence7374```bash75apify actors call apify/website-content-crawler \76 --input '{"startUrls":[{"url":"https://github.com/OWNER/REPO/issues/NUMBER"}],"maxCrawlPages":1,"crawlerType":"cheerio","removeElementsCssSelector":"nav,footer,script,style","saveMarkdown":true}' \77 --json \78 --user-agent apify-awesome-skills/apify-bounty-radar \79 2>/dev/null80```8182### Fetch Results8384```bash85apify datasets get-items DATASET_ID --format json \86 --user-agent apify-awesome-skills/apify-bounty-radar \87 2>/dev/null88```8990## Decision Rules9192Classify every candidate:9394- `claim now`: clear payout, open issue, claim method available, no assignee or exclusive owner, low competition, and realistic scope.95- `inspect deeper`: possible payout but unclear rules, unclear status, or needs repo setup review.96- `monitor`: good project but already assigned, waiting on maintainer confirmation, or crowded with several strong PRs.97- `skip`: closed, archived, deadline passed, duplicate already rewarded, creator-only, private-registration-only, pay-to-bid, unsafe data handling, or requires publishing private config or identity metadata.9899If a candidate says "first comment wins", "assigned only", "creator only", or "only one PR", treat that wording as a hard gate.100101## Evidence Table102103Return concise rows:104105| Field | What to capture |106|-------|-----------------|107| URL | Issue or bounty page |108| Reward | Amount, currency, and whether cash, credits, or tokens |109| Platform | Algora, Polar, maintainer-direct, OpenCollective, or unknown |110| Claim rule | `/attempt`, `/claim`, assignment, registration, or none |111| Competition | Attempts, open PRs, rewarded PRs, comments, assignees |112| Risk | Deadline, demo video, private signup, public metadata, payment region |113| Decision | claim now, inspect deeper, monitor, or skip |114| Next action | Exact next safe step |115116## Cost Guardrails117118- Start with search results only. Do not crawl more than 10 candidate pages without user approval.119- For GitHub issue pages, crawl one page at a time; use GitHub APIs when available for comments and PR state.120- Stop crawling if a page is archived, closed, paid already, or clearly unavailable.121- Never crawl private repositories, account dashboards, payment settings, or pages requiring login unless the user explicitly authorizes that account workflow.122123## Troubleshooting124125- Too many stale hits: add `created:`, `updated:`, current year, platform name, and minimum amount to the search phrase.126- Search misses label-only bounties: search GitHub labels directly with the GitHub API or crawl repository label pages.127- GitHub HTML is noisy: use `website-content-crawler` for page text, then verify state and comments through GitHub APIs before any public action.128- Reward is not cash: label it clearly as credits, tokens, or unknown; do not mix it with confirmed cash payout.129- Existing PRs look weak: competing is only worth it when the new implementation can prove a stronger root cause, broader coverage, or lower review burden.