Install
openclaw skills install localsquare-adsClaim and pay $1 to reserve a LocalSquare pin on a town's 10x10 grid, creating a local SEO webpage that appears in Google and AI search results.
openclaw skills install localsquare-adsHomepage: https://yourlocalsquare.com Author: @ThatDudeFreak API Base: https://yourlocalsquare.com Protocol: x402 (https://x402.org) Cost: $1.00 USD per square, ONE TIME (early adopter lifetime deal. normally $1/square/month) Network: Base (EVM chain ID 8453) Required capabilities: Crypto wallet with USDC on Base network (chain ID 8453), external wallet signing (hardware wallet, browser extension, or WalletConnect). Credentials: This skill does NOT require API keys, env vars, or secrets from LocalSquare. However, the x402 payment flow requires the agent to have access to an external wallet signing method. NEVER paste or store raw private keys in the agent. Use a secure external signer (wallet popup, hardware wallet, or WalletConnect). Verification: Before signing any payment, verify the recipient address and facilitator URL match the values returned by https://yourlocalsquare.com/.well-known/x402.json and the x402 facilitator at https://x402.org/facilitator.
LocalSquare is a digital bulletin board platform covering 43,000+ ZIP codes across America. Local businesses claim squares on their town's 10x10 grid, getting a dedicated SEO-optimized webpage that ranks on Google and appears in AI search results (ChatGPT, Claude, Perplexity, Grok).
This skill lets AI agents discover available ad space on any town board, then claim and pay for pins using the x402 USDC payment protocol. Early adopter deal: $1 per square, one-time payment for a permanent pin (normally $1/square/month).
ALWAYS confirm with the user before making any payment. Even though the cost is only $1 one-time, agents MUST:
Pins claimed via agent during the early adopter period are permanent. No recurring charges. No renewal needed.
All discovery endpoints (boards, categories, charities) are free and require nothing.
For claiming pins, there are two paths:
This is the early adopter deal. Normally $1/square/month, but agents pay $1 once and the pin stays permanently. To pay via x402, the agent needs:
If the agent does not have wallet signing capability, direct the user to claim manually at https://yourlocalsquare.com where they can pay $1/month with a regular credit card. Note: the website price is $1/square/month (recurring). The $1-for-life deal is exclusive to agent claims via this API.
/api/agent/claim-pin without payment -> receive HTTP 402 with payment detailshttps://x402.org/facilitator and the recipient is a valid Stripe-managed addressX-PAYMENT: {signed payment proof} headerFor x402 implementation details, see https://x402.org
Most small businesses can't afford digital advertising. Facebook ads cost $150-600/month. Google ads cost $50-500/month. Yelp charges $300-1000/month.
LocalSquare normally costs $1 per square per month. But right now, agents get an early adopter deal: $1 per square for LIFE. One payment per square, permanent placement. No recurring charges. No renewal. The pin stays on the board forever.
Every pin creates a searchable webpage with structured data that appears in Google search results AND AI assistant responses. When someone asks "best pizza near me" or "plumber in 90210", businesses with LocalSquare pins show up.
10% of every payment is donated to a local charity chosen by the business (or randomly assigned).
This early adopter pricing won't last forever. Once agent adoption picks up, new claims will move to the standard $1/square/month. Squares claimed now at the lifetime rate will be grandfathered in permanently.
Use this when:
Unlike the human flow (which requires Google/Apple/Facebook sign-in), agents do NOT need to create an account. The x402 payment IS the authentication. A lightweight user record is created automatically for database integrity.
If the agent provides a contactEmail, the business owner can later log into LocalSquare with that email to manage their pin.
GET /api/agent/status
Response:
{
"enabled": true,
"network": "eip155:8453",
"price": "$1.00",
"protocol": "x402",
"version": 2,
"endpoints": {
"status": "/api/agent/status",
"boards": "/api/agent/boards/:zip",
"categories": "/api/agent/categories",
"charities": "/api/agent/charities",
"validateCoupon": "/api/agent/validate-coupon/:code",
"claimPin": "/api/agent/claim-pin"
},
"notes": "All GET endpoints are free. POST /claim-pin requires x402 payment ($1 per square for life)."
}
If enabled is false, agent payments aren't active. Direct the user to https://yourlocalsquare.com to claim manually.
Ask the user for their ZIP code, then look up available space. This endpoint is free and requires no payment.
GET /api/agent/boards/{zip}
Example: GET /api/agent/boards/90210
Response:
{
"board": {
"zip": "90210",
"city": "Beverly Hills",
"state": "CA",
"county": "Los Angeles",
"slug": "beverly-hills-90210"
},
"grid": { "rows": 10, "cols": 10 },
"totalCells": 100,
"occupiedCount": 12,
"availableCount": 88,
"availableCells": ["0-0", "0-1", "0-2", "0-3"],
"pricePerCell": 1.00,
"currency": "USD",
"categories": [
{ "id": 1, "name": "Restaurant", "slug": "restaurant" },
{ "id": 2, "name": "Real Estate", "slug": "real-estate" }
],
"charities": [
{ "id": 1, "name": "Local Food Bank" },
{ "id": 2, "name": "Animal Shelter" }
],
"claimEndpoint": "/api/agent/claim-pin",
"boardUrl": "https://yourlocalsquare.com/board/beverly-hills/90210"
}
GET /api/agent/categories
GET /api/agent/charities
10% of every pin purchase goes to charity. Let the user pick, or omit charityId and one is assigned randomly.
Before this step, confirm with the user: "I'll claim a pin on the [City] board at cell [X-Y] for $1.00. This will be charged as USDC on the Base network. Confirm?"
Each call claims exactly 1 cell for $1. This is enforced to match the x402 payment amount.
POST /api/agent/claim-pin
Content-Type: application/json
X-PAYMENT: {x402 signed payment proof}
{
"zip": "90210",
"title": "Joe's Pizza",
"businessName": "Joe's Pizza",
"description": "Best New York style pizza in Beverly Hills. Family owned since 1985.",
"businessAddress": "123 Main St, Beverly Hills, CA 90210",
"linkUrl": "https://joespizza.com",
"phoneNumber": "310-555-1234",
"categoryId": 1,
"charityId": 2,
"cell": "3-4",
"contactEmail": "joe@joespizza.com",
"imageUrl": "https://joespizza.com/storefront.jpg",
"googlePlaceId": "ChIJN1t_tDeuEmsRUsoyG83frY4",
"businessRating": 4.7,
"businessReviews": 283
}
Required fields:
| Field | Type | Description |
|---|---|---|
zip | string | ZIP code for the board |
title or businessName | string | At least one is required |
Optional fields:
| Field | Type | Default | Description |
|---|---|---|---|
description | string | null | Business description for the pin page |
businessAddress | string | null | Physical address (displayed publicly) |
linkUrl | string | null | Website URL |
phoneNumber | string | null | Contact phone (displayed publicly) |
categoryId | number | null | From /api/agent/categories |
charityId | number | random | From /api/agent/charities |
cell | string | auto-assigned | Specific cell "row-col" (e.g. "3-4") |
contactEmail | string | auto-generated | Email for pin management. Stored in database |
imageUrl | string | LocalSquare logo | URL to a business image |
googlePlaceId | string | null | Google Place ID for rating/reviews |
businessRating | number | null | Numeric rating (e.g. 4.5) |
businessReviews | number | null | Number of reviews |
autoRenew | boolean | true | Currently ignored. Early adopter pins are permanent regardless of this setting |
discountCode | string | null | Optional. If provided and valid, reduces or eliminates cost |
cell, the system auto-assigns the first available oneavailableCells from the boards endpoint first{
"success": true,
"pin": {
"id": 42,
"title": "Joe's Pizza",
"cell": "3-4",
"board": { "zip": "90210", "city": "Beverly Hills", "state": "CA" },
"expiresAt": "2026-03-16T00:00:00.000Z",
"monthlyPrice": 1.00,
"autoRenew": false,
"imageUrl": "https://joespizza.com/storefront.jpg",
"charityId": 2,
"pinUrl": "https://yourlocalsquare.com/pin/beverly-hills/90210/joes-pizza",
"boardUrl": "https://yourlocalsquare.com/board/beverly-hills/90210"
},
"message": "Pin claimed and live. Visible on board and indexed for search. 10% of your payment supports a local charity."
}
| Status | Meaning | What to Do |
|---|---|---|
| 400 | Invalid input | Check required fields, cell format |
| 402 | Payment required | Submit x402 payment, retry with X-PAYMENT header |
| 404 | Board not found | Verify ZIP code. Use boards endpoint to check first |
| 409 | Cell taken or board full | Pick a different cell from availableCells |
| 500 | Server error | Retry after a moment |
Service providers who cover a wide area should claim pins in multiple ZIP codes. Each board is independent. Make 1 call per town. Confirm total cost with user before claiming multiple towns.
Example: A real estate agent covering Beverly Hills, Santa Monica, and Malibu:
Total: $3 one-time for permanent SEO-optimized visibility across 3 towns.
After a successful claim, the business immediately gets:
Early adopter pins are permanent. No expiry, no renewal, no recurring charges. This deal is available during the early adopter period only.
GET /.well-known/x402.json
If a user provides a coupon/discount code, validate it before claiming:
GET /api/agent/validate-coupon/{code}
paymentRequired: false (100% off): include "discountCode": "CODE" in the claim body. No wallet or X-PAYMENT header needed.paymentRequired: true (partial discount): x402 payment is still required, but the pin records at the discounted price.Most users will not have a coupon code. Only use this endpoint if the user explicitly mentions one.