Draw Image
ai-sns/ai-sns
Generate an image from a text prompt using an OpenAI-compatible image generation API (gpt-image-1-mini or compatible).
Make your agent sell websites to local businesses on autopilot.
$ npx skills add LeoYeAI/openclaw-master-skills --skill unloopa-api -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install LeoYeAI/openclaw-master-skills unloopa-api --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/LeoYeAI/openclaw-master-skills.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/unloopa-api .claude/skills/unloopa-api && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "unloopa-api" agent skill from https://github.com/LeoYeAI/openclaw-master-skills/tree/main/skills/unloopa-api into .claude/skills/unloopa-api/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "unloopa-api", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/LeoYeAI/openclaw-master-skills/tree/main/skills/unloopa-apiType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add LeoYeAI/openclaw-master-skills --skill unloopa-api -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install LeoYeAI/openclaw-master-skills unloopa-api --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/LeoYeAI/openclaw-master-skills.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skills/unloopa-api .agents/skills/unloopa-api && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "unloopa-api" agent skill from https://github.com/LeoYeAI/openclaw-master-skills/tree/main/skills/unloopa-api into .agents/skills/unloopa-api/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "unloopa-api", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add LeoYeAI/openclaw-master-skills --skill unloopa-api -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install LeoYeAI/openclaw-master-skills unloopa-api --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/LeoYeAI/openclaw-master-skills.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skills/unloopa-api .cursor/skills/unloopa-api && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "unloopa-api" agent skill from https://github.com/LeoYeAI/openclaw-master-skills/tree/main/skills/unloopa-api into .cursor/skills/unloopa-api/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "unloopa-api", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/LeoYeAI/openclaw-master-skills.git --path skills/unloopa-api--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add LeoYeAI/openclaw-master-skills --skill unloopa-api -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install LeoYeAI/openclaw-master-skills unloopa-api --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/LeoYeAI/openclaw-master-skills.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skills/unloopa-api .gemini/skills/unloopa-api && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "unloopa-api" agent skill from https://github.com/LeoYeAI/openclaw-master-skills/tree/main/skills/unloopa-api into .gemini/skills/unloopa-api/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "unloopa-api", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install LeoYeAI/openclaw-master-skills unloopa-apiInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add LeoYeAI/openclaw-master-skills --skill unloopa-api -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/LeoYeAI/openclaw-master-skills.git skills-src && mkdir -p .github/skills && cp -r skills-src/skills/unloopa-api .github/skills/unloopa-api && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "unloopa-api" agent skill from https://github.com/LeoYeAI/openclaw-master-skills/tree/main/skills/unloopa-api into .github/skills/unloopa-api/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "unloopa-api", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add LeoYeAI/openclaw-master-skills --skill unloopa-api -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install LeoYeAI/openclaw-master-skills unloopa-api --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/LeoYeAI/openclaw-master-skills.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skills/unloopa-api .opencode/skills/unloopa-api && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "unloopa-api" agent skill from https://github.com/LeoYeAI/openclaw-master-skills/tree/main/skills/unloopa-api into .opencode/skills/unloopa-api/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "unloopa-api", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
unloopa-apiMake your agent sell websites to local businesses on autopilot.
Unloopa API is an agent skill from LeoYeAI/openclaw-master-skills. Make your agent sell websites to local businesses on autopilot. Finds leads from Google Maps, builds a custom AI website for each one, sends outreach emails, and can even call them. Use when the user wants to find leads, generate websites, send emails, or make voice calls.
Its SKILL.md is about 4.6k tokens, which your agent loads only when the skill is triggered. The skill folder holds 1 other file (for example `_meta.json`).
It sits in Backend & APIs. It works with Google Maps Platform. The repository describes itself as: 🧠 Curated collection of 1209+ best OpenClaw skills — weekly updated by MyClaw.ai. The licence is MIT.
4 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit e5199b5. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
No scripts in the folder and no shell commands in SKILL.md (its code samples are json).
From the folder's file list and the shell code blocks in SKILL.md.
Hosts in commands or code, which the agent is likely to contact:
whop.comdashboard.unloopa.comunlora.comFrom URLs in SKILL.md, links to its own repository left out.
Names these keys or tokens, usually read from environment variables:
UNLOOPA_API_KEYFrom names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Unloopa API loads about 4.6k tokens when it runs. Until then it costs about 71 tokens; SKILL.md has 1,435 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from LeoYeAI/openclaw-master-skills at commit e5199b5, republished under its MIT licence (© LeoYeAI). 1,435 words, ~4,567 tokens.
.claude/skills/unloopa-api/SKILL.md (or your agent's skills folder). This skill also uses 1 other file; get the full folder from GitHub.You control the Unloopa platform through its REST API. All requests go to https://dashboard.unloopa.com/api/v1/ with Bearer token authentication.
Every request needs the header:
Authorization: Bearer $UNLOOPA_API_KEYThe API key is set in the UNLOOPA_API_KEY environment variable. Keys start with unlpa_live_.
If the user hasn't configured their key yet, tell them:
export UNLOOPA_API_KEY=unlpa_live_...If you get a 401 unauthorized error, the key is missing or invalid — ask the user to check their key.
Before doing anything else, call GET /quota to discover:
This single call tells you everything about what the user can and can't do. Adapt your behavior based on the response:
| quota field | What it means |
|---|---|
voice_enabled: false | Don't offer voice calling — they need Pro plan. Share purchase_links.upgrade |
video_enabled: false | Don't offer video generation — they need Pro plan |
voice_credits: 0 | Can't make calls — share purchase_links.voice_credits |
websites.remaining: 0 | Can't generate leads — quota resets at resets_at |
All errors return:
{ "error": { "code": "error_code", "message": "Human-readable message", "details": {} } }Error codes: unauthorized (401), invalid_input (400), not_found (404), plan_required (403), insufficient_credits (402), quota_exceeded (429), rate_limited (429), setup_required (400), limit_reached (400), invalid_state (400), internal_error (500).
When you get plan_required (403), share the upgrade link from quota. When you get insufficient_credits (402), share the credit purchase links. When rate limited, check the Retry-After header (seconds).
The /command endpoint runs the entire pipeline automatically: scrape leads → generate websites → enrich emails → send outreach. Just describe what you want.
1. GET /quota → check websites.remaining > 0
2. POST /command → submit natural language command (full pipeline runs automatically)
3. GET /jobs/{job_id} → poll every 5-10s until status=completed
4. GET /leads?job_id={job_id} → view generated leads with websites, emails, etc.1. GET /outreach/status → verify configured=true, remaining_today > 0
2. GET /leads?has_email=true → find leads with emails
3. GET /outreach/templates → pick a template
4. POST /outreach/send → queue emailsIf configured=false, tell the user to connect an email account at the setup_url in the response.
Skip this workflow entirely if voice_enabled=false in /quota. Tell the user they need Pro and share the upgrade link.
Prerequisites: voice_enabled=true + voice_credits > 0 + at least 1 phone number + at least 1 voice agent.
1. GET /quota → voice_enabled? voice_credits > 0?
If voice_credits=0 → share purchase_links.voice_credits
2. GET /phone-numbers → count > 0? (max 3)
If empty → POST /phone-numbers/search + POST /phone-numbers/buy
3. GET /voice/agents → count > 0? (max 3)
If empty → POST /voice/agents (create one)
4. POST /voice/call → single call, OR:
5. POST /voice/campaigns → bulk campaign (starts as draft)
6. PATCH /voice/campaigns/{id} → action=activate, then action=triggerThe /command endpoint now handles steps 1-3 automatically. Voice calling is the only manual step.
1. GET /quota → know the plan, adapt accordingly
2. POST /command → poll /jobs/{id} → GET /leads (scrape + websites + emails + outreach all automatic)
3. Voice (Pro only): /phone-numbers → /voice/agents → /voice/campaignsSubmit a natural language lead generation command. The API automatically runs the full pipeline: scrape → generate websites → enrich emails/socials → send outreach. No need to mention each step in the command.
Body:
{
"command": "Find 50 plumbers in Miami",
"max_results": 50,
"with_video": false,
"with_vsl": false
}command (required, string, max 1000 chars) — just describe the niche and location. Any number mentioned in the command is ignored — use max_results to control lead count.max_results (optional, 1-100, default: 100, or 10 when with_video/with_vsl is true)with_video (optional, bool, Pro plan only)with_vsl (optional, bool, Pro plan only)Default behavior: The API always overrides what's in the command text. It scrapes up to max_results leads (default 100), generates a website for each, finds email addresses, enriches social profiles, and sends outreach emails — all automatically. Numbers in the command like "Find 15 plumbers" are ignored; use max_results instead.
Response: { job_id, status: "processing", defaults: { max_results, generate_websites, enrich_emails, send_outreach, with_video, with_vsl }, quota: { used, limit, remaining } }
List submitted commands.
Query: ?limit=20&offset=0 (limit max 100)
Response: { jobs: [{ job_id, command, intent, status, error, created_at, updated_at }], total, limit, offset }
Poll a job for progress and results.
Response:
{
"job_id": "uuid",
"status": "processing|completed|failed",
"progress": 75,
"current_step": "Generating websites...",
"steps": [{ "name": "scraping", "status": "completed", "message": "Found 50 leads", "count": 50 }],
"result": {
"websites": [{ "id": "uuid", "url": "https://...", "business_name": "...", "city": "...", "industry": "..." }],
"leads_scraped": 50,
"emails_sent": 0
},
"error": null
}Poll every 5-10 seconds. Jobs take 30s to 5 minutes depending on count and video.
List and filter leads.
Query params (all optional):
limit (1-100, default 50), offset (default 0)city — partial match (e.g. "miami")industry — partial match (e.g. "plumber")has_phone=true — only leads with phone numbershas_email=true — only leads with email addressesmin_rating — minimum Google rating (e.g. 4.0)min_reviews — minimum review countjob_id — leads from a specific commandsearch — free text search across name, city, industrycreated_after — ISO date (e.g. "2025-01-15")created_before — ISO datehas_website=true — only leads with generated website URLshas_video=true — only leads with videovideo_status — pending|generating|completed|failedResponse:
{
"leads": [{
"id": "uuid",
"business_name": "Acme Plumbing",
"city": "Miami",
"industry": "Plumber",
"phone": "+13055551234",
"email": "info@acme.com",
"rating": 4.8,
"reviews": 127,
"url": "https://unlora.com/acme-plumbing-miami",
"language": "en",
"video_url": "https://...",
"video_status": "completed",
"vsl_url": "https://...",
"vsl_status": "completed",
"socials": { "instagram": "...", "facebook": "...", "linkedin": "...", "twitter": "..." },
"created_at": "2025-01-15T..."
}],
"total": 50, "limit": 50, "offset": 0
}Full lead detail including existing website analysis.
Response: Same fields as list plus:
slug — URL slugexisting_website: { url, pagespeed_score, load_time, mobile_optimized } or nullSimpler list of generated websites.
Query: ?limit=20&offset=0
Response: { websites: [{ id, url, slug, business_name, city, industry, phone, email, language, video_url, vsl_url, created_at }], total, limit, offset }
Check plan, usage, credits, and purchase links.
Response:
{
"plan": "pro",
"plan_status": "active",
"websites": { "used": 150, "limit": 5000, "remaining": 4850 },
"videos": { "used": 0, "limit": 200, "remaining": 200 },
"voice_credits": 45,
"voice_enabled": true,
"video_enabled": true,
"resets_at": "2025-02-01T00:00:00.000Z",
"purchase_links": {
"voice_credits": {
"50_credits_$10": "https://whop.com/checkout/plan_xBEWrVWZ8MRvM/",
"200_credits_$35": "https://whop.com/checkout/plan_ucYBrssGb4E2G/",
"500_credits_$75": "https://whop.com/checkout/plan_zTX2bQyWLCqlx/"
},
"upgrade": "https://whop.com/unloopa/"
}
}Check email configuration, daily capacity, DNS health.
Response:
{
"configured": true,
"accounts": [{
"id": "uuid",
"email": "outreach@company.com",
"display_name": "Company",
"daily_limit": 25,
"sent_today": 10,
"remaining_today": 15,
"warmup_enabled": true,
"warmup_day": 14,
"health": { "score": 85, "status": "good", "checked_at": "2025-01-15T..." },
"created_at": "2025-01-01T..."
}],
"summary": {
"total_accounts": 1,
"total_daily_capacity": 25,
"total_sent_today": 10,
"total_remaining_today": 15,
"pending_in_queue": 5,
"accounts_with_health_issues": 0
},
"setup_url": "https://dashboard.unloopa.com/settings?tab=email"
}New SMTP accounts warm up over 4 weeks: 5/day -> 10/day -> 15/day -> 25/day.
List prebuilt and custom email templates.
Response: { templates: [{ id, name, subject, body, is_custom: false, is_default: true, language }], custom_templates: [{ id, name, subject, body, is_custom: true, is_default, language }] }
Templates support placeholders: {{business_name}}, {{city}}, {{industry}}, {{website_url}}, {{video_url}} (Pro only).
Create custom email template.
Body:
{
"name": "Miami Pitch",
"subject": "{{business_name}} - New Website Ready",
"body": "Hi! I built a website for {{business_name}} in {{city}}...",
"language": "en",
"is_default": true
}Required: name, subject, body.
Update a custom template. Only custom templates can be edited.
Body: { name?, subject?, body?, language?, is_default? }
Delete a custom template.
Send emails to leads.
Body:
{
"lead_ids": ["uuid1", "uuid2"],
"template_id": "uuid",
"custom_subject": "Optional override",
"custom_body": "Optional override"
}lead_ids (required, 1-100 UUIDs)template_id (optional if custom_subject + custom_body provided)Response: { emails_queued, emails_waiting_for_video, skipped_duplicates, failed, manual_outreach: [] }
Requires SMTP configured (check /outreach/status first). Duplicate detection prevents re-sending.
List active phone numbers. Pro plan required.
Response: { numbers: [{ id, phone_number, area_code, locality, region, country, monthly_cost_cents, created_at }], count: 2, limit: 3 }
Max 3 phone numbers. Check count vs limit before buying.
Search available numbers by area code. Pro plan required.
Body: { "area_code": "305", "country": "US" }
area_code (required, 3 digits)country (optional, default "US")Response: { numbers: [{ phone_number: "+13055551234", friendly_name, locality, region }] }
Purchase a phone number. Pro plan required. $1/month per number.
Body: { "phone_number": "+13055551234" }
Must be E.164 format from search results.
Response: { number: { id, phone_number, area_code, monthly_cost_cents, created_at } }
Release a phone number. Pro plan required.
Response: { success: true }
List voice agents. Pro plan required.
Response: { agents: [{ id, name, voice_id, voice_name, elevenlabs_agent_id, has_script, has_first_message, created_at }], count: 1, limit: 3 }
Max 3 agents.
Create a voice agent. Pro plan required.
Body:
{
"name": "Sales Agent",
"voice_id": "cjVigY5qzO86Huf0OWal",
"voice_name": "Eric",
"script": "You are a friendly sales rep calling {{business_name}} in {{city}}...",
"first_message": "Hi there, do you have just a moment?",
"agent_config": { "stability": 0.3, "similarityBoost": 0.85 }
}Required: name, voice_id, script.
Scripts support dynamic variables: {{business_name}}, {{city}}, {{industry}}, {{website_url}} — auto-populated from lead data during calls.
Update a voice agent. Syncs changes to ElevenLabs automatically.
Body: { name?, voice_id?, voice_name?, script?, first_message?, agent_config? }
Delete a voice agent. Also removes from ElevenLabs.
Make a single outbound call. Costs 1 voice credit. Pro plan required.
Body:
{
"agent_id": "uuid",
"phone_number": "+13055551234",
"dynamic_variables": { "business_name": "Acme", "city": "Miami", "industry": "Plumbing", "website_url": "https://..." }
}Required: agent_id, phone_number.
Response: { call_id, conversation_id, status: "initiated", phone_number }
List voice calls with filters. Pro plan required.
Query: ?limit=50&offset=0&campaign_id=uuid&status=completed&outcome=interested
status: pending, queued, in_progress, completed, failed, cancelledoutcome: interested, not_interested, voicemail, no_answer, callbackResponse: { calls: [{ id, campaign_id, business_name, phone_number, status, outcome, outcome_notes, duration_secs, transcript, analysis, started_at, completed_at, created_at }], total, limit, offset }
Full call detail with transcript and analysis.
Response: { call_id, business_name, phone_number, status, outcome, outcome_notes, duration_secs, transcript, analysis, started_at, completed_at, created_at }
List voice campaigns with stats. Pro plan required.
Response:
{
"campaigns": [{
"id": "uuid",
"name": "Miami Plumbers",
"status": "active",
"stats": { "total": 50, "connected": 30, "interested": 8, "not_interested": 15, "no_answer": 7, "failed": 0, "avg_duration_secs": 45 },
"created_at": "...", "updated_at": "..."
}]
}Create a calling campaign. Starts as draft. Pro plan + voice credits required.
Body:
{
"name": "Miami Plumbers Campaign",
"phone_number_id": "uuid",
"agent_id": "uuid",
"lead_filter": { "city": "Miami", "industry": "plumber" },
"timezone": "America/New_York",
"calling_window_start": "09:00",
"calling_window_end": "17:00",
"calling_days": ["mon", "tue", "wed", "thu", "fri"],
"calls_per_hour": 10,
"max_calls": 50
}Required: name, phone_number_id, and either agent_id OR voice_id + script.
Lead selection: provide lead_ids (array of UUIDs) or lead_filter (dynamic). Only leads with phone numbers are included.
Response: { campaign: { id, name, status: "draft", leads_count, callable_leads, created_at } }
Campaign detail with full config and stats.
Response includes: id, name, status, script, script_version, first_message, voice_id, voice_name, timezone, calling_window, calling_days, calls_per_hour, max_calls, stats (with pending count), timestamps.
Control campaign lifecycle or update fields.
Lifecycle actions (body: { "action": "..." }):
activate — draft/paused -> activepause — active -> pausedcancel — any -> completed (cancels pending calls)trigger — active campaign: initiate up to 10 pending calls immediately. Each call costs 1 voice credit. Optional: { "action": "trigger", "limit": 5 }Field updates (draft/paused only, body: { "updates": {...} }):
Trigger response: { triggered: 5, calls: [{ id, business_name, conversation_id }] }
trigger action initiates up to 10 calls at a time, costing 1 credit each{{business_name}}, etc.) are auto-populated from lead datawith_video, with_vsl) are Pro plan only© LeoYeAI, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 1 other file in skills/unloopa-api of LeoYeAI/openclaw-master-skills.
Open the folder on GitHubat commit e5199b5
Unloopa API next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Unloopa API this skillLeoYeAI/openclaw-master-skills | 2.2k | — | ~4.6k | Automated safety check: Pass | MIT | |
| Draw Imageai-sns/ai-sns | 338 | — | ~778 | Automated safety check: Pass | MIT | |
| Android Maps Ktxgooglemaps/android-maps-ktx | 360 | — | ~897 | Automated safety check: Pass | Apache-2.0 | |
| Releasegeoman-io/maplibre-geoman | 127 | — | ~1.2k | Automated safety check: Pass | MIT | |
| MCP Google Map Projectcablate/mcp-google-map | 469 | — | ~774 | Automated safety check: Pass | MIT | |
| Getting StartedGoogleCloudPlatform/race-condition | 234 | — | ~1k | Automated safety check: Notes | Custom licence |
ai-sns/ai-sns
Generate an image from a text prompt using an OpenAI-compatible image generation API (gpt-image-1-mini or compatible).
googlemaps/android-maps-ktx
Provides idiomatic Kotlin extension (KTX) patterns, reactive Flow event streams, and multi-subscriber shareIn rules for Google Maps SDK for Android and its Utility Library.
geoman-io/maplibre-geoman
Cut a release of the free maplibre-geoman / mapbox-geoman packages (bump versions, finalize CHANGELOG, tag, publish to npm).
cablate/mcp-google-map
Project knowledge for developing and maintaining @cablate/mcp-google-map.
GoogleCloudPlatform/race-condition
Guides setup of the Race Condition project from clone to running simulation.
growthenginenowoslawski/coldoutboundskills
Interactive loop that builds and tunes an AI prompt for evaluating whether a company fits a client's ICP.
LeoYeAI/openclaw-master-skills
Manages pipelines on a DevOps quality and efficiency platform through its OpenAPI: list workspaces and templates, create, update, run and cancel pipelines, and read run records.
LeoYeAI/openclaw-master-skills
Patches OpenClaw's Feishu extension so an edited document triggers an isolated agent session that reads the doc and replies inline, turning it into a live chat space.
LeoYeAI/openclaw-master-skills
Multi-context memory management system for OpenClaw agents with group-isolated storage, global shared memory, workspace organization, and group-specific skills isolation.
LeoYeAI/openclaw-master-skills
Runs a brand's AI-search visibility work end to end: diagnosing how AI platforms represent it, repositioning it, producing AI-optimized content and monitoring ongoing mentions.
LeoYeAI/openclaw-master-skills
Installs and authenticates the gws CLI, then automates Gmail, Drive, Sheets, Calendar, Docs, Chat and Tasks with ready-made recipes, persona bundles and security audits.
LeoYeAI/openclaw-master-skills
Runs four advisor roles, a fitness coach, nutritionist, data analyst and TCM practitioner, to build a health profile and track workouts, diet and wellness over time.
Works with
Categories
Make your agent sell websites to local businesses on autopilot. Unloopa API is an agent skill from LeoYeAI/openclaw-master-skills. Make your agent sell websites to local businesses on autopilot.
Unloopa API fits situations like: the user wants to find leads; generate websites; make voice calls.
Run `npx skills add LeoYeAI/openclaw-master-skills --skill unloopa-api -a claude-code`. Or copy the skill folder (skills/unloopa-api in LeoYeAI/openclaw-master-skills) into .claude/skills/unloopa-api in your project. Claude Code loads it when a task matches its description.
Run `npx skills add LeoYeAI/openclaw-master-skills --skill unloopa-api -a codex`. Or copy the skill folder (skills/unloopa-api in LeoYeAI/openclaw-master-skills) into .agents/skills/unloopa-api in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add LeoYeAI/openclaw-master-skills --skill unloopa-api -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/unloopa-api, .gemini/skills/unloopa-api, .github/skills/unloopa-api and .opencode/skills/unloopa-api in your project.
Going by SKILL.md and its folder, Unloopa API needs credentials named UNLOOPA_API_KEY. Our summary lists: A credential in UNLOOPA_API_KEY.
SKILL.md names 3 domains. In commands or code: whop.com, dashboard.unloopa.com and unlora.com; the agent is likely to contact these when it follows the instructions. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Unloopa API is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 4.6k tokens (SKILL.md is roughly 18k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Unloopa API: Draw Image (ai-sns/ai-sns, 338 stars), Android Maps Ktx (googlemaps/android-maps-ktx, 360 stars), Release (geoman-io/maplibre-geoman, 127 stars) and MCP Google Map Project (cablate/mcp-google-map, 469 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
LeoYeAI (a GitHub user) maintains it in LeoYeAI/openclaw-master-skills, which has 2,160 GitHub stars. The repository holds 1,235 skills in this directory. The repository was last updated on July 20, 2026.
Source: LeoYeAI/openclaw-master-skills on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.