ScraperFlyAI-ready Web Data API

rendering

API to scrape Vue websites with rendered output

ScraperFly helps teams scrape public Vue websites by comparing source HTML with rendered output, then enabling browser execution, waits, sessions, headers, or routing only when client-side rendering changes the result. Return rendered HTML, text, Markdown, JSON metadata, screenshots, or PDFs without maintaining your own browser workers.

Vue rendering

Capture Vue routes after the app finishes building the page

Vue websites can return a clean status while the first HTML response still contains only an app shell, route container, scripts, or hydration data. The content a user sees may arrive after route transitions, async data loading, lazy components, or browser-side rendering.

ScraperFly gives teams a practical capture path for public Vue pages: inspect source HTML first, render only when the useful content appears after JavaScript, and return the result as rendered HTML, text, Markdown, JSON metadata, screenshots, or PDFs.

source shellasync renderfinal output
Developer testing a public Vue website route from source HTML to rendered output

Why can Vue pages look empty in raw HTML?

Vue applications often build the visible page in the browser. The first response may include a mount element, script bundles, route metadata, hydration payloads, or placeholder content. Then the browser runs JavaScript, resolves the route, fetches public data, hydrates components, and fills the page with listings, cards, prices, tables, article sections, profile details, or other useful content.

That difference matters for scraping. A parser that reads only the initial source response may see almost nothing even though the public page is complete in a browser. At the same time, not every Vue page needs browser rendering. Some targets expose useful metadata, server-rendered markup, links, or embedded payloads in source HTML. The best workflow compares source and rendered output before choosing the request profile.

Practical takeaway: Vue scraping should prove where the useful content appears before browser rendering becomes part of production.

What should you test before scraping a Vue website?

Start with one representative public route and inspect the source response. Check the body, final URL, response size, status, content type, scripts, metadata, route hints, and whether the target fields are already present. If the useful content exists in raw HTML, keep the request light. If source HTML is thin, render the page and compare the final DOM.

If rendered output contains the missing content, rendering is justified for that page type. If rendering still produces incomplete output, look at timing, route transitions, async data, redirects, region-specific content, session state, or blocked assets. Do not jump straight from "empty source" to "target impossible." A Vue page often needs the right capture timing rather than a completely different system.

Vue signal What it means Request decision
Useful fields appear in source HTML The route can likely be captured without a browser Use a lightweight HTML request first.
Source HTML is mostly a mount node and bundles The visible page may be built client-side Test rendered output before writing selectors.
Rendered DOM contains products, articles, tables, or cards Browser execution changes the captured result Use rendering for that route class.
Rendered page is incomplete after initial load Async data or lazy sections may need timing control Test wait behavior and inspect visual proof.
Output changes by cookies, locale, or location The public route may depend on context Use sessions, headers, or country routing only where they matter.

When should ScraperFly render a Vue website?

Render a Vue website when client-side JavaScript creates the useful public content. This often happens with route-based pages, product grids, search results, reviews, lazy article sections, public dashboards, filtered lists, and pages where data appears after an asynchronous request. Rendering gives your workflow the page after the browser has executed the app.

The important word is "when." Rendering should solve a demonstrated content gap. If raw HTML already contains the fields, the lighter request is usually better. If rendered output adds the required content, keep rendering tied to that route or template. If only some Vue routes need rendering, do not make the whole site use the heaviest profile.

For broader browser decisions, review the JavaScript rendering API and headless browser scraping API pages. If source markup is already complete, the HTML scraping API path may be the better default.

Which response format should a Vue workflow request?

Rendered HTML is useful when your parser needs the final DOM, selectors, attributes, links, lists, or component output after Vue finishes rendering. Text and Markdown are useful when the workflow needs readable content for search, classification, summaries, RAG ingestion, or review. JSON metadata helps with logging and debugging. Screenshots and PDFs are useful when people need visual proof of the rendered state.

This choice should be made around the downstream consumer. A parser may need rendered HTML. An AI pipeline may prefer Markdown. A monitoring workflow may need JSON metadata and a screenshot. A review or archive workflow may need a PDF. Choosing the format early keeps the rest of the system from growing unnecessary converters.

Workflow Best format to test Why it fits Vue pages Trade-off
DOM extraction Rendered HTML Captures route content after Vue builds the page Still needs field mapping and validation downstream.
Content and AI workflows Text or Markdown Reduces layout noise while keeping readable content May lose DOM relationships needed by precise parsers.
Debugging and operations JSON metadata Shows status, final URL, response size, and request context Does not extract target-specific fields automatically.
Visual QA Screenshot Confirms the rendered public page state Heavier and less searchable than text output.
Archive or approvals PDF Creates a portable human-readable record Usually not ideal as a parser input.

How should waits, sessions, headers, and routing be used?

Vue pages can require timing and context, but those controls should stay tied to evidence. Use waits when async data, route transitions, or lazy sections need more time before capture. Use sessions when related public requests depend on shared cookies or state. Use headers when a public route expects legitimate context such as language or accepted content type. Use country routing when page output changes by region, currency, availability, or redirects. Use stronger delivery only when repeated samples show the simple path cannot retrieve usable output.

Do not bundle all of those choices into one default Vue scraping helper. Keep profiles separate by route class. Static or server-rendered routes can stay light. Async routes can use rendering and waits. Regional routes can add country context. Visual QA jobs can request screenshots. That keeps cost, debugging, and production behavior easier to understand.

Use the sessions API for stateful flows, custom headers for request context, and routing controls when delivery path affects the public response.

What failures are common with Vue scraping?

Vue scraping often fails in ways that look similar unless you inspect the evidence. The source response may be a normal app shell, not a blocked page. The rendered capture may happen before async data finishes loading. The route may redirect. The page may change by locale or country. The response may be too large. A screenshot may show content while the requested text format does not contain enough structure. Or the downstream parser may expect automatic component-level extraction that the capture layer does not provide.

Good recovery starts by comparing source HTML, rendered HTML, screenshot state, status, final URL, content type, response size, request profile, and wait timing. Fix malformed URLs, unsupported formats, and authentication mistakes. Retry temporary failures with bounded backoff. Escalate rendering, waits, sessions, or routing only when samples prove they matter.

The reusable error-handling section below expands the general failure model. For Vue pages, the main rule is simple: do not confuse an app shell, a timing issue, and a blocked target.

How can Vue scraping stay affordable?

Cost stays predictable when rendering is treated as a targeted tool. Start with raw HTML. Render only the route classes where browser execution changes the result. Add waits only where async content needs them. Reserve screenshots, PDFs, sessions, premium routing, and country routing for workflows that prove they need those controls.

This keeps simple tests affordable and gives harder Vue pages a clear upgrade path. A small project can validate targets with credits. Recurring rendered workloads can move to monthly credits once the page mix is known. The buying decision becomes practical because the team understands which request profiles real targets require.

Review pricing after sampling representative routes so the estimate matches source capture, rendered capture, visual output, and routing needs.

Where should a team start?

Start with one public Vue route in the API Builder. Request source HTML first, then compare rendered output if the useful content is missing. Choose the output format your workflow can use immediately, and keep the final request profile visible before moving it into cURL, Python, Node.js, a queue, a monitoring job, or an agent workflow.

That first sample should answer the important questions: where does the content appear, does timing matter, which format is useful, and which controls are actually needed. Once those answers are clear, scaling the workflow becomes much less guessy.

Vue scraping

Check whether a Vue page exposes content before or after browser rendering

Vue websites can look empty in source HTML while the browser builds useful content after JavaScript runs. ScraperFly helps teams compare raw HTML, rendered DOM, final URL, status, response size, and visual proof before deciding which controls belong in production.

Raw HTML response mapped to visible page data
01

Raw HTML availability

Check whether the fields you need are already present in the first HTML response.

Best first test for simple pages, articles, docs, listings, and product details.

Before and after JavaScript rendering comparison
02

JavaScript dependency

Compare raw HTML with the rendered DOM or screenshot before turning on browser rendering.

Use rendering when raw HTML is only a shell and scripts create the useful content.

Cookies, consent, session and access context for scraping
03

State & access context

Identify whether cookies, consent, login boundaries, pagination, or the same visitor state affect the response.

Use sessions and headers when continuity changes the data you receive.

Regional content variations across countries and routes
04

Geo/content variation

Test whether country, language, currency, inventory, SERP, ads, or route reputation changes the result.

Use geo or premium routing only when the target proves the response varies by route.

Checks before scraping Vue websites

Where is the target field?

Find whether the field exists in raw HTML, rendered DOM, an API call, structured data, a file, or a later interaction state.

What changes the response?

Sample a few URLs and compare status, final URL, content length, redirects, empty states, and visible result differences.

What context is required?

Mark any dependency on consent, locale, cookies, headers, authentication boundary, pagination, filters, or previous requests.

What does failure look like?

Define the signals for blocked, partial, stale, redirected, empty, timed-out, or region-mismatched responses before scaling.

How Vue behavior changes scraping setup

Fetch mode

Raw HTML availability decides whether the first request can stay simple or needs rendering, waits, screenshots, or extraction.

Request context

State requirements decide whether to add headers, cookies, sessions, consent handling, or a stable visitor profile.

Routing choice

Geo and reputation findings decide whether standard routing is enough or a country/premium route is justified.

Validation rules

Known failure states become checks for retries, escalation, QA review, and deciding when a lighter profile is still complete.

Vue request builder

Build a Vue scraping request that stays readable from test to production

Start with a simple capture, then add rendering, waits, sessions, headers, routing, or visual output only when target evidence shows the Vue app needs it.

HTML
Source check

Inspect source HTML before turning on the browser

Some Vue pages expose useful metadata, links, script data, or server-rendered content without a full browser pass.

htmlrender=false
JS
Rendered page

Render the page when Vue loads the useful content client-side

Browser execution can reveal listings, profiles, product cards, route-specific content, and lazy-loaded sections.

render=truewaits
OUT
Output fit

Choose the response shape that reduces downstream cleanup

HTML, text, Markdown, JSON metadata, screenshots, and PDFs support different Vue scraping and QA workflows.

textmarkdownjson

Controls that matter for Vue scraping

url

The Vue route or public page being captured.

render

Browser execution when source HTML misses client-side content.

wait

Timing control for async data, lazy sections, and route transitions.

format

The output shape your parser or workflow expects.

cURL example

Generate Markdown with the same request shape you can move into production

curl "https://scraperfly.com/api/v1?url=https%3A%2F%2Fexample.com&format=markdown" \
  -H "apikey: YOUR_API_KEY"

Error handling

Turn scraping failures into fixes

Every web data workflow eventually meets a bad response: a missing URL, an invalid key, an empty HTML shell, a target 403, a rate limit, a render timeout, a broken PDF capture, or a JSON payload that does not contain the fields your product expected. ScraperFly is built to make those moments diagnosable. You inspect the HTTP status, the stable error code, the request profile, and the returned artifact, then choose the cheapest useful next move: fix the request, add credits, slow down, retry with backoff, enable rendering, change country, use premium routing, preserve headers, or validate the output before scaling.

Stable error shapeRetry decisionsCost-aware escalationOutput validation
Developer reviewing code and API request parameters on a laptop

01 / Request setup and access

Fix request mistakes first

Some failures are not target problems at all. They happen before ScraperFly can make a meaningful delivery attempt: a missing or malformed URL, an unsupported output format, an incompatible visual file type, a missing API key, an invalid key, or a key that has been paused or disabled. These errors are configuration signals, not retry signals: stop the workflow, point the developer to the exact field that needs correction, and keep credits focused on real target tests instead of repeated bad inputs.

missing_urlinvalid_urlunsupported_formatinvalid_api_key
  • Validate the URL and encoding before sending a batch.
  • Use supported outputs: HTML, text, Markdown, JSON, screenshot, or PDF.
  • Match screenshot file types to image output and PDF file type to PDF output.
  • Treat missing or invalid API keys as configuration work, not retry work.
Business dashboard with charts, documents and usage planning on a desk

02 / Credits, limits and concurrency

Separate limits from failures

A workload can fail because the account has no usable credits, the monthly plan limit has been reached, or concurrency is too aggressive for the current plan and target mix. ScraperFly makes those limits visible as operating signals, not mysterious scrape failures. That keeps the buying decision practical: start free, test the target, buy pay-as-you-go credits for uneven jobs, move to monthly credits when volume becomes predictable, and use backoff when request pressure is the real issue.

usage_limit_reachedrate_limitedcreditsbackoff
  • Use account status to check remaining credits before large runs.
  • Retry rate limits with backoff instead of immediately increasing pressure.
  • Keep one-off projects on pay-as-you-go when volume is uneven.
  • Move predictable recurring work to monthly credits when the pattern is proven.
Server room representing delivery paths, routing and network infrastructure

03 / Target delivery and network

Find delivery failures first

Many scraping platforms collapse delivery issues into a vague request failure. In production, that is not enough. The team needs to know whether the request timed out, the upstream target returned a temporary server error, the connection failed, the response was too large, redirects went somewhere unexpected, or the page came back as tiny HTML with no useful content. ScraperFly turns those failures into delivery evidence: try the light profile first, compare status and response size, then decide whether the next request needs backoff, another route, premium proxy, country targeting, or a narrower capture.

timeout5xxredirectsresponse_too_large
  • Retry temporary network and upstream failures with a controlled backoff policy.
  • Compare final URL, status, content type and response size across samples.
  • Escalate routing only when the response proves the simple path is unstable.
  • Treat oversized responses as a scope problem before scaling the same profile.
Digital security screen representing anti-bot and protected access signals

04 / Anti-bot, geo and access blocks

Read blocks before escalation

A target 403, 401, 429, CAPTCHA screen, WAF challenge, login wall, consent loop, or region-specific mismatch is not just an error; it is a clue about what the site expects from the visitor. Competitors often push teams toward a heavier default profile, but that can burn budget without proving the fix. ScraperFly's better path is evidence-based escalation: preserve realistic headers when context matters, use sessions when continuity changes the response, enable rendering when the useful content is browser-built, and choose premium or country routing when reputation or geography changes the result.

403429CAPTCHAcountry mismatch
  • Use premium routing when IP reputation is the proven bottleneck.
  • Use country targeting when language, currency, inventory or search results change by market.
  • Use headers, cookies and sessions when visitor state changes the response.
  • Reduce concurrency and add backoff when repeated requests trigger target throttling.
Developer preparing code and output artifacts on a laptop

05 / Rendering and output quality

Ship usable artifacts

A 200 status is not the same thing as a usable scrape. The raw HTML can be an empty app shell, Markdown can miss the main article, JSON can lack expected metadata, text can include noise, screenshots can be blank, and PDF or image output can fail if the browser step times out. ScraperFly is valuable because the same API request can move from raw HTML to rendered DOM, clean text, Markdown, JSON, screenshot or PDF, then be checked against the artifact your product actually needs. That reduces glue code, failed imports, and expensive batch runs that only discover bad output after the fact.

render_timeoutbrowser_render_failedJSON fieldsPDF/image output
  • Enable rendering when raw HTML is only a shell and the useful content appears after JavaScript.
  • Validate text, Markdown and JSON against expected fields before batching.
  • Use screenshot or PDF output when visual proof or audit evidence matters.
  • Treat blank or partial artifacts as quality failures even when HTTP status is successful.
ScraperFly fit

Cleaner error recovery

ScraperFly helps teams decide what to fix, what to retry, and what to escalate without turning every scrape into the most expensive request profile.

Stable error shape

Use HTTP status and error code together so application logic can choose between fixing input, refreshing credentials, slowing down, retrying, or escalating delivery.

Retry only when it helps

Network failures, rate limits, and temporary server errors can use backoff. Invalid URLs, unsupported formats, and bad keys should be corrected once.

Cost-aware escalation

Start with the light request profile, then add rendering, premium routing, country, sessions, headers, waits, or visual capture only when the failure proves it.

Validate output before scale

Confirm the real artifact your product needs: HTML, text, Markdown, JSON, screenshot, or PDF, before copying the same profile across a large URL set.

Rendering cost

Use heavier Vue scraping controls only when they improve the result

Many tests can begin with simple HTML capture. Rendering, waits, sessions, premium routing, screenshots, and PDFs are best added after samples prove they improve completeness or verification.

A lightweight HTML request returning a simple response
01

Basic fetch

Use a basic fetch when public HTML already contains the fields you need.

Lightest request profile; keep it when the response is complete.

JavaScript rendering producing a complete DOM
02

Rendering

Use rendering when raw HTML is a shell and JavaScript completes the page.

Heavier profile; use it only when browser output changes the result.

Several requests preserving cookies and visitor state
03

Stateful session

Use sessions when cookies, consent, locale, or pagination change the response.

Heavier state profile; preserve it only when continuity matters.

Request routing through geo and higher quality routes
04

Premium routing & geo

Use premium routing or geo only when origin, country, reputation, or regional content changes the result.

Heaviest routing profile; apply it only to targets that prove they need it.

What makes Vue scraping heavier

More infrastructure work

Browser rendering, routing choices, and longer waits mean the platform has to do more than return a simple response.

More target uncertainty

Redirects, empty states, rate limits, and challenge pages often require stronger delivery options or retries.

More state to preserve

Cookies, sessions, consent, and multi-page flows add moving parts that a plain stateless fetch does not have.

More evidence to return

Screenshots, PDFs, rendered output, and richer response artifacts are useful, but they are heavier than plain HTML.

How to control Vue scraping cost

Sample before scale

Test a small URL set first and group targets by the lightest profile that returns complete data.

Do not render by default

Inspect raw HTML before turning on rendering. Many public pages already contain the data you need.

Escalate by evidence

Move up only when the response shows missing content, state dependency, geo variance, or routing problems.

Measure useful results

Optimize around valid records delivered, not raw request volume. A lighter profile is best only when it stays complete.

Vue questions

Common questions about scraping Vue websites

Practical answers for teams deciding when Vue pages need rendering, waits, response format changes, visual proof, or a lighter source-first request.

Vue FAQ
Rendering

Source HTML and rendered pages

Vue pages should be checked before rendering becomes the default.

Can ScraperFly scrape Vue websites?

Yes. ScraperFly can capture public Vue pages and render them when JavaScript is required to expose useful content.

Why might raw HTML be incomplete on Vue pages?

Vue apps often build content in the browser after the initial HTML response has loaded.

Output

Formats after rendering

Rendered Vue pages can serve parsers, content systems, QA, and archives.

Can I get Markdown from a rendered Vue page?

Yes. ScraperFly can return Markdown or other supported formats after rendering when that output fits the workflow.

When should I request screenshots or PDFs?

Use screenshots or PDFs when the team needs visual proof, QA review, approvals, monitoring evidence, or archive records.

Controls

Waits and context

Add heavier controls only when the route proves it needs them.

When do Vue pages need waits?

Use waits when async data, lazy sections, or route transitions need more time before the useful content appears.

Can sessions, headers, or country routing matter?

Yes. Add them when shared state, legitimate request context, or regional output changes the public response.

Scope

What the API does

ScraperFly captures the page response; downstream code owns extraction.

Does ScraperFly parse Vue components automatically?

No. ScraperFly captures page output. Component-level parsing, field mapping, and normalization remain downstream.

How do I keep Vue scraping cost under control?

Start with raw HTML, render only when it improves the result, and reserve waits, visual files, sessions, or stronger routing for routes that prove they need them.