Rate and payload limits
Per-minute rate limits, daily row quotas, page sizes, range caps, and how to pull large amounts of data.
| Limit | Default | Applies to |
|---|---|---|
| Requests | 120 per minute | each key |
| Lookup calls | 20 per minute | each key, on the calls marked lookup below |
| Requests from one network | 600 per minute | each source IP, all keys |
| Rows per day | 250,000 | each key, every row returned |
| Lead rows per day | 50,000 | each key, rows containing a lead's details |
| CMAs per day | 200 | each brokerage, all keys together (POST /cma; reading a stored CMA is free). Your CSM can change it |
| Public record calls per day | 500 | each brokerage, all keys together (/public-records/lookup and /public-records/{recordId}/history). One home per call: not for bulk exports |
| Page size | 100 default, 500 max | list calls |
| Page size with lead details | 200 max | /leads, /leads/activity, /leads/lookup and /properties/{propertyId}/viewers |
| Date range | 93 days at day, 400 days at week, 36 months at month |
series calls |
| Response size | 2 MB, then the rest is on the next page | every call |
| Series length | 2,000 rows per response | series calls |
| Request body | 64 KB | webhook management calls |
Lookup calls search Ruuster's records on demand rather than from prepared reports, so they have
their own, lower limit: /leads, /leads/lookup, /leads/{leadId}/emails, /properties/lookup, POST /cma and the
/public-records calls.
Every response carries your current position:
x-ratelimit-limit: 120
x-ratelimit-remaining: 117
x-ratelimit-reset: 1790863260 (unix seconds when the minute window resets)
x-daily-rows-limit: 250000
x-daily-rows-remaining: 248310
Over a limit you get 429 with a Retry-After header in seconds: rate_limited for per-minute
limits, daily_quota_exceeded for daily row limits (they reset at midnight America/Chicago). Wait
that long before retrying. Your CSM can raise limits for a specific integration.
Pulling large amounts of data
- Add
?countOnly=1to any list call to get{ "total": n }without rows, so you can size a sync. - Use
/properties/engagementinstead of one call per listing. - Use
/leads/activityto find active leads instead of paging the whole roster. - Planned:
changedSinceto pull only what changed since your last sync. - The API is built for incremental pulls, not full dumps. If you need a one-time full export, talk to your CSM about options.
Items marked Planned on these pages aren't available yet. They're listed in the changelog and move out of Planned when they ship.