Cigar Aficionado APIcigaraficionado.com ↗
Access Cigar Aficionado's ratings database, tasting notes, Top 25 lists, and industry news via 7 structured API endpoints. Filter by brand, country, size, and more.
What is the Cigar Aficionado API?
The Cigar Aficionado API provides structured access to the site's ratings database, editorial content, and annual Top 25 lists across 7 endpoints. Use search_cigars to query over 2,700 brands with filters for country, size, price range, and strength, then pull full tasting notes, wrapper/binder/filler specs, and numeric scores via get_cigar_detail. News articles and historical Top 25 rankings back to 2004 are also available.
curl -X GET 'https://api.parse.bot/scraper/39fd1f83-7145-48eb-9a70-54c40ab854bc/search_cigars?page=1&price=5-10&query=Cohiba&sizes=Toro&brands=Cohiba&countries=Cuba&strengths=Medium' \ -H 'X-API-Key: $PARSE_API_KEY'
Search the cigar ratings database with optional filters for brand, country, size, strength, price, and issue year. Returns paginated results sorted by relevance. Each source page contains up to 20 results. The limit parameter fetches across multiple source pages (up to 5 pages, max 100 results). Use next_page from the response to retrieve the next non-overlapping batch of source records. Pagination advances by source records consumed (not deduplicated count), so dedupe=true does not cause records to be skipped. When include_dimensions is true, each result's detail page is fetched to add length and ring_gauge (adds one request per result). Use year_from/year_to for year range filtering (applied client-side to the issue_date field).
| Param | Type | Description |
|---|---|---|
| page | integer | Starting source page number. Use next_page from a previous response to continue pagination without overlap. |
| limit | integer | Maximum number of results to return. Fetches across source pages if needed (max 100, up to 5 source pages per call). When omitted, returns up to 20 results from the requested page. |
| price | string | Price range filter. |
| query | string | Search query string (e.g. 'Montecristo'). |
| sizes | string | Comma-separated list of sizes to filter by (e.g. 'Toro,Churchill'). |
| brands | string | Comma-separated list of brand names to filter by (e.g. 'Montecristo,Cohiba'). Use get_brands to see all available values. |
| dedupe | boolean | When true, returns one entry per cigar name (case-insensitive) rather than every historical review. Pagination still advances by source records consumed, not deduplicated count. |
| year_to | integer | Filter results to those with issue year <= this value (e.g. 2020). Applied client-side to the issue_date field. Can be combined with year_from for a range. |
| countries | string | Comma-separated list of countries to filter by (e.g. 'Cuba,Nicaragua'). Use get_countries to see all available values. |
| strengths | string | Comma-separated list of strengths to filter by (e.g. 'Medium,Full'). |
| year_from | integer | Filter results to those with issue year >= this value (e.g. 2010). Applied client-side to the issue_date field. Can be combined with year_to for a range. |
| issue_year | string | Filter results by issue/review year (e.g. '2024'). Available years: 2000-2026. |
| include_dimensions | boolean | When true, fetches each result's detail page to add length (inches) and ring_gauge fields. Adds one HTTP request per result, so use with limit for efficiency. |
{
"type": "object",
"fields": {
"page": "integer starting source page number",
"results": "array of cigar result objects with id, name, url, score, image, issue_date, country, price, size. When include_dimensions is true, also includes length and ring_gauge.",
"has_more": "boolean indicating whether more source pages are available after the last consumed page",
"next_page": "integer next source page number to pass as page for the next batch, or null when no more pages",
"total_pages": "integer total number of source pages available for the current query/filters",
"source_pages_consumed": "integer number of source pages fetched for this response"
},
"sample": {
"data": {
"page": 1,
"results": [
{
"id": "26602",
"url": "https://www.cigaraficionado.com/ratings/26602/name/montecristo-no-4-petit-corona",
"name": "Montecristo No. 4",
"size": "Petit Corona",
"image": "https://mshanken.imgix.net/cao/ratings_extras/cigars/26602-H.jpg",
"price": "£26.40",
"score": "91",
"country": "Cuba",
"issue_date": "April 1, 2026"
}
],
"total_pages": 76
},
"status": "success"
}
}About the Cigar Aficionado API
Search and Filter the Ratings Database
The search_cigars endpoint accepts comma-separated filters for brands, countries, sizes, and price, plus a free-text query parameter. Results are paginated at up to 20 per page, and the limit parameter can pull across up to 5 pages (max 100 results per call). Each result object includes id, name, url, score, image, issue_date, country, price, and size. Set dedupe=true to receive one entry per cigar name instead of every historical review of the same cigar. Use get_brands (returns 2,700+ brand name strings) and get_countries to enumerate valid filter values before constructing queries.
Cigar Detail Records
get_cigar_detail accepts a review page URL from search_cigars results and returns the full record: score, tasting_notes, physical dimensions (length in inches and ring_gauge), and a specs object containing size, filler, binder, wrapper, country, price, box_date, and issue. When fetching details for multiple cigars, get_cigar_details_bulk accepts up to 10 comma-separated URLs in a single call and returns the same schema plus an errors array for any URLs that could not be resolved.
Top 25 Lists and News
get_top25_cigars returns the full ranked list for any year from 2004 to 2025. Each entry includes rank, name, a nullable summary, and a url for the detail page. The get_news_list endpoint returns paginated industry news articles with title, url, and nullable summary and date fields. Both endpoints are suitable for tracking editorial trends and annual rankings over time.
The Cigar Aficionado API is a managed, monitored endpoint for cigaraficionado.com — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when cigaraficionado.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 cigaraficionado.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 cigar recommendation tool that filters the ratings database by country, size, and price range using search_cigars.
- Track annual Top 25 winners from 2004 to 2025 to identify which brands and countries appear most frequently.
- Aggregate tasting notes and scores from get_cigar_detail to train a flavor-profile classifier.
- Deduplicate multi-year reviews of the same cigar to find the highest score a specific blend has ever received.
- Ingest paginated news articles from get_news_list to monitor cigar industry developments in a content feed.
- Build a brand catalog browser using the 2,700+ entries from get_brands with score distributions from search_cigars.
- Compare wrapper, binder, and filler specs across high-scoring Nicaraguan and Cuban cigars using bulk detail fetches.
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 200 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
| Team | $300/mo | 20,000 | 300 req/min |
| Company | $1,000/mo | 100,000 | 500 req/min |
Each endpoint has a fixed posted price per successful call — most fall between 1 and 10 credits — shown on this API's page before you run it. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.