← Back to Skills Marketplace
maheshmurthy

Find Funding Opportunities

by Mahesh Murthy · GitHub ↗ · v1.2.0 · MIT-0
cross-platform ⚠ suspicious
254
Downloads
0
Stars
0
Active Installs
1
Versions
Install in OpenClaw
/install find-funding-opportunities
Description
Search the Karma Funding Map for funding programs (grants, hackathons, bounties, accelerators, VC funds, RFPs) via the public API. Use when user says "find g...
README (SKILL.md)

Funding Program Finder

Search the Karma Funding Map for funding programs via the public API.

The registry has 6 program types: grants, hackathons, bounties, accelerators, VC funds, and RFPs. Use "programs" / "opportunities" / "funding" — not just "grants".

For full API parameters, response shape, and known values, see references/api-reference.md.

Workflow

Step 1: Map the User's Request

User says Maps to
"Ethereum programs" ecosystems=Ethereum + ecosystem search strategy
"hackathons" type=hackathon
"hackathons on Ethereum" type=hackathon + ecosystem search strategy
"bounties on Solana" type=bounty + ecosystem search strategy
"bounties over $500" type=bounty&minGrantSize=500
"accelerator programs" type=accelerator
"VCs investing in DeFi" type=vc_fund&name=DeFi
"open RFPs from Optimism" type=rfp&organization=Optimism
"grants and hackathons on Ethereum" type=grant,hackathon + ecosystem search strategy
"DeFi funding on Optimism" name=DeFi + ecosystem search strategy
"programs over $50K" minGrantSize=50000
"funding under $100K" maxGrantSize=100000
"infrastructure" name=infrastructure
"active programs" status=active
"retroactive funding on Optimism" categories=Retroactive%20Funding + ecosystem search strategy
"programs on Karma" onlyOnKarma=true
"what's closing this week" sortField=endsAt&sortOrder=asc&status=active
(no query) Ask what they're looking for

Budget shorthand: K→000, M→000000 (e.g., $50K → 50000, $1M → 1000000).

URL encoding: Values with spaces must be percent-encoded in curl URLs (e.g., categories=Retroactive%20Funding).

Step 2: Ecosystem Search Strategy

If the query has no ecosystem component, skip this step and go to Step 3.

The ecosystems metadata field is often empty — many programs are linked to an ecosystem only via the communities field. Use a two-phase approach:

Phase 1 — Try ecosystems= first: Query with ecosystems={name}. If this returns sufficient results (5+), present them and move to Step 4.

Phase 2 — Enrich with community lookup (only if Phase 1 is sparse): If Phase 1 returned fewer than 5 results, run these two additional queries and merge:

  1. Community UID lookup: fetch all communities from GET /v2/communities?limit=100, find the best match by comparing against community names (case-insensitive, partial match), then query with communityUid={uid}
  2. name={name} — text search on title, universal fallback

Deduplicate all merged results by id before presenting.

Step 3: Build and Execute the Request

Use curl via Bash. CRITICAL: Every request must include the tracking headers below. Never omit them.

Before the first request, generate a tracking ID:

INVOCATION_ID=$(uuidgen)

Every curl call must include these query defaults and tracking headers (see references/api-reference.md for details):

# Query defaults (override sortField=endsAt&sortOrder=asc for deadline queries)
isValid=accepted&limit=10&sortField=updatedAt&sortOrder=desc

# Required headers — include on every request
# Read the version from this skill's frontmatter metadata.version
-H "X-Source: skill:find-funding-opportunities"
-H "X-Invocation-Id: $INVOCATION_ID"
-H "X-Skill-Version: {metadata.version}"
# No ecosystem
curl -s -H "X-Source: skill:find-funding-opportunities" -H "X-Invocation-Id: $INVOCATION_ID" -H "X-Skill-Version: {metadata.version}" \
  "https://gapapi.karmahq.xyz/v2/program-registry/search?isValid=accepted&limit=10&sortField=updatedAt&sortOrder=desc&type=hackathon"

# Ecosystem — Phase 1
curl -s -H "X-Source: skill:find-funding-opportunities" -H "X-Invocation-Id: $INVOCATION_ID" -H "X-Skill-Version: {metadata.version}" \
  "https://gapapi.karmahq.xyz/v2/program-registry/search?isValid=accepted&limit=10&sortField=updatedAt&sortOrder=desc&ecosystems=Ethereum"

# Ecosystem — Phase 2 (only if Phase 1 returned \x3C 5 results)
curl -s -H "X-Source: skill:find-funding-opportunities" -H "X-Invocation-Id: $INVOCATION_ID" -H "X-Skill-Version: {metadata.version}" \
  "https://gapapi.karmahq.xyz/v2/communities?limit=100"
# Match community UID from response, then:
curl -s -H "X-Source: skill:find-funding-opportunities" -H "X-Invocation-Id: $INVOCATION_ID" -H "X-Skill-Version: {metadata.version}" \
  "https://gapapi.karmahq.xyz/v2/program-registry/search?isValid=accepted&limit=10&sortField=updatedAt&sortOrder=desc&communityUid={uid}"
curl -s -H "X-Source: skill:find-funding-opportunities" -H "X-Invocation-Id: $INVOCATION_ID" -H "X-Skill-Version: {metadata.version}" \
  "https://gapapi.karmahq.xyz/v2/program-registry/search?isValid=accepted&limit=10&sortField=updatedAt&sortOrder=desc&name=Ethereum"

Step 4: Format Results

Include the program type in each result. Adapt the detail line based on type:

Found 42 programs (showing top 10):

1. **Optimism Grants** [grant] — Optimism
   Retroactive and proactive funding for Optimism builders
   Budget: $10M | Status: Active
   Apply: https://app.charmverse.io/...

2. **ETHDenver 2026** [hackathon] — Ethereum
   Annual Ethereum hackathon and conference
   Dates: Mar 1–7, 2026 | Deadline: Feb 15, 2026
   Apply: https://ethdenver.com/apply

3. **Rust Smart Contract Audit** [bounty] — Solana
   Audit Solana program for vulnerabilities
   Reward: $5,000 | Difficulty: Advanced
   Apply: https://superteam.fun/...

Showing 10 of 42. Ask for more or narrow your search.

Field Mapping

  • Name: metadata.title (fall back to name)
  • Type label: type in brackets: [grant], [hackathon], [bounty], [accelerator], [vc_fund], [rfp]
  • Ecosystem: metadata.ecosystems joined with , (fall back to communities[0].name)
  • Description: metadata.description truncated to ~120 chars

Type-Specific Detail Line

  • grant: Budget: {programBudget} | Status: {status}
  • hackathon: Dates: {startsAt}–{endsAt} | Deadline: {deadline}
  • bounty: Reward: {programBudget} | Difficulty: {difficulty if available}
  • accelerator: Stage: {stage if available} | Deadline: {deadline}
  • vc_fund: Check size: {minGrantSize}–{maxGrantSize} | Stage: {stage if available}
  • rfp: Budget: {programBudget} | Org: {organizations[0]} | Deadline: {deadline}
  • fallback: Budget: {programBudget} | Status: {status}

Common Fields

  • Deadline: deadline (top-level) formatted as Mon DD, YYYY (or "Rolling" if null)
  • Apply link: submissionUrl (top-level), fall back to metadata.socialLinks.grantsSite or metadata.website or metadata.socialLinks.website (first non-empty)

Edge Cases

Scenario Response
No results If the user specified an ecosystem, run the full ecosystem search strategy (Phase 1 + Phase 2) before giving up. If no ecosystem was specified, broaden non-ecosystem filters first (remove type, budget, or keyword filters). If still none: "No programs found matching your criteria. Try broadening — remove type, ecosystem, or budget filters."
No query Ask: "What kind of funding are you looking for? I can search grants, hackathons, bounties, accelerators, VC funds, and RFPs — filtered by ecosystem, budget, category, or keywords."
"more results" / "page 2" Re-run with page=2
API returns empty programs array Check if filters are too narrow. Suggest removing one filter at a time.
API response missing expected fields Use fallback values: show "N/A" for missing budget, "Rolling" for missing deadline, skip missing description. Never fail on a missing optional field.

Error Handling

Error Cause Action
HTTP 5xx API server issue "The Karma API is temporarily unavailable. Try again in a moment."
HTTP 429 Rate limiting Wait 5 seconds, retry once. If it fails again, tell the user to wait.
Connection timeout Network or API down "Could not reach the Karma API. Check your connection or try again shortly."
Malformed JSON response Unexpected API change "Got an unexpected response from the API. The response format may have changed."
Community lookup returns no match User's ecosystem name doesn't match any community Fall back to ecosystems= and name= queries only. Do not fail — partial results are better than none.

Troubleshooting

Ecosystem search returns 0 results

The user asked for an ecosystem (e.g., "Monad grants") but all 3 queries returned nothing.

  • Verify the ecosystem name against the known values in references/api-reference.md
  • Try a broader name= search with just the keyword
  • The ecosystem may genuinely have no programs listed yet — tell the user

Community UID lookup finds no match

The community list (~48 entries) doesn't contain a match for the user's query.

  • Try partial matching: "OP" should match "Optimism"
  • Try without the community query — ecosystems= and name= may still return results
  • Do not block on this — proceed with the other two queries

Results look stale or incomplete

Programs may have outdated metadata (missing budgets, old deadlines).

  • Present what's available; do not hide results with missing fields
  • Use "N/A" or "Rolling" for missing values
  • Note to the user: "Some programs may have incomplete information"
Usage Guidance
This skill appears to do what it advertises (search a public Karma Funding API) and asks for no secrets, which is good. Before installing, note three things: (1) provenance is unknown — there is no homepage or source listed, so you should prefer skills with a verifiable author or repository; (2) the SKILL.md instructs the agent to call an external API (https://gapapi.karmahq.xyz) and to always include tracking headers — expect telemetry/fingerprinting of requests (X-Invocation-Id groups your calls and X-Skill-Version exposes the skill version); and (3) the instructions call uuidgen and curl but the skill metadata lists no required binaries — confirm your agent environment can run curl and uuidgen or the skill may fail. If you accept network calls to that API and telemetry, this is reasonably coherent; if you need stronger provenance or no telemetry, avoid installing until you can verify the owner or get a version that doesn't require the tracking headers.
Capability Analysis
Type: OpenClaw Skill Name: find-funding-opportunities Version: 1.2.0 The skill is a legitimate tool designed to search for funding opportunities (grants, hackathons, etc.) via the Karma Funding Map API (gapapi.karmahq.xyz). It uses standard system utilities like curl and uuidgen to perform searches and includes telemetry headers (X-Source, X-Invocation-Id) for API tracking, with no evidence of data exfiltration, malicious command execution, or harmful prompt injection.
Capability Assessment
Purpose & Capability
The skill's name/description (search the Karma Funding Map) aligns with the instructions, which only call a public Karma API to search programs and format results.
Instruction Scope
Runtime instructions are narrowly scoped to building/searching queries against https://gapapi.karmahq.xyz and formatting results. They require running curl in Bash and generating a UUID for X-Invocation-Id; the SKILL.md also requires always including tracking headers. The instructions do not read user files or request unrelated credentials. However, the skill insists 'Never omit' tracking headers (telemetry) and refers to using uuidgen/curl even though no required binaries are declared.
Install Mechanism
There is no install spec and no code to write to disk (instruction-only). That lowers risk; the skill simply instructs the agent to run curl commands at runtime.
Credentials
The skill declares no environment variables or credentials (good). It does, however, require runtime network access to gapapi.karmahq.xyz and sends non-sensitive tracking headers (X-Source, X-Invocation-Id, X-Skill-Version). This is proportionate to the stated purpose but is a telemetry/fingerprinting consideration.
Persistence & Privilege
The skill does not request persistent/always-on presence and has no install-time actions that would modify other skills or system settings.
How to Use
  1. Make sure OpenClaw is installed (local or Docker)
  2. Run the install command in chat: /install find-funding-opportunities
  3. After installation, invoke the skill by name or use /find-funding-opportunities
  4. Provide required inputs per the skill's parameter spec and get structured output
Version History
v1.2.0
- Major documentation upgrade: SKILL.md now provides detailed mapping of user queries to API search parameters, including type, ecosystem, budget, category, and other filters. - Added robust 2-phase ecosystem search strategy to handle incomplete metadata, ensuring better match rates for ecosystem-related queries. - Expanded instructions for building API requests, including mandatory tracking headers and result formatting guidelines for all program types. - Clarified field mappings and introduced type-specific result formatting for grants, hackathons, bounties, accelerators, VC funds, and RFPs. - Added edge case handling for scenarios such as no results or vague queries, including user prompts for better guidance.
Metadata
Slug find-funding-opportunities
Version 1.2.0
License MIT-0
All-time Installs 0
Active Installs 0
Total Versions 1
Frequently Asked Questions

What is Find Funding Opportunities?

Search the Karma Funding Map for funding programs (grants, hackathons, bounties, accelerators, VC funds, RFPs) via the public API. Use when user says "find g... It is an AI Agent Skill for Claude Code / OpenClaw, with 254 downloads so far.

How do I install Find Funding Opportunities?

Run "/install find-funding-opportunities" in the OpenClaw or Claude Code chat to install it in one step — no extra setup required.

Is Find Funding Opportunities free?

Yes, Find Funding Opportunities is completely free, licensed under MIT-0. You can download, install and use it at no cost.

Which platforms does Find Funding Opportunities support?

Find Funding Opportunities is cross-platform and runs anywhere OpenClaw / Claude Code is available (cross-platform).

Who created Find Funding Opportunities?

It is built and maintained by Mahesh Murthy (@maheshmurthy); the current version is v1.2.0.

💬 Comments