Product Hunt API: Search products
Finds Product Hunt products by name or by what they do, in Product Hunt search order, with tagline, review rating, review count, followers and topics. Ratings are null for products without reviews.
Unofficial. Not affiliated with or endorsed by Product Hunt.
Inputs
Values from the run on Oct 31, 2026, shown under Output.
- Query, required
query Product name or words describing what it does, such as Notion or note taking.
note taking
- Max Results optional
max_results Maximum number of products to return, such as 20 (up to 50).
12
Whole number from 1 to 50. Default
20.
Input as JSON
{ "query": "note taking", "max_results": 12}Output
{ "products": [ { "name": "Wispr Flow", "topics": [ "AI Dictation Apps" ], "tagline": "Voice productivity for your writing and your meetings. ", "followers": 9041, "review_rating": 4.74, "number_of_reviews": 80, "product_hunt_link": "https://www.producthunt.com/products/wisprflow" }, { "name": "Voz AI Voice Note Taker", "topics": [ "AI notetakers" ], "tagline": "Record, transcribe, & create structured notes automagically", "followers": 155, "review_rating": null, "number_of_reviews": 0, "product_hunt_link": "https://www.producthunt.com/products/voz-ai-voice-note-taker" }, { "name": "Notato - AI Note Taker", "topics": [], "tagline": "Leave your next lecture or meeting with beautiful notes.", "followers": 165, "review_rating": null, "number_of_reviews": 0, "product_hunt_link": "https://www.producthunt.com/products/notato-ai-note-taker" } ]}Code
curl https://api.fous.com/v1/runs \ -H "Authorization: Bearer $FOUS_API_KEY" \ -H "Content-Type: application/json" \ -d '{"method":"producthunt.com/search_products","input":{"query":"note taking","max_results":12}}' # Save as fous.py, then run: python3 fous.pyimport json, os, timefrom urllib.error import HTTPErrorfrom urllib.request import Request, urlopenAPI = "https://api.fous.com/v1/runs" KEY = os.environ["FOUS_API_KEY"]HEADERS = { "Authorization": f"Bearer {KEY}", "Content-Type": "application/json" ,}def call(url, body=None): data = json.dumps(body).encode() if body else None request = Request(url, data, HEADERS) try: with urlopen(request, timeout=120) as r: return r.status, json.load(r) except HTTPError as error: message = json.load(error)["error"]["message"] raise RuntimeError(message) from errorstatus, run = call(API, { "method": "producthunt.com/search_products" , "input": { "query": "note taking", "max_results": 12 }})# 202: still going after 30 s. Ask again until it ends.while status == 202: time.sleep(2) status, run = call(f"{API}/{run['id']}")print(json.dumps(run["data"], indent=2))// Save as fous.mjs, then run: node fous.mjsconst api = "https://api.fous.com/v1/runs" ;const headers = { Authorization: `Bearer ${process.env.FOUS_API_KEY}`, "Content-Type": "application/json" ,};let response = await fetch(api, { method: "POST", headers, body: JSON.stringify({ "method": "producthunt.com/search_products" , "input": { "query": "note taking", "max_results": 12 } }), signal: AbortSignal.timeout(120_000),});let run = await response.json();// 202: still going after 30 s. Ask again until it ends.while (response.status === 202) { await new Promise((done) => setTimeout(done, 2_000)); response = await fetch(`${api}/${run.id}`, { headers }); run = await response.json();}if (!response.ok) throw new Error(run.error.message);console.log(run.data);# Connect your agent to Fous once, over MCP (Streamable HTTP):# https://api.fous.com/mcp# Set FOUS_API_KEY first: create a key at https://app.fous.com/keys.# Claude Codeclaude mcp add \ --scope user \ --transport http fous https://api.fous.com/mcp \ --header "Authorization: Bearer ${FOUS_API_KEY:?Set FOUS_API_KEY to your Fous API key}"# Codexcodex mcp add fous \ --url https://api.fous.com/mcp \ --bearer-token-env-var FOUS_API_KEY# Cursor, VS Code, Windsurf, Cline and morenpx -y add-mcp https://api.fous.com/mcp -g -n fous \ --header "Authorization: Bearer ${FOUS_API_KEY:?Set FOUS_API_KEY to your Fous API key}"# Then ask your agent:# "Use Fous to run producthunt.com/search_products# with {"query":"note taking","max_results":12}"Over HTTP, the answer’s data holds the output. A run still going after 30 seconds answers 202 with its id: ask GET /v1/runs/{id} until it ends.
Schema
Input schema
{ "type": "object", "required": [ "query" ], "properties": { "query": { "type": "string", "minLength": 1, "description": "Product name or words describing what it does, such as Notion or note taking." }, "max_results": { "type": "integer", "default": 20, "maximum": 50, "minimum": 1, "description": "Maximum number of products to return, such as 20 (up to 50)." } }}Output schema
{ "type": "object", "required": [ "products" ], "properties": { "products": { "type": "array", "items": { "type": "object", "required": [ "name", "tagline", "review_rating", "number_of_reviews", "followers", "topics", "product_hunt_link" ], "properties": { "name": { "type": "string" }, "topics": { "type": "array", "items": { "type": "string" }, "description": "Product Hunt category or topic names for this product." }, "tagline": { "type": [ "string", "null" ] }, "followers": { "type": [ "integer", "null" ] }, "review_rating": { "type": [ "number", "null" ], "description": "Average review rating out of 5, or null when unrated." }, "number_of_reviews": { "type": [ "integer", "null" ] }, "product_hunt_link": { "type": "string" } }, "additionalProperties": false }, "description": "Products in Product Hunt search order." } }, "additionalProperties": false}- Price
- 1 credit per completed run (1¢ with pay as you go); failed runs are free.
- Method
producthunt.com/search_products- Returns
- name, tagline, review rating, number of reviews, followers, topics, Product Hunt link
Use it from your agent
Give your agent this line. It reads SKILL.md, gets a Fous API key and connects the Fous MCP server. Its run then takes the method producthunt.com/search_products with the inputs above.
Ask your agent
- Find me AI meeting note-taker tools on Product Hunt with their ratings and review counts
- What do people think of Linear? Show its tagline, rating, and follower count
- Top 10 screen recording apps, with topics and how many reviews each has
- Search Product Hunt for open-source password managers, up to 30 results
- I need a few habit tracker apps — list names, taglines and links
See more
All Product Hunt methodsGets a Product Hunt product profile by product name or Product Hunt link: tagline, description, website, topics, review rating, followers, the five most recent reviews, recent launches with day rank and upvotes, and alternatives.
producthunt.com/get_productLists featured launches in Product Hunt's daily leaderboard order for a given US Pacific day, with each product's website when its public page shows one.
producthunt.com/list_launchesSearches PyPI by keywords and returns matching packages in relevance order, each with its latest version and that version's release date. Returns up to 100 results.
pypi.org/search_packagesFinds companies on Trustpilot by name or what they do, with TrustScore, review count, categories, location, logo and links. A preferred country moves companies listed in that country to the front.
trustpilot.com/search_companiesFinds Android apps on Google Play by keywords, in Play search order, with each listing's developer, star rating, price and currency for the chosen country, download range and link. Results are limited to apps shown on the public search page.
play.google.com/search_appsSearches H&M clothing and home products by keyword, with country-specific prices and an optional sale-only filter.
hm.com/search_productsSearches Target products and returns prices, ratings, photos and product links. Prices can vary by store, so you can give a ZIP code for local pricing.
target.com/search_productsSearches Microsoft Store apps and games by keywords in a chosen country and returns them in Store order. Subscription-included items can show a price of 0.
apps.microsoft.com/search_apps