Some links on this page are affiliate links: if you buy through them we may earn a commission, at no extra cost to you.
Node-Unblocker is an Express-compatible Node.js proxy that rewrites and forwards web pages; it is not a scraper that selects fields or returns structured records. Install the unblocker package, mount its middleware early in an Express app, and connect the server’s upgrade event to Unblocker for proxied WebSockets. Then use a compatible page through the proxy and extract the content with your own code. It handles many ordinary pages, but its documentation says OAuth flows, pages using postMessage, and several advanced sites do not work out of the box.
What Node-Unblocker does—and what scraping still requires
Node-Unblocker is a JavaScript web proxy, published on npm as unblocker. It sits between a client and a remote website, forwards traffic, and adjusts page content so links and browser requests can continue to work through the proxy. The project describes processing data as it arrives instead of buffering the entire response, and rewriting URLs only when necessary to preserve relative links.
That makes it useful when you need a proxy layer for viewing or interacting with compatible web pages. It does not, by itself, decide which text, links, prices, or other fields you want, nor does the package description promise a structured scraping output. Your application needs a separate extraction step—for example, code that parses returned HTML or a browser automation workflow that reads rendered page content.
Keep the distinction clear: proxying changes how requests reach a site; scraping extracts information from the resulting page. If a target relies on an unsupported login flow or advanced browser behavior, adding extraction code will not fix the proxy compatibility problem.
#1 Best Overall
Install the package and start an Express proxy
The npm listing identifies version 2.3.1 and documents an Express middleware integration. Create a project, install Express and unblocker, then save the following as app.js:
mkdir node-unblocker-proxycd node-unblocker-proxynpm init -ynpm install express unblocker- Save the code below as
app.js.
const express = require('express');
const Unblocker = require('unblocker');
const app = express();
const unblocker = new Unblocker({ prefix: '/proxy/' });
// Mount early so proxied requests reach Unblocker before other routes.
app.use(unblocker);
const server = app.listen(process.env.PORT || 8080, () => {
console.log(`Proxy listening on port ${server.address().port}`);
});
// Forward WebSocket upgrade requests through Unblocker.
server.on('upgrade', unblocker.onUpgrade);
Start it with node app.js. The app listens on port 8080 by default, or on the port supplied in the PORT environment variable. The dedicated /proxy/ prefix distinguishes proxied traffic from your application’s own routes.
Use the URL form accepted by the version you installed when navigating to a target through that prefix. The package’s parser convention is version-specific enough that you should verify the exact target-URL path in the installed version’s documentation rather than assume that raw, encoded, or otherwise transformed URL forms are interchangeable. The middleware setup above is the documented integration pattern; it does not establish a universal target URL syntax.
Do these 3 things before closing this tab:
1Repair Windows errors before they cause bigger problems2Fix the driver behind crashes, sound loss and screen glitches3Clear out junk files and repair common Windows errorsHow to use the proxy in a scraping workflow
- Confirm the target is compatible. Begin with a public, ordinary page or a standard login form that you are authorized to access. The package says standard login forms and most AJAX content work well; it calls out important exclusions below.
- Open the page through the proxy. Use the target URL format documented for your installed version under the
/proxy/prefix. Check that the page and its internal navigation remain on the proxy rather than sending the browser directly to the target. - Inspect what the page actually returns. Determine whether the data is present in the proxied HTML or loaded by browser-side requests. Node-Unblocker can proxy and rewrite requests, but it does not guarantee that every site’s scripts or authentication behavior will function.
- Extract only the fields you need. Add your own HTML parsing or browser-side extraction to the application. Keep this separate from the proxy layer so you can tell whether a failure is caused by forwarding, page rendering, or your selectors.
- Validate a sample before scaling. Compare extracted values against the page, handle missing fields, and record failures. A page that appears visually complete can still have content absent from the HTML your extraction code receives.
For application-specific request adjustments and response transformations, Unblocker exposes requestMiddleware and responseMiddleware configuration options. The package also documents host, clientScripts, and processContentTypes. Their exact implementation should follow the documentation for the package version in your project; do not infer callback signatures or replace the defaults based on the option names alone.
Rank #2
Cookies, AJAX, and WebSockets
Unblocker’s built-in handling adjusts cookie paths for proxied use. Its client scripts help route XMLHttpRequests and WebSockets through the proxy. The WebSocket server hook is the server.on('upgrade', unblocker.onUpgrade) line in the setup above; omitting it means the documented WebSocket upgrade path is not attached to the HTTP server.
Keep standard middleware enabled unless you have a specific reason to replace it. The package’s standardMiddleware option can disable built-in middleware for advanced customization, but doing so means your application is taking responsibility for behavior those defaults provide. A custom request hook is the place to adjust outbound requests; a response hook is intended for application-specific response transformations.
Known compatibility limits and anti-bot expectations
The package documentation says OAuth login forms and sites using postMessage are unlikely to work out of the box. It specifically names Roblox, Discord, YouTube, and Instagram as advanced sites that do not currently work, without giving a timeframe for support. Treat those statements as package-documented limitations, not a promise that every page on a named domain fails in exactly the same way.
What’s actually slowing this PC down?
Pick the symptom - the matching free tool is one click away.
Node-Unblocker is a proxy and URL-rewriting layer, not a documented CAPTCHA-solving or browser-fingerprint bypass service. Given the stated compatibility limits, it should not be treated as a reliable way to get through CAPTCHA, fingerprint checks, or JavaScript challenges. If the target blocks the proxied session or depends on unsupported browser behavior, changing selectors or adding more HTML parsing is unlikely to solve the underlying problem.
Rank #3
If the goal is only to obtain a visual record of a page rather than structured fields, a screenshot API is a different tool category. For that use case, ScreenshotNeo is a website screenshot API and MCP server; it captures images or PDFs rather than returning scraped records.
Diagnostics and deployment troubleshooting
Turn on package diagnostics
Run the app with broad Unblocker logging to see more of its internal activity:
DEBUG=unblocker:* node app.js
For middleware-only diagnostics, use DEBUG=unblocker:middleware. To exclude middleware diagnostics while enabling other debug namespaces, use DEBUG=*,-unblocker:middleware. These are documented debug patterns; use the one that fits the failure you are investigating.
Free tools Windows power users keep installed
One-click scans. No signup required.
Fix redirect loops behind Nginx
The package troubleshooting note recommends setting merge_slashes off in Nginx when the application is behind that reverse proxy. Nginx’s slash normalization can otherwise contribute to endless redirects. Apply the setting in the relevant Nginx configuration context, reload Nginx, and retest the proxied route.
Rank #4
Separate proxy failures from extraction failures
- The app does not start: confirm the project installed both Express and
unblocker, and that the file is run from the project directory. - The local app responds but the target does not: verify the prefix and target URL form against the installed package’s parser documentation, then inspect debug output.
- The page loads but links or AJAX requests escape the proxy: check that the built-in middleware and client scripts have not been disabled or replaced.
- WebSocket-dependent content fails: confirm the HTTP server has the documented
upgradelistener attached. - Login or advanced-site behavior breaks: determine whether the flow depends on OAuth or
postMessage; those are documented limitations rather than ordinary selector problems. - Requests redirect indefinitely behind Nginx: check the package’s recommendation to turn off
merge_slashes.
Licensing, operating cost, and responsible use
The npm package listing states that unblocker is licensed under AGPL-3.0 and mentions commercial licensing and support from the copyright holder. Review the license obligations for your intended use, particularly before embedding or modifying the library in a hosted service; do not assume that running it as a service removes obligations that may apply to your distribution or modifications.
The package information cited here does not establish a performance benchmark, comparative price, or guarantee of target-site access. Your operational cost depends on where and how you deploy the Node.js application and how much traffic it handles. Account for maintenance of the proxy server, monitoring, and the possibility that a site changes behavior. Also ensure your collection follows the target site’s terms, robots directives, privacy requirements, and applicable law.
Or skip the browser setup
If you need screenshots rather than extracted records, ScreenshotNeo can return a screenshot or PDF with one GET request. It is not a replacement for a scraper that extracts structured page data.
Recommended Free Tools
const q = new URLSearchParams({ access_key: 'YOUR_API_KEY', url: 'https://stripe.com' });
const res = await fetch(`https://api.screenshotneo.com/v1/shot?${q}`);
See the ScreenshotNeo API documentation for request options and response handling. Before capture, it can accept cookie or consent banners and remove known consent platforms, newsletter popups, and chat widgets; each of those steps can be turned off. Bot checks, blank pages, failed loads, timeouts, and cache hits are not billed, and response headers identify the page verdict and billing status. An MCP server provides screenshot tools for Claude, Cursor, and other MCP clients. The free plan includes 1,000 shots per month without a card; paid plans start at $5 for 3,000 shots.
Sign up for ScreenshotNeo’s free plan: 1,000 screenshots a month, no card required.
Frequently Asked Questions
Does Node-Unblocker extract data into JSON?
No. It proxies and rewrites pages; extracting fields and shaping them into records is application work.
Can I use the package without Express?
The package information here documents an Express-compatible middleware integration; it does not establish a supported setup for other frameworks.
What license does the npm package use?
The npm listing identifies AGPL-3.0 and mentions commercial licensing and support from the copyright holder.
Quick Recap
Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.

