Slide 11 of 28
Part 2 · How It WorksSlide 11
Slide 11 · Real Incident: Bulk Scraping
207 million transactions. No rate limiting. One month.
Venmo, 2019 — a public API with no consumption limits.
Real Incident · 2019
Venmo — 207 Million Public Transactions Scraped via Unrated API

Venmo's API exposed a public transaction feed endpoint. Transactions were public by default — names, amounts, and messages could be read by anyone. The endpoint accepted pagination and had no rate limit, no daily cap, and no authentication requirement.

Security researcher Dan Salmon wrote a scraper that called the endpoint continuously for one month. His script collected 207,984,218 transactions — effectively the entire Venmo public transaction history. The dataset included real names, transaction amounts, payment messages, and timestamps.

Within the data, Salmon found patterns revealing drug transactions (payment messages used slang), personal relationships, rent arrangements, and financial dependency. He published a blog post with aggregate statistics to demonstrate the privacy implications of combining public data with no access controls.

Venmo added rate limiting to the public feed endpoint after Salmon's disclosure. However, the fundamental data privacy issue — all transactions public by default — was a separate discussion that continued for years.

Lesson: "Public" data and "publicly accessible in bulk" are different threat models. A transaction visible to one friend is a very different exposure than a researcher downloading every transaction for everyone. Rate limiting is the control that separates these two scenarios.
← Back Pattern 3: Cost amplification →