Skip to main content

skim-haystack

Give your Haystack pipelines the ability to read any URL — clean Markdown, ~4x smaller than raw HTML. No ads, no nav, no boilerplate.

PyPI version License: MIT

skim-haystack is the official Haystack integration for Skim — the clean reader API for AI agents. It provides one component, SkimReader, that fetches any web page and returns it as a Haystack Document (clean Markdown in content, structured metadata in meta). Output is ~4x smaller than raw HTML — your pipeline processes more pages with fewer tokens.

Two ways to pay: card plan with API key (free tier: 1,000 reads/month — skim402.com/pricing) or x402 wallet pay-per-call ($0.002 USDC on Base, no account needed).

See it before you wire it: try Skim free in your browser — 10 free skims a day, no wallet, no signup. Paste a URL, see exactly what your agent gets back.


Install

pip install skim-haystack

Quickstart (60 seconds)

1. Get a free API key

Go to skim402.com/pricing, sign up for the free plan (1,000 reads/month), and copy your sk402_... key.

2. Set the env var

export SKIM_API_KEY=sk402_your_key_here

3. Use it

from skim_haystack import SkimReader

reader = SkimReader()  # reads SKIM_API_KEY from the environment

result = reader.run(urls="https://en.wikipedia.org/wiki/HTTP_402")
print(result["documents"][0].content)

Alternative: pay per call with a crypto wallet

If you prefer x402 wallet pay-per-call instead of a card plan:

export SKIM_WALLET_PRIVATE_KEY=0xYOUR_BASE_WALLET_PRIVATE_KEY

Fund a dedicated Base wallet with a small USDC balance. Each read costs $0.002 on Base. Full setup guide: https://skim402.com/wallet.

Use a fresh wallet, not your personal one. This wallet's private key signs payment authorizations on your machine — treat it like a hot wallet for paying $0.002 tolls, not a savings account.

Or configure explicitly with Haystack Secrets:

from haystack.utils import Secret
from skim_haystack import SkimReader

reader = SkimReader(
    private_key=Secret.from_token("0x..."),
    max_price_usd=0.005,
    include_metadata=True,
)

Use it in a pipeline

SkimReader is a standard Haystack component, so it drops straight into a Pipeline. Here it fetches a page and feeds the cleaned Markdown into a prompt:

from haystack import Pipeline
from haystack.components.builders import PromptBuilder
from haystack.components.generators import OpenAIGenerator
from skim_haystack import SkimReader

pipe = Pipeline()
pipe.add_component("reader", SkimReader())
pipe.add_component("prompt", PromptBuilder(
    template="Summarize this article in 5 bullets:\n\n{{ documents[0].content }}"
))
pipe.add_component("llm", OpenAIGenerator(model="gpt-4o-mini"))

pipe.connect("reader.documents", "prompt.documents")
pipe.connect("prompt.prompt", "llm.prompt")

result = pipe.run({"reader": {"urls": "https://en.wikipedia.org/wiki/HTTP_402"}})
print(result["llm"]["replies"][0])

Output shape

SkimReader.run(...) returns {"documents": [Document, ...]} — one Document per URL:

  • Document.content — the cleaned article body in Markdown.
  • Document.meta — always includes source (the URL), plus page metadata (title, byline, publishedAt, lang, excerpt, ...) unless include_metadata=False.

Configuration

SkimReader takes the following parameters:

Parameter Default Notes
api_key Secret.from_env_var("SKIM_API_KEY", strict=False) Card-plan API key. Get one free at skim402.com/pricing. Takes priority over private_key.
private_key Secret.from_env_var("SKIM_WALLET_PRIVATE_KEY", strict=False) Wallet lane only. Hex Base wallet private key. Ignored when api_key resolves.
base_url https://skim402.com Override the API base URL. For self-hosting or local development.
max_price_usd 0.01 Wallet lane only. Hard cap on per-call price in USD. Skim is $0.002/call.
include_metadata True Populate each Document's meta with page metadata.
timeout 60 Per-request timeout in seconds.

The component supports pipeline serialization (to_dict/from_dict). When the key comes from an environment variable (the default), it is stored as a reference to that variable name — never the raw value. An inline Secret.from_token("...") is runtime-only and will not serialize.


Security

  • No outbound telemetry from this package. skim-haystack only talks to skim402.com (or whatever you set as base_url). No analytics, no error reporting, no phone-home.
  • Wallet lane: the private key only signs payment authorizations locally — it never leaves your machine.

Links


License

MIT

Release files for skim-haystack 0.1.4

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for skim-haystack 0.1.4
File Size Uploaded
skim_haystack-0.1.4.tar.gz 10.1 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for skim-haystack 0.1.4
File Interpreter ABI Platform
skim_haystack-0.1.4-py3-none-any.whl Python 3 none any Details

Total release size: 18.3 kB

Release files / skim_haystack-0.1.4.tar.gz

Download URL skim_haystack-0.1.4.tar.gz
Size 10.1 kB
Tags Source
SHA-256 checksum
How to use checksums
1d143962156f2c557bf77a0f656bce74387167d91e867bf447b7234f3244e04b
BLAKE2b-256 checksum
How to use checksums
437c932e0d8e12ec243c712729d79afb9a343a5dfde69fd32b0c986eb5198057
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.9.5

Release files / skim_haystack-0.1.4-py3-none-any.whl

Download URL skim_haystack-0.1.4-py3-none-any.whl
Size 8.2 kB
Tags Python 3
SHA-256 checksum
How to use checksums
4fc3f09b25fa20dc72b74ff19a1a9542404b01b1a88db62c5029be77188da9d7
BLAKE2b-256 checksum
How to use checksums
8df58d4e03afc6156443c516c744955b7a3f8e09dcd870bedace1be904ceedd4
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.9.5

Release history Release notifications | RSS feed

This release

0.1.4 This release

2 release files

0.1.3

2 release files

0.1.2

2 release files

0.1.1

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page