nvNeuralVerge

ZenRows Alternative: Typed JSON Instead of Rendered HTML

A zenrows alternative that returns typed JSON instead of rendered HTML: how it compares, one real request over REST or MCP, and what it costs at 5 points.

By the NeuralVerge team · 12 min read · Updated October 2026

▸On this page

A zenrows alternative is worth a look when your problem is not "how do I get the page" but "how do I get the fields out of it without owning a parser". ZenRows is a web data service known for reaching hard pages: JavaScript rendering, anti-bot handling, geo-targeting. NeuralVerge's AI extraction starts from the other end: you send a URL and a description of the fields, and the call returns typed JSON, over REST or MCP, at a flat 5 points per call.

The short version

  • —The difference is the default. ZenRows is organised around fetching a page first, and also offers structured extraction. NeuralVerge's extraction call always returns fields as JSON, never the rendered page.
  • —ZenRows is the stronger fit for heavily defended sites, logins, multi-step flows and persistent browser sessions. NeuralVerge is the stronger fit when you want fields from many different pages without writing or repairing a parser per site.
  • —Cost: AI extraction is 5 points per call, whatever the page size, billed even when a URL does not load. We do not quote ZenRows prices, because the page we read did not state paid tiers.
  • —Nobody publishes a head-to-head, on success rate, field accuracy or latency. Run your hardest URLs through both before you decide.

All ZenRows details below come from one reading of its public homepage and are hedged accordingly. Product details change, so check their documentation for current behaviour.

QuestionFetch-first (ZenRows, as publicly described)NeuralVerge AI extraction
What comes back by defaultThe page as HTML, Markdown, text or PDFThe fields you described, as JSON
Structured extractionA separate Extract capability, with an automatic modeThe call itself, with optional JSON Schema
Defended sitesPublicly emphasised: anti-bot handling, geo-targetingHandled behind the call; no proxy or browser controls to tune
Logins and browser sessionsA Browser capability is listedNot supported
Crawling and batchesCrawl and Batch are listedOne URL or document per call
PDF inputNot compared hereSame call and response shape as a URL
PriceCheck their current plans5 points per call

How ZenRows works and where it wins

Every web data tool answers two questions: how does the page get loaded, and what shape is the answer? Loading, meaning rendering JavaScript and getting past defences, is a hard engineering problem, and it is where fetch-oriented services earn their keep. The answer shape is where pipelines quietly accumulate cost.

What a fetch-first service returns

According to ZenRows' public site, its Fetch capability returns a page as HTML, Markdown, text or PDF, and handles anti-bot systems, JavaScript rendering, geo-targeting and sessions. The same site lists Extract (structured JSON from a page, using an automatic mode that needs no selectors), Crawl, Batch and Browser sessions. Treat that as a summary of the marketing page as we read it.

When you take the fetch route and want fields, one step remains after the response: something has to turn the HTML or Markdown into your record. That something is a CSS selector set, an XPath rule, a regex or an LLM prompt you write and maintain. Each is reasonable, and each is code with an owner.

Where ZenRows is the better choice

  • —Aggressively defended targets. Anti-bot handling is the area ZenRows is most explicit about. If your whole workload is a handful of well-defended sites, a service built around that problem is a serious option and you should test it first.
  • —Interactive flows. Logging in, clicking through several steps or holding a persistent browser session is what a browser capability is for. An extraction call is not a substitute.
  • —Whole-site jobs. Walking an entire site is a crawl or batch job, not a single extraction call.
  • —Control over the transport. Teams that want to choose proxy tiers or geography themselves get knobs here that NeuralVerge deliberately does not expose.

How NeuralVerge works and where it wins

AI extraction takes a URL or a document plus plain-language instructions and returns the fields as JSON. There is no HTML mode to choose and no parse step on your side. If you need a fixed shape, you can pin it with a JSON Schema in the request settings; otherwise the instructions are enough.

The call in four steps

  1. —Send a URL or a document. The request carries the address of a public page or a PDF, plus instructions describing the fields.
  2. —The page is rendered. JavaScript-heavy pages are rendered the way a browser would show them, so content that only appears after scripts run is present before extraction starts.
  3. —The content is cleaned. Navigation, ads and boilerplate are removed so the page's substance, not its chrome, is what gets mapped to fields.
  4. —Fields come back as JSON. The remaining content is mapped to the fields you described and returned. The step-by-step guide to AI extraction covers render, clean, map and return in more detail.

Where typed extraction is the better choice

Where the parsing code lives. With a fetch-first flow, the parser lives in your repository. When a site renames a class or moves a section, selectors return empty fields or the wrong text, and someone gets paged or, worse, nobody does. With extraction by meaning, a layout change a human would barely notice does not require a code change. It does not make extraction infallible: a model reading a page can misread it, which is why a good pipeline checks output rather than trusting it blindly.

What a missing field becomes. A selector that finds nothing returns nothing, or sometimes the neighbouring element. How a given extraction call handles a field that is not on the page is worth testing on a real page rather than taking on trust from any vendor, including us.

Documents as well as pages. The same call accepts a PDF as well as a URL, and the response has the same shape either way. If your workflow mixes company websites and fact-sheet PDFs, that is one code path rather than two. We have not compared ZenRows' handling of PDF input, so we claim nothing beyond the output formats its Fetch capability lists.

One account for the rest of the pipeline. Extraction sits next to AI research and a catalogue of ready-made sources on one account. That is not a reason to pick it for extraction alone, but it matters if extraction is one step in a longer pipeline.

A worked example: Acme Oy

Say a small team is building a monitoring tool for Acme Oy, a fictional Finnish company. They want to track a handful of public pages: a company profile, a product page and a careers page. Each page has a different layout, and none has an API.

On a fetch-first route

The team gets three HTML responses and writes three sets of selectors. That is quick on day one. By week eight one site has redesigned its careers page, a second has added a cookie banner whose text leaks into a field, and the third loads its main content only after a click. Each is a small fix, and each is also a day someone had to notice.

On a typed-extraction route

The team writes three one-sentence instructions, optionally pins a schema so downstream code can rely on key names, and receives JSON. The redesign does not change the instruction. What the team still owns is validation: checking that required fields are present, that values are in the expected range, and that an empty field triggers a review rather than a silent null in a dashboard.

Moving over from a fetch-first setup

  1. —Pick the ten pages that cost you the most maintenance and leave the defended ones where they are.
  2. —Turn each selector set into one sentence listing the fields. Keep the old output as the test fixture.
  3. —Run both routes side by side for a week and diff the records field by field.
  4. —Add checks for required fields and value ranges on the new route before you retire any selector code.
  5. —Retire parsers one site at a time, not all at once.

The point of the example is not that one route is always cheaper. It is that the maintenance cost moves: in one case it sits in selectors, in the other in output checks. For many teams the second is the smaller job, but teams with a few critical, heavily defended targets may reasonably decide otherwise.

REST and MCP

AI extraction is reachable two ways, with the same inputs. A backend service calls the REST endpoint with an API key. An MCP client such as Claude, ChatGPT or Cursor connects to the hosted MCP server, signs in through the browser, and sees extraction as the run_extract tool, which an agent can call whenever it meets a URL. MCP calls are priced the same as the equivalent REST call. For connecting a client, see the MCP setup walkthrough for Claude.

Here is the request from the product's documented example. The URL is the illustrative example.com/company/acme address used in the docs, not a live site.

curl https://api.neuralverge.ai/functions/v1/run-extract \
  -H "Authorization: Bearer <API_KEY>" \
  -H "Content-Type: application/json" \
  -d '{
    "url": "https://example.com/company/acme",
    "instructions": "Extract the company name, founding year and employee range.",
    "settings": { "country_code": "us" }
  }'

In a live check of an extraction call with no schema, the fields came back as JSON text in the human field of the response, and machine was null. So when you send instructions only, parse human rather than reading machine, even though the sample code in the docs reads machine. Schematically, the response looks like this (a shape, not a capture):

{
  "kind": "extract",
  "url": "https://example.com/company/acme",
  "human": "<the requested fields as JSON text>",
  "machine": null
}

We have not verified where a result lands when you pin a schema in the extract settings, so confirm that in the documentation before you build on machine. An agent calling run_extract gets the same response, which means a small record to use directly rather than a page of markup to read. A fetch-first tool in an agent loop hands the model the page itself, which spends context on markup and leaves the parsing to the model on every call.

Cost and limits

AI extraction is a flat 5 points per call, whatever the size of the page, as listed under Action costs on the pricing page. Points come from a monthly plan. By simple arithmetic on the list prices, the plans run from 50,000 points for $50 per month up to 1,000,000 points for $1,000 per month, which is the same $0.001 per point on each, so a call costs half a cent at those list prices. Check the pricing page for current plans.

One billing detail matters for planning: in a live check, a URL that did not load returned null and was still billed 5 points. Budget for misses in a batch of addresses you have not verified.

We are not putting a ZenRows price next to that. Its public site says there is a recurring free plan with a monthly credit allowance and that paid upgrades exist, but the page we read did not state paid tiers or per-request rates, and credit costs there can depend on the options you turn on. To compare honestly, run your real target URLs through each service and count total spend per usable record, including the engineering time to turn a response into your fields.

The limits, plainly:

  • —Not a crawler. One URL or document per call.
  • —No interactive flows. Logging in, clicking, filling forms and holding a browser session are out of scope.
  • —Model-based mapping can be wrong. A field can be misread on ambiguous pages. Validate the output.
  • —No knobs for defences. You do not choose proxy tiers. That is a feature for teams who do not want to, and a limitation for those who do.
  • —Public pages only. The call is for public URLs and documents.

How to decide

  • —Run your ten hardest URLs through both. Include the defended ones, the JavaScript-heavy ones and one page with a field that is genuinely missing.
  • —Check what a missing or unreachable field becomes. Empty, null, guessed or the wrong element, and whether you are billed for it.
  • —Count the code between the response and your database. Selectors, cleaning, retries, validation. Which side owns each piece?
  • —Re-run last month's saved pages after a redesign, or ask each vendor how a layout change is handled.
  • —Confirm input types. If PDFs matter, test a real one through the same call.
  • —Price per usable record, not per request. Include retries, empty results and the time spent fixing parsers.
  • —Match the use case. Company profile enrichment, competitor page monitoring, agent tool calls, document intake and long-tail sources with a few hundred pages each suit typed extraction. A few critical, heavily defended targets or anything behind a login point to a fetch-first service.
  • —Consider using both. Keeping a fetch-and-parse service for a few defended sites and typed extraction for the long tail is a legitimate setup.
  • —Read both vendors' current terms and docs. This article reflects public pages at the time of writing.

Frequently asked questions

Does ZenRows only return HTML?

No. Its public site describes a Fetch capability that returns a page as HTML, Markdown, text or PDF, and a separate Extract capability that turns a page into structured JSON without selectors. The practical difference from NeuralVerge is where the default sits: ZenRows is organised around fetching a page first, while NeuralVerge's AI extraction call always returns typed JSON.

Is NeuralVerge a replacement for ZenRows' anti-bot handling?

Not something this article can promise. ZenRows publicly emphasises anti-bot handling, geo-targeting and browser sessions. NeuralVerge renders the page behind one call and you run no proxies or browsers yourself, but neither vendor publishes a head-to-head success rate, so the honest way to compare is to run your own hardest target URLs through both.

What does an AI extraction call cost?

A flat 5 points per call, regardless of page size, as listed on the NeuralVerge pricing page. Points come from a monthly plan, so the dollar cost per call depends on the plan you are on. Check the pricing page for current plans.

What happens if the URL does not load?

In a live check, a URL that did not load returned null and was still billed 5 points. Verify addresses before you send a large batch.

Do I have to define a schema before I call it?

No. You describe the fields you want in plain language in the instructions. In a live check with no schema, the fields came back as JSON text in the human field and machine was null. You can add a JSON Schema in the extract settings when you need an exact, fixed shape.

Can I call it from an AI agent over MCP?

Yes. AI extraction is available as the run_extract tool on NeuralVerge's hosted MCP server, and as a REST endpoint. Both take the same inputs and are priced the same.

Can I use both tools together?

Yes, nothing stops that. A team might keep a fetch-and-parse service for a few heavily defended sites it already maintains, and use typed extraction for the long tail of pages where it does not want to write or repair parsers.

About NeuralVerge

Give your agents structured, cited, real-world data from 300+ sources and the open web — through one API or MCP server.

AI Extraction on the NeuralVerge blog.