Wheresweed APIwheresweed.com ↗
Access Washington DC cannabis dispensary listings, product menus, active deals, reviews, and search via the Where's Weed API. 8 endpoints with paginated results.
What is the Wheresweed API?
The Where's Weed API exposes 8 endpoints covering cannabis dispensary and delivery service data for Washington DC, including business profiles, product menus, active deals, and customer reviews. The get_business_menu endpoint returns per-product fields like name, brand, prices, strain info, and category, while list_deals filters promotions by city slug and product category with expiration and claim data included in every response.
curl -X GET 'https://api.parse.bot/scraper/f7e8c0b5-3386-4c45-96c7-09107da32b9c/list_businesses?city=washington-dc&limit=3&offset=0&business_type=dispensary' \ -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 wheresweed-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.
"""Walkthrough: wheresweed_com_api SDK — bounded, re-runnable; every call capped."""
from parse_apis.wheresweed_com_api import WheresWeed, BusinessType, BusinessNotFound
client = WheresWeed()
# List DC delivery services — limit= caps TOTAL items fetched.
for biz in client.businesses.list(city="washington-dc", business_type=BusinessType.DELIVERY, limit=3):
print(biz.name, biz.rating, biz.is_open)
# Drill-down: take ONE business and explore its sub-resources.
biz = client.businesses.list(city="washington-dc", limit=1).first()
# Menu products for the business
for product in biz.menu.list(limit=3):
print(product.name, product.category, product.recreational)
# Active deals for the business
for deal in biz.deals.list(limit=3):
print(deal.title, deal.display_price, deal.claim_count)
# Reviews for the business
for review in biz.reviews.list(limit=2):
print(review.reviewer_display_name, review.rating, review.text)
# Full business detail via .get()
try:
full = client.businesses.get(slug=biz.slug)
print(full.name, full.review_count, full.source_url)
except BusinessNotFound as e:
print("not found:", e.slug)
# Search across the site
result = client.search_results.search(query="edibles")
print(result.counts.businesses, result.counts.strains)
for cat in result.categories[:2]:
print(cat.name, cat.count)
print("exercised: businesses.list / businesses.get / menu.list / deals.list / reviews.list / search_results.search")
List dispensaries and delivery services. Returns paginated business listings with rating, location, delivery info, and open status. Results are ordered by featured level and relevance.
| Param | Type | Description |
|---|---|---|
| city | string | City slug for filtering listings (e.g. 'washington-dc'). |
| limit | integer | Maximum number of results to return per page. |
| offset | integer | Number of results to skip for pagination. |
| business_type | string | Filter by business type. Omitted returns all types. |
{
"type": "object",
"fields": {
"limit": "current limit",
"offset": "current offset",
"businesses": "array of business listing summaries with id, name, slug, type, rating, location, delivery info",
"total_count": "total number of matching businesses"
},
"sample": {
"data": {
"limit": 3,
"offset": 0,
"businesses": [
{
"id": 160256,
"url": "/washington-dc/marijuana-dispensaries/high-demand-2",
"city": "Washington DC",
"name": "High Demand DC Weed Dispensary & Delivery",
"slug": "high-demand-2",
"state": "DC",
"rating": 0,
"claimed": true,
"is_open": true,
"featured": null,
"latitude": 38.882,
"logo_url": "https://wheresweed.com/listing_images/220x220/e2f4d7be98c0c566683449dc1cecfec6.png",
"position": 0,
"verified": true,
"longitude": -76.991,
"fetched_at": "2026-07-23T14:54:33+00:00",
"has_pickup": false,
"source_url": "https://wheresweed.com/washington-dc/marijuana-dispensaries/high-demand-2",
"deals_count": 0,
"has_medical": false,
"has_delivery": true,
"review_count": 0,
"business_type": "dispensary",
"hours_summary": "Open until 9pm",
"product_count": null,
"distance_miles": 2.99,
"featured_level": null,
"online_ordering": true,
"delivery_minimum": 0,
"has_recreational": true,
"delivery_starting_fee": null,
"free_delivery_threshold": null
}
],
"total_count": 57
},
"status": "success"
}
}About the Wheresweed API
Business Listings and Profiles
The list_businesses endpoint returns paginated dispensary and delivery service summaries filtered by city, business_type, limit, and offset. Each record includes id, name, slug, type, rating, location fields, delivery info, and open status. Slugs from this response feed directly into detail endpoints. The get_business_detail endpoint expands a single listing to its full profile: weekly hours (weekday, open_time, close_time), an address object with latitude/longitude, phone, is_open status, rating, and an HTML about field. Active deals attached to that business are also embedded in the detail response.
Menus, Categories, and Deals
The get_business_menu endpoint returns a paginated product list for a given slug. Each product carries id, name, brand, prices, strain info, and category. The list_categories endpoint provides the category tree for a business — each category object includes id, name, items_count, and a subcategories array — useful for filtering before fetching menu pages. For deal discovery, list_deals accepts a city slug and a product_category filter (e.g. bud, edible, concentrate) and returns deal objects with title, price, expiration, and linked business info. The get_business_deals endpoint narrows deal results to a single business and adds claim_count per deal.
Reviews and Search
The list_reviews endpoint returns review text, per-category rating breakdowns, reviewer info, and vote counts for a given business slug. The response also surfaces overall_rating and total_review_count, though the number of reviews actually returned may be lower due to server-side limits. The search_site endpoint accepts a free-text query and returns grouped results across businesses, locations, menu items, and strains, with a counts object showing match totals per category and a fetched_at ISO timestamp.
Coverage and Scope
All endpoints are oriented toward the Washington DC market as indexed on Where's Weed. Pagination on list endpoints is controlled via limit and offset parameters. Business slugs are the primary key linking endpoints together — retrieve them once from list_businesses or search_site, then pass them into detail, menu, category, deal, and review endpoints.
The Wheresweed API is a managed, monitored endpoint for wheresweed.com — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when wheresweed.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 wheresweed.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 DC cannabis dispensary finder that surfaces open status, ratings, and delivery availability from
list_businesses. - Aggregate product menus across multiple dispensaries using
get_business_menuto compare pricing and strain info. - Send deal alert notifications by polling
list_dealsfiltered byproduct_categoryfor categories likeedibleorconcentrate. - Populate a review dashboard by pulling
list_reviewsdata including per-category rating breakdowns and vote counts. - Create a strain or product search tool using
search_siteto return grouped results across menus and strains. - Map DC dispensaries with geocoordinates by extracting
latitudeandlongitudefromget_business_detailaddress objects. - Track deal claim counts and expiration dates per business using
get_business_dealsfor promotional analytics.
| 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.
Does Where's Weed have an official developer API?+
What does `list_reviews` return and are all reviews always included?+
returned_count and total_review_count separately — the total may exceed the number actually returned in a single response due to server-side caps on review volume.Can I filter `list_businesses` by location beyond a city slug?+
list_businesses endpoint accepts a city slug (e.g. washington-dc) and business_type as filters, but does not currently support radius-based or ZIP-code filtering. Coordinate data is available per business in get_business_detail once you have a slug. You can fork the API on Parse and revise it to add a geo-filtering endpoint if that level of spatial querying is needed.