Product Hunt to Google Sheets, AI-enriched tool list
Keeping up with Product Hunt sounds simple until you try to turn “cool launches” into something usable. Then it’s tabs, copy-paste, missing fields, and a spreadsheet that slowly turns into a junk drawer.
This Product Hunt automation hits marketers building swipe files, founders doing competitive research, and agency folks who need a reliable stream of tools for newsletters and client ideas. The win is practical: a clean, deduplicated tools list in Google Sheets that stays searchable instead of turning into chaos.
You’ll see how the workflow pulls new Product Hunt posts daily, enriches each one with OpenAI, and stores the results in a structured “Tools” sheet (with category matching so duplicates don’t creep in).
How This Automation Works
See how this solves the problem:
n8n Workflow Template: Product Hunt to Google Sheets, AI-enriched tool list
flowchart LR
subgraph sg0["Daily Trigger at 9 AM Flow"]
direction LR
n0@{ icon: "mdi:database", form: "rounded", label: "Save Enriched Tool to Sheet", pos: "b", h: 48 }
n1@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Is Tool New?", pos: "b", h: 48 }
n2@{ icon: "mdi:database", form: "rounded", label: "Lookup Existing Tool by Title", pos: "b", h: 48 }
n3@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Safety Limit Check (50 itera..", pos: "b", h: 48 }
n4@{ icon: "mdi:brain", form: "rounded", label: "OpenAI GPT-4.1 Mini", pos: "b", h: 48 }
n5@{ icon: "mdi:play-circle", form: "rounded", label: "Daily Trigger at 9 AM", pos: "b", h: 48 }
n6["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/code.svg' width='40' height='40' /></div><br/>Clean & Parse AI JSON Output"]
n7@{ icon: "mdi:swap-vertical", form: "rounded", label: "Extract Pagination Info", pos: "b", h: 48 }
n8["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/code.svg' width='40' height='40' /></div><br/>Restructure API Response to .."]
n9@{ icon: "mdi:database", form: "rounded", label: "Update Category Dictionary (..", pos: "b", h: 48 }
n10@{ icon: "mdi:database", form: "rounded", label: "Lookup Category Dictionary (..", pos: "b", h: 48 }
n11["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/httprequest.dark.svg' width='40' height='40' /></div><br/>Fetch Products from Product .."]
n12@{ icon: "mdi:robot", form: "rounded", label: "AI Agent: Translate & Enrich..", pos: "b", h: 48 }
n13@{ icon: "mdi:cog", form: "rounded", label: "Rate Limit: Wait 15 Seconds", pos: "b", h: 48 }
n14@{ icon: "mdi:swap-vertical", form: "rounded", label: "Initialize Starting Cursor", pos: "b", h: 48 }
n15@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Has Next Page?", pos: "b", h: 48 }
n16@{ icon: "mdi:cog", form: "rounded", label: "Continue Loop", pos: "b", h: 48 }
n1 --> n12
n1 --> n7
n16 --> n13
n15 --> n16
n4 -.-> n12
n5 --> n14
n7 --> n15
n14 --> n11
n13 --> n3
n0 --> n7
n6 --> n0
n2 --> n1
n8 --> n2
n10 -.-> n12
n9 -.-> n12
n3 --> n11
n11 --> n8
n12 --> n6
end
%% Styling
classDef trigger fill:#e8f5e9,stroke:#388e3c,stroke-width:2px
classDef ai fill:#e3f2fd,stroke:#1976d2,stroke-width:2px
classDef aiModel fill:#e8eaf6,stroke:#3f51b5,stroke-width:2px
classDef decision fill:#fff8e1,stroke:#f9a825,stroke-width:2px
classDef database fill:#fce4ec,stroke:#c2185b,stroke-width:2px
classDef api fill:#fff3e0,stroke:#e65100,stroke-width:2px
classDef code fill:#f3e5f5,stroke:#7b1fa2,stroke-width:2px
classDef disabled stroke-dasharray: 5 5,opacity: 0.5
class n5 trigger
class n12 ai
class n4 aiModel
class n1,n3,n15 decision
class n0,n2,n9,n10 database
class n11 api
class n6,n8 code
classDef customIcon fill:none,stroke:none
class n6,n8,n11 customIcon
The Challenge: Turning Product Hunt Into Usable Research
Product Hunt is great for discovery, but it’s a terrible place to “keep” knowledge. You find a tool, skim a few comments, and tell yourself you’ll remember it later. A week passes and it’s gone. If you do try to track launches manually, you end up with inconsistent naming, missing categories, and duplicates that quietly wreck any reporting. Worse, the moment you want to translate descriptions, tag tools by function, or build a directory, you’re doing the same editing work again and again.
It adds up fast. Here’s where it breaks down in real teams.
- Copying titles, links, and blurbs into Sheets takes about 5 minutes per tool, and you still have to clean formatting afterward.
- Duplicates sneak in because “ToolName” and “ToolName AI” look like different entries during a busy week.
- Categories stay inconsistent, which means filters and pivots stop being trustworthy.
- Manual enrichment (translation, tags, summaries) gets postponed, so the spreadsheet never becomes a real research asset.
The Fix: Auto-Collect and AI-Enrich Product Hunt Tools
This workflow runs on a schedule and pulls fresh Product Hunt posts through the Product Hunt API (GraphQL). Each post is normalized into a consistent structure so every row in your spreadsheet follows the same schema. Then the workflow checks Google Sheets to see if that tool already exists by title. If it’s new, an AI agent enriches it with the kind of info you usually wish you had later: translated text, clearer categorization, extracted “what it does,” and documentation-style context you can reuse for directories or internal dashboards. Finally, it writes the enriched tool into a clean “Tools” sheet and keeps going, page by page, until there’s nothing left to fetch.
The workflow starts with a daily schedule, then fetches Product Hunt posts in batches using cursor-based pagination. New items go through OpenAI enrichment and structured JSON parsing. The output lands in Google Sheets with category dictionary syncing so your taxonomy stays tidy.
What Changes: Before vs. After
| What This Eliminates | Impact You’ll See |
|---|---|
|
|
Real-World Impact
Say you review 20 Product Hunt launches each weekday and track them in Sheets. Manually, it’s maybe 5 minutes per tool to copy fields, fix formatting, and add basic categories, which is about 100 minutes a day. With this workflow, you spend about 10 minutes skimming the finished rows and starring what matters, while the daily run handles collection, enrichment, and dedupe in the background. That’s roughly an hour and a half back per day, and the sheet is actually usable.
Requirements
- n8n instance (try n8n Cloud free)
- Self-hosting option if you prefer (Hostinger works well)
- Product Hunt for daily tool discovery via API.
- Google Sheets to store the enriched “Tools” database.
- OpenAI API key (get it from the OpenAI dashboard API keys page).
Skill level: Intermediate. You’ll connect credentials and may tweak a prompt or two, but you won’t be writing an app.
Need help implementing this? Talk to an automation expert (free 15-minute consultation).
The Workflow Flow
A daily schedule triggers the run. n8n starts once per day (you can change it), and it initializes a cursor so the Product Hunt API can be paged safely.
Product Hunt data is fetched and normalized. The workflow pulls posts via GraphQL, then restructures the response into a consistent schema so every tool has the same core fields (title, URL, tagline, and whatever else you choose to keep).
New tools get AI enrichment. A Google Sheets lookup checks if the title already exists. If it’s new, the AI agent generates translations, documentation-style context, function-area classification, and “tech extraction,” then a code node parses the AI JSON into clean columns.
Everything is written to Google Sheets and the loop continues. Categories are matched against a dictionary sheet (and added if needed), the final row is appended or updated, and pagination continues with a short wait to avoid hitting limits.
You can easily modify the enrichment fields to add tags, scoring, or SEO-friendly summaries based on your needs. See the full implementation guide below for customization options.
Step-by-Step Implementation Guide
Step 1: Configure the Schedule Trigger
This workflow starts on a daily schedule and initializes the pagination cursor before calling the Product Hunt API.
- Add the Daily Schedule Start node and set Trigger Hour to
9. - Connect Daily Schedule Start to Set Initial Cursor.
- In Set Initial Cursor, set the cursor value to
null. - Ensure the flow continues from Set Initial Cursor to Request Product Hunt API.
Step 2: Connect Google Sheets
Google Sheets stores enriched product rows and the category translation dictionary.
- Open Find Tool by Title and set the Sheet to
Toolsand Document toMain Spreadsheet(replace[YOUR_ID]with your sheet ID). - In Find Tool by Title, set the filter Title lookup to
{{ $json.Title }}. - Open Store Enriched Tool Row, set Operation to
appendOrUpdate, Sheet toTools, and map Title to{{ $json.Title }}. - Configure Read Category Dictionary to read the
Category Dictionarysheet fromMain Spreadsheet. - Configure Write Category Dictionary with Operation
appendOrUpdateand map the columns to{{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Category_Name_English', ``, 'string') }}and{{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Category_Name_French', ``, 'string') }}. - Credential Required: Connect your
googleSheetsOAuth2Apicredentials for Find Tool by Title, Store Enriched Tool Row, Read Category Dictionary, and Write Category Dictionary.
Step 3: Set Up AI Enrichment
The AI agent translates and enriches product data, using a category dictionary as tools.
- Connect OpenAI Mini Model as the language model for AI Enrich Product Data.
- In OpenAI Mini Model, set the Model to
gpt-4.1-mini. - In AI Enrich Product Data, set Text to
{{JSON.stringify($json)}}and keep Prompt Type asdefine. - Confirm Read Category Dictionary and Write Category Dictionary are connected as AI tools to AI Enrich Product Data.
- Credential Required: Connect your
openAiApicredentials for OpenAI Mini Model.
Step 4: Configure API Fetch and Pagination
This section requests Product Hunt data, formats it, and manages pagination.
- In Request Product Hunt API, set URL to
https://api.producthunt.com/v2/api/graphql, Method toPOST, and Body to the JSON expression:={ "query": "{ posts(order: RANKING, first:5 , after: \"{{ $json.cursor }}\") { edges { cursor node { name description tagline website thumbnail { url } topics { edges { node { name } } } media { videoUrl type url } productLinks { type url } } } pageInfo { endCursor hasNextPage } } }" }. - Enable JSON headers in Request Product Hunt API and set Headers to
{ "Content-Type": "application/json", "Accept": "application/json" }. - Credential Required: Connect your
oAuth2Apicredentials in Request Product Hunt API. - In Format API Response, keep the existing code that maps Product Hunt edges into fields like
Title,Description,category,UrlDemo, andUrlLogo. - In Get Pagination Details, set cursor to
{{ $('Request Product Hunt API').first().json.data.posts.pageInfo.endCursor }}and hasnextpage to{{ $('Request Product Hunt API').first().json.data.posts.pageInfo.hasNextPage }}. - In Check Next Page, keep the condition
{{ $json.hasnextpage }}so the loop only continues when more pages exist.
Step 5: Configure Output Storage and Loop Control
This stage prevents duplicates, parses AI output, stores enriched rows, and controls pagination timing.
- In Find Tool by Title → Check New Tool, keep the condition
{{ $json.isEmpty() }}to process only new products. - In Parse AI JSON Output, keep the JavaScript that strips markdown and parses raw JSON from the AI output.
- Ensure Store Enriched Tool Row runs after Parse AI JSON Output to write enriched data into the Tools sheet.
- Configure Delay 15 Seconds with Amount set to
15to throttle pagination requests. - In Iteration Safety Gate, keep the condition
{{$runIndex}} > 50to prevent endless looping. - Leave Loop Continuation as a no-op node to continue the pagination loop after delays.
error and rawOutput columns to catch invalid AI responses.Step 6: Test and Activate Your Workflow
Run a manual test to confirm the Product Hunt API request, AI enrichment, and Google Sheets output all work as expected.
- Click Execute Workflow and verify Request Product Hunt API returns data.
- Confirm Format API Response outputs structured items with fields like
Title,Description, andUrlDemo. - Check AI Enrich Product Data produces valid JSON and that Parse AI JSON Output parses it without errors.
- Verify new records appear in the
Toolssheet via Store Enriched Tool Row. - Once verified, toggle the workflow to Active so Daily Schedule Start runs daily.
Watch Out For
- Product Hunt OAuth2 credentials can expire or need specific permissions. If things break, check the Product Hunt developer app settings and the connected credential inside n8n first.
- If you’re using Wait nodes or external rendering, processing times vary. Bump up the wait duration if downstream nodes fail on empty responses.
- Default prompts in AI nodes are generic. Add your brand voice early or you’ll be editing outputs forever.
Common Questions
About an hour if your accounts are ready.
Yes, but someone should feel comfortable connecting credentials and testing a run. No coding is required for the default setup.
Yes. n8n has a free self-hosted option and a free trial on n8n Cloud. Cloud plans start at $20/month for higher volume. You’ll also need to factor in OpenAI API costs, which are usually a few cents per enriched tool depending on prompt length.
Two options: n8n Cloud (managed, easiest setup) or self-hosting on a VPS. For self-hosting, Hostinger VPS is affordable and handles n8n well. Self-hosting gives you unlimited executions but requires basic server management.
You can. The easiest place is the AI Enrich Product Data step, where you can change what metadata gets generated (tags, scoring, SEO descriptions, even “who it’s for”). If you prefer a different destination, you can replace the Store Enriched Tool Row Google Sheets step with Airtable, Notion, or a database node while keeping the same enrichment and dedupe logic. You can also swap the schedule for a Webhook or Telegram trigger when you want on-demand runs.
Most of the time it’s OAuth2 credentials that expired or lost access. Reconnect the Product Hunt credential in n8n and confirm your developer app still has the right scopes. Also check the HTTP Request node inputs, because a small GraphQL query change can break parsing if Product Hunt’s response shape changes. If the first page works and later pages fail, it’s often cursor pagination or rate limiting, so keep the Wait node and slow the loop a bit.
On self-hosted n8n, capacity mostly depends on your server and API limits, not an execution quota. On n8n Cloud, your monthly execution limit depends on plan (Starter is suited for lighter daily runs). Practically, this workflow processes Product Hunt posts in batches, with a built-in wait to stay safe, so it’s designed for steady daily collection rather than a one-time scrape of massive historical data.
Often, yes. This flow relies on pagination, branching logic, and “check then write” dedupe behavior, which is where n8n tends to feel simpler and more controllable. You also get a realistic self-hosting path if you don’t want per-task pricing as the list grows. Zapier or Make can still work if you only need a tiny version of this (like “send me today’s top 3 tools”), and you value speed over flexibility. If you want a second opinion before you commit, Talk to an automation expert.
Once this is running, your Product Hunt discoveries stop living in browser tabs and start compounding into a real dataset. The workflow handles the repetitive stuff, and you get a tools list you can actually use.
Need Help Setting This Up?
Our automation experts can build and customize this workflow for your specific needs. Free 15-minute consultation—no commitment required.