Real estate
Idealista
Your listings and leads on Idealista, managed by an agent.
14 endpoints
Your AI agent logs maintenance requests as work orders, dispatches them to vendors once you approve, and pulls the ledgers and reports behind your calls. Sign in to AppFolio once in your own Cloud Browser. No API credentials and no developer setup, and it works inside ChatGPT and Claude.
10 tools Read, work orders write
AppFolio announced a Realm-X connector for Claude on 9 Jun 2026 (checked 6 Nov 2026), and its pricing page lists an AppFolio API on Plus (read only) and Max (read/write). Cotlet runs 10 AppFolio tools hosted, over MCP for agents and REST for scripts, in your own login: no API credentials, no developer setup, available in ChatGPT and Claude, running 24/7, with one account for many apps.
| What you need | Realm-X connector | AppFolio API | Cotlet |
|---|---|---|---|
| Read work orders, vendors and properties | Through a Realm-X job | Yes | Yes |
| Create, assign and schedule work orders | Through a Realm-X job | On Max, you build it | Yes, after your OK |
| Run reports and read tenant ledgers | Through a Realm-X job | Yes | Yes |
| Works in ChatGPT | Claude only | Only if you build it | Yes, and Claude |
| What you need first | AppFolio access to the connector | Plus or Max, admin credentials | Your AppFolio login |
Checked 6 Nov 2026. Sources: AppFolio connects Realm-X to Anthropic's Claude (AppFolio newsroom, 9 Jun 2026) · AppFolio pricing · AppFolio Stack API endpoints · NightSquawk/appfolio-mcp-server on GitHub
Once, in a browser we host for you.
Paste one address into its settings.
It reads, and asks before it creates or assigns.
We never keep your AppFolio password, and no work order is created, assigned or scheduled before you approve it. Who can see your session
Sign in to AppFolio in a Cloud Browser. Create a Cotlet account, open AppFolio in its Cloud Browser, sign in with your own property manager login, then press Enable for agents.
Add the Cotlet address. Paste https://cotlet.dev/mcp/v1 into the MCP server or connector field of your agent.
Approve the connection. Chat apps show a Cotlet sign-in page. Code editors, n8n and scripts send an API key from the console.
https://cotlet.dev/mcp/v1 serves every app you enable on Cotlet, AppFolio included. Enable AppFolio after you connect, then refresh the connector to load its tools.
Settings > Connectors > Add custom connector
URL: https://cotlet.dev/mcp/v1/connect
Claude Code:
claude mcp add --transport http cotlet \
https://cotlet.dev/mcp/v1 \
--header "Authorization: Bearer $COTLET_API_KEY" Settings > Apps & Connectors > Create
MCP server URL: https://cotlet.dev/mcp/v1/connect
Authentication: OAuth // ~/.cursor/mcp.json
{
"mcpServers": {
"cotlet": {
"url": "https://cotlet.dev/mcp/v1",
"headers": { "Authorization": "Bearer ${env:COTLET_API_KEY}" }
}
}
} # ~/.codex/config.toml
[mcp_servers.cotlet]
url = "https://cotlet.dev/mcp/v1"
bearer_token_env_var = "COTLET_API_KEY" MCP Client Tool (inside an AI Agent)
Transport: HTTP Streamable
URL: https://cotlet.dev/mcp/v1
Auth: Bearer, <your key>
Tool: appfolio_read Make: MCP Client > Call a tool
Zapier: MCP Client by Zapier > Run Tool
Server URL: https://cotlet.dev/mcp/v1
Token: <your key>
Tool: appfolio_write Read only. Use the names these return in the work order tools.
Returns the properties your user can see, with address and unit count. Search matches the property name or address. Use the names it returns in the other tools.
MCP callappfolio_read → list_properties
REST endpointGET https://cotlet.dev/api/v1/appfolio/properties
| Name | Type | Description |
|---|---|---|
| search string | string | Match on property name or address. |
| cursor string | string | Next page cursor from the previous call. |
{
"properties": [
{
"name": "Maple Court",
"address": "120 Maple St, Springfield",
"units": 12
}
],
"next_cursor": null
} Returns the vendors in your account with name, trade and contact details. Search matches the vendor name. Use the exact name in assign_work_order.
MCP callappfolio_read → list_vendors
REST endpointGET https://cotlet.dev/api/v1/appfolio/vendors
| Name | Type | Description |
|---|---|---|
| search string | string | Match on vendor name. |
| cursor string | string | Next page cursor from the previous call. |
{
"vendors": [
{
"name": "Ortiz Plumbing",
"trade": "Plumbing",
"phone": "555-0142"
}
],
"next_cursor": null
} The three writes live here. An assignment or a scheduled visit can notify the assignee and the resident, so each one waits for your OK.
Returns work orders the way the app lists them: property, unit, issue, status, who it is assigned to and the date created. Filter by status or property. Use work_order_id from here in the other work order tools.
MCP callappfolio_read → list_work_orders
REST endpointGET https://cotlet.dev/api/v1/appfolio/work-orders
| Name | Type | Description |
|---|---|---|
| status string | string | Status as named in your AppFolio, for example New or Completed. Default: all open. |
| property string | string | Only this property, by name or address as listed in list_properties. |
| cursor string | string | Next page cursor from the previous call. |
{
"work_orders": [
{
"work_order_id": "WO-1042",
"property": "Maple Court",
"unit": "7",
"issue": "Kitchen sink leaking",
"status": "New",
"assigned_to": null,
"created": "2026-11-02"
}
],
"next_cursor": null
} Returns the full work order: description, property and unit, status, assignee, scheduled time and the history of edits the app keeps. Use it to check what was already done before assigning or scheduling.
MCP callappfolio_read → get_work_order
REST endpointGET https://cotlet.dev/api/v1/appfolio/work-orders/{work_order_id}
| Name | Type | Description |
|---|---|---|
| work_order_id string required | string | Work order ID from list_work_orders. |
{
"work_order_id": "work_order_8c41d2"
} {
"work_order_id": "WO-1042",
"property": "Maple Court",
"unit": "7",
"issue": "Kitchen sink leaking",
"description": "Water under the sink after each use.",
"status": "New",
"assigned_to": null,
"scheduled": null,
"history": [
{
"at": "2026-11-02T09:10:00Z",
"event": "Created"
}
]
} Creates a work order with the issue, property, unit and description you give. It appears in the work order list and can notify the people the app is set to notify. Check list_work_orders first so the same request is not logged twice. By default you confirm each call; you can switch that off for this tool.
MCP callappfolio_write → create_work_order
REST endpointPOST https://cotlet.dev/api/v1/appfolio/work-orders
| Name | Type | Description |
|---|---|---|
| property string required | string | Property name from list_properties. |
| unit string | string | Unit the issue concerns. |
| issue string required | string | Short title. |
| description string | string | Details for whoever does the work. |
{
"property": "Maple Court",
"unit": "7",
"issue": "Kitchen sink leaking",
"description": "Water under the sink after each use."
} {
"work_order_id": "WO-1043",
"property": "Maple Court",
"unit": "7",
"issue": "Kitchen sink leaking",
"status": "New"
} Assigns the work order to an in-house technician or a vendor from your account. It hands the job to another person, so the assignee is told as the app is set up to tell them. The response shows the work order after the change. By default you confirm each call; you can switch that off for this tool.
MCP callappfolio_write → assign_work_order
REST endpointPOST https://cotlet.dev/api/v1/appfolio/work-orders/{work_order_id}/assign
| Name | Type | Description |
|---|---|---|
| work_order_id string required | string | Work order ID from list_work_orders. |
| assignee string required | string | Technician or vendor name as listed in AppFolio. |
{
"work_order_id": "work_order_8c41d2",
"assignee": "assignee"
} {
"work_order_id": "WO-1043",
"assigned_to": "Ortiz Plumbing",
"status": "Assigned"
} Schedules the work order on the app's calendar for the date and time you give. The assignee and the resident can see the visit, so the call needs your OK. The response shows the scheduled time. By default you confirm each call; you can switch that off for this tool.
MCP callappfolio_write → schedule_work_order
REST endpointPOST https://cotlet.dev/api/v1/appfolio/work-orders/{work_order_id}/schedule
| Name | Type | Description |
|---|---|---|
| work_order_id string required | string | Work order ID from list_work_orders. |
| start string required | string | Local date and time, ISO format. |
| duration_minutes integer | integer | Planned length of the visit. |
{
"work_order_id": "work_order_8c41d2",
"start": "start"
} {
"work_order_id": "WO-1043",
"scheduled": "2026-11-05T09:00:00",
"assigned_to": "Ortiz Plumbing",
"status": "Scheduled"
} Read only. Which reports you see depends on your AppFolio user role.
Returns the ledger of a tenant: charges and payments in date order, each with the amount, and the balance at the end. Give the property, unit and tenant name. Use it before calling a tenant about money.
MCP callappfolio_read → get_tenant_ledger
REST endpointGET https://cotlet.dev/api/v1/appfolio/tenant-ledger
| Name | Type | Description |
|---|---|---|
| property string required | string | Property name from list_properties. |
| unit string required | string | Unit name. |
| tenant string | string | Tenant name, when the unit has more than one. |
{
"property": "property",
"unit": "unit"
} {
"tenant": "Marcus Hale",
"property": "Maple Court",
"unit": "2B",
"transactions": [
{
"date": "2026-11-01",
"type": "Charge",
"description": "Rent",
"amount": "1450.00"
}
],
"balance": "1450.00"
} Returns the report names your user role can open. Use a name from here in run_report. Which reports appear depends on your role.
MCP callappfolio_read → list_reports
REST endpointGET https://cotlet.dev/api/v1/appfolio/reports
| Name | Type | Description |
|---|---|---|
| search string | string | Match on report name. |
{
"reports": [
{
"name": "Delinquency"
},
{
"name": "Work Order"
},
{
"name": "Rent Roll"
}
]
} Opens the report, applies the property filter you give and returns its rows with the column headings the app shows. Leaving the property out includes all properties. Long reports come back in pages.
MCP callappfolio_read → run_report
REST endpointGET https://cotlet.dev/api/v1/appfolio/reports/run
| Name | Type | Description |
|---|---|---|
| report string required | string | Report name from list_reports. |
| property string | string | Only this property, by name or address as listed in list_properties. |
| cursor string | string | Next page cursor from the previous call. |
{
"report": "report"
} {
"report": "Delinquency",
"columns": [
"Tenant",
"Property",
"Unit",
"Balance"
],
"rows": [
[
"Marcus Hale",
"Maple Court",
"2B",
"1450.00"
],
[
"Rosa Lin",
"Maple Court",
"7",
"320.00"
]
],
"next_cursor": null
} Your signed-in AppFolio browser profile, AES-256-GCM encrypted, in Finland. Never the password.
The 10 AppFolio tools, never the cookie or the login.
The properties and screens your AppFolio user role opens to you.
Charges, payments, bills, owner and tenant records, user rights.
You get an email with a sign-in link and sign in yourself, 2-step verification included.
Disable for agents, reset the browser or delete the API key.
The Cotlet site scores A+ on Qualys SSL Labs, securityheaders.com and Mozilla Observatory (live results); there is no SOC 2 report or third-party pentest yet.
AppFolio keeps adding to Realm-X, its own AI layer, and the Claude connector arrived on 9 Jun 2026. When an AppFolio screen changes, we repair the tool and its name stays the same. status.cotlet.dev checks the site, console and API every 3 minutes.
| Action | Undo |
|---|---|
| Create a work order | Cancel or delete it in AppFolio; check first whether anyone was notified |
| Assign a work order | Assign the previous technician or vendor back; the first assignee may have been told |
| Schedule a work order | Move or clear the visit on the calendar; the resident may have seen it |
All 3 write tools ask first, because an assignee or a resident can be told. The other 7 tools only read and run at once. For a scheduled run you can switch the wait off per tool.
{
"name": "create_work_order",
"arguments": {
"property": "Maple Court",
"unit": "7",
"issue": "Kitchen sink leaking",
"description": "Water under the sink after each use."
}
} curl -X POST https://cotlet.dev/api/v1/appfolio/work-orders \
-H "Authorization: Bearer $COTLET_API_KEY" \
-H "Content-Type: application/json" \
-d '{"property":"Maple Court","unit":"7","issue":"Kitchen sink leaking","description":"Water under the sink after each use."}' {
"work_order_id": "WO-1043",
"property": "Maple Court",
"unit": "7",
"issue": "Kitchen sink leaking",
"status": "New"
} A nightly job or a maintenance form can call the same tools over REST at /api/v1/appfolio, with one key and one price. A call your AppFolio user has no rights for returns an error and costs nothing. Each tool row above shows its REST path.
About $26 a monthfor a manager with 3 properties and about 425 units, 4,460 credits. Cotlet needs no particular AppFolio plan; AppFolio itself starts at $1.49 per unit a month on Core.
| Job | Calls | Credits |
|---|---|---|
| Check new work orders, each workday | 6 × 22 | 1,320 |
| Log tenant messages as work orders | 2 × 12 | 240 |
| Dispatch work orders to vendors | 3 × 10 | 300 |
| Stale work orders per property, weekly | 7 × 4 | 280 |
| Delinquency report, weekly | 4 × 4 | 160 |
| Tenant ledger before a collection call | 3 × 22 | 660 |
| Cloud Browser, 30 days | 1,500 | |
| Total | 4,460 |
The month is our example: 3 properties, a work order check each workday, 12 tenant messages logged, 10 dispatches, weekly stale-order and delinquency runs, and a ledger look-up before each of 22 calls. AppFolio reported 9.4 million units and 22,096 property management customers at the end of 2025, about 425 units each (our division of its 10-K figures). Dollars at the $29 pack rate.
| Credits | Price, one time | Calls at 10 credits | Per 1,000 credits |
|---|---|---|---|
| 5,000 | $29 | 500 | $5.80 |
| 15,000 | $79 | 1,500 | $5.27 |
| 32,000 | $149 | 3,200 | $4.66 |
| 60,000 | $249 | 6,000 | $4.15 |
Only successful calls use credits; failed calls and timeouts cost nothing. At a balance of 0 calls pause, never a surprise charge. Authenticate with the Authorization: Bearer header.
| Option | What it does | Where it stops |
|---|---|---|
| NightSquawk/appfolio-mcp-server | 137 reports and 156 Database API endpoints behind 6 tools, AGPL-3.0. 0 stars, last push 31 Oct 2026. | Runs on your computer with Reports and Database API credentials. |
| CryptoCultCurt/appfolio-mcp-server | Reporting API only, ISC. 10 stars, last push 13 Sep 2026. | Reports only, and you host it with your own credentials. |
| swagger3x/appfolio-mcp | Wraps the AppFolio REST API in 38 tools. 1 star, last push 4 Jul 2026. | Needs API access on your plan and runs on your computer. |
| AppFolio Realm-X connector for Claude | AppFolio's own link: Claude hands a job to Realm-X, which runs it inside AppFolio. | Claude only; you ask for a job, not a specific tool call. |
If you want Realm-X to do the job inside AppFolio from Claude, use the connector. If you have Plus or Max and a developer, the API or a community server works. If you want one hosted address for ChatGPT and Claude, with no credentials to manage, Cotlet does that.
Take Group sp. z o.o. runs Cotlet: a software company registered in Poland, EU (VAT PL6342984273), in business since 2019. The founders are Bart Krawczyk (Co-founder, CTO) and Jake Slugocki (Co-founder, SEO, sales and marketing). Questions about the AppFolio tools go to contact@cotlet.dev.
Sign up at cotlet.dev, log in to AppFolio once in its Cloud Browser and add Cotlet to ChatGPT or Claude, following the steps in your console. No API key is needed. ChatGPT and Claude then work in your AppFolio account through Cotlet, in their phone apps too.
With Cotlet, ChatGPT, Claude and other AI agents handle jobs like these in AppFolio: log maintenance requests as work orders; chase stale work orders; dispatch work orders to vendors. You ask in plain words, and anything that reaches other people waits for your OK first.
Sign up free at https://cotlet.dev, open AppFolio under Integrations in the console and sign in to AppFolio in its Cloud Browser. The trial starts with your first app and needs no card.
No. AppFolio's Stack API is built for approved Stack partners (appfolio.com/stack/partners/api). Cotlet works in your own AppFolio session, and your agent can do what your AppFolio user role can do.
Only through the actions above. A work order, an assignment or a scheduled visit can notify people as your AppFolio is set up, so each of these waits for your OK by default.
AppFolio announced a Realm-X connector for Claude on 9 Jun 2026 (checked 6 Nov 2026). It hands a job to AppFolio's own Realm-X agent. We found no ChatGPT version. Cotlet gives your agent individual AppFolio tools in ChatGPT, Claude, Cursor and n8n.
Not for Cotlet. AppFolio lists its API on Plus (read only) and Max (read/write). Cotlet works in your own AppFolio login, so your agent does what your user role can do on any plan.
Only in how you call it. Both expose the same 10 tools with the same inputs, answers, key and price. Agents use MCP; scripts and forms use REST.
No. Cotlet is independent and not affiliated with AppFolio, Inc.
Free 7-day trial with 2,000 credits, no card needed.
May we use Google Analytics to see which pages help people? It sets cookies only if you accept. No ads, and we never sell data. Cookie policy