Earth911 APIearth911.com ↗
Search recycling centers by location and material, get facility details, autocomplete material names, and retrieve sustainability articles from Earth911.
What is the Earth911 API?
The Earth911 API covers 4 endpoints that let you search recycling centers by material and ZIP code, retrieve full facility details by location_id, autocomplete material names via suggest_materials, and page through sustainability articles. A single call to search_recycling_centers returns name, address, phone, distance, and a materials preview for every matching facility in one result set.
curl -X GET 'https://api.parse.bot/scraper/0be26c57-6028-468b-b7b2-60bc9f679d5b/search_recycling_centers?distance=25&location=10001&material=paper' \ -H 'X-API-Key: $PARSE_API_KEY'
Typed, relational, agent-ready
A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.
- Fully typed · autocompletes
- Objects link to objects
- Typed errors & pagination
Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:
uv add parse-sdk uv run parse init uv run parse add --marketplace earth911-com-api
uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.
from parse_apis.earth911_recycling_api import Earth911, RecyclingCenter, RecyclingCenterSummary, AcceptedMaterial, Article
earth911 = Earth911()
# Discover material names via autocomplete
suggestions = earth911.recyclingcentersummaries.suggest_materials(query="glass")
for material_name in suggestions:
print(material_name)
# Search for recycling centers near a zip code
centers = earth911.recyclingcentersummaries.search(material="paper", location="10001", distance=10)
for center in centers:
print(center.name, center.address, center.distance, center.phone)
# Navigate from a summary to full details
first_center = earth911.recyclingcentersummary(location_id="Q1RTNVlbU19C")
detail = first_center.details()
print(detail.name, detail.phone, detail.description)
for mat in detail.materials_accepted:
print(mat.name, mat.services)
# Get a center directly by ID
full = earth911.recyclingcenters.get(location_id="Q1RTNVlbU19C")
print(full.name, full.hours)
# Search educational articles
articles = earth911.articles.search(query="plastic recycling")
for article in articles:
print(article.title, article.url, article.excerpt)
Search for recycling centers and programs by material and location. Returns a list of matching centers with address, phone, distance, and a preview of accepted materials. The full result set is returned in one page. Use suggest_materials to discover valid material names before searching.
| Param | Type | Description |
|---|---|---|
| distance | integer | Search radius in miles. |
| locationrequired | string | Zip code or city name to search near (e.g. '10001' or 'New York'). |
| materialrequired | string | Material to recycle. Use suggest_materials to discover valid names. |
{
"type": "object",
"fields": {
"query": "object containing the search parameters (material, location, distance)",
"results": "array of recycling center summary objects with name, location_id, address, phone, distance, type, preview_materials, and detail_url",
"total_results": "integer count of results returned"
},
"sample": {
"data": {
"query": {
"distance": 25,
"location": "10001",
"material": "paper"
},
"results": [
{
"name": "New York City Curbside Recycling Program",
"type": "program",
"phone": "+1 (555) 012-3456",
"address": "New York, NY 10001",
"distance": "MunicipalProgram",
"detail_url": "https://search.earth911.com/program/Q1RTNVlbU19C/",
"location_id": "Q1RTNVlbU19C",
"preview_materials": [
"Blueprints",
"Booklets",
"Brochures"
]
}
],
"total_results": 10
},
"status": "success"
}
}About the Earth911 API
Searching for Recycling Centers
The search_recycling_centers endpoint accepts a required material string and a location (ZIP code or city name), plus an optional distance in miles. It returns a flat array of results — no pagination — where each object includes name, location_id, address, phone, distance, type, and preview_materials. The location_id value is the key you need to drill into a specific facility.
Facility Details and Accepted Materials
get_location_details takes a single location_id and returns the complete profile for that facility or program: materials_accepted (an array of objects with name and a services array such as dropoff or pickup), hours, phone, address, and a free-text description. The type field distinguishes between a physical location and a mail-in or virtual program.
Material Autocomplete
Earth911 uses specific material name strings that must match its catalog. The suggest_materials endpoint accepts a partial query (e.g. 'plas') and returns a suggestions array of valid material name strings. Run this before calling search_recycling_centers to avoid zero-result queries caused by inexact material names.
Educational Resources
get_educational_resources searches Earth911's article archive. It accepts an optional query keyword and an optional 1-based page integer for pagination. Each result object contains title, url, and excerpt. This endpoint is independent of the recycling-center endpoints and covers sustainability guides, how-to articles, and recycling explainers.
The Earth911 API is a managed, monitored endpoint for earth911.com — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when earth911.com changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official earth911.com API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Build a recycling locator widget that shows the nearest drop-off points for a specific material given a user's ZIP code.
- Populate a facility detail page with accepted materials, hours, and phone using get_location_details after a center search.
- Validate user-entered material names against the Earth911 catalog with suggest_materials before running a center search.
- Filter search results by distance to surface only the closest facilities within a configurable radius.
- Index Earth911 sustainability articles in a content aggregator using get_educational_resources with keyword and page parameters.
- Show service type badges (dropoff vs. pickup) per material on a facility detail view using the materials_accepted services array.
- Classify facilities as physical locations versus remote programs using the type field from get_location_details.
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 100 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
One credit = one API call regardless of which marketplace API you call. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.