Deep Research Web UI
Deep Research Web UI takes a Firecrawl API base address, so its searches and page reads can run on the SpecStream Search API and Extract API. Set the provider to firecrawl and the base to https://api.specstream.ai/firecrawl, in Server Mode or in the browser settings.
SpecStream for Deep Research Web UIAgent frameworks & buildersWhat you need
- Deep Research Web UI, from the Docker image
anotia/deep-research-webor from source, with an AI provider set up as usual. - A SpecStream API key. New accounts start with $10 of credit, no card. Create an account.
- 1
1. Get a SpecStream API key
Get your key on the Search API screen of your SpecStream workspace. The app sends it as a Bearer token, the way it sends a Firecrawl key.
- 2
2. Server Mode: set four variables
In Server Mode the keys stay on the server and users configure nothing. Set the search provider to
firecrawl, put your SpecStream key inNUXT_WEB_SEARCH_API_KEY, and setNUXT_WEB_SEARCH_API_BASEto the SpecStream Firecrawl address. Keep your AI variables as they are:Shell - 3
3. Or with an .env file
Copy
.env.exampleto.env, change these three lines, and start the container with--env-file .env. Write the address without/v2: the app's Firecrawl SDK adds/v2/searchand/v2/scrapeto it..env - 4
4. Client Mode: set it in Settings
In Client Mode, each user sets the provider in the browser. Open Settings (the gear button), open the Web Search Provider section, and choose Firecrawl. Paste your SpecStream key into API Key and
https://api.specstream.ai/firecrawlinto API Base URL, then select Save. The settings are stored in your browser, and the browser calls SpecStream directly. The SpecStream address accepts calls from any web origin, so this works on a static deployment such as EdgeOne Pages too. - 5
5. Run a research and check it
Start a research on something from this week. The search tree fills with results, and the report links its sources. Each call is in the request log of your SpecStream workspace with the route as its endpoint, and each charged reply carries an
X-Balance-Centsheader with your balance in cents.
Why the Firecrawl setting
The app reads a custom API base only for firecrawl and crw. Its Tavily, Google PSE and You.com paths call fixed addresses, so the Firecrawl path is the one that can point at SpecStream. You keep the rest of the app as it is: the AI provider, the research depth and breadth, the history and the PDF export.
What the app sends
- Each search query is one
POST /firecrawl/v2/searchwithlimit5 andscrapeOptionsasking formarkdown. SpecStream answers in Firecrawl's shape,data.web[]withurl,title,descriptionandmarkdown. When the research plan wants news, the app asks forsourcesnews, and SpecStream runs a news search. - When the model wants to read a source in full, the app sends
POST /firecrawl/v2/scrapewithformatsmarkdown andonlyMainContent. SpecStream answers withdata.markdownanddata.metadata. The app reads at most 2 pages per search node and 6 per research run, with a 20 second timeout each. - The app applies no language filter on the Firecrawl path. The Query Language setting still changes the language the model writes its queries in.
Cost
Each search through the Firecrawl address is one Search API call at $1 per 1,000 searches of up to 10 results, the fast tier every drop-in address runs on. The app asks for 5 results, so every search is in that price. Each page read through /v2/scrape is one Extract API page at $0.80 per 1,000 pages, and a page with no text is not charged. Both come out of your balance with no quote and no approval. New accounts start with $10 of credit, no card. Balance and billing has the details.
Next to Tavily, Firecrawl and the free options
| Provider in the app | Search | Page reads | Custom address |
|---|---|---|---|
firecrawl with the SpecStream address | $1 per 1,000 searches of up to 10 results | $0.80 per 1,000 pages with text | Yes, NUXT_WEB_SEARCH_API_BASE |
firecrawl with Firecrawl's own API | Firecrawl's plan | Firecrawl's plan | Yes |
tavily (the default) | Tavily's plan | Tavily extract | No |
parallel | Keyless free tier, Server Mode only, shared rate limits | Yes | No |
If searches fail
401withmissing_api_key: the key did not reach SpecStream. CheckNUXT_WEB_SEARCH_API_KEY, or the API Key field in Client Mode.- A
404or an empty search tree: check that the base ishttps://api.specstream.ai/firecrawl, with no/v2and no trailing path. 429withRetry-After: the account used its calls for the minute, or search is busy. Wait that many seconds. Nothing is charged. A lowerNUXT_PUBLIC_WEB_SEARCH_CONCURRENCY_LIMIT, 2 by default, sends fewer searches at once.- In Server Mode, the
NUXT_PUBLIC_values and the keys are read when the server starts, so restart the container after a change.
Other ways to use SpecStream
For a list with the same facts on every row, ask an assistant connected to the SpecStream MCP server at https://api.specstream.ai/mcp. That is Deep Search: priced per delivered row, with the most a run can cost shown before it starts. The Firecrawl migration page lists every Firecrawl parameter the address applies.
Switch back
Set NUXT_WEB_SEARCH_API_BASE back to empty, or clear API Base URL, and the app calls https://api.firecrawl.dev again. Then revoke the key in your SpecStream workspace. Questions go to [email protected].
More
SpecStream for Deep Research Web UI covers what it does in Deep Research Web UI on one page. Every other tool has its guide in Connect your tools. You see the most a request can cost before it starts, and the matches are paid from your balance. Billing has the details. For help, email [email protected].