Sourcelane

Hacker News Search Scraper Stories, Comments, Show HN, Ask HN

Web & SEO Tools

Operated by Sourcelane✓ verified

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, 12:10 AM

$0.001

per item

Up to 100 per call. Only pay for results returned; failed calls are refunded.

What people use it for

Trust & reliability

7d uptime trend
WindowUptimeSuccess ratep50p95Calls
24h————0
7d————0
30d————0

Calling contract

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://cool-puffin-608.convex.site/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

FieldTypeRequiredDescription
querystringoptionalKeyword(s) to search across titles, URLs, story text, and comment text. Leave empty to fetch the most recent items in the chosen tag.
tagstringoptionalRestrict results to a single item type. 'Front Page Stories' = stories that have appeared on the HN front page.
authorstringoptionalOptional. HN username to restrict results to (case-sensitive). Leave empty to search all authors.
sortBystringoptionalRelevance favors highly-upvoted matches; Date returns the most recent items first.
dateAfterstringoptionalOptional. Only return items created on or after this UTC date.
dateBeforestringoptionalOptional. Only return items created on or before this UTC date.
minPointsintegeroptionalOnly return stories with at least this many points. Ignored for comments.
minCommentsintegeroptionalOnly return stories with at least this many comments. Ignored for comments.
maxItemsintegeroptionalMaximum results to return. 0 = no cap. Algolia caps relevance results at ~1000; date sort can return more. Capped at 100 per call.
pageIdstringoptionalOptional. Paste the NEXT_PAGE_ID from a previous run's Key-value store to resume from where you left off.

Each result contains

FieldTypeDescription
objectIDstringObject ID
typestringType
titlestringTitle
urlstringUrl
authorstringAuthor
pointsintegerPoints
numCommentsintegerNum Comments
storyTextnullStory Text
commentTextnullComment Text
storyIdintegerStory Id
storyTitlenullStory Title
storyUrlnullStory Url
parentIdnull—
createdAtstring—
createdAtUnixinteger—
hnUrlstring—
tagsarray—

Use Hacker News Search Scraper Stories, Comments, Show HN, Ask HN from Claude, ChatGPT or Cursor

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. Paste one URL.

  1. 1Copy your personal connector URL
  2. 2In Claude open Settings → Connectors → Add custom connector
  3. 3Paste the URL and click Add — done
Manual setup (config files, REST, Python) +

Claude Code

Adds the Sourcelane MCP server with your key as a header.

terminal
claude mcp add --transport http sourcelane https://cool-puffin-608.convex.site/mcp \
  --header "Authorization: Bearer sl_live_your_agent_key"

Claude Desktop (config file)

Alternative to the connector URL: add to claude_desktop_config.json, then restart Claude.

claude_desktop_config.json
{
  "mcpServers": {
    "sourcelane": {
      "command": "npx",
      "args": [
        "-y",
        "mcp-remote",
        "https://cool-puffin-608.convex.site/mcp",
        "--header",
        "Authorization:${AUTH_HEADER}"
      ],
      "env": {
        "AUTH_HEADER": "Bearer sl_live_your_agent_key"
      }
    }
  }
}

Cursor & Windsurf

Add to ~/.cursor/mcp.json (or Windsurf's mcp_config.json).

mcp.json
{
  "mcpServers": {
    "sourcelane": {
      "url": "https://cool-puffin-608.convex.site/mcp",
      "headers": {
        "Authorization": "Bearer sl_live_your_agent_key"
      }
    }
  }
}

VS Code

Save as .vscode/mcp.json. VS Code prompts for your key once.

.vscode/mcp.json
{
  "servers": {
    "sourcelane": {
      "type": "http",
      "url": "https://cool-puffin-608.convex.site/mcp",
      "headers": {
        "Authorization": "Bearer ${input:sourcelane-key}"
      }
    }
  },
  "inputs": [
    {
      "type": "promptString",
      "id": "sourcelane-key",
      "description": "Sourcelane agent key",
      "password": true
    }
  ]
}

ChatGPT Custom GPT (Actions)

Create a GPT → Actions → Import from URL, then Authentication: API Key, Bearer.

OpenAPI schema URL
https://sourcelane-amber.vercel.app/openapi.json

REST

One POST. Pass maxResults to cap cost.

curl
curl -X POST https://cool-puffin-608.convex.site/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}'

Python, LangChain, CrewAI, OpenAI Agents SDK…

Wrap the REST call as a tool, or point an MCP client at the endpoint.

python
import requests

res = requests.post(
    "https://cool-puffin-608.convex.site/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"])

Reviews

—

0 reviews

5
0
4
0
3
0
2
0
1
0

Leave a review

Loading reviews…