I built a free API with 43,000+ cannabis strains — effects, terpenes, flavors, and more
I got tired of scraping strain data every time I started a cannabis-related project. Leafly, AllBud, Weedmaps — they all have the data but no public API. So I built one.
What it does:
- 43,000+ strains from 5 sources (Hytiva, Leafly, AllBud, SeedFinder, Weedmaps)
- Effects, flavors, terpene profiles with percentages, cannabinoid data (THC, CBD, CBG, CBC)
- Medical conditions, recommended activities, lineage, breeder info
- REST + GraphQL
- Fuzzy search, filter by effects, flavors, conditions, compare strains side-by-side
Try it right now (no signup):
curl https://api.demarily.dev/bud/api/v1/strains/?page_size=3
Example strain detail response:
{
"name": "Blue Dream",
"type": "hybrid",
"thc_content": 21.0,
"description": "A sativa-dominant hybrid...",
"effects": [{"name": "relaxed"}, {"name": "happy"}, {"name": "euphoric"}],
"flavors": [{"name": "berry"}, {"name": "sweet"}],
"terpenes": [{"name": "myrcene", "percentage": 0.35}]
}
The stack:
- FastAPI + PostgreSQL + Redis
- Cloudflare Worker as reverse proxy (also keeps Render from cold-starti
- Next.js developer portal with API key management and usage dashboards
- Stripe for billing, GitHub Actions CI
Free tier: 100 requests per day, no credit card. Enough to build a p
Links:
- Swagger docs: https://api.demarily.dev/bud/docs
- Developer portal: https://api.demarily.dev/bud/dashboard
The hardest part was the data pipeline — scraping 5 different sites with completely different HTML structures, deduplicating 43k strains by name, and enriching thin records (a lot of scraped strains were just names with no effects or terpene dats that go back to the source detail pages and backfill the missing data.
Happy to answer questions about the scraping, the architecture, or anything else.