appfolio-rate-limits

Featured

Handle AppFolio API rate limits with throttling and backoff. Trigger: "appfolio rate limit".

AI & Automation 2,266 stars 315 forks Updated today MIT

Install

View on GitHub

Quality Score: 99/100

Stars 20%
100
Recency 20%
100
Frontmatter 20%
70
Documentation 15%
100
Issue Health 10%
50
License 10%
100
Description 5%
100

Skill Content

# AppFolio Rate Limits ## Overview AppFolio's Stack API enforces per-partner rate limits to protect shared property management infrastructure. High-volume operations like bulk tenant imports, rent-roll syncs, and work-order batch updates can quickly exhaust quotas. Property managers running nightly portfolio syncs across hundreds of units must throttle carefully, especially during month-end when lease renewals and payment processing spike concurrently. ## Rate Limit Reference | Endpoint | Limit | Window | Scope | |----------|-------|--------|-------| | Properties list/get | 120 req | 1 minute | Per partner key | | Tenant create/update | 30 req | 1 minute | Per partner key | | Work orders | 60 req | 1 minute | Per partner key | | Bulk data export | 5 req | 1 hour | Per partner key | | Webhooks registration | 10 req | 1 minute | Per partner key | ## Rate Limiter Implementation ```typescript class AppFolioRateLimiter { private tokens: number; private lastRefill: number; private readonly maxTokens: number; private readonly refillRate: number; // tokens per ms private queue: Array<{ resolve: () => void }> = []; constructor(maxPerMinute: number) { this.maxTokens = maxPerMinute; this.tokens = maxPerMinute; this.lastRefill = Date.now(); this.refillRate = maxPerMinute / 60_000; } async acquire(): Promise<void> { this.refill(); if (this.tokens >= 1) { this.tokens -= 1; return; } return new Promise(resolve => this.queue.push({ resolve ...

Details

Author
jeremylongshore
Repository
jeremylongshore/claude-code-plugins-plus-skills
Created
7 months ago
Last Updated
today
Language
Python
License
MIT

Integrates with

Similar Skills

Semantically similar based on skill content — not just same category