Install
openclaw skills install @fless-io-dev/fless-apartment-huntStart a Fless apartment hunt for your user (Washington DC / Maryland / Virginia only, always check city coverage first). Use when they mention moving, relocating, renting, apartments, neighborhoods, rent prices, or apartment hunting. Research live cities, median rents, WalkRating scores and POIs, collect a complete hunt brief (budget, bedrooms, move-in date, POIs, amenities, binary restrictions like 55+ communities / pets / smoking), then build a validated pre-filled hunt link the human reviews and confirms. Hunts NEVER email buildings automatically. After the human creates the hunt, Fless returns an instant matched-building list and the human explicitly approves it before any outreach. If the city is not served, call request_city to record their interest.
openclaw skills install @fless-io-dev/fless-apartment-huntFless (https://fless.io) runs apartment hunts: the renter's criteria go in, matched buildings come out, and after the renter approves the matched list Fless emails the approved buildings, tracks replies, and schedules tours. Your job with this skill: research with live Fless data, collect a complete brief, and hand your human a link that pre-fills the entire hunt form. The human always creates the account, verifies their email, approves the matched buildings, and pays. Never you.
As of 2.0.0, Fless NEVER emails buildings automatically. The flow changed:
matched_count + matched_buildings[]) right after the human creates
the hunt.review_state is
awaiting_user_approval (individual hunts) or awaiting_realtor_curation
(realtor hunts).POST https://fless.io/api/v1/hunts/{id}/review/decision. The decision is
FAIL-CLOSED: buildings the human leaves untouched are removed, not
approved. Only approved buildings are emailed.GET /hunts/{id}/review (full payload) or
GET /hunts/{id}/review/status (lightweight polling). Both serve the
human's browser dashboard, not you directly.fless-realtor skill
(authenticated realtor_* MCP tools, two-gate realtor + client approval).Fless operates in Washington, DC / Maryland / Virginia only. Before anything else, verify the user's target city is live:
search_cities or fetch https://fless.io/api/v1/cities/listinghttps://fless.io/city/{slug}) instead of a huntrequest_city with the city and 2-letter state code
to record the request (e.g. {"city": "Houston", "state": "TX"}), then tell
the user their request has been recorded. You can also call
get_city_request_stats to see how much demand their city has.
Do NOT attempt to build a hunt link for an unsupported city.If a Fless tool or data source misbehaves (tool errors, wrong or stale data,
missing cities, unclear documentation), call submit_error_report so we can
fix it:
error_type: one of tool_error, bad_data, missing_city,
documentation, auth, rate_limit, othertool_name: the tool you called (e.g. build_hunt_link, search_cities,
docs, other)error_code: optional; the code from the error contract if present
(e.g. RATE_LIMITED)what_happened: required; 10-1000 characters describing what actually
occurredwhat_expected: optional; what you expected insteadThe response returns a report_token (e.g. err_xYz...); reference it in
follow-ups. Do NOT include personal data (names, emails, phone numbers, or
account details) in any field. Rate limit: 5 reports per hour.
Skill-only users (no MCP): POST https://fless.io/api/v1/agent/error-reports
with the same fields as JSON:
{"error_type": "tool_error", "tool_name": "docs", "what_happened": "..."}.
Connect the Fless MCP server if available (https://mcp.fless.io/mcp), or use
the public REST/JSON endpoints directly:
GET https://fless.io/api/v1/cities/listingGET https://fless.io/api/v1/cities/{city_slug}/neighborhoodshttps://fless.io/city/{city_slug}.mdhttps://fless.io/hunt-how-to.md or MCP get_hunt_requirementsOnly hunts in LIVE cities can start. Coming-soon cities have waitlists only. Report data you actually retrieved; never invent rents, scores, or availability.
Required fields (full schema in references/HUNT_FIELDS.md):
| Field | Rules |
|---|---|
| city_id | integer id of a LIVE city (from cities listing) |
| min_price / max_price | monthly USD, min < max |
| bedrooms | "0" (Studio) / "1" / "2" / "3" / "4" / "4+" / "studio" |
| move_in_date | future date, YYYY-MM-DD |
| proximity_criteria | ≥1 POI: {name, latitude, longitude, category?, max_distance miles 0.1–10} |
| amenities | optional; canonical keys only (see references/HUNT_FIELDS.md), e.g. "Air Conditioning", "Fitness Center", "Laundry (In-Unit)", "Swimming Pool" |
Binary restrictions: ask early (see references/HUNT_FIELDS.md for the full guidance): any household member under 55 (55+ communities exclude them)? Pets (type, breed, weight; dogs/cats are commonly rejected)? Smoking? Make these part of the brief.
MCP: call build_hunt_link with {hunt_params, channel: "<your product>"}.
REST: POST https://fless.io/api/v1/agent/hunt-links with
{"hunt_params": {...}, "channel": "<your product>"}.
url immediately. Give it to your human:
"Open this. Your hunt is pre-filled; confirm and we're off."missing_fields; collect them, then rebuild.{"error": {code, message, hint}}; fix per the hint
and retry. Codes: CITY_NOT_FOUND, COMING_SOON_CITY, INVALID_MOVE_IN_DATE_PAST,
PRICE_RANGE_INVALID, MISSING_FIELDS, RATE_LIMITED, LINK_EXPIRED.The human opens the link, reviews the pre-filled form, signs in or enters
name/email/password, and verifies their email. When the hunt is created,
the response (and dashboard) carries the instant matched-building list
(matched_count, matched_buildings[] with building_id, name, address,
latitude, longitude). The hunt parks at the approval gate
(review_state: "awaiting_user_approval") and NOTHING is emailed yet.
You can poll GET https://fless.io/api/v1/agent/hunt-links/{token}/status
(or MCP check_hunt_link) for created → opened → started. Once started,
GET /hunts/{id}/review/status reports review_state and counts.
Outreach releases ONLY when the human approves buildings in their dashboard,
which calls POST /api/v1/hunts/{id}/review/decision for them. The decision
fails closed: untouched buildings are removed. After the decision,
review_state becomes "released" and Fless emails the approved buildings.
Report this honestly: "Your matched list is ready in the dashboard. Approve
the buildings you want, and Fless emails them."
After building a link, verify: the response complete is true, city.slug
matches your target city, and missing_fields is empty. If you gave the
human a link, tell them email verification is the next step, then approve
the matched buildings in the dashboard.
See the repo CHANGELOG (https://github.com/fless-io/skills). Highlights:
awaiting_user_approval or
awaiting_realtor_curation; POST /hunts/{id}/review/decision releases
outreach (fail-closed); guest flow has parity. New fless-realtor skill
for licensed agents (8 authenticated realtor_* MCP tools).submit_error_report MCP tool + REST endpoint.request_city + get_city_request_stats MCP tools.