specstream-haystack
Give your Haystack pipeline or agent any list from the live web. Search components hand a pipeline pages to read; SpecStream hands it the finished list. Ask in plain words – "dental clinics in Lisbon with online booking", "US startups that filed a $5M+ Form D this week" – and get back every matching row as a Document, each with the page it was read from. The list starts only within a price you set in code, and the model can't raise it.
pip install -U specstream-haystack
export SPECSTREAM_API_KEY=ss_live_... # Agents & API in your SpecStream workspace
A free account comes with $10 of work to use within 30 days and needs no card: specstream.ai.
In a pipeline
from haystack_integrations.components.fetchers.specstream import SpecStreamListFetcher
fetcher = SpecStreamListFetcher(max_price_usd=3, max_results=25)
result = fetcher.run(request="Breweries in Portland, Oregon that host events, with their website")
for doc in result["documents"]:
print(doc.meta["source_url"], doc.content)
Each Document is one row. content is the row as JSON. meta carries source_url (the page the row was read from), checked_at, list_id, list_link, position, request and fields (the row's columns as a dict).
run also returns list_id, status, list_link and a message when the list was still running. When the quoted price is above max_price_usd, or the request is too vague to price, nothing runs and SpecStreamError explains why.
As an agent tool
from haystack.components.agents import Agent
from haystack.components.generators.chat import OpenAIChatGenerator
from haystack.dataclasses import ChatMessage
from haystack_integrations.tools.specstream import SpecStreamListTool
agent = Agent(
chat_generator=OpenAIChatGenerator(model="gpt-4o"),
tools=[SpecStreamListTool(max_price_usd=5)],
)
result = agent.run(messages=[ChatMessage.from_user("Find open grants for urban beekeeping in the EU and list their deadlines.")])
print(result["last_message"].text)
The agent writes the request and picks how many rows. You decide what one list may cost.
Retries don't buy twice
The same request with the same limits, in the same hour, reaches the run it already started instead of starting another. A retried step never pays for the list twice.
MIT licensed. Source: Specstreamai/specstream-tools.
Metadata
Release files for specstream-haystack 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| specstream_haystack-0.1.0.tar.gz | 10.1 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| specstream_haystack-0.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 21.3 kB
Release files / specstream_haystack-0.1.0.tar.gz
| Download URL | specstream_haystack-0.1.0.tar.gz |
|---|---|
| Size | 10.1 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
980f1d0b25bf4a3b221b51544489cec205c4eded455107ce8836c4e36457e17b
|
|
BLAKE2b-256 checksum How to use checksums |
4353e752e7e963a4fff9cee28d585e518aced8aa0e0f53f82c90bc204450db2a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.15
|
Release files / specstream_haystack-0.1.0-py3-none-any.whl
| Download URL | specstream_haystack-0.1.0-py3-none-any.whl |
|---|---|
| Size | 11.2 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
bba6459eed7b82dcbbcad553efc8e87bbc819990216ec1273d39f807ae486612
|
|
BLAKE2b-256 checksum How to use checksums |
b09d7538237d9267f8ebd3da2a3e97ea7bc59c090d52312769b01a9c784e3564
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.15
|