Search products by keyword
Search Product Hunt for products matching a keyword or phrase. Each match comes back with its slug, tagline, logo, review count and average rating, plus a cursor to page deeper. Use it to find the slug that product-detail and product-comments take.
/search-products Products https://api.fetchlayer.dev/producthunt/search-products Headers
Authorization string required Bearer token — your FetchLayer API key.
Parameters
query string required Keyword or phrase to search Product Hunt for.
limit number optional Maximum products returned (max 500), or -1 for everything available. (default: 30)
pages number optional Pages of results to collect in one request (max 100), or -1 for the maximum allowed. Each page walked counts as one request. (default: 1)
cursor string optional Resume from a previous response's nextCursor.
delayMs number optional Milliseconds to wait between pages (max 30000).
format string optional json or markdown. Markdown returns the same result rendered as text. (default: json)
timeoutMs number optional Per-request time limit in milliseconds (max 600000).
Response Fields
search-products
Search products by keyword
query string The keyword the search ran with.
products object[] The matching products.
products[].slug string Product slug — the handle for product-detail and product-comments.
products[].name string | null Product name.
products[].tagline string | null The one-line pitch shown under the name.
products[].url string Public Product Hunt page for the product.
products[].logoUrl string | null Logo image URL. Pass it to GET /media to download the file.
products[].reviewsCount number | null How many reviews the product has.
products[].reviewsRating number | null Average review rating.
products[].followersCount number | null Followers on Product Hunt.
products[].launchesCount number | null How many times the product has launched.
products[].isNoLongerOnline boolean Whether Product Hunt has marked the product as dead.
productCount number Number of products in this response.
pagesAvailable number | null Total pages Product Hunt reports for this query, where it reports one.
pagesScraped number Pages actually collected. Each page counts as one request against your plan.
pagesRequested number Pages the request asked for.
nextCursor string | null Pass back as cursor to continue, or null when the listing is exhausted.
hasNextPage boolean Whether more results are available beyond this response.
requestedUrl string The Product Hunt page this result corresponds to.
scrapedAt string ISO timestamp the result was collected at.
notes string[] Read this. Caveats about this specific result — a walk that stopped early, an upstream ceiling, or promoted entries that were dropped. An empty array means nothing was held back.
blocked boolean Always false on a successful response.
Request
curl -X POST "https://api.fetchlayer.dev/producthunt/search-products" \
-H "Authorization: Bearer ss-your-key" \
-H "Content-Type: application/json" \
-d '{"query":"ai note taking","limit":30}'Response
{
"query": "ai note taking",
"productCount": 30,
"pagesScraped": 1,
"hasNextPage": true,
"notes": [],
"products": [
{
"slug": "granola",
"name": "Granola",
"tagline": "The AI notepad for people in back-to-back meetings",
"reviewsCount": 214,
"reviewsRating": 4.9,
"launchesCount": 3
}
]
}