Ruuster API
What the Ruuster API does, every call at a glance, machine-readable formats and a quick start.
The Ruuster API gives your brokerage read access to how people engage with your Ruuster-powered websites and apps: your listings, your leads, your email, and your site traffic. Use it to build seller reports, feed a data warehouse, judge marketing spend, or alert your team when a lead does something worth a call.
Calls at a glance. Each call has its own reference page with parameters, response fields, code samples and an example response.
| Group | Call | What it does |
|---|---|---|
| Account | GET /status |
Check the API is up (no key needed) |
| Account | GET /brand |
Your name, logo, phone, website, colors and fonts, for branded reports |
| Account | GET /me |
Your key, role, brokerage, limits and which days have data |
| Listings | GET /properties |
Your listings; find one by MLS number |
| Listings | GET /properties/lookup |
Any listing in your MLSs by MLS number, yours or not |
| Listings | GET /properties/{propertyId} |
Any listing by id, with its photos |
| Listings | GET /properties/{propertyId}/engagement |
A listing's views, visitors, favorites, tour requests, offers, shares, contact requests and push alerts; or your leads' activity on any one listing with scope=any |
| Listings | GET /properties/engagement |
The same numbers for every listing, ranked |
| Listings | GET /properties/{propertyId}/viewers |
Your leads who viewed, saved or toured a listing: yours by default, or any one listing with scope=any |
| Leads | GET /leads |
List leads by created, updated or active date |
| Leads | GET /leads/lookup |
Find a lead by email, phone or CRM id |
| Leads | GET /leads/activity |
Your most active leads in a period |
| Leads | GET /leads/stats |
New leads per period, by source |
| Leads | GET /leads/{leadId}/activity |
What a lead did, and their individual events |
| Leads | GET /leads/{leadId}/emails |
Ruuster emails a lead received |
| Agents | GET /agents |
Your agent roster and landing pages |
| Agents | GET /agents/{agentId} |
One agent; match a lead's agentId to a person |
| Brokerage | GET /summary |
The weekly analytics email as data |
| Brokerage | GET /emails/stats |
Email sends, human opens and clicks |
| Brokerage | GET /traffic |
Website visits by source, medium and campaign |
| AI assistants | Use with AI assistants (MCP) | Connect the API to Claude, ChatGPT or any MCP client at https://mcp.ruuster.com and ask in plain language |
| CMA | POST /cma, GET /cma/{cmaId}, GET /cma |
A comparative market analysis for any home in your MLSs: comps, adjustments, market conditions, value conclusion, net sheet. See CMAs |
| Webhooks | GET /webhooks/events |
The event catalog with sample payloads |
| Webhooks | GET /webhooks |
Your subscriptions and their delivery health |
| Webhooks | POST /webhooks |
Subscribe a URL to lead events |
| Webhooks | GET /webhooks/{webhookId} |
One subscription |
| Webhooks | PATCH /webhooks/{webhookId} |
Change, pause or re-activate a subscription |
| Webhooks | DELETE /webhooks/{webhookId} |
Delete a subscription |
| Webhooks | POST /webhooks/{webhookId}/test |
Send a test event |
| Webhooks | POST /webhooks/{webhookId}/rotate-secret |
Issue a new signing secret |
| Webhooks | GET /webhooks/{webhookId}/deliveries |
Delivery attempts from the last 30 days |
| Webhooks | POST /webhooks/{webhookId}/replay |
Re-send events from a window |
| Event feed | GET /events |
Poll the same lead events instead of receiving them |
For AI agents and tools. Every page is also available as Markdown: add .md to its URL, for example
https://help.ruuster.com/api/properties-engagement.md. https://help.ruuster.com/api/llms.txt indexes every page, https://help.ruuster.com/api/llms-full.txt is the whole
documentation in one file, and https://help.ruuster.com/api/openapi.json is the OpenAPI 3.1 description with every
parameter and an example response for each call.
Webhook options at a glance
- Events: 12 lead events. These are lead created, listing viewed, listing favorited, saved search
created or updated, search run, email opened, email clicked, tour requested, agent contacted, signed
in, and listing shared. There's also a test event. Subscribe to any of them, or to
lead.*for all. - Delivery: a signed
POSTto your HTTPS URL, typically within 15 minutes, delivered at least once, with automatic retries for about a day and batching when volume is high. - Control: up to 10 subscriptions per brokerage. You can pause, edit or delete them, send a test, rotate the signing secret, see 30 days of delivery attempts, and replay up to 7 days at a time.
- No endpoint? Poll
GET /eventsfor the same events, kept for 30 days.
| Base URL | https://api.ruuster.com/v1 |
| Format | JSON over HTTPS, UTF-8 |
| Authentication | Your Ruuster API key and login email, sent as headers |
| Access | Enabled per brokerage by your Ruuster customer success manager |
| Spec | https://api.ruuster.com/openapi.json (OpenAPI 3.1) |
| Status | https://api.ruuster.com/v1/status |
What you can do
- Listings. See every listing attributed to your brokerage, and for each one: views by the public and by logged-in leads, favorites, tour requests, offers, shares, contact-agent requests and push alerts, by day, week or month.
- Leads. List your leads, look one up by email, phone or CRM id, see the activity Ruuster records for a lead, see the Ruuster emails they received, and count new leads by source.
- Agents. Get your agent roster with each agent's landing page URL.
- Brokerage. Get the numbers from Ruuster's weekly analytics email as data, email performance, and website traffic by source.
- Webhooks. Have lead activity pushed to your server, typically within 15 minutes.
Terms. Use of the API is subject to the Ruuster API Terms of Use, which supplement your Ruuster subscription agreement. Calling the API means your brokerage accepts them.
What it isn't
- It's read-only for your Ruuster data. Nothing you call changes anything in Ruuster. The only write calls manage your own webhook subscriptions and, if you allow it, make changes you preview and confirm in your own CRM (Connect your CRM).
- It doesn't return other brokerages' data, or anyone's billing, contract or CRM records.
- It's for brokerage owners and admins. Agent logins can't use it. It lists your agents, but it doesn't report agent activity.
- It isn't an audited record or a real-time feed, and v1 has no uptime or accuracy guarantee.
What to expect from the numbers. The API reports what Ruuster records and what Google Analytics measures, each with its own definitions and limits:
- Page views count reloads.
- Public visitor counts come from Google Analytics and leave out people who block analytics.
- Email opens leave out opens that look automated. That filter is best-effort.
- Listing attribution depends on the MLS ids on your agents' Ruuster profiles.
- Figures for recent days can change as late data arrives. Use
meta.coverageto see which days are final.
Use the API as a reporting and automation source, and check anything you publish to a seller against the Data notes.
Quick start
Before you start: ask Ruuster to turn on API access. Access is enabled per brokerage, and only brokerage owners and admins can use the API. To get started, have an owner or admin at your brokerage email support@ruuster.com with your brokerage name. Ruuster enables the brokerage, confirms where to find your API key, and tells you when the first data is ready (usually within an hour; history fills in over the following days).
Looking for recipes? Worked, copy-and-paste use cases live in Guides: a weekly seller report, your most-viewed listings, a monthly summary into Google Sheets, lead sources next to website traffic, finding a lead by phone, hot-lead alerts into your CRM, catching up after an outage, and a nightly sync into your own database.
- Once Ruuster confirms your brokerage is enabled, sign in to the Ruuster web app as an owner or admin and copy your API key from the Zapier integration settings.
- Call
/meto check your credentials:
curl -s https://api.ruuster.com/v1/me \
-H "x-api-key: $RUUSTER_API_KEY" \
-H "x-email: you@yourbrokerage.com"
A 200 with your name, role and brokerage means you're ready. A 403 brokerage_not_enabled
means your brokerage isn't enabled yet (see the box above); 403 role_not_permitted means the key belongs to an agent.