Internal briefing · engineering / product

API rate limits and concurrent capacity

Vendors publish different units. Converted to requests per minute, the first cutoffs are AirNow (~8), Firecrawl Free (10), Gemini Free (10), Jina keyless (20), then Nominatim and HUD (60). Claude Start (1,000) is not the bottleneck.

Same unit

Every cap as requests per minute

A home report is not one API call. It geocodes, then fans out Census, HUD, Walk Score, AirNow, RentCast, amenities, and a listing scrape. Ten users clicking Generate is tens to hundreds of overlapping requests.

The bars below use Rivvl’s current cheap/free-tier number where a plan exists. Length is relative to the largest bar in that band — not across the whole page.

High fails first under load Medium plan quota or low concurrency OK published cap is high for current volume Unknown no numeric rate published

Band 1 · under 100 RPM

These cut off first

Bar length vs HUD / Nominatim at 60 RPM. AirNow’s hourly cap is ~8 requests per minute.

AirNow500 / hour
8 RPM
Gemini FreeFlash 2.5 staff table, 2025
10 RPM
Firecrawl Free10 scrapes / min
10 RPM
Jina keylessr.jina.ai · no key in Rivvl
20 RPM
Nominatim1 req/s · whole app
60 RPM
HUD60 queries / min
60 RPM

Band 2 · 100 to 1,000 RPM

Paid or federal APIs with headroom

Bar length vs Claude Start at 1,000 RPM. RentCast’s rate is in the next band; its monthly quota is the real cheap-plan killer.

ATTOM200 calls / min
200 RPM
PostHog GETAnalytics, not report path
240 RPM
Auto.dev Starter5 req/s · also 1,000 / month
300 RPM
OpenWeatherPaid Startup listed; free RPM unpublished
600 RPM
Claude StartSonnet 4.x · 1,000 RPM / 2M ITPM
1,000 RPM

Band 3 · 1,000+ RPM

Not the first bottleneck

Bar length vs Google Places / Stripe at 6,000 RPM. RentCast is 20 req/s on every plan — Developer still dies at 50 calls/month.

RentCast20 req/s every plan
1,200 RPM
NHTSA vPIC1,000–2,000 / min business hours
~1,500 RPM
Google Geocoding3,000 QPM · billed
3,000 RPM
Google Places6,000 QPM · billed
6,000 RPM
Stripe live100 req/s global · checkout
6,000 RPM

In flight

How many can run at once

Most vendors publish a rate, not overlapping sessions. These four publish a true in-flight cap. Each square is one overlapping job. Ten squares is a busy moment on the product.

Firecrawl Free

2 of 10 slots · listing scrape

Jina Reader Free

2 of 10 slots · scrape failover

Scrape.do Free

5 of 10 slots · last-resort scrape

Inngest Free

5 of 10 slots · hidden brake on reports

Claude does not sell a concurrent-session number — it uses RPM plus token buckets. Stripe has a separate concurrency limiter whose global number is unpublished. Everyone else: not published.

One row each

Cheat sheet

Same facts as the bars, in a table. RPM is the published cap converted to requests per minute so rows compare. “Buy more?” means a higher vendor plan raises that cap.

All 24 providers · current cheap / free-tier number where a plan exists
Provider Published In RPM Concurrent Buy more? Risk
AirNow 500 / hour 8 Not published No High
Gemini Flash Free 10 / min 10 Not published Yes · paid tier High
Firecrawl Free 10 scrapes / min 10 2 browsers Yes Medium
Jina Reader keyless 20 / min 20 2 Yes · add a key High
Nominatim 1 / second 60 1 thread No High
HUD User 60 / min 60 Not published No Medium
ATTOM 200 / min 200 Not published Yes OK
PostHog analytics 240 / min 240 Not published n/a OK
Auto.dev Starter 5 / second 300 Not published Yes Medium
OpenWeather Startup 600 / min 600 Not published Yes Medium
Claude Start 1,000 / min 1,000 Not published Yes OK
RentCast 20 / second 1,200 Not published Rate no · quota yes Medium
NHTSA vPIC 1,000–2,000 / min ~1,500 Not published No OK
Google Geocoding 3,000 / min 3,000 Not published Yes OK
Google Places 6,000 / min 6,000 Not published Yes OK
Stripe live 100 / second 6,000 Unpublished limiter n/a OK
Walk Score Daily quota Not published Maybe High
Census Data API No RPS with key Not published No Medium
HERE Geocoding Plan-specific Not published Yes Unknown
EPA Envirofacts None published Not published No Unknown
FuelEconomy.gov None published Not published No Unknown
Scrape.do Free 1,000 credits / mo 5 Yes Medium
Inngest Free No function rateLimit 5 steps Yes Medium
Brevo Plan + endpoint Not published Yes OK

Different clock

Monthly, daily, and hourly pools

A high per-minute rate can still die on a small pool. Bars vs 1,000 calls (Auto.dev / Scrape.do Free).

RentCast Developer50 calls / month
50 / mo
Gemini Free250 requests / day
250 / day
AirNowthen empty until next hour
500 / hr
Auto.dev Starteralso 5 rps
1,000 / mo
Scrape.do Freesuccessful credits
1,000 / mo

Walk Score is also a daily pool (status 41) — exact size is issued with the key. Claude Start’s real ceiling is often the $500/month spend cap, not 1,000 RPM.

Load shape

If this many reports start at once

Rivvl has no global concurrency governor. Inngest Free hides the pile-up: only 5 function steps run, so downstream APIs see a queue. On Inngest Pro (200+ steps) the free public APIs become the bottleneck instead.

1

One report

Fine. Nothing queues. Claude Start is nowhere near its cap.

2–5

Firecrawl Free

Only 2 listing scrapes in parallel. The rest wait. Jina failover is 20 RPM if Firecrawl is down.

5

Inngest Free

Report jobs themselves queue. Downstream APIs see at most ~5 overlapping generations.

20+

Inngest Pro

Nominatim 1 rps, HUD 60/min, AirNow hourly, Walk Score daily, Jina 20 RPM.

Published limits

Full reference

Paid primaries

Claude, Firecrawl, RentCast, Google Maps/Places can be raised with a higher plan. You get 429s, then you pay more.

Free public APIs

Nominatim, NHTSA, Census, HUD, AirNow, EPA, FuelEconomy have no subscription to buy. They throttle, go dark for an hour, or ban the IP.

Showing all 24 providers.

AI Sources: Claude rate limits · Gemini rate limits
Provider Role Used for Auth Rate limit Concurrent limit Cut off? Risk
Anthropic Claude Primary Report write-up, chat, listing extract Paid API key · org usage tier Start (Sonnet 4.x): 1,000 RPM / 2M ITPM / 400k OTPM. Build: 5,000 / 5M / 1M. Scale: 10,000 / 10M / 2M. Haiku shares a separate model bucket. Not published. Token-bucket; a 60 RPM cap can be enforced as ~1 req/s. Bursts 429. 429 + retry-after. Monthly spend cap: Start $500, Build $1,000, Scale $200k. OK
Google Gemini Backup AI failover when Claude fails API key · project tier in AI Studio Official docs: limits are project-specific in AI Studio (RPM / TPM / RPD). Google staff table (2025) for 2.5 Flash Free: 10 RPM, 250k TPM, 250 RPD. Tier 1 Flash: 1,000 RPM / 10,000 RPD. Free tier is best-effort and can change. Not published (RPM/RPD only). 429 when any of RPM/TPM/RPD is hit. Free RPD resets midnight Pacific. High
Listing scrape Sources: Firecrawl · Jina Reader · Scrape.do Async API
Provider Role Used for Auth Rate limit Concurrent limit Cut off? Risk
Firecrawl Primary Vehicle + home listing scrape API key · plan /scrape RPM: Free 10, Hobby 100, Standard 500, Growth 5,000, Scale 10,000. Concurrent browsers: Free 2, Hobby 5, Standard 50, Growth 100, Scale 150+. Extra jobs queue; max queued Free/Hobby 50,000. Queue then 429 if queue is full. Queue wait counts against request timeout (max 48h). Medium
Jina Reader (r.jina.ai) Backup Scrape failover (no API key in Rivvl) Keyless (IP) unless a key is added Reader: no key 20 RPM; free key 500 RPM; paid key 500 RPM; premium 5,000 RPM. Jina FAQ (all APIs): Free 2, Paid 50, Premium 500 concurrent. 429 when RPM or TPM hits first. Keyless is per IP — Vercel egress shares one pool. High
Scrape.do Backup Last-resort listing scrape Token · plan Credit-based (Free 1,000 successful credits/mo). No separate public RPM table. API concurrency: Free 5, Hobby 5, Pro 15, Business 40, Advanced 200. Async pool is extra (~30% of plan). 429 when concurrency is full. Credits exhaust = no more successful scrapes that month. Medium
Homes data Sources: RentCast · ATTOM · Nominatim · HERE · Google Maps FAQ · Census · HUD ToS · Walk Score · OpenWeather · AirNow FAQ · EPA Envirofacts
Provider Role Used for Auth Rate limit Concurrent limit Cut off? Risk
RentCast Primary Home value / rent / property data API key · all plans Hard cap 20 requests/second per API key on every plan. Monthly quota is plan-based (Developer free tier is 50 calls/month). Not published separately from the 20 rps cap. 429 auth/rate-limit-exceeded. Monthly quota is the real cutoff on cheap plans. Medium
ATTOM Backup Property data if RentCast fails API key · monthly plan 200 calls/minute (only published time-window cap). Monthly base 1,000–1,000,000 then overage. Not published. Minute cap + monthly quota. Overage billed rather than hard stop on some plans. OK
Nominatim (OSM) Primary First geocode of home addresses None · public donated servers Absolute max 1 request/second per application (sum of all users). Bulk scripts: 1 thread, 1 machine; jobs >1 day: 4 req/min. Bulk: single thread. No distributed clients. IP/app ban for heavy or systematic use. Commercial geocoding is discouraged. High
HERE Geocoding Backup Geocode after Nominatim API key · HERE plan Plan-specific. No single public QPS on the open docs (limited plans often ~5 QPS; confirm in HERE dashboard). Not published as a global number. 429 / quota errors when plan transactions or QPS are exceeded. Unknown
Google Maps Geocoding Backup Geocode fallback Billed API key 3,000 QPM (~50/s). No maximum daily request cap if billing is on. Not published; QPM is the cap. OVER_QUERY_LIMIT / 429. Repeated abuse can temporarily block the project. OK
Google Places Primary Nearby amenities Billed API key 6,000 QPM. Per-method quotas on Places (New). Not published; QPM is the cap. Quota error / 429. Same abuse block as other Maps APIs. OK
Census Data API Primary ACS demographics Free key required for data queries 50 variables per query. Older PDF: 500 queries/IP/day without a key. Current guide: key required; no published RPS with a key. Not published. Key required. Bureau can monitor and block. Geocoder has no numeric RPS; batch max 10,000 addresses. Medium
HUD User (FMR / LAI) Primary Fair market rent Free token 60 queries per minute (ToS). Not published. Temporary or permanent block if HUD believes limits are exceeded or circumvented. Medium
Walk Score Primary Walk / transit / bike score API key · daily quota Daily quota exists (status 41). Exact calls/day is not on the public API page — it is issued with the key / trial. Not published. Status 41 = daily quota exceeded. Status 42 = IP blocked. High
OpenWeather Primary Current weather (2.5/weather) API key · account plan Account-level per-minute and daily caps (all keys combined). Paid Startup listed at 600 calls/min. Free-plan RPM is no longer on the public price table (Aug 2026). Docs: do not call the same location more than once / 10 min. Not published. 429 then email warning; key can be suspended if you do not upgrade. Medium
AirNow Primary AQI observations Free registered key Per web-service hourly cap. Commonly documented as 500 requests/hour for most endpoints (CRAN airnow package cites the FAQ). Official FAQ: see each service’s docs; limits cannot be raised. Not published. No data until the next hour once the hourly cap is hit. Repeat offenders asked to use file products instead. High
EPA Envirofacts / EJScreen Primary Environmental / TRI context None · public No published RPS. Queries must finish in under 15 minutes; page for large extracts. Not published. Timeout / incomplete results, not a documented 429 table. Unknown
Vehicles data Sources: vPIC FAQ · Auto.dev · FuelEconomy.gov
Provider Role Used for Auth Rate limit Concurrent limit Cut off? Risk
NHTSA vPIC Primary VIN decode (free, no key) None · public No daily quota. FAQ: 1,000–2,000 transactions/minute during business hours (6am–6pm ET). Bulk asked to run nights/weekends. Not published. Automated traffic control; aggressive use can be throttled. No hard daily cutoff. Heavy automated traffic can be slowed or blocked. OK
Auto.dev Backup VIN / vehicle data failover API key · plan Starter 5 rps (1,000 calls/mo). Growth 10 rps. Scale 50 rps. Not published separately from rps. 429 RATE_LIMIT_EXCEEDED. Starter also hits monthly 1,000. Medium
FuelEconomy.gov Primary MPG / fuel cost None · public No published RPM/quota. Free unauthenticated federal service. Not published. Cache and prefer bulk files for large jobs. Possible fair-use blocks; not a documented 429 table. Unknown
Infra Sources: Inngest · Stripe · PostHog · Brevo
Provider Role Used for Auth Rate limit Concurrent limit Cut off? Risk
Inngest Infra Runs home + vehicle report jobs Account plan Function-level rateLimit is optional; Rivvl report functions do not set one. Max concurrent steps: Free 5, Basic 25, Pro 200+, Enterprise custom. This is the product-level gate for simultaneous reports. Extra runs wait in queue. They do not all hit downstream APIs at once. Medium
Stripe Infra Checkout, credits, refunds Secret key Live 100 req/s global; most endpoints 25 req/s. Sandbox 25 req/s global. Separate concurrency limiter exists (global-concurrency / endpoint-concurrency 429s). Numeric global concurrency is not published. Payouts: 30 concurrent / business. 429 with Stripe-Rate-Limited-Reason. Unlikely for Rivvl checkout volume. OK
PostHog Infra Capture + admin HogQL Project / personal API key Public capture (/e) has no request-level rate limit. Analytics GETs: 240/min and 1,200/hour. Query endpoint: 2,400/hour. Other CRUD: 480/min. Not published. Capture has per-distinct-ID ingestion protection ~5,000 events/min. Private query APIs 429. Capture still returns 200 when over billing quota (quota_limited in body). OK
Brevo Infra Transactional email API key · plan Plan + endpoint. Example: POST /v3/smtp/email is in the thousands of RPS on higher plans; contacts often 10–20 RPS. Not published separately from RPS/RPH. 429. Not on the report-generation hot path. OK

No plan to buy

Free public APIs — will they cut us off?

Hard or hourly caps

  • Nominatim: 1 req/s for the whole product. More users does not get more quota.
  • Jina without a key: 20 RPM. Rivvl calls r.jina.ai with no key today, so Firecrawl outages dump traffic onto this cap.
  • AirNow: hourly cap, then empty responses until the next hour. Limits are not raisable.
  • Walk Score: daily quota (status 41). HUD: 60/min. Census: key required; historical 500/day without a key.

No daily quota, still not unlimited

  • NHTSA vPIC: no daily limit; 1,000–2,000 tx/min in business hours. Fine for interactive reports; not for a scrape farm.
  • FuelEconomy.gov and EPA Envirofacts: no published RPS. Treat as fair-use. Cache aggressively.
  • OpenWeather: plan caps at account level; 429 then possible key suspension if you ignore the warning email.

What to do

Practical takeaway

Paid APIs can be scaled (higher Firecrawl / Inngest / Claude / RentCast plans). Free public APIs cannot.

  • If Rivvl gets busy, listing scrape and geocoding fail first unless Nominatim is replaced by HERE/Google as primary, Jina is keyed, and AirNow / Walk Score / HUD results are cached per zip/hour.

Footnotes

Notes on sources

  • Gemini Flash Free 10 RPM / 250 RPD is from Google staff on the AI Developers Forum (2025), not a frozen SLA — confirm in AI Studio.
  • Walk Score’s exact daily number is issued with the key, not printed on the public API page.
  • RPM conversions: 1 req/s = 60 RPM; 500/hour ≈ 8 RPM; NHTSA plotted at the midpoint of 1,000–2,000.
  1. https://platform.claude.com/docs/en/api/rate-limits
  2. https://ai.google.dev/gemini-api/docs/rate-limits
  3. https://docs.firecrawl.dev/rate-limits
  4. https://jina.ai/reader
  5. https://scrape.do/documentation/async-api/
  6. https://developers.rentcast.io/reference/rate-limits
  7. https://support.attomdata.com/articles/5882285758-when-does-my-api-usage-get-reset
  8. https://operations.osmfoundation.org/policies/nominatim/
  9. https://www.here.com/docs/bundle/geocoding-and-search-api-developer-guide/page/README.html
  10. https://developers.google.com/maps/faq#usage_apis
  11. https://www.census.gov/data/developers/guidance/api-user-guide.html
  12. https://www.huduser.gov/portal/dataset/api-terms-of-service.html
  13. https://www.walkscore.com/professional/api.php
  14. https://openweathermap.org/appid
  15. https://docs.airnowapi.org/faq
  16. https://www.epa.gov/enviro/web-services
  17. https://vpic.nhtsa.dot.gov/api/Home/Index/FAQ
  18. https://docs.auto.dev/v2/getting-started
  19. https://www.fueleconomy.gov/feg/ws/
  20. https://www.inngest.com/docs/usage-limits/inngest
  21. https://docs.stripe.com/rate-limits
  22. https://posthog.com/docs/api
  23. https://developers.brevo.com/docs/api-limits.mdx