Hacker News to Airtable, searchable job leads fast
Keeping up with the monthly “Who is Hiring?” thread on Hacker News sounds simple. Then you open it and realize it’s hundreds of comments, inconsistent formatting, and great roles buried under noise.
This HN Airtable automation hits job seekers first, honestly. But recruiters tracking market movement and agency owners hiring contractors feel the same pain. You want a clean, searchable list you can filter in seconds, not another tab you promise to “review later.”
This workflow pulls the latest hiring thread, extracts each job post, uses OpenAI to turn messy text into clean fields, and saves everything into Airtable. You’ll see how it works, what you need, and what results to expect.
How This Automation Works
Here’s the complete workflow you’ll be setting up:
n8n Workflow Template: Hacker News to Airtable, searchable job leads fast
flowchart LR
subgraph sg0["When clicking ‘Test workflow’ Flow"]
direction LR
n0@{ icon: "mdi:play-circle", form: "rounded", label: "When clicking ‘Test workflow’", pos: "b", h: 48 }
n1@{ icon: "mdi:swap-vertical", form: "rounded", label: "Split Out", pos: "b", h: 48 }
n2@{ icon: "mdi:brain", form: "rounded", label: "OpenAI Chat Model", pos: "b", h: 48 }
n3@{ icon: "mdi:robot", form: "rounded", label: "Structured Output Parser", pos: "b", h: 48 }
n4["<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/>Search for Who is hiring posts"]
n5@{ icon: "mdi:swap-vertical", form: "rounded", label: "Get relevant data", pos: "b", h: 48 }
n6@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Get latest post", pos: "b", h: 48 }
n7@{ icon: "mdi:swap-vertical", form: "rounded", label: "Split out children (jobs)", pos: "b", h: 48 }
n8@{ icon: "mdi:robot", form: "rounded", label: "Trun into structured data", pos: "b", h: 48 }
n9@{ icon: "mdi:swap-vertical", form: "rounded", label: "Extract text", pos: "b", h: 48 }
n10["<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 text"]
n11@{ icon: "mdi:cog", form: "rounded", label: "Limit for testing (optional)", pos: "b", h: 48 }
n12["<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/airtable.svg' width='40' height='40' /></div><br/>Write results to airtable"]
n13["<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/>HI API: Get the individual j.."]
n14["<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/>HN API: Get Main Post"]
n1 --> n5
n10 --> n11
n9 --> n10
n6 --> n14
n5 --> n6
n2 -.-> n8
n14 --> n7
n3 -.-> n8
n7 --> n13
n8 --> n12
n11 --> n8
n4 --> n1
n0 --> n4
n13 --> n9
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 n0 trigger
class n3,n8 ai
class n2 aiModel
class n6 decision
class n12 database
class n4,n13,n14 api
class n10 code
classDef customIcon fill:none,stroke:none
class n4,n10,n12,n13,n14 customIcon
Why This Matters: Turning a Mega-Thread Into Real Leads
The “Who is Hiring?” thread is valuable because it’s raw and direct. It’s also a mess for the exact same reason. Companies post in their own style, sometimes with no location, sometimes with a wall of requirements, sometimes with a single sentence and an email address. If you’re trying to find “remote backend” or “Berlin product design,” you end up scrolling, skimming, copying snippets into notes, and telling yourself you’ll organize it later. Later rarely happens. And even when you do organize it, the next month starts and you repeat the whole process.
It adds up fast. Here’s where it breaks down in the real world.
- You waste about 2 hours per thread just skimming and copy-pasting the good ones somewhere “temporary.”
- Important details are inconsistent, so you can’t reliably filter by role, location, visa, or remote policy.
- You miss strong leads because the best posts are not necessarily the most upvoted or the easiest to read.
- Trend tracking is basically impossible when last month’s notes are a Google Doc, a bookmark folder, and a half-finished spreadsheet.
What You’ll Build: Hacker News Job Leads to Airtable, Clean and Searchable
This workflow turns the monthly Hacker News hiring thread into structured Airtable records you can actually use. It starts by fetching the latest “Who is Hiring?” post via HTTP requests, then pulls the comment replies where the job listings live. Each comment gets cleaned up (so the formatting quirks don’t trip you up), then OpenAI reads the text and returns a consistent JSON-style structure with the fields you care about. Finally, n8n creates a record in Airtable per listing, so you can filter, sort, and compare posts over time. You end up with a living database instead of a one-time scroll session.
The workflow begins with a manual launch in n8n, which is handy when you want to run it right after the new thread drops. From there, it filters to the most recent hiring post, splits out job replies, and enriches each one into clean fields before saving to Airtable.
What You’re Building
| What Gets Automated | What You’ll Achieve |
|---|---|
|
|
Expected Results
Say you review 60 job posts from the thread each month and spend maybe 2 minutes per post to copy text, label it, and paste into a spreadsheet. That’s about 2 hours of pure admin before you even start applying or shortlisting. With this workflow, you kick off the run in about 2 minutes, wait for processing, and then review everything inside Airtable with filters already available. You still do the human part (deciding what’s good), but the organizing work mostly disappears.
Before You Start
- n8n instance (try n8n Cloud free)
- Self-hosting option if you prefer (Hostinger works well)
- Airtable for storing and filtering job listings
- OpenAI to extract fields from messy text
- OpenAI API key (get it from your OpenAI dashboard)
Skill level: Intermediate. You’ll connect accounts, set up an Airtable table, and tweak a couple of fields, but you won’t be writing an app.
Want someone to build this for you? Talk to an automation expert (free 15-minute consultation).
Step by Step
A manual run kicks things off. You start the workflow when you’re ready (for example, right after the monthly thread drops). n8n then uses HTTP Request nodes to pull the latest “Who is Hiring?” entries from Hacker News sources.
Results are divided and checked for recency. The workflow splits the response into items, maps key fields, and filters to the most recent hiring post so you’re not processing last year’s thread by accident.
Each job listing gets cleaned and structured. Replies are separated into individual job comments, the text body is isolated, and formatting is normalized. Then the OpenAI chat model (via the AI Agent / chain node) converts that cleaned text into structured JSON that matches the fields you want to store.
Airtable becomes your searchable database. For every parsed listing, n8n creates a record in Airtable, which means filters, views, and lightweight reporting are available immediately.
You can easily modify the fields you extract (like “visa,” “salary,” or “tech stack”) to match how you search and shortlist. See the full implementation guide below for customization options.
Step-by-Step Implementation Guide
Step 1: Configure the Manual Trigger
Start the workflow with a manual trigger so you can test the extraction process on demand.
- Add the Manual Launch Trigger node to the canvas.
- Leave default settings as-is to enable manual execution.
- Ensure the connection from Manual Launch Trigger goes to Retrieve Hiring Posts.
Step 2: Connect Algolia Search and Filter Recent Posts
Fetch the latest “Ask HN: Who is hiring” posts and isolate recent threads only.
- Open Retrieve Hiring Posts and set URL to
https://uj5wyc0l7x-dsn.algolia.net/1/indexes/Item_dev_sort_date/query. - Set Method to
POSTand ensure Send Body, Send Query, and Send Headers are enabled. - Paste the provided JSON into Body Parameters (JSON) exactly as shown in the node (the query includes
"Ask HN: Who is hiring"). - Credential Required: Connect your httpHeaderAuth credentials in Retrieve Hiring Posts.
- In Divide Results, set Field To Split Out to
hits. - In Map Key Fields, map fields with expressions: title
={{ $json.title }}, createdAt={{ $json.created_at }}, updatedAt={{ $json.updated_at }}, storyId={{ $json.story_id }}. - In Filter Recent Post, set the date condition to
={{ $json.createdAt }}after={{$now.minus({days: 30})}}.
days value.Step 3: Fetch Thread Replies and Extract Text
Load the main thread and each job reply to isolate the text content for processing.
- In Fetch Main Thread, set URL to
=https://hacker-news.firebaseio.com/v0/item/{{ $json.storyId }}.json?print=pretty. - In Separate Job Replies, set Field To Split Out to
kidsto split replies into individual items. - In Fetch Job Detail, set URL to
=https://hacker-news.firebaseio.com/v0/item/{{ $json.kids }}.json?print=pretty. - In Isolate Text Body, set text to
={{ $json.text }}.
text for the item (some replies may be deleted or empty).Step 4: Clean, Limit, and Structure the Job Text with AI
Normalize the raw HTML text, limit the sample size, and convert each job into structured JSON using the AI chain.
- Open Normalize Text Content and keep the provided JavaScript code to clean HTML, URLs, and formatting artifacts.
- In Restrict Sample Size, set Max Items to
5to control processing volume. - In Convert to Structured JSON, set Text to
={{ $json.cleaned_text }}and keep Prompt Type asdefine. - Connect Structured Result Parser to Convert to Structured JSON as the output parser, and keep the provided schema.
- Ensure OpenAI Conversation Model is connected as the language model for Convert to Structured JSON and uses model
gpt-4o-mini. - Credential Required: Connect your openAiApi credentials in OpenAI Conversation Model (the parser uses the parent model’s credentials).
Step 5: Configure Airtable Output
Write the structured job data into Airtable for storage and review.
- Open Create Airtable Records and choose your Base and Table.
- Map fields using expressions: type
={{ $json.output.type }}, title={{ $json.output.title }}, salary={{ $json.output.salary }}, company={{ $json.output.company }}, location={{ $json.output.location }}, apply_url={{ $json.output.apply_url }}, company_url={{ $json.output.company_url }}, description={{ $json.output.description }}. - Credential Required: Connect your airtableTokenApi credentials in Create Airtable Records.
title, company, location, etc.) or the create operation will fail.Step 6: Test and Activate Your Workflow
Run a manual test to verify the full extraction chain and then enable the workflow for production use.
- Click Execute Workflow to run the Manual Launch Trigger.
- Confirm that Retrieve Hiring Posts returns results and that Filter Recent Post passes at least one item.
- Verify that Normalize Text Content outputs
cleaned_textand Convert to Structured JSON returns a structuredoutputobject. - Check Airtable for newly created records from Create Airtable Records.
- When satisfied, switch the workflow to Active for production use.
Troubleshooting Tips
- Airtable credentials can expire or the base/table permissions might be too limited. If records don’t appear, check the Airtable connection in n8n and confirm the target base and table still exist.
- If you’re using Wait nodes or external rendering, processing times vary. Bump up the wait duration if downstream nodes fail on empty responses.
- OpenAI outputs depend on prompts, and default prompts are generic. Add your exact field definitions and a few examples early, or you will be cleaning “almost right” results every month.
Quick Answers
About 30 minutes if your Airtable base is ready.
No. You’ll mostly connect accounts and map fields in Airtable. The workflow already handles the parsing and record creation.
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 dollars per month at typical “monthly thread” volumes.
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.
Yes, and you probably should. You can change what gets extracted by editing the prompt used in the OpenAI chat model and the “Convert to Structured JSON” step, then update “Map Key Fields” and your Airtable columns to match. Common tweaks include adding “remote/onsite/hybrid,” extracting a tech stack field, and capturing application links or emails as separate columns.
Usually it’s an expired token or the base/table got renamed. Reconnect Airtable in n8n, then open the “Create Airtable Records” node and reselect the base and table so the field mapping refreshes. Also check Airtable permissions, because read-only access will connect fine but fail on create.
It depends on your n8n plan and how many comments you choose to process, but a typical monthly thread is well within what most setups can handle.
Often, yes, because this workflow mixes multi-step HTTP fetching, splitting items, cleanup, and AI parsing in one place. Zapier and Make can do parts of it, but the “grab thread → fetch many comments → normalize text → parse into structured JSON → bulk create records” pattern gets expensive or awkward when executions spike. n8n also gives you a self-host option, which means you’re not worrying about task limits as soon as you scale up. That said, if you only want a simple “send me the top posts” alert, Zapier or Make can be faster to set up. If you’re unsure, Talk to an automation expert and describe your exact volume and workflow.
This is the kind of automation you set up once, then reuse every month without thinking. Your Airtable becomes the system, and the Hacker News thread becomes just another data source.
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.