Operated by Sourcelane✓ verified
Search Hacker News stories, comments, Show HN, Ask HN, polls, and jobs by keyword, author, date range, points, and comment count. Full text and engagement metrics. No login.
Search-focused scraper for Hacker News that performs keyword- and attribute-based queries across stories, comments, Show HN, Ask HN, polls, jobs and front-page items. It supports filtering by author, date range, minimum points and minimum comment counts, and offers relevance or date sorting. Technically, the connector queries HN search, handles pagination with a resumable cursor, and returns structured records containing identifiers and content type, titles and target URLs, author metadata, engagement metrics (points and comment counts), full post or comment text, parent-thread linkage for comments (parent story identifiers, titles and URLs) for thread reconstruction, created timestamps (ISO and Unix), HN permalinks, and tag lists. Outputs are suitable for building searchable corpora or analytic results focused on full text and engagement signals.
Verified Sep 28, 3:55 AM
$0.001
per item
Up to 100 per call. Only pay for results returned; failed calls are refunded.
Monitoring
Track every Hacker News post that mentions a product, brand, or competitor
Market signal detection
Identify rising tools, libraries, or trends before front-page visibility
Author research
Collect all Show HN, Ask HN posts or comments from a specific user
Topic results creation
Build a corpus of HN discussions on a niche topic for analysis or LLM fine-tuning
Lead generation
Find founders posting about problems relevant to a product or service
Keyword to search across titles, URLs, story text, and comment text.
Optional.
Optional.
Optional.
Optional settings
| Window | Uptime | Success rate | p50 | p95 | Calls |
|---|---|---|---|---|---|
| 24h | — | — | — | — | 0 |
| 7d | — | — | — | — | 0 |
| 30d | — | — | — | — | 0 |
Call it through Sourcelane's gateway or MCP server. We run the connector, apply your agent's spend guardrails, and bill only the results returned.
Call it via Sourcelane
curl -X POST https://api.usesourcelane.com/v1/call \
-H "Authorization: Bearer sl_live_your_agent_key" \
-H "Content-Type: application/json" \
-d '{"listing":"hn-search-scraper","params":{"query":"openai","maxItems":5},"maxResults":10}'Request params
| Field | Type | Required | Description |
|---|---|---|---|
query | string | optional | Keyword(s) to search across titles, URLs, story text, and comment text. Leave empty to fetch the most recent items in the chosen tag. |
tag | string | optional | Restrict results to a single item type. 'Front Page Stories' = stories that have appeared on the HN front page. |
author | string | optional | Optional. HN username to restrict results to (case-sensitive). Leave empty to search all authors. |
sortBy | string | optional | Relevance favors highly-upvoted matches; Date returns the most recent items first. |
dateAfter | string | optional | Optional. Only return items created on or after this UTC date. |
dateBefore | string | optional | Optional. Only return items created on or before this UTC date. |
minPoints | integer | optional | Only return stories with at least this many points. Ignored for comments. |
minComments | integer | optional | Only return stories with at least this many comments. Ignored for comments. |
maxItems | integer | optional | Maximum results to return. 0 = no cap. Algolia caps relevance results at ~1000; date sort can return more. Capped at 100 per call. |
pageId | string | optional | Optional. Paste the NEXT_PAGE_ID from a previous run's Key-value store to resume from where you left off. |
Each result contains
| Field | Type | Description |
|---|---|---|
objectID | string | Object ID |
type | string | Type |
title | string | Title |
url | string | Url |
author | string | Author |
points | integer | Points |
numComments | integer | Num Comments |
storyText | null | Story Text |
commentText | null | Comment Text |
storyId | integer | Story Id |
storyTitle | null | Story Title |
storyUrl | null | Story Url |
parentId | null | — |
createdAt | string | — |
createdAtUnix | integer | — |
hnUrl | string | — |
tags | array | — |
Pick your tool and connect in under a minute. Then just ask — for example: “For these 50 domains, find contact emails and what e-commerce platform they run on.”
Connect Claude
Web, desktop and mobile. One click, then confirm.
Adds the Sourcelane MCP server with your key as a header.
claude mcp add --transport http sourcelane https://api.usesourcelane.com/mcp \
--header "Authorization: Bearer sl_live_your_agent_key"Alternative to the connector URL: add to claude_desktop_config.json, then restart Claude.
{
"mcpServers": {
"sourcelane": {
"command": "npx",
"args": [
"-y",
"mcp-remote",
"https://api.usesourcelane.com/mcp",
"--header",
"Authorization:${AUTH_HEADER}"
],
"env": {
"AUTH_HEADER": "Bearer sl_live_your_agent_key"
}
}
}
}Add to ~/.cursor/mcp.json (or Windsurf's mcp_config.json).
{
"mcpServers": {
"sourcelane": {
"url": "https://api.usesourcelane.com/mcp",
"headers": {
"Authorization": "Bearer sl_live_your_agent_key"
}
}
}
}Save as .vscode/mcp.json. VS Code prompts for your key once.
{
"servers": {
"sourcelane": {
"type": "http",
"url": "https://api.usesourcelane.com/mcp",
"headers": {
"Authorization": "Bearer ${input:sourcelane-key}"
}
}
},
"inputs": [
{
"type": "promptString",
"id": "sourcelane-key",
"description": "Sourcelane agent key",
"password": true
}
]
}Create a GPT → Actions → Import from URL, then Authentication: API Key, Bearer.
https://usesourcelane.com/openapi.jsonOne POST. Pass maxResults to cap cost.
curl -X POST https://api.usesourcelane.com/v1/call \
-H "Authorization: Bearer sl_live_your_agent_key" \
-H "Content-Type: application/json" \
-d '{"listing":"hn-search-scraper","params":{"query":"openai","maxItems":5},"maxResults":10}'Wrap the REST call as a tool, or point an MCP client at the endpoint.
import requests
res = requests.post(
"https://api.usesourcelane.com/v1/call",
headers={"Authorization": "Bearer sl_live_your_agent_key"},
json={
"listing": "hn-search-scraper",
"params": {"query":"openai","maxItems":5},
"maxResults": 10,
},
timeout=300,
)
body = res.json()
print(body["receipt"]["chargedMicros"], "micro-USD for", body["receipt"]["results"], "results")
print(body["data"])—
0 reviews
Leave a review
Loading reviews…