Every restaurant app tells you the wait time, the Yelp rating, the Instagram vibe. None of them tell you if you can get through the front door in a wheelchair.
Google Maps has a "wheelchair accessible" boolean. That's it. Yes or no. No detail on what that means. No breakdown. No score. And it's frequently wrong.
I built ROLLIN to fix that. 56,000+ restaurants, bars, and venues across 6 US states, each scored 0-100 on real wheelchair accessibility. Not a binary label — a breakdown of six physical features that actually matter.
Today I want to walk through the technical side: the API, the MCP server, how search works, and how the data improves itself over time.
The Problem (for developers)
If you're building anything that touches physical locations — travel apps, restaurant discovery, navigation, corporate event planning, healthcare platforms — you have zero structured accessibility data to work with.
Google's Places API gives you wheelchair_accessible_entrance: true. That's one boolean for one feature. No scoring, no nuance, no confidence level, no breakdown of what "accessible" actually means.
There's nothing else. No public API for accessibility data. The 5.5 million wheelchair users in the US are invisible to every developer building location-based products.
The API
Base URL: https://joinrollin.com/api/v1
One request, real data:
curl "https://joinrollin.com/api/v1/locations?lat=40.7128&lng=-74.0060&radius=2&min_score=70" \
-H "X-Api-Key: YOUR_KEY"
{
"success": true,
"count": 23,
"next_cursor": null,
"results": [
{
"name": "Blue Ribbon Sushi",
"score": 87,
"score_label": "Good",
"features": {
"wheelchair_entry": true,
"accessible_restroom": true,
"level_entry": true,
"accessible_parking": false,
"wide_aisles": true,
"elevator": null
},
"distance_miles": 0.3,
"verified": true
}
]
}
That's real data. Not mocked, not a demo. Live right now.
Six features, not a boolean
Every location is evaluated on six specific physical features:
| Feature | What it means |
|---|---|
wheelchair_entry |
Can someone in a wheelchair enter the building? |
accessible_restroom |
Is there a usable accessible restroom? |
level_entry |
Is the entrance at grade (no steps)? |
accessible_parking |
Are there accessible parking spots nearby? |
wide_aisles |
Can a wheelchair navigate between tables? |
elevator |
Multi-floor venue — is there an elevator? |
Each feature is true, false, or null (unknown). The 0-100 score weights these by real-world impact — because a wheelchair-accessible entrance matters more than a parking spot.
Six endpoints
| Endpoint | Method | What it does |
|---|---|---|
/v1/locations |
GET | Search by coordinates, radius, score, features, cuisine |
/v1/locations/:id |
GET | Full detail for one location |
/v1/regions |
GET | List all coverage areas with location counts |
/v1/feedback |
POST | Submit accessibility corrections (Developer+) |
/v1/score/:id |
GET | Detailed scoring breakdown (Business+) |
/v1/health |
GET | API status — no auth required |
Pricing
| Tier | Rate | Monthly | Price |
|---|---|---|---|
| Free | 10/min | 1,000 calls | $0 |
| Developer | 60/min | 50,000 calls | $29/mo |
| Business | 200/min | 500,000 calls | $149/mo |
| Enterprise | Custom | Unlimited | Custom |
Free tier: no credit card, just your email. Get a key in 30 seconds at the Developer Portal.
The MCP Server
This is the part I'm most excited about.
Model Context Protocol lets AI assistants call external tools natively. We published an MCP server to npm so any MCP-compatible AI can search ROLLIN, look up locations, check coverage, and submit feedback — all through natural conversation.
Setup (60 seconds)
npx -y rollin-mcp-server
That's it. Works with:
- Claude Desktop (Anthropic)
- Claude Code (CLI)
- Cursor (AI code editor)
- VS Code (GitHub Copilot MCP)
- Any MCP-compatible client
Claude Desktop config
Add this to your claude_desktop_config.json:
{
"mcpServers": {
"rollin": {
"command": "npx",
"args": ["-y", "rollin-mcp-server"],
"env": {
"ROLLIN_API_KEY": "your_api_key_here"
}
}
}
}
Five tools
| Tool | What it does |
|---|---|
search_locations |
"Find accessible Italian restaurants near me" |
get_location_details |
"Tell me more about that sushi place" |
list_regions |
"What cities do you cover?" |
submit_feedback |
"That place has a ramp now" |
check_health |
Verify API is up before making requests |
What this looks like in practice
You: "Find me wheelchair accessible restaurants near Times Square with a score above 80."
Claude calls search_locations with lat=40.758, lng=-73.985, min_score=80 and responds:
Here are 3 highly accessible restaurants near Times Square:
- Junior's Restaurant (92) — Wheelchair entry, accessible restroom, level entry
- Sushi Nakazawa (85) — Wheelchair entry, level entry, wide aisles
- Carmine's Italian (82) — Wheelchair entry, accessible restroom, parking
You: "Does Carmine's have an elevator?"
Claude calls get_location_details and gives you the full breakdown.
No custom code. No API wrangling. Just conversation.
npm: npmjs.com/package/rollin-mcp-server
GitHub: github.com/DavidSirota/rollin-mcp-server
How Search Works
On the consumer side (joinrollin.com), ROLLIN has two search experiences:
Hero Search
The landing page has a search box that accepts natural language queries. Type "accessible sushi near Times Square" and it parses your intent — cuisine, location, accessibility priority — and returns scored results instantly.
You can also use filter chips: toggle specific features (wheelchair entry, accessible restroom, parking), set a minimum score, and narrow by region.
Map View
The full map experience renders all 56,000+ locations on an interactive map. Search as you pan, filter by score and features, and tap any marker for the full accessibility breakdown.
Both experiences hit the same data and scoring engine that powers the API. What developers get is the same data consumers see — no second-class data tier.
How the Data Gets Smarter
This is the real differentiator. ROLLIN's data isn't static. It improves every day through multiple feedback loops:
Community corrections
Users can submit corrections on any location. "That place added a ramp." "The restroom isn't actually accessible." Every correction is reviewed and weighted by the contributor's track record. Accurate contributors earn trust over time and their feedback carries more weight.
Continuous verification
Scores are recalculated as new data comes in. A location that gets verified by multiple sources — and where those sources agree — earns a higher confidence score. A location where data conflicts or is stale gets flagged.
Conservative by default
When critical data is missing, scores are held back. We'd rather tell you "we're not sure" than give you false confidence. A verified score is always worth more than one based on incomplete data.
The result
The more people use ROLLIN — searching, correcting, verifying — the better the data gets. That's not just a tagline. It's how the scoring engine is architected. Every interaction is a signal.
What You Can Build With This
Some ideas we're genuinely excited about:
- Travel apps — add an accessibility layer to trip planning
- Restaurant discovery — filter by "actually accessible," not just "ADA compliant"
- Navigation apps — route wheelchair users to places they can actually enter
- Corporate tools — help companies pick accessible venues for team events
- Healthcare platforms — recommend accessible dining near hospitals and rehab centers
- AI assistants — plug in the MCP server and give any AI real accessibility knowledge
- Research — analyze accessibility patterns across cities and regions
Python SDK
On launch day, Stainless Commons auto-generated a Python SDK for the ROLLIN API — the same tooling behind the OpenAI and Stripe SDKs.
from rollin import Rollin
client = Rollin(api_key="your_key_here")
locations = client.locations.list(
lat=40.7128, lng=-74.0060,
radius=2, min_score=70
)
for loc in locations.results:
print(f"{loc.name}: {loc.score}")
Get Started
- Get a free API key: joinrollin.com/portal
- Read the docs: joinrollin.com/developers
- Set up MCP: joinrollin.com/mcp
- Browse the API overview: joinrollin.com/api
-
Install the Python SDK:
pip install git+https://github.com/stainless-commons/rollin-python.git
Free tier: 1,000 requests/month, no credit card. Enough to prototype anything.
Why I Built This
There are 5.5 million wheelchair users in the US. Most of them have learned not to trust "accessible" labels because the bar is embarrassingly low. A grab bar in a bathroom technically qualifies as "accessible." That doesn't help someone who can't get past the front step.
Nobody should have to call ahead to ask if they can get into a restaurant. That's the system we're fixing — one scored location at a time.
If you build something with the API or MCP server, I'd love to hear about it. Drop a comment or reach out — projects@stacklinestudio.com.
Links:
- joinrollin.com — Search accessible places
- API Docs — Full endpoint reference
- Developer Portal — Get your API key
- MCP Server — AI assistant integration
- npm: rollin-mcp-server
- GitHub: MCP Server
- GitHub: Python SDK
Top comments (0)